@sbb-esta/lyne-elements-experimental 2.5.1 → 2.7.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.
Files changed (104) hide show
  1. package/core/datetime/date-helper.js +191 -0
  2. package/core/datetime.d.ts +3 -0
  3. package/core/datetime.d.ts.map +1 -1
  4. package/core/datetime.js +3 -189
  5. package/core/timetable/access-leg-helper.js +94 -0
  6. package/core/timetable/timetable-helper.js +13 -0
  7. package/core/timetable/timetable-properties.js +1 -0
  8. package/core/timetable.d.ts +3 -0
  9. package/core/timetable.d.ts.map +1 -1
  10. package/core/timetable.js +6 -102
  11. package/custom-elements.json +602 -433
  12. package/development/core/datetime/date-helper.js +285 -0
  13. package/development/core/datetime.d.ts +3 -0
  14. package/development/core/datetime.d.ts.map +1 -1
  15. package/development/core/datetime.js +2 -281
  16. package/development/core/timetable/access-leg-helper.js +128 -0
  17. package/development/core/timetable/timetable-helper.js +21 -0
  18. package/development/core/timetable/timetable-properties.js +2 -0
  19. package/development/core/timetable.d.ts +3 -0
  20. package/development/core/timetable.d.ts.map +1 -1
  21. package/development/core/timetable.js +3 -139
  22. package/development/{differenceInMinutes-Cmyza6nm.js → differenceInMinutes-CHSyWiQs.js} +2 -2
  23. package/development/{format-BU7bjY-L.js → format-D0-yhzi4.js} +3 -3
  24. package/development/{isValid-DO_pHwcW.js → isValid-Bo4R7iA7.js} +2 -2
  25. package/development/journey-summary/journey-summary.js +297 -0
  26. package/development/journey-summary.d.ts +3 -0
  27. package/development/journey-summary.d.ts.map +1 -1
  28. package/development/journey-summary.js +2 -294
  29. package/development/pearl-chain/pearl-chain.js +649 -0
  30. package/development/pearl-chain-time/pearl-chain-time.js +315 -0
  31. package/development/pearl-chain-time.d.ts +3 -0
  32. package/development/pearl-chain-time.d.ts.map +1 -1
  33. package/development/pearl-chain-time.js +2 -312
  34. package/development/pearl-chain-vertical/pearl-chain-vertical.js +45 -0
  35. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.js +395 -0
  36. package/development/pearl-chain-vertical-item.d.ts +3 -0
  37. package/development/pearl-chain-vertical-item.d.ts.map +1 -1
  38. package/development/pearl-chain-vertical-item.js +2 -392
  39. package/development/pearl-chain-vertical.d.ts +3 -0
  40. package/development/pearl-chain-vertical.d.ts.map +1 -1
  41. package/development/pearl-chain-vertical.js +2 -42
  42. package/development/pearl-chain.d.ts +3 -0
  43. package/development/pearl-chain.d.ts.map +1 -1
  44. package/development/pearl-chain.js +2 -646
  45. package/development/timetable-duration/timetable-duration.js +119 -0
  46. package/development/timetable-duration.d.ts +3 -0
  47. package/development/timetable-duration.d.ts.map +1 -1
  48. package/development/timetable-duration.js +2 -116
  49. package/development/timetable-row/timetable-row.d.ts +1 -0
  50. package/development/timetable-row/timetable-row.d.ts.map +1 -1
  51. package/development/timetable-row/timetable-row.js +820 -0
  52. package/development/timetable-row.d.ts +3 -0
  53. package/development/timetable-row.d.ts.map +1 -1
  54. package/development/timetable-row.js +2 -788
  55. package/development/{toDate-B6IBgPYH.js → toDate-D_Vjps95.js} +5 -5
  56. package/{differenceInMinutes-BI2zjbtS.js → differenceInMinutes-BMqUZdhj.js} +1 -1
  57. package/{format-CUYwLzoN.js → format-Dg8rkk7h.js} +2 -2
  58. package/index.d.ts +7 -7
  59. package/index.js +7 -7
  60. package/{isValid-mroh13Xp.js → isValid-DJ69OMZJ.js} +6 -6
  61. package/journey-summary/journey-summary.js +190 -0
  62. package/journey-summary.d.ts +3 -0
  63. package/journey-summary.d.ts.map +1 -1
  64. package/journey-summary.js +2 -188
  65. package/package.json +3 -3
  66. package/pearl-chain/pearl-chain.js +177 -0
  67. package/pearl-chain-time/pearl-chain-time.js +153 -0
  68. package/pearl-chain-time.d.ts +3 -0
  69. package/pearl-chain-time.d.ts.map +1 -1
  70. package/pearl-chain-time.js +2 -151
  71. package/pearl-chain-vertical/pearl-chain-vertical.js +23 -0
  72. package/pearl-chain-vertical-item/pearl-chain-vertical-item.js +71 -0
  73. package/pearl-chain-vertical-item.d.ts +3 -0
  74. package/pearl-chain-vertical-item.d.ts.map +1 -1
  75. package/pearl-chain-vertical-item.js +2 -69
  76. package/pearl-chain-vertical.d.ts +3 -0
  77. package/pearl-chain-vertical.d.ts.map +1 -1
  78. package/pearl-chain-vertical.js +2 -21
  79. package/pearl-chain.d.ts +3 -0
  80. package/pearl-chain.d.ts.map +1 -1
  81. package/pearl-chain.js +2 -175
  82. package/timetable-duration/timetable-duration.js +55 -0
  83. package/timetable-duration.d.ts +3 -0
  84. package/timetable-duration.d.ts.map +1 -1
  85. package/timetable-duration.js +2 -53
  86. package/timetable-row/timetable-row.d.ts +1 -0
  87. package/timetable-row/timetable-row.d.ts.map +1 -1
  88. package/timetable-row/timetable-row.js +462 -0
  89. package/timetable-row.d.ts +3 -0
  90. package/timetable-row.d.ts.map +1 -1
  91. package/timetable-row.js +9 -439
  92. package/{toDate-DQg4ZFnf.js → toDate-BCXKL_wM.js} +4 -4
  93. package/development/pearl-chain/pearl-chain.sample-data.d.ts +0 -140
  94. package/development/pearl-chain/pearl-chain.sample-data.d.ts.map +0 -1
  95. package/development/timetable-duration/timetable-duration.sample-data.d.ts +0 -6
  96. package/development/timetable-duration/timetable-duration.sample-data.d.ts.map +0 -1
  97. package/development/timetable-row/timetable-row.sample-data.d.ts +0 -24
  98. package/development/timetable-row/timetable-row.sample-data.d.ts.map +0 -1
  99. package/pearl-chain/pearl-chain.sample-data.d.ts +0 -140
  100. package/pearl-chain/pearl-chain.sample-data.d.ts.map +0 -1
  101. package/timetable-duration/timetable-duration.sample-data.d.ts +0 -6
  102. package/timetable-duration/timetable-duration.sample-data.d.ts.map +0 -1
  103. package/timetable-row/timetable-row.sample-data.d.ts +0 -24
  104. package/timetable-row/timetable-row.sample-data.d.ts.map +0 -1
