@sbb-esta/lyne-elements-experimental-dev 4.7.0-dev.1773648109 → 4.7.0-dev.1773670972

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 (191) hide show
  1. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +65 -76
  2. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +72 -52
  3. package/autocomplete-grid/autocomplete-grid-button.js +3 -6
  4. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +2 -17
  5. package/autocomplete-grid/autocomplete-grid-cell.js +4 -7
  6. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +20 -21
  7. package/autocomplete-grid/autocomplete-grid-optgroup.js +3 -6
  8. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +2 -33
  9. package/autocomplete-grid/autocomplete-grid-option.js +4 -9
  10. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +2 -22
  11. package/autocomplete-grid/autocomplete-grid-row.js +4 -7
  12. package/autocomplete-grid/autocomplete-grid.js +3 -6
  13. package/autocomplete-grid-cell.component-Dak9wlBr.js +24 -0
  14. package/autocomplete-grid-option.component-DNRFHOwc.js +37 -0
  15. package/autocomplete-grid-row.component-DBHZQ0GQ.js +27 -0
  16. package/autocomplete-grid.js +9 -21
  17. package/autocomplete-grid.pure.js +7 -15
  18. package/core/datetime/date-helper.js +2 -191
  19. package/core/datetime.js +2 -5
  20. package/core/timetable/access-leg-helper.js +76 -71
  21. package/core/timetable/timetable-helper.js +9 -11
  22. package/core/timetable/timetable-properties.js +0 -1
  23. package/core/timetable.js +3 -7
  24. package/date-helper-CGproP5d.js +185 -0
  25. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +114 -122
  26. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +92 -70
  27. package/development/autocomplete-grid/autocomplete-grid-button.js +6 -4
  28. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +2 -29
  29. package/development/autocomplete-grid/autocomplete-grid-cell.js +7 -5
  30. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +27 -22
  31. package/development/autocomplete-grid/autocomplete-grid-optgroup.js +6 -4
  32. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +2 -109
  33. package/development/autocomplete-grid/autocomplete-grid-option.js +7 -7
  34. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +2 -91
  35. package/development/autocomplete-grid/autocomplete-grid-row.js +7 -5
  36. package/development/autocomplete-grid/autocomplete-grid.js +6 -4
  37. package/development/autocomplete-grid-cell.component-BBvM4o2H.js +42 -0
  38. package/development/autocomplete-grid-option.component-QzfM5eIE.js +123 -0
  39. package/development/autocomplete-grid-row.component-H8sCTCkT.js +104 -0
  40. package/development/autocomplete-grid.js +10 -14
  41. package/development/autocomplete-grid.pure.js +4 -13
  42. package/development/core/datetime/date-helper.js +2 -285
  43. package/development/core/datetime.js +2 -6
  44. package/development/core/timetable/access-leg-helper.js +104 -82
  45. package/development/core/timetable/timetable-helper.js +16 -17
  46. package/development/core/timetable/timetable-properties.js +0 -2
  47. package/development/core/timetable.js +3 -8
  48. package/development/date-helper-8_Y-PuHh.js +520 -0
  49. package/development/differenceInMinutes-DN_1Rk3O.js +110 -0
  50. package/development/format-Bbrn2bgo.js +1848 -0
  51. package/development/isValid-C-HzKv4v.js +178 -0
  52. package/development/journey-summary/journey-summary.component.js +2 -288
  53. package/development/journey-summary.component-uGhZvA4p.js +385 -0
  54. package/development/journey-summary.js +8 -5
  55. package/development/journey-summary.pure.js +2 -5
  56. package/development/mapper-hWWm7Uke.js +11454 -0
  57. package/development/pearl-chain/pearl-chain.component.js +2 -634
  58. package/development/pearl-chain-time/pearl-chain-time.component.js +2 -306
  59. package/development/pearl-chain-time.component-B8mayTWD.js +415 -0
  60. package/development/pearl-chain-time.js +8 -5
  61. package/development/pearl-chain-time.pure.js +2 -5
  62. package/development/pearl-chain-vertical/pearl-chain-vertical.component.js +2 -28
  63. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +2 -393
  64. package/development/pearl-chain-vertical-item.component-BDzbcIaf.js +435 -0
  65. package/development/pearl-chain-vertical-item.js +8 -5
  66. package/development/pearl-chain-vertical-item.pure.js +2 -5
  67. package/development/pearl-chain-vertical.component-CswE7b3M.js +39 -0
  68. package/development/pearl-chain-vertical.js +8 -5
  69. package/development/pearl-chain-vertical.pure.js +2 -5
  70. package/development/pearl-chain.component-wpsTvoSe.js +704 -0
  71. package/development/pearl-chain.js +8 -5
  72. package/development/pearl-chain.pure.js +2 -5
  73. package/development/seat-reservation/common/mapper/icon-mapper.js +168 -71
  74. package/development/seat-reservation/common/mapper/mapper.js +2 -11429
  75. package/development/seat-reservation/common/mapper.js +2 -9
  76. package/development/seat-reservation/common/svgs.js +2 -46
  77. package/development/seat-reservation/common/translations/i18n.js +1118 -900
  78. package/development/seat-reservation/common/translations.js +1 -4
  79. package/development/seat-reservation/common/types.js +0 -2
  80. package/development/seat-reservation/common.js +8 -12
  81. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +1307 -1231
  82. package/development/seat-reservation/seat-reservation/seat-reservation.component.js +2 -862
  83. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +2 -106
  84. package/development/seat-reservation/seat-reservation-area.js +7 -5
  85. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +35 -34
  86. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +2 -162
  87. package/development/seat-reservation/seat-reservation-graphic.js +7 -5
  88. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +2 -713
  89. package/development/seat-reservation/seat-reservation-navigation-coach.js +7 -5
  90. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +2 -131
  91. package/development/seat-reservation/seat-reservation-navigation-services.js +7 -5
  92. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +2 -601
  93. package/development/seat-reservation/seat-reservation-place-control.js +7 -5
  94. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +2 -22
  95. package/development/seat-reservation/seat-reservation-scoped.js +7 -5
  96. package/development/seat-reservation/seat-reservation.js +7 -6
  97. package/development/seat-reservation-area.component-ORuli_DC.js +138 -0
  98. package/development/seat-reservation-graphic.component-lZXqHWIz.js +193 -0
  99. package/development/seat-reservation-navigation-coach.component-D2QXTMJJ.js +828 -0
  100. package/development/seat-reservation-navigation-services.component-Bg1adRlU.js +179 -0
  101. package/development/seat-reservation-place-control.component-CwUX-QYO.js +726 -0
  102. package/development/seat-reservation-scoped.component-uLT33P9y.js +31 -0
  103. package/development/seat-reservation.component-MOv5kHDC.js +821 -0
  104. package/development/seat-reservation.js +16 -29
  105. package/development/seat-reservation.pure.js +11 -29
  106. package/development/svgs-kDpBCto5.js +28 -0
  107. package/development/timetable-duration/timetable-duration.component.js +2 -108
  108. package/development/timetable-duration.component-D21SXsQq.js +125 -0
  109. package/development/timetable-duration.js +8 -5
  110. package/development/timetable-duration.pure.js +2 -5
  111. package/development/timetable-row/timetable-row.component.js +2 -781
  112. package/development/timetable-row.component-Y5w8vEwP.js +932 -0
  113. package/development/timetable-row.js +8 -13
  114. package/development/timetable-row.pure.js +2 -12
  115. package/development/toDate-Biiv3kyf.js +150 -0
  116. package/differenceInMinutes-Dr9gRqtu.js +27 -0
  117. package/format-CM5exOsN.js +1103 -0
  118. package/isValid-B9oVW3lA.js +36 -0
  119. package/journey-summary/journey-summary.component.js +2 -194
  120. package/journey-summary.component-Cq_4kaOp.js +264 -0
  121. package/journey-summary.js +5 -4
  122. package/journey-summary.pure.js +2 -4
  123. package/mapper-DkiDDseD.js +11382 -0
  124. package/package.json +2 -2
  125. package/pearl-chain/pearl-chain.component.js +2 -165
  126. package/pearl-chain-time/pearl-chain-time.component.js +2 -157
  127. package/pearl-chain-time.component-DGDW5S1c.js +239 -0
  128. package/pearl-chain-time.js +5 -4
  129. package/pearl-chain-time.pure.js +2 -4
  130. package/pearl-chain-vertical/pearl-chain-vertical.component.js +2 -17
  131. package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +2 -77
  132. package/pearl-chain-vertical-item.component-G22bWhLU.js +108 -0
  133. package/pearl-chain-vertical-item.js +5 -4
  134. package/pearl-chain-vertical-item.pure.js +2 -4
  135. package/pearl-chain-vertical.component-CXIDT5RD.js +21 -0
  136. package/pearl-chain-vertical.js +5 -4
  137. package/pearl-chain-vertical.pure.js +2 -4
  138. package/pearl-chain.component-DmjkVIva.js +194 -0
  139. package/pearl-chain.js +5 -4
  140. package/pearl-chain.pure.js +2 -4
  141. package/seat-reservation/common/mapper/icon-mapper.js +71 -71
  142. package/seat-reservation/common/mapper/mapper.js +2 -11386
  143. package/seat-reservation/common/mapper.js +3 -9
  144. package/seat-reservation/common/svgs.js +2 -242
  145. package/seat-reservation/common/translations/i18n.js +1084 -891
  146. package/seat-reservation/common/translations.js +2 -4
  147. package/seat-reservation/common/types.js +0 -1
  148. package/seat-reservation/common.js +9 -15
  149. package/seat-reservation/seat-reservation/seat-reservation-base-element.js +834 -812
  150. package/seat-reservation/seat-reservation/seat-reservation.component.js +2 -420
  151. package/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +2 -51
  152. package/seat-reservation/seat-reservation-area.js +4 -7
  153. package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +68 -71
  154. package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +2 -75
  155. package/seat-reservation/seat-reservation-graphic.js +4 -7
  156. package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +2 -234
  157. package/seat-reservation/seat-reservation-navigation-coach.js +4 -7
  158. package/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +2 -85
  159. package/seat-reservation/seat-reservation-navigation-services.js +4 -7
  160. package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +2 -203
  161. package/seat-reservation/seat-reservation-place-control.js +4 -7
  162. package/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +2 -13
  163. package/seat-reservation/seat-reservation-scoped.js +4 -7
  164. package/seat-reservation/seat-reservation.js +5 -9
  165. package/seat-reservation-area.component-COD6CXhP.js +75 -0
  166. package/seat-reservation-graphic.component-BNfU5tQM.js +102 -0
  167. package/seat-reservation-navigation-coach.component-Bh9ILq60.js +333 -0
  168. package/seat-reservation-navigation-services.component-QL0UnilZ.js +127 -0
  169. package/seat-reservation-place-control.component-BfnZUyHv.js +322 -0
  170. package/seat-reservation-scoped.component-CY04BT_4.js +17 -0
  171. package/seat-reservation.component-zrQHTRl3.js +364 -0
  172. package/seat-reservation.js +17 -39
  173. package/seat-reservation.pure.js +15 -32
  174. package/svgs-D5DhLHxC.js +26 -0
  175. package/timetable-duration/timetable-duration.component.js +2 -57
  176. package/timetable-duration.component-DaYoJUGS.js +65 -0
  177. package/timetable-duration.js +5 -4
  178. package/timetable-duration.pure.js +2 -4
  179. package/timetable-row/timetable-row.component.js +2 -427
  180. package/timetable-row.component-BDMAEsbR.js +559 -0
  181. package/timetable-row.js +6 -13
  182. package/timetable-row.pure.js +2 -11
  183. package/toDate-p-Tpkb7t.js +16 -0
  184. package/development/differenceInMinutes-B0dawX-5.js +0 -26
  185. package/development/format-BMkeaqaF.js +0 -1433
  186. package/development/isValid-BYRch7pV.js +0 -53
  187. package/development/toDate-BWb6Z1JD.js +0 -24
  188. package/differenceInMinutes-COvvdYsJ.js +0 -23
  189. package/format-CmKROkbc.js +0 -1186
  190. package/isValid-m3_OsPaB.js +0 -45
  191. package/toDate-Bw2KTWeq.js +0 -15
