@spicainternational/ngx-sds-components 7.11.0 → 7.11.2
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/README.md +13 -57
- package/esm2020/src/lib/expansion-panel/expansion-panel.component.mjs +3 -3
- package/esm2020/src/lib/timeline/components/timeline.component.mjs +26 -8
- package/esm2020/src/lib/timeline/services/timeline.service.mjs +55 -23
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-expansion-panel.mjs +2 -2
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-expansion-panel.mjs.map +1 -1
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-timeline.mjs +79 -29
- package/fesm2015/spicainternational-ngx-sds-components-src-lib-timeline.mjs.map +1 -1
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-expansion-panel.mjs +2 -2
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-expansion-panel.mjs.map +1 -1
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-timeline.mjs +79 -29
- package/fesm2020/spicainternational-ngx-sds-components-src-lib-timeline.mjs.map +1 -1
- package/package.json +1 -1
- package/src/lib/timeline/components/timeline.component.d.ts +9 -1
- package/src/lib/timeline/services/timeline.service.d.ts +4 -1
|
@@ -1,27 +1,56 @@
|
|
|
1
1
|
export class SdsTimelineService {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
constructor(start, end, offSetMinutes, cutOffset) {
|
|
3
|
+
this.startWithOffset = new Date();
|
|
4
|
+
this.endWithOffset = new Date();
|
|
5
5
|
this.start = new Date();
|
|
6
6
|
this.end = new Date();
|
|
7
|
+
this.cutOffset = true;
|
|
7
8
|
this.hourTicks = [];
|
|
9
|
+
this.cutOffset = cutOffset;
|
|
8
10
|
this.start = new Date(start);
|
|
9
|
-
this.
|
|
11
|
+
this.startWithOffset = new Date(start);
|
|
12
|
+
this.startWithOffset.setMinutes(this.startWithOffset.getMinutes() - offSetMinutes);
|
|
10
13
|
this.end = new Date(end);
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
14
|
+
this.endWithOffset = new Date(end);
|
|
15
|
+
this.endWithOffset.setMinutes(this.endWithOffset.getMinutes() + offSetMinutes);
|
|
16
|
+
this.widthPercentPerMinute = (100 / this.diffInMinutes(this.startWithOffset, this.endWithOffset));
|
|
13
17
|
this.initHourTicks();
|
|
14
|
-
//this.initDayLabels();
|
|
15
|
-
// this.initHourLabels();
|
|
16
18
|
}
|
|
17
19
|
getX(time) {
|
|
18
|
-
|
|
20
|
+
const trimmedTime = new Date(time);
|
|
21
|
+
if (this.cutOffset) {
|
|
22
|
+
if (trimmedTime < this.start) {
|
|
23
|
+
trimmedTime.setTime(this.start.getTime());
|
|
24
|
+
}
|
|
25
|
+
if (trimmedTime > this.end) {
|
|
26
|
+
trimmedTime.setTime(this.end.getTime());
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return this.diffInMinutes(this.startWithOffset, trimmedTime) * this.widthPercentPerMinute;
|
|
19
30
|
}
|
|
20
31
|
getWidthFromMinutes(minutes) {
|
|
21
32
|
return minutes * this.widthPercentPerMinute;
|
|
22
33
|
}
|
|
23
34
|
getWidthFromTime(start, end) {
|
|
24
|
-
|
|
35
|
+
const trimmedStart = new Date(start);
|
|
36
|
+
if (this.cutOffset) {
|
|
37
|
+
if (trimmedStart < this.start) {
|
|
38
|
+
trimmedStart.setTime(this.start.getTime());
|
|
39
|
+
}
|
|
40
|
+
if (trimmedStart > this.end) {
|
|
41
|
+
trimmedStart.setTime(this.end.getTime());
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const trimmedEnd = new Date(end);
|
|
45
|
+
if (this.cutOffset) {
|
|
46
|
+
if (trimmedEnd < this.start) {
|
|
47
|
+
trimmedEnd.setTime(this.start.getTime());
|
|
48
|
+
}
|
|
49
|
+
if (trimmedEnd > this.end) {
|
|
50
|
+
trimmedEnd.setTime(this.end.getTime());
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return this.getWidthFromMinutes(this.diffInMinutes(trimmedStart, trimmedEnd));
|
|
25
54
|
}
|
|
26
55
|
getTick(time) {
|
|
27
56
|
return {
|
|
@@ -50,23 +79,26 @@ export class SdsTimelineService {
|
|
|
50
79
|
getDayLabels(locales, customDataFn) {
|
|
51
80
|
const dayLabels = [];
|
|
52
81
|
// get start date at the beginning of the day
|
|
53
|
-
let startDate = new Date(this.
|
|
82
|
+
let startDate = new Date(this.startWithOffset);
|
|
54
83
|
startDate.setHours(0, 0, 0, 0);
|
|
55
84
|
// get end date at the end of the day
|
|
56
|
-
let endDate = new Date(this.
|
|
85
|
+
let endDate = new Date(this.endWithOffset);
|
|
57
86
|
endDate.setHours(23, 59, 59, 999);
|
|
58
87
|
let currentDate = new Date(startDate);
|
|
59
88
|
while (currentDate <= endDate) {
|
|
60
89
|
let endOfCurrentDay = new Date(currentDate);
|
|
61
90
|
endOfCurrentDay.setHours(23, 59, 59, 999);
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
91
|
+
const dayLabelWidth = this.getWidthFromTime(currentDate, endOfCurrentDay);
|
|
92
|
+
if (dayLabelWidth > 0) {
|
|
93
|
+
dayLabels.push({
|
|
94
|
+
// date: new Date(currentDate),
|
|
95
|
+
x: this.getX(new Date(currentDate)),
|
|
96
|
+
width: dayLabelWidth,
|
|
97
|
+
label: currentDate.toLocaleDateString(locales ?? [], { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' }),
|
|
98
|
+
date: new Date(currentDate),
|
|
99
|
+
data: customDataFn ? customDataFn(new Date(currentDate)) : null
|
|
100
|
+
});
|
|
101
|
+
}
|
|
70
102
|
currentDate.setDate(currentDate.getDate() + 1);
|
|
71
103
|
}
|
|
72
104
|
return dayLabels;
|
|
@@ -107,9 +139,9 @@ export class SdsTimelineService {
|
|
|
107
139
|
initHourTicks() {
|
|
108
140
|
this.hourTicks = [];
|
|
109
141
|
// get first whole hour from start date
|
|
110
|
-
let startHour = this.roundHoursUp(this.
|
|
142
|
+
let startHour = this.roundHoursUp(this.startWithOffset);
|
|
111
143
|
// get last whole hour from end date
|
|
112
|
-
let endHour = this.roundHoursDown(this.
|
|
144
|
+
let endHour = this.roundHoursDown(this.endWithOffset);
|
|
113
145
|
let currentHour = new Date(startHour);
|
|
114
146
|
while (currentHour <= endHour) {
|
|
115
147
|
this.hourTicks.push(this.getTick(currentHour));
|
|
@@ -117,4 +149,4 @@ export class SdsTimelineService {
|
|
|
117
149
|
}
|
|
118
150
|
}
|
|
119
151
|
}
|
|
120
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL3RpbWVsaW5lL3NlcnZpY2VzL3RpbWVsaW5lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxPQUFPLGtCQUFrQjtJQVEzQixrREFBa0Q7SUFDbEQsbURBQW1EO0lBRW5ELFlBQVksS0FBVyxFQUFFLEdBQVMsRUFBRSxhQUFxQjtRQVRqRCxVQUFLLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixRQUFHLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUl2QixjQUFTLEdBQW1CLEVBQUUsQ0FBQztRQUtuQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLEdBQUcsYUFBYSxDQUFDLENBQUM7UUFFL0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDO1FBRTNELElBQUksQ0FBQyxxQkFBcUIsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFOUUsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JCLHVCQUF1QjtRQUN2Qix5QkFBeUI7SUFDN0IsQ0FBQztJQUVNLElBQUksQ0FBQyxJQUFVO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztJQUM3RSxDQUFDO0lBRU0sbUJBQW1CLENBQUMsT0FBZTtRQUN0QyxPQUFPLE9BQU8sR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUM7SUFDaEQsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQVcsRUFBRSxHQUFTO1FBQzFDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVNLE9BQU8sQ0FBQyxJQUFVO1FBQ3JCLE9BQU87WUFDSCxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ3BCLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztTQUNyQixDQUFBO0lBQ0wsQ0FBQztJQUVNLFlBQVksQ0FBQyxZQUFtQyxRQUFRO1FBQzNELE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFTSxhQUFhLENBQUMsWUFBbUMsUUFBUTtRQUM1RCxNQUFNLFVBQVUsR0FBNEIsRUFBRSxDQUFDO1FBRS9DLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN4RyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pCLElBQUksY0FBYyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QyxVQUFVLENBQUMsSUFBSSxDQUNYO2dCQUNJLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQztnQkFDNUIsS0FBSyxFQUFFLENBQUM7Z0JBQ1IsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxFQUFFO2dCQUN0QyxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUM5QixJQUFJLEVBQUUsSUFBSTthQUNiLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVNLFlBQVksQ0FDZixPQUEyQyxFQUMzQyxZQUF3RDtRQUN4RCxNQUFNLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFckIsNkNBQTZDO1FBQzdDLElBQUksU0FBUyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRS9CLHFDQUFxQztRQUNyQyxJQUFJLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDakMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVsQyxJQUFJLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN0QyxPQUFPLFdBQVcsSUFBSSxPQUFPLEVBQUU7WUFDM0IsSUFBSSxlQUFlLEdBQUcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUUxQyxTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUNYLCtCQUErQjtnQkFDL0IsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ25DLEtBQUssRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQztnQkFDMUQsS0FBSyxFQUFFLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLElBQUksRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxDQUFDO2dCQUN6SCxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDO2dCQUMzQixJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTthQUNsRSxDQUFDLENBQUM7WUFDSCxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUNsRDtRQUNELE9BQU8sU0FBUyxDQUFDO0lBQ3JCLENBQUM7SUFFRCx5QkFBeUI7SUFFakIsb0JBQW9CLENBQUMsS0FBYSxFQUFFLFNBQWdDO1FBRXhFLElBQUksU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQyxDQUFDLHNCQUFzQjtTQUN0QztRQUNELElBQUksU0FBUyxLQUFLLE1BQU0sRUFBRTtZQUN0QixPQUFPLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFCO1FBQ0QsSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFO1lBQ3RCLE9BQU8sS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDMUI7UUFDRCxJQUFJLFNBQVMsS0FBSyxNQUFNLEVBQUU7WUFDdEIsT0FBTyxLQUFLLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUMxQjtRQUNELE9BQU8sS0FBSyxDQUFDLENBQUMsd0JBQXdCO0lBQzFDLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBVyxFQUFFLEdBQVM7UUFDeEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUFBLENBQUM7SUFDNUQsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFVO1FBRTNCLElBQUksT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRTdCLElBQUksT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLEVBQUUsR0FBRyxDQUFDLEVBQUU7WUFDdkYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDNUM7UUFDRCxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUdPLGNBQWMsQ0FBQyxJQUFVO1FBQzdCLElBQUksT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1QixPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBR08sYUFBYTtRQUNqQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUVwQix1Q0FBdUM7UUFDdkMsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFOUMsb0NBQW9DO1FBQ3BDLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTVDLElBQUksV0FBVyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3JDLE9BQU8sV0FBVyxJQUFJLE9BQU8sRUFBRTtZQUMzQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDL0MsV0FBVyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7U0FDcEQ7SUFDTCxDQUFDO0NBSUoiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFRpbWVsaW5lSW50ZXJ2YWxMYWJlbCwgVGltZWxpbmVUaWNrIH0gZnJvbSAnLi4vbW9kZWxzL3RpbWVsaW5lLm1vZGVsJztcclxuaW1wb3J0IHsgVGltZWxpbmVDdXN0b21EYXRlRGF0YVByb3ZpZGVyLCBUaW1lbGluZVRpY2tGcmVxdWVuY3kgfSBmcm9tICcuLi90eXBlcy90aW1lbGluZS50eXBlcyc7XHJcblxyXG5leHBvcnQgY2xhc3MgU2RzVGltZWxpbmVTZXJ2aWNlIHtcclxuXHJcbiAgICBwcml2YXRlIHN0YXJ0OiBEYXRlID0gbmV3IERhdGUoKTtcclxuICAgIHByaXZhdGUgZW5kOiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICBwcml2YXRlIHdpZHRoUGVyY2VudFBlck1pbnV0ZTogbnVtYmVyO1xyXG5cclxuICAgIHByaXZhdGUgaG91clRpY2tzOiBUaW1lbGluZVRpY2tbXSA9IFtdO1xyXG4gICAgLy8gcHVibGljIGRheUxhYmVsczogVGltZWxpbmVJbnRlcnZhbExhYmVsW10gPSBbXTtcclxuICAgIC8vIHB1YmxpYyBob3VyTGFiZWxzOiBUaW1lbGluZUludGVydmFsTGFiZWxbXSA9IFtdO1xyXG4gICAgXHJcbiAgICBjb25zdHJ1Y3RvcihzdGFydDogRGF0ZSwgZW5kOiBEYXRlLCBvZmZTZXRNaW51dGVzOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0ID0gbmV3IERhdGUoc3RhcnQpO1xyXG4gICAgICAgIHRoaXMuc3RhcnQuc2V0TWludXRlcyh0aGlzLnN0YXJ0LmdldE1pbnV0ZXMoKSAtIG9mZlNldE1pbnV0ZXMpO1xyXG5cclxuICAgICAgICB0aGlzLmVuZCA9IG5ldyBEYXRlKGVuZCk7IFxyXG4gICAgICAgIHRoaXMuZW5kLnNldE1pbnV0ZXModGhpcy5lbmQuZ2V0TWludXRlcygpICsgb2ZmU2V0TWludXRlcyk7XHJcblxyXG4gICAgICAgIHRoaXMud2lkdGhQZXJjZW50UGVyTWludXRlID0gKDEwMCAvIHRoaXMuZGlmZkluTWludXRlcyh0aGlzLnN0YXJ0LCB0aGlzLmVuZCkpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRIb3VyVGlja3MoKTtcclxuICAgICAgICAvL3RoaXMuaW5pdERheUxhYmVscygpO1xyXG4gICAgICAgIC8vIHRoaXMuaW5pdEhvdXJMYWJlbHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0WCh0aW1lOiBEYXRlKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kaWZmSW5NaW51dGVzKHRoaXMuc3RhcnQsIHRpbWUpICogdGhpcy53aWR0aFBlcmNlbnRQZXJNaW51dGU7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0V2lkdGhGcm9tTWludXRlcyhtaW51dGVzOiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiBtaW51dGVzICogdGhpcy53aWR0aFBlcmNlbnRQZXJNaW51dGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFdpZHRoRnJvbVRpbWUoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0V2lkdGhGcm9tTWludXRlcyh0aGlzLmRpZmZJbk1pbnV0ZXMoc3RhcnQsIGVuZCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUaWNrKHRpbWU6IERhdGUpOiBUaW1lbGluZVRpY2sge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKHRpbWUpLFxyXG4gICAgICAgICAgICB4OiB0aGlzLmdldFgodGltZSksXHJcbiAgICAgICAgfSAgICAgICAgXHJcbiAgICB9XHJcbiAgICBcclxuICAgIHB1YmxpYyBnZXRIb3VyVGlja3MoZnJlcXVlbmN5OiBUaW1lbGluZVRpY2tGcmVxdWVuY3kgPSAnaG91cmx5Jyk6IFRpbWVsaW5lVGlja1tdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5ob3VyVGlja3MuZmlsdGVyKHRpY2sgPT4gdGhpcy5pc1ZhbGlkRnJlcXVlbmN5SG91cih0aWNrLmRhdGUuZ2V0SG91cnMoKSwgZnJlcXVlbmN5KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEhvdXJMYWJlbHMoZnJlcXVlbmN5OiBUaW1lbGluZVRpY2tGcmVxdWVuY3kgPSAnaG91cmx5Jyk6IFRpbWVsaW5lSW50ZXJ2YWxMYWJlbFtdIHtcclxuICAgICAgICBjb25zdCBob3VyTGFiZWxzOiBUaW1lbGluZUludGVydmFsTGFiZWxbXSA9IFtdO1xyXG5cclxuICAgICAgICBjb25zdCB0aWNrcyA9IHRoaXMuaG91clRpY2tzLmZpbHRlcih0aWNrID0+IHRoaXMuaXNWYWxpZEZyZXF1ZW5jeUhvdXIodGljay5kYXRlLmdldEhvdXJzKCksIGZyZXF1ZW5jeSkpO1xyXG4gICAgICAgIHRpY2tzLmZvckVhY2godGljayA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsYWJlbFN0YXJ0VGltZSA9IG5ldyBEYXRlKHRpY2suZGF0ZSk7XHJcbiAgICAgICAgICAgIGhvdXJMYWJlbHMucHVzaChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLmdldFgobGFiZWxTdGFydFRpbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aWNrLmRhdGUuZ2V0SG91cnMoKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKGxhYmVsU3RhcnRUaW1lKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBudWxsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gaG91ckxhYmVscztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGF5TGFiZWxzKFxyXG4gICAgICAgIGxvY2FsZXM6IHN0cmluZyB8IEFycmF5PHN0cmluZz4gfCB1bmRlZmluZWQsIFxyXG4gICAgICAgIGN1c3RvbURhdGFGbjogVGltZWxpbmVDdXN0b21EYXRlRGF0YVByb3ZpZGVyIHwgdW5kZWZpbmVkKTogVGltZWxpbmVJbnRlcnZhbExhYmVsW10ge1xyXG4gICAgICAgIGNvbnN0IGRheUxhYmVscyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBnZXQgc3RhcnQgZGF0ZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkYXlcclxuICAgICAgICBsZXQgc3RhcnREYXRlID0gbmV3IERhdGUodGhpcy5zdGFydCk7XHJcbiAgICAgICAgc3RhcnREYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xyXG5cclxuICAgICAgICAvLyBnZXQgZW5kIGRhdGUgYXQgdGhlIGVuZCBvZiB0aGUgZGF5XHJcbiAgICAgICAgbGV0IGVuZERhdGUgPSBuZXcgRGF0ZSh0aGlzLmVuZCk7XHJcbiAgICAgICAgZW5kRGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xyXG5cclxuICAgICAgICBsZXQgY3VycmVudERhdGUgPSBuZXcgRGF0ZShzdGFydERhdGUpO1xyXG4gICAgICAgIHdoaWxlIChjdXJyZW50RGF0ZSA8PSBlbmREYXRlKSB7XHJcbiAgICAgICAgICAgIGxldCBlbmRPZkN1cnJlbnREYXkgPSBuZXcgRGF0ZShjdXJyZW50RGF0ZSk7XHJcbiAgICAgICAgICAgIGVuZE9mQ3VycmVudERheS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xyXG5cclxuICAgICAgICAgICAgZGF5TGFiZWxzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgLy8gZGF0ZTogbmV3IERhdGUoY3VycmVudERhdGUpLFxyXG4gICAgICAgICAgICAgICAgeDogdGhpcy5nZXRYKG5ldyBEYXRlKGN1cnJlbnREYXRlKSksXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5nZXRXaWR0aEZyb21UaW1lKGN1cnJlbnREYXRlLCBlbmRPZkN1cnJlbnREYXkpLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6IGN1cnJlbnREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyhsb2NhbGVzID8/IFtdLCB7IHdlZWtkYXk6ICdsb25nJywgZGF5OiAnbnVtZXJpYycsIG1vbnRoOiAnbG9uZycsIHllYXI6ICdudW1lcmljJyB9KSxcclxuICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKGN1cnJlbnREYXRlKSxcclxuICAgICAgICAgICAgICAgIGRhdGE6IGN1c3RvbURhdGFGbiA/IGN1c3RvbURhdGFGbihuZXcgRGF0ZShjdXJyZW50RGF0ZSkpIDogbnVsbFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY3VycmVudERhdGUuc2V0RGF0ZShjdXJyZW50RGF0ZS5nZXREYXRlKCkgKyAxKTsgXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkYXlMYWJlbHM7XHJcbiAgICB9ICAgICBcclxuXHJcbiAgICAvLyNyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcblxyXG4gICAgcHJpdmF0ZSBpc1ZhbGlkRnJlcXVlbmN5SG91cihob3VyczogbnVtYmVyLCBmcmVxdWVuY3k6IFRpbWVsaW5lVGlja0ZyZXF1ZW5jeSkge1xyXG5cclxuICAgICAgICBpZiAoZnJlcXVlbmN5ID09PSAnaG91cmx5Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gZXZlcnkgdGljayBpcyB2YWxpZFxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgaWYgKGZyZXF1ZW5jeSA9PT0gJzJocnMnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBob3VycyAlIDIgPT09IDA7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBpZiAoZnJlcXVlbmN5ID09PSAnM2hycycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGhvdXJzICUgMyA9PT0gMDtcclxuICAgICAgICB9IFxyXG4gICAgICAgIGlmIChmcmVxdWVuY3kgPT09ICc2aHJzJykge1xyXG4gICAgICAgICAgICByZXR1cm4gaG91cnMgJSA2ID09PSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7IC8vIHVuc3VwcG9ydGVkIGZyZXF1ZW5jeVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZGlmZkluTWludXRlcyhzdGFydDogRGF0ZSwgZW5kOiBEYXRlKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gKGVuZC5nZXRUaW1lKCkgLSBzdGFydC5nZXRUaW1lKCkpIC8gKDEwMDAgKiA2MCk7O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcm91bmRIb3Vyc1VwKHRpbWU6IERhdGUpOiBEYXRlIHtcclxuICAgIFxyXG4gICAgICAgIGxldCBuZXdUaW1lID0gbmV3IERhdGUodGltZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKG5ld1RpbWUuZ2V0TWludXRlcygpID4gMCB8fCBuZXdUaW1lLmdldFNlY29uZHMoKSA+IDAgfHwgbmV3VGltZS5nZXRNaWxsaXNlY29uZHMoKSA+IDApIHtcclxuICAgICAgICAgICAgbmV3VGltZS5zZXRIb3VycyhuZXdUaW1lLmdldEhvdXJzKCkgKyAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3VGltZS5zZXRNaW51dGVzKDAsIDAsIDApO1xyXG4gICAgICAgIHJldHVybiBuZXdUaW1lO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwcml2YXRlIHJvdW5kSG91cnNEb3duKHRpbWU6IERhdGUpIHtcclxuICAgICAgICBsZXQgbmV3VGltZSA9IG5ldyBEYXRlKHRpbWUpO1xyXG4gICAgICAgIG5ld1RpbWUuc2V0TWludXRlcygwLCAwLCAwKTtcclxuICAgICAgICByZXR1cm4gbmV3VGltZTtcclxuICAgIH1cclxuICAgIFxyXG5cclxuICAgIHByaXZhdGUgaW5pdEhvdXJUaWNrcygpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhvdXJUaWNrcyA9IFtdO1xyXG5cclxuICAgICAgICAvLyBnZXQgZmlyc3Qgd2hvbGUgaG91ciBmcm9tIHN0YXJ0IGRhdGVcclxuICAgICAgICBsZXQgc3RhcnRIb3VyID0gdGhpcy5yb3VuZEhvdXJzVXAodGhpcy5zdGFydCk7XHJcblxyXG4gICAgICAgIC8vIGdldCBsYXN0IHdob2xlIGhvdXIgZnJvbSBlbmQgZGF0ZVxyXG4gICAgICAgIGxldCBlbmRIb3VyID0gdGhpcy5yb3VuZEhvdXJzRG93bih0aGlzLmVuZCk7XHJcblxyXG4gICAgICAgIGxldCBjdXJyZW50SG91ciA9IG5ldyBEYXRlKHN0YXJ0SG91cilcclxuICAgICAgICB3aGlsZSAoY3VycmVudEhvdXIgPD0gZW5kSG91cikge1xyXG4gICAgICAgICAgICB0aGlzLmhvdXJUaWNrcy5wdXNoKHRoaXMuZ2V0VGljayhjdXJyZW50SG91cikpO1xyXG4gICAgICAgICAgICBjdXJyZW50SG91ci5zZXRIb3VycyhjdXJyZW50SG91ci5nZXRIb3VycygpICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbn1cclxuIl19
|
|
152
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGltZWxpbmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zZHMtY29tcG9uZW50cy9zcmMvbGliL3RpbWVsaW5lL3NlcnZpY2VzL3RpbWVsaW5lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFPLGtCQUFrQjtJQWdCM0IsWUFBWSxLQUFXLEVBQUUsR0FBUyxFQUFFLGFBQXFCLEVBQUUsU0FBa0I7UUFkckUsb0JBQWUsR0FBUyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ25DLGtCQUFhLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUVqQyxVQUFLLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN6QixRQUFHLEdBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUV2QixjQUFTLEdBQUcsSUFBSSxDQUFDO1FBS2pCLGNBQVMsR0FBbUIsRUFBRSxDQUFDO1FBSW5DLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO1FBRTNCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2QyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDO1FBRW5GLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDO1FBRS9FLElB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LENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDNUIsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUdPLGFBQWE7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7UUFFcEIsdUNBQXVDO1FBQ3ZDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXhELG9DQUFvQztRQUNwQyxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV0RCxJQUFJLFdBQVcsR0FBRyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQTtRQUNyQyxPQUFPLFdBQVcsSUFBSSxPQUFPLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQy9DLFdBQVcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQ3BEO0lBQ0wsQ0FBQztDQUlKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGltZWxpbmVJbnRlcnZhbExhYmVsLCBUaW1lbGluZVRpY2sgfSBmcm9tICcuLi9tb2RlbHMvdGltZWxpbmUubW9kZWwnO1xyXG5pbXBvcnQgeyBUaW1lbGluZUN1c3RvbURhdGVEYXRhUHJvdmlkZXIsIFRpbWVsaW5lVGlja0ZyZXF1ZW5jeSB9IGZyb20gJy4uL3R5cGVzL3RpbWVsaW5lLnR5cGVzJztcclxuXHJcbmV4cG9ydCBjbGFzcyBTZHNUaW1lbGluZVNlcnZpY2Uge1xyXG5cclxuICAgIHByaXZhdGUgc3RhcnRXaXRoT2Zmc2V0OiBEYXRlID0gbmV3IERhdGUoKTtcclxuICAgIHByaXZhdGUgZW5kV2l0aE9mZnNldDogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgcHJpdmF0ZSBzdGFydDogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBwcml2YXRlIGVuZDogRGF0ZSA9IG5ldyBEYXRlKCk7XHJcblxyXG4gICAgcHJpdmF0ZSBjdXRPZmZzZXQgPSB0cnVlO1xyXG5cclxuXHJcbiAgICBwcml2YXRlIHdpZHRoUGVyY2VudFBlck1pbnV0ZTogbnVtYmVyO1xyXG5cclxuICAgIHByaXZhdGUgaG91clRpY2tzOiBUaW1lbGluZVRpY2tbXSA9IFtdO1xyXG5cclxuICAgIFxyXG4gICAgY29uc3RydWN0b3Ioc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSwgb2ZmU2V0TWludXRlczogbnVtYmVyLCBjdXRPZmZzZXQ6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLmN1dE9mZnNldCA9IGN1dE9mZnNldDtcclxuXHJcbiAgICAgICAgdGhpcy5zdGFydCA9IG5ldyBEYXRlKHN0YXJ0KTtcclxuICAgICAgICB0aGlzLnN0YXJ0V2l0aE9mZnNldCA9IG5ldyBEYXRlKHN0YXJ0KTtcclxuICAgICAgICB0aGlzLnN0YXJ0V2l0aE9mZnNldC5zZXRNaW51dGVzKHRoaXMuc3RhcnRXaXRoT2Zmc2V0LmdldE1pbnV0ZXMoKSAtIG9mZlNldE1pbnV0ZXMpO1xyXG5cclxuICAgICAgICB0aGlzLmVuZCA9IG5ldyBEYXRlKGVuZCk7XHJcbiAgICAgICAgdGhpcy5lbmRXaXRoT2Zmc2V0ID0gbmV3IERhdGUoZW5kKTsgXHJcbiAgICAgICAgdGhpcy5lbmRXaXRoT2Zmc2V0LnNldE1pbnV0ZXModGhpcy5lbmRXaXRoT2Zmc2V0LmdldE1pbnV0ZXMoKSArIG9mZlNldE1pbnV0ZXMpO1xyXG5cclxuICAgICAgICB0aGlzLndpZHRoUGVyY2VudFBlck1pbnV0ZSA9ICgxMDAgLyB0aGlzLmRpZmZJbk1pbnV0ZXModGhpcy5zdGFydFdpdGhPZmZzZXQsIHRoaXMuZW5kV2l0aE9mZnNldCkpO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRIb3VyVGlja3MoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0WCh0aW1lOiBEYXRlKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCB0cmltbWVkVGltZSA9IG5ldyBEYXRlKHRpbWUpO1xyXG4gICAgICAgIGlmICh0aGlzLmN1dE9mZnNldCkge1xyXG4gICAgICAgICAgICBpZiAodHJpbW1lZFRpbWUgPCB0aGlzLnN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICB0cmltbWVkVGltZS5zZXRUaW1lKHRoaXMuc3RhcnQuZ2V0VGltZSgpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodHJpbW1lZFRpbWUgPiB0aGlzLmVuZCkge1xyXG4gICAgICAgICAgICAgICAgdHJpbW1lZFRpbWUuc2V0VGltZSh0aGlzLmVuZC5nZXRUaW1lKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5kaWZmSW5NaW51dGVzKHRoaXMuc3RhcnRXaXRoT2Zmc2V0LCB0cmltbWVkVGltZSkgKiB0aGlzLndpZHRoUGVyY2VudFBlck1pbnV0ZTsgICAgICAgIFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRXaWR0aEZyb21NaW51dGVzKG1pbnV0ZXM6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgKiB0aGlzLndpZHRoUGVyY2VudFBlck1pbnV0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0V2lkdGhGcm9tVGltZShzdGFydDogRGF0ZSwgZW5kOiBEYXRlKTogbnVtYmVyIHtcclxuICAgICAgICBjb25zdCB0cmltbWVkU3RhcnQgPSBuZXcgRGF0ZShzdGFydCk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3V0T2Zmc2V0KSB7XHJcbiAgICAgICAgICAgIGlmICh0cmltbWVkU3RhcnQgPCB0aGlzLnN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICB0cmltbWVkU3RhcnQuc2V0VGltZSh0aGlzLnN0YXJ0LmdldFRpbWUoKSk7XHJcbiAgICAgICAgICAgIH0gICBcclxuICAgICAgICAgICAgaWYgKHRyaW1tZWRTdGFydCA+IHRoaXMuZW5kKSB7XHJcbiAgICAgICAgICAgICAgICB0cmltbWVkU3RhcnQuc2V0VGltZSh0aGlzLmVuZC5nZXRUaW1lKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCB0cmltbWVkRW5kID0gbmV3IERhdGUoZW5kKTtcclxuICAgICAgICBpZiAodGhpcy5jdXRPZmZzZXQpIHtcclxuICAgICAgICAgICAgaWYgKHRyaW1tZWRFbmQgPCB0aGlzLnN0YXJ0KSB7XHJcbiAgICAgICAgICAgICAgICB0cmltbWVkRW5kLnNldFRpbWUodGhpcy5zdGFydC5nZXRUaW1lKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0cmltbWVkRW5kID4gdGhpcy5lbmQpIHtcclxuICAgICAgICAgICAgICAgIHRyaW1tZWRFbmQuc2V0VGltZSh0aGlzLmVuZC5nZXRUaW1lKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRXaWR0aEZyb21NaW51dGVzKHRoaXMuZGlmZkluTWludXRlcyh0cmltbWVkU3RhcnQsIHRyaW1tZWRFbmQpKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VGljayh0aW1lOiBEYXRlKTogVGltZWxpbmVUaWNrIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZSh0aW1lKSxcclxuICAgICAgICAgICAgeDogdGhpcy5nZXRYKHRpbWUpLFxyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgfVxyXG4gICAgXHJcbiAgICBwdWJsaWMgZ2V0SG91clRpY2tzKGZyZXF1ZW5jeTogVGltZWxpbmVUaWNrRnJlcXVlbmN5ID0gJ2hvdXJseScpOiBUaW1lbGluZVRpY2tbXSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91clRpY2tzLmZpbHRlcih0aWNrID0+IHRoaXMuaXNWYWxpZEZyZXF1ZW5jeUhvdXIodGljay5kYXRlLmdldEhvdXJzKCksIGZyZXF1ZW5jeSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRIb3VyTGFiZWxzKGZyZXF1ZW5jeTogVGltZWxpbmVUaWNrRnJlcXVlbmN5ID0gJ2hvdXJseScpOiBUaW1lbGluZUludGVydmFsTGFiZWxbXSB7XHJcbiAgICAgICAgY29uc3QgaG91ckxhYmVsczogVGltZWxpbmVJbnRlcnZhbExhYmVsW10gPSBbXTtcclxuXHJcbiAgICAgICAgY29uc3QgdGlja3MgPSB0aGlzLmhvdXJUaWNrcy5maWx0ZXIodGljayA9PiB0aGlzLmlzVmFsaWRGcmVxdWVuY3lIb3VyKHRpY2suZGF0ZS5nZXRIb3VycygpLCBmcmVxdWVuY3kpKTtcclxuICAgICAgICB0aWNrcy5mb3JFYWNoKHRpY2sgPT4ge1xyXG4gICAgICAgICAgICBsZXQgbGFiZWxTdGFydFRpbWUgPSBuZXcgRGF0ZSh0aWNrLmRhdGUpO1xyXG4gICAgICAgICAgICBob3VyTGFiZWxzLnB1c2goXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogdGhpcy5nZXRYKGxhYmVsU3RhcnRUaW1lKSxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogMCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGljay5kYXRlLmdldEhvdXJzKCkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRlOiBuZXcgRGF0ZShsYWJlbFN0YXJ0VGltZSksXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogbnVsbFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGhvdXJMYWJlbHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERheUxhYmVscyhcclxuICAgICAgICBsb2NhbGVzOiBzdHJpbmcgfCBBcnJheTxzdHJpbmc+IHwgdW5kZWZpbmVkLCBcclxuICAgICAgICBjdXN0b21EYXRhRm46IFRpbWVsaW5lQ3VzdG9tRGF0ZURhdGFQcm92aWRlciB8IHVuZGVmaW5lZCk6IFRpbWVsaW5lSW50ZXJ2YWxMYWJlbFtdIHtcclxuICAgICAgICBjb25zdCBkYXlMYWJlbHMgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gZ2V0IHN0YXJ0IGRhdGUgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGF5XHJcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IG5ldyBEYXRlKHRoaXMuc3RhcnRXaXRoT2Zmc2V0KTtcclxuICAgICAgICBzdGFydERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcblxyXG4gICAgICAgIC8vIGdldCBlbmQgZGF0ZSBhdCB0aGUgZW5kIG9mIHRoZSBkYXlcclxuICAgICAgICBsZXQgZW5kRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZW5kV2l0aE9mZnNldCk7XHJcbiAgICAgICAgZW5kRGF0ZS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xyXG5cclxuICAgICAgICBsZXQgY3VycmVudERhdGUgPSBuZXcgRGF0ZShzdGFydERhdGUpO1xyXG4gICAgICAgIHdoaWxlIChjdXJyZW50RGF0ZSA8PSBlbmREYXRlKSB7XHJcbiAgICAgICAgICAgIGxldCBlbmRPZkN1cnJlbnREYXkgPSBuZXcgRGF0ZShjdXJyZW50RGF0ZSk7XHJcbiAgICAgICAgICAgIGVuZE9mQ3VycmVudERheS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF5TGFiZWxXaWR0aCA9IHRoaXMuZ2V0V2lkdGhGcm9tVGltZShjdXJyZW50RGF0ZSwgZW5kT2ZDdXJyZW50RGF5KTtcclxuXHJcbiAgICAgICAgICAgIGlmIChkYXlMYWJlbFdpZHRoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZGF5TGFiZWxzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGRhdGU6IG5ldyBEYXRlKGN1cnJlbnREYXRlKSxcclxuICAgICAgICAgICAgICAgICAgICB4OiB0aGlzLmdldFgobmV3IERhdGUoY3VycmVudERhdGUpKSxcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogZGF5TGFiZWxXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogY3VycmVudERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKGxvY2FsZXMgPz8gW10sIHsgd2Vla2RheTogJ2xvbmcnLCBkYXk6ICdudW1lcmljJywgbW9udGg6ICdsb25nJywgeWVhcjogJ251bWVyaWMnIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGU6IG5ldyBEYXRlKGN1cnJlbnREYXRlKSxcclxuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdXN0b21EYXRhRm4gPyBjdXN0b21EYXRhRm4obmV3IERhdGUoY3VycmVudERhdGUpKSA6IG51bGxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGN1cnJlbnREYXRlLnNldERhdGUoY3VycmVudERhdGUuZ2V0RGF0ZSgpICsgMSk7IFxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF5TGFiZWxzO1xyXG4gICAgfSAgICAgXHJcblxyXG4gICAgLy8jcmVnaW9uIFByaXZhdGUgTWV0aG9kc1xyXG5cclxuICAgIHByaXZhdGUgaXNWYWxpZEZyZXF1ZW5jeUhvdXIoaG91cnM6IG51bWJlciwgZnJlcXVlbmN5OiBUaW1lbGluZVRpY2tGcmVxdWVuY3kpIHtcclxuXHJcbiAgICAgICAgaWYgKGZyZXF1ZW5jeSA9PT0gJ2hvdXJseScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIGV2ZXJ5IHRpY2sgaXMgdmFsaWRcclxuICAgICAgICB9IFxyXG4gICAgICAgIGlmIChmcmVxdWVuY3kgPT09ICcyaHJzJykge1xyXG4gICAgICAgICAgICByZXR1cm4gaG91cnMgJSAyID09PSAwO1xyXG4gICAgICAgIH0gXHJcbiAgICAgICAgaWYgKGZyZXF1ZW5jeSA9PT0gJzNocnMnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBob3VycyAlIDMgPT09IDA7XHJcbiAgICAgICAgfSBcclxuICAgICAgICBpZiAoZnJlcXVlbmN5ID09PSAnNmhycycpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGhvdXJzICUgNiA9PT0gMDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyB1bnN1cHBvcnRlZCBmcmVxdWVuY3lcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRpZmZJbk1pbnV0ZXMoc3RhcnQ6IERhdGUsIGVuZDogRGF0ZSk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIChlbmQuZ2V0VGltZSgpIC0gc3RhcnQuZ2V0VGltZSgpKSAvICgxMDAwICogNjApOztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJvdW5kSG91cnNVcCh0aW1lOiBEYXRlKTogRGF0ZSB7XHJcbiAgICBcclxuICAgICAgICBsZXQgbmV3VGltZSA9IG5ldyBEYXRlKHRpbWUpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGlmIChuZXdUaW1lLmdldE1pbnV0ZXMoKSA+IDAgfHwgbmV3VGltZS5nZXRTZWNvbmRzKCkgPiAwIHx8IG5ld1RpbWUuZ2V0TWlsbGlzZWNvbmRzKCkgPiAwKSB7XHJcbiAgICAgICAgICAgIG5ld1RpbWUuc2V0SG91cnMobmV3VGltZS5nZXRIb3VycygpICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld1RpbWUuc2V0TWludXRlcygwLCAwLCAwKTtcclxuICAgICAgICByZXR1cm4gbmV3VGltZTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgcHJpdmF0ZSByb3VuZEhvdXJzRG93bih0aW1lOiBEYXRlKSB7XHJcbiAgICAgICAgbGV0IG5ld1RpbWUgPSBuZXcgRGF0ZSh0aW1lKTtcclxuICAgICAgICBuZXdUaW1lLnNldE1pbnV0ZXMoMCwgMCwgMCk7XHJcbiAgICAgICAgcmV0dXJuIG5ld1RpbWU7XHJcbiAgICB9XHJcbiAgICBcclxuXHJcbiAgICBwcml2YXRlIGluaXRIb3VyVGlja3MoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5ob3VyVGlja3MgPSBbXTtcclxuXHJcbiAgICAgICAgLy8gZ2V0IGZpcnN0IHdob2xlIGhvdXIgZnJvbSBzdGFydCBkYXRlXHJcbiAgICAgICAgbGV0IHN0YXJ0SG91ciA9IHRoaXMucm91bmRIb3Vyc1VwKHRoaXMuc3RhcnRXaXRoT2Zmc2V0KTtcclxuXHJcbiAgICAgICAgLy8gZ2V0IGxhc3Qgd2hvbGUgaG91ciBmcm9tIGVuZCBkYXRlXHJcbiAgICAgICAgbGV0IGVuZEhvdXIgPSB0aGlzLnJvdW5kSG91cnNEb3duKHRoaXMuZW5kV2l0aE9mZnNldCk7XHJcblxyXG4gICAgICAgIGxldCBjdXJyZW50SG91ciA9IG5ldyBEYXRlKHN0YXJ0SG91cilcclxuICAgICAgICB3aGlsZSAoY3VycmVudEhvdXIgPD0gZW5kSG91cikge1xyXG4gICAgICAgICAgICB0aGlzLmhvdXJUaWNrcy5wdXNoKHRoaXMuZ2V0VGljayhjdXJyZW50SG91cikpO1xyXG4gICAgICAgICAgICBjdXJyZW50SG91ci5zZXRIb3VycyhjdXJyZW50SG91ci5nZXRIb3VycygpICsgMSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgXHJcbiAgICAvLyNlbmRyZWdpb25cclxuXHJcbn1cclxuIl19
|
|
@@ -47,10 +47,10 @@ class SdsExpansionPanelComponent {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
SdsExpansionPanelComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsExpansionPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
50
|
-
SdsExpansionPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SdsExpansionPanelComponent, selector: "sds-expansion-panel", inputs: { headerIcon: "headerIcon", headerText: "headerText", headerSideText: "headerSideText", hideHeader: "hideHeader", headerId: "headerId", animateCaret: "animateCaret", animatePanel: "animatePanel", hoverColor: "hoverColor", showBackground: "showBackground", backgroundColor: "backgroundColor", caretPlacement: "caretPlacement", descriptionText: "descriptionText", isOpen: "isOpen", expandPanelText: "expandPanelText", collapsePanelText: "collapsePanelText", headerSize: "headerSize" }, outputs: { isOpenChange: "isOpenChange" }, ngImport: i0, template: "\r\n<!-- [style.background-color]=\"showBackground ? backgroundColor : null\" -->\r\n<div\r\n class=\"rounded expansion-panel\"\r\n [class.background]=\"showBackground\"\r\n [class.closed]=\"!isOpen\"\r\n [class.show-hover]=\"!isOpen && hoverColor\"\r\n [style.--sds-expansion-panel-bg-color]=\"showBackground ? backgroundColor : 'transparent'\"\r\n [style.--sds-expansion-panel-hover-bg-color]=\"hoverColor ? hoverColor : 'transparent'\"\r\n (click)=\"openPanel()\"\r\n>\r\n <ng-container *ngIf=\"!hideHeader\">\r\n <div\r\n class=\"expansion-panel-header sds-flex-row-center\"\r\n (click)=\"onToggleIsOpenClick($event)\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-link\"\r\n [id]=\"headerId\"\r\n [class.me-auto]=\"caretPlacement === 'farEnd'\"\r\n [class.me-2]=\"caretPlacement === 'nextToHeader'\"\r\n >\r\n <fa-icon class=\"me-1\" *ngIf=\"headerIcon\" [icon]=\"headerIcon\" [fixedWidth]=\"true\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n\r\n <span \r\n class=\"header-text\"\r\n [class.sds-fs-93]=\"headerSize == 'small'\"\r\n >\r\n {{ headerText }}\r\n </span>\r\n <small \r\n *ngIf=\"headerSideText\"\r\n class=\"header-side-text text-muted\"\r\n [class.sds-fs-90]=\"headerSize == 'small'\"\r\n >\r\n {{ headerSideText }}\r\n </small>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm btn-link caret px-1\"\r\n [class.rotate]=\"animateCaret\"\r\n [title]=\"isOpen ? collapsePanelText ?? '' : expandPanelText ?? ''\"\r\n >\r\n <fa-icon [icon]=\"caretIcon\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <div \r\n *ngIf=\"!isOpen\"\r\n >\r\n {{ descriptionText }}\r\n <ng-content select=\"[contentOnClosed]\"></ng-content>\r\n </div>\r\n\r\n <div \r\n class=\"panel-contents\" \r\n [class.open]=\"isOpen\"\r\n [class.animate]=\"animatePanel\"\r\n
|
|
50
|
+
SdsExpansionPanelComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: SdsExpansionPanelComponent, selector: "sds-expansion-panel", inputs: { headerIcon: "headerIcon", headerText: "headerText", headerSideText: "headerSideText", hideHeader: "hideHeader", headerId: "headerId", animateCaret: "animateCaret", animatePanel: "animatePanel", hoverColor: "hoverColor", showBackground: "showBackground", backgroundColor: "backgroundColor", caretPlacement: "caretPlacement", descriptionText: "descriptionText", isOpen: "isOpen", expandPanelText: "expandPanelText", collapsePanelText: "collapsePanelText", headerSize: "headerSize" }, outputs: { isOpenChange: "isOpenChange" }, ngImport: i0, template: "\r\n<!-- [style.background-color]=\"showBackground ? backgroundColor : null\" -->\r\n<div\r\n class=\"rounded expansion-panel\"\r\n [class.background]=\"showBackground\"\r\n [class.closed]=\"!isOpen\"\r\n [class.show-hover]=\"!isOpen && hoverColor\"\r\n [style.--sds-expansion-panel-bg-color]=\"showBackground ? backgroundColor : 'transparent'\"\r\n [style.--sds-expansion-panel-hover-bg-color]=\"hoverColor ? hoverColor : 'transparent'\"\r\n (click)=\"openPanel()\"\r\n>\r\n <ng-container *ngIf=\"!hideHeader\">\r\n <div\r\n class=\"expansion-panel-header sds-flex-row-center\"\r\n (click)=\"onToggleIsOpenClick($event)\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-link\"\r\n [id]=\"headerId\"\r\n [class.me-auto]=\"caretPlacement === 'farEnd'\"\r\n [class.me-2]=\"caretPlacement === 'nextToHeader'\"\r\n >\r\n <fa-icon class=\"me-1\" *ngIf=\"headerIcon\" [icon]=\"headerIcon\" [fixedWidth]=\"true\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n\r\n <span \r\n class=\"header-text\"\r\n [class.sds-fs-93]=\"headerSize == 'small'\"\r\n >\r\n {{ headerText }}\r\n </span>\r\n <small \r\n *ngIf=\"headerSideText\"\r\n class=\"header-side-text text-muted\"\r\n [class.sds-fs-90]=\"headerSize == 'small'\"\r\n >\r\n {{ headerSideText }}\r\n </small>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm btn-link caret px-1\"\r\n [class.rotate]=\"animateCaret\"\r\n [title]=\"isOpen ? collapsePanelText ?? '' : expandPanelText ?? ''\"\r\n >\r\n <fa-icon [icon]=\"caretIcon\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <div \r\n *ngIf=\"!isOpen\"\r\n >\r\n {{ descriptionText }}\r\n <ng-content select=\"[contentOnClosed]\"></ng-content>\r\n </div>\r\n\r\n <div \r\n class=\"panel-contents\" \r\n [class.open]=\"isOpen\"\r\n [class.animate]=\"animatePanel\"\r\n >\r\n <div \r\n *ngIf=\"isOpen\"\r\n class=\"mt-2\"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".expansion-panel{background-color:var(--sds-expansion-panel-bg-color)}.expansion-panel .panel-contents{display:grid;grid-template-rows:0fr}.expansion-panel .panel-contents.animate{transition:grid-template-rows .2s ease-out}.expansion-panel .panel-contents>div{overflow:hidden;min-height:0}.expansion-panel .panel-contents.open{grid-template-rows:1fr}.expansion-panel .caret{line-height:1rem;height:-moz-fit-content;height:fit-content;transform:rotate(-180deg)}.expansion-panel .caret.rotate{transition:transform .2s linear}.expansion-panel.closed{cursor:pointer}.expansion-panel.closed .caret{transform:rotate(0)}.expansion-panel.closed.show-hover:hover{background-color:var(--sds-expansion-panel-hover-bg-color)}.expansion-panel.background{padding:1.125rem 1.5rem}.expansion-panel .expansion-panel-header{cursor:pointer;-webkit-user-select:none;user-select:none}.expansion-panel .expansion-panel-header .header-text{font-size:1.06rem;font-weight:600}.expansion-panel .expansion-panel-header .header-side-text{font-size:1.06rem;font-weight:500}.expansion-panel .expansion-panel-header button{text-decoration:none;padding:0;color:var(--bs-gray-900)}.expansion-panel .expansion-panel-header button:focus{box-shadow:none}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
51
51
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsExpansionPanelComponent, decorators: [{
|
|
52
52
|
type: Component,
|
|
53
|
-
args: [{ selector: 'sds-expansion-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "\r\n<!-- [style.background-color]=\"showBackground ? backgroundColor : null\" -->\r\n<div\r\n class=\"rounded expansion-panel\"\r\n [class.background]=\"showBackground\"\r\n [class.closed]=\"!isOpen\"\r\n [class.show-hover]=\"!isOpen && hoverColor\"\r\n [style.--sds-expansion-panel-bg-color]=\"showBackground ? backgroundColor : 'transparent'\"\r\n [style.--sds-expansion-panel-hover-bg-color]=\"hoverColor ? hoverColor : 'transparent'\"\r\n (click)=\"openPanel()\"\r\n>\r\n <ng-container *ngIf=\"!hideHeader\">\r\n <div\r\n class=\"expansion-panel-header sds-flex-row-center\"\r\n (click)=\"onToggleIsOpenClick($event)\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-link\"\r\n [id]=\"headerId\"\r\n [class.me-auto]=\"caretPlacement === 'farEnd'\"\r\n [class.me-2]=\"caretPlacement === 'nextToHeader'\"\r\n >\r\n <fa-icon class=\"me-1\" *ngIf=\"headerIcon\" [icon]=\"headerIcon\" [fixedWidth]=\"true\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n\r\n <span \r\n class=\"header-text\"\r\n [class.sds-fs-93]=\"headerSize == 'small'\"\r\n >\r\n {{ headerText }}\r\n </span>\r\n <small \r\n *ngIf=\"headerSideText\"\r\n class=\"header-side-text text-muted\"\r\n [class.sds-fs-90]=\"headerSize == 'small'\"\r\n >\r\n {{ headerSideText }}\r\n </small>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm btn-link caret px-1\"\r\n [class.rotate]=\"animateCaret\"\r\n [title]=\"isOpen ? collapsePanelText ?? '' : expandPanelText ?? ''\"\r\n >\r\n <fa-icon [icon]=\"caretIcon\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <div \r\n *ngIf=\"!isOpen\"\r\n >\r\n {{ descriptionText }}\r\n <ng-content select=\"[contentOnClosed]\"></ng-content>\r\n </div>\r\n\r\n <div \r\n class=\"panel-contents\" \r\n [class.open]=\"isOpen\"\r\n [class.animate]=\"animatePanel\"\r\n
|
|
53
|
+
args: [{ selector: 'sds-expansion-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "\r\n<!-- [style.background-color]=\"showBackground ? backgroundColor : null\" -->\r\n<div\r\n class=\"rounded expansion-panel\"\r\n [class.background]=\"showBackground\"\r\n [class.closed]=\"!isOpen\"\r\n [class.show-hover]=\"!isOpen && hoverColor\"\r\n [style.--sds-expansion-panel-bg-color]=\"showBackground ? backgroundColor : 'transparent'\"\r\n [style.--sds-expansion-panel-hover-bg-color]=\"hoverColor ? hoverColor : 'transparent'\"\r\n (click)=\"openPanel()\"\r\n>\r\n <ng-container *ngIf=\"!hideHeader\">\r\n <div\r\n class=\"expansion-panel-header sds-flex-row-center\"\r\n (click)=\"onToggleIsOpenClick($event)\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-link\"\r\n [id]=\"headerId\"\r\n [class.me-auto]=\"caretPlacement === 'farEnd'\"\r\n [class.me-2]=\"caretPlacement === 'nextToHeader'\"\r\n >\r\n <fa-icon class=\"me-1\" *ngIf=\"headerIcon\" [icon]=\"headerIcon\" [fixedWidth]=\"true\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n\r\n <span \r\n class=\"header-text\"\r\n [class.sds-fs-93]=\"headerSize == 'small'\"\r\n >\r\n {{ headerText }}\r\n </span>\r\n <small \r\n *ngIf=\"headerSideText\"\r\n class=\"header-side-text text-muted\"\r\n [class.sds-fs-90]=\"headerSize == 'small'\"\r\n >\r\n {{ headerSideText }}\r\n </small>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm btn-link caret px-1\"\r\n [class.rotate]=\"animateCaret\"\r\n [title]=\"isOpen ? collapsePanelText ?? '' : expandPanelText ?? ''\"\r\n >\r\n <fa-icon [icon]=\"caretIcon\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <div \r\n *ngIf=\"!isOpen\"\r\n >\r\n {{ descriptionText }}\r\n <ng-content select=\"[contentOnClosed]\"></ng-content>\r\n </div>\r\n\r\n <div \r\n class=\"panel-contents\" \r\n [class.open]=\"isOpen\"\r\n [class.animate]=\"animatePanel\"\r\n >\r\n <div \r\n *ngIf=\"isOpen\"\r\n class=\"mt-2\"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".expansion-panel{background-color:var(--sds-expansion-panel-bg-color)}.expansion-panel .panel-contents{display:grid;grid-template-rows:0fr}.expansion-panel .panel-contents.animate{transition:grid-template-rows .2s ease-out}.expansion-panel .panel-contents>div{overflow:hidden;min-height:0}.expansion-panel .panel-contents.open{grid-template-rows:1fr}.expansion-panel .caret{line-height:1rem;height:-moz-fit-content;height:fit-content;transform:rotate(-180deg)}.expansion-panel .caret.rotate{transition:transform .2s linear}.expansion-panel.closed{cursor:pointer}.expansion-panel.closed .caret{transform:rotate(0)}.expansion-panel.closed.show-hover:hover{background-color:var(--sds-expansion-panel-hover-bg-color)}.expansion-panel.background{padding:1.125rem 1.5rem}.expansion-panel .expansion-panel-header{cursor:pointer;-webkit-user-select:none;user-select:none}.expansion-panel .expansion-panel-header .header-text{font-size:1.06rem;font-weight:600}.expansion-panel .expansion-panel-header .header-side-text{font-size:1.06rem;font-weight:500}.expansion-panel .expansion-panel-header button{text-decoration:none;padding:0;color:var(--bs-gray-900)}.expansion-panel .expansion-panel-header button:focus{box-shadow:none}\n"] }]
|
|
54
54
|
}], propDecorators: { headerIcon: [{
|
|
55
55
|
type: Input
|
|
56
56
|
}], headerText: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spicainternational-ngx-sds-components-src-lib-expansion-panel.mjs","sources":["../../../projects/ngx-sds-components/src/lib/expansion-panel/expansion-panel.component.ts","../../../projects/ngx-sds-components/src/lib/expansion-panel/expansion-panel.component.html","../../../projects/ngx-sds-components/src/lib/expansion-panel/expansion-panel.module.ts","../../../projects/ngx-sds-components/src/lib/expansion-panel/spicainternational-ngx-sds-components-src-lib-expansion-panel.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport { faChevronDown } from '@fortawesome/pro-regular-svg-icons';\r\nimport { CaretPlacement, HeaderSize } from './expansion-panel.types';\r\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\r\n\r\n@Component({\r\n selector: 'sds-expansion-panel',\r\n templateUrl: './expansion-panel.component.html',\r\n styleUrls: ['./expansion-panel.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdsExpansionPanelComponent {\r\n @Input() headerIcon?: IconDefinition;\r\n @Input() headerText?: string;\r\n @Input() headerSideText?: string;\r\n @Input() hideHeader?: boolean;\r\n @Input() headerId?: string;\r\n\r\n @Input() animateCaret = false;\r\n @Input() animatePanel = false;\r\n\r\n @Input() hoverColor?: string;\r\n\r\n\r\n /**\r\n * toggles greyish background\r\n *\r\n * @memberof SdsExpansionPanelComponent\r\n */\r\n @Input() showBackground = true;\r\n\r\n /**\r\n * Background color of the panel. Gray-100 by default\r\n *\r\n * @memberof SdsExpansionPanelComponent\r\n */\r\n @Input() backgroundColor = 'var(--bs-gray-100)';\r\n\r\n /**\r\n * position caret next to header of on the far end of the component\r\n *\r\n * @type {('nextToHeader' | 'farEnd')}\r\n * @memberof SdsExpansionPanelComponent\r\n */\r\n @Input() caretPlacement: CaretPlacement = 'nextToHeader';\r\n\r\n /**\r\n * 'descriptionText' - text displayed when component is \"closed\".\r\n *\r\n * Note: Use ng-content 'contentOnClosed' if more complex use-case is needed\r\n *\r\n * @type {string}\r\n * @memberof ExpansionPanelComponent\r\n */\r\n @Input() descriptionText?: string;\r\n\r\n @Input() isOpen: boolean = false;\r\n @Output() isOpenChange: EventEmitter<boolean> = new EventEmitter();\r\n\r\n @Input() expandPanelText?: string;\r\n @Input() collapsePanelText?: string;\r\n\r\n @Input() headerSize: HeaderSize = 'default';\r\n\r\n public caretIcon: IconDefinition = faChevronDown;\r\n \r\n\r\n public onToggleIsOpenClick(event: MouseEvent): void {\r\n this.isOpen = !this.isOpen;\r\n this.isOpenChange.emit(this.isOpen);\r\n event.stopImmediatePropagation();\r\n }\r\n\r\n public openPanel() {\r\n if (!this.isOpen) {\r\n this.isOpen = true;\r\n this.isOpenChange.emit(this.isOpen);\r\n }\r\n }\r\n}\r\n","\r\n<!-- [style.background-color]=\"showBackground ? backgroundColor : null\" -->\r\n<div\r\n class=\"rounded expansion-panel\"\r\n [class.background]=\"showBackground\"\r\n [class.closed]=\"!isOpen\"\r\n [class.show-hover]=\"!isOpen && hoverColor\"\r\n [style.--sds-expansion-panel-bg-color]=\"showBackground ? backgroundColor : 'transparent'\"\r\n [style.--sds-expansion-panel-hover-bg-color]=\"hoverColor ? hoverColor : 'transparent'\"\r\n (click)=\"openPanel()\"\r\n>\r\n <ng-container *ngIf=\"!hideHeader\">\r\n <div\r\n class=\"expansion-panel-header sds-flex-row-center\"\r\n (click)=\"onToggleIsOpenClick($event)\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-link\"\r\n [id]=\"headerId\"\r\n [class.me-auto]=\"caretPlacement === 'farEnd'\"\r\n [class.me-2]=\"caretPlacement === 'nextToHeader'\"\r\n >\r\n <fa-icon class=\"me-1\" *ngIf=\"headerIcon\" [icon]=\"headerIcon\" [fixedWidth]=\"true\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n\r\n <span \r\n class=\"header-text\"\r\n [class.sds-fs-93]=\"headerSize == 'small'\"\r\n >\r\n {{ headerText }}\r\n </span>\r\n <small \r\n *ngIf=\"headerSideText\"\r\n class=\"header-side-text text-muted\"\r\n [class.sds-fs-90]=\"headerSize == 'small'\"\r\n >\r\n {{ headerSideText }}\r\n </small>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm btn-link caret px-1\"\r\n [class.rotate]=\"animateCaret\"\r\n [title]=\"isOpen ? collapsePanelText ?? '' : expandPanelText ?? ''\"\r\n >\r\n <fa-icon [icon]=\"caretIcon\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <div \r\n *ngIf=\"!isOpen\"\r\n >\r\n {{ descriptionText }}\r\n <ng-content select=\"[contentOnClosed]\"></ng-content>\r\n </div>\r\n\r\n <div \r\n class=\"panel-contents\" \r\n [class.open]=\"isOpen\"\r\n [class.animate]=\"animatePanel\"\r\n
|
|
1
|
+
{"version":3,"file":"spicainternational-ngx-sds-components-src-lib-expansion-panel.mjs","sources":["../../../projects/ngx-sds-components/src/lib/expansion-panel/expansion-panel.component.ts","../../../projects/ngx-sds-components/src/lib/expansion-panel/expansion-panel.component.html","../../../projects/ngx-sds-components/src/lib/expansion-panel/expansion-panel.module.ts","../../../projects/ngx-sds-components/src/lib/expansion-panel/spicainternational-ngx-sds-components-src-lib-expansion-panel.ts"],"sourcesContent":["import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n EventEmitter,\r\n Input,\r\n Output,\r\n} from '@angular/core';\r\nimport { faChevronDown } from '@fortawesome/pro-regular-svg-icons';\r\nimport { CaretPlacement, HeaderSize } from './expansion-panel.types';\r\nimport { IconDefinition } from '@fortawesome/fontawesome-svg-core';\r\n\r\n@Component({\r\n selector: 'sds-expansion-panel',\r\n templateUrl: './expansion-panel.component.html',\r\n styleUrls: ['./expansion-panel.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdsExpansionPanelComponent {\r\n @Input() headerIcon?: IconDefinition;\r\n @Input() headerText?: string;\r\n @Input() headerSideText?: string;\r\n @Input() hideHeader?: boolean;\r\n @Input() headerId?: string;\r\n\r\n @Input() animateCaret = false;\r\n @Input() animatePanel = false;\r\n\r\n @Input() hoverColor?: string;\r\n\r\n\r\n /**\r\n * toggles greyish background\r\n *\r\n * @memberof SdsExpansionPanelComponent\r\n */\r\n @Input() showBackground = true;\r\n\r\n /**\r\n * Background color of the panel. Gray-100 by default\r\n *\r\n * @memberof SdsExpansionPanelComponent\r\n */\r\n @Input() backgroundColor = 'var(--bs-gray-100)';\r\n\r\n /**\r\n * position caret next to header of on the far end of the component\r\n *\r\n * @type {('nextToHeader' | 'farEnd')}\r\n * @memberof SdsExpansionPanelComponent\r\n */\r\n @Input() caretPlacement: CaretPlacement = 'nextToHeader';\r\n\r\n /**\r\n * 'descriptionText' - text displayed when component is \"closed\".\r\n *\r\n * Note: Use ng-content 'contentOnClosed' if more complex use-case is needed\r\n *\r\n * @type {string}\r\n * @memberof ExpansionPanelComponent\r\n */\r\n @Input() descriptionText?: string;\r\n\r\n @Input() isOpen: boolean = false;\r\n @Output() isOpenChange: EventEmitter<boolean> = new EventEmitter();\r\n\r\n @Input() expandPanelText?: string;\r\n @Input() collapsePanelText?: string;\r\n\r\n @Input() headerSize: HeaderSize = 'default';\r\n\r\n public caretIcon: IconDefinition = faChevronDown;\r\n \r\n\r\n public onToggleIsOpenClick(event: MouseEvent): void {\r\n this.isOpen = !this.isOpen;\r\n this.isOpenChange.emit(this.isOpen);\r\n event.stopImmediatePropagation();\r\n }\r\n\r\n public openPanel() {\r\n if (!this.isOpen) {\r\n this.isOpen = true;\r\n this.isOpenChange.emit(this.isOpen);\r\n }\r\n }\r\n}\r\n","\r\n<!-- [style.background-color]=\"showBackground ? backgroundColor : null\" -->\r\n<div\r\n class=\"rounded expansion-panel\"\r\n [class.background]=\"showBackground\"\r\n [class.closed]=\"!isOpen\"\r\n [class.show-hover]=\"!isOpen && hoverColor\"\r\n [style.--sds-expansion-panel-bg-color]=\"showBackground ? backgroundColor : 'transparent'\"\r\n [style.--sds-expansion-panel-hover-bg-color]=\"hoverColor ? hoverColor : 'transparent'\"\r\n (click)=\"openPanel()\"\r\n>\r\n <ng-container *ngIf=\"!hideHeader\">\r\n <div\r\n class=\"expansion-panel-header sds-flex-row-center\"\r\n (click)=\"onToggleIsOpenClick($event)\"\r\n >\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-link\"\r\n [id]=\"headerId\"\r\n [class.me-auto]=\"caretPlacement === 'farEnd'\"\r\n [class.me-2]=\"caretPlacement === 'nextToHeader'\"\r\n >\r\n <fa-icon class=\"me-1\" *ngIf=\"headerIcon\" [icon]=\"headerIcon\" [fixedWidth]=\"true\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n\r\n <span \r\n class=\"header-text\"\r\n [class.sds-fs-93]=\"headerSize == 'small'\"\r\n >\r\n {{ headerText }}\r\n </span>\r\n <small \r\n *ngIf=\"headerSideText\"\r\n class=\"header-side-text text-muted\"\r\n [class.sds-fs-90]=\"headerSize == 'small'\"\r\n >\r\n {{ headerSideText }}\r\n </small>\r\n </button>\r\n <button\r\n type=\"button\"\r\n class=\"btn btn-sm btn-link caret px-1\"\r\n [class.rotate]=\"animateCaret\"\r\n [title]=\"isOpen ? collapsePanelText ?? '' : expandPanelText ?? ''\"\r\n >\r\n <fa-icon [icon]=\"caretIcon\" [size]=\"headerSize == 'small' ? 'sm' : 'lg'\"></fa-icon>\r\n </button>\r\n </div>\r\n </ng-container>\r\n\r\n <div \r\n *ngIf=\"!isOpen\"\r\n >\r\n {{ descriptionText }}\r\n <ng-content select=\"[contentOnClosed]\"></ng-content>\r\n </div>\r\n\r\n <div \r\n class=\"panel-contents\" \r\n [class.open]=\"isOpen\"\r\n [class.animate]=\"animatePanel\"\r\n >\r\n <div \r\n *ngIf=\"isOpen\"\r\n class=\"mt-2\"\r\n >\r\n <ng-content></ng-content>\r\n </div>\r\n </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FontAwesomeModule } from '@fortawesome/angular-fontawesome';\r\n\r\nimport { SdsExpansionPanelComponent } from './expansion-panel.component';\r\n/**\r\n * Expansion panel - provides an expandable details-summary view. Used for 'progressive disclosure'.\r\n *\r\n * @export\r\n * @class SdsExpansionPanelModule\r\n */\r\n@NgModule({\r\n declarations: [SdsExpansionPanelComponent],\r\n imports: [CommonModule, FontAwesomeModule],\r\n exports: [SdsExpansionPanelComponent],\r\n})\r\nexport class SdsExpansionPanelModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -4,29 +4,58 @@ import * as i1 from '@angular/common';
|
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
5
|
|
|
6
6
|
class SdsTimelineService {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
constructor(start, end, offSetMinutes, cutOffset) {
|
|
8
|
+
this.startWithOffset = new Date();
|
|
9
|
+
this.endWithOffset = new Date();
|
|
10
10
|
this.start = new Date();
|
|
11
11
|
this.end = new Date();
|
|
12
|
+
this.cutOffset = true;
|
|
12
13
|
this.hourTicks = [];
|
|
14
|
+
this.cutOffset = cutOffset;
|
|
13
15
|
this.start = new Date(start);
|
|
14
|
-
this.
|
|
16
|
+
this.startWithOffset = new Date(start);
|
|
17
|
+
this.startWithOffset.setMinutes(this.startWithOffset.getMinutes() - offSetMinutes);
|
|
15
18
|
this.end = new Date(end);
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
19
|
+
this.endWithOffset = new Date(end);
|
|
20
|
+
this.endWithOffset.setMinutes(this.endWithOffset.getMinutes() + offSetMinutes);
|
|
21
|
+
this.widthPercentPerMinute = (100 / this.diffInMinutes(this.startWithOffset, this.endWithOffset));
|
|
18
22
|
this.initHourTicks();
|
|
19
|
-
//this.initDayLabels();
|
|
20
|
-
// this.initHourLabels();
|
|
21
23
|
}
|
|
22
24
|
getX(time) {
|
|
23
|
-
|
|
25
|
+
const trimmedTime = new Date(time);
|
|
26
|
+
if (this.cutOffset) {
|
|
27
|
+
if (trimmedTime < this.start) {
|
|
28
|
+
trimmedTime.setTime(this.start.getTime());
|
|
29
|
+
}
|
|
30
|
+
if (trimmedTime > this.end) {
|
|
31
|
+
trimmedTime.setTime(this.end.getTime());
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return this.diffInMinutes(this.startWithOffset, trimmedTime) * this.widthPercentPerMinute;
|
|
24
35
|
}
|
|
25
36
|
getWidthFromMinutes(minutes) {
|
|
26
37
|
return minutes * this.widthPercentPerMinute;
|
|
27
38
|
}
|
|
28
39
|
getWidthFromTime(start, end) {
|
|
29
|
-
|
|
40
|
+
const trimmedStart = new Date(start);
|
|
41
|
+
if (this.cutOffset) {
|
|
42
|
+
if (trimmedStart < this.start) {
|
|
43
|
+
trimmedStart.setTime(this.start.getTime());
|
|
44
|
+
}
|
|
45
|
+
if (trimmedStart > this.end) {
|
|
46
|
+
trimmedStart.setTime(this.end.getTime());
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
const trimmedEnd = new Date(end);
|
|
50
|
+
if (this.cutOffset) {
|
|
51
|
+
if (trimmedEnd < this.start) {
|
|
52
|
+
trimmedEnd.setTime(this.start.getTime());
|
|
53
|
+
}
|
|
54
|
+
if (trimmedEnd > this.end) {
|
|
55
|
+
trimmedEnd.setTime(this.end.getTime());
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return this.getWidthFromMinutes(this.diffInMinutes(trimmedStart, trimmedEnd));
|
|
30
59
|
}
|
|
31
60
|
getTick(time) {
|
|
32
61
|
return {
|
|
@@ -55,23 +84,26 @@ class SdsTimelineService {
|
|
|
55
84
|
getDayLabels(locales, customDataFn) {
|
|
56
85
|
const dayLabels = [];
|
|
57
86
|
// get start date at the beginning of the day
|
|
58
|
-
let startDate = new Date(this.
|
|
87
|
+
let startDate = new Date(this.startWithOffset);
|
|
59
88
|
startDate.setHours(0, 0, 0, 0);
|
|
60
89
|
// get end date at the end of the day
|
|
61
|
-
let endDate = new Date(this.
|
|
90
|
+
let endDate = new Date(this.endWithOffset);
|
|
62
91
|
endDate.setHours(23, 59, 59, 999);
|
|
63
92
|
let currentDate = new Date(startDate);
|
|
64
93
|
while (currentDate <= endDate) {
|
|
65
94
|
let endOfCurrentDay = new Date(currentDate);
|
|
66
95
|
endOfCurrentDay.setHours(23, 59, 59, 999);
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
96
|
+
const dayLabelWidth = this.getWidthFromTime(currentDate, endOfCurrentDay);
|
|
97
|
+
if (dayLabelWidth > 0) {
|
|
98
|
+
dayLabels.push({
|
|
99
|
+
// date: new Date(currentDate),
|
|
100
|
+
x: this.getX(new Date(currentDate)),
|
|
101
|
+
width: dayLabelWidth,
|
|
102
|
+
label: currentDate.toLocaleDateString(locales !== null && locales !== void 0 ? locales : [], { weekday: 'long', day: 'numeric', month: 'long', year: 'numeric' }),
|
|
103
|
+
date: new Date(currentDate),
|
|
104
|
+
data: customDataFn ? customDataFn(new Date(currentDate)) : null
|
|
105
|
+
});
|
|
106
|
+
}
|
|
75
107
|
currentDate.setDate(currentDate.getDate() + 1);
|
|
76
108
|
}
|
|
77
109
|
return dayLabels;
|
|
@@ -112,9 +144,9 @@ class SdsTimelineService {
|
|
|
112
144
|
initHourTicks() {
|
|
113
145
|
this.hourTicks = [];
|
|
114
146
|
// get first whole hour from start date
|
|
115
|
-
let startHour = this.roundHoursUp(this.
|
|
147
|
+
let startHour = this.roundHoursUp(this.startWithOffset);
|
|
116
148
|
// get last whole hour from end date
|
|
117
|
-
let endHour = this.roundHoursDown(this.
|
|
149
|
+
let endHour = this.roundHoursDown(this.endWithOffset);
|
|
118
150
|
let currentHour = new Date(startHour);
|
|
119
151
|
while (currentHour <= endHour) {
|
|
120
152
|
this.hourTicks.push(this.getTick(currentHour));
|
|
@@ -263,11 +295,19 @@ class SdsTimelineComponent {
|
|
|
263
295
|
* @memberof SdsTimelineComponent
|
|
264
296
|
*/
|
|
265
297
|
this.offSetMinutes = 15;
|
|
298
|
+
/**
|
|
299
|
+
* Control if those parts of segments (or whole segments) that fall into the Offset
|
|
300
|
+
* period are displayed or not
|
|
301
|
+
*
|
|
302
|
+
* @type {boolean}
|
|
303
|
+
* @memberof SdsTimelineComponent
|
|
304
|
+
*/
|
|
305
|
+
this.cutOffset = false;
|
|
266
306
|
// protected
|
|
267
307
|
this.hourTicks = [];
|
|
268
308
|
this.hourLabels = [];
|
|
269
309
|
this.dayLabels = [];
|
|
270
|
-
this._timelineService = new SdsTimelineService(this.start, this.end, this.offSetMinutes);
|
|
310
|
+
this._timelineService = new SdsTimelineService(this.start, this.end, this.offSetMinutes, this.cutOffset);
|
|
271
311
|
this.presentationItems = [];
|
|
272
312
|
this.presentationPointInTimeItems = [];
|
|
273
313
|
this.isDragging = false;
|
|
@@ -279,12 +319,12 @@ class SdsTimelineComponent {
|
|
|
279
319
|
}
|
|
280
320
|
ngOnChanges(changes) {
|
|
281
321
|
if (this.start && this.end) {
|
|
282
|
-
this._timelineService = new SdsTimelineService(this.start, this.end, this.offSetMinutes);
|
|
322
|
+
this._timelineService = new SdsTimelineService(this.start, this.end, this.offSetMinutes, this.cutOffset);
|
|
283
323
|
this.generateTicks();
|
|
284
324
|
this.generateInternalTimelineItems();
|
|
285
325
|
}
|
|
286
|
-
if (changes['start'] || changes['end'] || changes['offSetMinutes']) {
|
|
287
|
-
this._timelineService = new SdsTimelineService(this.start, this.end, this.offSetMinutes);
|
|
326
|
+
if (changes['start'] || changes['end'] || changes['offSetMinutes'] || changes['cutOffset']) {
|
|
327
|
+
this._timelineService = new SdsTimelineService(this.start, this.end, this.offSetMinutes, this.cutOffset);
|
|
288
328
|
this.generateTicks();
|
|
289
329
|
this.generateInternalTimelineItems();
|
|
290
330
|
}
|
|
@@ -381,7 +421,11 @@ class SdsTimelineComponent {
|
|
|
381
421
|
this.hourLabels = this._timelineService.getHourLabels(this.hourLabelFrequency);
|
|
382
422
|
}
|
|
383
423
|
generateInternalTimelineItems() {
|
|
384
|
-
this.
|
|
424
|
+
const cuttOffStart = this.cutOffset ? this.start : new Date(this.start.getTime() - this.offSetMinutes * 60000);
|
|
425
|
+
const cuttOffEnd = this.cutOffset ? this.end : new Date(this.end.getTime() + this.offSetMinutes * 60000);
|
|
426
|
+
this.presentationItems = this.items
|
|
427
|
+
.filter((item) => item.end < cuttOffStart || item.start > cuttOffEnd ? false : true)
|
|
428
|
+
.map((item) => {
|
|
385
429
|
var _a, _b, _c, _d, _e;
|
|
386
430
|
const startTime = new Date(item.start).toLocaleTimeString((_a = this.locales) !== null && _a !== void 0 ? _a : [], { hour: 'numeric', minute: '2-digit' });
|
|
387
431
|
const endTime = new Date(item.end).toLocaleTimeString((_b = this.locales) !== null && _b !== void 0 ? _b : [], { hour: 'numeric', minute: '2-digit' });
|
|
@@ -399,7 +443,11 @@ class SdsTimelineComponent {
|
|
|
399
443
|
});
|
|
400
444
|
}
|
|
401
445
|
generateInternalTimelinePointInTimeItems() {
|
|
402
|
-
this.
|
|
446
|
+
const cuttOffStart = this.cutOffset ? this.start : new Date(this.start.getTime() - this.offSetMinutes * 60000);
|
|
447
|
+
const cuttOffEnd = this.cutOffset ? this.end : new Date(this.end.getTime() + this.offSetMinutes * 60000);
|
|
448
|
+
this.presentationPointInTimeItems = this.pointInTimeItems
|
|
449
|
+
.filter((item) => item.date < cuttOffStart || item.date > cuttOffEnd ? false : true)
|
|
450
|
+
.map((item) => {
|
|
403
451
|
var _a, _b, _c, _d, _e;
|
|
404
452
|
const timePointString = new Date(item.date).toLocaleTimeString((_a = this.locales) !== null && _a !== void 0 ? _a : [], { hour: 'numeric', minute: '2-digit' });
|
|
405
453
|
return {
|
|
@@ -416,7 +464,7 @@ class SdsTimelineComponent {
|
|
|
416
464
|
}
|
|
417
465
|
}
|
|
418
466
|
SdsTimelineComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsTimelineComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
419
|
-
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", pointInTimeTemplate: "pointInTimeTemplate", dayLabelTemplate: "dayLabelTemplate", dayLabelCustomDataFn: "dayLabelCustomDataFn", tickFrequency: "tickFrequency", hourLabelFrequency: "hourLabelFrequency", zoomPercent: "zoomPercent", viewOffsetPercent: "viewOffsetPercent", maxZoomPercent: "maxZoomPercent", showHourLabels: "showHourLabels", hourLabelClass: "hourLabelClass", showDayLabels: "showDayLabels", dayLabelClass: "dayLabelClass", showTimeline: "showTimeline", hourTickClass: "hourTickClass", timelineHeight: "timelineHeight", enableZoomAndDrag: "enableZoomAndDrag", offSetMinutes: "offSetMinutes", locales: "locales" }, 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<ng-template #defaultDayLabelTemplate let-label=\"label\">\r\n {{label.label}}\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\" \r\n [ngClass]=\"dayLabelClass ?? null\"\r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <ng-container \r\n [ngTemplateOutlet]=\"dayLabelTemplate ? dayLabelTemplate : defaultDayLabelTemplate\"\r\n [ngTemplateOutletContext]=\"{label: label}\">\r\n </ng-container> \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\" \r\n [ngClass]=\"hourLabelClass ?? null\"\r\n [style.left.%]=\"label.x\"\r\n [style.width.rem]=\"1.2\"\r\n [ngStyle]=\"{'left': 'calc(' + label.x + '% - 0.6rem)'}\"\r\n >\r\n \r\n {{label.label}}\r\n \r\n </div>\r\n </div>\r\n\r\n <div \r\n *ngIf=\"showTimeline\"\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 [ngClass]=\"hourTickClass ?? null\"\t\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 [ngClass]=\"item.class ?? null\"\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]=\"pointInTimeTemplate ? pointInTimeTemplate : 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;font-size:.875rem}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header{height:1.6rem;position:relative;font-size:.8em}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header .sds-hour-label{position:absolute;display:inline;text-align:center;font-size:.875rem}.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"] }] });
|
|
467
|
+
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", pointInTimeTemplate: "pointInTimeTemplate", dayLabelTemplate: "dayLabelTemplate", dayLabelCustomDataFn: "dayLabelCustomDataFn", tickFrequency: "tickFrequency", hourLabelFrequency: "hourLabelFrequency", zoomPercent: "zoomPercent", viewOffsetPercent: "viewOffsetPercent", maxZoomPercent: "maxZoomPercent", showHourLabels: "showHourLabels", hourLabelClass: "hourLabelClass", showDayLabels: "showDayLabels", dayLabelClass: "dayLabelClass", showTimeline: "showTimeline", hourTickClass: "hourTickClass", timelineHeight: "timelineHeight", enableZoomAndDrag: "enableZoomAndDrag", offSetMinutes: "offSetMinutes", locales: "locales", cutOffset: "cutOffset" }, 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<ng-template #defaultDayLabelTemplate let-label=\"label\">\r\n {{label.label}}\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\" \r\n [ngClass]=\"dayLabelClass ?? null\"\r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <ng-container \r\n [ngTemplateOutlet]=\"dayLabelTemplate ? dayLabelTemplate : defaultDayLabelTemplate\"\r\n [ngTemplateOutletContext]=\"{label: label}\">\r\n </ng-container> \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\" \r\n [ngClass]=\"hourLabelClass ?? null\"\r\n [style.left.%]=\"label.x\"\r\n [style.width.rem]=\"1.2\"\r\n [ngStyle]=\"{'left': 'calc(' + label.x + '% - 0.6rem)'}\"\r\n >\r\n \r\n {{label.label}}\r\n \r\n </div>\r\n </div>\r\n\r\n <div \r\n *ngIf=\"showTimeline\"\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 [ngClass]=\"hourTickClass ?? null\"\t\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 [ngClass]=\"item.class ?? null\"\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]=\"pointInTimeTemplate ? pointInTimeTemplate : 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;font-size:.875rem}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header{height:1.6rem;position:relative;font-size:.8em}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header .sds-hour-label{position:absolute;display:inline;text-align:center;font-size:.875rem}.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"] }] });
|
|
420
468
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdsTimelineComponent, decorators: [{
|
|
421
469
|
type: Component,
|
|
422
470
|
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<ng-template #defaultDayLabelTemplate let-label=\"label\">\r\n {{label.label}}\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\" \r\n [ngClass]=\"dayLabelClass ?? null\"\r\n [style.left.%]=\"label.x\"\r\n [style.width.%]=\"label.width\"\r\n >\r\n <ng-container \r\n [ngTemplateOutlet]=\"dayLabelTemplate ? dayLabelTemplate : defaultDayLabelTemplate\"\r\n [ngTemplateOutletContext]=\"{label: label}\">\r\n </ng-container> \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\" \r\n [ngClass]=\"hourLabelClass ?? null\"\r\n [style.left.%]=\"label.x\"\r\n [style.width.rem]=\"1.2\"\r\n [ngStyle]=\"{'left': 'calc(' + label.x + '% - 0.6rem)'}\"\r\n >\r\n \r\n {{label.label}}\r\n \r\n </div>\r\n </div>\r\n\r\n <div \r\n *ngIf=\"showTimeline\"\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 [ngClass]=\"hourTickClass ?? null\"\t\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 [ngClass]=\"item.class ?? null\"\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]=\"pointInTimeTemplate ? pointInTimeTemplate : 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;font-size:.875rem}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header{height:1.6rem;position:relative;font-size:.8em}.sds-timeline-viewport .sds-timeline-container .sds-timeline-hour-header .sds-hour-label{position:absolute;display:inline;text-align:center;font-size:.875rem}.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"] }]
|
|
@@ -470,6 +518,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
|
|
|
470
518
|
type: Input
|
|
471
519
|
}], locales: [{
|
|
472
520
|
type: Input
|
|
521
|
+
}], cutOffset: [{
|
|
522
|
+
type: Input
|
|
473
523
|
}], _viewport: [{
|
|
474
524
|
type: ViewChild,
|
|
475
525
|
args: ['viewport', { static: true }]
|