@@ -1,649 +1,5 @@
1
- var __typeError = (msg) => {
2
- throw TypeError(msg);
3
- };
4
- var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
- var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
- var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
- var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
- import { __runInitializers, __esDecorate } from "tslib";
9
- import { defaultDateAdapter } from "@sbb-esta/lyne-elements/core/datetime.js";
10
- import { forceType } from "@sbb-esta/lyne-elements/core/decorators.js";
11
- import { css, LitElement, html, nothing } from "lit";
12
- import { customElement, property } from "lit/decorators.js";
13
- import { styleMap } from "lit/directives/style-map.js";
14
- import { removeTimezoneFromISOTimeString } from "./core/datetime.js";
15
- import { isRideLeg } from "./core/timetable.js";
16
- import { d as differenceInMinutes, a as addMinutes } from "./differenceInMinutes-Cmyza6nm.js";
17
- import { t as toDate } from "./toDate-B6IBgPYH.js";
18
- function isAfter(date, dateToCompare) {
19
- return +toDate(date) > +toDate(dateToCompare);
20
- }
21
- function isBefore(date, dateToCompare) {
22
- return +toDate(date) < +toDate(dateToCompare);
23
- }
24
- const style = css`*,
25
- ::before,
26
- ::after {
27
- box-sizing: border-box;
28
- }
29
-
30
- :host {
31
- --sbb-pearl-chain-height: var(--sbb-border-width-2x);
32
- --sbb-pearl-chain-spacing-small: 0.125rem;
33
- --sbb-pearl-chain-color: var(--sbb-pearl-chain-bullet-color);
34
- --sbb-pearl-chain-color-disruption: var(--sbb-pearl-chain-bullet-color-disruption);
35
- --sbb-pearl-chain-color-past: var(--sbb-pearl-chain-bullet-color-past);
36
- --sbb-pearl-chain-leg-width: 100%;
37
- display: block;
38
- --sbb-pearl-chain-bullet-size-start-end: 0.625rem;
39
- --sbb-pearl-chain-bullet-size-stop: 0.5rem;
40
- --sbb-pearl-chain-bullet-color: var(--sbb-color-charcoal);
41
- --sbb-pearl-chain-bullet-color-past: var(--sbb-color-metal);
42
- --sbb-pearl-chain-bullet-color-irrelevant: var(--sbb-color-metal);
43
- --sbb-pearl-chain-bullet-color-disruption: var(--sbb-color-red);
44
- --sbb-pearl-chain-bullet-border-width: var(--sbb-border-width-2x);
45
- --sbb-pearl-chain-bullet-animation-duration: 1920ms;
46
- --sbb-pearl-chain-bullet-animation-easing: ease-out;
47
- --sbb-pearl-chain-bullet-crossed-width: 0.88375rem;
48
- --sbb-pearl-chain-bullet-crossed-height: 0.21875rem;
49
- --sbb-pearl-chain-bullet-crossed-border-width: 0.09375rem;
50
- }
51
-
52
- .sbb-pearl-chain {
53
- position: relative;
54
- display: flex;
55
- justify-content: space-between;
56
- flex-wrap: nowrap;
57
- color: var(--sbb-pearl-chain-color);
58
- width: 100%;
59
- padding-block: calc((var(--sbb-pearl-chain-bullet-size-start-end) - var(--sbb-pearl-chain-height)) / 2);
60
- padding-inline-end: var(--sbb-pearl-chain-bullet-size-start-end);
61
- }
62
-
63
- .sbb-pearl-chain__bullet {
64
- min-height: var(--sbb-pearl-chain-bullet-size-start-end);
65
- min-width: var(--sbb-pearl-chain-bullet-size-start-end);
66
- height: var(--sbb-pearl-chain-bullet-size-start-end);
67
- width: var(--sbb-pearl-chain-bullet-size-start-end);
68
- background: var(--sbb-pearl-chain-bullet-color);
69
- color: var(--sbb-pearl-chain-bullet-color);
70
- border-color: var(--sbb-pearl-chain-bullet-color);
71
- border-radius: 100%;
72
- }
73
- @media (forced-colors: active) {
74
- .sbb-pearl-chain__bullet {
75
- --sbb-pearl-chain-bullet-color: CanvasText;
76
- }
77
- }
78
- .sbb-pearl-chain__bullet {
79
- content: "";
80
- position: absolute;
81
- background-color: currentcolor;
82
- inset-block-start: 0;
83
- z-index: 3;
84
- }
85
-
86
- .sbb-pearl-chain__bullet:first-of-type {
87
- inset-inline-start: 0;
88
- }
89
-
90
- .sbb-pearl-chain__bullet:last-of-type {
91
- inset-inline-end: 0;
92
- }
93
-
94
- .sbb-pearl-chain__leg {
95
- flex-shrink: 0;
96
- flex-grow: 0;
97
- position: relative;
98
- height: var(--sbb-pearl-chain-height);
99
- border-inline-end: var(--sbb-pearl-chain-spacing-small) solid Canvas;
100
- background-color: currentcolor;
101
- width: var(--sbb-pearl-chain-leg-width);
102
- display: flex;
103
- align-items: center;
104
- }
105
- @media (forced-colors: active) {
106
- .sbb-pearl-chain__leg {
107
- background-color: CanvasText;
108
- }
109
- .sbb-pearl-chain--past .sbb-pearl-chain__leg {
110
- background-color: GrayText;
111
- }
112
- }
113
-
114
- .sbb-pearl-chain__leg:last-of-type {
115
- border: none;
116
- }
117
-
118
- .sbb-pearl-chain__stop {
119
- position: relative;
120
- z-index: 2;
121
- background: var(--sbb-pearl-chain-bullet-color);
122
- color: var(--sbb-pearl-chain-bullet-color);
123
- border-color: var(--sbb-pearl-chain-bullet-color);
124
- border-radius: 100%;
125
- }
126
- @media (forced-colors: active) {
127
- .sbb-pearl-chain__stop {
128
- --sbb-pearl-chain-bullet-color: CanvasText;
129
- }
130
- }
131
- .sbb-pearl-chain__stop {
132
- min-height: var(--sbb-pearl-chain-bullet-size-stop);
133
- min-width: var(--sbb-pearl-chain-bullet-size-stop);
134
- height: var(--sbb-pearl-chain-bullet-size-stop);
135
- width: var(--sbb-pearl-chain-bullet-size-stop);
136
- border: var(--sbb-pearl-chain-bullet-border-width) solid currentcolor;
137
- background: Canvas;
138
- }
139
-
140
- .sbb-pearl-chain__bullet--future {
141
- background: var(--sbb-pearl-chain-bullet-color);
142
- color: var(--sbb-pearl-chain-bullet-color);
143
- border-color: var(--sbb-pearl-chain-bullet-color);
144
- border-radius: 100%;
145
- }
146
- @media (forced-colors: active) {
147
- .sbb-pearl-chain__bullet--future {
148
- --sbb-pearl-chain-bullet-color: CanvasText;
149
- }
150
- }
151
-
152
- .sbb-pearl-chain__leg--past,
153
- .sbb-pearl-chain--past,
154
- .sbb-pearl-chain__leg--past::after,
155
- .sbb-pearl-chain__leg--progress::after,
156
- .sbb-pearl-chain__leg--progress .sbb-pearl-chain__stop,
157
- .sbb-pearl-chain--progress,
158
- .sbb-pearl-chain__bullet--past {
159
- color: var(--sbb-pearl-chain-color-past);
160
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-bullet-color-past);
161
- }
162
- @media (forced-colors: active) {
163
- .sbb-pearl-chain__leg--past,
164
- .sbb-pearl-chain--past,
165
- .sbb-pearl-chain__leg--past::after,
166
- .sbb-pearl-chain__leg--progress::after,
167
- .sbb-pearl-chain__leg--progress .sbb-pearl-chain__stop,
168
- .sbb-pearl-chain--progress,
169
- .sbb-pearl-chain__bullet--past {
170
- --sbb-pearl-chain-bullet-color: GrayText !important;
171
- }
172
- }
173
- @media (forced-colors: active) {
174
- .sbb-pearl-chain__leg--past,
175
- .sbb-pearl-chain--past,
176
- .sbb-pearl-chain__leg--past::after,
177
- .sbb-pearl-chain__leg--progress::after,
178
- .sbb-pearl-chain__leg--progress .sbb-pearl-chain__stop,
179
- .sbb-pearl-chain--progress,
180
- .sbb-pearl-chain__bullet--past {
181
- background-color: GrayText !important;
182
- }
183
- }
184
-
185
- .sbb-pearl-chain__bullet--progress {
186
- background: var(--sbb-pearl-chain-bullet-color);
187
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-bullet-color-past);
188
- }
189
- @media (forced-colors: active) {
190
- .sbb-pearl-chain__bullet--progress {
191
- --sbb-pearl-chain-bullet-color: GrayText !important;
192
- }
193
- }
194
-
195
- .sbb-pearl-chain__bullet--departure-disruption,
196
- .sbb-pearl-chain--arrival-disruption,
197
- .sbb-pearl-chain--departure-disruption,
198
- .sbb-pearl-chain__leg--disruption {
199
- color: var(--sbb-pearl-chain-color-disruption);
200
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-bullet-color-disruption);
201
- }
202
- @media (forced-colors: active) {
203
- .sbb-pearl-chain__bullet--departure-disruption,
204
- .sbb-pearl-chain--arrival-disruption,
205
- .sbb-pearl-chain--departure-disruption,
206
- .sbb-pearl-chain__leg--disruption {
207
- --sbb-pearl-chain-bullet-color: Highlight;
208
- }
209
- }
210
- @media (forced-colors: active) {
211
- .sbb-pearl-chain__bullet--departure-disruption,
212
- .sbb-pearl-chain--arrival-disruption,
213
- .sbb-pearl-chain--departure-disruption,
214
- .sbb-pearl-chain__leg--disruption {
215
- color: Highlight;
216
- background: Highlight;
217
- }
218
- }
219
-
220
- .sbb-pearl-chain__leg--disruption .sbb-pearl-chain__stop {
221
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-bullet-color-disruption);
222
- }
223
- @media (forced-colors: active) {
224
- .sbb-pearl-chain__leg--disruption .sbb-pearl-chain__stop {
225
- --sbb-pearl-chain-bullet-color: Highlight;
226
- }
227
- }
228
-
229
- .sbb-pearl-chain__leg--past .sbb-pearl-chain__stop {
230
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-bullet-color-past);
231
- }
232
- @media (forced-colors: active) {
233
- .sbb-pearl-chain__leg--past .sbb-pearl-chain__stop {
234
- --sbb-pearl-chain-bullet-color: GrayText !important;
235
- }
236
- }
237
-
238
- .sbb-pearl-chain__leg--disruption::after {
239
- background-color: unset;
240
- background-image: linear-gradient(to right, currentcolor 0%, currentcolor 50%, Canvas 50%);
241
- background-repeat: repeat-x;
242
- background-size: calc(2 * var(--sbb-pearl-chain-spacing-small)) var(--sbb-pearl-chain-height);
243
- inset-inline-end: var(--sbb-pearl-chain-height);
244
- }
245
- @media (forced-colors: active) {
246
- .sbb-pearl-chain__leg--disruption::after {
247
- background: unset;
248
- border-block-start: 0.0625rem dashed Highlight;
249
- transform: translateY(0.0625rem);
250
- }
251
- }
252
-
253
- .sbb-pearl-chain__leg--skipped {
254
- color: var(--sbb-pearl-chain-color-disruption);
255
- }
256
- .sbb-pearl-chain__leg--skipped::after {
257
- background-color: unset;
258
- background-image: linear-gradient(to right, currentcolor 0%, currentcolor 50%, Canvas 50%);
259
- background-repeat: repeat-x;
260
- background-size: calc(2 * var(--sbb-pearl-chain-spacing-small)) var(--sbb-pearl-chain-height);
261
- inset-inline-end: var(--sbb-pearl-chain-height);
262
- }
263
- @media (forced-colors: active) {
264
- .sbb-pearl-chain__leg--skipped::after {
265
- background: unset;
266
- border-block-start: 0.0625rem dashed Highlight;
267
- transform: translateY(0.0625rem);
268
- }
269
- }
270
-
271
- .sbb-pearl-chain__stop--departure-skipped {
272
- min-height: var(--sbb-pearl-chain-bullet-size-stop);
273
- min-width: var(--sbb-pearl-chain-bullet-size-stop);
274
- height: var(--sbb-pearl-chain-bullet-size-stop);
275
- width: var(--sbb-pearl-chain-bullet-size-stop);
276
- border: var(--sbb-pearl-chain-bullet-border-width) solid currentcolor;
277
- background: Canvas;
278
- border: var(--sbb-pearl-chain-bullet-border-width) solid currentcolor;
279
- background: Canvas;
280
- }
281
- .sbb-pearl-chain__stop--departure-skipped::before {
282
- content: "";
283
- position: absolute;
284
- inset-block-start: 50%;
285
- inset-inline-start: 50%;
286
- transform: translate(-50%, -50%) rotate(45deg);
287
- border-block-start: var(--sbb-pearl-chain-bullet-crossed-border-width) solid canvas;
288
- background: var(--sbb-pearl-chain-bullet-color-disruption);
289
- height: var(--sbb-pearl-chain-bullet-crossed-height);
290
- width: var(--sbb-pearl-chain-bullet-crossed-width);
291
- }
292
- @media (forced-colors: active) {
293
- .sbb-pearl-chain__stop--departure-skipped::before {
294
- background: Highlight;
295
- }
296
- }
297
-
298
- .sbb-pearl-chain--arrival-skipped,
299
- .sbb-pearl-chain--departure-skipped {
300
- min-height: var(--sbb-pearl-chain-bullet-size-start-end);
301
- min-width: var(--sbb-pearl-chain-bullet-size-start-end);
302
- height: var(--sbb-pearl-chain-bullet-size-start-end);
303
- width: var(--sbb-pearl-chain-bullet-size-start-end);
304
- border: var(--sbb-pearl-chain-bullet-border-width) solid currentcolor;
305
- background: Canvas;
306
- }
307
- .sbb-pearl-chain--arrival-skipped::before,
308
- .sbb-pearl-chain--departure-skipped::before {
309
- content: "";
310
- position: absolute;
311
- inset-block-start: 50%;
312
- inset-inline-start: 50%;
313
- transform: translate(-50%, -50%) rotate(45deg);
314
- border-block-start: var(--sbb-pearl-chain-bullet-crossed-border-width) solid canvas;
315
- background: var(--sbb-pearl-chain-bullet-color-disruption);
316
- height: var(--sbb-pearl-chain-bullet-crossed-height);
317
- width: var(--sbb-pearl-chain-bullet-crossed-width);
318
- }
319
- @media (forced-colors: active) {
320
- .sbb-pearl-chain--arrival-skipped::before,
321
- .sbb-pearl-chain--departure-skipped::before {
322
- background: Highlight;
323
- }
324
- }
325
-
326
- .sbb-pearl-chain__leg::after {
327
- content: "";
328
- position: absolute;
329
- inset-block: 0;
330
- inset-inline-start: 0;
331
- background-color: currentcolor;
332
- border-radius: var(--sbb-pearl-chain-height);
333
- z-index: 1;
334
- }
335
- @media (forced-colors: active) {
336
- .sbb-pearl-chain__leg::after {
337
- background-color: CanvasText;
338
- }
339
- .sbb-pearl-chain--past .sbb-pearl-chain__leg::after {
340
- background-color: GrayText;
341
- }
342
- }
343
-
344
- .sbb-pearl-chain__leg:last-of-type::after {
345
- inset-inline-end: calc(-1 * var(--sbb-pearl-chain-height));
346
- }
347
-
348
- .sbb-pearl-chain__leg--progress::after {
349
- background-color: var(--sbb-pearl-chain-color-past);
350
- width: var(--sbb-pearl-chain-leg-status);
351
- }
352
-
353
- .sbb-pearl-chain__position {
354
- min-height: var(--sbb-pearl-chain-bullet-size-start-end);
355
- min-width: var(--sbb-pearl-chain-bullet-size-start-end);
356
- height: var(--sbb-pearl-chain-bullet-size-start-end);
357
- width: var(--sbb-pearl-chain-bullet-size-start-end);
358
- background: var(--sbb-pearl-chain-bullet-color);
359
- color: var(--sbb-pearl-chain-bullet-color);
360
- border-color: var(--sbb-pearl-chain-bullet-color);
361
- border-radius: 100%;
362
- }
363
- @media (forced-colors: active) {
364
- .sbb-pearl-chain__position {
365
- --sbb-pearl-chain-bullet-color: CanvasText;
366
- }
367
- }
368
- .sbb-pearl-chain__position {
369
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-bullet-color-disruption);
370
- }
371
- @media (forced-colors: active) {
372
- .sbb-pearl-chain__position {
373
- --sbb-pearl-chain-bullet-color: Highlight;
374
- }
375
- }
376
- @keyframes pearl-chain-bullet-position-pulse {
377
- 0% {
378
- box-shadow: 0 0 0 0 var(--sbb-pearl-chain-bullet-color-disruption);
379
- }
380
- 25% {
381
- box-shadow: 0 0 0 0 var(--sbb-pearl-chain-bullet-color-disruption);
382
- }
383
- 50% {
384
- box-shadow: 0 0 0 0.1875rem var(--sbb-color-red-alpha-20);
385
- }
386
- 100% {
387
- box-shadow: 0 0 0 0 var(--sbb-pearl-chain-bullet-color-disruption);
388
- }
389
- }
390
- .sbb-pearl-chain__position {
391
- animation: pearl-chain-bullet-position-pulse var(--sbb-pearl-chain-bullet-animation-duration) var(--sbb-pearl-chain-bullet-animation-easing) infinite;
392
- }
393
- .sbb-pearl-chain__position {
394
- position: absolute;
395
- inset-block-start: -200%;
396
- z-index: 4;
397
- inset-inline-start: var(--sbb-pearl-chain-status-position);
398
- }
399
-
400
- .sbb-pearl-chain__position--no-animation {
401
- animation: unset;
402
- }
403
-
404
- .sbb-screen-reader-only {
405
- border: 0;
406
- clip: rect(0 0 0 0);
407
- height: 1px;
408
- margin: -1px;
409
- overflow: hidden;
410
- padding: 0;
411
- position: absolute;
412
- white-space: nowrap;
413
- width: 1px;
414
- }`;
415
- let SbbPearlChainElement = (() => {
416
- var _legs_accessor_storage, _disableAnimation_accessor_storage, _a;
417
- let _classDecorators = [customElement("sbb-pearl-chain")];
418
- let _classDescriptor;
419
- let _classExtraInitializers = [];
420
- let _classThis;
421
- let _classSuper = LitElement;
422
- let _instanceExtraInitializers = [];
423
- let _legs_decorators;
424
- let _legs_initializers = [];
425
- let _legs_extraInitializers = [];
426
- let _disableAnimation_decorators;
427
- let _disableAnimation_initializers = [];
428
- let _disableAnimation_extraInitializers = [];
429
- let _set_now_decorators;
430
- _a = class extends _classSuper {
431
- constructor() {
432
- super(...arguments);
433
- __privateAdd(this, _legs_accessor_storage);
434
- __privateAdd(this, _disableAnimation_accessor_storage);
435
- __privateSet(this, _legs_accessor_storage, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _legs_initializers, [])));
436
- __privateSet(this, _disableAnimation_accessor_storage, (__runInitializers(this, _legs_extraInitializers), __runInitializers(this, _disableAnimation_initializers, false)));
437
- this._now = (__runInitializers(this, _disableAnimation_extraInitializers), null);
438
- }
439
- /**
440
- * Define the legs of the pearl-chain.
441
- * Format:
442
- * `{"legs": [{"duration": 25}, ...]}`
443
- * `duration` in minutes. Duration of the leg is relative
444
- * to the total travel time. Example: departure 16:30, change at 16:40,
445
- * arrival at 17:00. So the change should have a duration of 33.33%.
446
- */
447
- get legs() {
448
- return __privateGet(this, _legs_accessor_storage);
449
- }
450
- set legs(value) {
451
- __privateSet(this, _legs_accessor_storage, value);
452
- }
453
- /**
454
- * Per default, the current location has a pulsating animation. You can
455
- * disable the animation with this property.
456
- */
457
- get disableAnimation() {
458
- return __privateGet(this, _disableAnimation_accessor_storage);
459
- }
460
- set disableAnimation(value) {
461
- __privateSet(this, _disableAnimation_accessor_storage, value);
462
- }
463
- /** A configured date which acts as the current date instead of the real current date. Recommended for testing purposes. */
464
- set now(value) {
465
- this._now = defaultDateAdapter.getValidDateOrNull(defaultDateAdapter.deserialize(value));
466
- }
467
- get now() {
468
- return this._now;
469
- }
470
- _getAllDuration(legs) {
471
- return legs == null ? void 0 : legs.reduce((sum, leg) => {
472
- var _a2, _b;
473
- const arrivalNoTz = removeTimezoneFromISOTimeString((_a2 = leg.arrival) == null ? void 0 : _a2.time);
474
- const departureNoTz = removeTimezoneFromISOTimeString((_b = leg.departure) == null ? void 0 : _b.time);
475
- if (arrivalNoTz && departureNoTz) {
476
- return sum + differenceInMinutes(removeTimezoneFromISOTimeString(leg.arrival.time), removeTimezoneFromISOTimeString(leg.departure.time));
477
- }
478
- return sum;
479
- }, 0);
480
- }
481
- _isAllCancelled(legs) {
482
- return legs == null ? void 0 : legs.every((leg) => {
483
- var _a2, _b;
484
- return (_b = (_a2 = leg == null ? void 0 : leg.serviceJourney) == null ? void 0 : _a2.serviceAlteration) == null ? void 0 : _b.cancelled;
485
- });
486
- }
487
- _getRelativeDuration(legs, leg) {
488
- var _a2, _b;
489
- const arrivalNoTz = removeTimezoneFromISOTimeString((_a2 = leg.arrival) == null ? void 0 : _a2.time);
490
- const departureNoTz = removeTimezoneFromISOTimeString((_b = leg.departure) == null ? void 0 : _b.time);
491
- if (arrivalNoTz && departureNoTz) {
492
- const duration = differenceInMinutes(removeTimezoneFromISOTimeString(leg.arrival.time), removeTimezoneFromISOTimeString(leg.departure.time));
493
- const allDurations = this._getAllDuration(legs);
494
- if (allDurations === 0) {
495
- return 100;
496
- }
497
- return duration / allDurations * 100;
498
- }
499
- return 0;
500
- }
501
- _getProgress(now, start, end) {
502
- if (!(start == null ? void 0 : start.time) || !(end == null ? void 0 : end.time)) {
503
- return 0;
504
- }
505
- const startWithDelay = addMinutes(start.time, start.delay ?? 0);
506
- const endWithDelay = addMinutes(end.time, end.delay ?? 0);
507
- const total = differenceInMinutes(endWithDelay, startWithDelay);
508
- const progress = differenceInMinutes(now, startWithDelay);
509
- return total && progress / total * 100;
510
- }
511
- _getStatus(now, start, end) {
512
- const startWithDelay = start && start.time && addMinutes(start.time, start.delay ?? 0);
513
- const endWithDelay = end && end.time && addMinutes(end.time, end.delay ?? 0);
514
- if (startWithDelay && isBefore(startWithDelay, now) && endWithDelay && isAfter(endWithDelay, now)) {
515
- return "progress";
516
- } else if (endWithDelay && isBefore(endWithDelay, now)) {
517
- return "past";
518
- }
519
- return "future";
520
- }
521
- _renderPosition(now, start, end) {
522
- const currentPosition = this._getProgress(now, start, end);
523
- if (currentPosition < 0 && currentPosition > 100)
524
- return void 0;
525
- const statusStyle = () => {
526
- return {
527
- "--sbb-pearl-chain-status-position": `${currentPosition}%`,
528
- ...currentPosition >= 50 ? { transform: `translateX(-100%)` } : {}
529
- };
530
- };
531
- const animation = this.disableAnimation ? "sbb-pearl-chain__position--no-animation" : "";
532
- return html`<span
533
- style=${styleMap(statusStyle())}
534
- class="sbb-pearl-chain__position ${animation}"
535
- ></span>`;
536
- }
537
- render() {
538
- var _a2, _b, _c, _d, _e;
539
- const now = this.now ?? /* @__PURE__ */ new Date();
540
- const rideLegs = (_a2 = this.legs) == null ? void 0 : _a2.filter((leg) => isRideLeg(leg));
541
- const departureTime = (rideLegs == null ? void 0 : rideLegs.length) && removeTimezoneFromISOTimeString((_c = (_b = rideLegs[0]) == null ? void 0 : _b.departure) == null ? void 0 : _c.time);
542
- const departureWithDelay = departureTime && {
543
- time: departureTime,
544
- delay: rideLegs[0].departure.delay ?? 0
545
- };
546
- const arrivalTime = (rideLegs == null ? void 0 : rideLegs.length) && removeTimezoneFromISOTimeString((_d = rideLegs[rideLegs.length - 1].arrival) == null ? void 0 : _d.time);
547
- const arrivalTimeDelay = arrivalTime && {
548
- time: arrivalTime,
549
- delay: ((_e = rideLegs[rideLegs.length - 1]) == null ? void 0 : _e.arrival.delay) ?? 0
550
- };
551
- const departureNotServiced = (() => {
552
- var _a3, _b2, _c2, _d2;
553
- return rideLegs && ((_b2 = (_a3 = rideLegs[0]) == null ? void 0 : _a3.serviceJourney) == null ? void 0 : _b2.stopPoints) && ((_d2 = (_c2 = rideLegs[0]) == null ? void 0 : _c2.serviceJourney) == null ? void 0 : _d2.stopPoints[0].stopStatus) === "NOT_SERVICED" ? "sbb-pearl-chain--departure-skipped" : "";
554
- })();
555
- const arrivalNotServiced = (() => {
556
- var _a3;
557
- const lastLeg = rideLegs && rideLegs[rideLegs.length - 1];
558
- const stops = lastLeg && ((_a3 = lastLeg.serviceJourney) == null ? void 0 : _a3.stopPoints);
559
- return stops && stops[stops.length - 1].stopStatus === "NOT_SERVICED" ? "sbb-pearl-chain--arrival-skipped" : "";
560
- })();
561
- const departureCancelClass = (() => {
562
- var _a3, _b2, _c2;
563
- return rideLegs && ((_c2 = (_b2 = (_a3 = rideLegs[0]) == null ? void 0 : _a3.serviceJourney) == null ? void 0 : _b2.serviceAlteration) == null ? void 0 : _c2.cancelled) ? "sbb-pearl-chain--departure-disruption" : "";
564
- })();
565
- const arrivalCancelClass = (() => {
566
- var _a3, _b2, _c2;
567
- return rideLegs && ((_c2 = (_b2 = (_a3 = rideLegs[rideLegs.length - 1]) == null ? void 0 : _a3.serviceJourney) == null ? void 0 : _b2.serviceAlteration) == null ? void 0 : _c2.cancelled) ? "sbb-pearl-chain--arrival-disruption" : "";
568
- })();
569
- const status = departureWithDelay && arrivalTimeDelay && this._getStatus(now, departureWithDelay, arrivalTimeDelay);
570
- const statusClassDeparture = rideLegs && status && !departureCancelClass ? "sbb-pearl-chain__bullet--" + status : "";
571
- const statusClassArrival = rideLegs && status && !arrivalCancelClass ? "sbb-pearl-chain__bullet--" + this._getStatus(now, void 0, arrivalTimeDelay) : "";
572
- if (this._isAllCancelled(rideLegs)) {
573
- return html`
574
- <div class="sbb-pearl-chain">
575
- <span class="sbb-pearl-chain__bullet sbb-pearl-chain--departure-disruption"></span>
576
- <div class="sbb-pearl-chain__leg sbb-pearl-chain__leg--disruption"></div>
577
- <span class="sbb-pearl-chain__bullet sbb-pearl-chain--departure-disruption"></span>
578
- </div>
579
- `;
580
- }
581
- return html`
582
- <div class="sbb-pearl-chain">
583
- <span
584
- class="sbb-pearl-chain__bullet ${statusClassDeparture} ${departureNotServiced} ${departureCancelClass}"
585
- ></span>
586
- ${rideLegs == null ? void 0 : rideLegs.map((leg, index) => {
587
- var _a3, _b2, _c2, _d2, _e2, _f, _g, _h;
588
- const { stopPoints, serviceAlteration } = (leg == null ? void 0 : leg.serviceJourney) || {};
589
- const duration = this._getRelativeDuration(rideLegs, leg);
590
- const departure = removeTimezoneFromISOTimeString((_a3 = leg.departure) == null ? void 0 : _a3.time);
591
- const arrival = removeTimezoneFromISOTimeString((_b2 = leg.arrival) == null ? void 0 : _b2.time);
592
- const isArrivalNotServiced = stopPoints && ((_c2 = stopPoints[stopPoints.length - 1]) == null ? void 0 : _c2.stopStatus) === "NOT_SERVICED";
593
- const isArrivalPlanned = stopPoints && ((_d2 = stopPoints[stopPoints.length - 1]) == null ? void 0 : _d2.stopStatus) === "PLANNED";
594
- const isDepartureNotServiced = stopPoints && ((_e2 = stopPoints[0]) == null ? void 0 : _e2.stopStatus) === "NOT_SERVICED";
595
- const stopPointsBefore = index > 0 && rideLegs[index - 1].serviceJourney.stopPoints;
596
- const isBeforeLegArrivalNotServiced = stopPointsBefore && ((_f = stopPointsBefore[stopPointsBefore.length - 1]) == null ? void 0 : _f.stopStatus) === "NOT_SERVICED";
597
- const skippedLeg = isArrivalNotServiced || isDepartureNotServiced && isArrivalPlanned ? "sbb-pearl-chain__leg--skipped" : "";
598
- const departureSkippedBullet = isDepartureNotServiced || isBeforeLegArrivalNotServiced ? "sbb-pearl-chain__stop--departure-skipped" : "";
599
- const cancelled = (serviceAlteration == null ? void 0 : serviceAlteration.cancelled) ? "sbb-pearl-chain__leg--disruption" : "";
600
- const legDepartureWithDelay = { time: departure, delay: ((_g = leg.departure) == null ? void 0 : _g.delay) ?? 0 };
601
- const legArrivalWithDelay = { time: arrival, delay: ((_h = leg.arrival) == null ? void 0 : _h.delay) ?? 0 };
602
- const status2 = this._getStatus(now, legDepartureWithDelay, legArrivalWithDelay);
603
- const legStatus = !cancelled && !skippedLeg && "sbb-pearl-chain__leg--" + status2;
604
- const legStyle = () => {
605
- return {
606
- "--sbb-pearl-chain-leg-width": `${duration}%`,
607
- ...status2 === "progress" && !cancelled && !skippedLeg ? {
608
- "--sbb-pearl-chain-leg-status": `${this._getProgress(now, legDepartureWithDelay, legArrivalWithDelay)}%`
609
- } : {}
610
- };
611
- };
612
- return html` <div
613
- class="sbb-pearl-chain__leg ${legStatus || ""} ${cancelled} ${skippedLeg}"
614
- style=${styleMap(legStyle())}
615
- >
616
- ${index > 0 && index < rideLegs.length ? html`<span class="sbb-pearl-chain__stop ${departureSkippedBullet}"></span>` : nothing}
617
- ${status2 === "progress" && !cancelled && !skippedLeg ? this._renderPosition(now, legDepartureWithDelay, legArrivalWithDelay) : nothing}
618
- </div>`;
619
- })}
620
- <span
621
- class="sbb-pearl-chain__bullet ${statusClassArrival} ${arrivalNotServiced} ${arrivalCancelClass}"
622
- ></span>
623
- </div>
624
- `;
625
- }
626
- }, _legs_accessor_storage = new WeakMap(), _disableAnimation_accessor_storage = new WeakMap(), _classThis = _a, (() => {
627
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
628
- _legs_decorators = [property({ type: Array })];
629
- _disableAnimation_decorators = [forceType(), property({ attribute: "disable-animation", type: Boolean })];
630
- _set_now_decorators = [property()];
631
- __esDecorate(_a, null, _legs_decorators, { kind: "accessor", name: "legs", static: false, private: false, access: { has: (obj) => "legs" in obj, get: (obj) => obj.legs, set: (obj, value) => {
632
- obj.legs = value;
633
- } }, metadata: _metadata }, _legs_initializers, _legs_extraInitializers);
634
- __esDecorate(_a, null, _disableAnimation_decorators, { kind: "accessor", name: "disableAnimation", static: false, private: false, access: { has: (obj) => "disableAnimation" in obj, get: (obj) => obj.disableAnimation, set: (obj, value) => {
635
- obj.disableAnimation = value;
636
- } }, metadata: _metadata }, _disableAnimation_initializers, _disableAnimation_extraInitializers);
637
- __esDecorate(_a, null, _set_now_decorators, { kind: "setter", name: "now", static: false, private: false, access: { has: (obj) => "now" in obj, set: (obj, value) => {
638
- obj.now = value;
639
- } }, metadata: _metadata }, null, _instanceExtraInitializers);
640
- __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
641
- _classThis = _classDescriptor.value;
642
- if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
643
- })(), _a.styles = style, __runInitializers(_classThis, _classExtraInitializers), _a;
644
- return _classThis;
645
- })();
1
+ import { SbbPearlChainElement } from "./pearl-chain/pearl-chain.js";
646
2
  export {
647
3
  SbbPearlChainElement
648
4
  };
