@sbb-esta/lyne-elements-dev 4.7.0-dev.1773388991 → 4.7.0-dev.1773393164

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 (1406) hide show
  1. package/accordion/accordion.component.js +98 -2
  2. package/accordion.js +4 -5
  3. package/accordion.pure.js +4 -2
  4. package/action-group/action-group.component.js +107 -2
  5. package/action-group.js +4 -5
  6. package/action-group.pure.js +4 -2
  7. package/alert/alert/alert.component.js +143 -2
  8. package/alert/alert-group/alert-group.component.js +103 -2
  9. package/alert/alert-group.js +7 -4
  10. package/alert/alert.js +7 -4
  11. package/alert.js +8 -6
  12. package/alert.pure.js +6 -3
  13. package/autocomplete/autocomplete-base-element.js +373 -2
  14. package/autocomplete/autocomplete.component.js +50 -51
  15. package/autocomplete.js +7 -7
  16. package/autocomplete.pure.js +6 -3
  17. package/breadcrumb/breadcrumb/breadcrumb.component.js +20 -2
  18. package/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +135 -2
  19. package/breadcrumb/breadcrumb-group.js +7 -4
  20. package/breadcrumb/breadcrumb.js +7 -4
  21. package/breadcrumb.js +8 -6
  22. package/breadcrumb.pure.js +6 -3
  23. package/button/accent-button/accent-button.component.js +14 -18
  24. package/button/accent-button-link/accent-button-link.component.js +14 -18
  25. package/button/accent-button-link.js +4 -4
  26. package/button/accent-button-static/accent-button-static.component.js +13 -17
  27. package/button/accent-button-static.js +4 -4
  28. package/button/accent-button.js +4 -4
  29. package/button/button/button.component.js +14 -18
  30. package/button/button-link/button-link.component.js +14 -18
  31. package/button/button-link.js +4 -4
  32. package/button/button-static/button-static.component.js +14 -18
  33. package/button/button-static.js +4 -4
  34. package/button/button.js +4 -4
  35. package/button/common/button-common.js +67 -81
  36. package/button/common.js +12 -3
  37. package/button/mini-button/mini-button.component.js +18 -22
  38. package/button/mini-button-group/mini-button-group.component.js +68 -2
  39. package/button/mini-button-group.js +6 -6
  40. package/button/mini-button-link/mini-button-link.component.js +27 -2
  41. package/button/mini-button-link.js +6 -6
  42. package/button/mini-button.js +4 -4
  43. package/button/secondary-button/secondary-button.component.js +14 -18
  44. package/button/secondary-button-link/secondary-button-link.component.js +14 -18
  45. package/button/secondary-button-link.js +6 -6
  46. package/button/secondary-button-static/secondary-button-static.component.js +14 -18
  47. package/button/secondary-button-static.js +4 -4
  48. package/button/secondary-button.js +6 -6
  49. package/button/transparent-button/transparent-button.component.js +14 -18
  50. package/button/transparent-button-link/transparent-button-link.component.js +14 -18
  51. package/button/transparent-button-link.js +6 -6
  52. package/button/transparent-button-static/transparent-button-static.component.js +14 -18
  53. package/button/transparent-button-static.js +4 -4
  54. package/button/transparent-button.js +4 -4
  55. package/button.js +56 -20
  56. package/button.pure.js +42 -18
  57. package/calendar/calendar/calendar.component.js +1227 -2
  58. package/calendar/calendar-day/calendar-day.component.js +98 -2
  59. package/calendar/calendar-day.js +7 -4
  60. package/calendar/calendar.js +9 -4
  61. package/calendar.js +10 -6
  62. package/calendar.pure.js +7 -3
  63. package/card/card/card.component.js +48 -2
  64. package/card/card-badge/card-badge.component.js +48 -2
  65. package/card/card-badge.js +7 -4
  66. package/card/card-button/card-button.component.js +10 -11
  67. package/card/card-button.js +6 -3
  68. package/card/card-link/card-link.component.js +10 -11
  69. package/card/card-link.js +6 -3
  70. package/card/card.js +7 -4
  71. package/card/common/card-action-common.js +63 -2
  72. package/card/common.js +6 -5
  73. package/card.js +16 -9
  74. package/card.pure.js +11 -5
  75. package/carousel/carousel/carousel.component.js +88 -2
  76. package/carousel/carousel-item/carousel-item.component.js +18 -2
  77. package/carousel/carousel-item.js +7 -4
  78. package/carousel/carousel-list/carousel-list.component.js +90 -2
  79. package/carousel/carousel-list.js +7 -4
  80. package/carousel/carousel.js +7 -4
  81. package/carousel.js +11 -7
  82. package/carousel.pure.js +8 -4
  83. package/checkbox/checkbox-group.js +3 -2
  84. package/checkbox/checkbox-panel.js +3 -2
  85. package/checkbox/checkbox.component.js +91 -3
  86. package/checkbox/checkbox.js +7 -5
  87. package/checkbox/common/checkbox-common.js +57 -2
  88. package/checkbox/common.js +7 -5
  89. package/checkbox-group/checkbox-group.component.js +101 -2
  90. package/checkbox-group.js +4 -5
  91. package/checkbox-group.pure.js +4 -2
  92. package/checkbox-panel/checkbox-panel.component.js +48 -63
  93. package/checkbox-panel.js +3 -4
  94. package/checkbox-panel.pure.js +4 -2
  95. package/checkbox.js +14 -10
  96. package/checkbox.pure.js +7 -3
  97. package/chip/chip/chip.component.js +73 -2
  98. package/chip/chip-group/chip-group.component.js +253 -2
  99. package/chip/chip-group.js +7 -4
  100. package/chip/chip.js +7 -4
  101. package/chip-label/chip-label.component.js +56 -2
  102. package/chip-label.js +4 -5
  103. package/chip-label.pure.js +4 -2
  104. package/chip.js +8 -6
  105. package/chip.pure.js +6 -3
  106. package/clock/clock.component.js +153 -2
  107. package/clock.js +4 -5
  108. package/clock.pure.js +4 -2
  109. package/container/container/container.component.js +76 -2
  110. package/container/container.js +7 -4
  111. package/container/sticky-bar/sticky-bar.component.js +122 -2
  112. package/container/sticky-bar.js +7 -4
  113. package/container.js +8 -6
  114. package/container.pure.js +6 -3
  115. package/core/a11y/arrow-navigation.js +33 -45
  116. package/core/a11y/fake-event-detection.js +9 -8
  117. package/core/a11y/focus-trap-controller.js +91 -69
  118. package/core/a11y/focus-visible-within-controller.js +18 -18
  119. package/core/a11y/focus.js +13 -13
  120. package/core/a11y/input-modality-detector.js +47 -42
  121. package/core/a11y/interactivity-checker.js +96 -61
  122. package/core/a11y/live-announcer.js +40 -29
  123. package/core/a11y.js +26 -9
  124. package/core/base-elements/action-base-element.js +37 -29
  125. package/core/base-elements/button-base-element.js +145 -165
  126. package/core/base-elements/element.js +63 -28
  127. package/core/base-elements/link-base-element.js +119 -186
  128. package/core/base-elements/open-close-base-element.js +42 -40
  129. package/core/base-elements.js +13 -6
  130. package/core/config/config.js +9 -8
  131. package/core/config.js +5 -2
  132. package/core/controllers/escapable-overlay-controller.js +25 -23
  133. package/core/controllers/id-reference-controller.js +59 -50
  134. package/core/controllers/inert-controller.js +57 -55
  135. package/core/controllers/language-controller.js +38 -53
  136. package/core/controllers/media-matchers-controller.js +96 -82
  137. package/core/controllers/overlay-position-controller.js +222 -215
  138. package/core/controllers/property-watcher-controller.js +59 -55
  139. package/core/controllers/slot-state-controller.js +36 -34
  140. package/core/controllers.js +28 -7
  141. package/core/datetime/date-adapter.js +135 -61
  142. package/core/datetime/native-date-adapter.js +140 -91
  143. package/core/datetime/temporal-date-adapter.js +144 -108
  144. package/core/datetime.js +16 -4
  145. package/core/decorators/base.js +1 -0
  146. package/core/decorators/force-type.js +16 -12
  147. package/core/decorators/get-override.js +13 -10
  148. package/core/decorators/handle-distinct-change.js +15 -12
  149. package/core/decorators/host-attributes.js +16 -15
  150. package/core/decorators/id-reference.js +75 -65
  151. package/core/decorators/omit-empty-converter.js +9 -7
  152. package/core/decorators/plain-date.js +25 -21
  153. package/core/decorators.js +17 -8
  154. package/core/dom/animation.js +9 -8
  155. package/core/dom/contains-pierce-shadow-dom.js +11 -10
  156. package/core/dom/lean-context.js +4 -4
  157. package/core/dom/platform.js +18 -8
  158. package/core/dom/queue-dom-content-loaded.js +6 -6
  159. package/core/dom/scroll.js +16 -14
  160. package/core/dom/set-or-remove-attribute.js +5 -5
  161. package/core/dom.js +25 -6
  162. package/core/eventing/composed-path-has-attribute.js +7 -6
  163. package/core/eventing/event-target.js +5 -5
  164. package/core/eventing/form-element-handlers.js +5 -5
  165. package/core/eventing/forward-event.js +6 -6
  166. package/core/eventing/is-event-prevented.js +5 -5
  167. package/core/eventing/throttle.js +10 -10
  168. package/core/eventing.js +14 -7
  169. package/core/i18n/i18n.js +738 -634
  170. package/core/i18n.js +104 -2
  171. package/core/images.js +14 -14
  172. package/core/interfaces.js +1 -0
  173. package/core/mixins/animation-complete-mixin.js +42 -34
  174. package/core/mixins/constructor.js +1 -0
  175. package/core/mixins/disabled-mixin.js +74 -91
  176. package/core/mixins/element-internals-mixin.js +155 -149
  177. package/core/mixins/form-associated-checkbox-mixin.js +93 -106
  178. package/core/mixins/form-associated-input-mixin.js +193 -202
  179. package/core/mixins/form-associated-mixin.js +226 -168
  180. package/core/mixins/form-associated-radio-button-mixin.js +168 -152
  181. package/core/mixins/hydration-mixin.js +37 -27
  182. package/core/mixins/named-slot-list-mixin.js +95 -77
  183. package/core/mixins/negative-mixin.js +33 -45
  184. package/core/mixins/panel-mixin.js +70 -109
  185. package/core/mixins/readonly-mixin.js +34 -40
  186. package/core/mixins/required-mixin.js +35 -48
  187. package/core/mixins/selection-panel-mixin.js +39 -36
  188. package/core/mixins/update-scheduler-mixin.js +21 -20
  189. package/core/mixins.js +41 -21
  190. package/core/overlay/overlay-option-panel.js +16 -15
  191. package/core/overlay/overlay-outside-pointer-event-listener.js +37 -34
  192. package/core/overlay/overlay-trigger-attributes.js +14 -11
  193. package/core/overlay/overlay.js +6 -6
  194. package/core/overlay/position.js +49 -53
  195. package/core/overlay.js +19 -6
  196. package/core/styles.js +5 -5
  197. package/core/testing/event-spy.js +50 -46
  198. package/core/testing/mocha-extensions.js +10 -7
  199. package/core/testing/wait-for-condition.js +12 -10
  200. package/core/testing/wait-for-image-ready.js +16 -15
  201. package/core/testing/wait-for-render.js +13 -12
  202. package/core/testing.js +14 -6
  203. package/custom-elements.json +31 -31
  204. package/date-input/date-input.component.js +166 -2
  205. package/date-input.js +4 -5
  206. package/date-input.pure.js +4 -2
  207. package/datepicker/common/datepicker-button.js +102 -2
  208. package/datepicker/common.js +8 -5
  209. package/datepicker/datepicker/datepicker.component.js +120 -2
  210. package/datepicker/datepicker-next-day/datepicker-next-day.component.js +23 -27
  211. package/datepicker/datepicker-next-day.js +6 -3
  212. package/datepicker/datepicker-previous-day/datepicker-previous-day.component.js +23 -27
  213. package/datepicker/datepicker-previous-day.js +6 -3
  214. package/datepicker/datepicker-toggle/datepicker-toggle.component.js +51 -66
  215. package/datepicker/datepicker-toggle.js +6 -3
  216. package/datepicker/datepicker.js +7 -4
  217. package/datepicker.js +18 -9
  218. package/datepicker.pure.js +13 -5
  219. package/development/accordion/accordion.component.js +132 -2
  220. package/development/accordion.js +5 -8
  221. package/development/accordion.pure.js +5 -2
  222. package/development/action-group/action-group.component.js +305 -2
  223. package/development/action-group.js +5 -8
  224. package/development/action-group.pure.js +5 -2
  225. package/development/alert/alert/alert.component.js +385 -2
  226. package/development/alert/alert-group/alert-group.component.js +166 -2
  227. package/development/alert/alert-group.js +5 -7
  228. package/development/alert/alert.js +5 -7
  229. package/development/alert.js +7 -9
  230. package/development/alert.pure.js +7 -3
  231. package/development/autocomplete/autocomplete-base-element.js +897 -2
  232. package/development/autocomplete/autocomplete.component.js +72 -82
  233. package/development/autocomplete.js +6 -8
  234. package/development/autocomplete.pure.js +6 -2
  235. package/development/breadcrumb/breadcrumb/breadcrumb.component.js +77 -2
  236. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.js +263 -2
  237. package/development/breadcrumb/breadcrumb-group.js +5 -7
  238. package/development/breadcrumb/breadcrumb.js +5 -7
  239. package/development/breadcrumb.js +7 -9
  240. package/development/breadcrumb.pure.js +7 -3
  241. package/development/button/accent-button/accent-button.component.js +13 -24
  242. package/development/button/accent-button-link/accent-button-link.component.js +13 -24
  243. package/development/button/accent-button-link.js +7 -9
  244. package/development/button/accent-button-static/accent-button-static.component.js +13 -24
  245. package/development/button/accent-button-static.js +7 -9
  246. package/development/button/accent-button.js +7 -9
  247. package/development/button/button/button.component.js +12 -23
  248. package/development/button/button-link/button-link.component.js +12 -23
  249. package/development/button/button-link.js +7 -9
  250. package/development/button/button-static/button-static.component.js +12 -23
  251. package/development/button/button-static.js +7 -9
  252. package/development/button/button.js +7 -9
  253. package/development/button/common/button-common.js +85 -104
  254. package/development/button/common.js +12 -2
  255. package/development/button/mini-button/mini-button.component.js +17 -28
  256. package/development/button/mini-button-group/mini-button-group.component.js +141 -2
  257. package/development/button/mini-button-group.js +7 -9
  258. package/development/button/mini-button-link/mini-button-link.component.js +34 -2
  259. package/development/button/mini-button-link.js +7 -9
  260. package/development/button/mini-button.js +7 -9
  261. package/development/button/secondary-button/secondary-button.component.js +12 -23
  262. package/development/button/secondary-button-link/secondary-button-link.component.js +12 -23
  263. package/development/button/secondary-button-link.js +7 -9
  264. package/development/button/secondary-button-static/secondary-button-static.component.js +12 -23
  265. package/development/button/secondary-button-static.js +7 -9
  266. package/development/button/secondary-button.js +7 -9
  267. package/development/button/transparent-button/transparent-button.component.js +12 -23
  268. package/development/button/transparent-button-link/transparent-button-link.component.js +12 -23
  269. package/development/button/transparent-button-link.js +7 -9
  270. package/development/button/transparent-button-static/transparent-button-static.component.js +12 -23
  271. package/development/button/transparent-button-static.js +7 -9
  272. package/development/button/transparent-button.js +7 -9
  273. package/development/button.js +29 -10
  274. package/development/button.pure.js +29 -4
  275. package/development/calendar/calendar/calendar.component.js +1984 -2
  276. package/development/calendar/calendar-day/calendar-day.component.js +248 -2
  277. package/development/calendar/calendar-day.js +5 -7
  278. package/development/calendar/calendar.js +7 -7
  279. package/development/calendar.js +9 -9
  280. package/development/calendar.pure.js +8 -3
  281. package/development/card/card/card.component.js +233 -2
  282. package/development/card/card-badge/card-badge.component.js +119 -2
  283. package/development/card/card-badge.js +5 -7
  284. package/development/card/card-button/card-button.component.js +11 -19
  285. package/development/card/card-button.js +4 -6
  286. package/development/card/card-link/card-link.component.js +11 -19
  287. package/development/card/card-link.js +4 -6
  288. package/development/card/card.js +5 -7
  289. package/development/card/common/card-action-common.js +121 -2
  290. package/development/card/common.js +5 -6
  291. package/development/card.js +11 -10
  292. package/development/card.pure.js +11 -4
  293. package/development/carousel/carousel/carousel.component.js +160 -2
  294. package/development/carousel/carousel-item/carousel-item.component.js +32 -2
  295. package/development/carousel/carousel-item.js +5 -7
  296. package/development/carousel/carousel-list/carousel-list.component.js +157 -2
  297. package/development/carousel/carousel-list.js +5 -7
  298. package/development/carousel/carousel.js +5 -7
  299. package/development/carousel.js +9 -10
  300. package/development/carousel.pure.js +9 -4
  301. package/development/checkbox/checkbox-group.js +1 -5
  302. package/development/checkbox/checkbox-panel.js +1 -5
  303. package/development/checkbox/checkbox.component.js +141 -3
  304. package/development/checkbox/checkbox.js +5 -8
  305. package/development/checkbox/common/checkbox-common.js +137 -2
  306. package/development/checkbox/common.js +6 -6
  307. package/development/checkbox-group/checkbox-group.component.js +212 -2
  308. package/development/checkbox-group.js +5 -8
  309. package/development/checkbox-group.pure.js +5 -2
  310. package/development/checkbox-panel/checkbox-panel.component.js +54 -81
  311. package/development/checkbox-panel.js +4 -7
  312. package/development/checkbox-panel.pure.js +4 -1
  313. package/development/checkbox.js +11 -12
  314. package/development/checkbox.pure.js +8 -3
  315. package/development/chip/chip/chip.component.js +164 -2
  316. package/development/chip/chip-group/chip-group.component.js +447 -2
  317. package/development/chip/chip-group.js +5 -7
  318. package/development/chip/chip.js +5 -7
  319. package/development/chip-label/chip-label.component.js +131 -2
  320. package/development/chip-label.js +5 -8
  321. package/development/chip-label.pure.js +5 -2
  322. package/development/chip.js +7 -9
  323. package/development/chip.pure.js +7 -3
  324. package/development/clock/clock.component.js +362 -2
  325. package/development/clock.js +5 -8
  326. package/development/clock.pure.js +5 -2
  327. package/development/container/container/container.component.js +182 -2
  328. package/development/container/container.js +5 -7
  329. package/development/container/sticky-bar/sticky-bar.component.js +357 -2
  330. package/development/container/sticky-bar.js +5 -7
  331. package/development/container.js +7 -9
  332. package/development/container.pure.js +7 -3
  333. package/development/core/a11y/arrow-navigation.js +28 -67
  334. package/development/core/a11y/fake-event-detection.js +8 -10
  335. package/development/core/a11y/focus-trap-controller.js +120 -104
  336. package/development/core/a11y/focus-visible-within-controller.js +24 -25
  337. package/development/core/a11y/focus.js +13 -14
  338. package/development/core/a11y/input-modality-detector.js +75 -128
  339. package/development/core/a11y/interactivity-checker.js +108 -115
  340. package/development/core/a11y/live-announcer.js +80 -76
  341. package/development/core/a11y.js +21 -3
  342. package/development/core/base-elements/action-base-element.js +42 -37
  343. package/development/core/base-elements/button-base-element.js +205 -247
  344. package/development/core/base-elements/element.js +67 -69
  345. package/development/core/base-elements/link-base-element.js +150 -226
  346. package/development/core/base-elements/open-close-base-element.js +49 -54
  347. package/development/core/base-elements.js +10 -2
  348. package/development/core/config/config.js +11 -9
  349. package/development/core/config.js +5 -1
  350. package/development/core/controllers/escapable-overlay-controller.js +36 -34
  351. package/development/core/controllers/id-reference-controller.js +81 -76
  352. package/development/core/controllers/inert-controller.js +105 -99
  353. package/development/core/controllers/language-controller.js +66 -76
  354. package/development/core/controllers/media-matchers-controller.js +138 -145
  355. package/development/core/controllers/overlay-position-controller.js +283 -297
  356. package/development/core/controllers/property-watcher-controller.js +119 -94
  357. package/development/core/controllers/slot-state-controller.js +63 -75
  358. package/development/core/controllers.js +23 -1
  359. package/development/core/datetime/date-adapter.js +166 -143
  360. package/development/core/datetime/native-date-adapter.js +148 -142
  361. package/development/core/datetime/temporal-date-adapter.js +149 -162
  362. package/development/core/datetime.js +14 -1
  363. package/development/core/decorators/base.js +2 -0
  364. package/development/core/decorators/force-type.js +27 -24
  365. package/development/core/decorators/get-override.js +17 -17
  366. package/development/core/decorators/handle-distinct-change.js +21 -20
  367. package/development/core/decorators/host-attributes.js +26 -37
  368. package/development/core/decorators/id-reference.js +114 -115
  369. package/development/core/decorators/omit-empty-converter.js +9 -13
  370. package/development/core/decorators/plain-date.js +31 -36
  371. package/development/core/decorators.js +11 -1
  372. package/development/core/dom/animation.js +9 -8
  373. package/development/core/dom/contains-pierce-shadow-dom.js +12 -12
  374. package/development/core/dom/lean-context.js +5 -9
  375. package/development/core/dom/platform.js +28 -35
  376. package/development/core/dom/queue-dom-content-loaded.js +10 -11
  377. package/development/core/dom/scroll.js +34 -34
  378. package/development/core/dom/set-or-remove-attribute.js +9 -13
  379. package/development/core/dom.js +21 -1
  380. package/development/core/eventing/composed-path-has-attribute.js +10 -17
  381. package/development/core/eventing/event-target.js +5 -7
  382. package/development/core/eventing/form-element-handlers.js +7 -10
  383. package/development/core/eventing/forward-event.js +7 -12
  384. package/development/core/eventing/is-event-prevented.js +6 -8
  385. package/development/core/eventing/throttle.js +17 -16
  386. package/development/core/eventing.js +9 -1
  387. package/development/core/i18n/i18n.js +875 -770
  388. package/development/core/i18n.js +104 -1
  389. package/development/core/images.js +15 -20
  390. package/development/core/interfaces.js +2 -0
  391. package/development/core/mixins/animation-complete-mixin.js +51 -55
  392. package/development/core/mixins/constructor.js +2 -0
  393. package/development/core/mixins/disabled-mixin.js +101 -124
  394. package/development/core/mixins/element-internals-mixin.js +225 -212
  395. package/development/core/mixins/form-associated-checkbox-mixin.js +141 -160
  396. package/development/core/mixins/form-associated-input-mixin.js +314 -334
  397. package/development/core/mixins/form-associated-mixin.js +279 -287
  398. package/development/core/mixins/form-associated-radio-button-mixin.js +247 -260
  399. package/development/core/mixins/hydration-mixin.js +55 -58
  400. package/development/core/mixins/named-slot-list-mixin.js +114 -116
  401. package/development/core/mixins/negative-mixin.js +41 -56
  402. package/development/core/mixins/panel-mixin.js +93 -142
  403. package/development/core/mixins/readonly-mixin.js +43 -54
  404. package/development/core/mixins/required-mixin.js +46 -65
  405. package/development/core/mixins/selection-panel-mixin.js +55 -50
  406. package/development/core/mixins/update-scheduler-mixin.js +25 -30
  407. package/development/core/mixins.js +29 -10
  408. package/development/core/overlay/overlay-option-panel.js +26 -34
  409. package/development/core/overlay/overlay-outside-pointer-event-listener.js +60 -64
  410. package/development/core/overlay/overlay-trigger-attributes.js +39 -42
  411. package/development/core/overlay/overlay.js +5 -10
  412. package/development/core/overlay/position.js +117 -143
  413. package/development/core/overlay.js +16 -2
  414. package/development/core/styles.js +5 -6
  415. package/development/core/testing/event-spy.js +67 -66
  416. package/development/core/testing/mocha-extensions.js +13 -15
  417. package/development/core/testing/wait-for-condition.js +17 -14
  418. package/development/core/testing/wait-for-image-ready.js +27 -20
  419. package/development/core/testing/wait-for-render.js +18 -30
  420. package/development/core/testing.js +10 -1
  421. package/development/date-input/date-input.component.js +278 -2
  422. package/development/date-input.js +5 -8
  423. package/development/date-input.pure.js +5 -2
  424. package/development/datepicker/common/datepicker-button.js +155 -2
  425. package/development/datepicker/common.js +7 -6
  426. package/development/datepicker/datepicker/datepicker.component.js +180 -2
  427. package/development/datepicker/datepicker-next-day/datepicker-next-day.component.js +30 -35
  428. package/development/datepicker/datepicker-next-day.js +4 -6
  429. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.component.js +30 -35
  430. package/development/datepicker/datepicker-previous-day.js +4 -6
  431. package/development/datepicker/datepicker-toggle/datepicker-toggle.component.js +67 -79
  432. package/development/datepicker/datepicker-toggle.js +4 -6
  433. package/development/datepicker/datepicker.js +5 -7
  434. package/development/datepicker.js +12 -9
  435. package/development/datepicker.pure.js +12 -3
  436. package/development/dialog/dialog/dialog.component.js +383 -2
  437. package/development/dialog/dialog-actions/dialog-actions.component.js +42 -2
  438. package/development/dialog/dialog-actions.js +5 -7
  439. package/development/dialog/dialog-close-button/dialog-close-button.component.js +36 -2
  440. package/development/dialog/dialog-close-button.js +5 -7
  441. package/development/dialog/dialog-content/dialog-content.component.js +31 -2
  442. package/development/dialog/dialog-content.js +5 -7
  443. package/development/dialog/dialog-title/dialog-title.component.js +39 -2
  444. package/development/dialog/dialog-title.js +5 -7
  445. package/development/dialog/dialog.js +8 -7
  446. package/development/dialog.js +16 -12
  447. package/development/dialog.pure.js +16 -6
  448. package/development/divider/divider.component.js +73 -2
  449. package/development/divider.js +5 -8
  450. package/development/divider.pure.js +5 -2
  451. package/development/expansion-panel/expansion-panel/expansion-panel.component.js +417 -2
  452. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.js +70 -2
  453. package/development/expansion-panel/expansion-panel-content.js +5 -7
  454. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +170 -2
  455. package/development/expansion-panel/expansion-panel-header.js +5 -7
  456. package/development/expansion-panel/expansion-panel.js +5 -7
  457. package/development/expansion-panel.js +9 -10
  458. package/development/expansion-panel.pure.js +9 -4
  459. package/development/file-selector/common/file-selector-common.js +431 -2
  460. package/development/file-selector/common.js +6 -6
  461. package/development/file-selector/file-selector/file-selector.component.js +18 -27
  462. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +126 -2
  463. package/development/file-selector/file-selector-dropzone.js +5 -7
  464. package/development/file-selector/file-selector.js +4 -6
  465. package/development/file-selector.js +9 -9
  466. package/development/file-selector.pure.js +9 -3
  467. package/development/flip-card/flip-card/flip-card.component.js +306 -2
  468. package/development/flip-card/flip-card-details/flip-card-details.component.js +69 -2
  469. package/development/flip-card/flip-card-details.js +5 -7
  470. package/development/flip-card/flip-card-summary/flip-card-summary.component.js +124 -2
  471. package/development/flip-card/flip-card-summary.js +5 -7
  472. package/development/flip-card/flip-card.js +5 -7
  473. package/development/flip-card.js +9 -10
  474. package/development/flip-card.pure.js +9 -4
  475. package/development/footer/footer.component.js +251 -2
  476. package/development/footer.js +5 -8
  477. package/development/footer.pure.js +5 -2
  478. package/development/form-field/error/error.component.js +83 -2
  479. package/development/form-field/error.js +5 -7
  480. package/development/form-field/form-field/form-field.component.js +892 -2
  481. package/development/form-field/form-field-clear/form-field-clear.component.js +41 -49
  482. package/development/form-field/form-field-clear.js +4 -6
  483. package/development/form-field/form-field.js +7 -7
  484. package/development/form-field.js +10 -9
  485. package/development/form-field.pure.js +9 -3
  486. package/development/header/common/header-action-common.js +329 -2
  487. package/development/header/common.js +5 -6
  488. package/development/header/header/header.component.js +385 -2
  489. package/development/header/header-button/header-button.component.js +7 -15
  490. package/development/header/header-button.js +4 -6
  491. package/development/header/header-environment/header-environment.component.js +88 -2
  492. package/development/header/header-environment.js +5 -7
  493. package/development/header/header-link/header-link.component.js +7 -15
  494. package/development/header/header-link.js +4 -6
  495. package/development/header/header.js +5 -7
  496. package/development/header.js +11 -10
  497. package/development/header.pure.js +11 -4
  498. package/development/icon/icon-base.js +174 -2
  499. package/development/icon/icon-name-mixin.js +59 -75
  500. package/development/icon/icon-request.js +38 -31
  501. package/development/icon/icon-validate.js +45 -36
  502. package/development/icon/icon.component.js +94 -119
  503. package/development/icon-sidebar/icon-sidebar/icon-sidebar.component.js +74 -2
  504. package/development/icon-sidebar/icon-sidebar-button/icon-sidebar-button.component.js +15 -25
  505. package/development/icon-sidebar/icon-sidebar-button.js +4 -6
  506. package/development/icon-sidebar/icon-sidebar-container/icon-sidebar-container.component.js +30 -2
  507. package/development/icon-sidebar/icon-sidebar-container.js +5 -7
  508. package/development/icon-sidebar/icon-sidebar-content/icon-sidebar-content.component.js +22 -2
  509. package/development/icon-sidebar/icon-sidebar-content.js +5 -7
  510. package/development/icon-sidebar/icon-sidebar-link/icon-sidebar-link.component.js +15 -25
  511. package/development/icon-sidebar/icon-sidebar-link.js +4 -6
  512. package/development/icon-sidebar/icon-sidebar.js +5 -7
  513. package/development/icon-sidebar-button-common-DR6eQvkq.js +93 -0
  514. package/development/icon-sidebar.js +11 -10
  515. package/development/icon-sidebar.pure.js +11 -4
  516. package/development/icon.js +12 -10
  517. package/development/icon.pure.js +12 -4
  518. package/development/image/image.component.js +648 -2
  519. package/development/image.js +5 -8
  520. package/development/image.pure.js +5 -2
  521. package/development/journey-header/journey-header.component.js +158 -2
  522. package/development/journey-header.js +5 -8
  523. package/development/journey-header.pure.js +5 -2
  524. package/development/lead-container/lead-container.component.js +108 -2
  525. package/development/lead-container.js +5 -8
  526. package/development/lead-container.pure.js +5 -2
  527. package/development/link/block-link/block-link.component.js +7 -15
  528. package/development/link/block-link-button/block-link-button.component.js +7 -15
  529. package/development/link/block-link-button.js +7 -9
  530. package/development/link/block-link-static/block-link-static.component.js +7 -15
  531. package/development/link/block-link-static.js +7 -9
  532. package/development/link/block-link.js +7 -9
  533. package/development/link/common/block-link-common.js +124 -3
  534. package/development/link/common/inline-link-common.js +44 -3
  535. package/development/link/common/link-common.js +10 -2
  536. package/development/link/common.js +9 -4
  537. package/development/link/link/link.component.js +7 -14
  538. package/development/link/link-button/link-button.component.js +7 -14
  539. package/development/link/link-button.js +7 -9
  540. package/development/link/link-static/link-static.component.js +7 -14
  541. package/development/link/link-static.js +7 -9
  542. package/development/link/link.js +7 -9
  543. package/development/link-common-d27fHmQw.js +111 -0
  544. package/development/link-list/common/link-list-base.js +131 -2
  545. package/development/link-list/common.js +6 -6
  546. package/development/link-list/link-list-anchor.js +5 -8
  547. package/development/link-list/link-list.component.js +152 -3
  548. package/development/link-list/link-list.js +5 -8
  549. package/development/link-list-anchor/link-list-anchor.component.js +61 -2
  550. package/development/link-list-anchor.js +5 -8
  551. package/development/link-list-anchor.pure.js +5 -2
  552. package/development/link-list.js +9 -11
  553. package/development/link-list.pure.js +8 -3
  554. package/development/link.js +15 -10
  555. package/development/link.pure.js +15 -5
  556. package/development/loading-indicator/loading-indicator.component.js +248 -2
  557. package/development/loading-indicator-circle/loading-indicator-circle.component.js +135 -2
  558. package/development/loading-indicator-circle.js +5 -8
  559. package/development/loading-indicator-circle.pure.js +5 -2
  560. package/development/loading-indicator.js +5 -8
  561. package/development/loading-indicator.pure.js +5 -2
  562. package/development/logo/logo.component.js +129 -2
  563. package/development/logo.js +5 -8
  564. package/development/logo.pure.js +5 -2
  565. package/development/map-container/map-container.component.js +281 -2
  566. package/development/map-container.js +5 -8
  567. package/development/map-container.pure.js +5 -2
  568. package/development/menu/common/menu-action-common.js +144 -2
  569. package/development/menu/common.js +5 -6
  570. package/development/menu/menu/menu.component.js +683 -2
  571. package/development/menu/menu-button/menu-button.component.js +8 -20
  572. package/development/menu/menu-button.js +4 -6
  573. package/development/menu/menu-link/menu-link.component.js +11 -21
  574. package/development/menu/menu-link.js +4 -6
  575. package/development/menu/menu.js +5 -7
  576. package/development/menu.js +9 -9
  577. package/development/menu.pure.js +9 -3
  578. package/development/message/message.component.js +67 -2
  579. package/development/message.js +5 -8
  580. package/development/message.pure.js +5 -2
  581. package/development/mini-button-label-common-BaMSfSTe.js +558 -0
  582. package/development/mini-calendar/mini-calendar/mini-calendar.component.js +188 -2
  583. package/development/mini-calendar/mini-calendar-day/mini-calendar-day.component.js +166 -2
  584. package/development/mini-calendar/mini-calendar-day.js +5 -7
  585. package/development/mini-calendar/mini-calendar-month/mini-calendar-month.component.js +135 -2
  586. package/development/mini-calendar/mini-calendar-month.js +5 -7
  587. package/development/mini-calendar/mini-calendar.js +5 -7
  588. package/development/mini-calendar.js +9 -10
  589. package/development/mini-calendar.pure.js +9 -4
  590. package/development/navigation/common/navigation-action-common.js +165 -2
  591. package/development/navigation/common.js +5 -6
  592. package/development/navigation/navigation/navigation.component.js +571 -2
  593. package/development/navigation/navigation-button/navigation-button.component.js +7 -14
  594. package/development/navigation/navigation-button.js +4 -6
  595. package/development/navigation/navigation-link/navigation-link.component.js +7 -14
  596. package/development/navigation/navigation-link.js +4 -6
  597. package/development/navigation/navigation-list/navigation-list.component.js +102 -2
  598. package/development/navigation/navigation-list.js +5 -7
  599. package/development/navigation/navigation-marker/navigation-marker.component.js +199 -2
  600. package/development/navigation/navigation-marker.js +5 -7
  601. package/development/navigation/navigation-section/navigation-section.component.js +588 -2
  602. package/development/navigation/navigation-section.js +5 -7
  603. package/development/navigation/navigation.js +5 -7
  604. package/development/navigation.js +15 -12
  605. package/development/navigation.pure.js +15 -6
  606. package/development/notification/notification.component.js +496 -2
  607. package/development/notification.js +5 -8
  608. package/development/notification.pure.js +5 -2
  609. package/development/option/optgroup/optgroup-base-element.js +159 -2
  610. package/development/option/optgroup/optgroup.component.js +37 -40
  611. package/development/option/optgroup.js +6 -7
  612. package/development/option/option/option-base-element.js +276 -349
  613. package/development/option/option/option.component.js +241 -2
  614. package/development/option/option-hint/option-hint.component.js +44 -2
  615. package/development/option/option-hint.js +5 -7
  616. package/development/option/option.js +6 -7
  617. package/development/option.js +11 -10
  618. package/development/option.pure.js +11 -4
  619. package/development/overlay/overlay-base-element.js +247 -238
  620. package/development/overlay/overlay.component.js +374 -2
  621. package/development/overlay.js +9 -8
  622. package/development/overlay.pure.js +9 -2
  623. package/development/paginator/common/paginator-common.js +272 -376
  624. package/development/paginator/common.js +4 -5
  625. package/development/paginator/compact-paginator/compact-paginator.component.js +87 -2
  626. package/development/paginator/compact-paginator.js +5 -7
  627. package/development/paginator/paginator/paginator.component.js +444 -2
  628. package/development/paginator/paginator.js +5 -7
  629. package/development/paginator.js +8 -9
  630. package/development/paginator.pure.js +8 -3
  631. package/development/popover/popover.component.js +718 -2
  632. package/development/popover.js +7 -8
  633. package/development/popover.pure.js +6 -2
  634. package/development/radio-button/common/radio-button-common.js +203 -2
  635. package/development/radio-button/common.js +6 -6
  636. package/development/radio-button/radio-button-group.js +1 -5
  637. package/development/radio-button/radio-button-panel.js +1 -5
  638. package/development/radio-button/radio-button.component.js +97 -3
  639. package/development/radio-button/radio-button.js +5 -8
  640. package/development/radio-button-group/radio-button-group.component.js +308 -2
  641. package/development/radio-button-group.js +5 -8
  642. package/development/radio-button-group.pure.js +5 -2
  643. package/development/radio-button-panel/radio-button-panel.component.js +82 -106
  644. package/development/radio-button-panel.js +4 -7
  645. package/development/radio-button-panel.pure.js +4 -1
  646. package/development/radio-button.js +11 -12
  647. package/development/radio-button.pure.js +8 -3
  648. package/development/sbb-tokens-DQT_xEIZ.js +19 -0
  649. package/development/screen-reader-only/screen-reader-only.component.js +25 -2
  650. package/development/screen-reader-only.js +5 -8
  651. package/development/screen-reader-only.pure.js +5 -2
  652. package/development/select/select.component.js +1087 -2
  653. package/development/select.js +5 -8
  654. package/development/select.pure.js +5 -2
  655. package/development/selection-action-panel/selection-action-panel.component.js +125 -2
  656. package/development/selection-action-panel.js +5 -8
  657. package/development/selection-action-panel.pure.js +5 -2
  658. package/development/selection-expansion-panel/selection-expansion-panel.component.js +306 -2
  659. package/development/selection-expansion-panel.js +5 -8
  660. package/development/selection-expansion-panel.pure.js +5 -2
  661. package/development/sidebar/common/styles.js +7 -2
  662. package/development/sidebar/common.js +7 -6
  663. package/development/sidebar/sidebar/sidebar.component.js +473 -2
  664. package/development/sidebar/sidebar-close-button/sidebar-close-button.component.js +36 -2
  665. package/development/sidebar/sidebar-close-button.js +5 -7
  666. package/development/sidebar/sidebar-container/sidebar-container.component.js +147 -2
  667. package/development/sidebar/sidebar-container.js +5 -7
  668. package/development/sidebar/sidebar-content/sidebar-content.component.js +25 -2
  669. package/development/sidebar/sidebar-content.js +5 -7
  670. package/development/sidebar/sidebar-title/sidebar-title.component.js +53 -2
  671. package/development/sidebar/sidebar-title.js +5 -7
  672. package/development/sidebar/sidebar.js +5 -7
  673. package/development/sidebar.js +13 -12
  674. package/development/sidebar.pure.js +13 -6
  675. package/development/signet/signet.component.js +151 -2
  676. package/development/signet.js +5 -8
  677. package/development/signet.pure.js +5 -2
  678. package/development/skiplink-list/skiplink-list.component.js +160 -2
  679. package/development/skiplink-list.js +5 -8
  680. package/development/skiplink-list.pure.js +5 -2
  681. package/development/slider/slider.component.js +399 -2
  682. package/development/slider.js +5 -8
  683. package/development/slider.pure.js +5 -2
  684. package/development/status/status.component.js +144 -2
  685. package/development/status.js +5 -8
  686. package/development/status.pure.js +5 -2
  687. package/development/stepper/step/step.component.js +216 -2
  688. package/development/stepper/step-label/step-label.component.js +298 -2
  689. package/development/stepper/step-label.js +5 -7
  690. package/development/stepper/step.js +5 -7
  691. package/development/stepper/stepper/stepper.component.js +465 -2
  692. package/development/stepper/stepper.js +7 -7
  693. package/development/stepper.js +11 -10
  694. package/development/stepper.pure.js +10 -4
  695. package/development/tab-label-common-Mfl36Rsa.js +171 -0
  696. package/development/table/table-wrapper/table-wrapper.component.js +120 -2
  697. package/development/table/table-wrapper.js +5 -7
  698. package/development/table.js +5 -8
  699. package/development/table.pure.js +5 -2
  700. package/development/tabs/common/styles.js +6 -2
  701. package/development/tabs/common.js +6 -6
  702. package/development/tabs/tab/tab.component.js +87 -2
  703. package/development/tabs/tab-group/tab-group.component.js +236 -2
  704. package/development/tabs/tab-group.js +5 -7
  705. package/development/tabs/tab-label/tab-label.component.js +369 -2
  706. package/development/tabs/tab-label.js +5 -7
  707. package/development/tabs/tab-nav-bar/tab-nav-bar.component.js +99 -2
  708. package/development/tabs/tab-nav-bar.js +5 -7
  709. package/development/tabs/tab.js +5 -7
  710. package/development/tabs.js +14 -12
  711. package/development/tabs.pure.js +14 -6
  712. package/development/tag/tag/tag.component.js +351 -2
  713. package/development/tag/tag-group/tag-group.component.js +179 -2
  714. package/development/tag/tag-group.js +5 -7
  715. package/development/tag/tag.js +5 -7
  716. package/development/tag.js +7 -9
  717. package/development/tag.pure.js +7 -3
  718. package/development/teaser/teaser.component.js +224 -2
  719. package/development/teaser-hero/teaser-hero.component.js +172 -2
  720. package/development/teaser-hero.js +5 -8
  721. package/development/teaser-hero.pure.js +5 -2
  722. package/development/teaser-product/common/teaser-product-common.js +210 -2
  723. package/development/teaser-product/common.js +6 -6
  724. package/development/teaser-product/teaser-product/teaser-product.component.js +63 -2
  725. package/development/teaser-product/teaser-product-static/teaser-product-static.component.js +8 -21
  726. package/development/teaser-product/teaser-product-static.js +4 -6
  727. package/development/teaser-product/teaser-product.js +5 -7
  728. package/development/teaser-product.js +9 -9
  729. package/development/teaser-product.pure.js +9 -3
  730. package/development/teaser.js +5 -8
  731. package/development/teaser.pure.js +5 -2
  732. package/development/time-input/time-input.component.js +213 -2
  733. package/development/time-input.js +5 -8
  734. package/development/time-input.pure.js +5 -2
  735. package/development/timetable-form/timetable-form/timetable-form.component.js +22 -2
  736. package/development/timetable-form/timetable-form-details/timetable-form-details.component.js +39 -2
  737. package/development/timetable-form/timetable-form-details.js +5 -7
  738. package/development/timetable-form/timetable-form-field/timetable-form-field.component.js +112 -2
  739. package/development/timetable-form/timetable-form-field.js +5 -7
  740. package/development/timetable-form/timetable-form-swap-button/timetable-form-swap-button.component.js +63 -2
  741. package/development/timetable-form/timetable-form-swap-button.js +5 -7
  742. package/development/timetable-form/timetable-form.js +5 -7
  743. package/development/timetable-form.js +11 -11
  744. package/development/timetable-form.pure.js +11 -5
  745. package/development/timetable-occupancy/timetable-occupancy.component.js +140 -2
  746. package/development/timetable-occupancy-icon/timetable-occupancy-icon.component.js +89 -2
  747. package/development/timetable-occupancy-icon.js +5 -8
  748. package/development/timetable-occupancy-icon.pure.js +5 -2
  749. package/development/timetable-occupancy.js +5 -8
  750. package/development/timetable-occupancy.pure.js +5 -2
  751. package/development/title/title-base.js +109 -2
  752. package/development/title/title.component.js +89 -3
  753. package/development/title.js +7 -9
  754. package/development/title.pure.js +7 -3
  755. package/development/toast/toast.component.js +401 -2
  756. package/development/toast.js +5 -8
  757. package/development/toast.pure.js +5 -2
  758. package/development/toggle/toggle/toggle.component.js +331 -2
  759. package/development/toggle/toggle-option/toggle-option.component.js +179 -2
  760. package/development/toggle/toggle-option.js +5 -7
  761. package/development/toggle/toggle.js +5 -7
  762. package/development/toggle-check/toggle-check.component.js +274 -2
  763. package/development/toggle-check.js +5 -8
  764. package/development/toggle-check.pure.js +5 -2
  765. package/development/toggle.js +7 -9
  766. package/development/toggle.pure.js +7 -3
  767. package/development/tooltip/tooltip.component.js +440 -2
  768. package/development/tooltip.js +5 -8
  769. package/development/tooltip.pure.js +5 -2
  770. package/development/train/train/train.component.js +229 -2
  771. package/development/train/train-blocked-passage/train-blocked-passage.component.js +70 -2
  772. package/development/train/train-blocked-passage.js +5 -7
  773. package/development/train/train-formation/train-formation.component.js +274 -2
  774. package/development/train/train-formation.js +5 -7
  775. package/development/train/train-wagon/train-wagon.component.js +387 -2
  776. package/development/train/train-wagon.js +5 -7
  777. package/development/train/train.js +5 -7
  778. package/development/train.js +11 -11
  779. package/development/train.pure.js +11 -5
  780. package/development/visual-checkbox/visual-checkbox.component.js +164 -2
  781. package/development/visual-checkbox.js +5 -8
  782. package/development/visual-checkbox.pure.js +5 -2
  783. package/dialog/dialog/dialog.component.js +148 -2
  784. package/dialog/dialog-actions/dialog-actions.component.js +13 -2
  785. package/dialog/dialog-actions.js +7 -4
  786. package/dialog/dialog-close-button/dialog-close-button.component.js +23 -2
  787. package/dialog/dialog-close-button.js +7 -4
  788. package/dialog/dialog-content/dialog-content.component.js +15 -2
  789. package/dialog/dialog-content.js +7 -4
  790. package/dialog/dialog-title/dialog-title.component.js +13 -2
  791. package/dialog/dialog-title.js +7 -4
  792. package/dialog/dialog.js +10 -4
  793. package/dialog.js +20 -9
  794. package/dialog.pure.js +15 -6
  795. package/divider/divider.component.js +44 -2
  796. package/divider.js +4 -5
  797. package/divider.pure.js +4 -2
  798. package/expansion-panel/expansion-panel/expansion-panel.component.js +156 -2
  799. package/expansion-panel/expansion-panel-content/expansion-panel-content.component.js +24 -2
  800. package/expansion-panel/expansion-panel-content.js +7 -4
  801. package/expansion-panel/expansion-panel-header/expansion-panel-header.component.js +57 -2
  802. package/expansion-panel/expansion-panel-header.js +7 -4
  803. package/expansion-panel/expansion-panel.js +7 -4
  804. package/expansion-panel.js +11 -7
  805. package/expansion-panel.pure.js +8 -4
  806. package/file-selector/common/file-selector-common.js +245 -2
  807. package/file-selector/common.js +7 -5
  808. package/file-selector/file-selector/file-selector.component.js +20 -25
  809. package/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +75 -2
  810. package/file-selector/file-selector-dropzone.js +7 -4
  811. package/file-selector/file-selector.js +6 -3
  812. package/file-selector.js +11 -7
  813. package/file-selector.pure.js +9 -4
  814. package/flip-card/flip-card/flip-card.component.js +120 -2
  815. package/flip-card/flip-card-details/flip-card-details.component.js +36 -2
  816. package/flip-card/flip-card-details.js +7 -4
  817. package/flip-card/flip-card-summary/flip-card-summary.component.js +48 -2
  818. package/flip-card/flip-card-summary.js +7 -4
  819. package/flip-card/flip-card.js +7 -4
  820. package/flip-card.js +11 -7
  821. package/flip-card.pure.js +8 -4
  822. package/footer/footer.component.js +89 -2
  823. package/footer.js +4 -5
  824. package/footer.pure.js +4 -2
  825. package/form-field/error/error.component.js +42 -2
  826. package/form-field/error.js +7 -4
  827. package/form-field/form-field/form-field.component.js +344 -2
  828. package/form-field/form-field-clear/form-field-clear.component.js +28 -35
  829. package/form-field/form-field-clear.js +6 -3
  830. package/form-field/form-field.js +9 -4
  831. package/form-field.js +13 -7
  832. package/form-field.pure.js +9 -4
  833. package/header/common/header-action-common.js +51 -2
  834. package/header/common.js +6 -5
  835. package/header/header/header.component.js +154 -2
  836. package/header/header-button/header-button.component.js +8 -9
  837. package/header/header-button.js +6 -3
  838. package/header/header-environment/header-environment.component.js +29 -2
  839. package/header/header-environment.js +7 -4
  840. package/header/header-link/header-link.component.js +8 -9
  841. package/header/header-link.js +6 -3
  842. package/header/header.js +7 -4
  843. package/header.js +16 -9
  844. package/header.pure.js +12 -6
  845. package/icon/icon-base.js +105 -2
  846. package/icon/icon-name-mixin.js +50 -59
  847. package/icon/icon-request.js +29 -23
  848. package/icon/icon-validate.js +25 -19
  849. package/icon/icon.component.js +76 -88
  850. package/icon-sidebar/icon-sidebar/icon-sidebar.component.js +46 -2
  851. package/icon-sidebar/icon-sidebar-button/icon-sidebar-button.component.js +15 -19
  852. package/icon-sidebar/icon-sidebar-button.js +6 -3
  853. package/icon-sidebar/icon-sidebar-container/icon-sidebar-container.component.js +25 -2
  854. package/icon-sidebar/icon-sidebar-container.js +7 -4
  855. package/icon-sidebar/icon-sidebar-content/icon-sidebar-content.component.js +16 -2
  856. package/icon-sidebar/icon-sidebar-content.js +7 -4
  857. package/icon-sidebar/icon-sidebar-link/icon-sidebar-link.component.js +15 -19
  858. package/icon-sidebar/icon-sidebar-link.js +6 -3
  859. package/icon-sidebar/icon-sidebar.js +7 -4
  860. package/icon-sidebar-button-common-ffAscVDk.js +7 -0
  861. package/icon-sidebar.js +16 -8
  862. package/icon-sidebar.pure.js +12 -6
  863. package/icon.js +14 -10
  864. package/icon.pure.js +13 -6
  865. package/image/image.component.js +455 -2
  866. package/image.js +4 -5
  867. package/image.pure.js +4 -2
  868. package/journey-header/journey-header.component.js +95 -2
  869. package/journey-header.js +4 -5
  870. package/journey-header.pure.js +4 -2
  871. package/lead-container/lead-container.component.js +23 -2
  872. package/lead-container.js +4 -5
  873. package/lead-container.pure.js +4 -2
  874. package/link/block-link/block-link.component.js +8 -9
  875. package/link/block-link-button/block-link-button.component.js +9 -10
  876. package/link/block-link-button.js +6 -6
  877. package/link/block-link-static/block-link-static.component.js +9 -10
  878. package/link/block-link-static.js +4 -4
  879. package/link/block-link.js +6 -6
  880. package/link/common/block-link-common.js +44 -3
  881. package/link/common/inline-link-common.js +13 -3
  882. package/link/common/link-common.js +9 -2
  883. package/link/common.js +8 -4
  884. package/link/link/link.component.js +9 -10
  885. package/link/link-button/link-button.component.js +9 -10
  886. package/link/link-button.js +4 -4
  887. package/link/link-static/link-static.component.js +9 -10
  888. package/link/link-static.js +4 -4
  889. package/link/link.js +6 -6
  890. package/link-common-7IiqjmPD.js +45 -0
  891. package/link-list/common/link-list-base.js +90 -2
  892. package/link-list/common.js +7 -5
  893. package/link-list/link-list-anchor.js +8 -6
  894. package/link-list/link-list.component.js +47 -3
  895. package/link-list/link-list.js +7 -5
  896. package/link-list-anchor/link-list-anchor.component.js +10 -2
  897. package/link-list-anchor.js +4 -5
  898. package/link-list-anchor.pure.js +4 -2
  899. package/link-list.js +10 -8
  900. package/link-list.pure.js +7 -3
  901. package/link.js +25 -12
  902. package/link.pure.js +20 -11
  903. package/loading-indicator/loading-indicator.component.js +67 -2
  904. package/loading-indicator-circle/loading-indicator-circle.component.js +47 -2
  905. package/loading-indicator-circle.js +4 -5
  906. package/loading-indicator-circle.pure.js +4 -2
  907. package/loading-indicator.js +4 -5
  908. package/loading-indicator.pure.js +4 -2
  909. package/logo/logo.component.js +67 -2
  910. package/logo.js +4 -5
  911. package/logo.pure.js +4 -2
  912. package/map-container/map-container.component.js +110 -2
  913. package/map-container.js +4 -5
  914. package/map-container.pure.js +4 -2
  915. package/menu/common/menu-action-common.js +28 -2
  916. package/menu/common.js +6 -5
  917. package/menu/menu/menu.component.js +274 -2
  918. package/menu/menu-button/menu-button.component.js +9 -13
  919. package/menu/menu-button.js +6 -3
  920. package/menu/menu-link/menu-link.component.js +12 -13
  921. package/menu/menu-link.js +6 -3
  922. package/menu/menu.js +7 -4
  923. package/menu.js +12 -7
  924. package/menu.pure.js +10 -5
  925. package/message/message.component.js +23 -2
  926. package/message.js +4 -5
  927. package/message.pure.js +4 -2
  928. package/mini-button-label-common-Dx9JhmQ6.js +11 -0
  929. package/mini-calendar/mini-calendar/mini-calendar.component.js +131 -2
  930. package/mini-calendar/mini-calendar-day/mini-calendar-day.component.js +66 -2
  931. package/mini-calendar/mini-calendar-day.js +7 -4
  932. package/mini-calendar/mini-calendar-month/mini-calendar-month.component.js +63 -2
  933. package/mini-calendar/mini-calendar-month.js +7 -4
  934. package/mini-calendar/mini-calendar.js +7 -4
  935. package/mini-calendar.js +11 -7
  936. package/mini-calendar.pure.js +8 -4
  937. package/navigation/common/navigation-action-common.js +57 -2
  938. package/navigation/common.js +6 -5
  939. package/navigation/navigation/navigation.component.js +188 -2
  940. package/navigation/navigation-button/navigation-button.component.js +8 -9
  941. package/navigation/navigation-button.js +6 -3
  942. package/navigation/navigation-link/navigation-link.component.js +8 -9
  943. package/navigation/navigation-link.js +6 -3
  944. package/navigation/navigation-list/navigation-list.component.js +59 -2
  945. package/navigation/navigation-list.js +7 -4
  946. package/navigation/navigation-marker/navigation-marker.component.js +82 -2
  947. package/navigation/navigation-marker.js +7 -4
  948. package/navigation/navigation-section/navigation-section.component.js +224 -2
  949. package/navigation/navigation-section.js +7 -4
  950. package/navigation/navigation.js +7 -4
  951. package/navigation.js +22 -11
  952. package/navigation.pure.js +16 -8
  953. package/notification/notification.component.js +165 -2
  954. package/notification.js +4 -5
  955. package/notification.pure.js +4 -2
  956. package/option/optgroup/optgroup-base-element.js +83 -2
  957. package/option/optgroup/optgroup.component.js +30 -29
  958. package/option/optgroup.js +9 -5
  959. package/option/option/option-base-element.js +201 -257
  960. package/option/option/option.component.js +87 -2
  961. package/option/option-hint/option-hint.component.js +19 -2
  962. package/option/option-hint.js +7 -4
  963. package/option/option.js +9 -5
  964. package/option.js +15 -9
  965. package/option.pure.js +12 -6
  966. package/overlay/overlay-base-element.js +149 -154
  967. package/overlay/overlay.component.js +138 -2
  968. package/overlay.js +10 -7
  969. package/overlay.pure.js +9 -3
  970. package/package.json +2 -2
  971. package/paginator/common/paginator-common.js +201 -268
  972. package/paginator/common.js +6 -5
  973. package/paginator/compact-paginator/compact-paginator.component.js +40 -2
  974. package/paginator/compact-paginator.js +7 -4
  975. package/paginator/paginator/paginator.component.js +175 -2
  976. package/paginator/paginator.js +7 -4
  977. package/paginator.js +10 -7
  978. package/paginator.pure.js +7 -3
  979. package/popover/popover.component.js +316 -2
  980. package/popover.js +6 -5
  981. package/popover.pure.js +5 -2
  982. package/radio-button/common/radio-button-common.js +63 -2
  983. package/radio-button/common.js +7 -5
  984. package/radio-button/radio-button-group.js +3 -2
  985. package/radio-button/radio-button-panel.js +3 -2
  986. package/radio-button/radio-button.component.js +71 -3
  987. package/radio-button/radio-button.js +7 -5
  988. package/radio-button-group/radio-button-group.component.js +167 -2
  989. package/radio-button-group.js +5 -6
  990. package/radio-button-group.pure.js +4 -2
  991. package/radio-button-panel/radio-button-panel.component.js +68 -78
  992. package/radio-button-panel.js +3 -4
  993. package/radio-button-panel.pure.js +4 -2
  994. package/radio-button.js +13 -9
  995. package/radio-button.pure.js +7 -3
  996. package/sbb-tokens-HiNSQasB.js +11 -0
  997. package/screen-reader-only/screen-reader-only.component.js +12 -2
  998. package/screen-reader-only.js +4 -5
  999. package/screen-reader-only.pure.js +4 -2
  1000. package/select/select.component.js +498 -2
  1001. package/select.js +4 -5
  1002. package/select.pure.js +4 -2
  1003. package/selection-action-panel/selection-action-panel.component.js +33 -2
  1004. package/selection-action-panel.js +4 -5
  1005. package/selection-action-panel.pure.js +4 -2
  1006. package/selection-expansion-panel/selection-expansion-panel.component.js +116 -2
  1007. package/selection-expansion-panel.js +4 -5
  1008. package/selection-expansion-panel.pure.js +4 -2
  1009. package/sidebar/common/styles.js +6 -2
  1010. package/sidebar/common.js +8 -5
  1011. package/sidebar/sidebar/sidebar.component.js +182 -2
  1012. package/sidebar/sidebar-close-button/sidebar-close-button.component.js +26 -2
  1013. package/sidebar/sidebar-close-button.js +7 -4
  1014. package/sidebar/sidebar-container/sidebar-container.component.js +76 -2
  1015. package/sidebar/sidebar-container.js +7 -4
  1016. package/sidebar/sidebar-content/sidebar-content.component.js +16 -2
  1017. package/sidebar/sidebar-content.js +7 -4
  1018. package/sidebar/sidebar-title/sidebar-title.component.js +39 -2
  1019. package/sidebar/sidebar-title.js +7 -4
  1020. package/sidebar/sidebar.js +7 -4
  1021. package/sidebar.js +17 -9
  1022. package/sidebar.pure.js +12 -6
  1023. package/signet/signet.component.js +74 -2
  1024. package/signet.js +4 -5
  1025. package/signet.pure.js +4 -2
  1026. package/skiplink-list/skiplink-list.component.js +77 -2
  1027. package/skiplink-list.js +4 -5
  1028. package/skiplink-list.pure.js +4 -2
  1029. package/slider/slider.component.js +200 -2
  1030. package/slider.js +4 -5
  1031. package/slider.pure.js +4 -2
  1032. package/status/status.component.js +69 -2
  1033. package/status.js +4 -5
  1034. package/status.pure.js +4 -2
  1035. package/stepper/step/step.component.js +111 -2
  1036. package/stepper/step-label/step-label.component.js +96 -2
  1037. package/stepper/step-label.js +7 -4
  1038. package/stepper/step.js +7 -4
  1039. package/stepper/stepper/stepper.component.js +236 -2
  1040. package/stepper/stepper.js +9 -4
  1041. package/stepper.js +13 -7
  1042. package/stepper.pure.js +9 -4
  1043. package/tab-label-common-D6k40yRU.js +6 -0
  1044. package/table/table-wrapper/table-wrapper.component.js +70 -2
  1045. package/table/table-wrapper.js +7 -4
  1046. package/table.js +4 -5
  1047. package/table.pure.js +4 -2
  1048. package/tabs/common/styles.js +5 -2
  1049. package/tabs/common.js +7 -5
  1050. package/tabs/tab/tab.component.js +46 -2
  1051. package/tabs/tab-group/tab-group.component.js +167 -2
  1052. package/tabs/tab-group.js +7 -4
  1053. package/tabs/tab-label/tab-label.component.js +128 -2
  1054. package/tabs/tab-label.js +7 -4
  1055. package/tabs/tab-nav-bar/tab-nav-bar.component.js +67 -2
  1056. package/tabs/tab-nav-bar.js +7 -4
  1057. package/tabs/tab.js +7 -4
  1058. package/tabs.js +17 -9
  1059. package/tabs.pure.js +13 -6
  1060. package/tag/tag/tag.component.js +128 -2
  1061. package/tag/tag-group/tag-group.component.js +119 -2
  1062. package/tag/tag-group.js +7 -4
  1063. package/tag/tag.js +7 -4
  1064. package/tag.js +8 -6
  1065. package/tag.pure.js +6 -3
  1066. package/teaser/teaser.component.js +80 -2
  1067. package/teaser-hero/teaser-hero.component.js +62 -2
  1068. package/teaser-hero.js +4 -5
  1069. package/teaser-hero.pure.js +4 -2
  1070. package/teaser-product/common/teaser-product-common.js +54 -2
  1071. package/teaser-product/common.js +7 -5
  1072. package/teaser-product/teaser-product/teaser-product.component.js +28 -2
  1073. package/teaser-product/teaser-product-static/teaser-product-static.component.js +9 -13
  1074. package/teaser-product/teaser-product-static.js +6 -3
  1075. package/teaser-product/teaser-product.js +7 -4
  1076. package/teaser-product.js +11 -7
  1077. package/teaser-product.pure.js +9 -4
  1078. package/teaser.js +4 -5
  1079. package/teaser.pure.js +4 -2
  1080. package/time-input/time-input.component.js +128 -2
  1081. package/time-input.js +4 -5
  1082. package/time-input.pure.js +4 -2
  1083. package/timetable-form/timetable-form/timetable-form.component.js +12 -2
  1084. package/timetable-form/timetable-form-details/timetable-form-details.component.js +12 -2
  1085. package/timetable-form/timetable-form-details.js +7 -4
  1086. package/timetable-form/timetable-form-field/timetable-form-field.component.js +26 -2
  1087. package/timetable-form/timetable-form-field.js +7 -4
  1088. package/timetable-form/timetable-form-swap-button/timetable-form-swap-button.component.js +33 -2
  1089. package/timetable-form/timetable-form-swap-button.js +7 -4
  1090. package/timetable-form/timetable-form.js +7 -4
  1091. package/timetable-form.js +14 -8
  1092. package/timetable-form.pure.js +10 -5
  1093. package/timetable-occupancy/timetable-occupancy.component.js +77 -2
  1094. package/timetable-occupancy-icon/timetable-occupancy-icon.component.js +61 -2
  1095. package/timetable-occupancy-icon.js +4 -5
  1096. package/timetable-occupancy-icon.pure.js +4 -2
  1097. package/timetable-occupancy.js +4 -5
  1098. package/timetable-occupancy.pure.js +4 -2
  1099. package/title/title-base.js +53 -2
  1100. package/title/title.component.js +37 -3
  1101. package/title.js +7 -7
  1102. package/title.pure.js +6 -3
  1103. package/toast/toast.component.js +180 -2
  1104. package/toast.js +4 -5
  1105. package/toast.pure.js +4 -2
  1106. package/toggle/toggle/toggle.component.js +147 -2
  1107. package/toggle/toggle-option/toggle-option.component.js +90 -2
  1108. package/toggle/toggle-option.js +7 -4
  1109. package/toggle/toggle.js +7 -4
  1110. package/toggle-check/toggle-check.component.js +85 -2
  1111. package/toggle-check.js +4 -5
  1112. package/toggle-check.pure.js +4 -2
  1113. package/toggle.js +8 -6
  1114. package/toggle.pure.js +6 -3
  1115. package/tooltip/tooltip.component.js +197 -2
  1116. package/tooltip.js +4 -5
  1117. package/tooltip.pure.js +4 -2
  1118. package/train/train/train.component.js +123 -2
  1119. package/train/train-blocked-passage/train-blocked-passage.component.js +19 -2
  1120. package/train/train-blocked-passage.js +7 -4
  1121. package/train/train-formation/train-formation.component.js +93 -2
  1122. package/train/train-formation.js +7 -4
  1123. package/train/train-wagon/train-wagon.component.js +174 -2
  1124. package/train/train-wagon.js +7 -4
  1125. package/train/train.js +7 -4
  1126. package/train.js +14 -8
  1127. package/train.pure.js +10 -5
  1128. package/visual-checkbox/visual-checkbox.component.js +81 -2
  1129. package/visual-checkbox.js +4 -5
  1130. package/visual-checkbox.pure.js +4 -2
  1131. package/accordion.component-DmaGQH3Q.js +0 -127
  1132. package/action-group.component-KWugkMGf.js +0 -158
  1133. package/alert-group.component-RV1M1OKy.js +0 -141
  1134. package/alert.component-PPR7hfTi.js +0 -165
  1135. package/autocomplete-base-element-DVFCZ4lt.js +0 -425
  1136. package/block-link-common-D4aizuV-.js +0 -63
  1137. package/breadcrumb-group.component-BA8KK3Om.js +0 -145
  1138. package/breadcrumb.component-DjkZzGJD.js +0 -24
  1139. package/calendar-day.component-DqAXvoP3.js +0 -113
  1140. package/calendar.component-BgZDy-rX.js +0 -1246
  1141. package/card-action-common-GpkaNYtV.js +0 -88
  1142. package/card-badge.component-D_PI9Ega.js +0 -65
  1143. package/card.component-Dt2YFmd3.js +0 -62
  1144. package/carousel-item.component-kv3rY8B-.js +0 -25
  1145. package/carousel-list.component-DMMk66SP.js +0 -91
  1146. package/carousel.component-Bd0iGUbf.js +0 -97
  1147. package/checkbox-common-D9htxWLZ.js +0 -68
  1148. package/checkbox-group.component-CNAwwaS0.js +0 -146
  1149. package/checkbox.component-CJcC5JnN.js +0 -125
  1150. package/chip-group.component-DR6GoGCB.js +0 -283
  1151. package/chip-label.component-DBN4jfW7.js +0 -80
  1152. package/chip.component-BNOs8T6O.js +0 -94
  1153. package/clock.component-DDaWbXHW.js +0 -148
  1154. package/common-CI_BB6sF.js +0 -5
  1155. package/compact-paginator.component-BxSy5YXY.js +0 -45
  1156. package/container.component-DXFIvseq.js +0 -117
  1157. package/date-input.component-zZtnd9Og.js +0 -205
  1158. package/datepicker-button-C1TrzFl-.js +0 -109
  1159. package/datepicker.component-cmdnlVgf.js +0 -156
  1160. package/development/accordion.component-BIFcgIa0.js +0 -172
  1161. package/development/action-group.component-CuhO6yb9.js +0 -379
  1162. package/development/alert-group.component-BlrlsRB8.js +0 -219
  1163. package/development/alert.component-CJ2yLyOY.js +0 -411
  1164. package/development/autocomplete-base-element-DCfmuVY6.js +0 -960
  1165. package/development/block-link-common-FvD8So7p.js +0 -145
  1166. package/development/breadcrumb-group.component-DjsoMTPI.js +0 -278
  1167. package/development/breadcrumb.component-DvOf-PiO.js +0 -89
  1168. package/development/calendar-day.component-De9Xn3-q.js +0 -283
  1169. package/development/calendar.component-PHpgLc0z.js +0 -2458
  1170. package/development/card-action-common-DqBn3bPy.js +0 -147
  1171. package/development/card-badge.component-Cs4dow18.js +0 -146
  1172. package/development/card.component-CeOZXXWU.js +0 -258
  1173. package/development/carousel-item.component-DOIXA2QK.js +0 -47
  1174. package/development/carousel-list.component-7Z3dYtAF.js +0 -160
  1175. package/development/carousel.component-b4C-hxkj.js +0 -169
  1176. package/development/checkbox-common-DD7r8g0_.js +0 -147
  1177. package/development/checkbox-group.component-CRZO7CEc.js +0 -265
  1178. package/development/checkbox.component-B43Akyck.js +0 -193
  1179. package/development/chip-group.component-CeRAIWg-.js +0 -493
  1180. package/development/chip-label.component-jN_Fulv_.js +0 -165
  1181. package/development/chip.component-Bn7ffNEr.js +0 -191
  1182. package/development/clock.component-btjeVAaa.js +0 -392
  1183. package/development/common-Da_cep8M.js +0 -565
  1184. package/development/compact-paginator.component-CCDP0TMd.js +0 -96
  1185. package/development/container.component-CVm8-HZ4.js +0 -238
  1186. package/development/date-input.component-CqsEOZfb.js +0 -338
  1187. package/development/datepicker-button-BORzfDaA.js +0 -167
  1188. package/development/datepicker.component-CuFtPZg9.js +0 -223
  1189. package/development/dialog-actions.component-Mbx-Bs3t.js +0 -55
  1190. package/development/dialog-close-button.component-B1dPHPy2.js +0 -48
  1191. package/development/dialog-content.component-qP09Yo_N.js +0 -42
  1192. package/development/dialog-title.component-B4u2w8h5.js +0 -50
  1193. package/development/dialog.component-DaM1FSHB.js +0 -403
  1194. package/development/divider.component-Ddzlu6Fw.js +0 -95
  1195. package/development/error.component-C76eZnXo.js +0 -93
  1196. package/development/expansion-panel-content.component-DTZk3ZKL.js +0 -77
  1197. package/development/expansion-panel-header.component-C7ymZCux.js +0 -175
  1198. package/development/expansion-panel.component-xUWTKeaC.js +0 -489
  1199. package/development/file-selector-common-qMfAccOd.js +0 -512
  1200. package/development/file-selector-dropzone.component-HDUIUSQI.js +0 -154
  1201. package/development/flip-card-details.component-BilGh5Yb.js +0 -85
  1202. package/development/flip-card-summary.component-DDDnvs_c.js +0 -151
  1203. package/development/flip-card.component-CdRzb7IT.js +0 -334
  1204. package/development/footer.component-C057PwF1.js +0 -310
  1205. package/development/form-field.component-D4dQ8sCh.js +0 -1009
  1206. package/development/header-action-common-Dff8K0RB.js +0 -346
  1207. package/development/header-environment.component-DYnJkxCZ.js +0 -101
  1208. package/development/header.component-DYls7wGO.js +0 -446
  1209. package/development/icon-base-CcQCgmqX.js +0 -206
  1210. package/development/icon-sidebar-container.component-BJHjpF-Q.js +0 -41
  1211. package/development/icon-sidebar-content.component-C2wreczL.js +0 -33
  1212. package/development/icon-sidebar.component-PcmjRlDp.js +0 -100
  1213. package/development/image.component-fvsSR3Df.js +0 -820
  1214. package/development/inline-link-common-CyTcO5MN.js +0 -52
  1215. package/development/journey-header.component-BB8WYOqH.js +0 -217
  1216. package/development/lead-container.component-BGf8oqw7.js +0 -122
  1217. package/development/link-common-5ob2nFyv.js +0 -124
  1218. package/development/link-list-anchor.component-rAMp5_jH.js +0 -77
  1219. package/development/link-list-base-DxYNcAX7.js +0 -172
  1220. package/development/link-list.component-DD6UjlwD.js +0 -194
  1221. package/development/loading-indicator-circle.component-C0epUACB.js +0 -159
  1222. package/development/loading-indicator.component-CVdBjI99.js +0 -283
  1223. package/development/logo.component-Cp-EyVpA.js +0 -166
  1224. package/development/map-container.component-DUA7-arY.js +0 -324
  1225. package/development/menu-action-common-CyBv0NwR.js +0 -148
  1226. package/development/menu.component-GHJHhE9D.js +0 -638
  1227. package/development/message.component-uv9eI2gl.js +0 -82
  1228. package/development/mini-button-group.component-ytJZBjmr.js +0 -174
  1229. package/development/mini-button-link.component-DZOOdeZt.js +0 -47
  1230. package/development/mini-calendar-day.component-DLP7Pa6R.js +0 -213
  1231. package/development/mini-calendar-month.component-C1jsGlJ2.js +0 -150
  1232. package/development/mini-calendar.component-BzqjMchx.js +0 -192
  1233. package/development/navigation-action-common-saGbvoji.js +0 -178
  1234. package/development/navigation-list.component-AFM4omXQ.js +0 -124
  1235. package/development/navigation-marker.component-BvC73IoI.js +0 -207
  1236. package/development/navigation-section.component-B-6XU2X5.js +0 -600
  1237. package/development/navigation.component-_gUhpPyO.js +0 -585
  1238. package/development/notification.component-B5EBKKf8.js +0 -530
  1239. package/development/optgroup-base-element-CjwAXrC5.js +0 -181
  1240. package/development/option-hint.component-CHS5Z_sK.js +0 -55
  1241. package/development/option.component-BvOsW8Gn.js +0 -248
  1242. package/development/overlay.component-RS_v3xaA.js +0 -411
  1243. package/development/paginator.component-cRqJW9bc.js +0 -492
  1244. package/development/popover.component-BTfbUEzF.js +0 -745
  1245. package/development/radio-button-common-CjbP9yKf.js +0 -231
  1246. package/development/radio-button-group.component-5jDkRqSJ.js +0 -404
  1247. package/development/radio-button.component-CVATlwTb.js +0 -137
  1248. package/development/sbb-tokens-Dajio3u-.js +0 -13
  1249. package/development/screen-reader-only.component-D-KOAjrF.js +0 -36
  1250. package/development/select.component-DyF5Tw3J.js +0 -1084
  1251. package/development/selection-action-panel.component-elyz1Xsb.js +0 -134
  1252. package/development/selection-expansion-panel.component-hL2jyaAT.js +0 -326
  1253. package/development/sidebar-close-button.component-j4wY_hAt.js +0 -48
  1254. package/development/sidebar-container.component-CToGMqKH.js +0 -136
  1255. package/development/sidebar-content.component-s3GsQtNv.js +0 -37
  1256. package/development/sidebar-title.component-Htm_hqKX.js +0 -76
  1257. package/development/sidebar.component-Ct6TAsph.js +0 -506
  1258. package/development/signet.component-COqrcZqk.js +0 -188
  1259. package/development/skiplink-list.component-_SDkIoHp.js +0 -198
  1260. package/development/slider.component-B7EFECZk.js +0 -479
  1261. package/development/status.component-CE3e9OIO.js +0 -171
  1262. package/development/step-label.component-BH28AI5Z.js +0 -298
  1263. package/development/step.component-WY7qdrR8.js +0 -220
  1264. package/development/stepper.component-D1tAcpWs.js +0 -508
  1265. package/development/sticky-bar.component-BlgfxSRo.js +0 -382
  1266. package/development/styles-CIZBf9Yc.js +0 -173
  1267. package/development/styles-CYlzu-f2.js +0 -96
  1268. package/development/tab-group.component-DZPKWjI7.js +0 -292
  1269. package/development/tab-label.component-BJgr4u6Z.js +0 -420
  1270. package/development/tab-nav-bar.component-rNmuMIsv.js +0 -123
  1271. package/development/tab.component-C8jaB2_O.js +0 -101
  1272. package/development/table-wrapper.component-6WtB_fHq.js +0 -133
  1273. package/development/tag-group.component-C-EXr8Rq.js +0 -219
  1274. package/development/tag.component-B7RY4cfx.js +0 -419
  1275. package/development/teaser-hero.component-5vVIZZ9L.js +0 -202
  1276. package/development/teaser-product-common-DgnRgO6O.js +0 -223
  1277. package/development/teaser-product.component-BsdU2W2T.js +0 -75
  1278. package/development/teaser.component-KRkFbP9-.js +0 -243
  1279. package/development/time-input.component-Cf6cXrIN.js +0 -222
  1280. package/development/timetable-form-details.component-B--aGycf.js +0 -50
  1281. package/development/timetable-form-field.component-9jwIZzIm.js +0 -119
  1282. package/development/timetable-form-swap-button.component-Ne1-XwSf.js +0 -74
  1283. package/development/timetable-form.component-BYHhDRXE.js +0 -34
  1284. package/development/timetable-occupancy-icon.component-BbW73Fqd.js +0 -101
  1285. package/development/timetable-occupancy.component-C3nWG5Vg.js +0 -172
  1286. package/development/title-base-BUQgNaUI.js +0 -142
  1287. package/development/title.component-DgFvxLIt.js +0 -115
  1288. package/development/toast.component-Csifrfnq.js +0 -430
  1289. package/development/toggle-check.component-CEYmGCDZ.js +0 -326
  1290. package/development/toggle-option.component--wHdeFI6.js +0 -216
  1291. package/development/toggle.component-CGNDEU9B.js +0 -367
  1292. package/development/tooltip.component-bVPXm6Pu.js +0 -480
  1293. package/development/train-blocked-passage.component-CYnTeq7k.js +0 -79
  1294. package/development/train-formation.component-QmoA0u6E.js +0 -303
  1295. package/development/train-wagon.component-CWlRDq-Z.js +0 -485
  1296. package/development/train.component-DcMyi7HP.js +0 -294
  1297. package/development/visual-checkbox.component-DtEIq9rH.js +0 -213
  1298. package/dialog-actions.component-B4JYi2Ym.js +0 -17
  1299. package/dialog-close-button.component-BtxXASCn.js +0 -27
  1300. package/dialog-content.component-CNhoC-NZ.js +0 -19
  1301. package/dialog-title.component-C8Jsbuqt.js +0 -17
  1302. package/dialog.component-BHsekf9B.js +0 -170
  1303. package/divider.component-DFw-P_dA.js +0 -61
  1304. package/error.component-DL9hm4i9.js +0 -44
  1305. package/expansion-panel-content.component-CbWIxgH4.js +0 -29
  1306. package/expansion-panel-header.component-CxLeXeGi.js +0 -56
  1307. package/expansion-panel.component-Bs4icI9T.js +0 -226
  1308. package/file-selector-common-C-gZH55c.js +0 -313
  1309. package/file-selector-dropzone.component-LHNtOZPr.js +0 -94
  1310. package/flip-card-details.component-CiiCNjd2.js +0 -45
  1311. package/flip-card-summary.component-nO7zKRiB.js +0 -65
  1312. package/flip-card.component-uSdokrC9.js +0 -138
  1313. package/footer.component-Cdsiwn4D.js +0 -129
  1314. package/form-field.component-CZzQYOSP.js +0 -447
  1315. package/header-action-common-C2YPvOxq.js +0 -62
  1316. package/header-environment.component-KqUmsOPQ.js +0 -36
  1317. package/header.component-BssLZ6b7.js +0 -203
  1318. package/icon-base-BYJzaEDb.js +0 -127
  1319. package/icon-sidebar-container.component-BcoT4uhN.js +0 -26
  1320. package/icon-sidebar-content.component-toRpXgxi.js +0 -20
  1321. package/icon-sidebar.component-B5xCvDvj.js +0 -62
  1322. package/image.component-Cq2t-XZu.js +0 -413
  1323. package/inline-link-common-Dgdi7qpI.js +0 -18
  1324. package/journey-header.component-CR8AO0b2.js +0 -143
  1325. package/lead-container.component-CXKHfBiS.js +0 -27
  1326. package/link-common-CYxyP4XZ.js +0 -52
  1327. package/link-list-anchor.component--u5j_aqv.js +0 -18
  1328. package/link-list-base-CzFYpTOG.js +0 -115
  1329. package/link-list.component-9ndHNGPS.js +0 -78
  1330. package/loading-indicator-circle.component-CjJkIeJ0.js +0 -64
  1331. package/loading-indicator.component-BrVz6vJo.js +0 -94
  1332. package/logo.component-nxragzaC.js +0 -94
  1333. package/map-container.component-BfxezELq.js +0 -130
  1334. package/menu-action-common-BcB_Tyvl.js +0 -29
  1335. package/menu.component-BdqUbvww.js +0 -252
  1336. package/message.component-DbmXg6DI.js +0 -27
  1337. package/mini-button-group.component-D5Dph1Z7.js +0 -89
  1338. package/mini-button-link.component-BYK_EUud.js +0 -31
  1339. package/mini-calendar-day.component-cAawa9Gr.js +0 -106
  1340. package/mini-calendar-month.component-DiYSVb-Y.js +0 -74
  1341. package/mini-calendar.component-DpPMb47Y.js +0 -144
  1342. package/navigation-action-common-Dcb95pqU.js +0 -64
  1343. package/navigation-list.component-BhV-uAfU.js +0 -71
  1344. package/navigation-marker.component-CIUu5VVZ.js +0 -88
  1345. package/navigation-section.component-DwEXj603.js +0 -237
  1346. package/navigation.component-BYqJ9Cqt.js +0 -208
  1347. package/notification.component-DZS8z1oa.js +0 -197
  1348. package/optgroup-base-element-DWKHCat8.js +0 -107
  1349. package/option-hint.component-Goyhv5ss.js +0 -23
  1350. package/option.component-uzmmREt4.js +0 -98
  1351. package/overlay.component-r0Rp_b-3.js +0 -163
  1352. package/paginator.component-D_fV260x.js +0 -206
  1353. package/popover.component-Dh9vbuDG.js +0 -353
  1354. package/radio-button-common-CCQ3bJPI.js +0 -77
  1355. package/radio-button-group.component-Cf8r6Whf.js +0 -232
  1356. package/radio-button.component-B5b5OhBw.js +0 -93
  1357. package/sbb-tokens-BJzKBCf8.js +0 -4
  1358. package/screen-reader-only.component-B06hVxPg.js +0 -16
  1359. package/select.component-BZbDGrv8.js +0 -522
  1360. package/selection-action-panel.component-_kh6l2sj.js +0 -35
  1361. package/selection-expansion-panel.component-ChMYCw38.js +0 -144
  1362. package/sidebar-close-button.component-B9QGnQLs.js +0 -30
  1363. package/sidebar-container.component-BW24Ap9F.js +0 -63
  1364. package/sidebar-content.component-DSTp9Iu6.js +0 -20
  1365. package/sidebar-title.component-COjEsAkk.js +0 -53
  1366. package/sidebar.component-C2YYQj-Q.js +0 -238
  1367. package/signet.component-CixiIpLj.js +0 -101
  1368. package/skiplink-list.component-CINJgt_l.js +0 -102
  1369. package/slider.component-BhtuB-8p.js +0 -249
  1370. package/status.component-BZ8zajOL.js +0 -83
  1371. package/step-label.component-COJYo-MI.js +0 -82
  1372. package/step.component-BIOQdZVR.js +0 -94
  1373. package/stepper.component-D2vhtDCy.js +0 -286
  1374. package/sticky-bar.component-CYCOEGz7.js +0 -141
  1375. package/styles-DpIXFSVm.js +0 -5
  1376. package/styles-uZGSPqgK.js +0 -5
  1377. package/tab-group.component-nprcnwFB.js +0 -185
  1378. package/tab-label.component-BeLuYRBg.js +0 -165
  1379. package/tab-nav-bar.component-Du1JyNtu.js +0 -81
  1380. package/tab.component-D8Rz05Fo.js +0 -48
  1381. package/table-wrapper.component-DkaL4T5V.js +0 -83
  1382. package/tag-group.component-CW6Z9-P6.js +0 -143
  1383. package/tag.component-CvZpvIuw.js +0 -170
  1384. package/teaser-hero.component-Dolg4-Yz.js +0 -80
  1385. package/teaser-product-common-q2IZHbkr.js +0 -62
  1386. package/teaser-product.component-DVdyKe6h.js +0 -29
  1387. package/teaser.component-DPvDVG6b.js +0 -91
  1388. package/time-input.component-ChWhDF5l.js +0 -141
  1389. package/timetable-form-details.component-Du6WPn3y.js +0 -16
  1390. package/timetable-form-field.component-Cb3FYKL7.js +0 -32
  1391. package/timetable-form-swap-button.component-ByQDf7oy.js +0 -37
  1392. package/timetable-form.component-BqokC_4S.js +0 -16
  1393. package/timetable-occupancy-icon.component-BhXQSFZR.js +0 -72
  1394. package/timetable-occupancy.component-DnaQ0TIW.js +0 -101
  1395. package/title-base-D4nE41tH.js +0 -80
  1396. package/title.component-DNBy2mIm.js +0 -54
  1397. package/toast.component-B9Gm8Kls.js +0 -189
  1398. package/toggle-check.component-BcxMe5Zi.js +0 -119
  1399. package/toggle-option.component-DvdEjT2c.js +0 -123
  1400. package/toggle.component-Lnj5TugJ.js +0 -161
  1401. package/tooltip.component-B5fKuZdI.js +0 -228
  1402. package/train-blocked-passage.component-Dz7lD_V1.js +0 -23
  1403. package/train-formation.component-CGTqQgp7.js +0 -121
  1404. package/train-wagon.component-BW-JxcK6.js +0 -259
  1405. package/train.component-B_Nlu8Kh.js +0 -176
  1406. package/visual-checkbox.component-bB_pG0vn.js +0 -118
@@ -1,2 +1,1087 @@
1
- import { t as SbbSelectElement } from "../select.component-DyF5Tw3J.js";
2
- export { SbbSelectElement };
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 { __esDecorate, __runInitializers } from "tslib";
9
+ import { MutationController } from "@lit-labs/observers/mutation-controller.js";
10
+ import { ResizeController } from "@lit-labs/observers/resize-controller.js";
11
+ import { css, isServer, html, nothing } from "lit";
12
+ import { property, state } from "lit/decorators.js";
13
+ import { ref } from "lit/directives/ref.js";
14
+ import { until } from "lit/directives/until.js";
15
+ import { getNextElementIndex } from "../core/a11y.js";
16
+ import { SbbOpenCloseBaseElement } from "../core/base-elements.js";
17
+ import { SbbEscapableOverlayController, SbbLanguageController, SbbPropertyWatcherController } from "../core/controllers.js";
18
+ import { forceType, handleDistinctChange, getOverride } from "../core/decorators.js";
19
+ import { isLean, setOrRemoveAttribute, isZeroAnimationDuration, isNextjs, isSafari } from "../core/dom.js";
20
+ import { i18nSelectionRequired } from "../core/i18n.js";
21
+ import { SbbUpdateSchedulerMixin, SbbDisabledMixin, SbbNegativeMixin, SbbRequiredMixin, SbbReadonlyMixin, SbbFormAssociatedMixin } from "../core/mixins.js";
22
+ import { isEventOnElement, setOverlayPosition, overlayGapFixCorners } from "../core/overlay.js";
23
+ import { boxSizingStyles } from "../core/styles.js";
24
+ const style = css`.sbb-gap-fix-wrapper {
25
+ position: relative;
26
+ overflow: hidden;
27
+ width: var(--sbb-options-panel-border-radius);
28
+ height: var(--sbb-options-panel-border-radius);
29
+ background-color: transparent;
30
+ }
31
+
32
+ .sbb-gap-fix-corner {
33
+ position: absolute;
34
+ border-radius: 50%;
35
+ border: calc(var(--sbb-options-panel-border-radius) / 2) solid var(--sbb-options-panel-background-color);
36
+ width: calc(var(--sbb-options-panel-border-radius) * 3);
37
+ height: calc(var(--sbb-options-panel-border-radius) * 3);
38
+ bottom: calc(var(--sbb-options-panel-border-radius) / 2 * -1);
39
+ }
40
+
41
+ .sbb-gap-fix-corner#left {
42
+ left: calc(var(--sbb-options-panel-border-radius) / 2 * -1);
43
+ }
44
+ :host(:dir(rtl)) .sbb-gap-fix-corner#left {
45
+ right: calc(var(--sbb-options-panel-border-radius) / 2 * -1);
46
+ left: unset;
47
+ }
48
+
49
+ .sbb-gap-fix-corner#right {
50
+ right: calc(var(--sbb-options-panel-border-radius) / 2 * -1);
51
+ }
52
+ :host(:dir(rtl)) .sbb-gap-fix-corner#right {
53
+ left: calc(var(--sbb-options-panel-border-radius) / 2 * -1);
54
+ right: unset;
55
+ }
56
+
57
+ :host {
58
+ --sbb-scrollbar-thumb-width: 0.125rem;
59
+ --sbb-scrollbar-thumb-width-hover: 0.25rem;
60
+ --sbb-scrollbar-width-firefox: thin;
61
+ --sbb-scrollbar-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);
62
+ --sbb-scrollbar-color: light-dark(
63
+ color-mix(in srgb, var(--sbb-color-black) 30%, transparent),
64
+ color-mix(in srgb, var(--sbb-color-white) 30%, transparent)
65
+ );
66
+ --sbb-scrollbar-color-hover: color-mix(in srgb, var(--sbb-color-black) 60%, transparent);
67
+ --sbb-scrollbar-color-hover: light-dark(
68
+ color-mix(in srgb, var(--sbb-color-black) 60%, transparent),
69
+ color-mix(in srgb, var(--sbb-color-white) 60%, transparent)
70
+ );
71
+ --sbb-scrollbar-track-color: transparent;
72
+ --sbb-options-panel-position-x: 0;
73
+ --sbb-options-panel-position-y: 0;
74
+ --_sbb-options-panel-max-height: min(
75
+ var(--sbb-options-panel-max-height-calculated),
76
+ var(--sbb-options-panel-max-height, 100000em)
77
+ );
78
+ --sbb-options-panel-min-height: var(--sbb-options-panel-origin-height);
79
+ --sbb-options-panel-options-border-radius: 0 0 var(--sbb-options-panel-border-radius)
80
+ var(--sbb-options-panel-border-radius);
81
+ --sbb-options-panel-animation-duration: var(
82
+ --sbb-disable-animation-duration,
83
+ var(--sbb-animation-duration-4x)
84
+ );
85
+ --sbb-options-panel-gap-fix-top: calc(
86
+ var(--sbb-options-panel-position-y) - var(--sbb-options-panel-border-radius)
87
+ );
88
+ --sbb-focus-outline-color: var(--sbb-focus-outline-color-default);
89
+ --sbb-focus-outline-color: light-dark(
90
+ var(--sbb-focus-outline-color-default),
91
+ var(--sbb-focus-outline-color-dark)
92
+ );
93
+ --sbb-options-panel-internal-z-index: var(
94
+ --sbb-select-z-index,
95
+ var(--sbb-overlay-default-z-index)
96
+ );
97
+ --sbb-select-placeholder-fallback-color: var(--sbb-color-metal);
98
+ --sbb-select-placeholder-fallback-color: light-dark(
99
+ var(--sbb-color-metal),
100
+ var(--sbb-color-smoke)
101
+ );
102
+ display: block;
103
+ }
104
+
105
+ :host([size=s]) {
106
+ --sbb-options-panel-padding-block: var(--sbb-spacing-fixed-1x);
107
+ }
108
+
109
+ :host([size=m]) {
110
+ --sbb-options-panel-padding-block: var(--sbb-spacing-fixed-2x);
111
+ }
112
+
113
+ :host([negative]) {
114
+ --sbb-scrollbar-color: color-mix(in srgb, var(--sbb-color-white) 30%, transparent);
115
+ --sbb-scrollbar-color-hover: color-mix(in srgb, var(--sbb-color-white) 60%, transparent);
116
+ --sbb-options-panel-background-color: var(--sbb-background-color-1-negative);
117
+ --sbb-focus-outline-color: var(--sbb-focus-outline-color-dark);
118
+ --sbb-select-placeholder-fallback-color: var(--sbb-color-5);
119
+ }
120
+
121
+ :host(:not(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))),
122
+ :host(:is(:state(state-closed),[state--state-closed])) {
123
+ --sbb-options-panel-visibility: hidden;
124
+ }
125
+
126
+ :host(:is(:state(state-opening),[state--state-opening])) {
127
+ --sbb-options-panel-animation-name: open;
128
+ }
129
+
130
+ :host(:is(:state(state-closing),[state--state-closing])) {
131
+ --sbb-options-panel-animation-name: close;
132
+ }
133
+
134
+ :host(:is(:state(state-opened),[state--state-opened])),
135
+ :host(:is(:state(state-opening),[state--state-opening])) {
136
+ --sbb-options-panel-gap-fix-opacity: 1;
137
+ }
138
+
139
+ :host(:is(:state(options-panel-position-below),[state--options-panel-position-below])) {
140
+ --sbb-options-panel-animation-transform: translateY(
141
+ calc((var(--sbb-options-panel-origin-height) / 2) * -1)
142
+ );
143
+ }
144
+
145
+ :host(:is(:state(options-panel-position-above),[state--options-panel-position-above])) {
146
+ --sbb-options-panel-options-border-radius: var(--sbb-options-panel-border-radius)
147
+ var(--sbb-options-panel-border-radius) 0 0;
148
+ --sbb-options-panel-gap-fix-top: var(--_sbb-options-panel-max-height);
149
+ --sbb-options-panel-gap-fix-transform: rotate(180deg);
150
+ --sbb-options-panel-animation-transform: translateY(
151
+ calc(var(--sbb-options-panel-origin-height) / 2)
152
+ );
153
+ }
154
+
155
+ ::slotted(sbb-divider) {
156
+ margin-block: var(--sbb-options-panel-divider-margin-block);
157
+ }
158
+
159
+ :host([preserve-icon-space]) {
160
+ --sbb-option-icon-container-display: block;
161
+ }
162
+
163
+ .sbb-select__trigger {
164
+ overflow: hidden;
165
+ white-space: nowrap;
166
+ text-overflow: ellipsis;
167
+ cursor: var(--sbb-cursor-default);
168
+ height: calc(1em * var(--sbb-typo-line-height-text));
169
+ }
170
+
171
+ .sbb-select__trigger--placeholder {
172
+ color: var(--sbb-select-placeholder-color, var(--sbb-select-placeholder-fallback-color));
173
+ -webkit-text-fill-color: var(--sbb-select-placeholder-color, var(--sbb-select-placeholder-fallback-color));
174
+ }
175
+
176
+ .sbb-select__container {
177
+ position: fixed;
178
+ pointer-events: none;
179
+ inset: 0;
180
+ z-index: var(--sbb-options-panel-internal-z-index);
181
+ }
182
+ .sbb-select__container[popover] {
183
+ margin: 0;
184
+ padding: 0;
185
+ border: none;
186
+ width: auto;
187
+ height: auto;
188
+ background-color: transparent;
189
+ }
190
+
191
+ .sbb-select__gap-fix {
192
+ display: flex;
193
+ justify-content: space-between;
194
+ position: fixed;
195
+ visibility: var(--sbb-options-panel-visibility, visible);
196
+ opacity: var(--sbb-options-panel-gap-fix-opacity, 0);
197
+ background-color: transparent;
198
+ width: var(--sbb-options-panel-width, fit-content);
199
+ height: var(--sbb-options-panel-border-radius);
200
+ top: var(--sbb-options-panel-gap-fix-top);
201
+ left: var(--sbb-options-panel-position-x);
202
+ transform: var(--sbb-options-panel-gap-fix-transform, none);
203
+ transition: opacity var(--sbb-options-panel-animation-duration) var(--sbb-options-panel-animation-timing-function);
204
+ }
205
+
206
+ .sbb-select__panel {
207
+ display: block;
208
+ position: absolute;
209
+ visibility: var(--sbb-options-panel-visibility, "visible");
210
+ overflow: hidden;
211
+ background-color: transparent;
212
+ border: none;
213
+ border-radius: var(--sbb-options-panel-border-radius);
214
+ top: var(--sbb-options-panel-position-y);
215
+ left: var(--sbb-options-panel-position-x);
216
+ width: var(--sbb-options-panel-width, fit-content);
217
+ transition: box-shadow var(--sbb-options-panel-animation-duration) var(--sbb-options-panel-animation-timing-function);
218
+ }
219
+ .sbb-select__panel::before, .sbb-select__panel::after {
220
+ content: "";
221
+ display: none;
222
+ position: relative;
223
+ width: 100%;
224
+ height: var(--sbb-options-panel-origin-height);
225
+ background-color: transparent;
226
+ border-radius: var(--sbb-options-panel-border-radius);
227
+ pointer-events: none;
228
+ transition: box-shadow var(--sbb-options-panel-animation-duration) var(--sbb-options-panel-animation-timing-function);
229
+ z-index: 1;
230
+ }
231
+ :host(:is(:state(options-panel-position-below),[state--options-panel-position-below])) .sbb-select__panel {
232
+ inset-block-start: calc(var(--sbb-options-panel-position-y) - var(--sbb-options-panel-origin-height));
233
+ }
234
+ :host(:is(:is(:state(state-opened),[state--state-opened]), :is(:state(state-opening),[state--state-opening]))) .sbb-select__panel {
235
+ box-shadow: var(--sbb-box-shadow-level-5-hard);
236
+ }
237
+ :host(:is(:is(:state(state-opened),[state--state-opened]), :is(:state(state-opening),[state--state-opening]))[negative]) .sbb-select__panel {
238
+ box-shadow: var(--sbb-box-shadow-level-5-hard-negative);
239
+ }
240
+ :host(:is(:state(options-panel-position-below),[state--options-panel-position-below])) .sbb-select__panel::before {
241
+ display: block;
242
+ }
243
+ :host(:is(:state(options-panel-position-above),[state--options-panel-position-above])) .sbb-select__panel::after {
244
+ display: block;
245
+ }
246
+ :host(:is(:is(:state(state-opened),[state--state-opened]), :is(:state(state-opening),[state--state-opening])):is(:state(option-panel-origin-borderless),[state--option-panel-origin-borderless])) .sbb-select__panel::before, :host(:is(:is(:state(state-opened),[state--state-opened]), :is(:state(state-opening),[state--state-opening])):is(:state(option-panel-origin-borderless),[state--option-panel-origin-borderless])) .sbb-select__panel::after {
247
+ box-shadow: var(--sbb-box-shadow-level-5-hard);
248
+ }
249
+ :host(:is(:is(:state(state-opened),[state--state-opened]), :is(:state(state-opening),[state--state-opening])):is(:state(option-panel-origin-borderless),[state--option-panel-origin-borderless])[negative]) .sbb-select__panel::before, :host(:is(:is(:state(state-opened),[state--state-opened]), :is(:state(state-opening),[state--state-opening])):is(:state(option-panel-origin-borderless),[state--option-panel-origin-borderless])[negative]) .sbb-select__panel::after {
250
+ box-shadow: var(--sbb-box-shadow-level-5-hard-negative);
251
+ }
252
+
253
+ .sbb-select__wrapper {
254
+ overflow: hidden;
255
+ }
256
+
257
+ .sbb-select__options {
258
+ background-color: var(--sbb-options-panel-background-color);
259
+ padding-block: var(--sbb-options-panel-padding-block);
260
+ padding-inline: 0;
261
+ border-radius: var(--sbb-options-panel-options-border-radius);
262
+ max-height: var(--_sbb-options-panel-max-height);
263
+ min-height: var(--sbb-options-panel-min-height);
264
+ pointer-events: all;
265
+ overflow-y: auto;
266
+ animation-name: var(--sbb-options-panel-animation-name);
267
+ animation-duration: var(--sbb-options-panel-animation-duration);
268
+ animation-timing-function: var(--sbb-options-panel-animation-timing-function);
269
+ --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);
270
+ }
271
+ .sbb-select__options::-webkit-scrollbar {
272
+ width: var(--sbb-scrollbar-width);
273
+ height: var(--sbb-scrollbar-width);
274
+ background-color: var(--sbb-scrollbar-track-color, transparent);
275
+ }
276
+ .sbb-select__options::-webkit-scrollbar-corner {
277
+ background-color: var(--sbb-scrollbar-track-color, transparent);
278
+ }
279
+ .sbb-select__options::-webkit-scrollbar-thumb {
280
+ background-color: var(--sbb-scrollbar-color, currentcolor);
281
+ border: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width))) solid transparent;
282
+ border-radius: var(--sbb-border-radius-4x);
283
+ background-clip: padding-box;
284
+ }
285
+ .sbb-select__options::-webkit-scrollbar-thumb:hover {
286
+ background-color: var(--sbb-scrollbar-color-hover, currentcolor);
287
+ border-width: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width-hover)));
288
+ }
289
+ .sbb-select__options::-webkit-scrollbar-button, .sbb-select__options::-webkit-scrollbar-corner {
290
+ display: none;
291
+ }
292
+ @supports not selector(::-webkit-scrollbar) {
293
+ .sbb-select__options {
294
+ scrollbar-width: var(--sbb-scrollbar-width-firefox);
295
+ scrollbar-color: var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent);
296
+ }
297
+ }
298
+ @media (forced-colors: active) {
299
+ .sbb-select__options {
300
+ border: var(--sbb-border-width-1x) solid CanvasText;
301
+ border-block-start: none;
302
+ }
303
+ }
304
+
305
+ @keyframes open {
306
+ from {
307
+ transform: var(--sbb-options-panel-animation-transform);
308
+ opacity: 0;
309
+ }
310
+ to {
311
+ transform: translateY(0);
312
+ opacity: 1;
313
+ }
314
+ }
315
+ @keyframes close {
316
+ from {
317
+ transform: translateY(0);
318
+ opacity: 1;
319
+ }
320
+ to {
321
+ transform: var(--sbb-options-panel-animation-transform);
322
+ opacity: 0;
323
+ }
324
+ }`;
325
+ const ariaRoleOnHost = isSafari;
326
+ let nextId = 0;
327
+ let SbbSelectElement = (() => {
328
+ var _placeholder_accessor_storage, _multiple_accessor_storage, _disabled_accessor_storage, _size_accessor_storage, __displayValue_accessor_storage, _a;
329
+ let _classSuper = SbbUpdateSchedulerMixin(SbbDisabledMixin(SbbNegativeMixin(SbbRequiredMixin(SbbReadonlyMixin(SbbFormAssociatedMixin(SbbOpenCloseBaseElement))))));
330
+ let _instanceExtraInitializers = [];
331
+ let _placeholder_decorators;
332
+ let _placeholder_initializers = [];
333
+ let _placeholder_extraInitializers = [];
334
+ let _multiple_decorators;
335
+ let _multiple_initializers = [];
336
+ let _multiple_extraInitializers = [];
337
+ let _disabled_decorators;
338
+ let _disabled_initializers = [];
339
+ let _disabled_extraInitializers = [];
340
+ let _set_value_decorators;
341
+ let _size_decorators;
342
+ let _size_initializers = [];
343
+ let _size_extraInitializers = [];
344
+ let __displayValue_decorators;
345
+ let __displayValue_initializers = [];
346
+ let __displayValue_extraInitializers = [];
347
+ return _a = class extends _classSuper {
348
+ constructor() {
349
+ super();
350
+ __privateAdd(this, _placeholder_accessor_storage);
351
+ __privateAdd(this, _multiple_accessor_storage);
352
+ __privateAdd(this, _disabled_accessor_storage);
353
+ __privateAdd(this, _size_accessor_storage);
354
+ __privateAdd(this, __displayValue_accessor_storage);
355
+ __privateSet(this, _placeholder_accessor_storage, (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _placeholder_initializers, "")));
356
+ __privateSet(this, _multiple_accessor_storage, (__runInitializers(this, _placeholder_extraInitializers), __runInitializers(this, _multiple_initializers, false)));
357
+ __privateSet(this, _disabled_accessor_storage, (__runInitializers(this, _multiple_extraInitializers), __runInitializers(this, _disabled_initializers, false)));
358
+ this._value = (__runInitializers(this, _disabled_extraInitializers), null);
359
+ __privateSet(this, _size_accessor_storage, __runInitializers(this, _size_initializers, isLean() ? "s" : "m"));
360
+ __privateSet(this, __displayValue_accessor_storage, (__runInitializers(this, _size_extraInitializers), __runInitializers(this, __displayValue_initializers, null)));
361
+ this._originResizeObserver = (__runInitializers(this, __displayValue_extraInitializers), new ResizeController(this, {
362
+ target: null,
363
+ skipInitial: true,
364
+ callback: () => {
365
+ if (this.isOpen) {
366
+ this._setOverlayPosition();
367
+ }
368
+ }
369
+ }));
370
+ this._originElement = null;
371
+ this._triggerElement = null;
372
+ this._escapableOverlayController = new SbbEscapableOverlayController(this);
373
+ this._overlayId = `sbb-select-${++nextId}`;
374
+ this._activeItemIndex = -1;
375
+ this._searchString = "";
376
+ this._didLoad = false;
377
+ this._isPointerDownEventOnMenu = false;
378
+ this._languageController = new SbbLanguageController(this);
379
+ this._isValueManuallyAssigned = false;
380
+ this._pointerDownListener = (event) => {
381
+ this._isPointerDownEventOnMenu = isEventOnElement(this._overlay, event);
382
+ };
383
+ this._closeOnBackdropClick = (event) => {
384
+ if (!this._isPointerDownEventOnMenu && !isEventOnElement(this._overlay, event)) {
385
+ this.close();
386
+ }
387
+ };
388
+ this.addEventListener?.("optionselectionchange", (e) => this._onOptionChanged(e));
389
+ this.addEventListener?.("optionLabelChanged", (e) => this._onOptionLabelChanged(e));
390
+ this.addEventListener?.("ɵoptgroupslotchange", () => this._updateValueOptionState(), {
391
+ capture: true
392
+ });
393
+ this.addEventListener?.("click", (e) => {
394
+ const target = e.target;
395
+ if (target.localName === "sbb-option") {
396
+ if (!this.multiple && !target.disabled) {
397
+ this.close();
398
+ this.focus();
399
+ }
400
+ } else {
401
+ this._toggleOpening();
402
+ }
403
+ });
404
+ this.addController(new MutationController(this, {
405
+ config: { attributeFilter: ["aria-labelledby", "aria-label", "aria-describedby"] },
406
+ callback: () => this._syncAriaLabels()
407
+ }));
408
+ this.addController(new SbbPropertyWatcherController(this, () => this.closest("sbb-form-field"), {
409
+ negative: (e) => {
410
+ this.negative = e.negative;
411
+ this._syncNegative();
412
+ }
413
+ }));
414
+ }
415
+ /** The placeholder used if no value has been selected. */
416
+ get placeholder() {
417
+ return __privateGet(this, _placeholder_accessor_storage);
418
+ }
419
+ set placeholder(value) {
420
+ __privateSet(this, _placeholder_accessor_storage, value);
421
+ }
422
+ /** Whether the select allows for multiple selection. */
423
+ get multiple() {
424
+ return __privateGet(this, _multiple_accessor_storage);
425
+ }
426
+ set multiple(value) {
427
+ __privateSet(this, _multiple_accessor_storage, value);
428
+ }
429
+ get disabled() {
430
+ return __privateGet(this, _disabled_accessor_storage);
431
+ }
432
+ set disabled(value) {
433
+ __privateSet(this, _disabled_accessor_storage, value);
434
+ }
435
+ /** Value of the form element. */
436
+ set value(value) {
437
+ this._value = value;
438
+ this._updateOptionsFromValue();
439
+ this._isValueManuallyAssigned = true;
440
+ }
441
+ get value() {
442
+ return this._value;
443
+ }
444
+ /**
445
+ * Size variant, either m or s.
446
+ * @default 'm' / 's' (lean)
447
+ */
448
+ get size() {
449
+ return __privateGet(this, _size_accessor_storage);
450
+ }
451
+ set size(value) {
452
+ __privateSet(this, _size_accessor_storage, value);
453
+ }
454
+ /**
455
+ * Form type of element.
456
+ * @default 'select-one / select-multiple'
457
+ */
458
+ get type() {
459
+ return this.multiple ? "select-multiple" : "select-one";
460
+ }
461
+ /** The value displayed by the component. */
462
+ get _displayValue() {
463
+ return __privateGet(this, __displayValue_accessor_storage);
464
+ }
465
+ set _displayValue(value) {
466
+ __privateSet(this, __displayValue_accessor_storage, value);
467
+ }
468
+ /**
469
+ * The 'combobox' input element
470
+ * @internal
471
+ */
472
+ get inputElement() {
473
+ return this._triggerElement ?? null;
474
+ }
475
+ /** Returns all SbbOptionElements from this sbb-select instance. */
476
+ get options() {
477
+ const options = [];
478
+ this.querySelectorAll?.("sbb-option").forEach((option) => {
479
+ customElements.upgrade(option);
480
+ options.push(option);
481
+ });
482
+ return options;
483
+ }
484
+ _syncAriaLabels() {
485
+ if (!this._triggerElement || isServer) {
486
+ return;
487
+ }
488
+ setOrRemoveAttribute(this._triggerElement, "aria-labelledby", this.getAttribute("aria-labelledby"));
489
+ setOrRemoveAttribute(this._triggerElement, "aria-label", this.getAttribute("aria-label"));
490
+ setOrRemoveAttribute(this._triggerElement, "aria-describedby", this.getAttribute("aria-describedby"));
491
+ if (!this.getAttribute("aria-label") && !this.getAttribute("aria-labelledby") && this.internals.labels.length) {
492
+ this._triggerElement?.setAttribute("aria-label", Array.from(this.internals.labels).map((label) => label.textContent).join(", "));
493
+ }
494
+ }
495
+ /** Opens the selection panel. */
496
+ open() {
497
+ if (this.state === "opening" || this.state === "opened" || !this._overlay || this.options.length === 0 || this.disabled || this.formDisabled || !this.dispatchBeforeOpenEvent()) {
498
+ return;
499
+ }
500
+ this.shadowRoot?.querySelector(".sbb-select__container")?.showPopover?.();
501
+ this.state = "opening";
502
+ this.internals.states.add("expanded");
503
+ this._setOverlayPosition();
504
+ this._escapableOverlayController.connect();
505
+ this._attachOpenPanelEvents();
506
+ if (this._isZeroAnimationDuration()) {
507
+ this._handleOpening();
508
+ }
509
+ }
510
+ /** Closes the selection panel. */
511
+ close() {
512
+ if (this.state === "closing" || this.state === "closed" || !this.dispatchBeforeCloseEvent()) {
513
+ return;
514
+ }
515
+ this.state = "closing";
516
+ this.internals.states.delete("expanded");
517
+ this._openPanelEventsController?.abort();
518
+ if (this._originElement) {
519
+ this._originResizeObserver.unobserve(this._originElement);
520
+ }
521
+ if (this._isZeroAnimationDuration()) {
522
+ this._handleClosing();
523
+ }
524
+ }
525
+ _isZeroAnimationDuration() {
526
+ return isZeroAnimationDuration(this, "--sbb-options-panel-animation-duration");
527
+ }
528
+ /** Gets the current displayed value. */
529
+ getDisplayValue() {
530
+ return this._displayValue ?? "";
531
+ }
532
+ _selectableOptions() {
533
+ return this.options.filter((opt) => !opt.matches(":is(:state(disabled),[state--disabled])"));
534
+ }
535
+ /** Listens to option changes. */
536
+ _onOptionChanged(event) {
537
+ const target = event.target;
538
+ if (target.selected) {
539
+ this._onOptionSelected(target);
540
+ } else {
541
+ this._onOptionDeselected(target);
542
+ }
543
+ }
544
+ /** Listens to option changes. */
545
+ _onOptionLabelChanged(event) {
546
+ const target = event.target;
547
+ const selected = this._getSelected();
548
+ if (!Array.isArray(selected) && target !== selected || Array.isArray(selected) && !selected.includes(target)) {
549
+ return;
550
+ }
551
+ this._updateDisplayValue();
552
+ }
553
+ _updateDisplayValue() {
554
+ const selected = this._getSelected();
555
+ if (Array.isArray(selected)) {
556
+ this._displayValue = selected.map((o) => o.textContent?.trim()).join(", ") || null;
557
+ } else if (selected) {
558
+ this._displayValue = selected?.textContent?.trim() || null;
559
+ } else {
560
+ this._displayValue = null;
561
+ }
562
+ this.dispatchEvent(new Event("displayvaluechange", { bubbles: true, composed: true }));
563
+ }
564
+ /**
565
+ * The `value` property should be adapted when the `multiple` property changes:
566
+ * - if it changes to true, the 'value' is set to an array;
567
+ * - if it changes to false, the first available option is set as 'value' otherwise it's set to null.
568
+ */
569
+ _onMultipleChanged(isChangingToMultiple) {
570
+ if (isChangingToMultiple) {
571
+ this._value = this._isValueManuallyAssigned || this.value != null ? [this.value] : [];
572
+ } else if (Array.isArray(this.value)) {
573
+ this._value = this.value.length ? this.value[0] : null;
574
+ }
575
+ this._updateDisplayValue();
576
+ }
577
+ /**
578
+ * If the `disabled` or the `readonly` properties are set, and the panel is open, close it.
579
+ */
580
+ _closeOnDisabledReadonlyChanged(newValue) {
581
+ if ((this.state === "opening" || this.state === "opened") && newValue) {
582
+ this.close();
583
+ }
584
+ }
585
+ firstUpdated(changedProperties) {
586
+ super.firstUpdated(changedProperties);
587
+ this._updateValueOptionState();
588
+ if (!isNextjs()) {
589
+ this.startUpdate();
590
+ this._setupSelect();
591
+ }
592
+ }
593
+ /** @internal */
594
+ focus() {
595
+ this._triggerElement?.focus();
596
+ }
597
+ /** @internal */
598
+ blur() {
599
+ this._triggerElement?.blur();
600
+ }
601
+ /**
602
+ * Removes element's first attribute whose qualified name is qualifiedName.
603
+ *
604
+ * [MDN Reference](https://developer.mozilla.org/docs/Web/API/Element/removeAttribute)
605
+ * @internal We need to override this due to a hydration issue with Next.js.
606
+ */
607
+ removeAttribute(qualifiedName) {
608
+ if (isNextjs() && qualifiedName === "defer-hydration" && !this._didLoad) {
609
+ this.updateComplete.then(() => this._setupSelect());
610
+ }
611
+ super.removeAttribute(qualifiedName);
612
+ }
613
+ connectedCallback() {
614
+ super.connectedCallback();
615
+ if (ariaRoleOnHost) {
616
+ this.id ||= this._overlayId;
617
+ }
618
+ this._syncNegative();
619
+ this._syncAriaLabels();
620
+ if (this._didLoad) {
621
+ this._setupOrigin();
622
+ this._setupTrigger();
623
+ }
624
+ }
625
+ requestUpdate(name, oldValue, options) {
626
+ super.requestUpdate(name, oldValue, options);
627
+ if (!name && this.hasUpdated) {
628
+ setTimeout(() => this._syncAriaLabels());
629
+ }
630
+ }
631
+ willUpdate(changedProperties) {
632
+ super.willUpdate(changedProperties);
633
+ if (changedProperties.has("negative")) {
634
+ this._syncNegative();
635
+ }
636
+ if (changedProperties.has("readOnly")) {
637
+ this._closeOnDisabledReadonlyChanged(this.readOnly);
638
+ }
639
+ }
640
+ disconnectedCallback() {
641
+ if (this._triggerElement) {
642
+ this.prepend(this._triggerElement);
643
+ }
644
+ super.disconnectedCallback();
645
+ this._openPanelEventsController?.abort();
646
+ }
647
+ /**
648
+ * The reset value is the attribute value (the setup value), null otherwise.
649
+ * @internal
650
+ */
651
+ formResetCallback() {
652
+ this.value = this.hasAttribute("value") ? this.getAttribute("value") : null;
653
+ }
654
+ /**
655
+ * @internal
656
+ */
657
+ formStateRestoreCallback(state2, _reason) {
658
+ try {
659
+ const { value, manuallyAssigned } = JSON.parse(state2);
660
+ const values = Array.isArray(value) ? value : [value];
661
+ if (values.some((v) => v !== null && typeof v === "object")) {
662
+ console.warn(`Restoring complex objects is not supported for sbb-select with state ${state2}`);
663
+ return;
664
+ }
665
+ this._isValueManuallyAssigned = manuallyAssigned;
666
+ this._value = value;
667
+ this._updateOptionsFromValue();
668
+ } catch {
669
+ console.warn(`Failed to restore sbb-select with state ${state2}`);
670
+ }
671
+ }
672
+ formState() {
673
+ return JSON.stringify({ value: this.value, manuallyAssigned: this._isValueManuallyAssigned });
674
+ }
675
+ _syncNegative() {
676
+ this.querySelectorAll?.("sbb-divider, sbb-option-hint").forEach((el) => el.negative = this.negative);
677
+ }
678
+ shouldValidate(name) {
679
+ return super.shouldValidate(name) || name === "value" || name === "required";
680
+ }
681
+ validate() {
682
+ super.validate();
683
+ if (this.required && (this.options.every((o) => o.value !== this.value) || !this._isValueManuallyAssigned && this.value == null)) {
684
+ this.setValidityFlag("valueMissing", i18nSelectionRequired[this._languageController.current]);
685
+ } else {
686
+ this.removeValidityFlag("valueMissing");
687
+ }
688
+ }
689
+ _setupSelect() {
690
+ this._setupOrigin();
691
+ this._setupTrigger();
692
+ this._didLoad = true;
693
+ this.completeUpdate();
694
+ }
695
+ /** Sets the originElement; if the component is used in a sbb-form-field uses it, otherwise uses the parentElement. */
696
+ _setupOrigin() {
697
+ const formField = this.closest?.("sbb-form-field");
698
+ if (this._originElement) {
699
+ this._originResizeObserver.unobserve(this._originElement);
700
+ }
701
+ this._originElement = formField?.shadowRoot?.querySelector?.("#overlay-anchor") ?? this.parentElement;
702
+ if (this._originElement) {
703
+ this.toggleState("option-panel-origin-borderless", formField?.hasAttribute?.("borderless"));
704
+ if (this.isOpen) {
705
+ this._originResizeObserver.observe(this._originElement);
706
+ }
707
+ }
708
+ }
709
+ /**
710
+ * To assess screen-readers problems caused by the interaction between aria patterns and shadow DOM,
711
+ * we are forced to move the 'combobox' trigger element to the light DOM
712
+ */
713
+ _setupTrigger() {
714
+ if (this.parentElement && this._triggerElement) {
715
+ this.parentElement.insertBefore?.(this._triggerElement, this);
716
+ }
717
+ }
718
+ _setOverlayPosition() {
719
+ if (!this._originElement) {
720
+ return;
721
+ }
722
+ setOverlayPosition(this._overlay, this._originElement, this._optionContainer, this.shadowRoot.querySelector(".sbb-select__container"), this);
723
+ }
724
+ // In rare cases it can be that the animationEnd event is triggered twice.
725
+ // To avoid entering a corrupt state, exit when state is not expected.
726
+ _onAnimationEnd(event) {
727
+ if (event.animationName === "open" && this.state === "opening") {
728
+ this._handleOpening();
729
+ } else if (event.animationName === "close" && this.state === "closing") {
730
+ this._handleClosing();
731
+ }
732
+ }
733
+ _handleOpening() {
734
+ this.state = "opened";
735
+ this._triggerElement?.setAttribute("aria-expanded", "true");
736
+ if (this._originElement) {
737
+ this._originResizeObserver.observe(this._originElement);
738
+ }
739
+ this.dispatchOpenEvent();
740
+ }
741
+ _handleClosing() {
742
+ this.state = "closed";
743
+ this.shadowRoot?.querySelector(".sbb-select__container")?.hidePopover?.();
744
+ this._triggerElement?.setAttribute("aria-expanded", "false");
745
+ this._resetActiveElement();
746
+ this._optionContainer.scrollTop = 0;
747
+ this._escapableOverlayController.disconnect();
748
+ this.dispatchCloseEvent();
749
+ }
750
+ /** When an option is selected, updates the displayValue; it also closes the select if not `multiple`. */
751
+ _onOptionSelected(option) {
752
+ if (!this.multiple) {
753
+ this._value = option.value;
754
+ } else if (!this.value) {
755
+ this._value = [option.value];
756
+ } else if (Array.isArray(this.value) && !this.value.includes(option.value)) {
757
+ this._value = [...this.value, option.value];
758
+ }
759
+ this._updateOptionsFromValue();
760
+ this._dispatchInputEvents();
761
+ }
762
+ /** When an option is unselected in `multiple`, removes it from value and updates displayValue. */
763
+ _onOptionDeselected(optionSelectionChange) {
764
+ if (this.multiple && Array.isArray(this.value)) {
765
+ this._value = this.value.filter((el) => el !== optionSelectionChange.value);
766
+ this._updateOptionsFromValue();
767
+ this._dispatchInputEvents();
768
+ }
769
+ }
770
+ _dispatchInputEvents() {
771
+ this.dispatchEvent(new InputEvent("input", {
772
+ bubbles: true,
773
+ composed: true
774
+ }));
775
+ this.dispatchEvent(new Event("change", { bubbles: true }));
776
+ }
777
+ _attachOpenPanelEvents() {
778
+ this._openPanelEventsController = new AbortController();
779
+ document.addEventListener("scroll", () => this._setOverlayPosition(), {
780
+ passive: true,
781
+ signal: this._openPanelEventsController.signal,
782
+ // Without capture, other scroll contexts would not bubble to this event listener.
783
+ // Capture allows us to react to all scroll contexts in this DOM.
784
+ capture: true
785
+ });
786
+ window.addEventListener("resize", () => this._setOverlayPosition(), {
787
+ passive: true,
788
+ signal: this._openPanelEventsController.signal
789
+ });
790
+ window.addEventListener("pointerdown", (ev) => this._pointerDownListener(ev), {
791
+ signal: this._openPanelEventsController.signal
792
+ });
793
+ window.addEventListener("pointerup", (ev) => this._closeOnBackdropClick(ev), {
794
+ signal: this._openPanelEventsController.signal
795
+ });
796
+ }
797
+ _onKeyDown(event) {
798
+ if (this.readOnly) {
799
+ return;
800
+ }
801
+ if (this.state === "opening" || this.state === "opened") {
802
+ this._openedPanelKeyboardInteraction(event);
803
+ } else if (this.state === "closed" || this.state === "closing") {
804
+ this._closedPanelKeyboardInteraction(event);
805
+ }
806
+ }
807
+ _closedPanelKeyboardInteraction(event) {
808
+ if (this._checkForLetterSelection(event)) {
809
+ return this._setNextActiveOptionByText(event);
810
+ }
811
+ switch (event.key) {
812
+ case "Enter":
813
+ case " ":
814
+ case "ArrowDown":
815
+ case "ArrowUp":
816
+ event.preventDefault();
817
+ this.open();
818
+ break;
819
+ }
820
+ }
821
+ _openedPanelKeyboardInteraction(event) {
822
+ if (this.readOnly) {
823
+ return;
824
+ }
825
+ if (this._checkForLetterSelection(event)) {
826
+ return this._setNextActiveOptionByText(event);
827
+ }
828
+ switch (event.key) {
829
+ case "Tab":
830
+ this.close();
831
+ break;
832
+ case "Enter":
833
+ case " ":
834
+ event.preventDefault();
835
+ this._selectByKeyboard();
836
+ break;
837
+ case "ArrowDown":
838
+ case "ArrowUp":
839
+ event.preventDefault();
840
+ this._setNextActiveOption(event);
841
+ break;
842
+ case "Home":
843
+ case "PageUp":
844
+ event.preventDefault();
845
+ this._setNextActiveOption(event, 0);
846
+ break;
847
+ case "End":
848
+ case "PageDown":
849
+ event.preventDefault();
850
+ this._setNextActiveOption(event, this._selectableOptions().length - 1);
851
+ break;
852
+ }
853
+ }
854
+ _checkForLetterSelection(event) {
855
+ return event.key === "Backspace" || event.key === "Clear" || event.key.length === 1 && event.key !== " " && !event.altKey && !event.ctrlKey && !event.metaKey;
856
+ }
857
+ _setNextActiveOptionByText(event) {
858
+ if (typeof this._searchTimeout === typeof setTimeout) {
859
+ clearTimeout(this._searchTimeout);
860
+ }
861
+ this._searchTimeout = setTimeout(() => this._searchString = "", 1e3);
862
+ this._searchString += event.key;
863
+ const indexForSlice = this._activeItemIndex + 1;
864
+ const selectableOptions = this._selectableOptions();
865
+ const filteredOptionsSorted = [
866
+ ...selectableOptions.slice(indexForSlice),
867
+ ...selectableOptions.slice(0, indexForSlice)
868
+ ];
869
+ const match = filteredOptionsSorted.find((option) => option.textContent?.toLowerCase().indexOf(this._searchString.toLowerCase()) === 0);
870
+ if (match) {
871
+ this._setNextActiveOption(event, selectableOptions.indexOf(match));
872
+ } else if (this._searchString.length > 1 && new RegExp(`^${this._searchString.charAt(0)}*$`).test(this._searchString)) {
873
+ const firstMatch = filteredOptionsSorted.find((option) => option.textContent?.toLowerCase().indexOf(this._searchString[0].toLowerCase()) === 0);
874
+ if (firstMatch) {
875
+ this._setNextActiveOption(event, selectableOptions.indexOf(firstMatch));
876
+ }
877
+ } else {
878
+ clearTimeout(this._searchTimeout);
879
+ this._searchString = "";
880
+ }
881
+ }
882
+ _selectByKeyboard() {
883
+ const activeOption = this._selectableOptions()[this._activeItemIndex];
884
+ if (this.multiple) {
885
+ activeOption?.["selectViaUserInteraction"](!activeOption.selected);
886
+ } else {
887
+ this.close();
888
+ }
889
+ }
890
+ _setNextActiveOption(event, index) {
891
+ const filteredOptions = this._selectableOptions();
892
+ if (filteredOptions.length === 0) {
893
+ return;
894
+ }
895
+ const nextIndex = index ?? getNextElementIndex(event, this._activeItemIndex, filteredOptions.length);
896
+ const nextOption = filteredOptions[nextIndex];
897
+ const activeOption = filteredOptions[this._activeItemIndex];
898
+ this._setActiveElement(nextOption, activeOption);
899
+ if (!this.multiple) {
900
+ this._setSelectedElement(nextOption, activeOption);
901
+ } else if (event?.shiftKey) {
902
+ nextOption["selectViaUserInteraction"](!nextOption.selected);
903
+ }
904
+ this._activeItemIndex = nextIndex;
905
+ }
906
+ _setActiveElement(nextActiveOption, lastActiveOption = null, setActiveDescendant = true) {
907
+ nextActiveOption.setActive(true);
908
+ nextActiveOption.scrollIntoView({ block: "nearest" });
909
+ if (setActiveDescendant) {
910
+ this._triggerElement?.setAttribute("aria-activedescendant", nextActiveOption.id);
911
+ }
912
+ if (lastActiveOption && lastActiveOption !== nextActiveOption) {
913
+ lastActiveOption.setActive(false);
914
+ }
915
+ }
916
+ _setSelectedElement(nextActiveOption, lastActiveOption) {
917
+ nextActiveOption["selectViaUserInteraction"](true);
918
+ if (lastActiveOption && lastActiveOption !== nextActiveOption) {
919
+ lastActiveOption["selectViaUserInteraction"](false);
920
+ }
921
+ }
922
+ _resetActiveElement() {
923
+ const activeElement = this._selectableOptions()[this._activeItemIndex];
924
+ if (activeElement) {
925
+ activeElement.setActive(false);
926
+ }
927
+ this._activeItemIndex = -1;
928
+ this._triggerElement?.removeAttribute("aria-activedescendant");
929
+ }
930
+ _updateOptionsFromValue() {
931
+ const value = Array.isArray(this.value) ? this.value : [this.value];
932
+ for (const option of this.options) {
933
+ option.selected = value.includes(option.value);
934
+ if (option.selected) ;
935
+ }
936
+ this._updateDisplayValue();
937
+ if (!Array.isArray(this.value)) {
938
+ this._activeItemIndex = this._selectableOptions().findIndex((option) => option.value === this.value);
939
+ }
940
+ }
941
+ _updateValueFromOptions() {
942
+ const selected = this._getSelected();
943
+ if (Array.isArray(selected)) {
944
+ if (selected && selected.length > 0) {
945
+ const value = [];
946
+ for (const option of selected) {
947
+ value.push(option.value);
948
+ }
949
+ this._value = value;
950
+ }
951
+ } else if (selected) {
952
+ this._activeItemIndex = this._selectableOptions().findIndex((option) => option === selected);
953
+ this._value = selected.value;
954
+ }
955
+ this._updateDisplayValue();
956
+ }
957
+ _updateValueOptionState() {
958
+ if (this._isValueManuallyAssigned) {
959
+ this._updateOptionsFromValue();
960
+ } else {
961
+ this._updateValueFromOptions();
962
+ }
963
+ }
964
+ _getSelected() {
965
+ if (this.multiple) {
966
+ return this.options.filter((option) => option.selected);
967
+ } else {
968
+ return this.options.find((option) => option.selected) ?? null;
969
+ }
970
+ }
971
+ _toggleOpening() {
972
+ if (this.disabled || this.formDisabled || this.readOnly) {
973
+ return;
974
+ }
975
+ this._triggerElement?.focus();
976
+ switch (this.state) {
977
+ case "opening":
978
+ case "opened": {
979
+ this.close();
980
+ break;
981
+ }
982
+ case "closing":
983
+ case "closed": {
984
+ this.open();
985
+ break;
986
+ }
987
+ }
988
+ }
989
+ _spreadDeferredDisplayValue(placeholder) {
990
+ return [this._deferredDisplayValue(placeholder), placeholder];
991
+ }
992
+ async _deferredDisplayValue(placeholder) {
993
+ if (this.hydrationRequired) {
994
+ await this.hydrationComplete;
995
+ }
996
+ return this._displayValue ? html`${this._displayValue}` : placeholder;
997
+ }
998
+ render() {
999
+ return html`
1000
+ <!-- This element is visually hidden and will be appended to the light DOM to allow screen
1001
+ readers to work properly -->
1002
+ <div
1003
+ class="sbb-screen-reader-only sbb-select-trigger"
1004
+ tabindex=${this.disabled || this.formDisabled ? nothing : "0"}
1005
+ role="combobox"
1006
+ aria-haspopup="listbox"
1007
+ aria-expanded="false"
1008
+ aria-required=${this.required.toString()}
1009
+ aria-controls=${this._overlayId}
1010
+ aria-owns=${this._overlayId}
1011
+ @keydown=${this._onKeyDown}
1012
+ @click=${this._toggleOpening}
1013
+ ${ref((ref2) => this._triggerElement = ref2)}
1014
+ >
1015
+ ${until(...this._spreadDeferredDisplayValue(html`<span>${this.placeholder}</span>`))}
1016
+ </div>
1017
+
1018
+ <!-- Visually display the value -->
1019
+ <div class="sbb-select__trigger" aria-hidden="true">
1020
+ ${until(...this._spreadDeferredDisplayValue(html`<span class="sbb-select__trigger--placeholder">${this.placeholder}</span>`))}
1021
+ </div>
1022
+
1023
+ <div class="sbb-select__gap-fix"></div>
1024
+ <div class="sbb-select__container" popover="manual">
1025
+ <div class="sbb-select__gap-fix">${overlayGapFixCorners()}</div>
1026
+ <div
1027
+ @animationend=${this._onAnimationEnd}
1028
+ class="sbb-select__panel"
1029
+ ${ref((dialogRef) => this._overlay = dialogRef)}
1030
+ >
1031
+ <div class="sbb-select__wrapper">
1032
+ <div
1033
+ id=${!ariaRoleOnHost ? this._overlayId : nothing}
1034
+ class="sbb-select__options"
1035
+ role=${!ariaRoleOnHost ? "listbox" : nothing}
1036
+ ?aria-multiselectable=${this.multiple}
1037
+ ${ref((containerRef) => this._optionContainer = containerRef)}
1038
+ tabindex="-1"
1039
+ >
1040
+ <slot @slotchange=${this._updateValueOptionState}></slot>
1041
+ </div>
1042
+ </div>
1043
+ </div>
1044
+ </div>
1045
+ `;
1046
+ }
1047
+ }, _placeholder_accessor_storage = new WeakMap(), _multiple_accessor_storage = new WeakMap(), _disabled_accessor_storage = new WeakMap(), _size_accessor_storage = new WeakMap(), __displayValue_accessor_storage = new WeakMap(), (() => {
1048
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
1049
+ _placeholder_decorators = [forceType(), property()];
1050
+ _multiple_decorators = [forceType(), handleDistinctChange((e, newValue) => e._onMultipleChanged(newValue)), property({ reflect: true, type: Boolean })];
1051
+ _disabled_decorators = [forceType(), handleDistinctChange((e, newValue) => e._closeOnDisabledReadonlyChanged(newValue)), property({ reflect: true, type: Boolean }), getOverride((e, v) => v || e.isDisabledExternally())];
1052
+ _set_value_decorators = [property()];
1053
+ _size_decorators = [property({ reflect: true })];
1054
+ __displayValue_decorators = [state()];
1055
+ __esDecorate(_a, null, _placeholder_decorators, { kind: "accessor", name: "placeholder", static: false, private: false, access: { has: (obj) => "placeholder" in obj, get: (obj) => obj.placeholder, set: (obj, value) => {
1056
+ obj.placeholder = value;
1057
+ } }, metadata: _metadata }, _placeholder_initializers, _placeholder_extraInitializers);
1058
+ __esDecorate(_a, null, _multiple_decorators, { kind: "accessor", name: "multiple", static: false, private: false, access: { has: (obj) => "multiple" in obj, get: (obj) => obj.multiple, set: (obj, value) => {
1059
+ obj.multiple = value;
1060
+ } }, metadata: _metadata }, _multiple_initializers, _multiple_extraInitializers);
1061
+ __esDecorate(_a, null, _disabled_decorators, { kind: "accessor", name: "disabled", static: false, private: false, access: { has: (obj) => "disabled" in obj, get: (obj) => obj.disabled, set: (obj, value) => {
1062
+ obj.disabled = value;
1063
+ } }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);
1064
+ __esDecorate(_a, null, _set_value_decorators, { kind: "setter", name: "value", static: false, private: false, access: { has: (obj) => "value" in obj, set: (obj, value) => {
1065
+ obj.value = value;
1066
+ } }, metadata: _metadata }, null, _instanceExtraInitializers);
1067
+ __esDecorate(_a, null, _size_decorators, { kind: "accessor", name: "size", static: false, private: false, access: { has: (obj) => "size" in obj, get: (obj) => obj.size, set: (obj, value) => {
1068
+ obj.size = value;
1069
+ } }, metadata: _metadata }, _size_initializers, _size_extraInitializers);
1070
+ __esDecorate(_a, null, __displayValue_decorators, { kind: "accessor", name: "_displayValue", static: false, private: false, access: { has: (obj) => "_displayValue" in obj, get: (obj) => obj._displayValue, set: (obj, value) => {
1071
+ obj._displayValue = value;
1072
+ } }, metadata: _metadata }, __displayValue_initializers, __displayValue_extraInitializers);
1073
+ if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
1074
+ })(), _a.elementName = "sbb-select", _a.role = ariaRoleOnHost ? "listbox" : null, _a.styles = [boxSizingStyles, style], _a.events = {
1075
+ change: "change",
1076
+ input: "input",
1077
+ displayvaluechange: "displayvaluechange",
1078
+ beforeopen: "beforeopen",
1079
+ open: "open",
1080
+ beforeclose: "beforeclose",
1081
+ close: "close"
1082
+ }, _a;
1083
+ })();
1084
+ export {
1085
+ SbbSelectElement
1086
+ };
1087
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE11dGF0aW9uQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvbXV0YXRpb24tY29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENTU1Jlc3VsdEdyb3VwLCBQcm9wZXJ0eURlY2xhcmF0aW9uLCBQcm9wZXJ0eVZhbHVlcywgVGVtcGxhdGVSZXN1bHQgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgaHRtbCwgaXNTZXJ2ZXIsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcbmltcG9ydCB7IHVudGlsIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvdW50aWwuanMnO1xuXG5pbXBvcnQgeyBnZXROZXh0RWxlbWVudEluZGV4IH0gZnJvbSAnLi4vY29yZS9hMTF5LnRzJztcbmltcG9ydCB7IFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLnRzJztcbmltcG9ydCB7XG4gIFNiYlByb3BlcnR5V2F0Y2hlckNvbnRyb2xsZXIsXG4gIFNiYkVzY2FwYWJsZU92ZXJsYXlDb250cm9sbGVyLFxuICBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsXG59IGZyb20gJy4uL2NvcmUvY29udHJvbGxlcnMudHMnO1xuaW1wb3J0IHsgZm9yY2VUeXBlLCBnZXRPdmVycmlkZSwgaGFuZGxlRGlzdGluY3RDaGFuZ2UgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHtcbiAgaXNMZWFuLFxuICBpc05leHRqcyxcbiAgaXNTYWZhcmksXG4gIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uLFxuICBzZXRPclJlbW92ZUF0dHJpYnV0ZSxcbn0gZnJvbSAnLi4vY29yZS9kb20udHMnO1xuaW1wb3J0IHsgaTE4blNlbGVjdGlvblJlcXVpcmVkIH0gZnJvbSAnLi4vY29yZS9pMThuLnRzJztcbmltcG9ydCB7XG4gIHR5cGUgRm9ybVJlc3RvcmVSZWFzb24sXG4gIHR5cGUgRm9ybVJlc3RvcmVTdGF0ZSxcbiAgU2JiRGlzYWJsZWRNaXhpbixcbiAgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbixcbiAgU2JiTmVnYXRpdmVNaXhpbixcbiAgU2JiUmVhZG9ubHlNaXhpbixcbiAgU2JiUmVxdWlyZWRNaXhpbixcbiAgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4sXG59IGZyb20gJy4uL2NvcmUvbWl4aW5zLnRzJztcbmltcG9ydCB7IGlzRXZlbnRPbkVsZW1lbnQsIG92ZXJsYXlHYXBGaXhDb3JuZXJzLCBzZXRPdmVybGF5UG9zaXRpb24gfSBmcm9tICcuLi9jb3JlL292ZXJsYXkudHMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnLi4vY29yZS9zdHlsZXMudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEaXZpZGVyRWxlbWVudCB9IGZyb20gJy4uL2RpdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJGb3JtRmllbGRFbGVtZW50IH0gZnJvbSAnLi4vZm9ybS1maWVsZC9mb3JtLWZpZWxkL2Zvcm0tZmllbGQuY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgU2JiT3B0aW9uRWxlbWVudCwgU2JiT3B0aW9uSGludEVsZW1lbnQgfSBmcm9tICcuLi9vcHRpb24udHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zZWxlY3Quc2Nzcz9saXQmaW5saW5lJztcblxuLyoqXG4gKiBPbiBTYWZhcmksIHRoZSBhcmlhIHJvbGUgJ2xpc3Rib3gnIG11c3QgYmUgb24gdGhlIGhvc3QgZWxlbWVudCwgb3IgZWxzZSBWb2ljZU92ZXIgd29uJ3Qgd29yayBhdCBhbGwuXG4gKiBPbiB0aGUgb3RoZXIgaGFuZCwgSkFXUyBhbmQgTlZEQSBuZWVkIHRoZSByb2xlIHRvIGJlIGFuIFwiaW1tZWRpYXRlIHBhcmVudFwiIHRvIHRoZSBvcHRpb25zLCBvciBlbHNlIG9wdGdyb3VwcyB3b24ndCB3b3JrLlxuICovXG5jb25zdCBhcmlhUm9sZU9uSG9zdCA9IGlzU2FmYXJpO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIHBhbmVsIHdpdGggc2VsZWN0YWJsZSBvcHRpb25zLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIG9wdGlvbnMuXG4gKiBAY3NzcHJvcCBbLS1zYmItc2VsZWN0LXotaW5kZXg9dmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KV0gLSBUbyBzcGVjaWZ5IGEgY3VzdG9tIHN0YWNrIG9yZGVyLFxuICogdGhlIGB6LWluZGV4YCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBkZWZpbmluZyB0aGlzIENTUyB2YXJpYWJsZS4gVGhlIGRlZmF1bHQgYHotaW5kZXhgIG9mIHRoZVxuICogY29tcG9uZW50IGlzIHNldCB0byBgdmFyKC0tc2JiLW92ZXJsYXktZGVmYXVsdC16LWluZGV4KWAgd2l0aCBhIHZhbHVlIG9mIGAxMDAwYC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1vcHRpb25zLXBhbmVsLW1heC1oZWlnaHRdIC0gTWF4aW11bSBoZWlnaHQgb2YgdGhlIG9wdGlvbnMgcGFuZWwuXG4gKiBJZiB0aGUgY2FsY3VsYXRlZCByZW1haW5pbmcgc3BhY2UgaXMgc21hbGxlciwgdGhlIHZhbHVlIGdldHMgaWdub3JlZC5cbiAqIEBvdmVycmlkZVR5cGUgdmFsdWUgLSAoVCA9IHN0cmluZyB8IHN0cmluZ1tdKSB8IG51bGxcbiAqL1xuZXhwb3J0IGNsYXNzIFNiYlNlbGVjdEVsZW1lbnQ8VCA9IHN0cmluZz4gZXh0ZW5kcyBTYmJVcGRhdGVTY2hlZHVsZXJNaXhpbihcbiAgU2JiRGlzYWJsZWRNaXhpbihcbiAgICBTYmJOZWdhdGl2ZU1peGluKFxuICAgICAgU2JiUmVxdWlyZWRNaXhpbihcbiAgICAgICAgU2JiUmVhZG9ubHlNaXhpbihcbiAgICAgICAgICBTYmJGb3JtQXNzb2NpYXRlZE1peGluPHR5cGVvZiBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudD4oU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQpLFxuICAgICAgICApLFxuICAgICAgKSxcbiAgICApLFxuICApLFxuKSB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItc2VsZWN0JztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gYXJpYVJvbGVPbkhvc3QgPyAnbGlzdGJveCcgOiBudWxsO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG5cbiAgLy8gVE9ETzogZml4IHVzaW5nIC4uLnN1cGVyLmV2ZW50cyByZXF1aXJlczogaHR0cHM6Ly9naXRodWIuY29tL3NiYi1kZXNpZ24tc3lzdGVtcy9seW5lLWNvbXBvbmVudHMvaXNzdWVzLzI2MDBcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBldmVudHMgPSB7XG4gICAgY2hhbmdlOiAnY2hhbmdlJyxcbiAgICBpbnB1dDogJ2lucHV0JyxcbiAgICBkaXNwbGF5dmFsdWVjaGFuZ2U6ICdkaXNwbGF5dmFsdWVjaGFuZ2UnLFxuICAgIGJlZm9yZW9wZW46ICdiZWZvcmVvcGVuJyxcbiAgICBvcGVuOiAnb3BlbicsXG4gICAgYmVmb3JlY2xvc2U6ICdiZWZvcmVjbG9zZScsXG4gICAgY2xvc2U6ICdjbG9zZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIFRoZSBwbGFjZWhvbGRlciB1c2VkIGlmIG5vIHZhbHVlIGhhcyBiZWVuIHNlbGVjdGVkLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIHBsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcblxuICAvKiogV2hldGhlciB0aGUgc2VsZWN0IGFsbG93cyBmb3IgbXVsdGlwbGUgc2VsZWN0aW9uLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQGhhbmRsZURpc3RpbmN0Q2hhbmdlKChlOiBTYmJTZWxlY3RFbGVtZW50PFQ+LCBuZXdWYWx1ZTogYm9vbGVhbikgPT5cbiAgICBlLl9vbk11bHRpcGxlQ2hhbmdlZChuZXdWYWx1ZSksXG4gIClcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAZm9yY2VUeXBlKClcbiAgQGhhbmRsZURpc3RpbmN0Q2hhbmdlKChlOiBTYmJTZWxlY3RFbGVtZW50PFQ+LCBuZXdWYWx1ZTogYm9vbGVhbikgPT5cbiAgICBlLl9jbG9zZU9uRGlzYWJsZWRSZWFkb25seUNoYW5nZWQobmV3VmFsdWUpLFxuICApXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgQGdldE92ZXJyaWRlKChlOiBTYmJTZWxlY3RFbGVtZW50PFQ+LCB2OiBib29sZWFuKTogYm9vbGVhbiA9PiB2IHx8IGUuaXNEaXNhYmxlZEV4dGVybmFsbHkoKSlcbiAgcHVibGljIG92ZXJyaWRlIGFjY2Vzc29yIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIFZhbHVlIG9mIHRoZSBmb3JtIGVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IFRbXSB8IFQpIHtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuX3VwZGF0ZU9wdGlvbnNGcm9tVmFsdWUoKTtcbiAgICB0aGlzLl9pc1ZhbHVlTWFudWFsbHlBc3NpZ25lZCA9IHRydWU7XG4gIH1cbiAgcHVibGljIGdldCB2YWx1ZSgpOiBUW10gfCBUIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG4gIHByaXZhdGUgX3ZhbHVlOiBUIHwgVFtdIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIFNpemUgdmFyaWFudCwgZWl0aGVyIG0gb3Igcy5cbiAgICogQGRlZmF1bHQgJ20nIC8gJ3MnIChsZWFuKVxuICAgKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igc2l6ZTogJ20nIHwgJ3MnID0gaXNMZWFuKCkgPyAncycgOiAnbSc7XG5cbiAgLyoqXG4gICAqIEZvcm0gdHlwZSBvZiBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCAnc2VsZWN0LW9uZSAvIHNlbGVjdC1tdWx0aXBsZSdcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gJ3NlbGVjdC1tdWx0aXBsZScgOiAnc2VsZWN0LW9uZSc7XG4gIH1cblxuICAvKiogVGhlIHZhbHVlIGRpc3BsYXllZCBieSB0aGUgY29tcG9uZW50LiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9kaXNwbGF5VmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIHByaXZhdGUgX29yaWdpblJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICBjYWxsYmFjazogKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICAgIHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIHByaXZhdGUgX292ZXJsYXkhOiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfb3B0aW9uQ29udGFpbmVyITogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX29yaWdpbkVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3RyaWdnZXJFbGVtZW50OiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyPzogQWJvcnRDb250cm9sbGVyO1xuICBwcml2YXRlIF9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlciA9IG5ldyBTYmJFc2NhcGFibGVPdmVybGF5Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfb3ZlcmxheUlkID0gYHNiYi1zZWxlY3QtJHsrK25leHRJZH1gO1xuICBwcml2YXRlIF9hY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgcHJpdmF0ZSBfc2VhcmNoVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIF9zZWFyY2hTdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZGlkTG9hZCA9IGZhbHNlO1xuICBwcml2YXRlIF9pc1BvaW50ZXJEb3duRXZlbnRPbk1lbnU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2VDb250cm9sbGVyID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfaXNWYWx1ZU1hbnVhbGx5QXNzaWduZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlICdjb21ib2JveCcgaW5wdXQgZWxlbWVudFxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBnZXQgaW5wdXRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyaWdnZXJFbGVtZW50ID8/IG51bGw7XG4gIH1cblxuICAvKiogUmV0dXJucyBhbGwgU2JiT3B0aW9uRWxlbWVudHMgZnJvbSB0aGlzIHNiYi1zZWxlY3QgaW5zdGFuY2UuICovXG4gIHB1YmxpYyBnZXQgb3B0aW9ucygpOiBTYmJPcHRpb25FbGVtZW50PFQ+W10ge1xuICAgIGNvbnN0IG9wdGlvbnM6IFNiYk9wdGlvbkVsZW1lbnQ8VD5bXSA9IFtdO1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uPFNiYk9wdGlvbkVsZW1lbnQ8VD4+KCdzYmItb3B0aW9uJykuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBjdXN0b21FbGVtZW50cy51cGdyYWRlKG9wdGlvbik7XG4gICAgICBvcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgICB9KTtcbiAgICByZXR1cm4gb3B0aW9ucztcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdvcHRpb25zZWxlY3Rpb25jaGFuZ2UnLCAoZTogRXZlbnQpID0+IHRoaXMuX29uT3B0aW9uQ2hhbmdlZChlKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ29wdGlvbkxhYmVsQ2hhbmdlZCcsIChlOiBFdmVudCkgPT4gdGhpcy5fb25PcHRpb25MYWJlbENoYW5nZWQoZSkpO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCfJtW9wdGdyb3Vwc2xvdGNoYW5nZScsICgpID0+IHRoaXMuX3VwZGF0ZVZhbHVlT3B0aW9uU3RhdGUoKSwge1xuICAgICAgY2FwdHVyZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignY2xpY2snLCAoZTogTW91c2VFdmVudCkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gZS50YXJnZXQgYXMgU2JiU2VsZWN0RWxlbWVudDxUPiB8IFNiYk9wdGlvbkVsZW1lbnQ8VD47XG4gICAgICBpZiAodGFyZ2V0LmxvY2FsTmFtZSA9PT0gJ3NiYi1vcHRpb24nKSB7XG4gICAgICAgIC8vIE9wdGlvbiBjbGlja1xuICAgICAgICBpZiAoIXRoaXMubXVsdGlwbGUgJiYgIXRhcmdldC5kaXNhYmxlZCkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3RvZ2dsZU9wZW5pbmcoKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQ29udHJvbGxlcihcbiAgICAgIG5ldyBNdXRhdGlvbkNvbnRyb2xsZXIodGhpcywge1xuICAgICAgICBjb25maWc6IHsgYXR0cmlidXRlRmlsdGVyOiBbJ2FyaWEtbGFiZWxsZWRieScsICdhcmlhLWxhYmVsJywgJ2FyaWEtZGVzY3JpYmVkYnknXSB9LFxuICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5fc3luY0FyaWFMYWJlbHMoKSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICB0aGlzLmFkZENvbnRyb2xsZXIoXG4gICAgICBuZXcgU2JiUHJvcGVydHlXYXRjaGVyQ29udHJvbGxlcih0aGlzLCAoKSA9PiB0aGlzLmNsb3Nlc3QoJ3NiYi1mb3JtLWZpZWxkJyksIHtcbiAgICAgICAgbmVnYXRpdmU6IChlKSA9PiB7XG4gICAgICAgICAgdGhpcy5uZWdhdGl2ZSA9IGUubmVnYXRpdmU7XG4gICAgICAgICAgdGhpcy5fc3luY05lZ2F0aXZlKCk7XG4gICAgICAgIH0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3luY0FyaWFMYWJlbHMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90cmlnZ2VyRWxlbWVudCB8fCBpc1NlcnZlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldE9yUmVtb3ZlQXR0cmlidXRlKFxuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICAnYXJpYS1sYWJlbGxlZGJ5JyxcbiAgICAgIHRoaXMuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsbGVkYnknKSxcbiAgICApO1xuICAgIHNldE9yUmVtb3ZlQXR0cmlidXRlKHRoaXMuX3RyaWdnZXJFbGVtZW50LCAnYXJpYS1sYWJlbCcsIHRoaXMuZ2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJykpO1xuICAgIHNldE9yUmVtb3ZlQXR0cmlidXRlKFxuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQsXG4gICAgICAnYXJpYS1kZXNjcmliZWRieScsXG4gICAgICB0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpLFxuICAgICk7XG5cbiAgICAvLyBVc2luZyB0aGUgYXNzb2NpYXRlZCBsYWJlbHMgaXMgb25seSBhIGZhbGxiYWNrLlxuICAgIC8vIFRoZSBkcmF3YmFjayBpcywgdGhhdCBpdCBkb2Vzbid0IGdldCB1cGRhdGVkIGF1dG9tYXRpY2FsbHkgd2hlbiB0aGUgbGlzdCBvZiBsYWJlbCBjaGFuZ2VzLlxuICAgIGlmIChcbiAgICAgICF0aGlzLmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpICYmXG4gICAgICAhdGhpcy5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWxsZWRieScpICYmXG4gICAgICB0aGlzLmludGVybmFscy5sYWJlbHMubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uc2V0QXR0cmlidXRlKFxuICAgICAgICAnYXJpYS1sYWJlbCcsXG4gICAgICAgIEFycmF5LmZyb20odGhpcy5pbnRlcm5hbHMubGFiZWxzKVxuICAgICAgICAgIC5tYXAoKGxhYmVsKSA9PiBsYWJlbC50ZXh0Q29udGVudClcbiAgICAgICAgICAuam9pbignLCAnKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqIE9wZW5zIHRoZSBzZWxlY3Rpb24gcGFuZWwuICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJyB8fFxuICAgICAgdGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcgfHxcbiAgICAgICF0aGlzLl9vdmVybGF5IHx8XG4gICAgICB0aGlzLm9wdGlvbnMubGVuZ3RoID09PSAwIHx8XG4gICAgICB0aGlzLmRpc2FibGVkIHx8XG4gICAgICB0aGlzLmZvcm1EaXNhYmxlZCB8fFxuICAgICAgIXRoaXMuZGlzcGF0Y2hCZWZvcmVPcGVuRXZlbnQoKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oJy5zYmItc2VsZWN0X19jb250YWluZXInKT8uc2hvd1BvcG92ZXI/LigpO1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG4gICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmFkZCgnZXhwYW5kZWQnKTtcbiAgICB0aGlzLl9zZXRPdmVybGF5UG9zaXRpb24oKTtcbiAgICB0aGlzLl9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlci5jb25uZWN0KCk7XG4gICAgdGhpcy5fYXR0YWNoT3BlblBhbmVsRXZlbnRzKCk7XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgb3BlbmVkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBDbG9zZXMgdGhlIHNlbGVjdGlvbiBwYW5lbC4gKi9cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlID09PSAnY2xvc2luZycgfHwgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NlZCcgfHwgIXRoaXMuZGlzcGF0Y2hCZWZvcmVDbG9zZUV2ZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NpbmcnO1xuICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoJ2V4cGFuZGVkJyk7XG4gICAgdGhpcy5fb3BlblBhbmVsRXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICBpZiAodGhpcy5fb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuX29yaWdpbkVsZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKHRoaXMsICctLXNiYi1vcHRpb25zLXBhbmVsLWFuaW1hdGlvbi1kdXJhdGlvbicpO1xuICB9XG5cbiAgLyoqIEdldHMgdGhlIGN1cnJlbnQgZGlzcGxheWVkIHZhbHVlLiAqL1xuICBwdWJsaWMgZ2V0RGlzcGxheVZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc3BsYXlWYWx1ZSA/PyAnJztcbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdGFibGVPcHRpb25zKCk6IFNiYk9wdGlvbkVsZW1lbnQ8VD5bXSB7XG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gIW9wdC5tYXRjaGVzKCc6c3RhdGUoZGlzYWJsZWQpJykpO1xuICB9XG5cbiAgLyoqIExpc3RlbnMgdG8gb3B0aW9uIGNoYW5nZXMuICovXG4gIHByaXZhdGUgX29uT3B0aW9uQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiT3B0aW9uRWxlbWVudDxUPjtcbiAgICBpZiAodGFyZ2V0LnNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9vbk9wdGlvblNlbGVjdGVkKHRhcmdldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29uT3B0aW9uRGVzZWxlY3RlZCh0YXJnZXQpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBMaXN0ZW5zIHRvIG9wdGlvbiBjaGFuZ2VzLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvbkxhYmVsQ2hhbmdlZChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgU2JiT3B0aW9uRWxlbWVudDxUPjtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuX2dldFNlbGVjdGVkKCk7XG5cbiAgICBpZiAoXG4gICAgICAoIUFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpICYmIHRhcmdldCAhPT0gc2VsZWN0ZWQpIHx8XG4gICAgICAoQXJyYXkuaXNBcnJheShzZWxlY3RlZCkgJiYgIXNlbGVjdGVkLmluY2x1ZGVzKHRhcmdldCkpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRlRGlzcGxheVZhbHVlKCk7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVEaXNwbGF5VmFsdWUoKTogdm9pZCB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLl9nZXRTZWxlY3RlZCgpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KHNlbGVjdGVkKSkge1xuICAgICAgdGhpcy5fZGlzcGxheVZhbHVlID0gc2VsZWN0ZWQubWFwKChvKSA9PiBvLnRleHRDb250ZW50Py50cmltKCkpLmpvaW4oJywgJykgfHwgbnVsbDtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdGVkKSB7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBzZWxlY3RlZD8udGV4dENvbnRlbnQ/LnRyaW0oKSB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9kaXNwbGF5VmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdkaXNwbGF5dmFsdWVjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYHZhbHVlYCBwcm9wZXJ0eSBzaG91bGQgYmUgYWRhcHRlZCB3aGVuIHRoZSBgbXVsdGlwbGVgIHByb3BlcnR5IGNoYW5nZXM6XG4gICAqICAgLSBpZiBpdCBjaGFuZ2VzIHRvIHRydWUsIHRoZSAndmFsdWUnIGlzIHNldCB0byBhbiBhcnJheTtcbiAgICogICAtIGlmIGl0IGNoYW5nZXMgdG8gZmFsc2UsIHRoZSBmaXJzdCBhdmFpbGFibGUgb3B0aW9uIGlzIHNldCBhcyAndmFsdWUnIG90aGVyd2lzZSBpdCdzIHNldCB0byBudWxsLlxuICAgKi9cbiAgcHJpdmF0ZSBfb25NdWx0aXBsZUNoYW5nZWQoaXNDaGFuZ2luZ1RvTXVsdGlwbGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNDaGFuZ2luZ1RvTXVsdGlwbGUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5faXNWYWx1ZU1hbnVhbGx5QXNzaWduZWQgfHwgdGhpcy52YWx1ZSAhPSBudWxsID8gW3RoaXMudmFsdWUgYXMgVF0gOiBbXTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy52YWx1ZS5sZW5ndGggPyB0aGlzLnZhbHVlWzBdIDogbnVsbDtcbiAgICB9XG4gICAgdGhpcy5fdXBkYXRlRGlzcGxheVZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogSWYgdGhlIGBkaXNhYmxlZGAgb3IgdGhlIGByZWFkb25seWAgcHJvcGVydGllcyBhcmUgc2V0LCBhbmQgdGhlIHBhbmVsIGlzIG9wZW4sIGNsb3NlIGl0LlxuICAgKi9cbiAgcHJpdmF0ZSBfY2xvc2VPbkRpc2FibGVkUmVhZG9ubHlDaGFuZ2VkKG5ld1ZhbHVlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCh0aGlzLnN0YXRlID09PSAnb3BlbmluZycgfHwgdGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcpICYmIG5ld1ZhbHVlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIHRoaXMuX3VwZGF0ZVZhbHVlT3B0aW9uU3RhdGUoKTtcblxuICAgIC8vIFdhaXQgZm9yIHNzciBoeWRyYXRpb25cbiAgICBpZiAoIWlzTmV4dGpzKCkpIHtcbiAgICAgIHRoaXMuc3RhcnRVcGRhdGUoKTtcbiAgICAgIHRoaXMuX3NldHVwU2VsZWN0KCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZm9jdXMoKTogdm9pZCB7XG4gICAgLy8gRm9yd2FyZCBmb2N1cyB0byB0aGUgdHJpZ2dlciBlbGVtZW50LlxuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5mb2N1cygpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYmx1cigpOiB2b2lkIHtcbiAgICAvLyBGb3J3YXJkIGJsdXIgdG8gdGhlIHRyaWdnZXIgZWxlbWVudC5cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uYmx1cigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgZWxlbWVudCdzIGZpcnN0IGF0dHJpYnV0ZSB3aG9zZSBxdWFsaWZpZWQgbmFtZSBpcyBxdWFsaWZpZWROYW1lLlxuICAgKlxuICAgKiBbTUROIFJlZmVyZW5jZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0VsZW1lbnQvcmVtb3ZlQXR0cmlidXRlKVxuICAgKiBAaW50ZXJuYWwgV2UgbmVlZCB0byBvdmVycmlkZSB0aGlzIGR1ZSB0byBhIGh5ZHJhdGlvbiBpc3N1ZSB3aXRoIE5leHQuanMuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgcmVtb3ZlQXR0cmlidXRlKHF1YWxpZmllZE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIC8vIEluIE5leHQuanMgdGhlIGh5ZHJhdGlvbiBuZWVkcyB0byBmaW5pc2ggYmVmb3JlIHdlIGNhbiBtYW5pcHVsYXRlIHRoZSBsaWdodCBET00uXG4gICAgLy8gQGxpdC9yZWFjdCBjYWxscyByZW1vdmVBdHRyaWJ1dGUoJ2RlZmVyLWh5ZHJhdGlvbicpIGluIGEgdXNlTGF5b3V0RWZmZWN0LFxuICAgIC8vIHdoaWNoIGlzIGRvbmUgYWZ0ZXIgaHlkcmF0aW9uIGlzIGZpbmlzaGVkLiBEdWUgdG8gdGhpcyB3ZSBpbnRlcmNlcHQgdGhpcyBjYWxsXG4gICAgLy8gaW4gb3ZlcnJpZGluZyByZW1vdmVBdHRyaWJ1dGUgdG8gZmluaXNoIGluaXRpYWxpemF0aW9uIG9mIHRoZSBzYmItc2VsZWN0LlxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9saXQvbGl0L2Jsb2IvbWFpbi9wYWNrYWdlcy9yZWFjdC9zcmMvY3JlYXRlLWNvbXBvbmVudC50cyNMMjkzLUwyOTZcbiAgICAvLyBXZSBhbHNvIG5lZWQgdG8gd2FpdCBmb3IgdXBkYXRlIGNvbXBsZXRlIGluIG9yZGVyIHRvIGJlIHN1cmUgdGhhdCB0aGUgc2hhZG93IERPTSBoYXMgYmVlbiByZW5kZXJlZC5cbiAgICBpZiAoaXNOZXh0anMoKSAmJiBxdWFsaWZpZWROYW1lID09PSAnZGVmZXItaHlkcmF0aW9uJyAmJiAhdGhpcy5fZGlkTG9hZCkge1xuICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuX3NldHVwU2VsZWN0KCkpO1xuICAgIH1cbiAgICBzdXBlci5yZW1vdmVBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIGlmIChhcmlhUm9sZU9uSG9zdCkge1xuICAgICAgdGhpcy5pZCB8fD0gdGhpcy5fb3ZlcmxheUlkO1xuICAgIH1cblxuICAgIHRoaXMuX3N5bmNOZWdhdGl2ZSgpO1xuICAgIHRoaXMuX3N5bmNBcmlhTGFiZWxzKCk7XG5cbiAgICBpZiAodGhpcy5fZGlkTG9hZCkge1xuICAgICAgdGhpcy5fc2V0dXBPcmlnaW4oKTtcbiAgICAgIHRoaXMuX3NldHVwVHJpZ2dlcigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSByZXF1ZXN0VXBkYXRlKFxuICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICBvbGRWYWx1ZT86IHVua25vd24sXG4gICAgb3B0aW9ucz86IFByb3BlcnR5RGVjbGFyYXRpb24sXG4gICk6IHZvaWQge1xuICAgIHN1cGVyLnJlcXVlc3RVcGRhdGUobmFtZSwgb2xkVmFsdWUsIG9wdGlvbnMpO1xuICAgIGlmICghbmFtZSAmJiB0aGlzLmhhc1VwZGF0ZWQpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fc3luY0FyaWFMYWJlbHMoKSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCduZWdhdGl2ZScpKSB7XG4gICAgICB0aGlzLl9zeW5jTmVnYXRpdmUoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygncmVhZE9ubHknKSkge1xuICAgICAgdGhpcy5fY2xvc2VPbkRpc2FibGVkUmVhZG9ubHlDaGFuZ2VkKHRoaXMucmVhZE9ubHkpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICAvLyBUYWtlIGJhY2sgdGhlIHRyaWdnZXIgZWxlbWVudCBwcmV2aW91c2x5IG1vdmVkIHRvIHRoZSBsaWdodCBET00uXG4gICAgLy8gRHVlIHRvIHRpbWluZyBpc3N1ZXMsIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgY2FsbGluZyBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpLlxuICAgIGlmICh0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgdGhpcy5wcmVwZW5kKHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcbiAgICB9XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyPy5hYm9ydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNldCB2YWx1ZSBpcyB0aGUgYXR0cmlidXRlIHZhbHVlICh0aGUgc2V0dXAgdmFsdWUpLCBudWxsIG90aGVyd2lzZS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9ICh0aGlzLmhhc0F0dHJpYnV0ZSgndmFsdWUnKSA/IHRoaXMuZ2V0QXR0cmlidXRlKCd2YWx1ZScpIDogbnVsbCkgYXMgVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBmb3JtU3RhdGVSZXN0b3JlQ2FsbGJhY2soXG4gICAgc3RhdGU6IEZvcm1SZXN0b3JlU3RhdGUgfCBudWxsLFxuICAgIF9yZWFzb246IEZvcm1SZXN0b3JlUmVhc29uLFxuICApOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyB2YWx1ZSwgbWFudWFsbHlBc3NpZ25lZCB9ID0gSlNPTi5wYXJzZShzdGF0ZSBhcyBzdHJpbmcpIGFzIHtcbiAgICAgICAgdmFsdWU6IFQgfCBUW107XG4gICAgICAgIG1hbnVhbGx5QXNzaWduZWQ6IGJvb2xlYW47XG4gICAgICB9O1xuXG4gICAgICBjb25zdCB2YWx1ZXMgPSBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXTtcblxuICAgICAgaWYgKHZhbHVlcy5zb21lKCh2KSA9PiB2ICE9PSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JykpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIGBSZXN0b3JpbmcgY29tcGxleCBvYmplY3RzIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIHNiYi1zZWxlY3Qgd2l0aCBzdGF0ZSAke3N0YXRlfWAsXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNWYWx1ZU1hbnVhbGx5QXNzaWduZWQgPSBtYW51YWxseUFzc2lnbmVkO1xuICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZTtcbiAgICAgIHRoaXMuX3VwZGF0ZU9wdGlvbnNGcm9tVmFsdWUoKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnNvbGUud2FybihgRmFpbGVkIHRvIHJlc3RvcmUgc2JiLXNlbGVjdCB3aXRoIHN0YXRlICR7c3RhdGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZvcm1TdGF0ZSgpOiBGb3JtUmVzdG9yZVN0YXRlIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoeyB2YWx1ZTogdGhpcy52YWx1ZSwgbWFudWFsbHlBc3NpZ25lZDogdGhpcy5faXNWYWx1ZU1hbnVhbGx5QXNzaWduZWQgfSk7XG4gIH1cblxuICBwcml2YXRlIF9zeW5jTmVnYXRpdmUoKTogdm9pZCB7XG4gICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsPy48U2JiRGl2aWRlckVsZW1lbnQgfCBTYmJPcHRpb25IaW50RWxlbWVudD4oXG4gICAgICAnc2JiLWRpdmlkZXIsIHNiYi1vcHRpb24taGludCcsXG4gICAgKS5mb3JFYWNoKChlbCkgPT4gKGVsLm5lZ2F0aXZlID0gdGhpcy5uZWdhdGl2ZSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHNob3VsZFZhbGlkYXRlKG5hbWU6IFByb3BlcnR5S2V5IHwgdW5kZWZpbmVkKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHN1cGVyLnNob3VsZFZhbGlkYXRlKG5hbWUpIHx8IG5hbWUgPT09ICd2YWx1ZScgfHwgbmFtZSA9PT0gJ3JlcXVpcmVkJztcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB2YWxpZGF0ZSgpOiB2b2lkIHtcbiAgICBzdXBlci52YWxpZGF0ZSgpO1xuICAgIGlmIChcbiAgICAgIHRoaXMucmVxdWlyZWQgJiZcbiAgICAgICh0aGlzLm9wdGlvbnMuZXZlcnkoKG8pID0+IG8udmFsdWUgIT09IHRoaXMudmFsdWUpIHx8XG4gICAgICAgICghdGhpcy5faXNWYWx1ZU1hbnVhbGx5QXNzaWduZWQgJiYgdGhpcy52YWx1ZSA9PSBudWxsKSlcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0VmFsaWRpdHlGbGFnKCd2YWx1ZU1pc3NpbmcnLCBpMThuU2VsZWN0aW9uUmVxdWlyZWRbdGhpcy5fbGFuZ3VhZ2VDb250cm9sbGVyLmN1cnJlbnRdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZW1vdmVWYWxpZGl0eUZsYWcoJ3ZhbHVlTWlzc2luZycpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldHVwU2VsZWN0KCk6IHZvaWQge1xuICAgIHRoaXMuX3NldHVwT3JpZ2luKCk7XG4gICAgdGhpcy5fc2V0dXBUcmlnZ2VyKCk7XG4gICAgdGhpcy5fZGlkTG9hZCA9IHRydWU7XG4gICAgdGhpcy5jb21wbGV0ZVVwZGF0ZSgpO1xuICB9XG5cbiAgLyoqIFNldHMgdGhlIG9yaWdpbkVsZW1lbnQ7IGlmIHRoZSBjb21wb25lbnQgaXMgdXNlZCBpbiBhIHNiYi1mb3JtLWZpZWxkIHVzZXMgaXQsIG90aGVyd2lzZSB1c2VzIHRoZSBwYXJlbnRFbGVtZW50LiAqL1xuICBwcml2YXRlIF9zZXR1cE9yaWdpbigpOiB2b2lkIHtcbiAgICBjb25zdCBmb3JtRmllbGQgPSB0aGlzLmNsb3Nlc3Q/LjxTYmJGb3JtRmllbGRFbGVtZW50Pignc2JiLWZvcm0tZmllbGQnKTtcbiAgICBpZiAodGhpcy5fb3JpZ2luRWxlbWVudCkge1xuICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMuX29yaWdpbkVsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLl9vcmlnaW5FbGVtZW50ID1cbiAgICAgIGZvcm1GaWVsZD8uc2hhZG93Um9vdD8ucXVlcnlTZWxlY3Rvcj8uKCcjb3ZlcmxheS1hbmNob3InKSA/PyB0aGlzLnBhcmVudEVsZW1lbnQhO1xuICAgIGlmICh0aGlzLl9vcmlnaW5FbGVtZW50KSB7XG4gICAgICB0aGlzLnRvZ2dsZVN0YXRlKCdvcHRpb24tcGFuZWwtb3JpZ2luLWJvcmRlcmxlc3MnLCBmb3JtRmllbGQ/Lmhhc0F0dHJpYnV0ZT8uKCdib3JkZXJsZXNzJykpO1xuXG4gICAgICBpZiAodGhpcy5pc09wZW4pIHtcbiAgICAgICAgdGhpcy5fb3JpZ2luUmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZSh0aGlzLl9vcmlnaW5FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVG8gYXNzZXNzIHNjcmVlbi1yZWFkZXJzIHByb2JsZW1zIGNhdXNlZCBieSB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBhcmlhIHBhdHRlcm5zIGFuZCBzaGFkb3cgRE9NLFxuICAgKiB3ZSBhcmUgZm9yY2VkIHRvIG1vdmUgdGhlICdjb21ib2JveCcgdHJpZ2dlciBlbGVtZW50IHRvIHRoZSBsaWdodCBET01cbiAgICovXG4gIHByaXZhdGUgX3NldHVwVHJpZ2dlcigpOiB2b2lkIHtcbiAgICAvLyBNb3ZlIHRoZSB0cmlnZ2VyIGJlZm9yZSB0aGUgc2JiLXNlbGVjdFxuICAgIGlmICh0aGlzLnBhcmVudEVsZW1lbnQgJiYgdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHRoaXMucGFyZW50RWxlbWVudC5pbnNlcnRCZWZvcmU/Lih0aGlzLl90cmlnZ2VyRWxlbWVudCwgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0T3ZlcmxheVBvc2l0aW9uKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fb3JpZ2luRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRPdmVybGF5UG9zaXRpb24oXG4gICAgICB0aGlzLl9vdmVybGF5LFxuICAgICAgdGhpcy5fb3JpZ2luRWxlbWVudCxcbiAgICAgIHRoaXMuX29wdGlvbkNvbnRhaW5lcixcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcignLnNiYi1zZWxlY3RfX2NvbnRhaW5lcicpISxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgfVxuXG4gIC8vIEluIHJhcmUgY2FzZXMgaXQgY2FuIGJlIHRoYXQgdGhlIGFuaW1hdGlvbkVuZCBldmVudCBpcyB0cmlnZ2VyZWQgdHdpY2UuXG4gIC8vIFRvIGF2b2lkIGVudGVyaW5nIGEgY29ycnVwdCBzdGF0ZSwgZXhpdCB3aGVuIHN0YXRlIGlzIG5vdCBleHBlY3RlZC5cbiAgcHJpdmF0ZSBfb25BbmltYXRpb25FbmQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdvcGVuJyAmJiB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdjbG9zZScgJiYgdGhpcy5zdGF0ZSA9PT0gJ2Nsb3NpbmcnKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlT3BlbmluZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5lZCc7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICd0cnVlJyk7XG4gICAgaWYgKHRoaXMuX29yaWdpbkVsZW1lbnQpIHtcbiAgICAgIHRoaXMuX29yaWdpblJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5fb3JpZ2luRWxlbWVudCk7XG4gICAgfVxuICAgIHRoaXMuZGlzcGF0Y2hPcGVuRXZlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUNsb3NpbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcjxIVE1MRGl2RWxlbWVudD4oJy5zYmItc2VsZWN0X19jb250YWluZXInKT8uaGlkZVBvcG92ZXI/LigpO1xuICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50Py5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKTtcbiAgICB0aGlzLl9yZXNldEFjdGl2ZUVsZW1lbnQoKTtcbiAgICB0aGlzLl9vcHRpb25Db250YWluZXIuc2Nyb2xsVG9wID0gMDtcbiAgICB0aGlzLl9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlci5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy5kaXNwYXRjaENsb3NlRXZlbnQoKTtcbiAgfVxuXG4gIC8qKiBXaGVuIGFuIG9wdGlvbiBpcyBzZWxlY3RlZCwgdXBkYXRlcyB0aGUgZGlzcGxheVZhbHVlOyBpdCBhbHNvIGNsb3NlcyB0aGUgc2VsZWN0IGlmIG5vdCBgbXVsdGlwbGVgLiAqL1xuICBwcml2YXRlIF9vbk9wdGlvblNlbGVjdGVkKG9wdGlvbjogU2JiT3B0aW9uRWxlbWVudDxUPik6IHZvaWQge1xuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBvcHRpb24udmFsdWU7XG4gICAgfSBlbHNlIGlmICghdGhpcy52YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSBbb3B0aW9uLnZhbHVlIV07XG4gICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpICYmICF0aGlzLnZhbHVlLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSEpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IFsuLi50aGlzLnZhbHVlLCBvcHRpb24udmFsdWUhXTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVPcHRpb25zRnJvbVZhbHVlKCk7XG4gICAgdGhpcy5fZGlzcGF0Y2hJbnB1dEV2ZW50cygpO1xuICB9XG5cbiAgLyoqIFdoZW4gYW4gb3B0aW9uIGlzIHVuc2VsZWN0ZWQgaW4gYG11bHRpcGxlYCwgcmVtb3ZlcyBpdCBmcm9tIHZhbHVlIGFuZCB1cGRhdGVzIGRpc3BsYXlWYWx1ZS4gKi9cbiAgcHJpdmF0ZSBfb25PcHRpb25EZXNlbGVjdGVkKG9wdGlvblNlbGVjdGlvbkNoYW5nZTogU2JiT3B0aW9uRWxlbWVudDxUPik6IHZvaWQge1xuICAgIGlmICh0aGlzLm11bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKGVsKSA9PiBlbCAhPT0gb3B0aW9uU2VsZWN0aW9uQ2hhbmdlLnZhbHVlKTtcbiAgICAgIHRoaXMuX3VwZGF0ZU9wdGlvbnNGcm9tVmFsdWUoKTtcbiAgICAgIHRoaXMuX2Rpc3BhdGNoSW5wdXRFdmVudHMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9kaXNwYXRjaElucHV0RXZlbnRzKCk6IHZvaWQge1xuICAgIC8qKiBUaGUgaW5wdXQgZXZlbnQgZmlyZXMgd2hlbiB0aGUgdmFsdWUgaGFzIGJlZW4gY2hhbmdlZCBhcyBhIGRpcmVjdCByZXN1bHQgb2YgYSB1c2VyIGFjdGlvbi4gKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7XG4gICAgICAgIGJ1YmJsZXM6IHRydWUsXG4gICAgICAgIGNvbXBvc2VkOiB0cnVlLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgZWxlbWVudCdzIHZhbHVlLlxuICAgICAqIFVubGlrZSB0aGUgaW5wdXQgZXZlbnQsIHRoZSBjaGFuZ2UgZXZlbnQgaXMgbm90IG5lY2Vzc2FyaWx5IGZpcmVkXG4gICAgICogZm9yIGVhY2ggYWx0ZXJhdGlvbiB0byBhbiBlbGVtZW50J3MgdmFsdWUuXG4gICAgICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaE9wZW5QYW5lbEV2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgLy8gUmVjYWxjdWxhdGUgdGhlIG92ZXJsYXkgcG9zaXRpb24gb24gc2Nyb2xsIGFuZCB3aW5kb3cgcmVzaXplXG4gICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgKCkgPT4gdGhpcy5fc2V0T3ZlcmxheVBvc2l0aW9uKCksIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgICAgLy8gV2l0aG91dCBjYXB0dXJlLCBvdGhlciBzY3JvbGwgY29udGV4dHMgd291bGQgbm90IGJ1YmJsZSB0byB0aGlzIGV2ZW50IGxpc3RlbmVyLlxuICAgICAgLy8gQ2FwdHVyZSBhbGxvd3MgdXMgdG8gcmVhY3QgdG8gYWxsIHNjcm9sbCBjb250ZXh0cyBpbiB0aGlzIERPTS5cbiAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgfSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHRoaXMuX3NldE92ZXJsYXlQb3NpdGlvbigpLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcblxuICAgIC8vIENsb3NlIG1lbnUgb24gYmFja2Ryb3AgY2xpY2tcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncG9pbnRlcmRvd24nLCAoZXYpID0+IHRoaXMuX3BvaW50ZXJEb3duTGlzdGVuZXIoZXYpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX29wZW5QYW5lbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb2ludGVydXAnLCAoZXYpID0+IHRoaXMuX2Nsb3NlT25CYWNrZHJvcENsaWNrKGV2KSwge1xuICAgICAgc2lnbmFsOiB0aGlzLl9vcGVuUGFuZWxFdmVudHNDb250cm9sbGVyLnNpZ25hbCxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX29uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmVkJykge1xuICAgICAgdGhpcy5fb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUgPT09ICdjbG9zZWQnIHx8IHRoaXMuc3RhdGUgPT09ICdjbG9zaW5nJykge1xuICAgICAgdGhpcy5fY2xvc2VkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZWRQYW5lbEtleWJvYXJkSW50ZXJhY3Rpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfb3BlbmVkUGFuZWxLZXlib2FyZEludGVyYWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY2hlY2tGb3JMZXR0ZXJTZWxlY3Rpb24oZXZlbnQpKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudCk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgIGNhc2UgJ1RhYic6XG4gICAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VudGVyJzpcbiAgICAgIGNhc2UgJyAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zZWxlY3RCeUtleWJvYXJkKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb24oZXZlbnQpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLl9zZXROZXh0QWN0aXZlT3B0aW9uKGV2ZW50LCAwKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb24oZXZlbnQsIHRoaXMuX3NlbGVjdGFibGVPcHRpb25zKCkubGVuZ3RoIC0gMSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrRm9yTGV0dGVyU2VsZWN0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScgfHxcbiAgICAgIGV2ZW50LmtleSA9PT0gJ0NsZWFyJyB8fFxuICAgICAgKGV2ZW50LmtleS5sZW5ndGggPT09IDEgJiZcbiAgICAgICAgZXZlbnQua2V5ICE9PSAnICcgJiZcbiAgICAgICAgIWV2ZW50LmFsdEtleSAmJlxuICAgICAgICAhZXZlbnQuY3RybEtleSAmJlxuICAgICAgICAhZXZlbnQubWV0YUtleSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0TmV4dEFjdGl2ZU9wdGlvbkJ5VGV4dChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIC8vIFNldCB0aW1lb3V0IGFuZCB0aGUgc3RyaW5nIHRvIHNlYXJjaC5cbiAgICBpZiAodHlwZW9mIHRoaXMuX3NlYXJjaFRpbWVvdXQgPT09IHR5cGVvZiBzZXRUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fc2VhcmNoVGltZW91dCk7XG4gICAgfVxuICAgIHRoaXMuX3NlYXJjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+ICh0aGlzLl9zZWFyY2hTdHJpbmcgPSAnJyksIDEwMDApO1xuICAgIHRoaXMuX3NlYXJjaFN0cmluZyArPSBldmVudC5rZXk7XG5cbiAgICAvLyBSZW9yZGVyIHRoZSBfZmlsdGVyZWRPcHRpb24gYXJyYXkgdG8gaGF2ZSB0aGUgbGFzdCBzZWxlY3RlZCBlbGVtZW50IGF0IHRoZSBib3R0b20uXG4gICAgY29uc3QgaW5kZXhGb3JTbGljZTogbnVtYmVyID0gdGhpcy5fYWN0aXZlSXRlbUluZGV4ICsgMTtcbiAgICBjb25zdCBzZWxlY3RhYmxlT3B0aW9ucyA9IHRoaXMuX3NlbGVjdGFibGVPcHRpb25zKCk7XG4gICAgY29uc3QgZmlsdGVyZWRPcHRpb25zU29ydGVkID0gW1xuICAgICAgLi4uc2VsZWN0YWJsZU9wdGlvbnMuc2xpY2UoaW5kZXhGb3JTbGljZSksXG4gICAgICAuLi5zZWxlY3RhYmxlT3B0aW9ucy5zbGljZSgwLCBpbmRleEZvclNsaWNlKSxcbiAgICBdO1xuXG4gICAgY29uc3QgbWF0Y2ggPSBmaWx0ZXJlZE9wdGlvbnNTb3J0ZWQuZmluZChcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi50ZXh0Q29udGVudD8udG9Mb3dlckNhc2UoKS5pbmRleE9mKHRoaXMuX3NlYXJjaFN0cmluZy50b0xvd2VyQ2FzZSgpKSA9PT0gMCxcbiAgICApO1xuICAgIGlmIChtYXRjaCkge1xuICAgICAgLy8gSWYgYW4gZXhhY3QgbWF0Y2ggaGFzIGJlZW4gZm91bmQsIGdvIHRvIHRoYXQgb3B0aW9uLlxuICAgICAgdGhpcy5fc2V0TmV4dEFjdGl2ZU9wdGlvbihldmVudCwgc2VsZWN0YWJsZU9wdGlvbnMuaW5kZXhPZihtYXRjaCkpO1xuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0aGlzLl9zZWFyY2hTdHJpbmcubGVuZ3RoID4gMSAmJlxuICAgICAgbmV3IFJlZ0V4cChgXiR7dGhpcy5fc2VhcmNoU3RyaW5nLmNoYXJBdCgwKX0qJGApLnRlc3QodGhpcy5fc2VhcmNoU3RyaW5nKVxuICAgICkge1xuICAgICAgLy8gSWYgbm8gZXhhY3QgbWF0Y2ggaGFzIGJlZW4gZm91bmQgYnV0IHRoZSBzdHJpbmcgdG8gc2VhcmNoIGlzIG1hZGUgYnkgdGhlIHNhbWUgcmVwZWF0ZWQgbGV0dGVyLFxuICAgICAgLy8gZ28gdG8gdGhlIGZpcnN0IGVsZW1lbnQsIGlmIGV4aXN0cywgdGhhdCBtYXRjaGVzIHRoZSBsZXR0ZXIuXG4gICAgICBjb25zdCBmaXJzdE1hdGNoID0gZmlsdGVyZWRPcHRpb25zU29ydGVkLmZpbmQoXG4gICAgICAgIChvcHRpb24pID0+XG4gICAgICAgICAgb3B0aW9uLnRleHRDb250ZW50Py50b0xvd2VyQ2FzZSgpLmluZGV4T2YodGhpcy5fc2VhcmNoU3RyaW5nWzBdLnRvTG93ZXJDYXNlKCkpID09PSAwLFxuICAgICAgKTtcbiAgICAgIGlmIChmaXJzdE1hdGNoKSB7XG4gICAgICAgIHRoaXMuX3NldE5leHRBY3RpdmVPcHRpb24oZXZlbnQsIHNlbGVjdGFibGVPcHRpb25zLmluZGV4T2YoZmlyc3RNYXRjaCkpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBtYXRjaCBmb3VuZCwgY2xlYXIgdGhlIHRpbWVvdXQgYW5kIHRoZSBzZWFyY2ggdGVybS5cbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9zZWFyY2hUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3NlYXJjaFN0cmluZyA9ICcnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NlbGVjdEJ5S2V5Ym9hcmQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlT3B0aW9uID0gdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKVt0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIGFjdGl2ZU9wdGlvbj8uWydzZWxlY3RWaWFVc2VySW50ZXJhY3Rpb24nXSghYWN0aXZlT3B0aW9uLnNlbGVjdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldE5leHRBY3RpdmVPcHRpb24oZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGluZGV4PzogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKTtcblxuICAgIC8vIFByZXZlbnQga2V5Ym9hcmQgbmF2aWdhdGlvbiBpZiBhbGwgb3B0aW9ucyBhcmUgZGlzYWJsZWRcbiAgICBpZiAoZmlsdGVyZWRPcHRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IG5leHRJbmRleCA9XG4gICAgICBpbmRleCA/PyBnZXROZXh0RWxlbWVudEluZGV4KGV2ZW50LCB0aGlzLl9hY3RpdmVJdGVtSW5kZXgsIGZpbHRlcmVkT3B0aW9ucy5sZW5ndGgpO1xuICAgIGNvbnN0IG5leHRPcHRpb24gPSBmaWx0ZXJlZE9wdGlvbnNbbmV4dEluZGV4XTtcbiAgICBjb25zdCBhY3RpdmVPcHRpb24gPSBmaWx0ZXJlZE9wdGlvbnNbdGhpcy5fYWN0aXZlSXRlbUluZGV4XTtcblxuICAgIHRoaXMuX3NldEFjdGl2ZUVsZW1lbnQobmV4dE9wdGlvbiwgYWN0aXZlT3B0aW9uKTtcblxuICAgIGlmICghdGhpcy5tdWx0aXBsZSkge1xuICAgICAgdGhpcy5fc2V0U2VsZWN0ZWRFbGVtZW50KG5leHRPcHRpb24sIGFjdGl2ZU9wdGlvbik7XG4gICAgfSBlbHNlIGlmIChldmVudD8uc2hpZnRLZXkpIHtcbiAgICAgIG5leHRPcHRpb25bJ3NlbGVjdFZpYVVzZXJJbnRlcmFjdGlvbiddKCFuZXh0T3B0aW9uLnNlbGVjdGVkKTtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gbmV4dEluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBfc2V0QWN0aXZlRWxlbWVudChcbiAgICBuZXh0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50PFQ+LFxuICAgIGxhc3RBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQ8VD4gfCBudWxsID0gbnVsbCxcbiAgICBzZXRBY3RpdmVEZXNjZW5kYW50ID0gdHJ1ZSxcbiAgKTogdm9pZCB7XG4gICAgbmV4dEFjdGl2ZU9wdGlvbi5zZXRBY3RpdmUodHJ1ZSk7XG4gICAgbmV4dEFjdGl2ZU9wdGlvbi5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiAnbmVhcmVzdCcgfSk7XG5cbiAgICBpZiAoc2V0QWN0aXZlRGVzY2VuZGFudCkge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgbmV4dEFjdGl2ZU9wdGlvbi5pZCk7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgdGhlIHByZXZpb3VzXG4gICAgaWYgKGxhc3RBY3RpdmVPcHRpb24gJiYgbGFzdEFjdGl2ZU9wdGlvbiAhPT0gbmV4dEFjdGl2ZU9wdGlvbikge1xuICAgICAgbGFzdEFjdGl2ZU9wdGlvbi5zZXRBY3RpdmUoZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldFNlbGVjdGVkRWxlbWVudChcbiAgICBuZXh0QWN0aXZlT3B0aW9uOiBTYmJPcHRpb25FbGVtZW50PFQ+LFxuICAgIGxhc3RBY3RpdmVPcHRpb246IFNiYk9wdGlvbkVsZW1lbnQ8VD4sXG4gICk6IHZvaWQge1xuICAgIG5leHRBY3RpdmVPcHRpb25bJ3NlbGVjdFZpYVVzZXJJbnRlcmFjdGlvbiddKHRydWUpO1xuXG4gICAgaWYgKGxhc3RBY3RpdmVPcHRpb24gJiYgbGFzdEFjdGl2ZU9wdGlvbiAhPT0gbmV4dEFjdGl2ZU9wdGlvbikge1xuICAgICAgbGFzdEFjdGl2ZU9wdGlvblsnc2VsZWN0VmlhVXNlckludGVyYWN0aW9uJ10oZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2V0QWN0aXZlRWxlbWVudCgpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKVt0aGlzLl9hY3RpdmVJdGVtSW5kZXhdO1xuXG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuc2V0QWN0aXZlKGZhbHNlKTtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gLTE7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gIH1cblxuICAvLyBDaGVjayBpZiB0aGUgcG9pbnRlcmRvd24gZXZlbnQgdGFyZ2V0IGlzIHRyaWdnZXJlZCBvbiB0aGUgbWVudS5cbiAgcHJpdmF0ZSBfcG9pbnRlckRvd25MaXN0ZW5lciA9IChldmVudDogUG9pbnRlckV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ID0gaXNFdmVudE9uRWxlbWVudCh0aGlzLl9vdmVybGF5LCBldmVudCk7XG4gIH07XG5cbiAgLy8gQ2xvc2UgbWVudSBvbiBiYWNrZHJvcCBjbGljay5cbiAgcHJpdmF0ZSBfY2xvc2VPbkJhY2tkcm9wQ2xpY2sgPSAoZXZlbnQ6IFBvaW50ZXJFdmVudCk6IHZvaWQgPT4ge1xuICAgIGlmICghdGhpcy5faXNQb2ludGVyRG93bkV2ZW50T25NZW51ICYmICFpc0V2ZW50T25FbGVtZW50KHRoaXMuX292ZXJsYXksIGV2ZW50KSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF91cGRhdGVPcHRpb25zRnJvbVZhbHVlKCk6IHZvaWQge1xuICAgIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSA/IHRoaXMudmFsdWUgOiBbdGhpcy52YWx1ZV07XG5cbiAgICBjb25zdCBkaXNwbGF5VmFsdWVzID0gW107XG4gICAgZm9yIChjb25zdCBvcHRpb24gb2YgdGhpcy5vcHRpb25zKSB7XG4gICAgICBvcHRpb24uc2VsZWN0ZWQgPSB2YWx1ZS5pbmNsdWRlcyhvcHRpb24udmFsdWUpO1xuICAgICAgaWYgKG9wdGlvbi5zZWxlY3RlZCkge1xuICAgICAgICBkaXNwbGF5VmFsdWVzLnB1c2gob3B0aW9uKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVEaXNwbGF5VmFsdWUoKTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKSkge1xuICAgICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKS5maW5kSW5kZXgoXG4gICAgICAgIChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdGhpcy52YWx1ZSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlVmFsdWVGcm9tT3B0aW9ucygpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHRoaXMuX2dldFNlbGVjdGVkKCk7XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShzZWxlY3RlZCkpIHtcbiAgICAgIGlmIChzZWxlY3RlZCAmJiBzZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlOiBUW10gPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygc2VsZWN0ZWQpIHtcbiAgICAgICAgICB2YWx1ZS5wdXNoKG9wdGlvbi52YWx1ZSEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzZWxlY3RlZCkge1xuICAgICAgdGhpcy5fYWN0aXZlSXRlbUluZGV4ID0gdGhpcy5fc2VsZWN0YWJsZU9wdGlvbnMoKS5maW5kSW5kZXgoKG9wdGlvbikgPT4gb3B0aW9uID09PSBzZWxlY3RlZCk7XG4gICAgICB0aGlzLl92YWx1ZSA9IHNlbGVjdGVkLnZhbHVlO1xuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZURpc3BsYXlWYWx1ZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlVmFsdWVPcHRpb25TdGF0ZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNWYWx1ZU1hbnVhbGx5QXNzaWduZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZU9wdGlvbnNGcm9tVmFsdWUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdXBkYXRlVmFsdWVGcm9tT3B0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2dldFNlbGVjdGVkKCk6IFNiYk9wdGlvbkVsZW1lbnQ8VD4gfCBTYmJPcHRpb25FbGVtZW50PFQ+W10gfCBudWxsIHtcbiAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLnNlbGVjdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi5zZWxlY3RlZCkgPz8gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF90b2dnbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuZm9ybURpc2FibGVkIHx8IHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LmZvY3VzKCk7XG5cbiAgICBzd2l0Y2ggKHRoaXMuc3RhdGUpIHtcbiAgICAgIGNhc2UgJ29wZW5pbmcnOlxuICAgICAgY2FzZSAnb3BlbmVkJzoge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnY2xvc2luZyc6XG4gICAgICBjYXNlICdjbG9zZWQnOiB7XG4gICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NwcmVhZERlZmVycmVkRGlzcGxheVZhbHVlKFxuICAgIHBsYWNlaG9sZGVyOiBUZW1wbGF0ZVJlc3VsdCxcbiAgKTogKFRlbXBsYXRlUmVzdWx0IHwgUHJvbWlzZTxUZW1wbGF0ZVJlc3VsdD4pW10ge1xuICAgIHJldHVybiBbdGhpcy5fZGVmZXJyZWREaXNwbGF5VmFsdWUocGxhY2Vob2xkZXIpLCBwbGFjZWhvbGRlcl07XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9kZWZlcnJlZERpc3BsYXlWYWx1ZShwbGFjZWhvbGRlcjogVGVtcGxhdGVSZXN1bHQpOiBQcm9taXNlPFRlbXBsYXRlUmVzdWx0PiB7XG4gICAgaWYgKHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIGF3YWl0IHRoaXMuaHlkcmF0aW9uQ29tcGxldGU7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kaXNwbGF5VmFsdWUgPyBodG1sYCR7dGhpcy5fZGlzcGxheVZhbHVlfWAgOiBwbGFjZWhvbGRlcjtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIC8vIFNjcm9sbCBhcmVhcyB3aXRob3V0IGNvbnRhaW5pbmcgYW4gaW50ZXJhY3RpdmUgZWxlbWVudCB3aWxsIHJlY2VpdmUgZm9jdXMgd2hlbiB0YWJiaW5nIHRocm91Z2ggdGhlIGRvY3VtZW50LlxuICAgIC8vIElmIHRoZXJlIGFyZSBhIGxvdCBvZiBvcHRpb25zIGFuZCB3aGVuIHByZXNzaW5nIHRhYiBrZXksIHRoZSBzY3JvbGwgYXJlYSBvbiBzYmItc2VsZWN0X19vcHRpb25zIGdldHMgZm9jdXMuXG4gICAgLy8gQXMgZWxlbWVudHMgaW5zaWRlIHRoZSBwYW5lbCBzaG91bGQgbmV2ZXIgZ2V0IGZvY3VzLCB3ZSBoYXZlIHRvIGF2b2lkIHRoYXQgYnkgc2V0dGluZyB0YWJpbmRleD0tMS5cblxuICAgIHJldHVybiBodG1sYFxuICAgICAgPCEtLSBUaGlzIGVsZW1lbnQgaXMgdmlzdWFsbHkgaGlkZGVuIGFuZCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBsaWdodCBET00gdG8gYWxsb3cgc2NyZWVuXG4gICAgICByZWFkZXJzIHRvIHdvcmsgcHJvcGVybHkgLS0+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzPVwic2JiLXNjcmVlbi1yZWFkZXItb25seSBzYmItc2VsZWN0LXRyaWdnZXJcIlxuICAgICAgICB0YWJpbmRleD0ke3RoaXMuZGlzYWJsZWQgfHwgdGhpcy5mb3JtRGlzYWJsZWQgPyBub3RoaW5nIDogJzAnfVxuICAgICAgICByb2xlPVwiY29tYm9ib3hcIlxuICAgICAgICBhcmlhLWhhc3BvcHVwPVwibGlzdGJveFwiXG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9XCJmYWxzZVwiXG4gICAgICAgIGFyaWEtcmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkLnRvU3RyaW5nKCl9XG4gICAgICAgIGFyaWEtY29udHJvbHM9JHt0aGlzLl9vdmVybGF5SWR9XG4gICAgICAgIGFyaWEtb3ducz0ke3RoaXMuX292ZXJsYXlJZH1cbiAgICAgICAgQGtleWRvd249JHt0aGlzLl9vbktleURvd259XG4gICAgICAgIEBjbGljaz0ke3RoaXMuX3RvZ2dsZU9wZW5pbmd9XG4gICAgICAgICR7cmVmKChyZWYpID0+ICh0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHJlZiBhcyBIVE1MRWxlbWVudCkpfVxuICAgICAgPlxuICAgICAgICAke3VudGlsKC4uLnRoaXMuX3NwcmVhZERlZmVycmVkRGlzcGxheVZhbHVlKGh0bWxgPHNwYW4+JHt0aGlzLnBsYWNlaG9sZGVyfTwvc3Bhbj5gKSl9XG4gICAgICA8L2Rpdj5cblxuICAgICAgPCEtLSBWaXN1YWxseSBkaXNwbGF5IHRoZSB2YWx1ZSAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X190cmlnZ2VyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICR7dW50aWwoXG4gICAgICAgICAgLi4udGhpcy5fc3ByZWFkRGVmZXJyZWREaXNwbGF5VmFsdWUoXG4gICAgICAgICAgICBodG1sYDxzcGFuIGNsYXNzPVwic2JiLXNlbGVjdF9fdHJpZ2dlci0tcGxhY2Vob2xkZXJcIj4ke3RoaXMucGxhY2Vob2xkZXJ9PC9zcGFuPmAsXG4gICAgICAgICAgKSxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNlbGVjdF9fZ2FwLWZpeFwiPjwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2NvbnRhaW5lclwiIHBvcG92ZXI9XCJtYW51YWxcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zZWxlY3RfX2dhcC1maXhcIj4ke292ZXJsYXlHYXBGaXhDb3JuZXJzKCl9PC9kaXY+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7dGhpcy5fb25BbmltYXRpb25FbmR9XG4gICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0X19wYW5lbFwiXG4gICAgICAgICAgJHtyZWYoKGRpYWxvZ1JlZikgPT4gKHRoaXMuX292ZXJsYXkgPSBkaWFsb2dSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2VsZWN0X193cmFwcGVyXCI+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGlkPSR7IWFyaWFSb2xlT25Ib3N0ID8gdGhpcy5fb3ZlcmxheUlkIDogbm90aGluZ31cbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItc2VsZWN0X19vcHRpb25zXCJcbiAgICAgICAgICAgICAgcm9sZT0keyFhcmlhUm9sZU9uSG9zdCA/ICdsaXN0Ym94JyA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgID9hcmlhLW11bHRpc2VsZWN0YWJsZT0ke3RoaXMubXVsdGlwbGV9XG4gICAgICAgICAgICAgICR7cmVmKChjb250YWluZXJSZWYpID0+ICh0aGlzLl9vcHRpb25Db250YWluZXIgPSBjb250YWluZXJSZWYgYXMgSFRNTEVsZW1lbnQpKX1cbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxzbG90IEBzbG90Y2hhbmdlPSR7dGhpcy5fdXBkYXRlVmFsdWVPcHRpb25TdGF0ZX0+PC9zbG90PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNlbGVjdCc6IFNiYlNlbGVjdEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJzdGF0ZSIsInJlZiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBOENBLE1BQU0saUJBQWlCO0FBRXZCLElBQUksU0FBUztJQWFBLG9CQUFnQixNQUFBOztBQUFxQixNQUFBLGNBQUEsd0JBQ2hELGlCQUNFLGlCQUNFLGlCQUNFLGlCQUNFLHVCQUF1RCx1QkFBdUIsQ0FBQyxDQUNoRixDQUNGLENBQ0YsQ0FDRjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBVFUsU0FBQSxtQkFBcUMsWUFVakQ7QUFBQSxJQTZHQyxjQUFBO0FBQ0UsWUFB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