@spicainternational/ngx-sds-components 6.14.0 → 6.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/src/lib/drawer/drawer.component.mjs +44 -7
- package/esm2020/src/lib/modal/dialog/dialog.component.mjs +1 -1
- package/esm2020/src/lib/modal/modal.component.mjs +3 -6
- package/esm2020/src/lib/table-actions/table-actions.component.mjs +20 -7
- package/esm2020/src/lib/timeline/components/timeline.component.mjs +55 -16
- package/esm2020/src/lib/timeline/models/timeline.model.mjs +1 -1
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-drawer.mjs +43 -6
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-drawer.mjs.map +1 -1
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-modal.mjs +3 -6
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-modal.mjs.map +1 -1
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-table-actions.mjs +19 -6
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-table-actions.mjs.map +1 -1
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-timeline.mjs +56 -16
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-timeline.mjs.map +1 -1
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-drawer.mjs +43 -6
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-drawer.mjs.map +1 -1
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-modal.mjs +3 -6
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-modal.mjs.map +1 -1
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-table-actions.mjs +19 -6
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-table-actions.mjs.map +1 -1
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-timeline.mjs +54 -15
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-timeline.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/drawer/drawer.component.d.ts +8 -3
- package/src/lib/modal/modal.component.d.ts +1 -2
- package/src/lib/table-actions/table-actions.component.d.ts +5 -2
- package/src/lib/timeline/components/timeline.component.d.ts +9 -4
- package/src/lib/timeline/models/timeline.model.d.ts +19 -4
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Component, HostListener, Input, ViewChild, } from '@angular/core';
|
|
1
|
+
import { Component, HostListener, Input, Output, ViewChild, EventEmitter } from '@angular/core';
|
|
2
2
|
import { SdsTimelineService } from '../services/timeline.service';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
import * as i1 from "@angular/common";
|
|
@@ -26,6 +26,7 @@ export class SdsTimelineComponent {
|
|
|
26
26
|
* @memberof SdsTimelineComponent
|
|
27
27
|
*/
|
|
28
28
|
this.items = [];
|
|
29
|
+
this.pointInTimeItems = [];
|
|
29
30
|
/**
|
|
30
31
|
* The template to be used for custom rendering of the items.
|
|
31
32
|
*
|
|
@@ -47,6 +48,9 @@ export class SdsTimelineComponent {
|
|
|
47
48
|
* @memberof SdsTimelineComponent
|
|
48
49
|
*/
|
|
49
50
|
this.zoomPercent = 100;
|
|
51
|
+
this.zoomPercentChange = new EventEmitter();
|
|
52
|
+
this.viewOffsetPercent = 0;
|
|
53
|
+
this.viewOffsetPercentChange = new EventEmitter();
|
|
50
54
|
/**
|
|
51
55
|
* The maximum allowed zoom level of the timeline. In percent.
|
|
52
56
|
*
|
|
@@ -95,7 +99,7 @@ export class SdsTimelineComponent {
|
|
|
95
99
|
this.dayLabels = [];
|
|
96
100
|
this._timelineService = new SdsTimelineService(this.start, this.end, this.offSetMinutes);
|
|
97
101
|
this.presentationItems = [];
|
|
98
|
-
this.
|
|
102
|
+
this.presentationPointInTimeItems = [];
|
|
99
103
|
this.isDragging = false;
|
|
100
104
|
this.initialDragX = 0;
|
|
101
105
|
this.viewOffsetPercentDragStart = 0;
|
|
@@ -115,8 +119,11 @@ export class SdsTimelineComponent {
|
|
|
115
119
|
if (changes['items']) {
|
|
116
120
|
this.generateInternalTimelineItems();
|
|
117
121
|
}
|
|
122
|
+
if (changes['pointInTimeItems']) {
|
|
123
|
+
this.generateInternalTimelinePointInTimeItems();
|
|
124
|
+
}
|
|
118
125
|
if (changes['zoomPercent']) {
|
|
119
|
-
this.viewOffsetPercent = (this.zoomPercent - 100) / -2;
|
|
126
|
+
// this.viewOffsetPercent = (this.zoomPercent - 100) / -2;
|
|
120
127
|
}
|
|
121
128
|
if (changes['showDayLabels'] || changes['showHourLabels']) {
|
|
122
129
|
this.generateTicks();
|
|
@@ -131,17 +138,18 @@ export class SdsTimelineComponent {
|
|
|
131
138
|
const newZoomPercent = Math.min(Math.max(this.zoomPercent + -delta * 20, 100), this.maxZoomPercent);
|
|
132
139
|
const deltaZoomPercent = newZoomPercent - this.zoomPercent;
|
|
133
140
|
this.zoomPercent = newZoomPercent;
|
|
141
|
+
this.zoomPercentChange.emit(this.zoomPercent);
|
|
134
142
|
// get the relative position of the cursor on the viewport so we can zoom in into this position
|
|
135
143
|
const x = event.clientX - this._viewport?.nativeElement.getBoundingClientRect().left;
|
|
136
144
|
const cursorRelativePosition = x / this._viewport?.nativeElement.getBoundingClientRect().width;
|
|
137
|
-
this.viewOffsetPercent = this.viewOffsetPercent - deltaZoomPercent * cursorRelativePosition;
|
|
138
|
-
this.constrainOffset();
|
|
145
|
+
// this.viewOffsetPercent = this.viewOffsetPercent - deltaZoomPercent * cursorRelativePosition;
|
|
146
|
+
this.constrainOffset(this.viewOffsetPercent - deltaZoomPercent * cursorRelativePosition);
|
|
139
147
|
}
|
|
140
148
|
}
|
|
141
149
|
//#endregion
|
|
142
150
|
//#region dragging
|
|
143
151
|
onDragStart(event) {
|
|
144
|
-
if (this.enableZoomAndDrag) {
|
|
152
|
+
if (this.enableZoomAndDrag && this.zoomPercent > 100) {
|
|
145
153
|
event.preventDefault();
|
|
146
154
|
this.isDragging = true;
|
|
147
155
|
this.viewOffsetPercentDragStart = this.viewOffsetPercent;
|
|
@@ -178,16 +186,20 @@ export class SdsTimelineComponent {
|
|
|
178
186
|
const diff = currentX - this.initialDragX;
|
|
179
187
|
if (this._viewport && this._viewport.nativeElement) {
|
|
180
188
|
const diffInPercent = (diff / this._viewport?.nativeElement.getBoundingClientRect().width) * 100;
|
|
181
|
-
this.viewOffsetPercent = this.viewOffsetPercentDragStart + diffInPercent;
|
|
182
|
-
this.constrainOffset();
|
|
189
|
+
// this.viewOffsetPercent = this.viewOffsetPercentDragStart + diffInPercent;
|
|
190
|
+
this.constrainOffset(this.viewOffsetPercentDragStart + diffInPercent);
|
|
183
191
|
}
|
|
184
192
|
}
|
|
185
193
|
//#endregion
|
|
186
|
-
constrainOffset() {
|
|
187
|
-
if (this.zoomPercent +
|
|
188
|
-
|
|
194
|
+
constrainOffset(newOffset) {
|
|
195
|
+
if (this.zoomPercent + newOffset < 100) {
|
|
196
|
+
newOffset = -this.zoomPercent + 100;
|
|
197
|
+
}
|
|
198
|
+
newOffset = Math.min(0, newOffset);
|
|
199
|
+
if (newOffset != this.viewOffsetPercent) {
|
|
200
|
+
this.viewOffsetPercent = newOffset;
|
|
201
|
+
this.viewOffsetPercentChange.emit(this.viewOffsetPercent);
|
|
189
202
|
}
|
|
190
|
-
this.viewOffsetPercent = Math.min(0, this.viewOffsetPercent);
|
|
191
203
|
}
|
|
192
204
|
generateTicks() {
|
|
193
205
|
this.hourTicks = this._timelineService.getHourTicks(this.tickFrequency);
|
|
@@ -203,28 +215,55 @@ export class SdsTimelineComponent {
|
|
|
203
215
|
data: item.data,
|
|
204
216
|
x: this._timelineService.getX(item.start),
|
|
205
217
|
width: this._timelineService.getWidthFromTime(item.start, item.end),
|
|
206
|
-
hint: item.hint ?? timeRange
|
|
218
|
+
hint: item.hint ?? timeRange,
|
|
219
|
+
backgroundColor: item.backgroundColor,
|
|
220
|
+
top: item.top ?? '50%',
|
|
221
|
+
height: item.height ?? '60%',
|
|
222
|
+
class: item.class,
|
|
223
|
+
};
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
generateInternalTimelinePointInTimeItems() {
|
|
227
|
+
this.presentationPointInTimeItems = this.pointInTimeItems.map((item) => {
|
|
228
|
+
const timePointString = new Date(item.date).toLocaleTimeString([], { hour: 'numeric', minute: '2-digit' });
|
|
229
|
+
return {
|
|
230
|
+
data: item.data,
|
|
231
|
+
x: this._timelineService.getX(item.date),
|
|
232
|
+
hint: item.hint ?? timePointString,
|
|
233
|
+
top: item.top ?? '20%',
|
|
234
|
+
height: item.height ?? '1rem',
|
|
235
|
+
width: item.width ?? '1rem',
|
|
236
|
+
class: item.class,
|
|
237
|
+
backgroundColor: item.backgroundColor,
|
|
207
238
|
};
|
|
208
239
|
});
|
|
209
240
|
}
|
|
210
241
|
}
|
|
211
242
|
SdsTimelineComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
212
|
-
SdsTimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SdsTimelineComponent, selector: "sds-timeline", inputs: { start: "start", end: "end", items: "items", itemTemplate: "itemTemplate", tickFrequency: "tickFrequency", zoomPercent: "zoomPercent", maxZoomPercent: "maxZoomPercent", showHourLabels: "showHourLabels", showDayLabels: "showDayLabels", timelineHeight: "timelineHeight", enableZoomAndDrag: "enableZoomAndDrag" }, host: { listeners: { "window:mousemove": "onDragMove($event)", "window:touchmove": "onDragMoveTouch($event)", "window:mouseup": "onDragEnd($event)", "window:touchend": "onDragEnd($event)" } }, viewQueries: [{ propertyName: "_viewport", first: true, predicate: ["viewport"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #defaultItemTemplate let-item=\"item\">\r\n <div \r\n class=\"sds-timeline-item\"\r\n [title]=\"item.hint\"\r\n >\r\n </div>\r\n</ng-template>\r\n\r\n<div \r\n #viewport\r\n class=\"sds-timeline-viewport\"\r\n (wheel)=\"onScroll($event)\"\r\n\r\n (mousedown)=\"onDragStart($event)\"\r\n (touchstart)=\"onDragStart($event)\"\r\n >\r\n\r\n <div \r\n class=\"sds-timeline-container d-flex flex-column\"\r\n [style.left.%]=\"viewOffsetPercent\"\r\n [style.width.%]=\"zoomPercent\"\r\n [style.cursor]=\"isDragging ? 'ew-resize' : 'default'\"\r\n >\r\n\r\n <div\r\n *ngIf=\"showDayLabels\" \r\n class=\"sds-timeline-day-header\">\r\n\r\n <div \r\n *ngFor=\"let label of dayLabels\"\r\n class=\"sds-day-label font-monospace\" \r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <small>\r\n {{label.label}}\r\n </small>\r\n </div>\r\n </div>\r\n\r\n <div \r\n *ngIf=\"showHourLabels\" \r\n class=\"sds-timeline-hour-header\">\r\n\r\n <div \r\n *ngFor=\"let label of hourLabels;\"\r\n class=\"sds-hour-label font-monospace\" \r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <small>\r\n {{label.label}}\r\n </small>\r\n </div>\r\n </div>\r\n\r\n <div \r\n class=\"sds-timeline flex-grow-1\"\r\n [style.height]=\"timelineHeight\"\r\n >\r\n\r\n <div \r\n *ngFor=\"let tick of hourTicks\"\r\n class=\"sds-timeline-tick\" \r\n [ngStyle]=\"tick.x == 100 ? {'left': 'calc(' + tick.x +'% - 1px)'} : {'left': 'calc(' + tick.x + '% - 0.5px)'}\"\r\n >\r\n </div>\r\n\r\n
|
|
243
|
+
SdsTimelineComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SdsTimelineComponent, selector: "sds-timeline", inputs: { start: "start", end: "end", items: "items", pointInTimeItems: "pointInTimeItems", itemTemplate: "itemTemplate", tickFrequency: "tickFrequency", zoomPercent: "zoomPercent", viewOffsetPercent: "viewOffsetPercent", maxZoomPercent: "maxZoomPercent", showHourLabels: "showHourLabels", showDayLabels: "showDayLabels", timelineHeight: "timelineHeight", enableZoomAndDrag: "enableZoomAndDrag" }, outputs: { zoomPercentChange: "zoomPercentChange", viewOffsetPercentChange: "viewOffsetPercentChange" }, host: { listeners: { "window:mousemove": "onDragMove($event)", "window:touchmove": "onDragMoveTouch($event)", "window:mouseup": "onDragEnd($event)", "window:touchend": "onDragEnd($event)" } }, viewQueries: [{ propertyName: "_viewport", first: true, predicate: ["viewport"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #defaultItemTemplate let-item=\"item\">\r\n <div \r\n class=\"sds-timeline-item h-100\"\r\n [title]=\"item.hint\"\r\n >\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultPointInTimeItemTemplate let-item=\"item\">\r\n <div \r\n class=\"sds-timeline-item h-100\"\r\n [title]=\"item.hint\"\r\n >\r\n </div>\r\n</ng-template>\r\n\r\n<div \r\n #viewport\r\n class=\"sds-timeline-viewport\"\r\n (wheel)=\"onScroll($event)\"\r\n\r\n (mousedown)=\"onDragStart($event)\"\r\n (touchstart)=\"onDragStart($event)\"\r\n >\r\n\r\n <div \r\n class=\"sds-timeline-container d-flex flex-column\"\r\n [style.left.%]=\"viewOffsetPercent\"\r\n [style.width.%]=\"zoomPercent\"\r\n [style.cursor]=\"isDragging ? 'ew-resize' : 'default'\"\r\n >\r\n\r\n <div\r\n *ngIf=\"showDayLabels\" \r\n class=\"sds-timeline-day-header\">\r\n\r\n <div \r\n *ngFor=\"let label of dayLabels\"\r\n class=\"sds-day-label font-monospace\" \r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <small>\r\n {{label.label}}\r\n </small>\r\n </div>\r\n </div>\r\n\r\n <div \r\n *ngIf=\"showHourLabels\" \r\n class=\"sds-timeline-hour-header\">\r\n\r\n <div \r\n *ngFor=\"let label of hourLabels;\"\r\n class=\"sds-hour-label font-monospace\" \r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <small>\r\n {{label.label}}\r\n </small>\r\n </div>\r\n </div>\r\n\r\n <div \r\n class=\"sds-timeline flex-grow-1\"\r\n [style.height]=\"timelineHeight\"\r\n >\r\n\r\n <div \r\n *ngFor=\"let tick of hourTicks\"\r\n class=\"sds-timeline-tick\" \r\n [ngStyle]=\"tick.x == 100 ? {'left': 'calc(' + tick.x +'% - 1px)'} : {'left': 'calc(' + tick.x + '% - 0.5px)'}\"\r\n >\r\n </div>\r\n\r\n <div \r\n *ngFor=\"let item of presentationItems\"\r\n class=\"sds-timeline-item-container\"\r\n [ngStyle]=\"{\r\n 'width': 'max(' + item.width +'%, 1px)',\r\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \r\n }\"\r\n\r\n [style.left.%]=\"item.x\"\r\n [style.height]=\"item.height\"\r\n [style.backgroundColor]=\"item.backgroundColor\"\r\n >\r\n\r\n <ng-container \r\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultItemTemplate\"\r\n [ngTemplateOutletContext]=\"{item: item}\">\r\n </ng-container> \r\n </div>\r\n\r\n\r\n <div *ngFor=\"let item of presentationPointInTimeItems\"\r\n class=\"sds-timeline-point-in-time-item-container\"\r\n [ngClass]=\"item.class\"\t\r\n [style.height]=\"item.height\"\r\n [style.width]=\"item.width\"\r\n [ngStyle]=\"{\r\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \r\n 'left': 'calc(' + item.x + '% - max( calc(' + item.width +'/2), 1px))',\r\n \r\n }\"\r\n [style.backgroundColor]=\"item.backgroundColor\"\r\n >\r\n\r\n <ng-container \r\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultPointInTimeItemTemplate\"\r\n [ngTemplateOutletContext]=\"{item: item}\">\r\n </ng-container> \r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".sds-timeline-viewport{overflow:hidden}.sds-timeline-viewport .sds-timeline-container{width:100%;min-height:0;position:relative;-webkit-user-select:none;user-select:none}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header{height:1.6rem;position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header .sds-day-label{position:absolute;display:inline;text-align:center}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header{height:1.6rem;position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header .sds-hour-label{position:absolute;display:inline;text-align:center}.sds-timeline-viewport .sds-timeline-container .sds-timeline{position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-tick{border-left:1px solid rgb(187,187,187);height:100%;position:absolute;display:inline}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container{height:100%;position:absolute;display:inline;top:20%;height:60%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container .sds-timeline-item{position:relative;width:100%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container{width:1px;height:1px;position:absolute}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container .sds-timeline-item{position:relative;width:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
213
244
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsTimelineComponent, decorators: [{
|
|
214
245
|
type: Component,
|
|
215
|
-
args: [{ selector: 'sds-timeline', template: "<ng-template #defaultItemTemplate let-item=\"item\">\r\n <div \r\n class=\"sds-timeline-item\"\r\n [title]=\"item.hint\"\r\n >\r\n </div>\r\n</ng-template>\r\n\r\n<div \r\n #viewport\r\n class=\"sds-timeline-viewport\"\r\n (wheel)=\"onScroll($event)\"\r\n\r\n (mousedown)=\"onDragStart($event)\"\r\n (touchstart)=\"onDragStart($event)\"\r\n >\r\n\r\n <div \r\n class=\"sds-timeline-container d-flex flex-column\"\r\n [style.left.%]=\"viewOffsetPercent\"\r\n [style.width.%]=\"zoomPercent\"\r\n [style.cursor]=\"isDragging ? 'ew-resize' : 'default'\"\r\n >\r\n\r\n <div\r\n *ngIf=\"showDayLabels\" \r\n class=\"sds-timeline-day-header\">\r\n\r\n <div \r\n *ngFor=\"let label of dayLabels\"\r\n class=\"sds-day-label font-monospace\" \r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <small>\r\n {{label.label}}\r\n </small>\r\n </div>\r\n </div>\r\n\r\n <div \r\n *ngIf=\"showHourLabels\" \r\n class=\"sds-timeline-hour-header\">\r\n\r\n <div \r\n *ngFor=\"let label of hourLabels;\"\r\n class=\"sds-hour-label font-monospace\" \r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <small>\r\n {{label.label}}\r\n </small>\r\n </div>\r\n </div>\r\n\r\n <div \r\n class=\"sds-timeline flex-grow-1\"\r\n [style.height]=\"timelineHeight\"\r\n >\r\n\r\n <div \r\n *ngFor=\"let tick of hourTicks\"\r\n class=\"sds-timeline-tick\" \r\n [ngStyle]=\"tick.x == 100 ? {'left': 'calc(' + tick.x +'% - 1px)'} : {'left': 'calc(' + tick.x + '% - 0.5px)'}\"\r\n >\r\n </div>\r\n\r\n
|
|
246
|
+
args: [{ selector: 'sds-timeline', template: "<ng-template #defaultItemTemplate let-item=\"item\">\r\n <div \r\n class=\"sds-timeline-item h-100\"\r\n [title]=\"item.hint\"\r\n >\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #defaultPointInTimeItemTemplate let-item=\"item\">\r\n <div \r\n class=\"sds-timeline-item h-100\"\r\n [title]=\"item.hint\"\r\n >\r\n </div>\r\n</ng-template>\r\n\r\n<div \r\n #viewport\r\n class=\"sds-timeline-viewport\"\r\n (wheel)=\"onScroll($event)\"\r\n\r\n (mousedown)=\"onDragStart($event)\"\r\n (touchstart)=\"onDragStart($event)\"\r\n >\r\n\r\n <div \r\n class=\"sds-timeline-container d-flex flex-column\"\r\n [style.left.%]=\"viewOffsetPercent\"\r\n [style.width.%]=\"zoomPercent\"\r\n [style.cursor]=\"isDragging ? 'ew-resize' : 'default'\"\r\n >\r\n\r\n <div\r\n *ngIf=\"showDayLabels\" \r\n class=\"sds-timeline-day-header\">\r\n\r\n <div \r\n *ngFor=\"let label of dayLabels\"\r\n class=\"sds-day-label font-monospace\" \r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <small>\r\n {{label.label}}\r\n </small>\r\n </div>\r\n </div>\r\n\r\n <div \r\n *ngIf=\"showHourLabels\" \r\n class=\"sds-timeline-hour-header\">\r\n\r\n <div \r\n *ngFor=\"let label of hourLabels;\"\r\n class=\"sds-hour-label font-monospace\" \r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <small>\r\n {{label.label}}\r\n </small>\r\n </div>\r\n </div>\r\n\r\n <div \r\n class=\"sds-timeline flex-grow-1\"\r\n [style.height]=\"timelineHeight\"\r\n >\r\n\r\n <div \r\n *ngFor=\"let tick of hourTicks\"\r\n class=\"sds-timeline-tick\" \r\n [ngStyle]=\"tick.x == 100 ? {'left': 'calc(' + tick.x +'% - 1px)'} : {'left': 'calc(' + tick.x + '% - 0.5px)'}\"\r\n >\r\n </div>\r\n\r\n <div \r\n *ngFor=\"let item of presentationItems\"\r\n class=\"sds-timeline-item-container\"\r\n [ngStyle]=\"{\r\n 'width': 'max(' + item.width +'%, 1px)',\r\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \r\n }\"\r\n\r\n [style.left.%]=\"item.x\"\r\n [style.height]=\"item.height\"\r\n [style.backgroundColor]=\"item.backgroundColor\"\r\n >\r\n\r\n <ng-container \r\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultItemTemplate\"\r\n [ngTemplateOutletContext]=\"{item: item}\">\r\n </ng-container> \r\n </div>\r\n\r\n\r\n <div *ngFor=\"let item of presentationPointInTimeItems\"\r\n class=\"sds-timeline-point-in-time-item-container\"\r\n [ngClass]=\"item.class\"\t\r\n [style.height]=\"item.height\"\r\n [style.width]=\"item.width\"\r\n [ngStyle]=\"{\r\n 'top': 'calc(' + item.top + ' - max(calc(' + item.height +'/2), 1px))', \r\n 'left': 'calc(' + item.x + '% - max( calc(' + item.width +'/2), 1px))',\r\n \r\n }\"\r\n [style.backgroundColor]=\"item.backgroundColor\"\r\n >\r\n\r\n <ng-container \r\n [ngTemplateOutlet]=\"itemTemplate ? itemTemplate : defaultPointInTimeItemTemplate\"\r\n [ngTemplateOutletContext]=\"{item: item}\">\r\n </ng-container> \r\n\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".sds-timeline-viewport{overflow:hidden}.sds-timeline-viewport .sds-timeline-container{width:100%;min-height:0;position:relative;-webkit-user-select:none;user-select:none}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header{height:1.6rem;position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline-day-header .sds-day-label{position:absolute;display:inline;text-align:center}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header{height:1.6rem;position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header .sds-hour-label{position:absolute;display:inline;text-align:center}.sds-timeline-viewport .sds-timeline-container .sds-timeline{position:relative}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-tick{border-left:1px solid rgb(187,187,187);height:100%;position:absolute;display:inline}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container{height:100%;position:absolute;display:inline;top:20%;height:60%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-item-container .sds-timeline-item{position:relative;width:100%}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container{width:1px;height:1px;position:absolute}.sds-timeline-viewport .sds-timeline-container .sds-timeline .sds-timeline-point-in-time-item-container .sds-timeline-item{position:relative;width:100%}\n"] }]
|
|
216
247
|
}], ctorParameters: function () { return []; }, propDecorators: { start: [{
|
|
217
248
|
type: Input
|
|
218
249
|
}], end: [{
|
|
219
250
|
type: Input
|
|
220
251
|
}], items: [{
|
|
221
252
|
type: Input
|
|
253
|
+
}], pointInTimeItems: [{
|
|
254
|
+
type: Input
|
|
222
255
|
}], itemTemplate: [{
|
|
223
256
|
type: Input
|
|
224
257
|
}], tickFrequency: [{
|
|
225
258
|
type: Input
|
|
226
259
|
}], zoomPercent: [{
|
|
227
260
|
type: Input
|
|
261
|
+
}], zoomPercentChange: [{
|
|
262
|
+
type: Output
|
|
263
|
+
}], viewOffsetPercent: [{
|
|
264
|
+
type: Input
|
|
265
|
+
}], viewOffsetPercentChange: [{
|
|
266
|
+
type: Output
|
|
228
267
|
}], maxZoomPercent: [{
|
|
229
268
|
type: Input
|
|
230
269
|
}], showHourLabels: [{
|
|
@@ -251,4 +290,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
251
290
|
type: HostListener,
|
|
252
291
|
args: ['window:touchend', ['$event']]
|
|
253
292
|
}] } });
|
|
254
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvdGltZWxpbmUvY29tcG9uZW50cy90aW1lbGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2RzLWNvbXBvbmVudHMvc3JjL2xpYi90aW1lbGluZS9jb21wb25lbnRzL3RpbWVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFLTCxTQUFTLEdBQ1osTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7OztBQWFsRSxNQUFNLE9BQU8sb0JBQW9CO0lBdUg3QjtRQXRIQTs7Ozs7V0FLRztRQUNNLFVBQUssR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBRWxDOzs7OztXQUtHO1FBQ00sUUFBRyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFFaEM7Ozs7OztXQU1HO1FBQ00sVUFBSyxHQUFtQixFQUFFLENBQUM7UUFFcEM7Ozs7O1dBS0c7UUFDTSxpQkFBWSxHQUFpQyxTQUFTLENBQUM7UUFFaEU7Ozs7O1dBS0c7UUFDTSxrQkFBYSxHQUEwQixRQUFRLENBQUM7UUFDekQ7Ozs7O1dBS0c7UUFDTSxnQkFBVyxHQUFXLEdBQUcsQ0FBQztRQUVuQzs7Ozs7V0FLRztRQUNNLG1CQUFjLEdBQVcsR0FBRyxDQUFDO1FBRXRDOzs7OztXQUtHO1FBQ00sbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFFeEM7Ozs7O1dBS0c7UUFDTSxrQkFBYSxHQUFZLEtBQUssQ0FBQztRQUV4Qzs7Ozs7V0FLRztRQUNNLG1CQUFjLEdBQVcsTUFBTSxDQUFDO1FBRXpDOzs7OztXQUtHO1FBQ00sc0JB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O3NCQUFiLEtBQUs7Z0JBUUcsWUFBWTtzQkFBcEIsS0FBSztnQkFRRyxhQUFhO3NCQUFyQixLQUFLO2dCQU9HLFdBQVc7c0JBQW5CLEtBQUs7Z0JBUUcsY0FBYztzQkFBdEIsS0FBSztnQkFRRyxjQUFjO3NCQUF0QixLQUFLO2dCQVFHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBUUcsY0FBYztzQkFBdEIsS0FBSztnQkFRRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBOEJtQyxTQUFTO3NCQUFqRCxTQUFTO3VCQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBbUZoQyxVQUFVO3NCQURoQixZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVc1QyxlQUFlO3NCQURkLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUM7Z0JBWXJDLFNBQVM7c0JBRmYsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7c0JBQ3pDLFlBQVk7dUJBQUMsaUJBQWlCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICAgQWZ0ZXJWaWV3SW5pdCxcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBIb3N0TGlzdGVuZXIsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uSW5pdCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBUZW1wbGF0ZVJlZixcclxuICAgIFZpZXdDaGlsZCxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGltZWxpbmVUaWNrRnJlcXVlbmN5IH0gZnJvbSAnLi4vdHlwZXMvdGltZWxpbmUudHlwZXMnO1xyXG5pbXBvcnQgeyBTZHNUaW1lbGluZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90aW1lbGluZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICAgIFRpbWVsaW5lSW50ZXJ2YWxMYWJlbCxcclxuICAgIFRpbWVsaW5lSXRlbSxcclxuICAgIFRpbWVsaW5lSXRlbVByZXNlbnRhdGlvbixcclxuICAgIFRpbWVsaW5lVGljayxcclxufSBmcm9tICcuLi9tb2RlbHMvdGltZWxpbmUubW9kZWwnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ3Nkcy10aW1lbGluZScsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGltZWxpbmUuY29tcG9uZW50Lmh0bWwnLFxyXG4gICAgc3R5bGVVcmxzOiBbJy4vdGltZWxpbmUuY29tcG9uZW50LnNjc3MnXSxcclxufSlcclxuZXhwb3J0IGNsYXNzIFNkc1RpbWVsaW5lQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgc3RhcnQgZGF0ZSBhbmQgdGltZSBmb3IgdGhlIHRpbWVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtEYXRlfVxyXG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHN0YXJ0OiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBlbmQgZGF0ZSBhbmQgdGltZSBmb3IgdGhlIHRpbWVsaW5lLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtEYXRlfVxyXG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGVuZDogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaXRlbXMgdG8gYmUgZGlzcGxheWVkIG9uIHRoZSB0aW1lbGluZS4gU3BlY2lmeSBkYXRhIGlmIHlvdSBuZWVkIFxyXG4gICAgICogYWRkaXRpb25hbCBkYXRhIGZvciBjdXN0b20gcmVuZGVyaW5nIG9mIHRoZSBpdGVtcy5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7VGltZWxpbmVJdGVtW119XHJcbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgaXRlbXM6IFRpbWVsaW5lSXRlbVtdID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGVtcGxhdGUgdG8gYmUgdXNlZCBmb3IgY3VzdG9tIHJlbmRlcmluZyBvZiB0aGUgaXRlbXMuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUgeyhUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkKX1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZnJlcXVlbmN5IG9mIHRoZSB0aWNrcyBvbiB0aGUgdGltZWxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge1RpbWVsaW5lVGlja0ZyZXF1ZW5jeX1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSB0aWNrRnJlcXVlbmN5OiBUaW1lbGluZVRpY2tGcmVxdWVuY3kgPSAnaG91cmx5JztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGN1cnJlbnQgem9vbSBsZXZlbCBvZiB0aGUgdGltZWxpbmUuIEluIHBlcmNlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSB6b29tUGVyY2VudDogbnVtYmVyID0gMTAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIG1heGltdW0gYWxsb3dlZCB6b29tIGxldmVsIG9mIHRoZSB0aW1lbGluZS4gSW4gcGVyY2VudC5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIG1heFpvb21QZXJjZW50OiBudW1iZXIgPSA1MDA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBXaGV0aGVyIHRvIHNob3cgaG91ciBsYWJlbHMuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge2Jvb2xlYW59XHJcbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgc2hvd0hvdXJMYWJlbHM6IGJvb2xlYW4gPSB0cnVlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0byBzaG93IGRheSBsYWJlbHMuIFxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNob3dEYXlMYWJlbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBoZWlnaHQgb2YgdGhlIHRpbWVsaW5lLiBEZWZhdWx0IGlzIDJyZW0uXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge3N0cmluZ31cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSB0aW1lbGluZUhlaWdodDogc3RyaW5nID0gJzJyZW0nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0byBlbmFibGUgem9vbSBhbmQgZHJhZyBmdW5jdGlvbmFsaXR5LlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGVuYWJsZVpvb21BbmREcmFnOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE51bWJlciBvZiBtaW51dGVzIGFkZGVkIHRvIHN0YXJ0IGFuZCBzdG9wIHRvIGZpdCB0aGUgZGF0YSBvbiB0aGUgZWRnZXNcclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7bnVtYmVyfVxyXG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIG9mZlNldE1pbnV0ZXM6IG51bWJlciA9IDE1O1xyXG5cclxuICAgIC8vIHByb3RlY3RlZFxyXG4gICAgaG91clRpY2tzOiBUaW1lbGluZVRpY2tbXSA9IFtdO1xyXG4gICAgaG91ckxhYmVsczogVGltZWxpbmVJbnRlcnZhbExhYmVsW10gPSBbXTtcclxuICAgIGRheUxhYmVsczogVGltZWxpbmVJbnRlcnZhbExhYmVsW10gPSBbXTtcclxuXHJcbiAgICBwcml2YXRlIF90aW1lbGluZVNlcnZpY2U6IFNkc1RpbWVsaW5lU2VydmljZSA9IG5ldyBTZHNUaW1lbGluZVNlcnZpY2UoXHJcbiAgICAgICAgdGhpcy5zdGFydCxcclxuICAgICAgICB0aGlzLmVuZCxcclxuICAgICAgICB0aGlzLm9mZlNldE1pbnV0ZXNcclxuICAgICk7XHJcblxyXG4gICAgcHVibGljIHByZXNlbnRhdGlvbkl0ZW1zOiBUaW1lbGluZUl0ZW1QcmVzZW50YXRpb25bXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyB2aWV3T2Zmc2V0UGVyY2VudCA9IDA7XHJcblxyXG4gICAgcHVibGljIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpbml0aWFsRHJhZ1ggPSAwO1xyXG5cclxuICAgIHByaXZhdGUgdmlld09mZnNldFBlcmNlbnREcmFnU3RhcnQgPSAwO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3ZpZXdwb3J0JywgeyBzdGF0aWM6IHRydWUgfSkgX3ZpZXdwb3J0OiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVRpY2tzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ICYmIHRoaXMuZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lU2VydmljZSA9IG5ldyBTZHNUaW1lbGluZVNlcnZpY2UoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9mZlNldE1pbnV0ZXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVRpY2tzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lSXRlbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzWydzdGFydCddIHx8IGNoYW5nZXNbJ2VuZCddKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lU2VydmljZSA9IG5ldyBTZHNUaW1lbGluZVNlcnZpY2UoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9mZlNldE1pbnV0ZXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzWydpdGVtcyddKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lSXRlbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzWyd6b29tUGVyY2VudCddKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld09mZnNldFBlcmNlbnQgPSAodGhpcy56b29tUGVyY2VudCAtIDEwMCkgLyAtMjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzWydzaG93RGF5TGFiZWxzJ10gfHwgY2hhbmdlc1snc2hvd0hvdXJMYWJlbHMnXSkge1xyXG4gICAgICAgICAgICB0aGlzLmdlbmVyYXRlVGlja3MoKTtcclxuICAgICAgICB9ICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7fVxyXG5cclxuICAgIC8vI3JlZ2lvbiBtb3VzZSB3aGVlbCB6b29tXHJcbiAgICBvblNjcm9sbChldmVudDogV2hlZWxFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb21BbmREcmFnKSB7XHJcblxyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGVsdGEgPSBNYXRoLnNpZ24oZXZlbnQuZGVsdGFZKTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Wm9vbVBlcmNlbnQgPSBNYXRoLm1pbihcclxuICAgICAgICAgICAgICAgIE1hdGgubWF4KHRoaXMuem9vbVBlcmNlbnQgKyAtZGVsdGEgKiAyMCwgMTAwKSxcclxuICAgICAgICAgICAgICAgIHRoaXMubWF4Wm9vbVBlcmNlbnRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgY29uc3QgZGVsdGFab29tUGVyY2VudCA9IG5ld1pvb21QZXJjZW50IC0gdGhpcy56b29tUGVyY2VudDtcclxuICAgICAgICAgICAgdGhpcy56b29tUGVyY2VudCA9IG5ld1pvb21QZXJjZW50O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gZ2V0IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yIG9uIHRoZSB2aWV3cG9ydCBzbyB3ZSBjYW4gem9vbSBpbiBpbnRvIHRoaXMgcG9zaXRpb25cclxuICAgICAgICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLl92aWV3cG9ydD8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xyXG4gICAgICAgICAgICBjb25zdCBjdXJzb3JSZWxhdGl2ZVBvc2l0aW9uID0geCAvIHRoaXMuX3ZpZXdwb3J0Py5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdPZmZzZXRQZXJjZW50ID0gdGhpcy52aWV3T2Zmc2V0UGVyY2VudCAtIGRlbHRhWm9vbVBlcmNlbnQgKiBjdXJzb3JSZWxhdGl2ZVBvc2l0aW9uO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW5PZmZzZXQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvLyNyZWdpb24gZHJhZ2dpbmdcclxuICAgIFxyXG4gICAgcHVibGljIG9uRHJhZ1N0YXJ0KGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb21BbmREcmFnKSB7XHJcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMudmlld09mZnNldFBlcmNlbnREcmFnU3RhcnQgPSB0aGlzLnZpZXdPZmZzZXRQZXJjZW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRHJhZ1ggPSBldmVudC5jbGllbnRYO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50IGluc3RhbmNlb2YgVG91Y2hFdmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbml0aWFsRHJhZ1ggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93Om1vdXNlbW92ZScsIFsnJGV2ZW50J10pXHJcbiAgICBwdWJsaWMgb25EcmFnTW92ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb21BbmREcmFnKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRYID0gZXZlbnQuY2xpZW50WDtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoY3VycmVudFgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzp0b3VjaG1vdmUnLCBbJyRldmVudCddKVxyXG4gICAgb25EcmFnTW92ZVRvdWNoKGV2ZW50OiBUb3VjaEV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbUFuZERyYWcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVFbGVtZW50KGN1cnJlbnRYKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2V1cCcsIFsnJGV2ZW50J10pXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6dG91Y2hlbmQnLCBbJyRldmVudCddKVxyXG4gICAgcHVibGljIG9uRHJhZ0VuZChldmVudDogTW91c2VFdmVudCB8IFRvdWNoRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5lbmFibGVab29tQW5kRHJhZykge1xyXG4gICAgICAgICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtb3ZlRWxlbWVudChjdXJyZW50WDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgZGlmZiA9IGN1cnJlbnRYIC0gdGhpcy5pbml0aWFsRHJhZ1g7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdwb3J0ICYmIHRoaXMuX3ZpZXdwb3J0Lm5hdGl2ZUVsZW1lbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgZGlmZkluUGVyY2VudCA9IChkaWZmIC8gdGhpcy5fdmlld3BvcnQ/Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGgpICogMTAwO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdPZmZzZXRQZXJjZW50ID0gdGhpcy52aWV3T2Zmc2V0UGVyY2VudERyYWdTdGFydCArIGRpZmZJblBlcmNlbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuY29uc3RyYWluT2Zmc2V0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vI2VuZHJlZ2lvblxyXG5cclxuICAgIHByaXZhdGUgY29uc3RyYWluT2Zmc2V0KCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnpvb21QZXJjZW50ICsgdGhpcy52aWV3T2Zmc2V0UGVyY2VudCA8IDEwMCkge1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdPZmZzZXRQZXJjZW50ID0gLXRoaXMuem9vbVBlcmNlbnQgKyAxMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMudmlld09mZnNldFBlcmNlbnQgPSBNYXRoLm1pbigwLCB0aGlzLnZpZXdPZmZzZXRQZXJjZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlVGlja3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ob3VyVGlja3MgPSB0aGlzLl90aW1lbGluZVNlcnZpY2UuZ2V0SG91clRpY2tzKHRoaXMudGlja0ZyZXF1ZW5jeSk7XHJcbiAgICAgICAgdGhpcy5kYXlMYWJlbHMgPSB0aGlzLl90aW1lbGluZVNlcnZpY2UuZGF5TGFiZWxzO1xyXG4gICAgICAgIHRoaXMuaG91ckxhYmVscyA9IHRoaXMuX3RpbWVsaW5lU2VydmljZS5ob3VyTGFiZWxzO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lSXRlbXMoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5wcmVzZW50YXRpb25JdGVtcyA9IHRoaXMuaXRlbXMubWFwKChpdGVtKSA9PiB7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBuZXcgRGF0ZShpdGVtLnN0YXJ0KS50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTtcclxuICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IG5ldyBEYXRlKGl0ZW0uZW5kKS50b0xvY2FsZVRpbWVTdHJpbmcoW10sIHsgaG91cjogJ251bWVyaWMnLCBtaW51dGU6ICcyLWRpZ2l0JyB9KTtcclxuICAgICAgICAgICAgY29uc3QgdGltZVJhbmdlID0gYCR7c3RhcnRUaW1lfSAtICR7ZW5kVGltZX1gO1xyXG4gICAgXHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtLmRhdGEsXHJcbiAgICAgICAgICAgICAgICB4OiB0aGlzLl90aW1lbGluZVNlcnZpY2UuZ2V0WChpdGVtLnN0YXJ0KSxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLl90aW1lbGluZVNlcnZpY2UuZ2V0V2lkdGhGcm9tVGltZShcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLnN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW0uZW5kXHJcbiAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgaGludDogaXRlbS5oaW50ID8/IHRpbWVSYW5nZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEl0ZW1UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgIDxkaXYgXHJcbiAgICAgICAgY2xhc3M9XCJzZHMtdGltZWxpbmUtaXRlbVwiXHJcbiAgICAgICAgW3RpdGxlXT1cIml0ZW0uaGludFwiXHJcbiAgICAgICAgPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48ZGl2IFxyXG4gICAgI3ZpZXdwb3J0XHJcbiAgICBjbGFzcz1cInNkcy10aW1lbGluZS12aWV3cG9ydFwiXHJcbiAgICAod2hlZWwpPVwib25TY3JvbGwoJGV2ZW50KVwiXHJcblxyXG4gICAgKG1vdXNlZG93bik9XCJvbkRyYWdTdGFydCgkZXZlbnQpXCJcclxuICAgICh0b3VjaHN0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxyXG4gICAgPlxyXG5cclxuICAgIDxkaXYgXHJcbiAgICAgICAgY2xhc3M9XCJzZHMtdGltZWxpbmUtY29udGFpbmVyIGQtZmxleCBmbGV4LWNvbHVtblwiXHJcbiAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJ2aWV3T2Zmc2V0UGVyY2VudFwiXHJcbiAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiem9vbVBlcmNlbnRcIlxyXG4gICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiaXNEcmFnZ2luZyA/ICdldy1yZXNpemUnIDogJ2RlZmF1bHQnXCJcclxuICAgICAgICA+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nSWY9XCJzaG93RGF5TGFiZWxzXCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLWRheS1oZWFkZXJcIj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFiZWwgb2YgZGF5TGFiZWxzXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RzLWRheS1sYWJlbCBmb250LW1vbm9zcGFjZVwiICBcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LiVdPVwibGFiZWwueFwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJsYWJlbC53aWR0aFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAqbmdJZj1cInNob3dIb3VyTGFiZWxzXCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLWhvdXItaGVhZGVyXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGhvdXJMYWJlbHM7XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RzLWhvdXItbGFiZWwgZm9udC1tb25vc3BhY2VcIiAgXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImxhYmVsLnhcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwibGFiZWwud2lkdGhcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbC5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgY2xhc3M9XCJzZHMtdGltZWxpbmUgZmxleC1ncm93LTFcIlxyXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cInRpbWVsaW5lSGVpZ2h0XCJcclxuICAgICAgICAgICAgPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0aWNrIG9mIGhvdXJUaWNrc1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkcy10aW1lbGluZS10aWNrXCIgIFxyXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwidGljay54ID09IDEwMCA/IHsnbGVmdCc6ICdjYWxjKCcgKyB0aWNrLnggKyclIC0gMXB4KSd9IDogeydsZWZ0JzogJ2NhbGMoJyArIHRpY2sueCArICclIC0gMC41cHgpJ31cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgaXRlbSBvZiBwcmVzZW50YXRpb25JdGVtc1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkcy10aW1lbGluZS1pdGVtLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J3dpZHRoJzogJ21heCgnICsgaXRlbS53aWR0aCArJyUsIDFweCknfVwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cIml0ZW0ueFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJpdGVtVGVtcGxhdGUgPyBpdGVtVGVtcGxhdGUgOiBkZWZhdWx0SXRlbVRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gIFxyXG5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNkcy1jb21wb25lbnRzL3NyYy9saWIvdGltZWxpbmUvY29tcG9uZW50cy90aW1lbGluZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2RzLWNvbXBvbmVudHMvc3JjL2xpYi90aW1lbGluZS9jb21wb25lbnRzL3RpbWVsaW5lLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNULFlBQVksRUFDZixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQzs7O0FBZWxFLE1BQU0sT0FBTyxvQkFBb0I7SUE2SDdCO1FBNUhBOzs7OztXQUtHO1FBQ00sVUFBSyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7UUFFbEM7Ozs7O1dBS0c7UUFDTSxRQUFHLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVoQzs7Ozs7O1dBTUc7UUFDTSxVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUczQixxQkFBZ0IsR0FBOEIsRUFBRSxDQUFDO1FBRTFEOzs7OztXQUtHO1FBQ00saUJBQVksR0FBaUMsU0FBUyxDQUFDO1FBRWhFOzs7OztXQUtHO1FBQ00sa0JBQWEsR0FBMEIsUUFBUSxDQUFDO1FBQ3pEOzs7OztXQUtHO1FBQ00sZ0JBQVcsR0FBVyxHQUFHLENBQUM7UUFDekIsc0JBQWlCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUVoRCxzQkFBaUIsR0FBVyxDQUFDLENBQUM7UUFDN0IsNEJBQXVCLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUUvRDs7Ozs7V0FLRztRQUNNLG1CQUFjLEdBQVcsR0FB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RUFBRSxJQUFJLENBQUMsZUFBZTthQUN4QyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOztrSEFsVFEsb0JBQW9CO3NHQUFwQixvQkFBb0IsczNCQzlCakMsdStIQXVIQTs0RkR6RmEsb0JBQW9CO2tCQUxoQyxTQUFTOytCQUNJLGNBQWM7MEVBV2YsS0FBSztzQkFBYixLQUFLO2dCQVFHLEdBQUc7c0JBQVgsS0FBSztnQkFTRyxLQUFLO3NCQUFiLEtBQUs7Z0JBR0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQVFHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBUUcsYUFBYTtzQkFBckIsS0FBSztnQkFPRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRSxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0ksdUJBQXVCO3NCQUFoQyxNQUFNO2dCQVFFLGNBQWM7c0JBQXRCLEtBQUs7Z0JBUUcsY0FBYztzQkFBdEIsS0FBSztnQkFRRyxhQUFhO3NCQUFyQixLQUFLO2dCQVFHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBUUcsaUJBQWlCO3NCQUF6QixLQUFLO2dCQTZCbUMsU0FBUztzQkFBakQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQXdGaEMsVUFBVTtzQkFEaEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQztnQkFXNUMsZUFBZTtzQkFEZCxZQUFZO3VCQUFDLGtCQUFrQixFQUFFLENBQUMsUUFBUSxDQUFDO2dCQVlyQyxTQUFTO3NCQUZmLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUM7O3NCQUN6QyxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyVmlld0luaXQsXHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgSG9zdExpc3RlbmVyLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkNoYW5nZXMsXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBTaW1wbGVDaGFuZ2VzLFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBFdmVudEVtaXR0ZXJcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgVGltZWxpbmVUaWNrRnJlcXVlbmN5IH0gZnJvbSAnLi4vdHlwZXMvdGltZWxpbmUudHlwZXMnO1xyXG5pbXBvcnQgeyBTZHNUaW1lbGluZVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90aW1lbGluZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICAgIFRpbWVsaW5lSW50ZXJ2YWxMYWJlbCxcclxuICAgIFRpbWVsaW5lSXRlbSxcclxuICAgIFRpbWVsaW5lSXRlbVByZXNlbnRhdGlvbixcclxuICAgIFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtLFxyXG4gICAgVGltZWxpbmVQb2ludEluVGltZUl0ZW1QcmVzZW50YXRpb24sXHJcbiAgICBUaW1lbGluZVRpY2ssXHJcbn0gZnJvbSAnLi4vbW9kZWxzL3RpbWVsaW5lLm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdzZHMtdGltZWxpbmUnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RpbWVsaW5lLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3RpbWVsaW5lLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZHNUaW1lbGluZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIHN0YXJ0IGRhdGUgYW5kIHRpbWUgZm9yIHRoZSB0aW1lbGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7RGF0ZX1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBzdGFydDogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZW5kIGRhdGUgYW5kIHRpbWUgZm9yIHRoZSB0aW1lbGluZS5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7RGF0ZX1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBlbmQ6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGl0ZW1zIHRvIGJlIGRpc3BsYXllZCBvbiB0aGUgdGltZWxpbmUuIFNwZWNpZnkgZGF0YSBpZiB5b3UgbmVlZCBcclxuICAgICAqIGFkZGl0aW9uYWwgZGF0YSBmb3IgY3VzdG9tIHJlbmRlcmluZyBvZiB0aGUgaXRlbXMuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge1RpbWVsaW5lSXRlbVtdfVxyXG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIGl0ZW1zOiBUaW1lbGluZUl0ZW1bXSA9IFtdO1xyXG5cclxuXHJcbiAgICBASW5wdXQoKSBwb2ludEluVGltZUl0ZW1zOiBUaW1lbGluZVBvaW50SW5UaW1lSXRlbVtdID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgdGVtcGxhdGUgdG8gYmUgdXNlZCBmb3IgY3VzdG9tIHJlbmRlcmluZyBvZiB0aGUgaXRlbXMuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUgeyhUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkKX1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBpdGVtVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgZnJlcXVlbmN5IG9mIHRoZSB0aWNrcyBvbiB0aGUgdGltZWxpbmUuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge1RpbWVsaW5lVGlja0ZyZXF1ZW5jeX1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSB0aWNrRnJlcXVlbmN5OiBUaW1lbGluZVRpY2tGcmVxdWVuY3kgPSAnaG91cmx5JztcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGN1cnJlbnQgem9vbSBsZXZlbCBvZiB0aGUgdGltZWxpbmUuIEluIHBlcmNlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSB6b29tUGVyY2VudDogbnVtYmVyID0gMTAwO1xyXG4gICAgQE91dHB1dCgpIHpvb21QZXJjZW50Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XHJcblxyXG4gICAgQElucHV0KCkgdmlld09mZnNldFBlcmNlbnQ6IG51bWJlciA9IDA7XHJcbiAgICBAT3V0cHV0KCkgdmlld09mZnNldFBlcmNlbnRDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBtYXhpbXVtIGFsbG93ZWQgem9vbSBsZXZlbCBvZiB0aGUgdGltZWxpbmUuIEluIHBlcmNlbnQuXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBtYXhab29tUGVyY2VudDogbnVtYmVyID0gNTAwO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogV2hldGhlciB0byBzaG93IGhvdXIgbGFiZWxzLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtib29sZWFufVxyXG4gICAgICogQG1lbWJlcm9mIFNkc1RpbWVsaW5lQ29tcG9uZW50XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHNob3dIb3VyTGFiZWxzOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdG8gc2hvdyBkYXkgbGFiZWxzLiBcclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBzaG93RGF5TGFiZWxzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgaGVpZ2h0IG9mIHRoZSB0aW1lbGluZS4gRGVmYXVsdCBpcyAycmVtLlxyXG4gICAgICpcclxuICAgICAqIEB0eXBlIHtzdHJpbmd9XHJcbiAgICAgKiBAbWVtYmVyb2YgU2RzVGltZWxpbmVDb21wb25lbnRcclxuICAgICAqL1xyXG4gICAgQElucHV0KCkgdGltZWxpbmVIZWlnaHQ6IHN0cmluZyA9ICcycmVtJztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFdoZXRoZXIgdG8gZW5hYmxlIHpvb20gYW5kIGRyYWcgZnVuY3Rpb25hbGl0eS5cclxuICAgICAqXHJcbiAgICAgKiBAdHlwZSB7Ym9vbGVhbn1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBlbmFibGVab29tQW5kRHJhZzogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBOdW1iZXIgb2YgbWludXRlcyBhZGRlZCB0byBzdGFydCBhbmQgc3RvcCB0byBmaXQgdGhlIGRhdGEgb24gdGhlIGVkZ2VzXHJcbiAgICAgKlxyXG4gICAgICogQHR5cGUge251bWJlcn1cclxuICAgICAqIEBtZW1iZXJvZiBTZHNUaW1lbGluZUNvbXBvbmVudFxyXG4gICAgICovXHJcbiAgICBvZmZTZXRNaW51dGVzOiBudW1iZXIgPSAxNTtcclxuXHJcbiAgICAvLyBwcm90ZWN0ZWRcclxuICAgIGhvdXJUaWNrczogVGltZWxpbmVUaWNrW10gPSBbXTtcclxuICAgIGhvdXJMYWJlbHM6IFRpbWVsaW5lSW50ZXJ2YWxMYWJlbFtdID0gW107XHJcbiAgICBkYXlMYWJlbHM6IFRpbWVsaW5lSW50ZXJ2YWxMYWJlbFtdID0gW107XHJcblxyXG4gICAgcHJpdmF0ZSBfdGltZWxpbmVTZXJ2aWNlOiBTZHNUaW1lbGluZVNlcnZpY2UgPSBuZXcgU2RzVGltZWxpbmVTZXJ2aWNlKFxyXG4gICAgICAgIHRoaXMuc3RhcnQsXHJcbiAgICAgICAgdGhpcy5lbmQsXHJcbiAgICAgICAgdGhpcy5vZmZTZXRNaW51dGVzXHJcbiAgICApO1xyXG5cclxuICAgIHB1YmxpYyBwcmVzZW50YXRpb25JdGVtczogVGltZWxpbmVJdGVtUHJlc2VudGF0aW9uW10gPSBbXTtcclxuICAgIHB1YmxpYyBwcmVzZW50YXRpb25Qb2ludEluVGltZUl0ZW1zOiBUaW1lbGluZVBvaW50SW5UaW1lSXRlbVByZXNlbnRhdGlvbltdID0gW107XHJcblxyXG4gICAgcHVibGljIGlzRHJhZ2dpbmcgPSBmYWxzZTtcclxuICAgIHB1YmxpYyBpbml0aWFsRHJhZ1ggPSAwO1xyXG5cclxuICAgIHByaXZhdGUgdmlld09mZnNldFBlcmNlbnREcmFnU3RhcnQgPSAwO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3ZpZXdwb3J0JywgeyBzdGF0aWM6IHRydWUgfSkgX3ZpZXdwb3J0OiBFbGVtZW50UmVmIHwgdW5kZWZpbmVkO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge31cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVRpY2tzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ICYmIHRoaXMuZW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lU2VydmljZSA9IG5ldyBTZHNUaW1lbGluZVNlcnZpY2UoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9mZlNldE1pbnV0ZXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVRpY2tzKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lSXRlbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzWydzdGFydCddIHx8IGNoYW5nZXNbJ2VuZCddKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RpbWVsaW5lU2VydmljZSA9IG5ldyBTZHNUaW1lbGluZVNlcnZpY2UoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0LFxyXG4gICAgICAgICAgICAgICAgdGhpcy5lbmQsXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9mZlNldE1pbnV0ZXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzWydpdGVtcyddKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VuZXJhdGVJbnRlcm5hbFRpbWVsaW5lSXRlbXMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjaGFuZ2VzWydwb2ludEluVGltZUl0ZW1zJ10pIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZUludGVybmFsVGltZWxpbmVQb2ludEluVGltZUl0ZW1zKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlc1snem9vbVBlcmNlbnQnXSkge1xyXG4gICAgICAgICAgICAvLyB0aGlzLnZpZXdPZmZzZXRQZXJjZW50ID0gKHRoaXMuem9vbVBlcmNlbnQgLSAxMDApIC8gLTI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY2hhbmdlc1snc2hvd0RheUxhYmVscyddIHx8IGNoYW5nZXNbJ3Nob3dIb3VyTGFiZWxzJ10pIHtcclxuICAgICAgICAgICAgdGhpcy5nZW5lcmF0ZVRpY2tzKCk7XHJcbiAgICAgICAgfSAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCk6IHZvaWQge31cclxuXHJcbiAgICAvLyNyZWdpb24gbW91c2Ugd2hlZWwgem9vbVxyXG4gICAgb25TY3JvbGwoZXZlbnQ6IFdoZWVsRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5lbmFibGVab29tQW5kRHJhZykge1xyXG5cclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gTWF0aC5zaWduKGV2ZW50LmRlbHRhWSk7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld1pvb21QZXJjZW50ID0gTWF0aC5taW4oXHJcbiAgICAgICAgICAgICAgICBNYXRoLm1heCh0aGlzLnpvb21QZXJjZW50ICsgLWRlbHRhICogMjAsIDEwMCksXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1heFpvb21QZXJjZW50XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRlbHRhWm9vbVBlcmNlbnQgPSBuZXdab29tUGVyY2VudCAtIHRoaXMuem9vbVBlcmNlbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuem9vbVBlcmNlbnQgPSBuZXdab29tUGVyY2VudDtcclxuICAgICAgICAgICAgdGhpcy56b29tUGVyY2VudENoYW5nZS5lbWl0KHRoaXMuem9vbVBlcmNlbnQpO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8gZ2V0IHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgY3Vyc29yIG9uIHRoZSB2aWV3cG9ydCBzbyB3ZSBjYW4gem9vbSBpbiBpbnRvIHRoaXMgcG9zaXRpb25cclxuICAgICAgICAgICAgY29uc3QgeCA9IGV2ZW50LmNsaWVudFggLSB0aGlzLl92aWV3cG9ydD8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xyXG4gICAgICAgICAgICBjb25zdCBjdXJzb3JSZWxhdGl2ZVBvc2l0aW9uID0geCAvIHRoaXMuX3ZpZXdwb3J0Py5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xyXG4gICAgICAgICAgICAvLyB0aGlzLnZpZXdPZmZzZXRQZXJjZW50ID0gdGhpcy52aWV3T2Zmc2V0UGVyY2VudCAtIGRlbHRhWm9vbVBlcmNlbnQgKiBjdXJzb3JSZWxhdGl2ZVBvc2l0aW9uO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW5PZmZzZXQodGhpcy52aWV3T2Zmc2V0UGVyY2VudCAtIGRlbHRhWm9vbVBlcmNlbnQgKiBjdXJzb3JSZWxhdGl2ZVBvc2l0aW9uKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICAvLyNyZWdpb24gZHJhZ2dpbmdcclxuICAgIFxyXG4gICAgcHVibGljIG9uRHJhZ1N0YXJ0KGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb21BbmREcmFnICYmIHRoaXMuem9vbVBlcmNlbnQgPiAxMDApIHtcclxuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy52aWV3T2Zmc2V0UGVyY2VudERyYWdTdGFydCA9IHRoaXMudmlld09mZnNldFBlcmNlbnQ7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxEcmFnWCA9IGV2ZW50LmNsaWVudFg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZlbnQgaW5zdGFuY2VvZiBUb3VjaEV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluaXRpYWxEcmFnWCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASG9zdExpc3RlbmVyKCd3aW5kb3c6bW91c2Vtb3ZlJywgWyckZXZlbnQnXSlcclxuICAgIHB1YmxpYyBvbkRyYWdNb3ZlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbUFuZERyYWcpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcmFnZ2luZykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFggPSBldmVudC5jbGllbnRYO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb3ZlRWxlbWVudChjdXJyZW50WCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQEhvc3RMaXN0ZW5lcignd2luZG93OnRvdWNobW92ZScsIFsnJGV2ZW50J10pXHJcbiAgICBvbkRyYWdNb3ZlVG91Y2goZXZlbnQ6IFRvdWNoRXZlbnQpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5lbmFibGVab29tQW5kRHJhZykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pc0RyYWdnaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50WCA9IGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WDtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZUVsZW1lbnQoY3VycmVudFgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzptb3VzZXVwJywgWyckZXZlbnQnXSlcclxuICAgIEBIb3N0TGlzdGVuZXIoJ3dpbmRvdzp0b3VjaGVuZCcsIFsnJGV2ZW50J10pXHJcbiAgICBwdWJsaWMgb25EcmFnRW5kKGV2ZW50OiBNb3VzZUV2ZW50IHwgVG91Y2hFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb21BbmREcmFnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1vdmVFbGVtZW50KGN1cnJlbnRYOiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkaWZmID0gY3VycmVudFggLSB0aGlzLmluaXRpYWxEcmFnWDtcclxuICAgICAgICBpZiAodGhpcy5fdmlld3BvcnQgJiYgdGhpcy5fdmlld3BvcnQubmF0aXZlRWxlbWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBkaWZmSW5QZXJjZW50ID0gKGRpZmYgLyB0aGlzLl92aWV3cG9ydD8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCkgKiAxMDA7XHJcbiAgICAgICAgICAgIC8vIHRoaXMudmlld09mZnNldFBlcmNlbnQgPSB0aGlzLnZpZXdPZmZzZXRQZXJjZW50RHJhZ1N0YXJ0ICsgZGlmZkluUGVyY2VudDtcclxuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW5PZmZzZXQodGhpcy52aWV3T2Zmc2V0UGVyY2VudERyYWdTdGFydCArIGRpZmZJblBlcmNlbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbiAgICBwcml2YXRlIGNvbnN0cmFpbk9mZnNldChuZXdPZmZzZXQ6IG51bWJlcik6IHZvaWQgeyAgICAgICAgXHJcbiAgICAgICAgaWYgKHRoaXMuem9vbVBlcmNlbnQgKyBuZXdPZmZzZXQgPCAxMDApIHtcclxuICAgICAgICAgICAgbmV3T2Zmc2V0ID0gLXRoaXMuem9vbVBlcmNlbnQgKyAxMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld09mZnNldCA9IE1hdGgubWluKDAsIG5ld09mZnNldCk7XHJcbiAgICAgICAgaWYgKG5ld09mZnNldCAhPSB0aGlzLnZpZXdPZmZzZXRQZXJjZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld09mZnNldFBlcmNlbnQgPSBuZXdPZmZzZXQ7XHJcbiAgICAgICAgICAgIHRoaXMudmlld09mZnNldFBlcmNlbnRDaGFuZ2UuZW1pdCh0aGlzLnZpZXdPZmZzZXRQZXJjZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZVRpY2tzKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuaG91clRpY2tzID0gdGhpcy5fdGltZWxpbmVTZXJ2aWNlLmdldEhvdXJUaWNrcyh0aGlzLnRpY2tGcmVxdWVuY3kpO1xyXG4gICAgICAgIHRoaXMuZGF5TGFiZWxzID0gdGhpcy5fdGltZWxpbmVTZXJ2aWNlLmRheUxhYmVscztcclxuICAgICAgICB0aGlzLmhvdXJMYWJlbHMgPSB0aGlzLl90aW1lbGluZVNlcnZpY2UuaG91ckxhYmVscztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdlbmVyYXRlSW50ZXJuYWxUaW1lbGluZUl0ZW1zKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uSXRlbXMgPSB0aGlzLml0ZW1zLm1hcCgoaXRlbSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbmV3IERhdGUoaXRlbS5zdGFydCkudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLCB7IGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnMi1kaWdpdCcgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZFRpbWUgPSBuZXcgRGF0ZShpdGVtLmVuZCkudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLCB7IGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnMi1kaWdpdCcgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWVSYW5nZSA9IGAke3N0YXJ0VGltZX0gLSAke2VuZFRpbWV9YDtcclxuICAgIFxyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbS5kYXRhLFxyXG4gICAgICAgICAgICAgICAgeDogdGhpcy5fdGltZWxpbmVTZXJ2aWNlLmdldFgoaXRlbS5zdGFydCksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5fdGltZWxpbmVTZXJ2aWNlLmdldFdpZHRoRnJvbVRpbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbS5zdGFydCxcclxuICAgICAgICAgICAgICAgICAgICBpdGVtLmVuZFxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIGhpbnQ6IGl0ZW0uaGludCA/PyB0aW1lUmFuZ2UsXHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGl0ZW0uYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBpdGVtLnRvcCA/PyAnNTAlJyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogaXRlbS5oZWlnaHQgPz8gJzYwJScsXHJcbiAgICAgICAgICAgICAgICBjbGFzczogaXRlbS5jbGFzcyxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUludGVybmFsVGltZWxpbmVQb2ludEluVGltZUl0ZW1zKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJlc2VudGF0aW9uUG9pbnRJblRpbWVJdGVtcyA9IHRoaXMucG9pbnRJblRpbWVJdGVtcy5tYXAoKGl0ZW0pID0+IHtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHRpbWVQb2ludFN0cmluZyA9IG5ldyBEYXRlKGl0ZW0uZGF0ZSkudG9Mb2NhbGVUaW1lU3RyaW5nKFtdLCB7IGhvdXI6ICdudW1lcmljJywgbWludXRlOiAnMi1kaWdpdCcgfSk7XHJcbiAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW0uZGF0YSxcclxuICAgICAgICAgICAgICAgIHg6IHRoaXMuX3RpbWVsaW5lU2VydmljZS5nZXRYKGl0ZW0uZGF0ZSksXHJcbiAgICAgICAgICAgICAgICBoaW50OiBpdGVtLmhpbnQgPz8gdGltZVBvaW50U3RyaW5nLFxyXG4gICAgICAgICAgICAgICAgdG9wOiBpdGVtLnRvcCA/PyAnMjAlJyxcclxuICAgICAgICAgICAgICAgIGhlaWdodDogaXRlbS5oZWlnaHQgPz8gJzFyZW0nLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6IGl0ZW0ud2lkdGggPz8gJzFyZW0nLFxyXG4gICAgICAgICAgICAgICAgY2xhc3M6IGl0ZW0uY2xhc3MsXHJcbiAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IGl0ZW0uYmFja2dyb3VuZENvbG9yLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59XHJcbiIsIjxuZy10ZW1wbGF0ZSAjZGVmYXVsdEl0ZW1UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgIDxkaXYgXHJcbiAgICAgICAgY2xhc3M9XCJzZHMtdGltZWxpbmUtaXRlbSBoLTEwMFwiXHJcbiAgICAgICAgW3RpdGxlXT1cIml0ZW0uaGludFwiXHJcbiAgICAgICAgPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2RlZmF1bHRQb2ludEluVGltZUl0ZW1UZW1wbGF0ZSBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgIDxkaXYgXHJcbiAgICAgICAgY2xhc3M9XCJzZHMtdGltZWxpbmUtaXRlbSBoLTEwMFwiXHJcbiAgICAgICAgW3RpdGxlXT1cIml0ZW0uaGludFwiXHJcbiAgICAgICAgPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48ZGl2IFxyXG4gICAgI3ZpZXdwb3J0XHJcbiAgICBjbGFzcz1cInNkcy10aW1lbGluZS12aWV3cG9ydFwiXHJcbiAgICAod2hlZWwpPVwib25TY3JvbGwoJGV2ZW50KVwiXHJcblxyXG4gICAgKG1vdXNlZG93bik9XCJvbkRyYWdTdGFydCgkZXZlbnQpXCJcclxuICAgICh0b3VjaHN0YXJ0KT1cIm9uRHJhZ1N0YXJ0KCRldmVudClcIlxyXG4gICAgPlxyXG5cclxuICAgIDxkaXYgXHJcbiAgICAgICAgY2xhc3M9XCJzZHMtdGltZWxpbmUtY29udGFpbmVyIGQtZmxleCBmbGV4LWNvbHVtblwiXHJcbiAgICAgICAgW3N0eWxlLmxlZnQuJV09XCJ2aWV3T2Zmc2V0UGVyY2VudFwiXHJcbiAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwiem9vbVBlcmNlbnRcIlxyXG4gICAgICAgIFtzdHlsZS5jdXJzb3JdPVwiaXNEcmFnZ2luZyA/ICdldy1yZXNpemUnIDogJ2RlZmF1bHQnXCJcclxuICAgICAgICA+XHJcblxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgICAgKm5nSWY9XCJzaG93RGF5TGFiZWxzXCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLWRheS1oZWFkZXJcIj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgXHJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFiZWwgb2YgZGF5TGFiZWxzXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RzLWRheS1sYWJlbCBmb250LW1vbm9zcGFjZVwiICBcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5sZWZ0LiVdPVwibGFiZWwueFwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJsYWJlbC53aWR0aFwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxzbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICB7e2xhYmVsLmxhYmVsfX1cclxuICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAqbmdJZj1cInNob3dIb3VyTGFiZWxzXCIgXHJcbiAgICAgICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLWhvdXItaGVhZGVyXCI+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IFxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGhvdXJMYWJlbHM7XCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RzLWhvdXItbGFiZWwgZm9udC1tb25vc3BhY2VcIiAgXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cImxhYmVsLnhcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwibGFiZWwud2lkdGhcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICA8c21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAge3tsYWJlbC5sYWJlbH19XHJcbiAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgY2xhc3M9XCJzZHMtdGltZWxpbmUgZmxleC1ncm93LTFcIlxyXG4gICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cInRpbWVsaW5lSGVpZ2h0XCJcclxuICAgICAgICAgICAgPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCB0aWNrIG9mIGhvdXJUaWNrc1wiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNkcy10aW1lbGluZS10aWNrXCIgIFxyXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwidGljay54ID09IDEwMCA/IHsnbGVmdCc6ICdjYWxjKCcgKyB0aWNrLnggKyclIC0gMXB4KSd9IDogeydsZWZ0JzogJ2NhbGMoJyArIHRpY2sueCArICclIC0gMC41cHgpJ31cIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBcclxuICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBpdGVtIG9mIHByZXNlbnRhdGlvbkl0ZW1zXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLWl0ZW0tY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAnd2lkdGgnOiAnbWF4KCcgKyBpdGVtLndpZHRoICsnJSwgMXB4KScsXHJcbiAgICAgICAgICAgICAgICAgICAgJ3RvcCc6ICdjYWxjKCcgKyBpdGVtLnRvcCArICcgLSBtYXgoY2FsYygnICsgaXRlbS5oZWlnaHQgKycvMiksIDFweCkpJywgXHJcbiAgICAgICAgICAgICAgICB9XCJcclxuXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUubGVmdC4lXT1cIml0ZW0ueFwiXHJcbiAgICAgICAgICAgICAgICBbc3R5bGUuaGVpZ2h0XT1cIml0ZW0uaGVpZ2h0XCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaXRlbS5iYWNrZ3JvdW5kQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlID8gaXRlbVRlbXBsYXRlIDogZGVmYXVsdEl0ZW1UZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cIntpdGVtOiBpdGVtfVwiPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+ICBcclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBwcmVzZW50YXRpb25Qb2ludEluVGltZUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwic2RzLXRpbWVsaW5lLXBvaW50LWluLXRpbWUtaXRlbS1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jbGFzc1wiXHRcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHRdPVwiaXRlbS5oZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cIml0ZW0ud2lkdGhcIlxyXG4gICAgICAgICAgICAgICAgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICd0b3AnOiAnY2FsYygnICsgaXRlbS50b3AgKyAnIC0gbWF4KGNhbGMoJyArIGl0ZW0uaGVpZ2h0ICsnLzIpLCAxcHgpKScsIFxyXG4gICAgICAgICAgICAgICAgICAgICdsZWZ0JzogJ2NhbGMoJyArIGl0ZW0ueCArICclIC0gbWF4KCBjYWxjKCcgKyBpdGVtLndpZHRoICsnLzIpLCAxcHgpKScsXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kQ29sb3JdPVwiaXRlbS5iYWNrZ3JvdW5kQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgXHJcbiAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaXRlbVRlbXBsYXRlID8gaXRlbVRlbXBsYXRlIDogZGVmYXVsdFBvaW50SW5UaW1lSXRlbVRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwie2l0ZW06IGl0ZW19XCI+XHJcbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj4gIFxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc2RzLWNvbXBvbmVudHMvc3JjL2xpYi90aW1lbGluZS9tb2RlbHMvdGltZWxpbmUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgVGltZWxpbmVUaWNrIHtcclxuICAgIGRhdGU6IERhdGU7XHJcbiAgICB4OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgVGltZWxpbmVJbnRlcnZhbExhYmVsIHtcclxuICAgIHg6IG51bWJlcjtcclxuICAgIHdpZHRoOiBudW1iZXI7XHJcbiAgICBsYWJlbDogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgVGltZWxpbmVCYXNlSXRlbSB7XHJcbiAgICBkYXRhPzogYW55O1xyXG5cclxuICAgIGhpbnQ/OiBzdHJpbmc7XHJcbiAgICB0b3A/OiBzdHJpbmc7XHJcbiAgICBoZWlnaHQ/OiBzdHJpbmc7XHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I/OiBzdHJpbmc7XHJcbiAgICBjbGFzcz86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUaW1lbGluZUl0ZW0gZXh0ZW5kcyBUaW1lbGluZUJhc2VJdGVtIHtcclxuICAgIHN0YXJ0OiBEYXRlO1xyXG4gICAgZW5kOiBEYXRlO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtIGV4dGVuZHMgVGltZWxpbmVCYXNlSXRlbSB7XHJcbiAgICBkYXRlOiBEYXRlO1xyXG4gICAgd2lkdGg6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFRpbWVsaW5lSXRlbVByZXNlbnRhdGlvbkJhc2Uge1xyXG4gICAgZGF0YT86IGFueTtcclxuICAgIHg6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUaW1lbGluZUl0ZW1QcmVzZW50YXRpb24gZXh0ZW5kcyBUaW1lbGluZUJhc2VJdGVtLCBUaW1lbGluZUl0ZW1QcmVzZW50YXRpb25CYXNlICB7XHJcbiAgICB3aWR0aDogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVsaW5lUG9pbnRJblRpbWVJdGVtUHJlc2VudGF0aW9uIGV4dGVuZHMgVGltZWxpbmVCYXNlSXRlbSwgVGltZWxpbmVJdGVtUHJlc2VudGF0aW9uQmFzZSAge1xyXG4gICAgd2lkdGg6IHN0cmluZztcclxufVxyXG4iXX0=
|
|
@@ -1,28 +1,65 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { Component, Input, HostBinding, NgModule } from '@angular/core';
|
|
3
3
|
import { CommonModule } from '@angular/common';
|
|
4
4
|
|
|
5
5
|
class SdsDrawerComponent {
|
|
6
6
|
constructor() {
|
|
7
7
|
this.isOpen = false;
|
|
8
|
-
this.isOpenChange = new EventEmitter();
|
|
9
8
|
this.width = '10rem';
|
|
10
9
|
this.position = 'end';
|
|
10
|
+
this.drawerClass = true;
|
|
11
|
+
}
|
|
12
|
+
get drawerEnd() {
|
|
13
|
+
return this.position === 'end';
|
|
14
|
+
}
|
|
15
|
+
get drawerStart() {
|
|
16
|
+
return this.position === 'start';
|
|
17
|
+
}
|
|
18
|
+
get drawerTop() {
|
|
19
|
+
return this.position === 'top';
|
|
20
|
+
}
|
|
21
|
+
get drawerBottom() {
|
|
22
|
+
return this.position === 'bottom';
|
|
23
|
+
}
|
|
24
|
+
get show() {
|
|
25
|
+
return this.isOpen;
|
|
26
|
+
}
|
|
27
|
+
get drawerWidth() {
|
|
28
|
+
return this.width;
|
|
11
29
|
}
|
|
12
30
|
}
|
|
13
31
|
SdsDrawerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
14
|
-
SdsDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SdsDrawerComponent, selector: "sds-drawer", inputs: { isOpen: "isOpen", width: "width", position: "position" },
|
|
32
|
+
SdsDrawerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SdsDrawerComponent, selector: "sds-drawer", inputs: { isOpen: "isOpen", width: "width", position: "position" }, host: { properties: { "class.sds-drawer": "this.drawerClass", "class.sds-drawer-end": "this.drawerEnd", "class.sds-drawer-start": "this.drawerStart", "class.sds-drawer-top": "this.drawerTop", "class.sds-drawer-bottom": "this.drawerBottom", "class.show": "this.show", "style.width": "this.drawerWidth" } }, ngImport: i0, template: "<ng-content></ng-content>\r\n", styles: [":host{position:fixed;bottom:0;z-index:1040;display:flex;flex-direction:column;max-width:100%;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}:host(.sds-drawer-start){top:0;left:0;width:400px;border-right:1px solid var(--bs-gray-400);transform:translate(-100%)}:host(.sds-drawer-end){top:0;right:0;width:400px;border-left:1px solid var(--bs-gray-400);transform:translate(100%)}:host(.sds-drawer-top){top:0;right:0;left:0;height:400px;max-height:100%;border-bottom:1px solid var(--bs-gray-400);transform:translateY(-100%)}:host(.sds-drawer-bottom){right:0;left:0;height:400px;max-height:100%;border-top:1px solid var(--bs-gray-400);transform:translateY(100%)}:host(.show){transform:none;box-shadow:var(--bs-box-shadow)!important}\n"] });
|
|
15
33
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsDrawerComponent, decorators: [{
|
|
16
34
|
type: Component,
|
|
17
|
-
args: [{ selector: 'sds-drawer', template: "<
|
|
35
|
+
args: [{ selector: 'sds-drawer', template: "<ng-content></ng-content>\r\n", styles: [":host{position:fixed;bottom:0;z-index:1040;display:flex;flex-direction:column;max-width:100%;background-color:#fff;background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}:host(.sds-drawer-start){top:0;left:0;width:400px;border-right:1px solid var(--bs-gray-400);transform:translate(-100%)}:host(.sds-drawer-end){top:0;right:0;width:400px;border-left:1px solid var(--bs-gray-400);transform:translate(100%)}:host(.sds-drawer-top){top:0;right:0;left:0;height:400px;max-height:100%;border-bottom:1px solid var(--bs-gray-400);transform:translateY(-100%)}:host(.sds-drawer-bottom){right:0;left:0;height:400px;max-height:100%;border-top:1px solid var(--bs-gray-400);transform:translateY(100%)}:host(.show){transform:none;box-shadow:var(--bs-box-shadow)!important}\n"] }]
|
|
18
36
|
}], propDecorators: { isOpen: [{
|
|
19
37
|
type: Input
|
|
20
|
-
}], isOpenChange: [{
|
|
21
|
-
type: Output
|
|
22
38
|
}], width: [{
|
|
23
39
|
type: Input
|
|
24
40
|
}], position: [{
|
|
25
41
|
type: Input
|
|
42
|
+
}], drawerClass: [{
|
|
43
|
+
type: HostBinding,
|
|
44
|
+
args: ['class.sds-drawer']
|
|
45
|
+
}], drawerEnd: [{
|
|
46
|
+
type: HostBinding,
|
|
47
|
+
args: ['class.sds-drawer-end']
|
|
48
|
+
}], drawerStart: [{
|
|
49
|
+
type: HostBinding,
|
|
50
|
+
args: ['class.sds-drawer-start']
|
|
51
|
+
}], drawerTop: [{
|
|
52
|
+
type: HostBinding,
|
|
53
|
+
args: ['class.sds-drawer-top']
|
|
54
|
+
}], drawerBottom: [{
|
|
55
|
+
type: HostBinding,
|
|
56
|
+
args: ['class.sds-drawer-bottom']
|
|
57
|
+
}], show: [{
|
|
58
|
+
type: HostBinding,
|
|
59
|
+
args: ['class.show']
|
|
60
|
+
}], drawerWidth: [{
|
|
61
|
+
type: HostBinding,
|
|
62
|
+
args: ['style.width']
|
|
26
63
|
}] } });
|
|
27
64
|
|
|
28
65
|
class SdsDrawerModule {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spicainternational-ngx-sds-components-src-lib-drawer.mjs","sources":["../../../projects/ngx-sds-components/src/lib/drawer/drawer.component.ts","../../../projects/ngx-sds-components/src/lib/drawer/drawer.component.html","../../../projects/ngx-sds-components/src/lib/drawer/drawer.module.ts","../../../projects/ngx-sds-components/src/lib/drawer/spicainternational-ngx-sds-components-src-lib-drawer.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"spicainternational-ngx-sds-components-src-lib-drawer.mjs","sources":["../../../projects/ngx-sds-components/src/lib/drawer/drawer.component.ts","../../../projects/ngx-sds-components/src/lib/drawer/drawer.component.html","../../../projects/ngx-sds-components/src/lib/drawer/drawer.module.ts","../../../projects/ngx-sds-components/src/lib/drawer/spicainternational-ngx-sds-components-src-lib-drawer.ts"],"sourcesContent":["import {\r\n Component,\r\n EventEmitter,\r\n HostBinding,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\n\r\n@Component({\r\n selector: 'sds-drawer',\r\n templateUrl: './drawer.component.html',\r\n styleUrls: ['./drawer.component.scss'],\r\n})\r\nexport class SdsDrawerComponent {\r\n @Input() isOpen = false;\r\n\r\n @Input() width = '10rem';\r\n @Input() position: 'start' | 'end' | 'top' | 'bottom' = 'end';\r\n\r\n @HostBinding('class.sds-drawer') drawerClass = true;\r\n @HostBinding('class.sds-drawer-end') get drawerEnd() {\r\n return this.position === 'end';\r\n }\r\n @HostBinding('class.sds-drawer-start') get drawerStart() {\r\n return this.position === 'start';\r\n }\r\n @HostBinding('class.sds-drawer-top') get drawerTop() {\r\n return this.position === 'top';\r\n }\r\n @HostBinding('class.sds-drawer-bottom') get drawerBottom() {\r\n return this.position === 'bottom';\r\n }\r\n @HostBinding('class.show') get show() {\r\n return this.isOpen;\r\n }\r\n @HostBinding('style.width') get drawerWidth() {\r\n return this.width;\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdsDrawerComponent } from './drawer.component';\r\n\r\n@NgModule({\r\n declarations: [SdsDrawerComponent],\r\n imports: [CommonModule],\r\n exports: [SdsDrawerComponent],\r\n})\r\nexport class SdsDrawerModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -18,7 +18,6 @@ class SdsModalComponent {
|
|
|
18
18
|
this.showCloseButton = true;
|
|
19
19
|
this.autoFocusCloseButton = false;
|
|
20
20
|
this.isScrollable = true;
|
|
21
|
-
this.isVerticallyCentered = true;
|
|
22
21
|
this.closeOnEscape = false;
|
|
23
22
|
this.downSizing = 'discrete';
|
|
24
23
|
/**
|
|
@@ -96,10 +95,10 @@ class SdsModalComponent {
|
|
|
96
95
|
}
|
|
97
96
|
}
|
|
98
97
|
SdsModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
99
|
-
SdsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SdsModalComponent, selector: "sds-modal", inputs: { modalTitle: "modalTitle", showHeader: "showHeader", showFooter: "showFooter", size: "size", modalDialogId: "modalDialogId", showCloseButton: "showCloseButton", autoFocusCloseButton: "autoFocusCloseButton", translations: "translations", isScrollable: "isScrollable",
|
|
98
|
+
SdsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SdsModalComponent, selector: "sds-modal", inputs: { modalTitle: "modalTitle", showHeader: "showHeader", showFooter: "showFooter", size: "size", modalDialogId: "modalDialogId", showCloseButton: "showCloseButton", autoFocusCloseButton: "autoFocusCloseButton", translations: "translations", isScrollable: "isScrollable", closeOnEscape: "closeOnEscape", downSizing: "downSizing", isDraggable: "isDraggable", isDragConstrained: "isDragConstrained", isOpen: "isOpen" }, outputs: { modalOpen: "modalOpen", modalClose: "modalClose", closeClick: "closeClick", closeEscapeKeypress: "closeEscapeKeypress", isOpenChange: "isOpenChange" }, queries: [{ propertyName: "headerContent", first: true, predicate: ["header"], descendants: true }], viewQueries: [{ propertyName: "_modal", first: true, predicate: ["modal"], descendants: true }, { propertyName: "_closeButton", first: true, predicate: ["closeButton"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div \r\n #modal \r\n class=\"modal modal-backdrop\" \r\n (keydown)=\"onKeydown($event)\" \r\n [cdkTrapFocus]=\"isOpen\" \r\n [cdkTrapFocusAutoCapture]=\"true\" \r\n >\r\n <div\r\n class=\"modal-dialog modal-dialog-centered\"\r\n [class.modal-dialog-scrollable] = \"isScrollable\"\r\n [class.downsize-continuous] = \"downSizing === 'continuous'\"\r\n [attr.id]=\"modalDialogId\"\r\n [ngClass]=\"'modal-' + size\"\r\n role=\"document\"\r\n >\r\n <div \r\n class=\"modal-content\" \r\n cdkDrag [cdkDragDisabled]=\"!isDraggable\" [cdkDragBoundary]=\"isDragConstrained ? '.modal-backdrop' : ''\"\r\n >\r\n\r\n <div *ngIf=\"isDraggable\" class=\"modal-drag-handle\" cdkDragHandle></div>\r\n\r\n <div \r\n *ngIf=\"showHeader && headerContent\" \r\n class=\"modal-header\" \r\n >\r\n <ng-content select='header'></ng-content>\r\n </div> \r\n\r\n <div \r\n *ngIf=\"showHeader && !headerContent\" \r\n class=\"modal-header\"\r\n >\r\n\r\n <h5 class=\"modal-title\">{{modalTitle}}</h5>\r\n <button \r\n #closeButton\r\n *ngIf=\"showCloseButton\"\r\n type=\"button\" \r\n class=\"btn-close sds-fs-75\" \r\n [title]=\"translations.close ?? ''\"\r\n (click)=\"onCloseButtonClick()\">\r\n </button>\r\n </div>\r\n\r\n <div \r\n class=\"modal-body\"\r\n [class.pt-0]=\"showHeader\"\r\n [class.pb-0]=\"showFooter\"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div *ngIf=\"showFooter\" class=\"modal-footer\">\r\n <ng-content select=\"footer\"></ng-content>\r\n </div> \r\n </div>\r\n </div>\r\n</div>", styles: [".modal{background:rgba(0,0,0,.5)}.modal .modal-drag-handle{cursor:move;position:absolute;width:100%;height:1rem}.modal .modal-header button.btn-close{font-size:.75em}.modal .modal-header button.btn-close:hover{background-color:var(--bs-gray-200)}.modal.in{opacity:1}.modal.in .modal-dialog{transform:translate(0)}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}@media (min-width: 820px){.modal-820{max-width:820px}}@media (min-width: 576px){.modal-dialog.downsize-continuous{width:calc(90vw - 2rem)}.modal-dialog.downsize-continuous.modal-md{max-width:var(--bs-breakpoint-sm)}.modal-dialog.downsize-continuous.modal-lg{max-width:var(--bs-breakpoint-md)}.modal-dialog.downsize-continuous.modal-xl{max-width:var(--bs-breakpoint-lg)}.modal-dialog.downsize-continuous.modal-xxl{max-width:var(--bs-breakpoint-xl)}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { kind: "directive", type: i3.CdkDrag, selector: "[cdkDrag]", inputs: ["cdkDragData", "cdkDragLockAxis", "cdkDragRootElement", "cdkDragBoundary", "cdkDragStartDelay", "cdkDragFreeDragPosition", "cdkDragDisabled", "cdkDragConstrainPosition", "cdkDragPreviewClass", "cdkDragPreviewContainer"], outputs: ["cdkDragStarted", "cdkDragReleased", "cdkDragEnded", "cdkDragEntered", "cdkDragExited", "cdkDragDropped", "cdkDragMoved"], exportAs: ["cdkDrag"] }, { kind: "directive", type: i3.CdkDragHandle, selector: "[cdkDragHandle]", inputs: ["cdkDragHandleDisabled"] }] });
|
|
100
99
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsModalComponent, decorators: [{
|
|
101
100
|
type: Component,
|
|
102
|
-
args: [{ selector: 'sds-modal', template: "<div \r\n #modal \r\n class=\"modal modal-backdrop\" \r\n (keydown)=\"onKeydown($event)\" \r\n [cdkTrapFocus]=\"isOpen\" \r\n [cdkTrapFocusAutoCapture]=\"true\" \r\n >\r\n <div\r\n class=\"modal-dialog\"\r\n [class.modal-dialog-scrollable] = \"isScrollable\"\r\n [class.downsize-continuous] = \"downSizing === 'continuous'\"\r\n [
|
|
101
|
+
args: [{ selector: 'sds-modal', template: "<div \r\n #modal \r\n class=\"modal modal-backdrop\" \r\n (keydown)=\"onKeydown($event)\" \r\n [cdkTrapFocus]=\"isOpen\" \r\n [cdkTrapFocusAutoCapture]=\"true\" \r\n >\r\n <div\r\n class=\"modal-dialog modal-dialog-centered\"\r\n [class.modal-dialog-scrollable] = \"isScrollable\"\r\n [class.downsize-continuous] = \"downSizing === 'continuous'\"\r\n [attr.id]=\"modalDialogId\"\r\n [ngClass]=\"'modal-' + size\"\r\n role=\"document\"\r\n >\r\n <div \r\n class=\"modal-content\" \r\n cdkDrag [cdkDragDisabled]=\"!isDraggable\" [cdkDragBoundary]=\"isDragConstrained ? '.modal-backdrop' : ''\"\r\n >\r\n\r\n <div *ngIf=\"isDraggable\" class=\"modal-drag-handle\" cdkDragHandle></div>\r\n\r\n <div \r\n *ngIf=\"showHeader && headerContent\" \r\n class=\"modal-header\" \r\n >\r\n <ng-content select='header'></ng-content>\r\n </div> \r\n\r\n <div \r\n *ngIf=\"showHeader && !headerContent\" \r\n class=\"modal-header\"\r\n >\r\n\r\n <h5 class=\"modal-title\">{{modalTitle}}</h5>\r\n <button \r\n #closeButton\r\n *ngIf=\"showCloseButton\"\r\n type=\"button\" \r\n class=\"btn-close sds-fs-75\" \r\n [title]=\"translations.close ?? ''\"\r\n (click)=\"onCloseButtonClick()\">\r\n </button>\r\n </div>\r\n\r\n <div \r\n class=\"modal-body\"\r\n [class.pt-0]=\"showHeader\"\r\n [class.pb-0]=\"showFooter\"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n\r\n <div *ngIf=\"showFooter\" class=\"modal-footer\">\r\n <ng-content select=\"footer\"></ng-content>\r\n </div> \r\n </div>\r\n </div>\r\n</div>", styles: [".modal{background:rgba(0,0,0,.5)}.modal .modal-drag-handle{cursor:move;position:absolute;width:100%;height:1rem}.modal .modal-header button.btn-close{font-size:.75em}.modal .modal-header button.btn-close:hover{background-color:var(--bs-gray-200)}.modal.in{opacity:1}.modal.in .modal-dialog{transform:translate(0)}.modal-backdrop.fade{filter:alpha(opacity=0);opacity:0}.modal-backdrop.in{filter:alpha(opacity=50);opacity:.5}@media (min-width: 820px){.modal-820{max-width:820px}}@media (min-width: 576px){.modal-dialog.downsize-continuous{width:calc(90vw - 2rem)}.modal-dialog.downsize-continuous.modal-md{max-width:var(--bs-breakpoint-sm)}.modal-dialog.downsize-continuous.modal-lg{max-width:var(--bs-breakpoint-md)}.modal-dialog.downsize-continuous.modal-xl{max-width:var(--bs-breakpoint-lg)}.modal-dialog.downsize-continuous.modal-xxl{max-width:var(--bs-breakpoint-xl)}}\n"] }]
|
|
103
102
|
}], ctorParameters: function () { return []; }, propDecorators: { headerContent: [{
|
|
104
103
|
type: ContentChild,
|
|
105
104
|
args: ['header']
|
|
@@ -121,8 +120,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
121
120
|
type: Input
|
|
122
121
|
}], isScrollable: [{
|
|
123
122
|
type: Input
|
|
124
|
-
}], isVerticallyCentered: [{
|
|
125
|
-
type: Input
|
|
126
123
|
}], closeOnEscape: [{
|
|
127
124
|
type: Input
|
|
128
125
|
}], downSizing: [{
|
|
@@ -263,7 +260,7 @@ class SdsDialogComponent {
|
|
|
263
260
|
}
|
|
264
261
|
}
|
|
265
262
|
SdsDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsDialogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
266
|
-
SdsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SdsDialogComponent, selector: "sds-dialog", inputs: { title: "title", dialogTitle: "dialogTitle", closeText: "closeText", size: "size", primaryButtonText: "primaryButtonText", primaryButtonClass: "primaryButtonClass", primaryButtonType: "primaryButtonType", primaryButtonId: "primaryButtonId", primaryButtonDisabled: "primaryButtonDisabled", secondaryButtonText: "secondaryButtonText", secondaryButtonClass: "secondaryButtonClass", secondaryButtonType: "secondaryButtonType", secondaryButtonId: "secondaryButtonId", secondaryButtonDisabled: "secondaryButtonDisabled", closeOnEscape: "closeOnEscape", showHeader: "showHeader", showCloseButton: "showCloseButton", showPrimaryButton: "showPrimaryButton", showSecondaryButton: "showSecondaryButton", autofocusElement: "autofocusElement", modalDialogId: "modalDialogId", isOpen: "isOpen" }, outputs: { dialogOpen: "dialogOpen", dialogClose: "dialogClose", isOpenChange: "isOpenChange", primaryButtonClick: "primaryButtonClick", secondaryButtonClick: "secondaryButtonClick" }, viewQueries: [{ propertyName: "_modal", first: true, predicate: ["modal"], descendants: true, static: true }, { propertyName: "_content", first: true, predicate: ["content"], descendants: true, read: ElementRef, static: true }, { propertyName: "_primaryButton", first: true, predicate: ["primaryButton"], descendants: true, read: ElementRef }, { propertyName: "_secondaryButton", first: true, predicate: ["secondaryButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<sds-modal\r\n #modal\r\n [modalTitle]=\"dialogTitle || title\"\r\n [size]=\"size\"\r\n [modalDialogId]=\"modalDialogId\"\r\n [showCloseButton]=\"showCloseButton\"\r\n [showHeader]=\"showHeader\"\r\n [translations]=\"{ close: closeText}\"\r\n [autoFocusCloseButton]=\"autofocusElement === 'close'\"\r\n [closeOnEscape]=\"closeOnEscape\"\r\n (closeClick)=\"onCloseClick()\"\r\n (closeEscapeKeypress)=\"onCloseEscapeKeypress()\"\r\n (modalClose)=\"onModalClose()\"\r\n (modalOpen)=\"onModalOpen()\"\r\n [(isOpen)]=\"isOpen\"\r\n>\r\n\r\n <div #content [attr.tabindex]=\"autofocusElement === 'content' ? 0 : undefined\" >\r\n <ng-content></ng-content>\r\n </div>\r\n <ng-container #footer ngProjectAs='footer'>\r\n <button\r\n #secondaryButton\r\n *ngIf=\"showSecondaryButton\"\r\n [attr.id]=\"secondaryButtonId\"\r\n [disabled]=\"secondaryButtonDisabled\"\r\n class=\"btn\"\r\n [class]=\"secondaryButtonClass\"\r\n (click)=\"onSecondaryClick()\"\r\n >{{secondaryButtonText}}</button>\r\n <button\r\n #primaryButton\r\n *ngIf=\"showPrimaryButton\"\r\n [attr.id]=\"primaryButtonId\"\r\n [disabled]=\"primaryButtonDisabled\"\r\n class=\"btn\"\r\n [class]=\"primaryButtonClass\"\r\n (click)=\"onPrimaryClick()\"\r\n >{{primaryButtonText}}</button>\r\n </ng-container>\r\n</sds-modal>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SdsModalComponent, selector: "sds-modal", inputs: ["modalTitle", "showHeader", "showFooter", "size", "modalDialogId", "showCloseButton", "autoFocusCloseButton", "translations", "isScrollable", "
|
|
263
|
+
SdsDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SdsDialogComponent, selector: "sds-dialog", inputs: { title: "title", dialogTitle: "dialogTitle", closeText: "closeText", size: "size", primaryButtonText: "primaryButtonText", primaryButtonClass: "primaryButtonClass", primaryButtonType: "primaryButtonType", primaryButtonId: "primaryButtonId", primaryButtonDisabled: "primaryButtonDisabled", secondaryButtonText: "secondaryButtonText", secondaryButtonClass: "secondaryButtonClass", secondaryButtonType: "secondaryButtonType", secondaryButtonId: "secondaryButtonId", secondaryButtonDisabled: "secondaryButtonDisabled", closeOnEscape: "closeOnEscape", showHeader: "showHeader", showCloseButton: "showCloseButton", showPrimaryButton: "showPrimaryButton", showSecondaryButton: "showSecondaryButton", autofocusElement: "autofocusElement", modalDialogId: "modalDialogId", isOpen: "isOpen" }, outputs: { dialogOpen: "dialogOpen", dialogClose: "dialogClose", isOpenChange: "isOpenChange", primaryButtonClick: "primaryButtonClick", secondaryButtonClick: "secondaryButtonClick" }, viewQueries: [{ propertyName: "_modal", first: true, predicate: ["modal"], descendants: true, static: true }, { propertyName: "_content", first: true, predicate: ["content"], descendants: true, read: ElementRef, static: true }, { propertyName: "_primaryButton", first: true, predicate: ["primaryButton"], descendants: true, read: ElementRef }, { propertyName: "_secondaryButton", first: true, predicate: ["secondaryButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<sds-modal\r\n #modal\r\n [modalTitle]=\"dialogTitle || title\"\r\n [size]=\"size\"\r\n [modalDialogId]=\"modalDialogId\"\r\n [showCloseButton]=\"showCloseButton\"\r\n [showHeader]=\"showHeader\"\r\n [translations]=\"{ close: closeText}\"\r\n [autoFocusCloseButton]=\"autofocusElement === 'close'\"\r\n [closeOnEscape]=\"closeOnEscape\"\r\n (closeClick)=\"onCloseClick()\"\r\n (closeEscapeKeypress)=\"onCloseEscapeKeypress()\"\r\n (modalClose)=\"onModalClose()\"\r\n (modalOpen)=\"onModalOpen()\"\r\n [(isOpen)]=\"isOpen\"\r\n>\r\n\r\n <div #content [attr.tabindex]=\"autofocusElement === 'content' ? 0 : undefined\" >\r\n <ng-content></ng-content>\r\n </div>\r\n <ng-container #footer ngProjectAs='footer'>\r\n <button\r\n #secondaryButton\r\n *ngIf=\"showSecondaryButton\"\r\n [attr.id]=\"secondaryButtonId\"\r\n [disabled]=\"secondaryButtonDisabled\"\r\n class=\"btn\"\r\n [class]=\"secondaryButtonClass\"\r\n (click)=\"onSecondaryClick()\"\r\n >{{secondaryButtonText}}</button>\r\n <button\r\n #primaryButton\r\n *ngIf=\"showPrimaryButton\"\r\n [attr.id]=\"primaryButtonId\"\r\n [disabled]=\"primaryButtonDisabled\"\r\n class=\"btn\"\r\n [class]=\"primaryButtonClass\"\r\n (click)=\"onPrimaryClick()\"\r\n >{{primaryButtonText}}</button>\r\n </ng-container>\r\n</sds-modal>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: SdsModalComponent, selector: "sds-modal", inputs: ["modalTitle", "showHeader", "showFooter", "size", "modalDialogId", "showCloseButton", "autoFocusCloseButton", "translations", "isScrollable", "closeOnEscape", "downSizing", "isDraggable", "isDragConstrained", "isOpen"], outputs: ["modalOpen", "modalClose", "closeClick", "closeEscapeKeypress", "isOpenChange"] }] });
|
|
267
264
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsDialogComponent, decorators: [{
|
|
268
265
|
type: Component,
|
|
269
266
|
args: [{ selector: 'sds-dialog', template: "<sds-modal\r\n #modal\r\n [modalTitle]=\"dialogTitle || title\"\r\n [size]=\"size\"\r\n [modalDialogId]=\"modalDialogId\"\r\n [showCloseButton]=\"showCloseButton\"\r\n [showHeader]=\"showHeader\"\r\n [translations]=\"{ close: closeText}\"\r\n [autoFocusCloseButton]=\"autofocusElement === 'close'\"\r\n [closeOnEscape]=\"closeOnEscape\"\r\n (closeClick)=\"onCloseClick()\"\r\n (closeEscapeKeypress)=\"onCloseEscapeKeypress()\"\r\n (modalClose)=\"onModalClose()\"\r\n (modalOpen)=\"onModalOpen()\"\r\n [(isOpen)]=\"isOpen\"\r\n>\r\n\r\n <div #content [attr.tabindex]=\"autofocusElement === 'content' ? 0 : undefined\" >\r\n <ng-content></ng-content>\r\n </div>\r\n <ng-container #footer ngProjectAs='footer'>\r\n <button\r\n #secondaryButton\r\n *ngIf=\"showSecondaryButton\"\r\n [attr.id]=\"secondaryButtonId\"\r\n [disabled]=\"secondaryButtonDisabled\"\r\n class=\"btn\"\r\n [class]=\"secondaryButtonClass\"\r\n (click)=\"onSecondaryClick()\"\r\n >{{secondaryButtonText}}</button>\r\n <button\r\n #primaryButton\r\n *ngIf=\"showPrimaryButton\"\r\n [attr.id]=\"primaryButtonId\"\r\n [disabled]=\"primaryButtonDisabled\"\r\n class=\"btn\"\r\n [class]=\"primaryButtonClass\"\r\n (click)=\"onPrimaryClick()\"\r\n >{{primaryButtonText}}</button>\r\n </ng-container>\r\n</sds-modal>\r\n" }]
|