649
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVhcmwtY2hhaW4uanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0FmdGVyLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQmVmb3JlLmpzIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzLWV4cGVyaW1lbnRhbC9wZWFybC1jaGFpbi9wZWFybC1jaGFpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0b0RhdGUgfSBmcm9tIFwiLi90b0RhdGUuanNcIjtcblxuLyoqXG4gKiBAbmFtZSBpc0FmdGVyXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBmaXJzdCBkYXRlIGFmdGVyIHRoZSBzZWNvbmQgb25lP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGZpcnN0IGRhdGUgYWZ0ZXIgdGhlIHNlY29uZCBvbmU/XG4gKlxuICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0aGF0IHNob3VsZCBiZSBhZnRlciB0aGUgb3RoZXIgb25lIHRvIHJldHVybiB0cnVlXG4gKiBAcGFyYW0gZGF0ZVRvQ29tcGFyZSAtIFRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aFxuICpcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBkYXRlIGlzIGFmdGVyIHRoZSBzZWNvbmQgZGF0ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJcyAxMCBKdWx5IDE5ODkgYWZ0ZXIgMTEgRmVicnVhcnkgMTk4Nz9cbiAqIGNvbnN0IHJlc3VsdCA9IGlzQWZ0ZXIobmV3IERhdGUoMTk4OSwgNiwgMTApLCBuZXcgRGF0ZSgxOTg3LCAxLCAxMSkpXG4gKiAvLz0+IHRydWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQWZ0ZXIoZGF0ZSwgZGF0ZVRvQ29tcGFyZSkge1xuICByZXR1cm4gK3RvRGF0ZShkYXRlKSA+ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7XG59XG5cbi8vIEZhbGxiYWNrIGZvciBtb2R1bGFyaXplZCBpbXBvcnRzOlxuZXhwb3J0IGRlZmF1bHQgaXNBZnRlcjtcbiIsImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzQmVmb3JlXG4gKiBAY2F0ZWdvcnkgQ29tbW9uIEhlbHBlcnNcbiAqIEBzdW1tYXJ5IElzIHRoZSBmaXJzdCBkYXRlIGJlZm9yZSB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIElzIHRoZSBmaXJzdCBkYXRlIGJlZm9yZSB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRoYXQgc2hvdWxkIGJlIGJlZm9yZSB0aGUgb3RoZXIgb25lIHRvIHJldHVybiB0cnVlXG4gKiBAcGFyYW0gZGF0ZVRvQ29tcGFyZSAtIFRoZSBkYXRlIHRvIGNvbXBhcmUgd2l0aFxuICpcbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBkYXRlIGlzIGJlZm9yZSB0aGUgc2Vjb25kIGRhdGVcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSXMgMTAgSnVseSAxOTg5IGJlZm9yZSAxMSBGZWJydWFyeSAxOTg3P1xuICogY29uc3QgcmVzdWx0ID0gaXNCZWZvcmUobmV3IERhdGUoMTk4OSwgNiwgMTApLCBuZXcgRGF0ZSgxOTg3LCAxLCAxMSkpXG4gKiAvLz0+IGZhbHNlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0JlZm9yZShkYXRlLCBkYXRlVG9Db21wYXJlKSB7XG4gIHJldHVybiArdG9EYXRlKGRhdGUpIDwgK3RvRGF0ZShkYXRlVG9Db21wYXJlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0JlZm9yZTtcbiIsImltcG9ydCB7IGRlZmF1bHREYXRlQWRhcHRlciB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB0eXBlIHsgU2JiRGF0ZUxpa2UgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2ludGVyZmFjZXMvdHlwZXMnO1xuaW1wb3J0IHsgYWRkTWludXRlcywgZGlmZmVyZW5jZUluTWludXRlcywgaXNBZnRlciwgaXNCZWZvcmUgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50LCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgc3R5bGVNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9zdHlsZS1tYXAuanMnO1xuXG5pbXBvcnQgeyByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nIH0gZnJvbSAnLi4vY29yZS9kYXRldGltZS5qcyc7XG5pbXBvcnQgdHlwZSB7IExlZywgUHRSaWRlTGVnIH0gZnJvbSAnLi4vY29yZS90aW1ldGFibGUuanMnO1xuaW1wb3J0IHsgaXNSaWRlTGVnIH0gZnJvbSAnLi4vY29yZS90aW1ldGFibGUuanMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9wZWFybC1jaGFpbi5zY3NzP2xpdCZpbmxpbmUnO1xuXG50eXBlIFN0YXR1cyA9ICdwcm9ncmVzcycgfCAnZnV0dXJlJyB8ICdwYXN0JztcbnR5cGUgVGltZSA9IHtcbiAgdGltZT86IERhdGU7XG4gIGRlbGF5OiBudW1iZXI7XG59O1xuXG4vKipcbiAqIEl0IHZpc3VhbGx5IGRpc3BsYXlzIGpvdXJuZXkgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1wZWFybC1jaGFpbicpXG5jbGFzcyBTYmJQZWFybENoYWluRWxlbWVudCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcblxuICAvKipcbiAgICogRGVmaW5lIHRoZSBsZWdzIG9mIHRoZSBwZWFybC1jaGFpbi5cbiAgICogRm9ybWF0OlxuICAgKiBge1wibGVnc1wiOiBbe1wiZHVyYXRpb25cIjogMjV9LCAuLi5dfWBcbiAgICogYGR1cmF0aW9uYCBpbiBtaW51dGVzLiBEdXJhdGlvbiBvZiB0aGUgbGVnIGlzIHJlbGF0aXZlXG4gICAqIHRvIHRoZSB0b3RhbCB0cmF2ZWwgdGltZS4gRXhhbXBsZTogZGVwYXJ0dXJlIDE2OjMwLCBjaGFuZ2UgYXQgMTY6NDAsXG4gICAqIGFycml2YWwgYXQgMTc6MDAuIFNvIHRoZSBjaGFuZ2Ugc2hvdWxkIGhhdmUgYSBkdXJhdGlvbiBvZiAzMy4zMyUuXG4gICAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBBcnJheSB9KSBwdWJsaWMgYWNjZXNzb3IgbGVnczogKExlZyB8IFB0UmlkZUxlZylbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBQZXIgZGVmYXVsdCwgdGhlIGN1cnJlbnQgbG9jYXRpb24gaGFzIGEgcHVsc2F0aW5nIGFuaW1hdGlvbi4gWW91IGNhblxuICAgKiBkaXNhYmxlIHRoZSBhbmltYXRpb24gd2l0aCB0aGlzIHByb3BlcnR5LlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Rpc2FibGUtYW5pbWF0aW9uJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZGlzYWJsZUFuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBBIGNvbmZpZ3VyZWQgZGF0ZSB3aGljaCBhY3RzIGFzIHRoZSBjdXJyZW50IGRhdGUgaW5zdGVhZCBvZiB0aGUgcmVhbCBjdXJyZW50IGRhdGUuIFJlY29tbWVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IG5vdyh2YWx1ZTogU2JiRGF0ZUxpa2UgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLl9ub3cgPSBkZWZhdWx0RGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKGRlZmF1bHREYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbm93O1xuICB9XG4gIHByaXZhdGUgX25vdzogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2dldEFsbER1cmF0aW9uKGxlZ3M6IFB0UmlkZUxlZ1tdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbGVncz8ucmVkdWNlKChzdW06IG51bWJlciwgbGVnKSA9PiB7XG4gICAgICBjb25zdCBhcnJpdmFsTm9UeiA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmFycml2YWw/LnRpbWUpO1xuICAgICAgY29uc3QgZGVwYXJ0dXJlTm9UeiA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmRlcGFydHVyZT8udGltZSk7XG4gICAgICBpZiAoYXJyaXZhbE5vVHogJiYgZGVwYXJ0dXJlTm9Ueikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHN1bSArXG4gICAgICAgICAgZGlmZmVyZW5jZUluTWludXRlcyhcbiAgICAgICAgICAgIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmFycml2YWwudGltZSkhLFxuICAgICAgICAgICAgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlLnRpbWUpISxcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNBbGxDYW5jZWxsZWQobGVnczogUHRSaWRlTGVnW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gbGVncz8uZXZlcnkoKGxlZykgPT4gbGVnPy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LmNhbmNlbGxlZCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZWxhdGl2ZUR1cmF0aW9uKGxlZ3M6IFB0UmlkZUxlZ1tdLCBsZWc6IFB0UmlkZUxlZyk6IG51bWJlciB7XG4gICAgY29uc3QgYXJyaXZhbE5vVHogPSByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5hcnJpdmFsPy50aW1lKTtcbiAgICBjb25zdCBkZXBhcnR1cmVOb1R6ID0gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlPy50aW1lKTtcbiAgICBpZiAoYXJyaXZhbE5vVHogJiYgZGVwYXJ0dXJlTm9Ueikge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBkaWZmZXJlbmNlSW5NaW51dGVzKFxuICAgICAgICByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5hcnJpdmFsLnRpbWUpISxcbiAgICAgICAgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlLnRpbWUpISxcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxEdXJhdGlvbnMgPSB0aGlzLl9nZXRBbGxEdXJhdGlvbihsZWdzKTtcblxuICAgICAgaWYgKGFsbER1cmF0aW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMTAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKGR1cmF0aW9uIC8gYWxsRHVyYXRpb25zKSAqIDEwMDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRQcm9ncmVzcyhub3c6IERhdGUsIHN0YXJ0PzogVGltZSwgZW5kPzogVGltZSk6IG51bWJlciB7XG4gICAgaWYgKCFzdGFydD8udGltZSB8fCAhZW5kPy50aW1lKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFdpdGhEZWxheSA9IGFkZE1pbnV0ZXMoc3RhcnQudGltZSwgc3RhcnQuZGVsYXkgPz8gMCk7XG4gICAgY29uc3QgZW5kV2l0aERlbGF5ID0gYWRkTWludXRlcyhlbmQudGltZSwgZW5kLmRlbGF5ID8/IDApO1xuICAgIGNvbnN0IHRvdGFsID0gZGlmZmVyZW5jZUluTWludXRlcyhlbmRXaXRoRGVsYXksIHN0YXJ0V2l0aERlbGF5KTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMobm93LCBzdGFydFdpdGhEZWxheSk7XG5cbiAgICByZXR1cm4gdG90YWwgJiYgKHByb2dyZXNzIC8gdG90YWwpICogMTAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U3RhdHVzKG5vdzogRGF0ZSwgc3RhcnQ/OiBUaW1lLCBlbmQ/OiBUaW1lKTogU3RhdHVzIHtcbiAgICBjb25zdCBzdGFydFdpdGhEZWxheSA9IHN0YXJ0ICYmIHN0YXJ0LnRpbWUgJiYgYWRkTWludXRlcyhzdGFydC50aW1lLCBzdGFydC5kZWxheSA/PyAwKTtcbiAgICBjb25zdCBlbmRXaXRoRGVsYXkgPSBlbmQgJiYgZW5kLnRpbWUgJiYgYWRkTWludXRlcyhlbmQudGltZSwgZW5kLmRlbGF5ID8/IDApO1xuXG4gICAgaWYgKFxuICAgICAgc3RhcnRXaXRoRGVsYXkgJiZcbiAgICAgIGlzQmVmb3JlKHN0YXJ0V2l0aERlbGF5LCBub3cpICYmXG4gICAgICBlbmRXaXRoRGVsYXkgJiZcbiAgICAgIGlzQWZ0ZXIoZW5kV2l0aERlbGF5LCBub3cpXG4gICAgKSB7XG4gICAgICByZXR1cm4gJ3Byb2dyZXNzJztcbiAgICB9IGVsc2UgaWYgKGVuZFdpdGhEZWxheSAmJiBpc0JlZm9yZShlbmRXaXRoRGVsYXksIG5vdykpIHtcbiAgICAgIHJldHVybiAncGFzdCc7XG4gICAgfVxuICAgIHJldHVybiAnZnV0dXJlJztcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlclBvc2l0aW9uKG5vdzogRGF0ZSwgc3RhcnQ/OiBUaW1lLCBlbmQ/OiBUaW1lKTogVGVtcGxhdGVSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IHRoaXMuX2dldFByb2dyZXNzKG5vdywgc3RhcnQsIGVuZCk7XG4gICAgaWYgKGN1cnJlbnRQb3NpdGlvbiA8IDAgJiYgY3VycmVudFBvc2l0aW9uID4gMTAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgc3RhdHVzU3R5bGUgPSAoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zYmItcGVhcmwtY2hhaW4tc3RhdHVzLXBvc2l0aW9uJzogYCR7Y3VycmVudFBvc2l0aW9ufSVgLFxuICAgICAgICAuLi4oY3VycmVudFBvc2l0aW9uID49IDUwID8geyB0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKC0xMDAlKWAgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFuaW1hdGlvbiA9IHRoaXMuZGlzYWJsZUFuaW1hdGlvbiA/ICdzYmItcGVhcmwtY2hhaW5fX3Bvc2l0aW9uLS1uby1hbmltYXRpb24nIDogJyc7XG5cbiAgICByZXR1cm4gaHRtbGA8c3BhblxuICAgICAgc3R5bGU9JHtzdHlsZU1hcChzdGF0dXNTdHlsZSgpKX1cbiAgICAgIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19wb3NpdGlvbiAke2FuaW1hdGlvbn1cIlxuICAgID48L3NwYW4+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IG5vdyA9IHRoaXMubm93ID8/IG5ldyBEYXRlKCk7XG5cbiAgICBjb25zdCByaWRlTGVnczogUHRSaWRlTGVnW10gPSB0aGlzLmxlZ3M/LmZpbHRlcigobGVnKSA9PiBpc1JpZGVMZWcobGVnKSkgYXMgUHRSaWRlTGVnW107XG5cbiAgICBjb25zdCBkZXBhcnR1cmVUaW1lID1cbiAgICAgIHJpZGVMZWdzPy5sZW5ndGggJiYgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhyaWRlTGVnc1swXT8uZGVwYXJ0dXJlPy50aW1lKTtcbiAgICBjb25zdCBkZXBhcnR1cmVXaXRoRGVsYXkgPSBkZXBhcnR1cmVUaW1lICYmIHtcbiAgICAgIHRpbWU6IGRlcGFydHVyZVRpbWUsXG4gICAgICBkZWxheTogcmlkZUxlZ3NbMF0uZGVwYXJ0dXJlLmRlbGF5ID8/IDAsXG4gICAgfTtcblxuICAgIGNvbnN0IGFycml2YWxUaW1lID1cbiAgICAgIHJpZGVMZWdzPy5sZW5ndGggJiZcbiAgICAgIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcocmlkZUxlZ3NbcmlkZUxlZ3MubGVuZ3RoIC0gMV0uYXJyaXZhbD8udGltZSk7XG4gICAgY29uc3QgYXJyaXZhbFRpbWVEZWxheSA9IGFycml2YWxUaW1lICYmIHtcbiAgICAgIHRpbWU6IGFycml2YWxUaW1lLFxuICAgICAgZGVsYXk6IHJpZGVMZWdzW3JpZGVMZWdzLmxlbmd0aCAtIDFdPy5hcnJpdmFsLmRlbGF5ID8/IDAsXG4gICAgfTtcblxuICAgIGNvbnN0IGRlcGFydHVyZU5vdFNlcnZpY2VkID0gKCgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIHJpZGVMZWdzICYmXG4gICAgICAgIHJpZGVMZWdzWzBdPy5zZXJ2aWNlSm91cm5leT8uc3RvcFBvaW50cyAmJlxuICAgICAgICByaWRlTGVnc1swXT8uc2VydmljZUpvdXJuZXk/LnN0b3BQb2ludHNbMF0uc3RvcFN0YXR1cyA9PT0gJ05PVF9TRVJWSUNFRCdcbiAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluLS1kZXBhcnR1cmUtc2tpcHBlZCdcbiAgICAgICAgOiAnJztcbiAgICB9KSgpO1xuXG4gICAgY29uc3QgYXJyaXZhbE5vdFNlcnZpY2VkID0gKCgpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgbGFzdExlZyA9IHJpZGVMZWdzICYmIHJpZGVMZWdzW3JpZGVMZWdzLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3Qgc3RvcHMgPSBsYXN0TGVnICYmIGxhc3RMZWcuc2VydmljZUpvdXJuZXk/LnN0b3BQb2ludHM7XG5cbiAgICAgIHJldHVybiBzdG9wcyAmJiBzdG9wc1tzdG9wcy5sZW5ndGggLSAxXS5zdG9wU3RhdHVzID09PSAnTk9UX1NFUlZJQ0VEJ1xuICAgICAgICA/ICdzYmItcGVhcmwtY2hhaW4tLWFycml2YWwtc2tpcHBlZCdcbiAgICAgICAgOiAnJztcbiAgICB9KSgpO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlQ2FuY2VsQ2xhc3MgPSAoKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gcmlkZUxlZ3MgJiYgcmlkZUxlZ3NbMF0/LnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8uY2FuY2VsbGVkXG4gICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbi0tZGVwYXJ0dXJlLWRpc3J1cHRpb24nXG4gICAgICAgIDogJyc7XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IGFycml2YWxDYW5jZWxDbGFzcyA9ICgoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiByaWRlTGVncyAmJiByaWRlTGVnc1tyaWRlTGVncy5sZW5ndGggLSAxXT8uc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy5jYW5jZWxsZWRcbiAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluLS1hcnJpdmFsLWRpc3J1cHRpb24nXG4gICAgICAgIDogJyc7XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IHN0YXR1cyA9XG4gICAgICBkZXBhcnR1cmVXaXRoRGVsYXkgJiZcbiAgICAgIGFycml2YWxUaW1lRGVsYXkgJiZcbiAgICAgIHRoaXMuX2dldFN0YXR1cyhub3csIGRlcGFydHVyZVdpdGhEZWxheSwgYXJyaXZhbFRpbWVEZWxheSk7XG5cbiAgICBjb25zdCBzdGF0dXNDbGFzc0RlcGFydHVyZSA9XG4gICAgICByaWRlTGVncyAmJiBzdGF0dXMgJiYgIWRlcGFydHVyZUNhbmNlbENsYXNzID8gJ3NiYi1wZWFybC1jaGFpbl9fYnVsbGV0LS0nICsgc3RhdHVzIDogJyc7XG5cbiAgICBjb25zdCBzdGF0dXNDbGFzc0Fycml2YWwgPVxuICAgICAgcmlkZUxlZ3MgJiYgc3RhdHVzICYmICFhcnJpdmFsQ2FuY2VsQ2xhc3NcbiAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluX19idWxsZXQtLScgKyB0aGlzLl9nZXRTdGF0dXMobm93LCB1bmRlZmluZWQsIGFycml2YWxUaW1lRGVsYXkpXG4gICAgICAgIDogJyc7XG5cbiAgICBpZiAodGhpcy5faXNBbGxDYW5jZWxsZWQocmlkZUxlZ3MpKSB7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1wZWFybC1jaGFpblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19idWxsZXQgc2JiLXBlYXJsLWNoYWluLS1kZXBhcnR1cmUtZGlzcnVwdGlvblwiPjwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19sZWcgc2JiLXBlYXJsLWNoYWluX19sZWctLWRpc3J1cHRpb25cIj48L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fYnVsbGV0IHNiYi1wZWFybC1jaGFpbi0tZGVwYXJ0dXJlLWRpc3J1cHRpb25cIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5cIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fYnVsbGV0ICR7c3RhdHVzQ2xhc3NEZXBhcnR1cmV9ICR7ZGVwYXJ0dXJlTm90U2VydmljZWR9ICR7ZGVwYXJ0dXJlQ2FuY2VsQ2xhc3N9XCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgJHtyaWRlTGVncz8ubWFwKChsZWc6IFB0UmlkZUxlZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgc3RvcFBvaW50cywgc2VydmljZUFsdGVyYXRpb24gfSA9IGxlZz8uc2VydmljZUpvdXJuZXkgfHwge307XG5cbiAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuX2dldFJlbGF0aXZlRHVyYXRpb24ocmlkZUxlZ3MsIGxlZyk7XG4gICAgICAgICAgY29uc3QgZGVwYXJ0dXJlID0gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlPy50aW1lKTtcbiAgICAgICAgICBjb25zdCBhcnJpdmFsID0gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuYXJyaXZhbD8udGltZSk7XG5cbiAgICAgICAgICBjb25zdCBpc0Fycml2YWxOb3RTZXJ2aWNlZCA9XG4gICAgICAgICAgICBzdG9wUG9pbnRzICYmIHN0b3BQb2ludHNbc3RvcFBvaW50cy5sZW5ndGggLSAxXT8uc3RvcFN0YXR1cyA9PT0gJ05PVF9TRVJWSUNFRCc7XG4gICAgICAgICAgY29uc3QgaXNBcnJpdmFsUGxhbm5lZCA9XG4gICAgICAgICAgICBzdG9wUG9pbnRzICYmIHN0b3BQb2ludHNbc3RvcFBvaW50cy5sZW5ndGggLSAxXT8uc3RvcFN0YXR1cyA9PT0gJ1BMQU5ORUQnO1xuICAgICAgICAgIGNvbnN0IGlzRGVwYXJ0dXJlTm90U2VydmljZWQgPSBzdG9wUG9pbnRzICYmIHN0b3BQb2ludHNbMF0/LnN0b3BTdGF0dXMgPT09ICdOT1RfU0VSVklDRUQnO1xuXG4gICAgICAgICAgY29uc3Qgc3RvcFBvaW50c0JlZm9yZSA9IGluZGV4ID4gMCAmJiByaWRlTGVnc1tpbmRleCAtIDFdLnNlcnZpY2VKb3VybmV5LnN0b3BQb2ludHM7XG4gICAgICAgICAgY29uc3QgaXNCZWZvcmVMZWdBcnJpdmFsTm90U2VydmljZWQgPVxuICAgICAgICAgICAgc3RvcFBvaW50c0JlZm9yZSAmJlxuICAgICAgICAgICAgc3RvcFBvaW50c0JlZm9yZVtzdG9wUG9pbnRzQmVmb3JlLmxlbmd0aCAtIDFdPy5zdG9wU3RhdHVzID09PSAnTk9UX1NFUlZJQ0VEJztcblxuICAgICAgICAgIGNvbnN0IHNraXBwZWRMZWcgPVxuICAgICAgICAgICAgaXNBcnJpdmFsTm90U2VydmljZWQgfHwgKGlzRGVwYXJ0dXJlTm90U2VydmljZWQgJiYgaXNBcnJpdmFsUGxhbm5lZClcbiAgICAgICAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluX19sZWctLXNraXBwZWQnXG4gICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgY29uc3QgZGVwYXJ0dXJlU2tpcHBlZEJ1bGxldCA9XG4gICAgICAgICAgICBpc0RlcGFydHVyZU5vdFNlcnZpY2VkIHx8IGlzQmVmb3JlTGVnQXJyaXZhbE5vdFNlcnZpY2VkXG4gICAgICAgICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbl9fc3RvcC0tZGVwYXJ0dXJlLXNraXBwZWQnXG4gICAgICAgICAgICAgIDogJyc7XG5cbiAgICAgICAgICBjb25zdCBjYW5jZWxsZWQgPSBzZXJ2aWNlQWx0ZXJhdGlvbj8uY2FuY2VsbGVkID8gJ3NiYi1wZWFybC1jaGFpbl9fbGVnLS1kaXNydXB0aW9uJyA6ICcnO1xuXG4gICAgICAgICAgY29uc3QgbGVnRGVwYXJ0dXJlV2l0aERlbGF5ID0geyB0aW1lOiBkZXBhcnR1cmUsIGRlbGF5OiBsZWcuZGVwYXJ0dXJlPy5kZWxheSA/PyAwIH07XG4gICAgICAgICAgY29uc3QgbGVnQXJyaXZhbFdpdGhEZWxheSA9IHsgdGltZTogYXJyaXZhbCwgZGVsYXk6IGxlZy5hcnJpdmFsPy5kZWxheSA/PyAwIH07XG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fZ2V0U3RhdHVzKG5vdywgbGVnRGVwYXJ0dXJlV2l0aERlbGF5LCBsZWdBcnJpdmFsV2l0aERlbGF5KTtcblxuICAgICAgICAgIGNvbnN0IGxlZ1N0YXR1cyA9ICFjYW5jZWxsZWQgJiYgIXNraXBwZWRMZWcgJiYgJ3NiYi1wZWFybC1jaGFpbl9fbGVnLS0nICsgc3RhdHVzO1xuICAgICAgICAgIGNvbnN0IGxlZ1N0eWxlID0gKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgJy0tc2JiLXBlYXJsLWNoYWluLWxlZy13aWR0aCc6IGAke2R1cmF0aW9ufSVgLFxuICAgICAgICAgICAgICAuLi4oc3RhdHVzID09PSAncHJvZ3Jlc3MnICYmICFjYW5jZWxsZWQgJiYgIXNraXBwZWRMZWdcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgJy0tc2JiLXBlYXJsLWNoYWluLWxlZy1zdGF0dXMnOiBgJHt0aGlzLl9nZXRQcm9ncmVzcyhub3csIGxlZ0RlcGFydHVyZVdpdGhEZWxheSwgbGVnQXJyaXZhbFdpdGhEZWxheSl9JWAsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gaHRtbGAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX2xlZyAke2xlZ1N0YXR1cyB8fCAnJ30gJHtjYW5jZWxsZWR9ICR7c2tpcHBlZExlZ31cIlxuICAgICAgICAgICAgc3R5bGU9JHtzdHlsZU1hcChsZWdTdHlsZSgpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICAke2luZGV4ID4gMCAmJiBpbmRleCA8IHJpZGVMZWdzLmxlbmd0aFxuICAgICAgICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX3N0b3AgJHtkZXBhcnR1cmVTa2lwcGVkQnVsbGV0fVwiPjwvc3Bhbj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7c3RhdHVzID09PSAncHJvZ3Jlc3MnICYmICFjYW5jZWxsZWQgJiYgIXNraXBwZWRMZWdcbiAgICAgICAgICAgICAgPyB0aGlzLl9yZW5kZXJQb3NpdGlvbihub3csIGxlZ0RlcGFydHVyZVdpdGhEZWxheSwgbGVnQXJyaXZhbFdpdGhEZWxheSlcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0pfVxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19idWxsZXQgJHtzdGF0dXNDbGFzc0Fycml2YWx9ICR7YXJyaXZhbE5vdFNlcnZpY2VkfSAke2Fycml2YWxDYW5jZWxDbGFzc31cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXBlYXJsLWNoYWluJzogU2JiUGVhcmxDaGFpbkVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYSIsIl9iIiwiX2QiLCJfYyIsIl9lIiwic3RhdHVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztBQW9CTyxTQUFTLFFBQVEsTUFBTSxlQUFlO0FBQzNDLFNBQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sYUFBYTtBQUM5QztBQ0ZPLFNBQVMsU0FBUyxNQUFNLGVBQWU7QUFDNUMsU0FBTyxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxhQUFhO0FBQzlDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
5
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVhcmwtY2hhaW4uanMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOyJ9