@sbb-esta/lyne-elements-experimental-dev 0.0.0 → 4.5.1-dev.1771849274

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 (249) hide show
  1. package/README.md +55 -0
  2. package/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +86 -0
  3. package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +54 -0
  4. package/autocomplete-grid/autocomplete-grid-button.js +4 -0
  5. package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +25 -0
  6. package/autocomplete-grid/autocomplete-grid-cell.js +4 -0
  7. package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +29 -0
  8. package/autocomplete-grid/autocomplete-grid-optgroup.js +4 -0
  9. package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +41 -0
  10. package/autocomplete-grid/autocomplete-grid-option.js +5 -0
  11. package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +28 -0
  12. package/autocomplete-grid/autocomplete-grid-row.js +4 -0
  13. package/autocomplete-grid/autocomplete-grid.js +4 -0
  14. package/autocomplete-grid.js +15 -0
  15. package/core/datetime/date-helper.js +191 -0
  16. package/core/datetime.js +5 -0
  17. package/core/timetable/access-leg-helper.js +91 -0
  18. package/core/timetable/timetable-helper.js +12 -0
  19. package/core/timetable/timetable-properties.js +1 -0
  20. package/core/timetable.js +8 -0
  21. package/custom-elements.json +8211 -0
  22. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts +39 -0
  23. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.d.ts.map +1 -0
  24. package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.component.js +141 -0
  25. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts +31 -0
  26. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.d.ts.map +1 -0
  27. package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.component.js +82 -0
  28. package/development/autocomplete-grid/autocomplete-grid-button.d.ts +5 -0
  29. package/development/autocomplete-grid/autocomplete-grid-button.d.ts.map +1 -0
  30. package/development/autocomplete-grid/autocomplete-grid-button.js +5 -0
  31. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts +19 -0
  32. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.d.ts.map +1 -0
  33. package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.component.js +40 -0
  34. package/development/autocomplete-grid/autocomplete-grid-cell.d.ts +5 -0
  35. package/development/autocomplete-grid/autocomplete-grid-cell.d.ts.map +1 -0
  36. package/development/autocomplete-grid/autocomplete-grid-cell.js +5 -0
  37. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.d.ts +19 -0
  38. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.d.ts.map +1 -0
  39. package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.component.js +40 -0
  40. package/development/autocomplete-grid/autocomplete-grid-optgroup.d.ts +5 -0
  41. package/development/autocomplete-grid/autocomplete-grid-optgroup.d.ts.map +1 -0
  42. package/development/autocomplete-grid/autocomplete-grid-optgroup.js +5 -0
  43. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts +26 -0
  44. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.d.ts.map +1 -0
  45. package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.component.js +134 -0
  46. package/development/autocomplete-grid/autocomplete-grid-option.d.ts +5 -0
  47. package/development/autocomplete-grid/autocomplete-grid-option.d.ts.map +1 -0
  48. package/development/autocomplete-grid/autocomplete-grid-option.js +6 -0
  49. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts +20 -0
  50. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.d.ts.map +1 -0
  51. package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.component.js +115 -0
  52. package/development/autocomplete-grid/autocomplete-grid-row.d.ts +5 -0
  53. package/development/autocomplete-grid/autocomplete-grid-row.d.ts.map +1 -0
  54. package/development/autocomplete-grid/autocomplete-grid-row.js +5 -0
  55. package/development/autocomplete-grid/autocomplete-grid.d.ts +5 -0
  56. package/development/autocomplete-grid/autocomplete-grid.d.ts.map +1 -0
  57. package/development/autocomplete-grid/autocomplete-grid.js +5 -0
  58. package/development/autocomplete-grid.d.ts +10 -0
  59. package/development/autocomplete-grid.d.ts.map +1 -0
  60. package/development/autocomplete-grid.js +16 -0
  61. package/development/core/datetime/date-helper.d.ts +27 -0
  62. package/development/core/datetime/date-helper.d.ts.map +1 -0
  63. package/development/core/datetime/date-helper.js +285 -0
  64. package/development/core/datetime.d.ts +5 -0
  65. package/development/core/datetime.d.ts.map +1 -0
  66. package/development/core/datetime.js +6 -0
  67. package/development/core/timetable/access-leg-helper.d.ts +26 -0
  68. package/development/core/timetable/access-leg-helper.d.ts.map +1 -0
  69. package/development/core/timetable/access-leg-helper.js +125 -0
  70. package/development/core/timetable/timetable-helper.d.ts +12 -0
  71. package/development/core/timetable/timetable-helper.d.ts.map +1 -0
  72. package/development/core/timetable/timetable-helper.js +20 -0
  73. package/development/core/timetable/timetable-properties.d.ts +308 -0
  74. package/development/core/timetable/timetable-properties.d.ts.map +1 -0
  75. package/development/core/timetable/timetable-properties.js +2 -0
  76. package/development/core/timetable.d.ts +7 -0
  77. package/development/core/timetable.d.ts.map +1 -0
  78. package/development/core/timetable.js +9 -0
  79. package/development/differenceInMinutes-B0dawX-5.js +26 -0
  80. package/development/format-BMkeaqaF.js +1433 -0
  81. package/development/isValid-BYRch7pV.js +53 -0
  82. package/development/journey-summary/journey-summary.component.d.ts +65 -0
  83. package/development/journey-summary/journey-summary.component.d.ts.map +1 -0
  84. package/development/journey-summary/journey-summary.component.js +294 -0
  85. package/development/journey-summary.d.ts +5 -0
  86. package/development/journey-summary.d.ts.map +1 -0
  87. package/development/journey-summary.js +5 -0
  88. package/development/pearl-chain/pearl-chain.component.d.ts +42 -0
  89. package/development/pearl-chain/pearl-chain.component.d.ts.map +1 -0
  90. package/development/pearl-chain/pearl-chain.component.js +639 -0
  91. package/development/pearl-chain-time/pearl-chain-time.component.d.ts +47 -0
  92. package/development/pearl-chain-time/pearl-chain-time.component.d.ts.map +1 -0
  93. package/development/pearl-chain-time/pearl-chain-time.component.js +312 -0
  94. package/development/pearl-chain-time.d.ts +5 -0
  95. package/development/pearl-chain-time.d.ts.map +1 -0
  96. package/development/pearl-chain-time.js +5 -0
  97. package/development/pearl-chain-vertical/pearl-chain-vertical.component.d.ts +16 -0
  98. package/development/pearl-chain-vertical/pearl-chain-vertical.component.d.ts.map +1 -0
  99. package/development/pearl-chain-vertical/pearl-chain-vertical.component.js +40 -0
  100. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.d.ts +34 -0
  101. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.d.ts.map +1 -0
  102. package/development/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +398 -0
  103. package/development/pearl-chain-vertical-item.d.ts +5 -0
  104. package/development/pearl-chain-vertical-item.d.ts.map +1 -0
  105. package/development/pearl-chain-vertical-item.js +5 -0
  106. package/development/pearl-chain-vertical.d.ts +5 -0
  107. package/development/pearl-chain-vertical.d.ts.map +1 -0
  108. package/development/pearl-chain-vertical.js +5 -0
  109. package/development/pearl-chain.d.ts +5 -0
  110. package/development/pearl-chain.d.ts.map +1 -0
  111. package/development/pearl-chain.js +5 -0
  112. package/development/seat-reservation/common/mapper/icon-mapper.d.ts +106 -0
  113. package/development/seat-reservation/common/mapper/icon-mapper.d.ts.map +1 -0
  114. package/development/seat-reservation/common/mapper/icon-mapper.js +72 -0
  115. package/development/seat-reservation/common/mapper/mapper.d.ts +34 -0
  116. package/development/seat-reservation/common/mapper/mapper.d.ts.map +1 -0
  117. package/development/seat-reservation/common/mapper/mapper.js +129 -0
  118. package/development/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts +372 -0
  119. package/development/seat-reservation/common/mapper/seat-reservation-sample-data.d.ts.map +1 -0
  120. package/development/seat-reservation/common/mapper/seat-reservation-sample-data.js +31673 -0
  121. package/development/seat-reservation/common/mapper.d.ts +3 -0
  122. package/development/seat-reservation/common/mapper.d.ts.map +1 -0
  123. package/development/seat-reservation/common/mapper.js +10 -0
  124. package/development/seat-reservation/common/svgs.d.ts +24 -0
  125. package/development/seat-reservation/common/svgs.d.ts.map +1 -0
  126. package/development/seat-reservation/common/svgs.js +46 -0
  127. package/development/seat-reservation/common/translations/i18n.d.ts +28 -0
  128. package/development/seat-reservation/common/translations/i18n.d.ts.map +1 -0
  129. package/development/seat-reservation/common/translations/i18n.js +871 -0
  130. package/development/seat-reservation/common/translations.d.ts +2 -0
  131. package/development/seat-reservation/common/translations.d.ts.map +1 -0
  132. package/development/seat-reservation/common/translations.js +5 -0
  133. package/development/seat-reservation/common/types.d.ts +97 -0
  134. package/development/seat-reservation/common/types.d.ts.map +1 -0
  135. package/development/seat-reservation/common/types.js +2 -0
  136. package/development/seat-reservation/common.d.ts +8 -0
  137. package/development/seat-reservation/common.d.ts.map +1 -0
  138. package/development/seat-reservation/common.js +14 -0
  139. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts +273 -0
  140. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.d.ts.map +1 -0
  141. package/development/seat-reservation/seat-reservation/seat-reservation-base-element.js +1171 -0
  142. package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts +75 -0
  143. package/development/seat-reservation/seat-reservation/seat-reservation.component.d.ts.map +1 -0
  144. package/development/seat-reservation/seat-reservation/seat-reservation.component.js +832 -0
  145. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts +18 -0
  146. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.d.ts.map +1 -0
  147. package/development/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +112 -0
  148. package/development/seat-reservation/seat-reservation-area.d.ts +5 -0
  149. package/development/seat-reservation/seat-reservation-area.d.ts.map +1 -0
  150. package/development/seat-reservation/seat-reservation-area.js +5 -0
  151. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts +9 -0
  152. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.d.ts.map +1 -0
  153. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +303 -0
  154. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts +20 -0
  155. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.d.ts.map +1 -0
  156. package/development/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +167 -0
  157. package/development/seat-reservation/seat-reservation-graphic.d.ts +5 -0
  158. package/development/seat-reservation/seat-reservation-graphic.d.ts.map +1 -0
  159. package/development/seat-reservation/seat-reservation-graphic.js +5 -0
  160. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts +65 -0
  161. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.d.ts.map +1 -0
  162. package/development/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +798 -0
  163. package/development/seat-reservation/seat-reservation-navigation-coach.d.ts +5 -0
  164. package/development/seat-reservation/seat-reservation-navigation-coach.d.ts.map +1 -0
  165. package/development/seat-reservation/seat-reservation-navigation-coach.js +5 -0
  166. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts +21 -0
  167. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.d.ts.map +1 -0
  168. package/development/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +120 -0
  169. package/development/seat-reservation/seat-reservation-navigation-services.d.ts +5 -0
  170. package/development/seat-reservation/seat-reservation-navigation-services.d.ts.map +1 -0
  171. package/development/seat-reservation/seat-reservation-navigation-services.js +5 -0
  172. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts +42 -0
  173. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.d.ts.map +1 -0
  174. package/development/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +462 -0
  175. package/development/seat-reservation/seat-reservation-place-control.d.ts +5 -0
  176. package/development/seat-reservation/seat-reservation-place-control.d.ts.map +1 -0
  177. package/development/seat-reservation/seat-reservation-place-control.js +5 -0
  178. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts +14 -0
  179. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.d.ts.map +1 -0
  180. package/development/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +34 -0
  181. package/development/seat-reservation/seat-reservation-scoped.d.ts +5 -0
  182. package/development/seat-reservation/seat-reservation-scoped.d.ts.map +1 -0
  183. package/development/seat-reservation/seat-reservation-scoped.js +5 -0
  184. package/development/seat-reservation/seat-reservation.d.ts +6 -0
  185. package/development/seat-reservation/seat-reservation.d.ts.map +1 -0
  186. package/development/seat-reservation/seat-reservation.js +7 -0
  187. package/development/seat-reservation.d.ts +12 -0
  188. package/development/seat-reservation.d.ts.map +1 -0
  189. package/development/seat-reservation.js +30 -0
  190. package/development/timetable-duration/timetable-duration.component.d.ts +22 -0
  191. package/development/timetable-duration/timetable-duration.component.d.ts.map +1 -0
  192. package/development/timetable-duration/timetable-duration.component.js +114 -0
  193. package/development/timetable-duration.d.ts +5 -0
  194. package/development/timetable-duration.d.ts.map +1 -0
  195. package/development/timetable-duration.js +5 -0
  196. package/development/timetable-row/timetable-row.component.d.ts +87 -0
  197. package/development/timetable-row/timetable-row.component.d.ts.map +1 -0
  198. package/development/timetable-row/timetable-row.component.js +787 -0
  199. package/development/timetable-row.d.ts +5 -0
  200. package/development/timetable-row.d.ts.map +1 -0
  201. package/development/timetable-row.js +12 -0
  202. package/development/toDate-BWb6Z1JD.js +24 -0
  203. package/differenceInMinutes-COvvdYsJ.js +23 -0
  204. package/format-CmKROkbc.js +1186 -0
  205. package/index.d.ts +44 -0
  206. package/index.js +43 -0
  207. package/isValid-m3_OsPaB.js +45 -0
  208. package/journey-summary/journey-summary.component.js +193 -0
  209. package/journey-summary.js +4 -0
  210. package/package.json +161 -1
  211. package/pearl-chain/pearl-chain.component.js +164 -0
  212. package/pearl-chain-time/pearl-chain-time.component.js +156 -0
  213. package/pearl-chain-time.js +4 -0
  214. package/pearl-chain-vertical/pearl-chain-vertical.component.js +24 -0
  215. package/pearl-chain-vertical-item/pearl-chain-vertical-item.component.js +76 -0
  216. package/pearl-chain-vertical-item.js +4 -0
  217. package/pearl-chain-vertical.js +4 -0
  218. package/pearl-chain.js +4 -0
  219. package/seat-reservation/common/mapper/icon-mapper.js +71 -0
  220. package/seat-reservation/common/mapper/mapper.js +89 -0
  221. package/seat-reservation/common/mapper/seat-reservation-sample-data.js +31668 -0
  222. package/seat-reservation/common/mapper.js +9 -0
  223. package/seat-reservation/common/svgs.js +243 -0
  224. package/seat-reservation/common/translations/i18n.js +861 -0
  225. package/seat-reservation/common/translations.js +4 -0
  226. package/seat-reservation/common/types.js +1 -0
  227. package/seat-reservation/common.js +13 -0
  228. package/seat-reservation/seat-reservation/seat-reservation-base-element.js +756 -0
  229. package/seat-reservation/seat-reservation/seat-reservation.component.js +410 -0
  230. package/seat-reservation/seat-reservation-area/seat-reservation-area.component.js +50 -0
  231. package/seat-reservation/seat-reservation-area.js +4 -0
  232. package/seat-reservation/seat-reservation-graphic/seat-reservation-assets.js +292 -0
  233. package/seat-reservation/seat-reservation-graphic/seat-reservation-graphic.component.js +73 -0
  234. package/seat-reservation/seat-reservation-graphic.js +4 -0
  235. package/seat-reservation/seat-reservation-navigation-coach/seat-reservation-navigation-coach.component.js +277 -0
  236. package/seat-reservation/seat-reservation-navigation-coach.js +4 -0
  237. package/seat-reservation/seat-reservation-navigation-services/seat-reservation-navigation-services.component.js +73 -0
  238. package/seat-reservation/seat-reservation-navigation-services.js +4 -0
  239. package/seat-reservation/seat-reservation-place-control/seat-reservation-place-control.component.js +167 -0
  240. package/seat-reservation/seat-reservation-place-control.js +4 -0
  241. package/seat-reservation/seat-reservation-scoped/seat-reservation-scoped.component.js +20 -0
  242. package/seat-reservation/seat-reservation-scoped.js +4 -0
  243. package/seat-reservation/seat-reservation.js +6 -0
  244. package/seat-reservation.js +29 -0
  245. package/timetable-duration/timetable-duration.component.js +56 -0
  246. package/timetable-duration.js +4 -0
  247. package/timetable-row/timetable-row.component.js +426 -0
  248. package/timetable-row.js +11 -0
  249. package/toDate-Bw2KTWeq.js +15 -0
@@ -0,0 +1,639 @@
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 { boxSizingStyles } from "@sbb-esta/lyne-elements/core/styles.js";
12
+ import { css, LitElement, html, nothing } from "lit";
13
+ import { customElement, property } from "lit/decorators.js";
14
+ import { styleMap } from "lit/directives/style-map.js";
15
+ import { removeTimezoneFromISOTimeString } from "../core/datetime.js";
16
+ import { isRideLeg } from "../core/timetable.js";
17
+ import { d as differenceInMinutes, a as addMinutes } from "../differenceInMinutes-B0dawX-5.js";
18
+ import { t as toDate } from "../toDate-BWb6Z1JD.js";
19
+ function isAfter(date, dateToCompare) {
20
+ return +toDate(date) > +toDate(dateToCompare);
21
+ }
22
+ function isBefore(date, dateToCompare) {
23
+ return +toDate(date) < +toDate(dateToCompare);
24
+ }
25
+ const style = css`:host {
26
+ --sbb-pearl-chain-height: var(--sbb-border-width-2x);
27
+ --sbb-pearl-chain-spacing-small: 0.125rem;
28
+ --sbb-pearl-chain-color: var(--sbb-pearl-chain-bullet-color);
29
+ --sbb-pearl-chain-color-disruption: var(--sbb-pearl-chain-bullet-color-disruption);
30
+ --sbb-pearl-chain-color-past: var(--sbb-pearl-chain-bullet-color-past);
31
+ --sbb-pearl-chain-leg-width: 100%;
32
+ display: block;
33
+ --sbb-pearl-chain-bullet-size-start-end: 0.625rem;
34
+ --sbb-pearl-chain-bullet-size-stop: 0.5rem;
35
+ --sbb-pearl-chain-bullet-color: var(--sbb-background-color-3-inverted);
36
+ --sbb-pearl-chain-bullet-color-past: var(--sbb-color-metal);
37
+ --sbb-pearl-chain-bullet-color-past: light-dark(var(--sbb-color-metal), var(--sbb-color-granite));
38
+ --sbb-pearl-chain-bullet-color-irrelevant: var(--sbb-color-metal);
39
+ --sbb-pearl-chain-bullet-color-irrelevant: light-dark(
40
+ var(--sbb-color-metal),
41
+ var(--sbb-color-granite)
42
+ );
43
+ --sbb-pearl-chain-bullet-color-disruption: var(--sbb-color-primary);
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 color-mix(in srgb, var(--sbb-color-primary) 20%, transparent);
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
+ position: absolute;
393
+ inset-block-start: -200%;
394
+ z-index: 4;
395
+ inset-inline-start: var(--sbb-pearl-chain-status-position);
396
+ }
397
+
398
+ .sbb-pearl-chain__position--no-animation {
399
+ animation: unset;
400
+ }
401
+
402
+ .sbb-screen-reader-only {
403
+ border: 0;
404
+ clip-path: rect(0 0 0 0);
405
+ height: 1px;
406
+ margin: -1px;
407
+ overflow: hidden;
408
+ padding: 0;
409
+ position: absolute;
410
+ white-space: nowrap;
411
+ width: 1px;
412
+ }`;
413
+ let SbbPearlChainElement = (() => {
414
+ var _legs_accessor_storage, _disableAnimation_accessor_storage, _a;
415
+ let _classDecorators = [customElement("sbb-pearl-chain")];
416
+ let _classDescriptor;
417
+ let _classExtraInitializers = [];
418
+ let _classThis;
419
+ let _classSuper = LitElement;
420
+ let _instanceExtraInitializers = [];
421
+ let _legs_decorators;
422
+ let _legs_initializers = [];
423
+ let _legs_extraInitializers = [];
424
+ let _disableAnimation_decorators;
425
+ let _disableAnimation_initializers = [];
426
+ let _disableAnimation_extraInitializers = [];
427
+ let _set_now_decorators;
428
+ _a = class extends _classSuper {
429
+ constructor() {
430
+ super(...arguments);
431
+ __privateAdd(this, _legs_accessor_storage);
432
+ __privateAdd(this, _disableAnimation_accessor_storage);
433
+ __privateSet(this, _legs_accessor_storage, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _legs_initializers, [])));
434
+ __privateSet(this, _disableAnimation_accessor_storage, (__runInitializers(this, _legs_extraInitializers), __runInitializers(this, _disableAnimation_initializers, false)));
435
+ this._now = (__runInitializers(this, _disableAnimation_extraInitializers), null);
436
+ }
437
+ /**
438
+ * Define the legs of the pearl-chain.
439
+ * Format:
440
+ * `{"legs": [{"duration": 25}, ...]}`
441
+ * `duration` in minutes. Duration of the leg is relative
442
+ * to the total travel time. Example: departure 16:30, change at 16:40,
443
+ * arrival at 17:00. So the change should have a duration of 33.33%.
444
+ */
445
+ get legs() {
446
+ return __privateGet(this, _legs_accessor_storage);
447
+ }
448
+ set legs(value) {
449
+ __privateSet(this, _legs_accessor_storage, value);
450
+ }
451
+ /**
452
+ * Per default, the current location has a pulsating animation. You can
453
+ * disable the animation with this property.
454
+ */
455
+ get disableAnimation() {
456
+ return __privateGet(this, _disableAnimation_accessor_storage);
457
+ }
458
+ set disableAnimation(value) {
459
+ __privateSet(this, _disableAnimation_accessor_storage, value);
460
+ }
461
+ /**
462
+ * A configured date which acts as the current date instead of the real current date.
463
+ * Only recommended for testing purposes.
464
+ */
465
+ set now(value) {
466
+ this._now = defaultDateAdapter.getValidDateOrNull(defaultDateAdapter.deserialize(value));
467
+ }
468
+ get now() {
469
+ return this._now;
470
+ }
471
+ _getAllDuration(legs) {
472
+ return legs?.reduce((sum, leg) => {
473
+ const arrivalNoTz = removeTimezoneFromISOTimeString(leg.arrival?.time);
474
+ const departureNoTz = removeTimezoneFromISOTimeString(leg.departure?.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?.every((leg) => leg?.serviceJourney?.serviceAlteration?.cancelled);
483
+ }
484
+ _getRelativeDuration(legs, leg) {
485
+ const arrivalNoTz = removeTimezoneFromISOTimeString(leg.arrival?.time);
486
+ const departureNoTz = removeTimezoneFromISOTimeString(leg.departure?.time);
487
+ if (arrivalNoTz && departureNoTz) {
488
+ const duration = differenceInMinutes(removeTimezoneFromISOTimeString(leg.arrival.time), removeTimezoneFromISOTimeString(leg.departure.time));
489
+ const allDurations = this._getAllDuration(legs);
490
+ if (allDurations === 0) {
491
+ return 100;
492
+ }
493
+ return duration / allDurations * 100;
494
+ }
495
+ return 0;
496
+ }
497
+ _getProgress(now, start, end) {
498
+ if (!start?.time || !end?.time) {
499
+ return 0;
500
+ }
501
+ const startWithDelay = addMinutes(start.time, start.delay ?? 0);
502
+ const endWithDelay = addMinutes(end.time, end.delay ?? 0);
503
+ const total = differenceInMinutes(endWithDelay, startWithDelay);
504
+ const progress = differenceInMinutes(now, startWithDelay);
505
+ return total && progress / total * 100;
506
+ }
507
+ _getStatus(now, start, end) {
508
+ const startWithDelay = start && start.time && addMinutes(start.time, start.delay ?? 0);
509
+ const endWithDelay = end && end.time && addMinutes(end.time, end.delay ?? 0);
510
+ if (startWithDelay && isBefore(startWithDelay, now) && endWithDelay && isAfter(endWithDelay, now)) {
511
+ return "progress";
512
+ } else if (endWithDelay && isBefore(endWithDelay, now)) {
513
+ return "past";
514
+ }
515
+ return "future";
516
+ }
517
+ _renderPosition(now, start, end) {
518
+ const currentPosition = this._getProgress(now, start, end);
519
+ if (currentPosition < 0 && currentPosition > 100)
520
+ return void 0;
521
+ const statusStyle = () => {
522
+ return {
523
+ "--sbb-pearl-chain-status-position": `${currentPosition}%`,
524
+ ...currentPosition >= 50 ? { transform: `translateX(-100%)` } : {}
525
+ };
526
+ };
527
+ const animation = this.disableAnimation ? "sbb-pearl-chain__position--no-animation" : "";
528
+ return html`<span
529
+ style=${styleMap(statusStyle())}
530
+ class="sbb-pearl-chain__position ${animation}"
531
+ ></span>`;
532
+ }
533
+ render() {
534
+ const now = this.now ?? /* @__PURE__ */ new Date();
535
+ const rideLegs = this.legs?.filter((leg) => isRideLeg(leg));
536
+ const departureTime = rideLegs?.length && removeTimezoneFromISOTimeString(rideLegs[0]?.departure?.time);
537
+ const departureWithDelay = departureTime && {
538
+ time: departureTime,
539
+ delay: rideLegs[0].departure.delay ?? 0
540
+ };
541
+ const arrivalTime = rideLegs?.length && removeTimezoneFromISOTimeString(rideLegs[rideLegs.length - 1].arrival?.time);
542
+ const arrivalTimeDelay = arrivalTime && {
543
+ time: arrivalTime,
544
+ delay: rideLegs[rideLegs.length - 1]?.arrival.delay ?? 0
545
+ };
546
+ const departureNotServiced = (() => {
547
+ return rideLegs && rideLegs[0]?.serviceJourney?.stopPoints && rideLegs[0]?.serviceJourney?.stopPoints[0].stopStatus === "NOT_SERVICED" ? "sbb-pearl-chain--departure-skipped" : "";
548
+ })();
549
+ const arrivalNotServiced = (() => {
550
+ const lastLeg = rideLegs && rideLegs[rideLegs.length - 1];
551
+ const stops = lastLeg && lastLeg.serviceJourney?.stopPoints;
552
+ return stops && stops[stops.length - 1].stopStatus === "NOT_SERVICED" ? "sbb-pearl-chain--arrival-skipped" : "";
553
+ })();
554
+ const departureCancelClass = (() => {
555
+ return rideLegs && rideLegs[0]?.serviceJourney?.serviceAlteration?.cancelled ? "sbb-pearl-chain--departure-disruption" : "";
556
+ })();
557
+ const arrivalCancelClass = (() => {
558
+ return rideLegs && rideLegs[rideLegs.length - 1]?.serviceJourney?.serviceAlteration?.cancelled ? "sbb-pearl-chain--arrival-disruption" : "";
559
+ })();
560
+ const status = departureWithDelay && arrivalTimeDelay && this._getStatus(now, departureWithDelay, arrivalTimeDelay);
561
+ const statusClassDeparture = rideLegs && status && !departureCancelClass ? "sbb-pearl-chain__bullet--" + status : "";
562
+ const statusClassArrival = rideLegs && status && !arrivalCancelClass ? "sbb-pearl-chain__bullet--" + this._getStatus(now, void 0, arrivalTimeDelay) : "";
563
+ if (this._isAllCancelled(rideLegs)) {
564
+ return html`
565
+ <div class="sbb-pearl-chain">
566
+ <span class="sbb-pearl-chain__bullet sbb-pearl-chain--departure-disruption"></span>
567
+ <div class="sbb-pearl-chain__leg sbb-pearl-chain__leg--disruption"></div>
568
+ <span class="sbb-pearl-chain__bullet sbb-pearl-chain--departure-disruption"></span>
569
+ </div>
570
+ `;
571
+ }
572
+ return html`
573
+ <div class="sbb-pearl-chain">
574
+ <span
575
+ class="sbb-pearl-chain__bullet ${statusClassDeparture} ${departureNotServiced} ${departureCancelClass}"
576
+ ></span>
577
+ ${rideLegs?.map((leg, index) => {
578
+ const { stopPoints, serviceAlteration } = leg?.serviceJourney || {};
579
+ const duration = this._getRelativeDuration(rideLegs, leg);
580
+ const departure = removeTimezoneFromISOTimeString(leg.departure?.time);
581
+ const arrival = removeTimezoneFromISOTimeString(leg.arrival?.time);
582
+ const isArrivalNotServiced = stopPoints && stopPoints[stopPoints.length - 1]?.stopStatus === "NOT_SERVICED";
583
+ const isArrivalPlanned = stopPoints && stopPoints[stopPoints.length - 1]?.stopStatus === "PLANNED";
584
+ const isDepartureNotServiced = stopPoints && stopPoints[0]?.stopStatus === "NOT_SERVICED";
585
+ const stopPointsBefore = index > 0 && rideLegs[index - 1].serviceJourney.stopPoints;
586
+ const isBeforeLegArrivalNotServiced = stopPointsBefore && stopPointsBefore[stopPointsBefore.length - 1]?.stopStatus === "NOT_SERVICED";
587
+ const skippedLeg = isArrivalNotServiced || isDepartureNotServiced && isArrivalPlanned ? "sbb-pearl-chain__leg--skipped" : "";
588
+ const departureSkippedBullet = isDepartureNotServiced || isBeforeLegArrivalNotServiced ? "sbb-pearl-chain__stop--departure-skipped" : "";
589
+ const cancelled = serviceAlteration?.cancelled || serviceAlteration?.partiallyCancelled ? "sbb-pearl-chain__leg--disruption" : "";
590
+ const legDepartureWithDelay = { time: departure, delay: leg.departure?.delay ?? 0 };
591
+ const legArrivalWithDelay = { time: arrival, delay: leg.arrival?.delay ?? 0 };
592
+ const status2 = this._getStatus(now, legDepartureWithDelay, legArrivalWithDelay);
593
+ const legStatus = !cancelled && !skippedLeg && "sbb-pearl-chain__leg--" + status2;
594
+ const legStyle = () => {
595
+ return {
596
+ "--sbb-pearl-chain-leg-width": `${duration}%`,
597
+ ...status2 === "progress" && !cancelled && !skippedLeg ? {
598
+ "--sbb-pearl-chain-leg-status": `${this._getProgress(now, legDepartureWithDelay, legArrivalWithDelay)}%`
599
+ } : {}
600
+ };
601
+ };
602
+ return html` <div
603
+ class="sbb-pearl-chain__leg ${legStatus || ""} ${cancelled} ${skippedLeg}"
604
+ style=${styleMap(legStyle())}
605
+ >
606
+ ${index > 0 && index < rideLegs.length ? html`<span class="sbb-pearl-chain__stop ${departureSkippedBullet}"></span>` : nothing}
607
+ ${status2 === "progress" && !cancelled && !skippedLeg ? this._renderPosition(now, legDepartureWithDelay, legArrivalWithDelay) : nothing}
608
+ </div>`;
609
+ })}
610
+ <span
611
+ class="sbb-pearl-chain__bullet ${statusClassArrival} ${arrivalNotServiced} ${arrivalCancelClass}"
612
+ ></span>
613
+ </div>
614
+ `;
615
+ }
616
+ }, _legs_accessor_storage = new WeakMap(), _disableAnimation_accessor_storage = new WeakMap(), _classThis = _a, (() => {
617
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
618
+ _legs_decorators = [property({ type: Array })];
619
+ _disableAnimation_decorators = [forceType(), property({ attribute: "disable-animation", type: Boolean })];
620
+ _set_now_decorators = [property()];
621
+ __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) => {
622
+ obj.legs = value;
623
+ } }, metadata: _metadata }, _legs_initializers, _legs_extraInitializers);
624
+ __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) => {
625
+ obj.disableAnimation = value;
626
+ } }, metadata: _metadata }, _disableAnimation_initializers, _disableAnimation_extraInitializers);
627
+ __esDecorate(_a, null, _set_now_decorators, { kind: "setter", name: "now", static: false, private: false, access: { has: (obj) => "now" in obj, set: (obj, value) => {
628
+ obj.now = value;
629
+ } }, metadata: _metadata }, null, _instanceExtraInitializers);
630
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
631
+ _classThis = _classDescriptor.value;
632
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
633
+ })(), _a.styles = [boxSizingStyles, style], __runInitializers(_classThis, _classExtraInitializers), _a;
634
+ return _classThis;
635
+ })();
636
+ export {
637
+ SbbPearlChainElement
638
+ };
639
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVhcmwtY2hhaW4uY29tcG9uZW50LmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNBZnRlci5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0JlZm9yZS5qcyIsIi4uLy4uLy4uLy4uL3NyYy9lbGVtZW50cy1leHBlcmltZW50YWwvcGVhcmwtY2hhaW4vcGVhcmwtY2hhaW4uY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRvRGF0ZSB9IGZyb20gXCIuL3RvRGF0ZS5qc1wiO1xuXG4vKipcbiAqIEBuYW1lIGlzQWZ0ZXJcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGZpcnN0IGRhdGUgYWZ0ZXIgdGhlIHNlY29uZCBvbmU/XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBJcyB0aGUgZmlyc3QgZGF0ZSBhZnRlciB0aGUgc2Vjb25kIG9uZT9cbiAqXG4gKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRoYXQgc2hvdWxkIGJlIGFmdGVyIHRoZSBvdGhlciBvbmUgdG8gcmV0dXJuIHRydWVcbiAqIEBwYXJhbSBkYXRlVG9Db21wYXJlIC0gVGhlIGRhdGUgdG8gY29tcGFyZSB3aXRoXG4gKlxuICogQHJldHVybnMgVGhlIGZpcnN0IGRhdGUgaXMgYWZ0ZXIgdGhlIHNlY29uZCBkYXRlXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIElzIDEwIEp1bHkgMTk4OSBhZnRlciAxMSBGZWJydWFyeSAxOTg3P1xuICogY29uc3QgcmVzdWx0ID0gaXNBZnRlcihuZXcgRGF0ZSgxOTg5LCA2LCAxMCksIG5ldyBEYXRlKDE5ODcsIDEsIDExKSlcbiAqIC8vPT4gdHJ1ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNBZnRlcihkYXRlLCBkYXRlVG9Db21wYXJlKSB7XG4gIHJldHVybiArdG9EYXRlKGRhdGUpID4gK3RvRGF0ZShkYXRlVG9Db21wYXJlKTtcbn1cblxuLy8gRmFsbGJhY2sgZm9yIG1vZHVsYXJpemVkIGltcG9ydHM6XG5leHBvcnQgZGVmYXVsdCBpc0FmdGVyO1xuIiwiaW1wb3J0IHsgdG9EYXRlIH0gZnJvbSBcIi4vdG9EYXRlLmpzXCI7XG5cbi8qKlxuICogQG5hbWUgaXNCZWZvcmVcbiAqIEBjYXRlZ29yeSBDb21tb24gSGVscGVyc1xuICogQHN1bW1hcnkgSXMgdGhlIGZpcnN0IGRhdGUgYmVmb3JlIHRoZSBzZWNvbmQgb25lP1xuICpcbiAqIEBkZXNjcmlwdGlvblxuICogSXMgdGhlIGZpcnN0IGRhdGUgYmVmb3JlIHRoZSBzZWNvbmQgb25lP1xuICpcbiAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgdGhhdCBzaG91bGQgYmUgYmVmb3JlIHRoZSBvdGhlciBvbmUgdG8gcmV0dXJuIHRydWVcbiAqIEBwYXJhbSBkYXRlVG9Db21wYXJlIC0gVGhlIGRhdGUgdG8gY29tcGFyZSB3aXRoXG4gKlxuICogQHJldHVybnMgVGhlIGZpcnN0IGRhdGUgaXMgYmVmb3JlIHRoZSBzZWNvbmQgZGF0ZVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBJcyAxMCBKdWx5IDE5ODkgYmVmb3JlIDExIEZlYnJ1YXJ5IDE5ODc/XG4gKiBjb25zdCByZXN1bHQgPSBpc0JlZm9yZShuZXcgRGF0ZSgxOTg5LCA2LCAxMCksIG5ldyBEYXRlKDE5ODcsIDEsIDExKSlcbiAqIC8vPT4gZmFsc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQmVmb3JlKGRhdGUsIGRhdGVUb0NvbXBhcmUpIHtcbiAgcmV0dXJuICt0b0RhdGUoZGF0ZSkgPCArdG9EYXRlKGRhdGVUb0NvbXBhcmUpO1xufVxuXG4vLyBGYWxsYmFjayBmb3IgbW9kdWxhcml6ZWQgaW1wb3J0czpcbmV4cG9ydCBkZWZhdWx0IGlzQmVmb3JlO1xuIiwiaW1wb3J0IHsgZGVmYXVsdERhdGVBZGFwdGVyIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9kYXRldGltZS5qcyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICdAc2JiLWVzdGEvbHluZS1lbGVtZW50cy9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnQHNiYi1lc3RhL2x5bmUtZWxlbWVudHMvY29yZS9zdHlsZXMuanMnO1xuaW1wb3J0IHsgYWRkTWludXRlcywgZGlmZmVyZW5jZUluTWludXRlcywgaXNBZnRlciwgaXNCZWZvcmUgfSBmcm9tICdkYXRlLWZucyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBMaXRFbGVtZW50LCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgc3R5bGVNYXAgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9zdHlsZS1tYXAuanMnO1xuXG5pbXBvcnQgeyByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nIH0gZnJvbSAnLi4vY29yZS9kYXRldGltZS50cyc7XG5pbXBvcnQgdHlwZSB7IExlZywgUHRSaWRlTGVnIH0gZnJvbSAnLi4vY29yZS90aW1ldGFibGUudHMnO1xuaW1wb3J0IHsgaXNSaWRlTGVnIH0gZnJvbSAnLi4vY29yZS90aW1ldGFibGUudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9wZWFybC1jaGFpbi5zY3NzP2xpdCZpbmxpbmUnO1xuXG50eXBlIFN0YXR1cyA9ICdwcm9ncmVzcycgfCAnZnV0dXJlJyB8ICdwYXN0JztcbnR5cGUgVGltZSA9IHtcbiAgdGltZT86IERhdGU7XG4gIGRlbGF5OiBudW1iZXI7XG59O1xuXG4vKipcbiAqIEl0IHZpc3VhbGx5IGRpc3BsYXlzIGpvdXJuZXkgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydFxuQGN1c3RvbUVsZW1lbnQoJ3NiYi1wZWFybC1jaGFpbicpXG5jbGFzcyBTYmJQZWFybENoYWluRWxlbWVudCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgbGVncyBvZiB0aGUgcGVhcmwtY2hhaW4uXG4gICAqIEZvcm1hdDpcbiAgICogYHtcImxlZ3NcIjogW3tcImR1cmF0aW9uXCI6IDI1fSwgLi4uXX1gXG4gICAqIGBkdXJhdGlvbmAgaW4gbWludXRlcy4gRHVyYXRpb24gb2YgdGhlIGxlZyBpcyByZWxhdGl2ZVxuICAgKiB0byB0aGUgdG90YWwgdHJhdmVsIHRpbWUuIEV4YW1wbGU6IGRlcGFydHVyZSAxNjozMCwgY2hhbmdlIGF0IDE2OjQwLFxuICAgKiBhcnJpdmFsIGF0IDE3OjAwLiBTbyB0aGUgY2hhbmdlIHNob3VsZCBoYXZlIGEgZHVyYXRpb24gb2YgMzMuMzMlLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgdHlwZTogQXJyYXkgfSkgcHVibGljIGFjY2Vzc29yIGxlZ3M6IChMZWcgfCBQdFJpZGVMZWcpW10gPSBbXTtcblxuICAvKipcbiAgICogUGVyIGRlZmF1bHQsIHRoZSBjdXJyZW50IGxvY2F0aW9uIGhhcyBhIHB1bHNhdGluZyBhbmltYXRpb24uIFlvdSBjYW5cbiAgICogZGlzYWJsZSB0aGUgYW5pbWF0aW9uIHdpdGggdGhpcyBwcm9wZXJ0eS5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdkaXNhYmxlLWFuaW1hdGlvbicsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGRpc2FibGVBbmltYXRpb246IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBjb25maWd1cmVkIGRhdGUgd2hpY2ggYWN0cyBhcyB0aGUgY3VycmVudCBkYXRlIGluc3RlYWQgb2YgdGhlIHJlYWwgY3VycmVudCBkYXRlLlxuICAgKiBPbmx5IHJlY29tbWVuZGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBub3codmFsdWU6IERhdGUgfCBudWxsKSB7XG4gICAgdGhpcy5fbm93ID0gZGVmYXVsdERhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbChkZWZhdWx0RGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodmFsdWUpKTtcbiAgfVxuICBwdWJsaWMgZ2V0IG5vdygpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX25vdztcbiAgfVxuICBwcml2YXRlIF9ub3c6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICBwcml2YXRlIF9nZXRBbGxEdXJhdGlvbihsZWdzOiBQdFJpZGVMZWdbXSk6IG51bWJlciB7XG4gICAgcmV0dXJuIGxlZ3M/LnJlZHVjZSgoc3VtOiBudW1iZXIsIGxlZykgPT4ge1xuICAgICAgY29uc3QgYXJyaXZhbE5vVHogPSByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5hcnJpdmFsPy50aW1lKTtcbiAgICAgIGNvbnN0IGRlcGFydHVyZU5vVHogPSByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5kZXBhcnR1cmU/LnRpbWUpO1xuICAgICAgaWYgKGFycml2YWxOb1R6ICYmIGRlcGFydHVyZU5vVHopIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBzdW0gK1xuICAgICAgICAgIGRpZmZlcmVuY2VJbk1pbnV0ZXMoXG4gICAgICAgICAgICByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKGxlZy5hcnJpdmFsLnRpbWUpISxcbiAgICAgICAgICAgIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmRlcGFydHVyZS50aW1lKSEsXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzQWxsQ2FuY2VsbGVkKGxlZ3M6IFB0UmlkZUxlZ1tdKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGxlZ3M/LmV2ZXJ5KChsZWcpID0+IGxlZz8uc2VydmljZUpvdXJuZXk/LnNlcnZpY2VBbHRlcmF0aW9uPy5jYW5jZWxsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UmVsYXRpdmVEdXJhdGlvbihsZWdzOiBQdFJpZGVMZWdbXSwgbGVnOiBQdFJpZGVMZWcpOiBudW1iZXIge1xuICAgIGNvbnN0IGFycml2YWxOb1R6ID0gcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuYXJyaXZhbD8udGltZSk7XG4gICAgY29uc3QgZGVwYXJ0dXJlTm9UeiA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmRlcGFydHVyZT8udGltZSk7XG4gICAgaWYgKGFycml2YWxOb1R6ICYmIGRlcGFydHVyZU5vVHopIHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gZGlmZmVyZW5jZUluTWludXRlcyhcbiAgICAgICAgcmVtb3ZlVGltZXpvbmVGcm9tSVNPVGltZVN0cmluZyhsZWcuYXJyaXZhbC50aW1lKSEsXG4gICAgICAgIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmRlcGFydHVyZS50aW1lKSEsXG4gICAgICApO1xuICAgICAgY29uc3QgYWxsRHVyYXRpb25zID0gdGhpcy5fZ2V0QWxsRHVyYXRpb24obGVncyk7XG5cbiAgICAgIGlmIChhbGxEdXJhdGlvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDEwMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIChkdXJhdGlvbiAvIGFsbER1cmF0aW9ucykgKiAxMDA7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0UHJvZ3Jlc3Mobm93OiBEYXRlLCBzdGFydD86IFRpbWUsIGVuZD86IFRpbWUpOiBudW1iZXIge1xuICAgIGlmICghc3RhcnQ/LnRpbWUgfHwgIWVuZD8udGltZSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRXaXRoRGVsYXkgPSBhZGRNaW51dGVzKHN0YXJ0LnRpbWUsIHN0YXJ0LmRlbGF5ID8/IDApO1xuICAgIGNvbnN0IGVuZFdpdGhEZWxheSA9IGFkZE1pbnV0ZXMoZW5kLnRpbWUsIGVuZC5kZWxheSA/PyAwKTtcbiAgICBjb25zdCB0b3RhbCA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMoZW5kV2l0aERlbGF5LCBzdGFydFdpdGhEZWxheSk7XG4gICAgY29uc3QgcHJvZ3Jlc3MgPSBkaWZmZXJlbmNlSW5NaW51dGVzKG5vdywgc3RhcnRXaXRoRGVsYXkpO1xuXG4gICAgcmV0dXJuIHRvdGFsICYmIChwcm9ncmVzcyAvIHRvdGFsKSAqIDEwMDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldFN0YXR1cyhub3c6IERhdGUsIHN0YXJ0PzogVGltZSwgZW5kPzogVGltZSk6IFN0YXR1cyB7XG4gICAgY29uc3Qgc3RhcnRXaXRoRGVsYXkgPSBzdGFydCAmJiBzdGFydC50aW1lICYmIGFkZE1pbnV0ZXMoc3RhcnQudGltZSwgc3RhcnQuZGVsYXkgPz8gMCk7XG4gICAgY29uc3QgZW5kV2l0aERlbGF5ID0gZW5kICYmIGVuZC50aW1lICYmIGFkZE1pbnV0ZXMoZW5kLnRpbWUsIGVuZC5kZWxheSA/PyAwKTtcblxuICAgIGlmIChcbiAgICAgIHN0YXJ0V2l0aERlbGF5ICYmXG4gICAgICBpc0JlZm9yZShzdGFydFdpdGhEZWxheSwgbm93KSAmJlxuICAgICAgZW5kV2l0aERlbGF5ICYmXG4gICAgICBpc0FmdGVyKGVuZFdpdGhEZWxheSwgbm93KVxuICAgICkge1xuICAgICAgcmV0dXJuICdwcm9ncmVzcyc7XG4gICAgfSBlbHNlIGlmIChlbmRXaXRoRGVsYXkgJiYgaXNCZWZvcmUoZW5kV2l0aERlbGF5LCBub3cpKSB7XG4gICAgICByZXR1cm4gJ3Bhc3QnO1xuICAgIH1cbiAgICByZXR1cm4gJ2Z1dHVyZSc7XG4gIH1cblxuICBwcml2YXRlIF9yZW5kZXJQb3NpdGlvbihub3c6IERhdGUsIHN0YXJ0PzogVGltZSwgZW5kPzogVGltZSk6IFRlbXBsYXRlUmVzdWx0IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSB0aGlzLl9nZXRQcm9ncmVzcyhub3csIHN0YXJ0LCBlbmQpO1xuICAgIGlmIChjdXJyZW50UG9zaXRpb24gPCAwICYmIGN1cnJlbnRQb3NpdGlvbiA+IDEwMCkgcmV0dXJuIHVuZGVmaW5lZDtcblxuICAgIGNvbnN0IHN0YXR1c1N0eWxlID0gKCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc2JiLXBlYXJsLWNoYWluLXN0YXR1cy1wb3NpdGlvbic6IGAke2N1cnJlbnRQb3NpdGlvbn0lYCxcbiAgICAgICAgLi4uKGN1cnJlbnRQb3NpdGlvbiA+PSA1MCA/IHsgdHJhbnNmb3JtOiBgdHJhbnNsYXRlWCgtMTAwJSlgIH0gOiB7fSksXG4gICAgICB9O1xuICAgIH07XG5cbiAgICBjb25zdCBhbmltYXRpb24gPSB0aGlzLmRpc2FibGVBbmltYXRpb24gPyAnc2JiLXBlYXJsLWNoYWluX19wb3NpdGlvbi0tbm8tYW5pbWF0aW9uJyA6ICcnO1xuXG4gICAgcmV0dXJuIGh0bWxgPHNwYW5cbiAgICAgIHN0eWxlPSR7c3R5bGVNYXAoc3RhdHVzU3R5bGUoKSl9XG4gICAgICBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fcG9zaXRpb24gJHthbmltYXRpb259XCJcbiAgICA+PC9zcGFuPmA7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBub3cgPSB0aGlzLm5vdyA/PyBuZXcgRGF0ZSgpO1xuXG4gICAgY29uc3QgcmlkZUxlZ3M6IFB0UmlkZUxlZ1tdID0gdGhpcy5sZWdzPy5maWx0ZXIoKGxlZykgPT4gaXNSaWRlTGVnKGxlZykpIGFzIFB0UmlkZUxlZ1tdO1xuXG4gICAgY29uc3QgZGVwYXJ0dXJlVGltZSA9XG4gICAgICByaWRlTGVncz8ubGVuZ3RoICYmIHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcocmlkZUxlZ3NbMF0/LmRlcGFydHVyZT8udGltZSk7XG4gICAgY29uc3QgZGVwYXJ0dXJlV2l0aERlbGF5ID0gZGVwYXJ0dXJlVGltZSAmJiB7XG4gICAgICB0aW1lOiBkZXBhcnR1cmVUaW1lLFxuICAgICAgZGVsYXk6IHJpZGVMZWdzWzBdLmRlcGFydHVyZS5kZWxheSA/PyAwLFxuICAgIH07XG5cbiAgICBjb25zdCBhcnJpdmFsVGltZSA9XG4gICAgICByaWRlTGVncz8ubGVuZ3RoICYmXG4gICAgICByZW1vdmVUaW1lem9uZUZyb21JU09UaW1lU3RyaW5nKHJpZGVMZWdzW3JpZGVMZWdzLmxlbmd0aCAtIDFdLmFycml2YWw/LnRpbWUpO1xuICAgIGNvbnN0IGFycml2YWxUaW1lRGVsYXkgPSBhcnJpdmFsVGltZSAmJiB7XG4gICAgICB0aW1lOiBhcnJpdmFsVGltZSxcbiAgICAgIGRlbGF5OiByaWRlTGVnc1tyaWRlTGVncy5sZW5ndGggLSAxXT8uYXJyaXZhbC5kZWxheSA/PyAwLFxuICAgIH07XG5cbiAgICBjb25zdCBkZXBhcnR1cmVOb3RTZXJ2aWNlZCA9ICgoKTogc3RyaW5nID0+IHtcbiAgICAgIHJldHVybiByaWRlTGVncyAmJlxuICAgICAgICByaWRlTGVnc1swXT8uc2VydmljZUpvdXJuZXk/LnN0b3BQb2ludHMgJiZcbiAgICAgICAgcmlkZUxlZ3NbMF0/LnNlcnZpY2VKb3VybmV5Py5zdG9wUG9pbnRzWzBdLnN0b3BTdGF0dXMgPT09ICdOT1RfU0VSVklDRUQnXG4gICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbi0tZGVwYXJ0dXJlLXNraXBwZWQnXG4gICAgICAgIDogJyc7XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IGFycml2YWxOb3RTZXJ2aWNlZCA9ICgoKTogc3RyaW5nID0+IHtcbiAgICAgIGNvbnN0IGxhc3RMZWcgPSByaWRlTGVncyAmJiByaWRlTGVnc1tyaWRlTGVncy5sZW5ndGggLSAxXTtcbiAgICAgIGNvbnN0IHN0b3BzID0gbGFzdExlZyAmJiBsYXN0TGVnLnNlcnZpY2VKb3VybmV5Py5zdG9wUG9pbnRzO1xuXG4gICAgICByZXR1cm4gc3RvcHMgJiYgc3RvcHNbc3RvcHMubGVuZ3RoIC0gMV0uc3RvcFN0YXR1cyA9PT0gJ05PVF9TRVJWSUNFRCdcbiAgICAgICAgPyAnc2JiLXBlYXJsLWNoYWluLS1hcnJpdmFsLXNraXBwZWQnXG4gICAgICAgIDogJyc7XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IGRlcGFydHVyZUNhbmNlbENsYXNzID0gKCgpOiBzdHJpbmcgPT4ge1xuICAgICAgcmV0dXJuIHJpZGVMZWdzICYmIHJpZGVMZWdzWzBdPy5zZXJ2aWNlSm91cm5leT8uc2VydmljZUFsdGVyYXRpb24/LmNhbmNlbGxlZFxuICAgICAgICA/ICdzYmItcGVhcmwtY2hhaW4tLWRlcGFydHVyZS1kaXNydXB0aW9uJ1xuICAgICAgICA6ICcnO1xuICAgIH0pKCk7XG5cbiAgICBjb25zdCBhcnJpdmFsQ2FuY2VsQ2xhc3MgPSAoKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gcmlkZUxlZ3MgJiYgcmlkZUxlZ3NbcmlkZUxlZ3MubGVuZ3RoIC0gMV0/LnNlcnZpY2VKb3VybmV5Py5zZXJ2aWNlQWx0ZXJhdGlvbj8uY2FuY2VsbGVkXG4gICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbi0tYXJyaXZhbC1kaXNydXB0aW9uJ1xuICAgICAgICA6ICcnO1xuICAgIH0pKCk7XG5cbiAgICBjb25zdCBzdGF0dXMgPVxuICAgICAgZGVwYXJ0dXJlV2l0aERlbGF5ICYmXG4gICAgICBhcnJpdmFsVGltZURlbGF5ICYmXG4gICAgICB0aGlzLl9nZXRTdGF0dXMobm93LCBkZXBhcnR1cmVXaXRoRGVsYXksIGFycml2YWxUaW1lRGVsYXkpO1xuXG4gICAgY29uc3Qgc3RhdHVzQ2xhc3NEZXBhcnR1cmUgPVxuICAgICAgcmlkZUxlZ3MgJiYgc3RhdHVzICYmICFkZXBhcnR1cmVDYW5jZWxDbGFzcyA/ICdzYmItcGVhcmwtY2hhaW5fX2J1bGxldC0tJyArIHN0YXR1cyA6ICcnO1xuXG4gICAgY29uc3Qgc3RhdHVzQ2xhc3NBcnJpdmFsID1cbiAgICAgIHJpZGVMZWdzICYmIHN0YXR1cyAmJiAhYXJyaXZhbENhbmNlbENsYXNzXG4gICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbl9fYnVsbGV0LS0nICsgdGhpcy5fZ2V0U3RhdHVzKG5vdywgdW5kZWZpbmVkLCBhcnJpdmFsVGltZURlbGF5KVxuICAgICAgICA6ICcnO1xuXG4gICAgaWYgKHRoaXMuX2lzQWxsQ2FuY2VsbGVkKHJpZGVMZWdzKSkge1xuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5cIj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fYnVsbGV0IHNiYi1wZWFybC1jaGFpbi0tZGVwYXJ0dXJlLWRpc3J1cHRpb25cIj48L3NwYW4+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fbGVnIHNiYi1wZWFybC1jaGFpbl9fbGVnLS1kaXNydXB0aW9uXCI+PC9kaXY+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX2J1bGxldCBzYmItcGVhcmwtY2hhaW4tLWRlcGFydHVyZS1kaXNydXB0aW9uXCI+PC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIGA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXBlYXJsLWNoYWluXCI+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgY2xhc3M9XCJzYmItcGVhcmwtY2hhaW5fX2J1bGxldCAke3N0YXR1c0NsYXNzRGVwYXJ0dXJlfSAke2RlcGFydHVyZU5vdFNlcnZpY2VkfSAke2RlcGFydHVyZUNhbmNlbENsYXNzfVwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICAgICR7cmlkZUxlZ3M/Lm1hcCgobGVnOiBQdFJpZGVMZWcsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICBjb25zdCB7IHN0b3BQb2ludHMsIHNlcnZpY2VBbHRlcmF0aW9uIH0gPSBsZWc/LnNlcnZpY2VKb3VybmV5IHx8IHt9O1xuXG4gICAgICAgICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLl9nZXRSZWxhdGl2ZUR1cmF0aW9uKHJpZGVMZWdzLCBsZWcpO1xuICAgICAgICAgIGNvbnN0IGRlcGFydHVyZSA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmRlcGFydHVyZT8udGltZSk7XG4gICAgICAgICAgY29uc3QgYXJyaXZhbCA9IHJlbW92ZVRpbWV6b25lRnJvbUlTT1RpbWVTdHJpbmcobGVnLmFycml2YWw/LnRpbWUpO1xuXG4gICAgICAgICAgY29uc3QgaXNBcnJpdmFsTm90U2VydmljZWQgPVxuICAgICAgICAgICAgc3RvcFBvaW50cyAmJiBzdG9wUG9pbnRzW3N0b3BQb2ludHMubGVuZ3RoIC0gMV0/LnN0b3BTdGF0dXMgPT09ICdOT1RfU0VSVklDRUQnO1xuICAgICAgICAgIGNvbnN0IGlzQXJyaXZhbFBsYW5uZWQgPVxuICAgICAgICAgICAgc3RvcFBvaW50cyAmJiBzdG9wUG9pbnRzW3N0b3BQb2ludHMubGVuZ3RoIC0gMV0/LnN0b3BTdGF0dXMgPT09ICdQTEFOTkVEJztcbiAgICAgICAgICBjb25zdCBpc0RlcGFydHVyZU5vdFNlcnZpY2VkID0gc3RvcFBvaW50cyAmJiBzdG9wUG9pbnRzWzBdPy5zdG9wU3RhdHVzID09PSAnTk9UX1NFUlZJQ0VEJztcblxuICAgICAgICAgIGNvbnN0IHN0b3BQb2ludHNCZWZvcmUgPSBpbmRleCA+IDAgJiYgcmlkZUxlZ3NbaW5kZXggLSAxXS5zZXJ2aWNlSm91cm5leS5zdG9wUG9pbnRzO1xuICAgICAgICAgIGNvbnN0IGlzQmVmb3JlTGVnQXJyaXZhbE5vdFNlcnZpY2VkID1cbiAgICAgICAgICAgIHN0b3BQb2ludHNCZWZvcmUgJiZcbiAgICAgICAgICAgIHN0b3BQb2ludHNCZWZvcmVbc3RvcFBvaW50c0JlZm9yZS5sZW5ndGggLSAxXT8uc3RvcFN0YXR1cyA9PT0gJ05PVF9TRVJWSUNFRCc7XG5cbiAgICAgICAgICBjb25zdCBza2lwcGVkTGVnID1cbiAgICAgICAgICAgIGlzQXJyaXZhbE5vdFNlcnZpY2VkIHx8IChpc0RlcGFydHVyZU5vdFNlcnZpY2VkICYmIGlzQXJyaXZhbFBsYW5uZWQpXG4gICAgICAgICAgICAgID8gJ3NiYi1wZWFybC1jaGFpbl9fbGVnLS1za2lwcGVkJ1xuICAgICAgICAgICAgICA6ICcnO1xuICAgICAgICAgIGNvbnN0IGRlcGFydHVyZVNraXBwZWRCdWxsZXQgPVxuICAgICAgICAgICAgaXNEZXBhcnR1cmVOb3RTZXJ2aWNlZCB8fCBpc0JlZm9yZUxlZ0Fycml2YWxOb3RTZXJ2aWNlZFxuICAgICAgICAgICAgICA/ICdzYmItcGVhcmwtY2hhaW5fX3N0b3AtLWRlcGFydHVyZS1za2lwcGVkJ1xuICAgICAgICAgICAgICA6ICcnO1xuXG4gICAgICAgICAgY29uc3QgY2FuY2VsbGVkID1cbiAgICAgICAgICAgIHNlcnZpY2VBbHRlcmF0aW9uPy5jYW5jZWxsZWQgfHwgc2VydmljZUFsdGVyYXRpb24/LnBhcnRpYWxseUNhbmNlbGxlZFxuICAgICAgICAgICAgICA/ICdzYmItcGVhcmwtY2hhaW5fX2xlZy0tZGlzcnVwdGlvbidcbiAgICAgICAgICAgICAgOiAnJztcblxuICAgICAgICAgIGNvbnN0IGxlZ0RlcGFydHVyZVdpdGhEZWxheSA9IHsgdGltZTogZGVwYXJ0dXJlLCBkZWxheTogbGVnLmRlcGFydHVyZT8uZGVsYXkgPz8gMCB9O1xuICAgICAgICAgIGNvbnN0IGxlZ0Fycml2YWxXaXRoRGVsYXkgPSB7IHRpbWU6IGFycml2YWwsIGRlbGF5OiBsZWcuYXJyaXZhbD8uZGVsYXkgPz8gMCB9O1xuICAgICAgICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuX2dldFN0YXR1cyhub3csIGxlZ0RlcGFydHVyZVdpdGhEZWxheSwgbGVnQXJyaXZhbFdpdGhEZWxheSk7XG5cbiAgICAgICAgICBjb25zdCBsZWdTdGF0dXMgPSAhY2FuY2VsbGVkICYmICFza2lwcGVkTGVnICYmICdzYmItcGVhcmwtY2hhaW5fX2xlZy0tJyArIHN0YXR1cztcbiAgICAgICAgICBjb25zdCBsZWdTdHlsZSA9ICgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0+IHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICctLXNiYi1wZWFybC1jaGFpbi1sZWctd2lkdGgnOiBgJHtkdXJhdGlvbn0lYCxcbiAgICAgICAgICAgICAgLi4uKHN0YXR1cyA9PT0gJ3Byb2dyZXNzJyAmJiAhY2FuY2VsbGVkICYmICFza2lwcGVkTGVnXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICctLXNiYi1wZWFybC1jaGFpbi1sZWctc3RhdHVzJzogYCR7dGhpcy5fZ2V0UHJvZ3Jlc3Mobm93LCBsZWdEZXBhcnR1cmVXaXRoRGVsYXksIGxlZ0Fycml2YWxXaXRoRGVsYXkpfSVgLFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge30pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGh0bWxgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19sZWcgJHtsZWdTdGF0dXMgfHwgJyd9ICR7Y2FuY2VsbGVkfSAke3NraXBwZWRMZWd9XCJcbiAgICAgICAgICAgIHN0eWxlPSR7c3R5bGVNYXAobGVnU3R5bGUoKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgJHtpbmRleCA+IDAgJiYgaW5kZXggPCByaWRlTGVncy5sZW5ndGhcbiAgICAgICAgICAgICAgPyBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXBlYXJsLWNoYWluX19zdG9wICR7ZGVwYXJ0dXJlU2tpcHBlZEJ1bGxldH1cIj48L3NwYW4+YFxuICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAke3N0YXR1cyA9PT0gJ3Byb2dyZXNzJyAmJiAhY2FuY2VsbGVkICYmICFza2lwcGVkTGVnXG4gICAgICAgICAgICAgID8gdGhpcy5fcmVuZGVyUG9zaXRpb24obm93LCBsZWdEZXBhcnR1cmVXaXRoRGVsYXksIGxlZ0Fycml2YWxXaXRoRGVsYXkpXG4gICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICA8L2Rpdj5gO1xuICAgICAgICB9KX1cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBjbGFzcz1cInNiYi1wZWFybC1jaGFpbl9fYnVsbGV0ICR7c3RhdHVzQ2xhc3NBcnJpdmFsfSAke2Fycml2YWxOb3RTZXJ2aWNlZH0gJHthcnJpdmFsQ2FuY2VsQ2xhc3N9XCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1wZWFybC1jaGFpbic6IFNiYlBlYXJsQ2hhaW5FbGVtZW50O1xuICB9XG59XG4iXSwibmFtZXMiOlsic3RhdHVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFvQk8sU0FBUyxRQUFRLE1BQU0sZUFBZTtBQUMzQyxTQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLGFBQWE7QUFDOUM7QUNGTyxTQUFTLFNBQVMsTUFBTSxlQUFlO0FBQzVDLFNBQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sYUFBYTtBQUM5Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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