@@ -1,634 +1,2 @@
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 { SbbElement } from "@sbb-esta/lyne-elements/core/base-elements.js";
10
- import { defaultDateAdapter } from "@sbb-esta/lyne-elements/core/datetime.js";
11
- import { forceType } from "@sbb-esta/lyne-elements/core/decorators.js";
12
- import { boxSizingStyles } from "@sbb-esta/lyne-elements/core/styles.js";
13
- import { css, html, nothing } from "lit";
14
- import { property } from "lit/decorators.js";
15
- import { styleMap } from "lit/directives/style-map.js";
16
- import { removeTimezoneFromISOTimeString } from "../core/datetime.js";
17
- import { isRideLeg } from "../core/timetable.js";
18
- import { d as differenceInMinutes, a as addMinutes } from "../differenceInMinutes-B0dawX-5.js";
19
- import { t as toDate } from "../toDate-BWb6Z1JD.js";
20
- function isAfter(date, dateToCompare) {
21
- return +toDate(date) > +toDate(dateToCompare);
22
- }
23
- function isBefore(date, dateToCompare) {
24
- return +toDate(date) < +toDate(dateToCompare);
25
- }
26
- const style = css`:host {
27
- --sbb-pearl-chain-height: var(--sbb-border-width-2x);
28
- --sbb-pearl-chain-spacing-small: 0.125rem;
29
- --sbb-pearl-chain-color: var(--sbb-pearl-chain-bullet-color);
30
- --sbb-pearl-chain-color-disruption: var(--sbb-pearl-chain-bullet-color-disruption);
31
- --sbb-pearl-chain-color-past: var(--sbb-pearl-chain-bullet-color-past);
32
- --sbb-pearl-chain-leg-width: 100%;
33
- display: block;
34
- --sbb-pearl-chain-position-color: var(--sbb-color-primary);
35
- --sbb-pearl-chain-bullet-size-start-end: 0.625rem;
36
- --sbb-pearl-chain-bullet-size-stop: 0.5rem;
37
- --sbb-pearl-chain-bullet-color: var(--sbb-background-color-3-inverted);
38
- --sbb-pearl-chain-bullet-color-past: var(--sbb-color-metal);
39
- --sbb-pearl-chain-bullet-color-past: light-dark(var(--sbb-color-metal), var(--sbb-color-granite));
40
- --sbb-pearl-chain-bullet-color-irrelevant: var(--sbb-color-metal);
41
- --sbb-pearl-chain-bullet-color-irrelevant: light-dark(
42
- var(--sbb-color-metal),
43
- var(--sbb-color-granite)
44
- );
45
- --sbb-pearl-chain-bullet-color-disruption: var(--sbb-color-error);
46
- --sbb-pearl-chain-bullet-border-width: var(--sbb-border-width-2x);
47
- --sbb-pearl-chain-bullet-animation-duration: 1920ms;
48
- --sbb-pearl-chain-bullet-animation-easing: ease-out;
49
- --sbb-pearl-chain-bullet-crossed-width: 0.88375rem;
50
- --sbb-pearl-chain-bullet-crossed-height: 0.21875rem;
51
- --sbb-pearl-chain-bullet-crossed-border-width: 0.09375rem;
52
- }
53
-
54
- .sbb-pearl-chain {
55
- position: relative;
56
- display: flex;
57
- justify-content: space-between;
58
- flex-wrap: nowrap;
59
- color: var(--sbb-pearl-chain-color);
60
- width: 100%;
61
- padding-block: calc((var(--sbb-pearl-chain-bullet-size-start-end) - var(--sbb-pearl-chain-height)) / 2);
62
- padding-inline-end: var(--sbb-pearl-chain-bullet-size-start-end);
63
- }
64
-
65
- .sbb-pearl-chain__bullet {
66
- min-height: var(--sbb-pearl-chain-bullet-size-start-end);
67
- min-width: var(--sbb-pearl-chain-bullet-size-start-end);
68
- height: var(--sbb-pearl-chain-bullet-size-start-end);
69
- width: var(--sbb-pearl-chain-bullet-size-start-end);
70
- background: var(--sbb-pearl-chain-bullet-color);
71
- color: var(--sbb-pearl-chain-bullet-color);
72
- border-color: var(--sbb-pearl-chain-bullet-color);
73
- border-radius: 100%;
74
- }
75
- @media (forced-colors: active) {
76
- .sbb-pearl-chain__bullet {
77
- --sbb-pearl-chain-bullet-color: CanvasText;
78
- }
79
- }
80
- .sbb-pearl-chain__bullet {
81
- content: "";
82
- position: absolute;
83
- background-color: currentcolor;
84
- inset-block-start: 0;
85
- z-index: 3;
86
- }
87
-
88
- .sbb-pearl-chain__bullet:first-of-type {
89
- inset-inline-start: 0;
90
- }
91
-
92
- .sbb-pearl-chain__bullet:last-of-type {
93
- inset-inline-end: 0;
94
- }
95
-
96
- .sbb-pearl-chain__leg {
97
- flex-shrink: 0;
98
- flex-grow: 0;
99
- position: relative;
100
- height: var(--sbb-pearl-chain-height);
101
- border-inline-end: var(--sbb-pearl-chain-spacing-small) solid Canvas;
102
- background-color: currentcolor;
103
- width: var(--sbb-pearl-chain-leg-width);
104
- display: flex;
105
- align-items: center;
106
- }
107
- @media (forced-colors: active) {
108
- .sbb-pearl-chain__leg {
109
- background-color: CanvasText;
110
- }
111
- .sbb-pearl-chain--past .sbb-pearl-chain__leg {
112
- background-color: GrayText;
113
- }
114
- }
115
-
116
- .sbb-pearl-chain__leg:last-of-type {
117
- border: none;
118
- }
119
-
120
- .sbb-pearl-chain__stop {
121
- position: relative;
122
- z-index: 2;
123
- background: var(--sbb-pearl-chain-bullet-color);
124
- color: var(--sbb-pearl-chain-bullet-color);
125
- border-color: var(--sbb-pearl-chain-bullet-color);
126
- border-radius: 100%;
127
- }
128
- @media (forced-colors: active) {
129
- .sbb-pearl-chain__stop {
130
- --sbb-pearl-chain-bullet-color: CanvasText;
131
- }
132
- }
133
- .sbb-pearl-chain__stop {
134
- min-height: var(--sbb-pearl-chain-bullet-size-stop);
135
- min-width: var(--sbb-pearl-chain-bullet-size-stop);
136
- height: var(--sbb-pearl-chain-bullet-size-stop);
137
- width: var(--sbb-pearl-chain-bullet-size-stop);
138
- border: var(--sbb-pearl-chain-bullet-border-width) solid currentcolor;
139
- background: Canvas;
140
- }
141
-
142
- .sbb-pearl-chain__bullet--future {
143
- background: var(--sbb-pearl-chain-bullet-color);
144
- color: var(--sbb-pearl-chain-bullet-color);
145
- border-color: var(--sbb-pearl-chain-bullet-color);
146
- border-radius: 100%;
147
- }
148
- @media (forced-colors: active) {
149
- .sbb-pearl-chain__bullet--future {
150
- --sbb-pearl-chain-bullet-color: CanvasText;
151
- }
152
- }
153
-
154
- .sbb-pearl-chain__leg--past,
155
- .sbb-pearl-chain--past,
156
- .sbb-pearl-chain__leg--past::after,
157
- .sbb-pearl-chain__leg--progress::after,
158
- .sbb-pearl-chain__leg--progress .sbb-pearl-chain__stop,
159
- .sbb-pearl-chain--progress,
160
- .sbb-pearl-chain__bullet--past {
161
- color: var(--sbb-pearl-chain-color-past);
162
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-bullet-color-past);
163
- }
164
- @media (forced-colors: active) {
165
- .sbb-pearl-chain__leg--past,
166
- .sbb-pearl-chain--past,
167
- .sbb-pearl-chain__leg--past::after,
168
- .sbb-pearl-chain__leg--progress::after,
169
- .sbb-pearl-chain__leg--progress .sbb-pearl-chain__stop,
170
- .sbb-pearl-chain--progress,
171
- .sbb-pearl-chain__bullet--past {
172
- --sbb-pearl-chain-bullet-color: GrayText !important;
173
- }
174
- }
175
- @media (forced-colors: active) {
176
- .sbb-pearl-chain__leg--past,
177
- .sbb-pearl-chain--past,
178
- .sbb-pearl-chain__leg--past::after,
179
- .sbb-pearl-chain__leg--progress::after,
180
- .sbb-pearl-chain__leg--progress .sbb-pearl-chain__stop,
181
- .sbb-pearl-chain--progress,
182
- .sbb-pearl-chain__bullet--past {
183
- background-color: GrayText !important;
184
- }
185
- }
186
-
187
- .sbb-pearl-chain__bullet--progress {
188
- background: var(--sbb-pearl-chain-bullet-color);
189
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-bullet-color-past);
190
- }
191
- @media (forced-colors: active) {
192
- .sbb-pearl-chain__bullet--progress {
193
- --sbb-pearl-chain-bullet-color: GrayText !important;
194
- }
195
- }
196
-
197
- .sbb-pearl-chain__bullet--departure-disruption,
198
- .sbb-pearl-chain--arrival-disruption,
199
- .sbb-pearl-chain--departure-disruption,
200
- .sbb-pearl-chain__leg--disruption {
201
- color: var(--sbb-pearl-chain-color-disruption);
202
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-bullet-color-disruption);
203
- }
204
- @media (forced-colors: active) {
205
- .sbb-pearl-chain__bullet--departure-disruption,
206
- .sbb-pearl-chain--arrival-disruption,
207
- .sbb-pearl-chain--departure-disruption,
208
- .sbb-pearl-chain__leg--disruption {
209
- --sbb-pearl-chain-bullet-color: Highlight;
210
- }
211
- }
212
- @media (forced-colors: active) {
213
- .sbb-pearl-chain__bullet--departure-disruption,
214
- .sbb-pearl-chain--arrival-disruption,
215
- .sbb-pearl-chain--departure-disruption,
216
- .sbb-pearl-chain__leg--disruption {
217
- color: Highlight;
218
- background: Highlight;
219
- }
220
- }
221
-
222
- .sbb-pearl-chain__leg--disruption .sbb-pearl-chain__stop {
223
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-bullet-color-disruption);
224
- }
225
- @media (forced-colors: active) {
226
- .sbb-pearl-chain__leg--disruption .sbb-pearl-chain__stop {
227
- --sbb-pearl-chain-bullet-color: Highlight;
228
- }
229
- }
230
-
231
- .sbb-pearl-chain__leg--past .sbb-pearl-chain__stop {
232
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-bullet-color-past);
233
- }
234
- @media (forced-colors: active) {
235
- .sbb-pearl-chain__leg--past .sbb-pearl-chain__stop {
236
- --sbb-pearl-chain-bullet-color: GrayText !important;
237
- }
238
- }
239
-
240
- .sbb-pearl-chain__leg--disruption::after {
241
- background-color: unset;
242
- background-image: linear-gradient(to right, currentcolor 0%, currentcolor 50%, Canvas 50%);
243
- background-repeat: repeat-x;
244
- background-size: calc(2 * var(--sbb-pearl-chain-spacing-small)) var(--sbb-pearl-chain-height);
245
- inset-inline-end: var(--sbb-pearl-chain-height);
246
- }
247
- @media (forced-colors: active) {
248
- .sbb-pearl-chain__leg--disruption::after {
249
- background: unset;
250
- border-block-start: 0.0625rem dashed Highlight;
251
- transform: translateY(0.0625rem);
252
- }
253
- }
254
-
255
- .sbb-pearl-chain__leg--skipped {
256
- color: var(--sbb-pearl-chain-color-disruption);
257
- }
258
- .sbb-pearl-chain__leg--skipped::after {
259
- background-color: unset;
260
- background-image: linear-gradient(to right, currentcolor 0%, currentcolor 50%, Canvas 50%);
261
- background-repeat: repeat-x;
262
- background-size: calc(2 * var(--sbb-pearl-chain-spacing-small)) var(--sbb-pearl-chain-height);
263
- inset-inline-end: var(--sbb-pearl-chain-height);
264
- }
265
- @media (forced-colors: active) {
266
- .sbb-pearl-chain__leg--skipped::after {
267
- background: unset;
268
- border-block-start: 0.0625rem dashed Highlight;
269
- transform: translateY(0.0625rem);
270
- }
271
- }
272
-
273
- .sbb-pearl-chain__stop--departure-skipped {
274
- min-height: var(--sbb-pearl-chain-bullet-size-stop);
275
- min-width: var(--sbb-pearl-chain-bullet-size-stop);
276
- height: var(--sbb-pearl-chain-bullet-size-stop);
277
- width: var(--sbb-pearl-chain-bullet-size-stop);
278
- border: var(--sbb-pearl-chain-bullet-border-width) solid currentcolor;
279
- background: Canvas;
280
- border: var(--sbb-pearl-chain-bullet-border-width) solid currentcolor;
281
- background: Canvas;
282
- }
283
- .sbb-pearl-chain__stop--departure-skipped::before {
284
- content: "";
285
- position: absolute;
286
- inset-block-start: 50%;
287
- inset-inline-start: 50%;
288
- transform: translate(-50%, -50%) rotate(45deg);
289
- border-block-start: var(--sbb-pearl-chain-bullet-crossed-border-width) solid canvas;
290
- background: var(--sbb-pearl-chain-bullet-color-disruption);
291
- height: var(--sbb-pearl-chain-bullet-crossed-height);
292
- width: var(--sbb-pearl-chain-bullet-crossed-width);
293
- }
294
- @media (forced-colors: active) {
295
- .sbb-pearl-chain__stop--departure-skipped::before {
296
- background: Highlight;
297
- }
298
- }
299
-
300
- .sbb-pearl-chain--arrival-skipped,
301
- .sbb-pearl-chain--departure-skipped {
302
- min-height: var(--sbb-pearl-chain-bullet-size-start-end);
303
- min-width: var(--sbb-pearl-chain-bullet-size-start-end);
304
- height: var(--sbb-pearl-chain-bullet-size-start-end);
305
- width: var(--sbb-pearl-chain-bullet-size-start-end);
306
- border: var(--sbb-pearl-chain-bullet-border-width) solid currentcolor;
307
- background: Canvas;
308
- }
309
- .sbb-pearl-chain--arrival-skipped::before,
310
- .sbb-pearl-chain--departure-skipped::before {
311
- content: "";
312
- position: absolute;
313
- inset-block-start: 50%;
314
- inset-inline-start: 50%;
315
- transform: translate(-50%, -50%) rotate(45deg);
316
- border-block-start: var(--sbb-pearl-chain-bullet-crossed-border-width) solid canvas;
317
- background: var(--sbb-pearl-chain-bullet-color-disruption);
318
- height: var(--sbb-pearl-chain-bullet-crossed-height);
319
- width: var(--sbb-pearl-chain-bullet-crossed-width);
320
- }
321
- @media (forced-colors: active) {
322
- .sbb-pearl-chain--arrival-skipped::before,
323
- .sbb-pearl-chain--departure-skipped::before {
324
- background: Highlight;
325
- }
326
- }
327
-
328
- .sbb-pearl-chain__leg::after {
329
- content: "";
330
- position: absolute;
331
- inset-block: 0;
332
- inset-inline-start: 0;
333
- background-color: currentcolor;
334
- border-radius: var(--sbb-pearl-chain-height);
335
- z-index: 1;
336
- }
337
- @media (forced-colors: active) {
338
- .sbb-pearl-chain__leg::after {
339
- background-color: CanvasText;
340
- }
341
- .sbb-pearl-chain--past .sbb-pearl-chain__leg::after {
342
- background-color: GrayText;
343
- }
344
- }
345
-
346
- .sbb-pearl-chain__leg:last-of-type::after {
347
- inset-inline-end: calc(-1 * var(--sbb-pearl-chain-height));
348
- }
349
-
350
- .sbb-pearl-chain__leg--progress::after {
351
- background-color: var(--sbb-pearl-chain-color-past);
352
- width: var(--sbb-pearl-chain-leg-status);
353
- }
354
-
355
- .sbb-pearl-chain__position {
356
- min-height: var(--sbb-pearl-chain-bullet-size-start-end);
357
- min-width: var(--sbb-pearl-chain-bullet-size-start-end);
358
- height: var(--sbb-pearl-chain-bullet-size-start-end);
359
- width: var(--sbb-pearl-chain-bullet-size-start-end);
360
- background: var(--sbb-pearl-chain-bullet-color);
361
- color: var(--sbb-pearl-chain-bullet-color);
362
- border-color: var(--sbb-pearl-chain-bullet-color);
363
- border-radius: 100%;
364
- }
365
- @media (forced-colors: active) {
366
- .sbb-pearl-chain__position {
367
- --sbb-pearl-chain-bullet-color: CanvasText;
368
- }
369
- }
370
- .sbb-pearl-chain__position {
371
- --sbb-pearl-chain-bullet-color: var(--sbb-pearl-chain-position-color);
372
- }
373
- @media (forced-colors: active) {
374
- .sbb-pearl-chain__position {
375
- --sbb-pearl-chain-position-color: Highlight;
376
- }
377
- }
378
- @keyframes pearl-chain-bullet-position-pulse {
379
- 0% {
380
- box-shadow: 0 0 0 0 var(--sbb-pearl-chain-position-color);
381
- }
382
- 25% {
383
- box-shadow: 0 0 0 0 var(--sbb-pearl-chain-position-color);
384
- }
385
- 50% {
386
- box-shadow: 0 0 0 0.1875rem color-mix(in srgb, var(--sbb-pearl-chain-position-color) 20%, transparent);
387
- }
388
- 100% {
389
- box-shadow: 0 0 0 0 var(--sbb-pearl-chain-position-color);
390
- }
391
- }
392
- .sbb-pearl-chain__position {
393
- animation: pearl-chain-bullet-position-pulse var(--sbb-pearl-chain-bullet-animation-duration) var(--sbb-pearl-chain-bullet-animation-easing) infinite;
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-path: 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 _classSuper = SbbElement;
418
- let _instanceExtraInitializers = [];
419
- let _legs_decorators;
420
- let _legs_initializers = [];
421
- let _legs_extraInitializers = [];
422
- let _disableAnimation_decorators;
423
- let _disableAnimation_initializers = [];
424
- let _disableAnimation_extraInitializers = [];
425
- let _set_now_decorators;
426
- return _a = class extends _classSuper {
427
- constructor() {
428
- super(...arguments);
429
- __privateAdd(this, _legs_accessor_storage);
430
- __privateAdd(this, _disableAnimation_accessor_storage);
431
- __privateSet(this, _legs_accessor_storage, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _legs_initializers, [])));
432
- __privateSet(this, _disableAnimation_accessor_storage, (__runInitializers(this, _legs_extraInitializers), __runInitializers(this, _disableAnimation_initializers, false)));
433
- this._now = (__runInitializers(this, _disableAnimation_extraInitializers), null);
434
- }
435
- /**
436
- * Define the legs of the pearl-chain.
437
- * Format:
438
- * `{"legs": [{"duration": 25}, ...]}`
439
- * `duration` in minutes. Duration of the leg is relative
440
- * to the total travel time. Example: departure 16:30, change at 16:40,
441
- * arrival at 17:00. So the change should have a duration of 33.33%.
442
- */
443
- get legs() {
444
- return __privateGet(this, _legs_accessor_storage);
445
- }
446
- set legs(value) {
447
- __privateSet(this, _legs_accessor_storage, value);
448
- }
449
- /**
450
- * Per default, the current location has a pulsating animation. You can
451
- * disable the animation with this property.
452
- */
453
- get disableAnimation() {
454
- return __privateGet(this, _disableAnimation_accessor_storage);
455
- }
456
- set disableAnimation(value) {
457
- __privateSet(this, _disableAnimation_accessor_storage, value);
458
- }
459
- /**
460
- * A configured date which acts as the current date instead of the real current date.
461
- * Only recommended for testing purposes.
462
- */
463
- set now(value) {
464
- this._now = defaultDateAdapter.getValidDateOrNull(defaultDateAdapter.deserialize(value));
465
- }
466
- get now() {
467
- return this._now;
468
- }
469
- _getAllDuration(legs) {
470
- return legs?.reduce((sum, leg) => {
471
- const arrivalNoTz = removeTimezoneFromISOTimeString(leg.arrival?.time);
472
- const departureNoTz = removeTimezoneFromISOTimeString(leg.departure?.time);
473
- if (arrivalNoTz && departureNoTz) {
474
- return sum + differenceInMinutes(removeTimezoneFromISOTimeString(leg.arrival.time), removeTimezoneFromISOTimeString(leg.departure.time));
475
- }
476
- return sum;
477
- }, 0);
478
- }
479
- _isAllCancelled(legs) {
480
- return legs?.every((leg) => leg?.serviceJourney?.serviceAlteration?.cancelled);
481
- }
482
- _getRelativeDuration(legs, leg) {
483
- const arrivalNoTz = removeTimezoneFromISOTimeString(leg.arrival?.time);
484
- const departureNoTz = removeTimezoneFromISOTimeString(leg.departure?.time);
485
- if (arrivalNoTz && departureNoTz) {
486
- const duration = differenceInMinutes(removeTimezoneFromISOTimeString(leg.arrival.time), removeTimezoneFromISOTimeString(leg.departure.time));
487
- const allDurations = this._getAllDuration(legs);
488
- if (allDurations === 0) {
489
- return 100;
490
- }
491
- return duration / allDurations * 100;
492
- }
493
- return 0;
494
- }
495
- _getProgress(now, start, end) {
496
- if (!start?.time || !end?.time) {
497
- return 0;
498
- }
499
- const startWithDelay = addMinutes(start.time, start.delay ?? 0);
500
- const endWithDelay = addMinutes(end.time, end.delay ?? 0);
501
- const total = differenceInMinutes(endWithDelay, startWithDelay);
502
- const progress = differenceInMinutes(now, startWithDelay);
503
- return total && progress / total * 100;
504
- }
505
- _getStatus(now, start, end) {
506
- const startWithDelay = start && start.time && addMinutes(start.time, start.delay ?? 0);
507
- const endWithDelay = end && end.time && addMinutes(end.time, end.delay ?? 0);
508
- if (startWithDelay && isBefore(startWithDelay, now) && endWithDelay && isAfter(endWithDelay, now)) {
509
- return "progress";
510
- } else if (endWithDelay && isBefore(endWithDelay, now)) {
511
- return "past";
512
- }
513
- return "future";
514
- }
515
- _renderPosition(now, start, end) {
516
- const currentPosition = this._getProgress(now, start, end);
517
- if (currentPosition < 0 && currentPosition > 100)
518
- return void 0;
519
- const statusStyle = () => {
520
- return {
521
- "--sbb-pearl-chain-status-position": `${currentPosition}%`,
522
- ...currentPosition >= 50 ? { transform: `translateX(-100%)` } : {}
523
- };
524
- };
525
- const animation = this.disableAnimation ? "sbb-pearl-chain__position--no-animation" : "";
526
- return html`<span
527
- style=${styleMap(statusStyle())}
528
- class="sbb-pearl-chain__position ${animation}"
529
- ></span>`;
530
- }
531
- render() {
532
- const now = this.now ?? /* @__PURE__ */ new Date();
533
- const rideLegs = this.legs?.filter((leg) => isRideLeg(leg));
534
- const departureTime = rideLegs?.length && removeTimezoneFromISOTimeString(rideLegs[0]?.departure?.time);
535
- const departureWithDelay = departureTime && {
536
- time: departureTime,
537
- delay: rideLegs[0].departure.delay ?? 0
538
- };
539
- const arrivalTime = rideLegs?.length && removeTimezoneFromISOTimeString(rideLegs[rideLegs.length - 1].arrival?.time);
540
- const arrivalTimeDelay = arrivalTime && {
541
- time: arrivalTime,
542
- delay: rideLegs[rideLegs.length - 1]?.arrival.delay ?? 0
543
- };
544
- const departureNotServiced = (() => {
545
- return rideLegs && rideLegs[0]?.serviceJourney?.stopPoints && rideLegs[0]?.serviceJourney?.stopPoints[0].stopStatus === "NOT_SERVICED" ? "sbb-pearl-chain--departure-skipped" : "";
546
- })();
547
- const arrivalNotServiced = (() => {
548
- const lastLeg = rideLegs && rideLegs[rideLegs.length - 1];
549
- const stops = lastLeg && lastLeg.serviceJourney?.stopPoints;
550
- return stops && stops[stops.length - 1].stopStatus === "NOT_SERVICED" ? "sbb-pearl-chain--arrival-skipped" : "";
551
- })();
552
- const departureCancelClass = (() => {
553
- return rideLegs && rideLegs[0]?.serviceJourney?.serviceAlteration?.cancelled ? "sbb-pearl-chain--departure-disruption" : "";
554
- })();
555
- const arrivalCancelClass = (() => {
556
- return rideLegs && rideLegs[rideLegs.length - 1]?.serviceJourney?.serviceAlteration?.cancelled ? "sbb-pearl-chain--arrival-disruption" : "";
557
- })();
558
- const status = departureWithDelay && arrivalTimeDelay && this._getStatus(now, departureWithDelay, arrivalTimeDelay);
559
- const statusClassDeparture = rideLegs && status && !departureCancelClass ? "sbb-pearl-chain__bullet--" + status : "";
560
- const statusClassArrival = rideLegs && status && !arrivalCancelClass ? "sbb-pearl-chain__bullet--" + this._getStatus(now, void 0, arrivalTimeDelay) : "";
561
- if (this._isAllCancelled(rideLegs)) {
562
- return html`
563
- <div class="sbb-pearl-chain">
564
- <span class="sbb-pearl-chain__bullet sbb-pearl-chain--departure-disruption"></span>
565
- <div class="sbb-pearl-chain__leg sbb-pearl-chain__leg--disruption"></div>
566
- <span class="sbb-pearl-chain__bullet sbb-pearl-chain--departure-disruption"></span>
567
- </div>
568
- `;
569
- }
570
- return html`
571
- <div class="sbb-pearl-chain">
572
- <span
573
- class="sbb-pearl-chain__bullet ${statusClassDeparture} ${departureNotServiced} ${departureCancelClass}"
574
- ></span>
575
- ${rideLegs?.map((leg, index) => {
576
- const { stopPoints, serviceAlteration } = leg?.serviceJourney || {};
577
- const duration = this._getRelativeDuration(rideLegs, leg);
578
- const departure = removeTimezoneFromISOTimeString(leg.departure?.time);
579
- const arrival = removeTimezoneFromISOTimeString(leg.arrival?.time);
580
- const isArrivalNotServiced = stopPoints && stopPoints[stopPoints.length - 1]?.stopStatus === "NOT_SERVICED";
581
- const isArrivalPlanned = stopPoints && stopPoints[stopPoints.length - 1]?.stopStatus === "PLANNED";
582
- const isDepartureNotServiced = stopPoints && stopPoints[0]?.stopStatus === "NOT_SERVICED";
583
- const stopPointsBefore = index > 0 && rideLegs[index - 1].serviceJourney.stopPoints;
584
- const isBeforeLegArrivalNotServiced = stopPointsBefore && stopPointsBefore[stopPointsBefore.length - 1]?.stopStatus === "NOT_SERVICED";
585
- const skippedLeg = isArrivalNotServiced || isDepartureNotServiced && isArrivalPlanned ? "sbb-pearl-chain__leg--skipped" : "";
586
- const departureSkippedBullet = isDepartureNotServiced || isBeforeLegArrivalNotServiced ? "sbb-pearl-chain__stop--departure-skipped" : "";
587
- const cancelled = serviceAlteration?.cancelled || serviceAlteration?.partiallyCancelled ? "sbb-pearl-chain__leg--disruption" : "";
588
- const legDepartureWithDelay = { time: departure, delay: leg.departure?.delay ?? 0 };
589
- const legArrivalWithDelay = { time: arrival, delay: leg.arrival?.delay ?? 0 };
590
- const status2 = this._getStatus(now, legDepartureWithDelay, legArrivalWithDelay);
591
- const legStatus = !cancelled && !skippedLeg && "sbb-pearl-chain__leg--" + status2;
592
- const legStyle = () => {
593
- return {
594
- "--sbb-pearl-chain-leg-width": `${duration}%`,
595
- ...status2 === "progress" && !cancelled && !skippedLeg ? {
596
- "--sbb-pearl-chain-leg-status": `${this._getProgress(now, legDepartureWithDelay, legArrivalWithDelay)}%`
597
- } : {}
598
- };
599
- };
600
- return html` <div
601
- class="sbb-pearl-chain__leg ${legStatus || ""} ${cancelled} ${skippedLeg}"
602
- style=${styleMap(legStyle())}
603
- >
604
- ${index > 0 && index < rideLegs.length ? html`<span class="sbb-pearl-chain__stop ${departureSkippedBullet}"></span>` : nothing}
605
- ${status2 === "progress" && !cancelled && !skippedLeg ? this._renderPosition(now, legDepartureWithDelay, legArrivalWithDelay) : nothing}
606
- </div>`;
607
- })}
608
- <span
609
- class="sbb-pearl-chain__bullet ${statusClassArrival} ${arrivalNotServiced} ${arrivalCancelClass}"
610
- ></span>
611
- </div>
612
- `;
613
- }
614
- }, _legs_accessor_storage = new WeakMap(), _disableAnimation_accessor_storage = new WeakMap(), (() => {
615
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
616
- _legs_decorators = [property({ type: Array })];
617
- _disableAnimation_decorators = [forceType(), property({ attribute: "disable-animation", type: Boolean })];
618
- _set_now_decorators = [property()];
619
- __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) => {
620
- obj.legs = value;
621
- } }, metadata: _metadata }, _legs_initializers, _legs_extraInitializers);
622
- __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) => {
623
- obj.disableAnimation = value;
624
- } }, metadata: _metadata }, _disableAnimation_initializers, _disableAnimation_extraInitializers);
625
- __esDecorate(_a, null, _set_now_decorators, { kind: "setter", name: "now", static: false, private: false, access: { has: (obj) => "now" in obj, set: (obj, value) => {
626
- obj.now = value;
627
- } }, metadata: _metadata }, null, _instanceExtraInitializers);
628
- if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
629
- })(), _a.elementName = "sbb-pearl-chain", _a.styles = [boxSizingStyles, style], _a;
630
- })();
631
- export {
632
- SbbPearlChainElement
633
- };
634
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVhcmwtY2hhaW4uY29tcG9uZW50LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNBZnRlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0JlZm9yZS5qcyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvcGVhcmwtY2hhaW4vcGVhcmwtY2hhaW4uY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzQWZ0ZXJcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGZpcnN0IGRhdGUgYWZ0ZXIgdGhlIHNlY29uZCBvbmU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZmlyc3QgZGF0ZSBhZnRlciB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRoYXQgc2hvdWxkIGJlIGFmdGVyIHRoZSBvdGhlciBvbmUgdG8gcmV0dXJuIHRydWVcbiAqIEBwYXJhbSBkYXRlVG9Db21wYXJlIC0gVGhlIGRhdGUgdG8gY29tcGFyZSB3aXRoXG4gKlxuICogQHJldHVybnMgVGhlIGZpcnN0IGRhdGUgaXMgYWZ0ZXIgdGhlIHNlY29uZCBkYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElzIDEwIEp1bHkgMTk4OSBhZnRlciAxMSBGZWJydWFyeSAxOTg3P1xuICogY29uc3QgcmVzdWx0ID0gaXNBZnRlcihuZXcgRGF0ZSgxOTg5LCA2LCAxMCksIG5ldyBEYXRlKDE5ODcsIDEsIDExKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBZnRlcihkYXRlLCBkYXRlVG9Db21wYXJlKSB7XG4gIHJldHVybiArdG9EYXRlKGRhdGUpID4gK3RvRGF0ZShkYXRlVG9Db21wYXJlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0FmdGVyO1xuIiwiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgaXNCZWZvcmVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGZpcnN0IGRhdGUgYmVmb3JlIHRoZSBzZWNvbmQgb25lP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGZpcnN0IGRhdGUgYmVmb3JlIHRoZSBzZWNvbmQgb25lP1xuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdGhhdCBzaG91bGQgYmUgYmVmb3JlIHRoZSBvdGhlciBvbmUgdG8gcmV0dXJuIHRydWVcbiAqIEBwYXJhbSBkYXRlVG9Db21wYXJlIC0gVGhlIGRhdGUgdG8gY29tcGFyZSB3aXRoXG4gKlxuICogQHJldHVybnMgVGhlIGZpcnN0IGRhdGUgaXMgYmVmb3JlIHRoZSBzZWNvbmQgZGF0ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJcyAxMCBKdWx5IDE5ODkgYmVmb3JlIDExIEZlYnJ1YXJ5IDE5ODc/XG4gKiBjb25zdCByZXN1bHQgPSBpc0JlZm9yZShuZXcgRGF0ZSgxOTg5LCA2LCAxMCksIG5ldyBEYXRlKDE5ODcsIDEsIDExKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmVmb3JlKGRhdGUsIGRhdGVUb0NvbXBhcmUpIHtcbiAgcmV0dXJuICt0b0RhdGUoZGF0ZSkgPCArdG9EYXRlKGRhdGVUb0NvbXBhcmUpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzQmVmb3JlO1xuIiwiaW1wb3J0IHsgU2JiRWxlbWVudCB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvYmFzZS1lbGVtZW50cy5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0RGF0ZUFkYXB0ZXIgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2RhdGV0aW1lLmpzJztcbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJ0BzYmItZXN0YS9seW5lLWVsZW1lbnRzL2NvcmUvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL3N0eWxlcy5qcyc7XG5pbXBvcnQgeyBhZGRNaW51dGVzLCBkaWZmZXJlbmNlSW5NaW51dGVzLCBpc0FmdGVyLCBpc0JlZm9yZSB9IGZyb20gJ2RhdGUtZm5zJztcbmltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyBzdHlsZU1hcCB9IGZyb20gJ2xpdC9kaXJlY3RpdmVzL3N0eWxlLW1hcC5qcyc7XG5cbmltcG9ydCB7IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcgfSBmcm9tICcuLi9jb3JlL2RhdGV0aW1lLnRzJztcbmltcG9ydCB0eXBlIHsgTGVnLCBQdFJpZGVMZWcgfSBmcm9tICcuLi9jb3JlL3RpbWV0YWJsZS50cyc7XG5pbXBvcnQgeyBpc1JpZGVMZWcgfSBmcm9tICcuLi9jb3JlL3RpbWV0YWJsZS50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3BlYXJsLWNoYWluLnNjc3M/bGl0JmlubGluZSc7XG5cbnR5cGUgU3RhdHVzID0gJ3Byb2dyZXNzJyB8ICdmdXR1cmUnIHwgJ3Bhc3QnO1xuaW50ZXJmYWNlIFRpbWUge1xuICB0aW1lPzogRGF0ZTtcbiAgZGVsYXk6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBJdCB2aXN1YWxseSBkaXNwbGF5cyBqb3VybmV5IGluZm9ybWF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgU2JiUGVhcmxDaGFpbkVsZW1lbnQgZXh0ZW5kcyBTYmJFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1wZWFybC1jaGFpbic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHN0eWxlXTtcblxuICAvKipcbiAgICogRGVmaW5lIHRoZSBsZWdzIG9mIHRoZSBwZWFybC1jaGFpbi5cbiAgICogRm9ybWF0OlxuICAgKiBge1wibGVnc1wiOiBbe1wiZHVyYXRpb25cIjogMjV9LCAuLi5dfWBcbiAgICogYGR1cmF0aW9uYCBpbiBtaW51dGVzLiBEdXJhdGlvbiBvZiB0aGUgbGVnIGlzIHJlbGF0aXZlXG4gICAqIHRvIHRoZSB0b3RhbCB0cmF2ZWwgdGltZS4gRXhhbXBsZTogZGVwYXJ0dXJlIDE2OjMwLCBjaGFuZ2UgYXQgMTY6NDAsXG4gICAqIGFycml2YWwgYXQgMTc6MDAuIFNvIHRoZSBjaGFuZ2Ugc2hvdWxkIGhhdmUgYSBkdXJhdGlvbiBvZiAzMy4zMyUuXG4gICAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBBcnJheSB9KSBwdWJsaWMgYWNjZXNzb3IgbGVnczogKExlZyB8IFB0UmlkZUxlZylbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBQZXIgZGVmYXVsdCwgdGhlIGN1cnJlbnQgbG9jYXRpb24gaGFzIGEgcHVsc2F0aW5nIGFuaW1hdGlvbi4gWW91IGNhblxuICAgKiBkaXNhYmxlIHRoZSBhbmltYXRpb24gd2l0aCB0aGlzIHByb3BlcnR5LlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2Rpc2FibGUtYW5pbWF0aW9uJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZGlzYWJsZUFuaW1hdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBBIGNvbmZpZ3VyZWQgZGF0ZSB3aGljaCBhY3RzIGFzIHRoZSBjdXJyZW50IGRhdGUgaW5zdGVhZCBvZiB0aGUgcmVhbCBjdXJyZW50IGRhdGUuXG4gICAqIE9ubHkgcmVjb21tZW5kZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IG5vdyh2YWx1ZTogRGF0ZSB8IG51bGwpIHtcbiAgICB0aGlzLl9ub3cgPSBkZWZhdWx0RGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKGRlZmF1bHREYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IERhdGUgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbm93O1xuICB9XG4gIHByaXZhdGUgX25vdzogRGF0ZSB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX2dldEFsbER1cmF0aW9uKGxlZ3M6IFB0UmlkZUxlZ1tdKTogbnVtYmVyIHtcbiAgICByZXR1cm4gbGVncz8ucmVkdWNlKChzdW06IG51bWJlciwgbGVnKSA9PiB7XG4gICAgICBjb25zdCBhcnJpdmFsTm9UeiA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmFycml2YWw/LnRpbWUpO1xuICAgICAgY29uc3QgZGVwYXJ0dXJlTm9UeiA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmRlcGFydHVyZT8udGltZSk7XG4gICAgICBpZiAoYXJyaXZhbE5vVHogJiYgZGVwYXJ0dXJlTm9Ueikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHN1bSArXG4gICAgICAgICAgZGlmZmVyZW5jZUluTWludXRlcyhcbiAgICAgICAgICAgIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmFycml2YWwudGltZSkhLFxuICAgICAgICAgICAgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlLnRpbWUpISxcbiAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH0sIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXNBbGxDYW5jZWxsZWQobGVnczogUHRSaWRlTGVnW10pOiBib29sZWFuIHtcbiAgICByZXR1cm4gbGVncz8uZXZlcnkoKGxlZykgPT4gbGVnPy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LmNhbmNlbGxlZCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXRSZWxhdGl2ZUR1cmF0aW9uKGxlZ3M6IFB0UmlkZUxlZ1tdLCBsZWc6IFB0UmlkZUxlZyk6IG51bWJlciB7XG4gICAgY29uc3QgYXJyaXZhbE5vVHogPSByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5hcnJpdmFsPy50aW1lKTtcbiAgICBjb25zdCBkZXBhcnR1cmVOb1R6ID0gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlPy50aW1lKTtcbiAgICBpZiAoYXJyaXZhbE5vVHogJiYgZGVwYXJ0dXJlTm9Ueikge1xuICAgICAgY29uc3QgZHVyYXRpb24gPSBkaWZmZXJlbmNlSW5NaW51dGVzKFxuICAgICAgICByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5hcnJpdmFsLnRpbWUpISxcbiAgICAgICAgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlLnRpbWUpISxcbiAgICAgICk7XG4gICAgICBjb25zdCBhbGxEdXJhdGlvbnMgPSB0aGlzLl9nZXRBbGxEdXJhdGlvbihsZWdzKTtcblxuICAgICAgaWYgKGFsbER1cmF0aW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMTAwO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKGR1cmF0aW9uIC8gYWxsRHVyYXRpb25zKSAqIDEwMDtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwcml2YXRlIF9nZXRQcm9ncmVzcyhub3c6IERhdGUsIHN0YXJ0PzogVGltZSwgZW5kPzogVGltZSk6IG51bWJlciB7XG4gICAgaWYgKCFzdGFydD8udGltZSB8fCAhZW5kPy50aW1lKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBzdGFydFdpdGhEZWxheSA9IGFkZE1pbnV0ZXMoc3RhcnQudGltZSwgc3RhcnQuZGVsYXkgPz8gMCk7XG4gICAgY29uc3QgZW5kV2l0aERlbGF5ID0gYWRkTWludXRlcyhlbmQudGltZSwgZW5kLmRlbGF5ID8/IDApO1xuICAgIGNvbnN0IHRvdGFsID0gZGlmZmVyZW5jZUluTWludXRlcyhlbmRXaXRoRGVsYXksIHN0YXJ0V2l0aERlbGF5KTtcbiAgICBjb25zdCBwcm9ncmVzcyA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMobm93LCBzdGFydFdpdGhEZWxheSk7XG5cbiAgICByZXR1cm4gdG90YWwgJiYgKHByb2dyZXNzIC8gdG90YWwpICogMTAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0U3RhdHVzKG5vdzogRGF0ZSwgc3RhcnQ/OiBUaW1lLCBlbmQ/OiBUaW1lKTogU3RhdHVzIHtcbiAgICBjb25zdCBzdGFydFdpdGhEZWxheSA9IHN0YXJ0ICYmIHN0YXJ0LnRpbWUgJiYgYWRkTWludXRlcyhzdGFydC50aW1lLCBzdGFydC5kZWxheSA/PyAwKTtcbiAgICBjb25zdCBlbmRXaXRoRGVsYXkgPSBlbmQgJiYgZW5kLnRpbWUgJiYgYWRkTWludXRlcyhlbmQudGltZSwgZW5kLmRlbGF5ID8/IDApO1xuXG4gICAgaWYgKFxuICAgICAgc3RhcnRXaXRoRGVsYXkgJiZcbiAgICAgIGlzQmVmb3JlKHN0YXJ0V2l0aERlbGF5LCBub3cpICYmXG4gICAgICBlbmRXaXRoRGVsYXkgJiZcbiAgICAgIGlzQWZ0ZXIoZW5kV2l0aERlbGF5LCBub3cpXG4gICAgKSB7XG4gICAgICByZXR1cm4gJ3Byb2dyZXNzJztcbiAgICB9IGVsc2UgaWYgKGVuZFdpdGhEZWxheSAmJiBpc0JlZm9yZShlbmRXaXRoRGVsYXksIG5vdykpIHtcbiAgICAgIHJldHVybiAncGFzdCc7XG4gICAgfVxuICAgIHJldHVybiAnZnV0dXJlJztcbiAgfVxuXG4gIHByaXZhdGUgX3JlbmRlclBvc2l0aW9uKG5vdzogRGF0ZSwgc3RhcnQ/OiBUaW1lLCBlbmQ/OiBUaW1lKTogVGVtcGxhdGVSZXN1bHQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGN1cnJlbnRQb3NpdGlvbiA9IHRoaXMuX2dldFByb2dyZXNzKG5vdywgc3RhcnQsIGVuZCk7XG4gICAgaWYgKGN1cnJlbnRQb3NpdGlvbiA8IDAgJiYgY3VycmVudFBvc2l0aW9uID4gMTAwKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgY29uc3Qgc3RhdHVzU3R5bGUgPSAoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1zYmItcGVhcmwtY2hhaW4tc3RhdHVzLXBvc2l0aW9uJzogYCR7Y3VycmVudFBvc2l0aW9ufSVgLFxuICAgICAgICAuLi4oY3VycmVudFBvc2l0aW9uID49IDUwID8geyB0cmFuc2Zvcm06IGB0cmFuc2xhdGVYKC0xMDAlKWAgfSA6IHt9KSxcbiAgICAgIH07XG4gICAgfTtcblxuICAgIGNvbnN0IGFuaW1hdGlvbiA9IHRoaXMuZGlzYWJsZUFuaW1hdGlvbiA/ICdzYmItcGVhcmwtY2hhaW5fX3Bvc2l0aW9uLS1uby1hbmltYXRpb24nIDogJyc7XG5cbiAgICByZXR1cm4gaHRtbGA8c3BhblxuICAgICAgc3R5bGU9JHtzdHlsZU1hcChzdGF0dXNTdHlsZSgpKX1cbiAgICAgIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19wb3NpdGlvbiAke2FuaW1hdGlvbn1cIlxuICAgID48L3NwYW4+YDtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IG5vdyA9IHRoaXMubm93ID8/IG5ldyBEYXRlKCk7XG5cbiAgICBjb25zdCByaWRlTGVnczogUHRSaWRlTGVnW10gPSB0aGlzLmxlZ3M/LmZpbHRlcigobGVnKSA9PiBpc1JpZGVMZWcobGVnKSkgYXMgUHRSaWRlTGVnW107XG5cbiAgICBjb25zdCBkZXBhcnR1cmVUaW1lID1cbiAgICAgIHJpZGVMZWdzPy5sZW5ndGggJiYgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhyaWRlTGVnc1swXT8uZGVwYXJ0dXJlPy50aW1lKTtcbiAgICBjb25zdCBkZXBhcnR1cmVXaXRoRGVsYXkgPSBkZXBhcnR1cmVUaW1lICYmIHtcbiAgICAgIHRpbWU6IGRlcGFydHVyZVRpbWUsXG4gICAgICBkZWxheTogcmlkZUxlZ3NbMF0uZGVwYXJ0dXJlLmRlbGF5ID8/IDAsXG4gICAgfTtcblxuICAgIGNvbnN0IGFycml2YWxUaW1lID1cbiAgICAgIHJpZGVMZWdzPy5sZW5ndGggJiZcbiAgICAgIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcocmlkZUxlZ3NbcmlkZUxlZ3MubGVuZ3RoIC0gMV0uYXJyaXZhbD8udGltZSk7XG4gICAgY29uc3QgYXJyaXZhbFRpbWVEZWxheSA9IGFycml2YWxUaW1lICYmIHtcbiAgICAgIHRpbWU6IGFycml2YWxUaW1lLFxuICAgICAgZGVsYXk6IHJpZGVMZWdzW3JpZGVMZWdzLmxlbmd0aCAtIDFdPy5hcnJpdmFsLmRlbGF5ID8/IDAsXG4gICAgfTtcblxuICAgIGNvbnN0IGRlcGFydHVyZU5vdFNlcnZpY2VkID0gKCgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIHJpZGVMZWdzICYmXG4gICAgICAgIHJpZGVMZWdzWzBdPy5zZXJ2aWNlSm91cm5leT8uc3RvcFBvaW50cyAmJlxuICAgICAgICByaWRlTGVnc1swXT8uc2VydmljZUpvdXJuZXk/LnN0b3BQb2ludHNbMF0uc3RvcFN0YXR1cyA9PT0gJ05PVF9TRVJWSUNFRCdcbiAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluLS1kZXBhcnR1cmUtc2tpcHBlZCdcbiAgICAgICAgOiAnJztcbiAgICB9KSgpO1xuXG4gICAgY29uc3QgYXJyaXZhbE5vdFNlcnZpY2VkID0gKCgpOiBzdHJpbmcgPT4ge1xuICAgICAgY29uc3QgbGFzdExlZyA9IHJpZGVMZWdzICYmIHJpZGVMZWdzW3JpZGVMZWdzLmxlbmd0aCAtIDFdO1xuICAgICAgY29uc3Qgc3RvcHMgPSBsYXN0TGVnICYmIGxhc3RMZWcuc2VydmljZUpvdXJuZXk/LnN0b3BQb2ludHM7XG5cbiAgICAgIHJldHVybiBzdG9wcyAmJiBzdG9wc1tzdG9wcy5sZW5ndGggLSAxXS5zdG9wU3RhdHVzID09PSAnTk9UX1NFUlZJQ0VEJ1xuICAgICAgICA/ICdzYmItcGVhcmwtY2hhaW4tLWFycml2YWwtc2tpcHBlZCdcbiAgICAgICAgOiAnJztcbiAgICB9KSgpO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlQ2FuY2VsQ2xhc3MgPSAoKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gcmlkZUxlZ3MgJiYgcmlkZUxlZ3NbMF0/LnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8uY2FuY2VsbGVkXG4gICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbi0tZGVwYXJ0dXJlLWRpc3J1cHRpb24nXG4gICAgICAgIDogJyc7XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IGFycml2YWxDYW5jZWxDbGFzcyA9ICgoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiByaWRlTGVncyAmJiByaWRlTGVnc1tyaWRlTGVncy5sZW5ndGggLSAxXT8uc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy5jYW5jZWxsZWRcbiAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluLS1hcnJpdmFsLWRpc3J1cHRpb24nXG4gICAgICAgIDogJyc7XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IHN0YXR1cyA9XG4gICAgICBkZXBhcnR1cmVXaXRoRGVsYXkgJiZcbiAgICAgIGFycml2YWxUaW1lRGVsYXkgJiZcbiAgICAgIHRoaXMuX2dldFN0YXR1cyhub3csIGRlcGFydHVyZVdpdGhEZWxheSwgYXJyaXZhbFRpbWVEZWxheSk7XG5cbiAgICBjb25zdCBzdGF0dXNDbGFzc0RlcGFydHVyZSA9XG4gICAgICByaWRlTGVncyAmJiBzdGF0dXMgJiYgIWRlcGFydHVyZUNhbmNlbENsYXNzID8gJ3NiYi1wZWFybC1jaGFpbl9fYnVsbGV0LS0nICsgc3RhdHVzIDogJyc7XG5cbiAgICBjb25zdCBzdGF0dXNDbGFzc0Fycml2YWwgPVxuICAgICAgcmlkZUxlZ3MgJiYgc3RhdHVzICYmICFhcnJpdmFsQ2FuY2VsQ2xhc3NcbiAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluX19idWxsZXQtLScgKyB0aGlzLl9nZXRTdGF0dXMobm93LCB1bmRlZmluZWQsIGFycml2YWxUaW1lRGVsYXkpXG4gICAgICAgIDogJyc7XG5cbiAgICBpZiAodGhpcy5faXNBbGxDYW5jZWxsZWQocmlkZUxlZ3MpKSB7XG4gICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1wZWFybC1jaGFpblwiPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19idWxsZXQgc2JiLXBlYXJsLWNoYWluLS1kZXBhcnR1cmUtZGlzcnVwdGlvblwiPjwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19sZWcgc2JiLXBlYXJsLWNoYWluX19sZWctLWRpc3J1cHRpb25cIj48L2Rpdj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fYnVsbGV0IHNiYi1wZWFybC1jaGFpbi0tZGVwYXJ0dXJlLWRpc3J1cHRpb25cIj48L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgYDtcbiAgICB9XG5cbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5cIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fYnVsbGV0ICR7c3RhdHVzQ2xhc3NEZXBhcnR1cmV9ICR7ZGVwYXJ0dXJlTm90U2VydmljZWR9ICR7ZGVwYXJ0dXJlQ2FuY2VsQ2xhc3N9XCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgICAgJHtyaWRlTGVncz8ubWFwKChsZWc6IFB0UmlkZUxlZywgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgc3RvcFBvaW50cywgc2VydmljZUFsdGVyYXRpb24gfSA9IGxlZz8uc2VydmljZUpvdXJuZXkgfHwge307XG5cbiAgICAgICAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMuX2dldFJlbGF0aXZlRHVyYXRpb24ocmlkZUxlZ3MsIGxlZyk7XG4gICAgICAgICAgY29uc3QgZGVwYXJ0dXJlID0gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuZGVwYXJ0dXJlPy50aW1lKTtcbiAgICAgICAgICBjb25zdCBhcnJpdmFsID0gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuYXJyaXZhbD8udGltZSk7XG5cbiAgICAgICAgICBjb25zdCBpc0Fycml2YWxOb3RTZXJ2aWNlZCA9XG4gICAgICAgICAgICBzdG9wUG9pbnRzICYmIHN0b3BQb2ludHNbc3RvcFBvaW50cy5sZW5ndGggLSAxXT8uc3RvcFN0YXR1cyA9PT0gJ05PVF9TRVJWSUNFRCc7XG4gICAgICAgICAgY29uc3QgaXNBcnJpdmFsUGxhbm5lZCA9XG4gICAgICAgICAgICBzdG9wUG9pbnRzICYmIHN0b3BQb2ludHNbc3RvcFBvaW50cy5sZW5ndGggLSAxXT8uc3RvcFN0YXR1cyA9PT0gJ1BMQU5ORUQnO1xuICAgICAgICAgIGNvbnN0IGlzRGVwYXJ0dXJlTm90U2VydmljZWQgPSBzdG9wUG9pbnRzICYmIHN0b3BQb2ludHNbMF0/LnN0b3BTdGF0dXMgPT09ICdOT1RfU0VSVklDRUQnO1xuXG4gICAgICAgICAgY29uc3Qgc3RvcFBvaW50c0JlZm9yZSA9IGluZGV4ID4gMCAmJiByaWRlTGVnc1tpbmRleCAtIDFdLnNlcnZpY2VKb3VybmV5LnN0b3BQb2ludHM7XG4gICAgICAgICAgY29uc3QgaXNCZWZvcmVMZWdBcnJpdmFsTm90U2VydmljZWQgPVxuICAgICAgICAgICAgc3RvcFBvaW50c0JlZm9yZSAmJlxuICAgICAgICAgICAgc3RvcFBvaW50c0JlZm9yZVtzdG9wUG9pbnRzQmVmb3JlLmxlbmd0aCAtIDFdPy5zdG9wU3RhdHVzID09PSAnTk9UX1NFUlZJQ0VEJztcblxuICAgICAgICAgIGNvbnN0IHNraXBwZWRMZWcgPVxuICAgICAgICAgICAgaXNBcnJpdmFsTm90U2VydmljZWQgfHwgKGlzRGVwYXJ0dXJlTm90U2VydmljZWQgJiYgaXNBcnJpdmFsUGxhbm5lZClcbiAgICAgICAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluX19sZWctLXNraXBwZWQnXG4gICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgY29uc3QgZGVwYXJ0dXJlU2tpcHBlZEJ1bGxldCA9XG4gICAgICAgICAgICBpc0RlcGFydHVyZU5vdFNlcnZpY2VkIHx8IGlzQmVmb3JlTGVnQXJyaXZhbE5vdFNlcnZpY2VkXG4gICAgICAgICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbl9fc3RvcC0tZGVwYXJ0dXJlLXNraXBwZWQnXG4gICAgICAgICAgICAgIDogJyc7XG5cbiAgICAgICAgICBjb25zdCBjYW5jZWxsZWQgPVxuICAgICAgICAgICAgc2VydmljZUFsdGVyYXRpb24/LmNhbmNlbGxlZCB8fCBzZXJ2aWNlQWx0ZXJhdGlvbj8ucGFydGlhbGx5Q2FuY2VsbGVkXG4gICAgICAgICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbl9fbGVnLS1kaXNydXB0aW9uJ1xuICAgICAgICAgICAgICA6ICcnO1xuXG4gICAgICAgICAgY29uc3QgbGVnRGVwYXJ0dXJlV2l0aERlbGF5ID0geyB0aW1lOiBkZXBhcnR1cmUsIGRlbGF5OiBsZWcuZGVwYXJ0dXJlPy5kZWxheSA/PyAwIH07XG4gICAgICAgICAgY29uc3QgbGVnQXJyaXZhbFdpdGhEZWxheSA9IHsgdGltZTogYXJyaXZhbCwgZGVsYXk6IGxlZy5hcnJpdmFsPy5kZWxheSA/PyAwIH07XG4gICAgICAgICAgY29uc3Qgc3RhdHVzID0gdGhpcy5fZ2V0U3RhdHVzKG5vdywgbGVnRGVwYXJ0dXJlV2l0aERlbGF5LCBsZWdBcnJpdmFsV2l0aERlbGF5KTtcblxuICAgICAgICAgIGNvbnN0IGxlZ1N0YXR1cyA9ICFjYW5jZWxsZWQgJiYgIXNraXBwZWRMZWcgJiYgJ3NiYi1wZWFybC1jaGFpbl9fbGVnLS0nICsgc3RhdHVzO1xuICAgICAgICAgIGNvbnN0IGxlZ1N0eWxlID0gKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgJy0tc2JiLXBlYXJsLWNoYWluLWxlZy13aWR0aCc6IGAke2R1cmF0aW9ufSVgLFxuICAgICAgICAgICAgICAuLi4oc3RhdHVzID09PSAncHJvZ3Jlc3MnICYmICFjYW5jZWxsZWQgJiYgIXNraXBwZWRMZWdcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgJy0tc2JiLXBlYXJsLWNoYWluLWxlZy1zdGF0dXMnOiBgJHt0aGlzLl9nZXRQcm9ncmVzcyhub3csIGxlZ0RlcGFydHVyZVdpdGhEZWxheSwgbGVnQXJyaXZhbFdpdGhEZWxheSl9JWAsXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7fSksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICByZXR1cm4gaHRtbGAgPGRpdlxuICAgICAgICAgICAgY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX2xlZyAke2xlZ1N0YXR1cyB8fCAnJ30gJHtjYW5jZWxsZWR9ICR7c2tpcHBlZExlZ31cIlxuICAgICAgICAgICAgc3R5bGU9JHtzdHlsZU1hcChsZWdTdHlsZSgpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICAke2luZGV4ID4gMCAmJiBpbmRleCA8IHJpZGVMZWdzLmxlbmd0aFxuICAgICAgICAgICAgICA/IGh0bWxgPHNwYW4gY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX3N0b3AgJHtkZXBhcnR1cmVTa2lwcGVkQnVsbGV0fVwiPjwvc3Bhbj5gXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICR7c3RhdHVzID09PSAncHJvZ3Jlc3MnICYmICFjYW5jZWxsZWQgJiYgIXNraXBwZWRMZWdcbiAgICAgICAgICAgICAgPyB0aGlzLl9yZW5kZXJQb3NpdGlvbihub3csIGxlZ0RlcGFydHVyZVdpdGhEZWxheSwgbGVnQXJyaXZhbFdpdGhEZWxheSlcbiAgICAgICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvZGl2PmA7XG4gICAgICAgIH0pfVxuICAgICAgICA8c3BhblxuICAgICAgICAgIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19idWxsZXQgJHtzdGF0dXNDbGFzc0Fycml2YWx9ICR7YXJyaXZhbE5vdFNlcnZpY2VkfSAke2Fycml2YWxDYW5jZWxDbGFzc31cIlxuICAgICAgICA+PC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXBlYXJsLWNoYWluJzogU2JiUGVhcmxDaGFpbkVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJzdGF0dXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQk8sU0FBUyxRQUFRLE1BQU0sZUFBZTtBQUMzQyxTQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLGFBQWE7QUFDOUM7QUNGTyxTQUFTLFNBQVMsTUFBTSxlQUFlO0FBQzVDLFNBQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sYUFBYTtBQUM5Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7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
1
+ import { t as SbbPearlChainElement } from "../pearl-chain.component-wpsTvoSe.js";
2
+ export { SbbPearlChainElement };