@sbb-esta/lyne-elements 0.0.0 → 0.52.1

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 (1752) hide show
  1. package/README.md +55 -0
  2. package/_index.scss +2 -0
  3. package/a11y.css +22 -0
  4. package/accordion/accordion.d.ts +41 -0
  5. package/accordion/accordion.d.ts.map +1 -0
  6. package/accordion.d.ts +2 -0
  7. package/accordion.d.ts.map +1 -0
  8. package/accordion.js +88 -0
  9. package/action-group/action-group.d.ts +45 -0
  10. package/action-group/action-group.d.ts.map +1 -0
  11. package/action-group.d.ts +2 -0
  12. package/action-group.d.ts.map +1 -0
  13. package/action-group.js +57 -0
  14. package/alert/alert/alert.d.ts +76 -0
  15. package/alert/alert/alert.d.ts.map +1 -0
  16. package/alert/alert-group/alert-group.d.ts +48 -0
  17. package/alert/alert-group/alert-group.d.ts.map +1 -0
  18. package/alert/alert-group.d.ts +2 -0
  19. package/alert/alert-group.d.ts.map +1 -0
  20. package/alert/alert-group.js +73 -0
  21. package/alert/alert.d.ts +2 -0
  22. package/alert/alert.d.ts.map +1 -0
  23. package/alert/alert.js +139 -0
  24. package/alert.d.ts +3 -0
  25. package/alert.d.ts.map +1 -0
  26. package/alert.js +2 -0
  27. package/animation.css +18 -0
  28. package/autocomplete/autocomplete.d.ts +108 -0
  29. package/autocomplete/autocomplete.d.ts.map +1 -0
  30. package/autocomplete.d.ts +2 -0
  31. package/autocomplete.d.ts.map +1 -0
  32. package/autocomplete.js +300 -0
  33. package/breadcrumb/breadcrumb/breadcrumb.d.ts +23 -0
  34. package/breadcrumb/breadcrumb/breadcrumb.d.ts.map +1 -0
  35. package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +50 -0
  36. package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -0
  37. package/breadcrumb/breadcrumb-group.d.ts +2 -0
  38. package/breadcrumb/breadcrumb-group.d.ts.map +1 -0
  39. package/breadcrumb/breadcrumb-group.js +151 -0
  40. package/breadcrumb/breadcrumb.d.ts +2 -0
  41. package/breadcrumb/breadcrumb.d.ts.map +1 -0
  42. package/breadcrumb/breadcrumb.js +43 -0
  43. package/breadcrumb.d.ts +3 -0
  44. package/breadcrumb.d.ts.map +1 -0
  45. package/breadcrumb.js +2 -0
  46. package/button/button/button.d.ts +20 -0
  47. package/button/button/button.d.ts.map +1 -0
  48. package/button/button-link/button-link.d.ts +20 -0
  49. package/button/button-link/button-link.d.ts.map +1 -0
  50. package/button/button-link.d.ts +2 -0
  51. package/button/button-link.d.ts.map +1 -0
  52. package/button/button-link.js +20 -0
  53. package/button/button-static/button-static.d.ts +20 -0
  54. package/button/button-static/button-static.d.ts.map +1 -0
  55. package/button/button-static.d.ts +2 -0
  56. package/button/button-static.d.ts.map +1 -0
  57. package/button/button-static.js +20 -0
  58. package/button/button.d.ts +2 -0
  59. package/button/button.d.ts.map +1 -0
  60. package/button/button.js +20 -0
  61. package/button/common/button-common.d.ts +14 -0
  62. package/button/common/button-common.d.ts.map +1 -0
  63. package/button/common.d.ts +2 -0
  64. package/button/common.d.ts.map +1 -0
  65. package/button/common.js +42 -0
  66. package/button/mini-button/mini-button.d.ts +22 -0
  67. package/button/mini-button/mini-button.d.ts.map +1 -0
  68. package/button/mini-button.d.ts +2 -0
  69. package/button/mini-button.d.ts.map +1 -0
  70. package/button/mini-button.js +29 -0
  71. package/button/secondary-button/secondary-button.d.ts +20 -0
  72. package/button/secondary-button/secondary-button.d.ts.map +1 -0
  73. package/button/secondary-button-link/secondary-button-link.d.ts +20 -0
  74. package/button/secondary-button-link/secondary-button-link.d.ts.map +1 -0
  75. package/button/secondary-button-link.d.ts +2 -0
  76. package/button/secondary-button-link.d.ts.map +1 -0
  77. package/button/secondary-button-link.js +20 -0
  78. package/button/secondary-button-static/secondary-button-static.d.ts +20 -0
  79. package/button/secondary-button-static/secondary-button-static.d.ts.map +1 -0
  80. package/button/secondary-button-static.d.ts +2 -0
  81. package/button/secondary-button-static.d.ts.map +1 -0
  82. package/button/secondary-button-static.js +20 -0
  83. package/button/secondary-button.d.ts +2 -0
  84. package/button/secondary-button.d.ts.map +1 -0
  85. package/button/secondary-button.js +20 -0
  86. package/button/tertiary-button/tertiary-button.d.ts +20 -0
  87. package/button/tertiary-button/tertiary-button.d.ts.map +1 -0
  88. package/button/tertiary-button-link/tertiary-button-link.d.ts +20 -0
  89. package/button/tertiary-button-link/tertiary-button-link.d.ts.map +1 -0
  90. package/button/tertiary-button-link.d.ts +2 -0
  91. package/button/tertiary-button-link.d.ts.map +1 -0
  92. package/button/tertiary-button-link.js +20 -0
  93. package/button/tertiary-button-static/tertiary-button-static.d.ts +20 -0
  94. package/button/tertiary-button-static/tertiary-button-static.d.ts.map +1 -0
  95. package/button/tertiary-button-static.d.ts +2 -0
  96. package/button/tertiary-button-static.d.ts.map +1 -0
  97. package/button/tertiary-button-static.js +20 -0
  98. package/button/tertiary-button.d.ts +2 -0
  99. package/button/tertiary-button.d.ts.map +1 -0
  100. package/button/tertiary-button.js +20 -0
  101. package/button/transparent-button/transparent-button.d.ts +20 -0
  102. package/button/transparent-button/transparent-button.d.ts.map +1 -0
  103. package/button/transparent-button-link/transparent-button-link.d.ts +20 -0
  104. package/button/transparent-button-link/transparent-button-link.d.ts.map +1 -0
  105. package/button/transparent-button-link.d.ts +2 -0
  106. package/button/transparent-button-link.d.ts.map +1 -0
  107. package/button/transparent-button-link.js +20 -0
  108. package/button/transparent-button-static/transparent-button-static.d.ts +20 -0
  109. package/button/transparent-button-static/transparent-button-static.d.ts.map +1 -0
  110. package/button/transparent-button-static.d.ts +2 -0
  111. package/button/transparent-button-static.d.ts.map +1 -0
  112. package/button/transparent-button-static.js +20 -0
  113. package/button/transparent-button.d.ts +2 -0
  114. package/button/transparent-button.d.ts.map +1 -0
  115. package/button/transparent-button.js +20 -0
  116. package/button.d.ts +15 -0
  117. package/button.d.ts.map +1 -0
  118. package/button.js +14 -0
  119. package/calendar/calendar.d.ts +216 -0
  120. package/calendar/calendar.d.ts.map +1 -0
  121. package/calendar.d.ts +2 -0
  122. package/calendar.d.ts.map +1 -0
  123. package/calendar.js +826 -0
  124. package/card/card/card.d.ts +29 -0
  125. package/card/card/card.d.ts.map +1 -0
  126. package/card/card-badge/card-badge.d.ts +23 -0
  127. package/card/card-badge/card-badge.d.ts.map +1 -0
  128. package/card/card-badge.d.ts +2 -0
  129. package/card/card-badge.d.ts.map +1 -0
  130. package/card/card-badge.js +48 -0
  131. package/card/card-button/card-button.d.ts +19 -0
  132. package/card/card-button/card-button.d.ts.map +1 -0
  133. package/card/card-button.d.ts +2 -0
  134. package/card/card-button.d.ts.map +1 -0
  135. package/card/card-button.js +19 -0
  136. package/card/card-link/card-link.d.ts +19 -0
  137. package/card/card-link/card-link.d.ts.map +1 -0
  138. package/card/card-link.d.ts +2 -0
  139. package/card/card-link.d.ts.map +1 -0
  140. package/card/card-link.js +19 -0
  141. package/card/card.d.ts +2 -0
  142. package/card/card.d.ts.map +1 -0
  143. package/card/card.js +47 -0
  144. package/card/common/card-action-common.d.ts +9 -0
  145. package/card/common/card-action-common.d.ts.map +1 -0
  146. package/card/common.d.ts +2 -0
  147. package/card/common.d.ts.map +1 -0
  148. package/card/common.js +67 -0
  149. package/card.d.ts +6 -0
  150. package/card.d.ts.map +1 -0
  151. package/card.js +5 -0
  152. package/checkbox/checkbox/checkbox.d.ts +73 -0
  153. package/checkbox/checkbox/checkbox.d.ts.map +1 -0
  154. package/checkbox/checkbox-group/checkbox-group.d.ts +37 -0
  155. package/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -0
  156. package/checkbox/checkbox-group.d.ts +2 -0
  157. package/checkbox/checkbox-group.d.ts.map +1 -0
  158. package/checkbox/checkbox-group.js +83 -0
  159. package/checkbox/checkbox.d.ts +2 -0
  160. package/checkbox/checkbox.d.ts.map +1 -0
  161. package/checkbox/checkbox.js +132 -0
  162. package/checkbox.d.ts +3 -0
  163. package/checkbox.d.ts.map +1 -0
  164. package/checkbox.js +2 -0
  165. package/chip/chip.d.ts +21 -0
  166. package/chip/chip.d.ts.map +1 -0
  167. package/chip.d.ts +2 -0
  168. package/chip.d.ts.map +1 -0
  169. package/chip.js +35 -0
  170. package/clock/clock.d.ts +62 -0
  171. package/clock/clock.d.ts.map +1 -0
  172. package/clock.d.ts +2 -0
  173. package/clock.d.ts.map +1 -0
  174. package/clock.js +156 -0
  175. package/container/container/container.d.ts +25 -0
  176. package/container/container/container.d.ts.map +1 -0
  177. package/container/container.d.ts +2 -0
  178. package/container/container.d.ts.map +1 -0
  179. package/container/container.js +41 -0
  180. package/container/sticky-bar/sticky-bar.d.ts +31 -0
  181. package/container/sticky-bar/sticky-bar.d.ts.map +1 -0
  182. package/container/sticky-bar.d.ts +2 -0
  183. package/container/sticky-bar.d.ts.map +1 -0
  184. package/container/sticky-bar.js +57 -0
  185. package/container.d.ts +3 -0
  186. package/container.d.ts.map +1 -0
  187. package/container.js +2 -0
  188. package/core/a11y/arrow-navigation.d.ts +32 -0
  189. package/core/a11y/arrow-navigation.d.ts.map +1 -0
  190. package/core/a11y/fake-event-detection.d.ts +5 -0
  191. package/core/a11y/fake-event-detection.d.ts.map +1 -0
  192. package/core/a11y/focus-visible-within-controller.d.ts +11 -0
  193. package/core/a11y/focus-visible-within-controller.d.ts.map +1 -0
  194. package/core/a11y/focus.d.ts +22 -0
  195. package/core/a11y/focus.d.ts.map +1 -0
  196. package/core/a11y/input-modality-detector.d.ts +58 -0
  197. package/core/a11y/input-modality-detector.d.ts.map +1 -0
  198. package/core/a11y/interactivity-checker.d.ts +17 -0
  199. package/core/a11y/interactivity-checker.d.ts.map +1 -0
  200. package/core/a11y.d.ts +7 -0
  201. package/core/a11y.d.ts.map +1 -0
  202. package/core/a11y.js +226 -0
  203. package/core/base-elements/action-base-element.d.ts +11 -0
  204. package/core/base-elements/action-base-element.d.ts.map +1 -0
  205. package/core/base-elements/button-base-element.d.ts +46 -0
  206. package/core/base-elements/button-base-element.d.ts.map +1 -0
  207. package/core/base-elements/link-base-element.d.ts +31 -0
  208. package/core/base-elements/link-base-element.d.ts.map +1 -0
  209. package/core/base-elements/open-close-base-element.d.ts +37 -0
  210. package/core/base-elements/open-close-base-element.d.ts.map +1 -0
  211. package/core/base-elements.d.ts +5 -0
  212. package/core/base-elements.d.ts.map +1 -0
  213. package/core/base-elements.js +233 -0
  214. package/core/config/config.d.ts +22 -0
  215. package/core/config/config.d.ts.map +1 -0
  216. package/core/config.d.ts +2 -0
  217. package/core/config.d.ts.map +1 -0
  218. package/core/config.js +11 -0
  219. package/core/controllers/connected-abort-controller.d.ts +11 -0
  220. package/core/controllers/connected-abort-controller.d.ts.map +1 -0
  221. package/core/controllers/language-controller.d.ts +33 -0
  222. package/core/controllers/language-controller.d.ts.map +1 -0
  223. package/core/controllers/slot-state-controller.d.ts +32 -0
  224. package/core/controllers/slot-state-controller.d.ts.map +1 -0
  225. package/core/controllers.d.ts +4 -0
  226. package/core/controllers.d.ts.map +1 -0
  227. package/core/controllers.js +88 -0
  228. package/core/datetime/date-adapter.d.ts +162 -0
  229. package/core/datetime/date-adapter.d.ts.map +1 -0
  230. package/core/datetime/native-date-adapter.d.ts +74 -0
  231. package/core/datetime/native-date-adapter.d.ts.map +1 -0
  232. package/core/datetime.d.ts +3 -0
  233. package/core/datetime.d.ts.map +1 -0
  234. package/core/datetime.js +254 -0
  235. package/core/decorators/host-attributes.d.ts +22 -0
  236. package/core/decorators/host-attributes.d.ts.map +1 -0
  237. package/core/decorators.d.ts +2 -0
  238. package/core/decorators.d.ts.map +1 -0
  239. package/core/decorators.js +18 -0
  240. package/core/dom/breakpoint.d.ts +14 -0
  241. package/core/dom/breakpoint.d.ts.map +1 -0
  242. package/core/dom/find-referenced-element.d.ts +7 -0
  243. package/core/dom/find-referenced-element.d.ts.map +1 -0
  244. package/core/dom/get-document-writing-mode.d.ts +2 -0
  245. package/core/dom/get-document-writing-mode.d.ts.map +1 -0
  246. package/core/dom/host-context.d.ts +11 -0
  247. package/core/dom/host-context.d.ts.map +1 -0
  248. package/core/dom/input-element.d.ts +10 -0
  249. package/core/dom/input-element.d.ts.map +1 -0
  250. package/core/dom/platform.d.ts +24 -0
  251. package/core/dom/platform.d.ts.map +1 -0
  252. package/core/dom/scroll.d.ts +13 -0
  253. package/core/dom/scroll.d.ts.map +1 -0
  254. package/core/dom/set-or-remove-attribute.d.ts +8 -0
  255. package/core/dom/set-or-remove-attribute.d.ts.map +1 -0
  256. package/core/dom/ssr.d.ts +12 -0
  257. package/core/dom/ssr.d.ts.map +1 -0
  258. package/core/dom.d.ts +10 -0
  259. package/core/dom.d.ts.map +1 -0
  260. package/core/dom.js +99 -0
  261. package/core/eventing/composed-path-has-attribute.d.ts +10 -0
  262. package/core/eventing/composed-path-has-attribute.d.ts.map +1 -0
  263. package/core/eventing/event-emitter.d.ts +23 -0
  264. package/core/eventing/event-emitter.d.ts.map +1 -0
  265. package/core/eventing/event-target.d.ts +3 -0
  266. package/core/eventing/event-target.d.ts.map +1 -0
  267. package/core/eventing/form-element-handlers.d.ts +14 -0
  268. package/core/eventing/form-element-handlers.d.ts.map +1 -0
  269. package/core/eventing/forward-event.d.ts +6 -0
  270. package/core/eventing/forward-event.d.ts.map +1 -0
  271. package/core/eventing/handler-repository.d.ts +28 -0
  272. package/core/eventing/handler-repository.d.ts.map +1 -0
  273. package/core/eventing/is-event-prevented.d.ts +3 -0
  274. package/core/eventing/is-event-prevented.d.ts.map +1 -0
  275. package/core/eventing/throttle.d.ts +2 -0
  276. package/core/eventing/throttle.d.ts.map +1 -0
  277. package/core/eventing.d.ts +9 -0
  278. package/core/eventing.d.ts.map +1 -0
  279. package/core/eventing.js +79 -0
  280. package/core/i18n/i18n.d.ts +74 -0
  281. package/core/i18n/i18n.d.ts.map +1 -0
  282. package/core/i18n.d.ts +2 -0
  283. package/core/i18n.d.ts.map +1 -0
  284. package/core/i18n.js +627 -0
  285. package/core/images.d.ts +3 -0
  286. package/core/images.d.ts.map +1 -0
  287. package/core/interfaces/overlay-close-details.d.ts +5 -0
  288. package/core/interfaces/overlay-close-details.d.ts.map +1 -0
  289. package/core/interfaces/types.d.ts +29 -0
  290. package/core/interfaces/types.d.ts.map +1 -0
  291. package/core/interfaces/validation-change.d.ts +4 -0
  292. package/core/interfaces/validation-change.d.ts.map +1 -0
  293. package/core/interfaces.d.ts +4 -0
  294. package/core/interfaces.d.ts.map +1 -0
  295. package/core/interfaces.js +1 -0
  296. package/core/mixins/constructor.d.ts +8 -0
  297. package/core/mixins/constructor.d.ts.map +1 -0
  298. package/core/mixins/disabled-mixin.d.ts +14 -0
  299. package/core/mixins/disabled-mixin.d.ts.map +1 -0
  300. package/core/mixins/form-associated-checkbox-mixin.d.ts +26 -0
  301. package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -0
  302. package/core/mixins/form-associated-mixin.d.ts +39 -0
  303. package/core/mixins/form-associated-mixin.d.ts.map +1 -0
  304. package/core/mixins/hydration-mixin.d.ts +30 -0
  305. package/core/mixins/hydration-mixin.d.ts.map +1 -0
  306. package/core/mixins/named-slot-list-mixin.d.ts +31 -0
  307. package/core/mixins/named-slot-list-mixin.d.ts.map +1 -0
  308. package/core/mixins/negative-mixin.d.ts +11 -0
  309. package/core/mixins/negative-mixin.d.ts.map +1 -0
  310. package/core/mixins/required-mixin.d.ts +14 -0
  311. package/core/mixins/required-mixin.d.ts.map +1 -0
  312. package/core/mixins/update-scheduler-mixin.d.ts +14 -0
  313. package/core/mixins/update-scheduler-mixin.d.ts.map +1 -0
  314. package/core/mixins.d.ts +10 -0
  315. package/core/mixins.d.ts.map +1 -0
  316. package/core/mixins.js +425 -0
  317. package/core/observers/intersection-observer.d.ts +14 -0
  318. package/core/observers/intersection-observer.d.ts.map +1 -0
  319. package/core/observers/mutation-observer.d.ts +7 -0
  320. package/core/observers/mutation-observer.d.ts.map +1 -0
  321. package/core/observers/resize-observer.d.ts +10 -0
  322. package/core/observers/resize-observer.d.ts.map +1 -0
  323. package/core/observers.d.ts +4 -0
  324. package/core/observers.d.ts.map +1 -0
  325. package/core/observers.js +38 -0
  326. package/core/overlay/overlay-option-panel.d.ts +10 -0
  327. package/core/overlay/overlay-option-panel.d.ts.map +1 -0
  328. package/core/overlay/overlay-trigger-attributes.d.ts +18 -0
  329. package/core/overlay/overlay-trigger-attributes.d.ts.map +1 -0
  330. package/core/overlay/overlay.d.ts +21 -0
  331. package/core/overlay/overlay.d.ts.map +1 -0
  332. package/core/overlay/position.d.ts +41 -0
  333. package/core/overlay/position.d.ts.map +1 -0
  334. package/core/overlay.d.ts +5 -0
  335. package/core/overlay.d.ts.map +1 -0
  336. package/core/overlay.js +126 -0
  337. package/core/styles/_index.scss +24 -0
  338. package/core/styles/a11y.scss +15 -0
  339. package/core/styles/animation.scss +17 -0
  340. package/core/styles/core/functions.scss +6 -0
  341. package/core/styles/core/mediaqueries.scss +105 -0
  342. package/core/styles/core.scss +123 -0
  343. package/core/styles/font-characters-extension.scss +3 -0
  344. package/core/styles/layout.scss +16 -0
  345. package/core/styles/lists.scss +10 -0
  346. package/core/styles/mixins/a11y.scss +41 -0
  347. package/core/styles/mixins/animation.scss +13 -0
  348. package/core/styles/mixins/badge.scss +14 -0
  349. package/core/styles/mixins/buttons.scss +208 -0
  350. package/core/styles/mixins/card.scss +174 -0
  351. package/core/styles/mixins/chip.scss +95 -0
  352. package/core/styles/mixins/dev_and_debug.scss +8 -0
  353. package/core/styles/mixins/font-face.scss +57 -0
  354. package/core/styles/mixins/helpers.scss +67 -0
  355. package/core/styles/mixins/inputs.scss +11 -0
  356. package/core/styles/mixins/layout.scss +37 -0
  357. package/core/styles/mixins/link.scss +99 -0
  358. package/core/styles/mixins/lists.scss +186 -0
  359. package/core/styles/mixins/overlay.scss +154 -0
  360. package/core/styles/mixins/panel.scss +78 -0
  361. package/core/styles/mixins/pearl-chain-bullet.scss +129 -0
  362. package/core/styles/mixins/scrollbar.scss +108 -0
  363. package/core/styles/mixins/shadows.scss +223 -0
  364. package/core/styles/mixins/typo.scss +237 -0
  365. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +517 -0
  366. package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +1104 -0
  367. package/core/styles/normalize.scss +216 -0
  368. package/core/styles/standard-theme.scss +9 -0
  369. package/core/styles/typography.scss +50 -0
  370. package/core/testing/event-spy.d.ts +19 -0
  371. package/core/testing/event-spy.d.ts.map +1 -0
  372. package/core/testing/mocha-extensions.d.ts +11 -0
  373. package/core/testing/mocha-extensions.d.ts.map +1 -0
  374. package/core/testing/private.d.ts +11 -0
  375. package/core/testing/private.d.ts.map +1 -0
  376. package/core/testing/scroll.d.ts +6 -0
  377. package/core/testing/scroll.d.ts.map +1 -0
  378. package/core/testing/test-setup-ssr.d.ts +2 -0
  379. package/core/testing/test-setup-ssr.d.ts.map +1 -0
  380. package/core/testing/test-setup.d.ts +2 -0
  381. package/core/testing/test-setup.d.ts.map +1 -0
  382. package/core/testing/wait-for-condition.d.ts +2 -0
  383. package/core/testing/wait-for-condition.d.ts.map +1 -0
  384. package/core/testing/wait-for-image-ready.d.ts +4 -0
  385. package/core/testing/wait-for-image-ready.d.ts.map +1 -0
  386. package/core/testing/wait-for-render.d.ts +18 -0
  387. package/core/testing/wait-for-render.d.ts.map +1 -0
  388. package/core/testing.d.ts +7 -0
  389. package/core/testing.d.ts.map +1 -0
  390. package/core/testing.js +73 -0
  391. package/core.css +1280 -0
  392. package/custom-elements.json +51489 -0
  393. package/datepicker/common/datepicker-button.d.ts +38 -0
  394. package/datepicker/common/datepicker-button.d.ts.map +1 -0
  395. package/datepicker/common.d.ts +2 -0
  396. package/datepicker/common.d.ts.map +1 -0
  397. package/datepicker/common.js +122 -0
  398. package/datepicker/datepicker/datepicker.d.ts +145 -0
  399. package/datepicker/datepicker/datepicker.d.ts.map +1 -0
  400. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts +21 -0
  401. package/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -0
  402. package/datepicker/datepicker-next-day.d.ts +2 -0
  403. package/datepicker/datepicker-next-day.d.ts.map +1 -0
  404. package/datepicker/datepicker-next-day.js +31 -0
  405. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +21 -0
  406. package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -0
  407. package/datepicker/datepicker-previous-day.d.ts +2 -0
  408. package/datepicker/datepicker-previous-day.d.ts.map +1 -0
  409. package/datepicker/datepicker-previous-day.js +31 -0
  410. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +44 -0
  411. package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -0
  412. package/datepicker/datepicker-toggle.d.ts +2 -0
  413. package/datepicker/datepicker-toggle.d.ts.map +1 -0
  414. package/datepicker/datepicker-toggle.js +147 -0
  415. package/datepicker/datepicker.d.ts +2 -0
  416. package/datepicker/datepicker.d.ts.map +1 -0
  417. package/datepicker/datepicker.js +261 -0
  418. package/datepicker.d.ts +6 -0
  419. package/datepicker.d.ts.map +1 -0
  420. package/datepicker.js +5 -0
  421. package/development/accordion/accordion.d.ts +41 -0
  422. package/development/accordion/accordion.d.ts.map +1 -0
  423. package/development/accordion.d.ts +2 -0
  424. package/development/accordion.d.ts.map +1 -0
  425. package/development/accordion.js +134 -0
  426. package/development/action-group/action-group.d.ts +45 -0
  427. package/development/action-group/action-group.d.ts.map +1 -0
  428. package/development/action-group.d.ts +2 -0
  429. package/development/action-group.d.ts.map +1 -0
  430. package/development/action-group.js +342 -0
  431. package/development/alert/alert/alert.d.ts +76 -0
  432. package/development/alert/alert/alert.d.ts.map +1 -0
  433. package/development/alert/alert-group/alert-group.d.ts +48 -0
  434. package/development/alert/alert-group/alert-group.d.ts.map +1 -0
  435. package/development/alert/alert-group.d.ts +2 -0
  436. package/development/alert/alert-group.d.ts.map +1 -0
  437. package/development/alert/alert-group.js +143 -0
  438. package/development/alert/alert.d.ts +2 -0
  439. package/development/alert/alert.d.ts.map +1 -0
  440. package/development/alert/alert.js +341 -0
  441. package/development/alert.d.ts +3 -0
  442. package/development/alert.d.ts.map +1 -0
  443. package/development/alert.js +3 -0
  444. package/development/autocomplete/autocomplete.d.ts +108 -0
  445. package/development/autocomplete/autocomplete.d.ts.map +1 -0
  446. package/development/autocomplete.d.ts +2 -0
  447. package/development/autocomplete.d.ts.map +1 -0
  448. package/development/autocomplete.js +719 -0
  449. package/development/breadcrumb/breadcrumb/breadcrumb.d.ts +23 -0
  450. package/development/breadcrumb/breadcrumb/breadcrumb.d.ts.map +1 -0
  451. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts +50 -0
  452. package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -0
  453. package/development/breadcrumb/breadcrumb-group.d.ts +2 -0
  454. package/development/breadcrumb/breadcrumb-group.d.ts.map +1 -0
  455. package/development/breadcrumb/breadcrumb-group.js +298 -0
  456. package/development/breadcrumb/breadcrumb.d.ts +2 -0
  457. package/development/breadcrumb/breadcrumb.d.ts.map +1 -0
  458. package/development/breadcrumb/breadcrumb.js +128 -0
  459. package/development/breadcrumb.d.ts +3 -0
  460. package/development/breadcrumb.d.ts.map +1 -0
  461. package/development/breadcrumb.js +3 -0
  462. package/development/button/button/button.d.ts +20 -0
  463. package/development/button/button/button.d.ts.map +1 -0
  464. package/development/button/button-link/button-link.d.ts +20 -0
  465. package/development/button/button-link/button-link.d.ts.map +1 -0
  466. package/development/button/button-link.d.ts +2 -0
  467. package/development/button/button-link.d.ts.map +1 -0
  468. package/development/button/button-link.js +26 -0
  469. package/development/button/button-static/button-static.d.ts +20 -0
  470. package/development/button/button-static/button-static.d.ts.map +1 -0
  471. package/development/button/button-static.d.ts +2 -0
  472. package/development/button/button-static.d.ts.map +1 -0
  473. package/development/button/button-static.js +26 -0
  474. package/development/button/button.d.ts +2 -0
  475. package/development/button/button.d.ts.map +1 -0
  476. package/development/button/button.js +26 -0
  477. package/development/button/common/button-common.d.ts +14 -0
  478. package/development/button/common/button-common.d.ts.map +1 -0
  479. package/development/button/common.d.ts +2 -0
  480. package/development/button/common.d.ts.map +1 -0
  481. package/development/button/common.js +379 -0
  482. package/development/button/mini-button/mini-button.d.ts +22 -0
  483. package/development/button/mini-button/mini-button.d.ts.map +1 -0
  484. package/development/button/mini-button.d.ts +2 -0
  485. package/development/button/mini-button.d.ts.map +1 -0
  486. package/development/button/mini-button.js +193 -0
  487. package/development/button/secondary-button/secondary-button.d.ts +20 -0
  488. package/development/button/secondary-button/secondary-button.d.ts.map +1 -0
  489. package/development/button/secondary-button-link/secondary-button-link.d.ts +20 -0
  490. package/development/button/secondary-button-link/secondary-button-link.d.ts.map +1 -0
  491. package/development/button/secondary-button-link.d.ts +2 -0
  492. package/development/button/secondary-button-link.d.ts.map +1 -0
  493. package/development/button/secondary-button-link.js +26 -0
  494. package/development/button/secondary-button-static/secondary-button-static.d.ts +20 -0
  495. package/development/button/secondary-button-static/secondary-button-static.d.ts.map +1 -0
  496. package/development/button/secondary-button-static.d.ts +2 -0
  497. package/development/button/secondary-button-static.d.ts.map +1 -0
  498. package/development/button/secondary-button-static.js +26 -0
  499. package/development/button/secondary-button.d.ts +2 -0
  500. package/development/button/secondary-button.d.ts.map +1 -0
  501. package/development/button/secondary-button.js +26 -0
  502. package/development/button/tertiary-button/tertiary-button.d.ts +20 -0
  503. package/development/button/tertiary-button/tertiary-button.d.ts.map +1 -0
  504. package/development/button/tertiary-button-link/tertiary-button-link.d.ts +20 -0
  505. package/development/button/tertiary-button-link/tertiary-button-link.d.ts.map +1 -0
  506. package/development/button/tertiary-button-link.d.ts +2 -0
  507. package/development/button/tertiary-button-link.d.ts.map +1 -0
  508. package/development/button/tertiary-button-link.js +26 -0
  509. package/development/button/tertiary-button-static/tertiary-button-static.d.ts +20 -0
  510. package/development/button/tertiary-button-static/tertiary-button-static.d.ts.map +1 -0
  511. package/development/button/tertiary-button-static.d.ts +2 -0
  512. package/development/button/tertiary-button-static.d.ts.map +1 -0
  513. package/development/button/tertiary-button-static.js +26 -0
  514. package/development/button/tertiary-button.d.ts +2 -0
  515. package/development/button/tertiary-button.d.ts.map +1 -0
  516. package/development/button/tertiary-button.js +26 -0
  517. package/development/button/transparent-button/transparent-button.d.ts +20 -0
  518. package/development/button/transparent-button/transparent-button.d.ts.map +1 -0
  519. package/development/button/transparent-button-link/transparent-button-link.d.ts +20 -0
  520. package/development/button/transparent-button-link/transparent-button-link.d.ts.map +1 -0
  521. package/development/button/transparent-button-link.d.ts +2 -0
  522. package/development/button/transparent-button-link.d.ts.map +1 -0
  523. package/development/button/transparent-button-link.js +26 -0
  524. package/development/button/transparent-button-static/transparent-button-static.d.ts +20 -0
  525. package/development/button/transparent-button-static/transparent-button-static.d.ts.map +1 -0
  526. package/development/button/transparent-button-static.d.ts +2 -0
  527. package/development/button/transparent-button-static.d.ts.map +1 -0
  528. package/development/button/transparent-button-static.js +26 -0
  529. package/development/button/transparent-button.d.ts +2 -0
  530. package/development/button/transparent-button.d.ts.map +1 -0
  531. package/development/button/transparent-button.js +26 -0
  532. package/development/button.d.ts +15 -0
  533. package/development/button.d.ts.map +1 -0
  534. package/development/button.js +15 -0
  535. package/development/calendar/calendar.d.ts +216 -0
  536. package/development/calendar/calendar.d.ts.map +1 -0
  537. package/development/calendar.d.ts +2 -0
  538. package/development/calendar.d.ts.map +1 -0
  539. package/development/calendar.js +1318 -0
  540. package/development/card/card/card.d.ts +29 -0
  541. package/development/card/card/card.d.ts.map +1 -0
  542. package/development/card/card-badge/card-badge.d.ts +23 -0
  543. package/development/card/card-badge/card-badge.d.ts.map +1 -0
  544. package/development/card/card-badge.d.ts +2 -0
  545. package/development/card/card-badge.d.ts.map +1 -0
  546. package/development/card/card-badge.js +165 -0
  547. package/development/card/card-button/card-button.d.ts +19 -0
  548. package/development/card/card-button/card-button.d.ts.map +1 -0
  549. package/development/card/card-button.d.ts +2 -0
  550. package/development/card/card-button.d.ts.map +1 -0
  551. package/development/card/card-button.js +26 -0
  552. package/development/card/card-link/card-link.d.ts +19 -0
  553. package/development/card/card-link/card-link.d.ts.map +1 -0
  554. package/development/card/card-link.d.ts +2 -0
  555. package/development/card/card-link.d.ts.map +1 -0
  556. package/development/card/card-link.js +26 -0
  557. package/development/card/card.d.ts +2 -0
  558. package/development/card/card.d.ts.map +1 -0
  559. package/development/card/card.js +266 -0
  560. package/development/card/common/card-action-common.d.ts +9 -0
  561. package/development/card/common/card-action-common.d.ts.map +1 -0
  562. package/development/card/common.d.ts +2 -0
  563. package/development/card/common.d.ts.map +1 -0
  564. package/development/card/common.js +134 -0
  565. package/development/card.d.ts +6 -0
  566. package/development/card.d.ts.map +1 -0
  567. package/development/card.js +6 -0
  568. package/development/checkbox/checkbox/checkbox.d.ts +73 -0
  569. package/development/checkbox/checkbox/checkbox.d.ts.map +1 -0
  570. package/development/checkbox/checkbox-group/checkbox-group.d.ts +37 -0
  571. package/development/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -0
  572. package/development/checkbox/checkbox-group.d.ts +2 -0
  573. package/development/checkbox/checkbox-group.d.ts.map +1 -0
  574. package/development/checkbox/checkbox-group.js +231 -0
  575. package/development/checkbox/checkbox.d.ts +2 -0
  576. package/development/checkbox/checkbox.d.ts.map +1 -0
  577. package/development/checkbox/checkbox.js +325 -0
  578. package/development/checkbox.d.ts +3 -0
  579. package/development/checkbox.d.ts.map +1 -0
  580. package/development/checkbox.js +3 -0
  581. package/development/chip/chip.d.ts +21 -0
  582. package/development/chip/chip.d.ts.map +1 -0
  583. package/development/chip.d.ts +2 -0
  584. package/development/chip.d.ts.map +1 -0
  585. package/development/chip.js +135 -0
  586. package/development/clock/clock.d.ts +62 -0
  587. package/development/clock/clock.d.ts.map +1 -0
  588. package/development/clock.d.ts +2 -0
  589. package/development/clock.d.ts.map +1 -0
  590. package/development/clock.js +377 -0
  591. package/development/container/container/container.d.ts +25 -0
  592. package/development/container/container/container.d.ts.map +1 -0
  593. package/development/container/container.d.ts +2 -0
  594. package/development/container/container.d.ts.map +1 -0
  595. package/development/container/container.js +114 -0
  596. package/development/container/sticky-bar/sticky-bar.d.ts +31 -0
  597. package/development/container/sticky-bar/sticky-bar.d.ts.map +1 -0
  598. package/development/container/sticky-bar.d.ts +2 -0
  599. package/development/container/sticky-bar.d.ts.map +1 -0
  600. package/development/container/sticky-bar.js +220 -0
  601. package/development/container.d.ts +3 -0
  602. package/development/container.d.ts.map +1 -0
  603. package/development/container.js +3 -0
  604. package/development/core/a11y/arrow-navigation.d.ts +32 -0
  605. package/development/core/a11y/arrow-navigation.d.ts.map +1 -0
  606. package/development/core/a11y/fake-event-detection.d.ts +5 -0
  607. package/development/core/a11y/fake-event-detection.d.ts.map +1 -0
  608. package/development/core/a11y/focus-visible-within-controller.d.ts +11 -0
  609. package/development/core/a11y/focus-visible-within-controller.d.ts.map +1 -0
  610. package/development/core/a11y/focus.d.ts +22 -0
  611. package/development/core/a11y/focus.d.ts.map +1 -0
  612. package/development/core/a11y/input-modality-detector.d.ts +58 -0
  613. package/development/core/a11y/input-modality-detector.d.ts.map +1 -0
  614. package/development/core/a11y/interactivity-checker.d.ts +17 -0
  615. package/development/core/a11y/interactivity-checker.d.ts.map +1 -0
  616. package/development/core/a11y.d.ts +7 -0
  617. package/development/core/a11y.d.ts.map +1 -0
  618. package/development/core/a11y.js +295 -0
  619. package/development/core/base-elements/action-base-element.d.ts +11 -0
  620. package/development/core/base-elements/action-base-element.d.ts.map +1 -0
  621. package/development/core/base-elements/button-base-element.d.ts +46 -0
  622. package/development/core/base-elements/button-base-element.d.ts.map +1 -0
  623. package/development/core/base-elements/link-base-element.d.ts +31 -0
  624. package/development/core/base-elements/link-base-element.d.ts.map +1 -0
  625. package/development/core/base-elements/open-close-base-element.d.ts +37 -0
  626. package/development/core/base-elements/open-close-base-element.d.ts.map +1 -0
  627. package/development/core/base-elements.d.ts +5 -0
  628. package/development/core/base-elements.d.ts.map +1 -0
  629. package/development/core/base-elements.js +289 -0
  630. package/development/core/config/config.d.ts +22 -0
  631. package/development/core/config/config.d.ts.map +1 -0
  632. package/development/core/config.d.ts +2 -0
  633. package/development/core/config.d.ts.map +1 -0
  634. package/development/core/config.js +15 -0
  635. package/development/core/controllers/connected-abort-controller.d.ts +11 -0
  636. package/development/core/controllers/connected-abort-controller.d.ts.map +1 -0
  637. package/development/core/controllers/language-controller.d.ts +33 -0
  638. package/development/core/controllers/language-controller.d.ts.map +1 -0
  639. package/development/core/controllers/slot-state-controller.d.ts +32 -0
  640. package/development/core/controllers/slot-state-controller.d.ts.map +1 -0
  641. package/development/core/controllers.d.ts +4 -0
  642. package/development/core/controllers.d.ts.map +1 -0
  643. package/development/core/controllers.js +134 -0
  644. package/development/core/datetime/date-adapter.d.ts +162 -0
  645. package/development/core/datetime/date-adapter.d.ts.map +1 -0
  646. package/development/core/datetime/native-date-adapter.d.ts +74 -0
  647. package/development/core/datetime/native-date-adapter.d.ts.map +1 -0
  648. package/development/core/datetime.d.ts +3 -0
  649. package/development/core/datetime.d.ts.map +1 -0
  650. package/development/core/datetime.js +291 -0
  651. package/development/core/decorators/host-attributes.d.ts +22 -0
  652. package/development/core/decorators/host-attributes.d.ts.map +1 -0
  653. package/development/core/decorators.d.ts +2 -0
  654. package/development/core/decorators.d.ts.map +1 -0
  655. package/development/core/decorators.js +30 -0
  656. package/development/core/dom/breakpoint.d.ts +14 -0
  657. package/development/core/dom/breakpoint.d.ts.map +1 -0
  658. package/development/core/dom/find-referenced-element.d.ts +7 -0
  659. package/development/core/dom/find-referenced-element.d.ts.map +1 -0
  660. package/development/core/dom/get-document-writing-mode.d.ts +2 -0
  661. package/development/core/dom/get-document-writing-mode.d.ts.map +1 -0
  662. package/development/core/dom/host-context.d.ts +11 -0
  663. package/development/core/dom/host-context.d.ts.map +1 -0
  664. package/development/core/dom/input-element.d.ts +10 -0
  665. package/development/core/dom/input-element.d.ts.map +1 -0
  666. package/development/core/dom/platform.d.ts +24 -0
  667. package/development/core/dom/platform.d.ts.map +1 -0
  668. package/development/core/dom/scroll.d.ts +13 -0
  669. package/development/core/dom/scroll.d.ts.map +1 -0
  670. package/development/core/dom/set-or-remove-attribute.d.ts +8 -0
  671. package/development/core/dom/set-or-remove-attribute.d.ts.map +1 -0
  672. package/development/core/dom/ssr.d.ts +12 -0
  673. package/development/core/dom/ssr.d.ts.map +1 -0
  674. package/development/core/dom.d.ts +10 -0
  675. package/development/core/dom.d.ts.map +1 -0
  676. package/development/core/dom.js +146 -0
  677. package/development/core/eventing/composed-path-has-attribute.d.ts +10 -0
  678. package/development/core/eventing/composed-path-has-attribute.d.ts.map +1 -0
  679. package/development/core/eventing/event-emitter.d.ts +23 -0
  680. package/development/core/eventing/event-emitter.d.ts.map +1 -0
  681. package/development/core/eventing/event-target.d.ts +3 -0
  682. package/development/core/eventing/event-target.d.ts.map +1 -0
  683. package/development/core/eventing/form-element-handlers.d.ts +14 -0
  684. package/development/core/eventing/form-element-handlers.d.ts.map +1 -0
  685. package/development/core/eventing/forward-event.d.ts +6 -0
  686. package/development/core/eventing/forward-event.d.ts.map +1 -0
  687. package/development/core/eventing/handler-repository.d.ts +28 -0
  688. package/development/core/eventing/handler-repository.d.ts.map +1 -0
  689. package/development/core/eventing/is-event-prevented.d.ts +3 -0
  690. package/development/core/eventing/is-event-prevented.d.ts.map +1 -0
  691. package/development/core/eventing/throttle.d.ts +2 -0
  692. package/development/core/eventing/throttle.d.ts.map +1 -0
  693. package/development/core/eventing.d.ts +9 -0
  694. package/development/core/eventing.d.ts.map +1 -0
  695. package/development/core/eventing.js +98 -0
  696. package/development/core/i18n/i18n.d.ts +74 -0
  697. package/development/core/i18n/i18n.d.ts.map +1 -0
  698. package/development/core/i18n.d.ts +2 -0
  699. package/development/core/i18n.d.ts.map +1 -0
  700. package/development/core/i18n.js +708 -0
  701. package/development/core/images.d.ts +3 -0
  702. package/development/core/images.d.ts.map +1 -0
  703. package/development/core/interfaces/overlay-close-details.d.ts +5 -0
  704. package/development/core/interfaces/overlay-close-details.d.ts.map +1 -0
  705. package/development/core/interfaces/types.d.ts +29 -0
  706. package/development/core/interfaces/types.d.ts.map +1 -0
  707. package/development/core/interfaces/validation-change.d.ts +4 -0
  708. package/development/core/interfaces/validation-change.d.ts.map +1 -0
  709. package/development/core/interfaces.d.ts +4 -0
  710. package/development/core/interfaces.d.ts.map +1 -0
  711. package/development/core/interfaces.js +2 -0
  712. package/development/core/mixins/constructor.d.ts +8 -0
  713. package/development/core/mixins/constructor.d.ts.map +1 -0
  714. package/development/core/mixins/disabled-mixin.d.ts +14 -0
  715. package/development/core/mixins/disabled-mixin.d.ts.map +1 -0
  716. package/development/core/mixins/form-associated-checkbox-mixin.d.ts +26 -0
  717. package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -0
  718. package/development/core/mixins/form-associated-mixin.d.ts +39 -0
  719. package/development/core/mixins/form-associated-mixin.d.ts.map +1 -0
  720. package/development/core/mixins/hydration-mixin.d.ts +30 -0
  721. package/development/core/mixins/hydration-mixin.d.ts.map +1 -0
  722. package/development/core/mixins/named-slot-list-mixin.d.ts +31 -0
  723. package/development/core/mixins/named-slot-list-mixin.d.ts.map +1 -0
  724. package/development/core/mixins/negative-mixin.d.ts +11 -0
  725. package/development/core/mixins/negative-mixin.d.ts.map +1 -0
  726. package/development/core/mixins/required-mixin.d.ts +14 -0
  727. package/development/core/mixins/required-mixin.d.ts.map +1 -0
  728. package/development/core/mixins/update-scheduler-mixin.d.ts +14 -0
  729. package/development/core/mixins/update-scheduler-mixin.d.ts.map +1 -0
  730. package/development/core/mixins.d.ts +10 -0
  731. package/development/core/mixins.d.ts.map +1 -0
  732. package/development/core/mixins.js +567 -0
  733. package/development/core/observers/intersection-observer.d.ts +14 -0
  734. package/development/core/observers/intersection-observer.d.ts.map +1 -0
  735. package/development/core/observers/mutation-observer.d.ts +7 -0
  736. package/development/core/observers/mutation-observer.d.ts.map +1 -0
  737. package/development/core/observers/resize-observer.d.ts +10 -0
  738. package/development/core/observers/resize-observer.d.ts.map +1 -0
  739. package/development/core/observers.d.ts +4 -0
  740. package/development/core/observers.d.ts.map +1 -0
  741. package/development/core/observers.js +39 -0
  742. package/development/core/overlay/overlay-option-panel.d.ts +10 -0
  743. package/development/core/overlay/overlay-option-panel.d.ts.map +1 -0
  744. package/development/core/overlay/overlay-trigger-attributes.d.ts +18 -0
  745. package/development/core/overlay/overlay-trigger-attributes.d.ts.map +1 -0
  746. package/development/core/overlay/overlay.d.ts +21 -0
  747. package/development/core/overlay/overlay.d.ts.map +1 -0
  748. package/development/core/overlay/position.d.ts +41 -0
  749. package/development/core/overlay/position.d.ts.map +1 -0
  750. package/development/core/overlay.d.ts +5 -0
  751. package/development/core/overlay.d.ts.map +1 -0
  752. package/development/core/overlay.js +240 -0
  753. package/development/core/testing/event-spy.d.ts +19 -0
  754. package/development/core/testing/event-spy.d.ts.map +1 -0
  755. package/development/core/testing/mocha-extensions.d.ts +11 -0
  756. package/development/core/testing/mocha-extensions.d.ts.map +1 -0
  757. package/development/core/testing/private.d.ts +11 -0
  758. package/development/core/testing/private.d.ts.map +1 -0
  759. package/development/core/testing/scroll.d.ts +6 -0
  760. package/development/core/testing/scroll.d.ts.map +1 -0
  761. package/development/core/testing/test-setup-ssr.d.ts +2 -0
  762. package/development/core/testing/test-setup-ssr.d.ts.map +1 -0
  763. package/development/core/testing/test-setup.d.ts +2 -0
  764. package/development/core/testing/test-setup.d.ts.map +1 -0
  765. package/development/core/testing/wait-for-condition.d.ts +2 -0
  766. package/development/core/testing/wait-for-condition.d.ts.map +1 -0
  767. package/development/core/testing/wait-for-image-ready.d.ts +4 -0
  768. package/development/core/testing/wait-for-image-ready.d.ts.map +1 -0
  769. package/development/core/testing/wait-for-render.d.ts +18 -0
  770. package/development/core/testing/wait-for-render.d.ts.map +1 -0
  771. package/development/core/testing.d.ts +7 -0
  772. package/development/core/testing.d.ts.map +1 -0
  773. package/development/core/testing.js +100 -0
  774. package/development/datepicker/common/datepicker-button.d.ts +38 -0
  775. package/development/datepicker/common/datepicker-button.d.ts.map +1 -0
  776. package/development/datepicker/common.d.ts +2 -0
  777. package/development/datepicker/common.d.ts.map +1 -0
  778. package/development/datepicker/common.js +172 -0
  779. package/development/datepicker/datepicker/datepicker.d.ts +145 -0
  780. package/development/datepicker/datepicker/datepicker.d.ts.map +1 -0
  781. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts +21 -0
  782. package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -0
  783. package/development/datepicker/datepicker-next-day.d.ts +2 -0
  784. package/development/datepicker/datepicker-next-day.d.ts.map +1 -0
  785. package/development/datepicker/datepicker-next-day.js +206 -0
  786. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts +21 -0
  787. package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -0
  788. package/development/datepicker/datepicker-previous-day.d.ts +2 -0
  789. package/development/datepicker/datepicker-previous-day.d.ts.map +1 -0
  790. package/development/datepicker/datepicker-previous-day.js +206 -0
  791. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +44 -0
  792. package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -0
  793. package/development/datepicker/datepicker-toggle.d.ts +2 -0
  794. package/development/datepicker/datepicker-toggle.d.ts.map +1 -0
  795. package/development/datepicker/datepicker-toggle.js +233 -0
  796. package/development/datepicker/datepicker.d.ts +2 -0
  797. package/development/datepicker/datepicker.d.ts.map +1 -0
  798. package/development/datepicker/datepicker.js +380 -0
  799. package/development/datepicker.d.ts +6 -0
  800. package/development/datepicker.d.ts.map +1 -0
  801. package/development/datepicker.js +6 -0
  802. package/development/dialog/dialog/dialog.d.ts +54 -0
  803. package/development/dialog/dialog/dialog.d.ts.map +1 -0
  804. package/development/dialog/dialog-actions/dialog-actions.d.ts +18 -0
  805. package/development/dialog/dialog-actions/dialog-actions.d.ts.map +1 -0
  806. package/development/dialog/dialog-actions.d.ts +2 -0
  807. package/development/dialog/dialog-actions.d.ts.map +1 -0
  808. package/development/dialog/dialog-actions.js +65 -0
  809. package/development/dialog/dialog-content/dialog-content.d.ts +17 -0
  810. package/development/dialog/dialog-content/dialog-content.d.ts.map +1 -0
  811. package/development/dialog/dialog-content.d.ts +2 -0
  812. package/development/dialog/dialog-content.d.ts.map +1 -0
  813. package/development/dialog/dialog-content.js +90 -0
  814. package/development/dialog/dialog-title/dialog-title.d.ts +43 -0
  815. package/development/dialog/dialog-title/dialog-title.d.ts.map +1 -0
  816. package/development/dialog/dialog-title.d.ts +2 -0
  817. package/development/dialog/dialog-title.d.ts.map +1 -0
  818. package/development/dialog/dialog-title.js +167 -0
  819. package/development/dialog/dialog.d.ts +2 -0
  820. package/development/dialog/dialog.d.ts.map +1 -0
  821. package/development/dialog/dialog.js +436 -0
  822. package/development/dialog.d.ts +5 -0
  823. package/development/dialog.d.ts.map +1 -0
  824. package/development/dialog.js +5 -0
  825. package/development/divider/divider.d.ts +21 -0
  826. package/development/divider/divider.d.ts.map +1 -0
  827. package/development/divider.d.ts +2 -0
  828. package/development/divider.d.ts.map +1 -0
  829. package/development/divider.js +84 -0
  830. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +75 -0
  831. package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -0
  832. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +17 -0
  833. package/development/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts.map +1 -0
  834. package/development/expansion-panel/expansion-panel-content.d.ts +2 -0
  835. package/development/expansion-panel/expansion-panel-content.d.ts.map +1 -0
  836. package/development/expansion-panel/expansion-panel-content.js +83 -0
  837. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +38 -0
  838. package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -0
  839. package/development/expansion-panel/expansion-panel-header.d.ts +2 -0
  840. package/development/expansion-panel/expansion-panel-header.d.ts.map +1 -0
  841. package/development/expansion-panel/expansion-panel-header.js +193 -0
  842. package/development/expansion-panel/expansion-panel.d.ts +2 -0
  843. package/development/expansion-panel/expansion-panel.d.ts.map +1 -0
  844. package/development/expansion-panel/expansion-panel.js +395 -0
  845. package/development/expansion-panel.d.ts +4 -0
  846. package/development/expansion-panel.d.ts.map +1 -0
  847. package/development/expansion-panel.js +4 -0
  848. package/development/file-selector/file-selector.d.ts +74 -0
  849. package/development/file-selector/file-selector.d.ts.map +1 -0
  850. package/development/file-selector.d.ts +2 -0
  851. package/development/file-selector.d.ts.map +1 -0
  852. package/development/file-selector.js +427 -0
  853. package/development/footer/footer.d.ts +35 -0
  854. package/development/footer/footer.d.ts.map +1 -0
  855. package/development/footer.d.ts +2 -0
  856. package/development/footer.d.ts.map +1 -0
  857. package/development/footer.js +228 -0
  858. package/development/form-error/form-error.d.ts +21 -0
  859. package/development/form-error/form-error.d.ts.map +1 -0
  860. package/development/form-error.d.ts +2 -0
  861. package/development/form-error.d.ts.map +1 -0
  862. package/development/form-error.js +120 -0
  863. package/development/form-field/form-field/form-field.d.ts +101 -0
  864. package/development/form-field/form-field/form-field.d.ts.map +1 -0
  865. package/development/form-field/form-field-clear/form-field-clear.d.ts +24 -0
  866. package/development/form-field/form-field-clear/form-field-clear.d.ts.map +1 -0
  867. package/development/form-field/form-field-clear.d.ts +2 -0
  868. package/development/form-field/form-field-clear.d.ts.map +1 -0
  869. package/development/form-field/form-field-clear.js +222 -0
  870. package/development/form-field/form-field.d.ts +2 -0
  871. package/development/form-field/form-field.d.ts.map +1 -0
  872. package/development/form-field/form-field.js +884 -0
  873. package/development/form-field.d.ts +3 -0
  874. package/development/form-field.d.ts.map +1 -0
  875. package/development/form-field.js +3 -0
  876. package/development/header/common/header-action-common.d.ts +11 -0
  877. package/development/header/common/header-action-common.d.ts.map +1 -0
  878. package/development/header/common.d.ts +2 -0
  879. package/development/header/common.d.ts.map +1 -0
  880. package/development/header/common.js +339 -0
  881. package/development/header/header/header.d.ts +59 -0
  882. package/development/header/header/header.d.ts.map +1 -0
  883. package/development/header/header-button/header-button.d.ts +18 -0
  884. package/development/header/header-button/header-button.d.ts.map +1 -0
  885. package/development/header/header-button.d.ts +2 -0
  886. package/development/header/header-button.d.ts.map +1 -0
  887. package/development/header/header-button.js +24 -0
  888. package/development/header/header-link/header-link.d.ts +18 -0
  889. package/development/header/header-link/header-link.d.ts.map +1 -0
  890. package/development/header/header-link.d.ts +2 -0
  891. package/development/header/header-link.d.ts.map +1 -0
  892. package/development/header/header-link.js +22 -0
  893. package/development/header/header.d.ts +2 -0
  894. package/development/header/header.d.ts.map +1 -0
  895. package/development/header/header.js +332 -0
  896. package/development/header.d.ts +5 -0
  897. package/development/header.d.ts.map +1 -0
  898. package/development/header.js +5 -0
  899. package/development/icon/icon-base.d.ts +28 -0
  900. package/development/icon/icon-base.d.ts.map +1 -0
  901. package/development/icon/icon-name-mixin.d.ts +12 -0
  902. package/development/icon/icon-name-mixin.d.ts.map +1 -0
  903. package/development/icon/icon-request.d.ts +3 -0
  904. package/development/icon/icon-request.d.ts.map +1 -0
  905. package/development/icon/icon-validate.d.ts +12 -0
  906. package/development/icon/icon-validate.d.ts.map +1 -0
  907. package/development/icon/icon.d.ts +24 -0
  908. package/development/icon/icon.d.ts.map +1 -0
  909. package/development/icon.d.ts +6 -0
  910. package/development/icon.d.ts.map +1 -0
  911. package/development/icon.js +304 -0
  912. package/development/image/image.d.ts +245 -0
  913. package/development/image/image.d.ts.map +1 -0
  914. package/development/image.d.ts +2 -0
  915. package/development/image.d.ts.map +1 -0
  916. package/development/image.js +542 -0
  917. package/development/journey-header/journey-header.d.ts +30 -0
  918. package/development/journey-header/journey-header.d.ts.map +1 -0
  919. package/development/journey-header.d.ts +2 -0
  920. package/development/journey-header.d.ts.map +1 -0
  921. package/development/journey-header.js +131 -0
  922. package/development/lead-container/lead-container.d.ts +20 -0
  923. package/development/lead-container/lead-container.d.ts.map +1 -0
  924. package/development/lead-container.d.ts +2 -0
  925. package/development/lead-container.d.ts.map +1 -0
  926. package/development/lead-container.js +167 -0
  927. package/development/link/block-link/block-link.d.ts +18 -0
  928. package/development/link/block-link/block-link.d.ts.map +1 -0
  929. package/development/link/block-link-button/block-link-button.d.ts +18 -0
  930. package/development/link/block-link-button/block-link-button.d.ts.map +1 -0
  931. package/development/link/block-link-button.d.ts +2 -0
  932. package/development/link/block-link-button.d.ts.map +1 -0
  933. package/development/link/block-link-button.js +25 -0
  934. package/development/link/block-link-static/block-link-static.d.ts +18 -0
  935. package/development/link/block-link-static/block-link-static.d.ts.map +1 -0
  936. package/development/link/block-link-static.d.ts +2 -0
  937. package/development/link/block-link-static.d.ts.map +1 -0
  938. package/development/link/block-link-static.js +25 -0
  939. package/development/link/block-link.d.ts +2 -0
  940. package/development/link/block-link.d.ts.map +1 -0
  941. package/development/link/block-link.js +25 -0
  942. package/development/link/common/block-link-common.d.ts +11 -0
  943. package/development/link/common/block-link-common.d.ts.map +1 -0
  944. package/development/link/common/inline-link-common.d.ts +8 -0
  945. package/development/link/common/inline-link-common.d.ts.map +1 -0
  946. package/development/link/common/link-common.d.ts +9 -0
  947. package/development/link/common/link-common.d.ts.map +1 -0
  948. package/development/link/common.d.ts +4 -0
  949. package/development/link/common.d.ts.map +1 -0
  950. package/development/link/common.js +269 -0
  951. package/development/link/link/link.d.ts +17 -0
  952. package/development/link/link/link.d.ts.map +1 -0
  953. package/development/link/link-button/link-button.d.ts +17 -0
  954. package/development/link/link-button/link-button.d.ts.map +1 -0
  955. package/development/link/link-button.d.ts +2 -0
  956. package/development/link/link-button.d.ts.map +1 -0
  957. package/development/link/link-button.js +25 -0
  958. package/development/link/link-static/link-static.d.ts +17 -0
  959. package/development/link/link-static/link-static.d.ts.map +1 -0
  960. package/development/link/link-static.d.ts +2 -0
  961. package/development/link/link-static.d.ts.map +1 -0
  962. package/development/link/link-static.js +25 -0
  963. package/development/link/link.d.ts +2 -0
  964. package/development/link/link.d.ts.map +1 -0
  965. package/development/link/link.js +25 -0
  966. package/development/link-list/link-list.d.ts +40 -0
  967. package/development/link-list/link-list.d.ts.map +1 -0
  968. package/development/link-list.d.ts +2 -0
  969. package/development/link-list.d.ts.map +1 -0
  970. package/development/link-list.js +254 -0
  971. package/development/link.d.ts +8 -0
  972. package/development/link.d.ts.map +1 -0
  973. package/development/link.js +8 -0
  974. package/development/loading-indicator/loading-indicator.d.ts +21 -0
  975. package/development/loading-indicator/loading-indicator.d.ts.map +1 -0
  976. package/development/loading-indicator.d.ts +2 -0
  977. package/development/loading-indicator.d.ts.map +1 -0
  978. package/development/loading-indicator.js +338 -0
  979. package/development/logo/logo.d.ts +24 -0
  980. package/development/logo/logo.d.ts.map +1 -0
  981. package/development/logo.d.ts +2 -0
  982. package/development/logo.d.ts.map +1 -0
  983. package/development/logo.js +141 -0
  984. package/development/map-container/map-container.d.ts +43 -0
  985. package/development/map-container/map-container.d.ts.map +1 -0
  986. package/development/map-container.d.ts +2 -0
  987. package/development/map-container.d.ts.map +1 -0
  988. package/development/map-container.js +267 -0
  989. package/development/menu/common/menu-action-common.d.ts +11 -0
  990. package/development/menu/common/menu-action-common.d.ts.map +1 -0
  991. package/development/menu/common.d.ts +2 -0
  992. package/development/menu/common.d.ts.map +1 -0
  993. package/development/menu/common.js +173 -0
  994. package/development/menu/menu/menu.d.ts +76 -0
  995. package/development/menu/menu/menu.d.ts.map +1 -0
  996. package/development/menu/menu-button/menu-button.d.ts +20 -0
  997. package/development/menu/menu-button/menu-button.d.ts.map +1 -0
  998. package/development/menu/menu-button.d.ts +2 -0
  999. package/development/menu/menu-button.d.ts.map +1 -0
  1000. package/development/menu/menu-button.js +25 -0
  1001. package/development/menu/menu-link/menu-link.d.ts +20 -0
  1002. package/development/menu/menu-link/menu-link.d.ts.map +1 -0
  1003. package/development/menu/menu-link.d.ts +2 -0
  1004. package/development/menu/menu-link.d.ts.map +1 -0
  1005. package/development/menu/menu-link.js +22 -0
  1006. package/development/menu/menu.d.ts +2 -0
  1007. package/development/menu/menu.d.ts.map +1 -0
  1008. package/development/menu/menu.js +537 -0
  1009. package/development/menu.d.ts +5 -0
  1010. package/development/menu.d.ts.map +1 -0
  1011. package/development/menu.js +5 -0
  1012. package/development/message/message.d.ts +26 -0
  1013. package/development/message/message.d.ts.map +1 -0
  1014. package/development/message.d.ts +2 -0
  1015. package/development/message.d.ts.map +1 -0
  1016. package/development/message.js +117 -0
  1017. package/development/navigation/common/navigation-action-common.d.ts +14 -0
  1018. package/development/navigation/common/navigation-action-common.d.ts.map +1 -0
  1019. package/development/navigation/common.d.ts +2 -0
  1020. package/development/navigation/common.d.ts.map +1 -0
  1021. package/development/navigation/common.js +178 -0
  1022. package/development/navigation/navigation/navigation.d.ts +82 -0
  1023. package/development/navigation/navigation/navigation.d.ts.map +1 -0
  1024. package/development/navigation/navigation-button/navigation-button.d.ts +17 -0
  1025. package/development/navigation/navigation-button/navigation-button.d.ts.map +1 -0
  1026. package/development/navigation/navigation-button.d.ts +2 -0
  1027. package/development/navigation/navigation-button.d.ts.map +1 -0
  1028. package/development/navigation/navigation-button.js +24 -0
  1029. package/development/navigation/navigation-link/navigation-link.d.ts +17 -0
  1030. package/development/navigation/navigation-link/navigation-link.d.ts.map +1 -0
  1031. package/development/navigation/navigation-link.d.ts +2 -0
  1032. package/development/navigation/navigation-link.d.ts.map +1 -0
  1033. package/development/navigation/navigation-link.js +24 -0
  1034. package/development/navigation/navigation-list/navigation-list.d.ts +30 -0
  1035. package/development/navigation/navigation-list/navigation-list.d.ts.map +1 -0
  1036. package/development/navigation/navigation-list.d.ts +2 -0
  1037. package/development/navigation/navigation-list.d.ts.map +1 -0
  1038. package/development/navigation/navigation-list.js +103 -0
  1039. package/development/navigation/navigation-marker/navigation-marker.d.ts +38 -0
  1040. package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -0
  1041. package/development/navigation/navigation-marker.d.ts +2 -0
  1042. package/development/navigation/navigation-marker.d.ts.map +1 -0
  1043. package/development/navigation/navigation-marker.js +219 -0
  1044. package/development/navigation/navigation-section/navigation-section.d.ts +76 -0
  1045. package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -0
  1046. package/development/navigation/navigation-section.d.ts +2 -0
  1047. package/development/navigation/navigation-section.d.ts.map +1 -0
  1048. package/development/navigation/navigation-section.js +599 -0
  1049. package/development/navigation/navigation.d.ts +2 -0
  1050. package/development/navigation/navigation.d.ts.map +1 -0
  1051. package/development/navigation/navigation.js +597 -0
  1052. package/development/navigation.d.ts +8 -0
  1053. package/development/navigation.d.ts.map +1 -0
  1054. package/development/navigation.js +8 -0
  1055. package/development/notification/notification.d.ts +82 -0
  1056. package/development/notification/notification.d.ts.map +1 -0
  1057. package/development/notification.d.ts +2 -0
  1058. package/development/notification.d.ts.map +1 -0
  1059. package/development/notification.js +471 -0
  1060. package/development/option/optgroup/optgroup.d.ts +33 -0
  1061. package/development/option/optgroup/optgroup.d.ts.map +1 -0
  1062. package/development/option/optgroup.d.ts +2 -0
  1063. package/development/option/optgroup.d.ts.map +1 -0
  1064. package/development/option/optgroup.js +229 -0
  1065. package/development/option/option/option.d.ts +91 -0
  1066. package/development/option/option/option.d.ts.map +1 -0
  1067. package/development/option/option.d.ts +2 -0
  1068. package/development/option/option.d.ts.map +1 -0
  1069. package/development/option/option.js +443 -0
  1070. package/development/option.d.ts +3 -0
  1071. package/development/option.d.ts.map +1 -0
  1072. package/development/option.js +3 -0
  1073. package/development/overlay/overlay-base-element.d.ts +43 -0
  1074. package/development/overlay/overlay-base-element.d.ts.map +1 -0
  1075. package/development/overlay/overlay.d.ts +52 -0
  1076. package/development/overlay/overlay.d.ts.map +1 -0
  1077. package/development/overlay.d.ts +3 -0
  1078. package/development/overlay.d.ts.map +1 -0
  1079. package/development/overlay.js +482 -0
  1080. package/development/popover/popover/popover.d.ts +85 -0
  1081. package/development/popover/popover/popover.d.ts.map +1 -0
  1082. package/development/popover/popover-trigger/popover-trigger.d.ts +21 -0
  1083. package/development/popover/popover-trigger/popover-trigger.d.ts.map +1 -0
  1084. package/development/popover/popover-trigger.d.ts +2 -0
  1085. package/development/popover/popover-trigger.d.ts.map +1 -0
  1086. package/development/popover/popover-trigger.js +265 -0
  1087. package/development/popover/popover.d.ts +2 -0
  1088. package/development/popover/popover.d.ts.map +1 -0
  1089. package/development/popover/popover.js +553 -0
  1090. package/development/popover.d.ts +3 -0
  1091. package/development/popover.d.ts.map +1 -0
  1092. package/development/popover.js +3 -0
  1093. package/development/radio-button/radio-button/radio-button.d.ts +102 -0
  1094. package/development/radio-button/radio-button/radio-button.d.ts.map +1 -0
  1095. package/development/radio-button/radio-button-group/radio-button-group.d.ts +91 -0
  1096. package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -0
  1097. package/development/radio-button/radio-button-group.d.ts +2 -0
  1098. package/development/radio-button/radio-button-group.d.ts.map +1 -0
  1099. package/development/radio-button/radio-button-group.js +337 -0
  1100. package/development/radio-button/radio-button.d.ts +2 -0
  1101. package/development/radio-button/radio-button.d.ts.map +1 -0
  1102. package/development/radio-button/radio-button.js +397 -0
  1103. package/development/radio-button.d.ts +3 -0
  1104. package/development/radio-button.d.ts.map +1 -0
  1105. package/development/radio-button.js +3 -0
  1106. package/development/screen-reader-only/screen-reader-only.d.ts +17 -0
  1107. package/development/screen-reader-only/screen-reader-only.d.ts.map +1 -0
  1108. package/development/screen-reader-only.d.ts +2 -0
  1109. package/development/screen-reader-only.d.ts.map +1 -0
  1110. package/development/screen-reader-only.js +50 -0
  1111. package/development/select/select.d.ts +140 -0
  1112. package/development/select/select.d.ts.map +1 -0
  1113. package/development/select.d.ts +2 -0
  1114. package/development/select.d.ts.map +1 -0
  1115. package/development/select.js +891 -0
  1116. package/development/selection-panel/selection-panel.d.ts +63 -0
  1117. package/development/selection-panel/selection-panel.d.ts.map +1 -0
  1118. package/development/selection-panel.d.ts +2 -0
  1119. package/development/selection-panel.d.ts.map +1 -0
  1120. package/development/selection-panel.js +376 -0
  1121. package/development/signet/signet.d.ts +20 -0
  1122. package/development/signet/signet.d.ts.map +1 -0
  1123. package/development/signet.d.ts +2 -0
  1124. package/development/signet.d.ts.map +1 -0
  1125. package/development/signet.js +115 -0
  1126. package/development/skiplink-list/skiplink-list.d.ts +32 -0
  1127. package/development/skiplink-list/skiplink-list.d.ts.map +1 -0
  1128. package/development/skiplink-list.d.ts +2 -0
  1129. package/development/skiplink-list.d.ts.map +1 -0
  1130. package/development/skiplink-list.js +124 -0
  1131. package/development/slider/slider.d.ts +70 -0
  1132. package/development/slider/slider.d.ts.map +1 -0
  1133. package/development/slider.d.ts +2 -0
  1134. package/development/slider.d.ts.map +1 -0
  1135. package/development/slider.js +351 -0
  1136. package/development/status/status.d.ts +32 -0
  1137. package/development/status/status.d.ts.map +1 -0
  1138. package/development/status.d.ts +2 -0
  1139. package/development/status.d.ts.map +1 -0
  1140. package/development/status.js +155 -0
  1141. package/development/stepper/step/step.d.ts +66 -0
  1142. package/development/stepper/step/step.d.ts.map +1 -0
  1143. package/development/stepper/step-label/step-label.d.ts +47 -0
  1144. package/development/stepper/step-label/step-label.d.ts.map +1 -0
  1145. package/development/stepper/step-label.d.ts +2 -0
  1146. package/development/stepper/step-label.d.ts.map +1 -0
  1147. package/development/stepper/step-label.js +279 -0
  1148. package/development/stepper/step.d.ts +2 -0
  1149. package/development/stepper/step.d.ts.map +1 -0
  1150. package/development/stepper/step.js +232 -0
  1151. package/development/stepper/stepper/stepper.d.ts +59 -0
  1152. package/development/stepper/stepper/stepper.d.ts.map +1 -0
  1153. package/development/stepper/stepper.d.ts +2 -0
  1154. package/development/stepper/stepper.d.ts.map +1 -0
  1155. package/development/stepper/stepper.js +363 -0
  1156. package/development/stepper.d.ts +4 -0
  1157. package/development/stepper.d.ts.map +1 -0
  1158. package/development/stepper.js +4 -0
  1159. package/development/tabs/tab-group/tab-group.d.ts +94 -0
  1160. package/development/tabs/tab-group/tab-group.d.ts.map +1 -0
  1161. package/development/tabs/tab-group.d.ts +2 -0
  1162. package/development/tabs/tab-group.d.ts.map +1 -0
  1163. package/development/tabs/tab-group.js +389 -0
  1164. package/development/tabs/tab-title/tab-title.d.ts +32 -0
  1165. package/development/tabs/tab-title/tab-title.d.ts.map +1 -0
  1166. package/development/tabs/tab-title.d.ts +2 -0
  1167. package/development/tabs/tab-title.d.ts.map +1 -0
  1168. package/development/tabs/tab-title.js +287 -0
  1169. package/development/tabs.d.ts +3 -0
  1170. package/development/tabs.d.ts.map +1 -0
  1171. package/development/tabs.js +3 -0
  1172. package/development/tag/tag/tag.d.ts +53 -0
  1173. package/development/tag/tag/tag.d.ts.map +1 -0
  1174. package/development/tag/tag-group/tag-group.d.ts +46 -0
  1175. package/development/tag/tag-group/tag-group.d.ts.map +1 -0
  1176. package/development/tag/tag-group.d.ts +2 -0
  1177. package/development/tag/tag-group.d.ts.map +1 -0
  1178. package/development/tag/tag-group.js +142 -0
  1179. package/development/tag/tag.d.ts +2 -0
  1180. package/development/tag/tag.d.ts.map +1 -0
  1181. package/development/tag/tag.js +297 -0
  1182. package/development/tag.d.ts +3 -0
  1183. package/development/tag.d.ts.map +1 -0
  1184. package/development/tag.js +3 -0
  1185. package/development/teaser/teaser.d.ts +31 -0
  1186. package/development/teaser/teaser.d.ts.map +1 -0
  1187. package/development/teaser-hero/teaser-hero.d.ts +26 -0
  1188. package/development/teaser-hero/teaser-hero.d.ts.map +1 -0
  1189. package/development/teaser-hero.d.ts +2 -0
  1190. package/development/teaser-hero.d.ts.map +1 -0
  1191. package/development/teaser-hero.js +181 -0
  1192. package/development/teaser-paid/teaser-paid.d.ts +20 -0
  1193. package/development/teaser-paid/teaser-paid.d.ts.map +1 -0
  1194. package/development/teaser-paid.d.ts +2 -0
  1195. package/development/teaser-paid.d.ts.map +1 -0
  1196. package/development/teaser-paid.js +91 -0
  1197. package/development/teaser.d.ts +2 -0
  1198. package/development/teaser.d.ts.map +1 -0
  1199. package/development/teaser.js +204 -0
  1200. package/development/time-input/time-input.d.ts +68 -0
  1201. package/development/time-input/time-input.d.ts.map +1 -0
  1202. package/development/time-input.d.ts +2 -0
  1203. package/development/time-input.d.ts.map +1 -0
  1204. package/development/time-input.js +269 -0
  1205. package/development/timetable-occupancy/timetable-occupancy.d.ts +23 -0
  1206. package/development/timetable-occupancy/timetable-occupancy.d.ts.map +1 -0
  1207. package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +27 -0
  1208. package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -0
  1209. package/development/timetable-occupancy-icon.d.ts +2 -0
  1210. package/development/timetable-occupancy-icon.d.ts.map +1 -0
  1211. package/development/timetable-occupancy-icon.js +92 -0
  1212. package/development/timetable-occupancy.d.ts +2 -0
  1213. package/development/timetable-occupancy.d.ts.map +1 -0
  1214. package/development/timetable-occupancy.js +133 -0
  1215. package/development/title/title-base.d.ts +26 -0
  1216. package/development/title/title-base.d.ts.map +1 -0
  1217. package/development/title/title.d.ts +16 -0
  1218. package/development/title/title.d.ts.map +1 -0
  1219. package/development/title.d.ts +3 -0
  1220. package/development/title.d.ts.map +1 -0
  1221. package/development/title.js +258 -0
  1222. package/development/toast/toast.d.ts +79 -0
  1223. package/development/toast/toast.d.ts.map +1 -0
  1224. package/development/toast.d.ts +2 -0
  1225. package/development/toast.d.ts.map +1 -0
  1226. package/development/toast.js +380 -0
  1227. package/development/toggle/toggle/toggle.d.ts +63 -0
  1228. package/development/toggle/toggle/toggle.d.ts.map +1 -0
  1229. package/development/toggle/toggle-option/toggle-option.d.ts +37 -0
  1230. package/development/toggle/toggle-option/toggle-option.d.ts.map +1 -0
  1231. package/development/toggle/toggle-option.d.ts +2 -0
  1232. package/development/toggle/toggle-option.d.ts.map +1 -0
  1233. package/development/toggle/toggle-option.js +220 -0
  1234. package/development/toggle/toggle.d.ts +2 -0
  1235. package/development/toggle/toggle.d.ts.map +1 -0
  1236. package/development/toggle/toggle.js +307 -0
  1237. package/development/toggle-check/toggle-check.d.ts +34 -0
  1238. package/development/toggle-check/toggle-check.d.ts.map +1 -0
  1239. package/development/toggle-check.d.ts +2 -0
  1240. package/development/toggle-check.d.ts.map +1 -0
  1241. package/development/toggle-check.js +258 -0
  1242. package/development/toggle.d.ts +3 -0
  1243. package/development/toggle.d.ts.map +1 -0
  1244. package/development/toggle.js +3 -0
  1245. package/development/train/train/train.d.ts +48 -0
  1246. package/development/train/train/train.d.ts.map +1 -0
  1247. package/development/train/train-blocked-passage/train-blocked-passage.d.ts +15 -0
  1248. package/development/train/train-blocked-passage/train-blocked-passage.d.ts.map +1 -0
  1249. package/development/train/train-blocked-passage.d.ts +2 -0
  1250. package/development/train/train-blocked-passage.d.ts.map +1 -0
  1251. package/development/train/train-blocked-passage.js +100 -0
  1252. package/development/train/train-formation/train-formation.d.ts +40 -0
  1253. package/development/train/train-formation/train-formation.d.ts.map +1 -0
  1254. package/development/train/train-formation.d.ts +2 -0
  1255. package/development/train/train-formation.d.ts.map +1 -0
  1256. package/development/train/train-formation.js +293 -0
  1257. package/development/train/train-wagon/train-wagon.d.ts +49 -0
  1258. package/development/train/train-wagon/train-wagon.d.ts.map +1 -0
  1259. package/development/train/train-wagon.d.ts +2 -0
  1260. package/development/train/train-wagon.d.ts.map +1 -0
  1261. package/development/train/train-wagon.js +327 -0
  1262. package/development/train/train.d.ts +2 -0
  1263. package/development/train/train.d.ts.map +1 -0
  1264. package/development/train/train.js +269 -0
  1265. package/development/train.d.ts +5 -0
  1266. package/development/train.d.ts.map +1 -0
  1267. package/development/train.js +5 -0
  1268. package/development/visual-checkbox/visual-checkbox.d.ts +21 -0
  1269. package/development/visual-checkbox/visual-checkbox.d.ts.map +1 -0
  1270. package/development/visual-checkbox.d.ts +2 -0
  1271. package/development/visual-checkbox.d.ts.map +1 -0
  1272. package/development/visual-checkbox.js +180 -0
  1273. package/dialog/dialog/dialog.d.ts +54 -0
  1274. package/dialog/dialog/dialog.d.ts.map +1 -0
  1275. package/dialog/dialog-actions/dialog-actions.d.ts +18 -0
  1276. package/dialog/dialog-actions/dialog-actions.d.ts.map +1 -0
  1277. package/dialog/dialog-actions.d.ts +2 -0
  1278. package/dialog/dialog-actions.d.ts.map +1 -0
  1279. package/dialog/dialog-actions.js +21 -0
  1280. package/dialog/dialog-content/dialog-content.d.ts +17 -0
  1281. package/dialog/dialog-content/dialog-content.d.ts.map +1 -0
  1282. package/dialog/dialog-content.d.ts +2 -0
  1283. package/dialog/dialog-content.d.ts.map +1 -0
  1284. package/dialog/dialog-content.js +24 -0
  1285. package/dialog/dialog-title/dialog-title.d.ts +43 -0
  1286. package/dialog/dialog-title/dialog-title.d.ts.map +1 -0
  1287. package/dialog/dialog-title.d.ts +2 -0
  1288. package/dialog/dialog-title.d.ts.map +1 -0
  1289. package/dialog/dialog-title.js +86 -0
  1290. package/dialog/dialog.d.ts +2 -0
  1291. package/dialog/dialog.d.ts.map +1 -0
  1292. package/dialog/dialog.js +135 -0
  1293. package/dialog.d.ts +5 -0
  1294. package/dialog.d.ts.map +1 -0
  1295. package/dialog.js +4 -0
  1296. package/divider/divider.d.ts +21 -0
  1297. package/divider/divider.d.ts.map +1 -0
  1298. package/divider.d.ts +2 -0
  1299. package/divider.d.ts.map +1 -0
  1300. package/divider.js +34 -0
  1301. package/expansion-panel/expansion-panel/expansion-panel.d.ts +75 -0
  1302. package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -0
  1303. package/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts +17 -0
  1304. package/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts.map +1 -0
  1305. package/expansion-panel/expansion-panel-content.d.ts +2 -0
  1306. package/expansion-panel/expansion-panel-content.d.ts.map +1 -0
  1307. package/expansion-panel/expansion-panel-content.js +29 -0
  1308. package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts +38 -0
  1309. package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -0
  1310. package/expansion-panel/expansion-panel-header.d.ts +2 -0
  1311. package/expansion-panel/expansion-panel-header.d.ts.map +1 -0
  1312. package/expansion-panel/expansion-panel-header.js +75 -0
  1313. package/expansion-panel/expansion-panel.d.ts +2 -0
  1314. package/expansion-panel/expansion-panel.d.ts.map +1 -0
  1315. package/expansion-panel/expansion-panel.js +142 -0
  1316. package/expansion-panel.d.ts +4 -0
  1317. package/expansion-panel.d.ts.map +1 -0
  1318. package/expansion-panel.js +3 -0
  1319. package/file-selector/file-selector.d.ts +74 -0
  1320. package/file-selector/file-selector.d.ts.map +1 -0
  1321. package/file-selector.d.ts +2 -0
  1322. package/file-selector.d.ts.map +1 -0
  1323. package/file-selector.js +218 -0
  1324. package/font-characters-extension.css +18 -0
  1325. package/footer/footer.d.ts +35 -0
  1326. package/footer/footer.d.ts.map +1 -0
  1327. package/footer.d.ts +2 -0
  1328. package/footer.d.ts.map +1 -0
  1329. package/footer.js +46 -0
  1330. package/form-error/form-error.d.ts +21 -0
  1331. package/form-error/form-error.d.ts.map +1 -0
  1332. package/form-error.d.ts +2 -0
  1333. package/form-error.d.ts.map +1 -0
  1334. package/form-error.js +48 -0
  1335. package/form-field/form-field/form-field.d.ts +101 -0
  1336. package/form-field/form-field/form-field.d.ts.map +1 -0
  1337. package/form-field/form-field-clear/form-field-clear.d.ts +24 -0
  1338. package/form-field/form-field-clear/form-field-clear.d.ts.map +1 -0
  1339. package/form-field/form-field-clear.d.ts +2 -0
  1340. package/form-field/form-field-clear.d.ts.map +1 -0
  1341. package/form-field/form-field-clear.js +46 -0
  1342. package/form-field/form-field.d.ts +2 -0
  1343. package/form-field/form-field.d.ts.map +1 -0
  1344. package/form-field/form-field.js +268 -0
  1345. package/form-field.d.ts +3 -0
  1346. package/form-field.d.ts.map +1 -0
  1347. package/form-field.js +2 -0
  1348. package/header/common/header-action-common.d.ts +11 -0
  1349. package/header/common/header-action-common.d.ts.map +1 -0
  1350. package/header/common.d.ts +2 -0
  1351. package/header/common.d.ts.map +1 -0
  1352. package/header/common.js +35 -0
  1353. package/header/header/header.d.ts +59 -0
  1354. package/header/header/header.d.ts.map +1 -0
  1355. package/header/header-button/header-button.d.ts +18 -0
  1356. package/header/header-button/header-button.d.ts.map +1 -0
  1357. package/header/header-button.d.ts +2 -0
  1358. package/header/header-button.d.ts.map +1 -0
  1359. package/header/header-button.js +18 -0
  1360. package/header/header-link/header-link.d.ts +18 -0
  1361. package/header/header-link/header-link.d.ts.map +1 -0
  1362. package/header/header-link.d.ts +2 -0
  1363. package/header/header-link.d.ts.map +1 -0
  1364. package/header/header-link.js +16 -0
  1365. package/header/header.d.ts +2 -0
  1366. package/header/header.d.ts.map +1 -0
  1367. package/header/header.js +120 -0
  1368. package/header.d.ts +5 -0
  1369. package/header.d.ts.map +1 -0
  1370. package/header.js +4 -0
  1371. package/icon/icon-base.d.ts +28 -0
  1372. package/icon/icon-base.d.ts.map +1 -0
  1373. package/icon/icon-name-mixin.d.ts +12 -0
  1374. package/icon/icon-name-mixin.d.ts.map +1 -0
  1375. package/icon/icon-request.d.ts +3 -0
  1376. package/icon/icon-request.d.ts.map +1 -0
  1377. package/icon/icon-validate.d.ts +12 -0
  1378. package/icon/icon-validate.d.ts.map +1 -0
  1379. package/icon/icon.d.ts +24 -0
  1380. package/icon/icon.d.ts.map +1 -0
  1381. package/icon.d.ts +6 -0
  1382. package/icon.d.ts.map +1 -0
  1383. package/icon.js +174 -0
  1384. package/image/image.d.ts +245 -0
  1385. package/image/image.d.ts.map +1 -0
  1386. package/image.d.ts +2 -0
  1387. package/image.d.ts.map +1 -0
  1388. package/image.js +292 -0
  1389. package/index.d.ts +231 -0
  1390. package/index.js +229 -0
  1391. package/journey-header/journey-header.d.ts +30 -0
  1392. package/journey-header/journey-header.d.ts.map +1 -0
  1393. package/journey-header.d.ts +2 -0
  1394. package/journey-header.d.ts.map +1 -0
  1395. package/journey-header.js +76 -0
  1396. package/layout.css +24 -0
  1397. package/lead-container/lead-container.d.ts +20 -0
  1398. package/lead-container/lead-container.d.ts.map +1 -0
  1399. package/lead-container.d.ts +2 -0
  1400. package/lead-container.d.ts.map +1 -0
  1401. package/lead-container.js +32 -0
  1402. package/link/block-link/block-link.d.ts +18 -0
  1403. package/link/block-link/block-link.d.ts.map +1 -0
  1404. package/link/block-link-button/block-link-button.d.ts +18 -0
  1405. package/link/block-link-button/block-link-button.d.ts.map +1 -0
  1406. package/link/block-link-button.d.ts +2 -0
  1407. package/link/block-link-button.d.ts.map +1 -0
  1408. package/link/block-link-button.js +19 -0
  1409. package/link/block-link-static/block-link-static.d.ts +18 -0
  1410. package/link/block-link-static/block-link-static.d.ts.map +1 -0
  1411. package/link/block-link-static.d.ts +2 -0
  1412. package/link/block-link-static.d.ts.map +1 -0
  1413. package/link/block-link-static.js +19 -0
  1414. package/link/block-link.d.ts +2 -0
  1415. package/link/block-link.d.ts.map +1 -0
  1416. package/link/block-link.js +19 -0
  1417. package/link/common/block-link-common.d.ts +11 -0
  1418. package/link/common/block-link-common.d.ts.map +1 -0
  1419. package/link/common/inline-link-common.d.ts +8 -0
  1420. package/link/common/inline-link-common.d.ts.map +1 -0
  1421. package/link/common/link-common.d.ts +9 -0
  1422. package/link/common/link-common.d.ts.map +1 -0
  1423. package/link/common.d.ts +4 -0
  1424. package/link/common.d.ts.map +1 -0
  1425. package/link/common.js +62 -0
  1426. package/link/link/link.d.ts +17 -0
  1427. package/link/link/link.d.ts.map +1 -0
  1428. package/link/link-button/link-button.d.ts +17 -0
  1429. package/link/link-button/link-button.d.ts.map +1 -0
  1430. package/link/link-button.d.ts +2 -0
  1431. package/link/link-button.d.ts.map +1 -0
  1432. package/link/link-button.js +19 -0
  1433. package/link/link-static/link-static.d.ts +17 -0
  1434. package/link/link-static/link-static.d.ts.map +1 -0
  1435. package/link/link-static.d.ts +2 -0
  1436. package/link/link-static.d.ts.map +1 -0
  1437. package/link/link-static.js +19 -0
  1438. package/link/link.d.ts +2 -0
  1439. package/link/link.d.ts.map +1 -0
  1440. package/link/link.js +19 -0
  1441. package/link-list/link-list.d.ts +40 -0
  1442. package/link-list/link-list.d.ts.map +1 -0
  1443. package/link-list.d.ts +2 -0
  1444. package/link-list.d.ts.map +1 -0
  1445. package/link-list.js +65 -0
  1446. package/link.d.ts +8 -0
  1447. package/link.d.ts.map +1 -0
  1448. package/link.js +7 -0
  1449. package/lists.css +149 -0
  1450. package/loading-indicator/loading-indicator.d.ts +21 -0
  1451. package/loading-indicator/loading-indicator.d.ts.map +1 -0
  1452. package/loading-indicator.d.ts +2 -0
  1453. package/loading-indicator.d.ts.map +1 -0
  1454. package/loading-indicator.js +51 -0
  1455. package/logo/logo.d.ts +24 -0
  1456. package/logo/logo.d.ts.map +1 -0
  1457. package/logo.d.ts +2 -0
  1458. package/logo.d.ts.map +1 -0
  1459. package/logo.js +47 -0
  1460. package/map-container/map-container.d.ts +43 -0
  1461. package/map-container/map-container.d.ts.map +1 -0
  1462. package/map-container.d.ts +2 -0
  1463. package/map-container.d.ts.map +1 -0
  1464. package/map-container.js +91 -0
  1465. package/menu/common/menu-action-common.d.ts +11 -0
  1466. package/menu/common/menu-action-common.d.ts.map +1 -0
  1467. package/menu/common.d.ts +2 -0
  1468. package/menu/common.d.ts.map +1 -0
  1469. package/menu/common.js +34 -0
  1470. package/menu/menu/menu.d.ts +76 -0
  1471. package/menu/menu/menu.d.ts.map +1 -0
  1472. package/menu/menu-button/menu-button.d.ts +20 -0
  1473. package/menu/menu-button/menu-button.d.ts.map +1 -0
  1474. package/menu/menu-button.d.ts +2 -0
  1475. package/menu/menu-button.d.ts.map +1 -0
  1476. package/menu/menu-button.js +19 -0
  1477. package/menu/menu-link/menu-link.d.ts +20 -0
  1478. package/menu/menu-link/menu-link.d.ts.map +1 -0
  1479. package/menu/menu-link.d.ts +2 -0
  1480. package/menu/menu-link.d.ts.map +1 -0
  1481. package/menu/menu-link.js +16 -0
  1482. package/menu/menu.d.ts +2 -0
  1483. package/menu/menu.d.ts.map +1 -0
  1484. package/menu/menu.js +194 -0
  1485. package/menu.d.ts +5 -0
  1486. package/menu.d.ts.map +1 -0
  1487. package/menu.js +4 -0
  1488. package/message/message.d.ts +26 -0
  1489. package/message/message.d.ts.map +1 -0
  1490. package/message.d.ts +2 -0
  1491. package/message.d.ts.map +1 -0
  1492. package/message.js +40 -0
  1493. package/navigation/common/navigation-action-common.d.ts +14 -0
  1494. package/navigation/common/navigation-action-common.d.ts.map +1 -0
  1495. package/navigation/common.d.ts +2 -0
  1496. package/navigation/common.d.ts.map +1 -0
  1497. package/navigation/common.js +51 -0
  1498. package/navigation/navigation/navigation.d.ts +82 -0
  1499. package/navigation/navigation/navigation.d.ts.map +1 -0
  1500. package/navigation/navigation-button/navigation-button.d.ts +17 -0
  1501. package/navigation/navigation-button/navigation-button.d.ts.map +1 -0
  1502. package/navigation/navigation-button.d.ts +2 -0
  1503. package/navigation/navigation-button.d.ts.map +1 -0
  1504. package/navigation/navigation-button.js +18 -0
  1505. package/navigation/navigation-link/navigation-link.d.ts +17 -0
  1506. package/navigation/navigation-link/navigation-link.d.ts.map +1 -0
  1507. package/navigation/navigation-link.d.ts +2 -0
  1508. package/navigation/navigation-link.d.ts.map +1 -0
  1509. package/navigation/navigation-link.js +18 -0
  1510. package/navigation/navigation-list/navigation-list.d.ts +30 -0
  1511. package/navigation/navigation-list/navigation-list.d.ts.map +1 -0
  1512. package/navigation/navigation-list.d.ts +2 -0
  1513. package/navigation/navigation-list.d.ts.map +1 -0
  1514. package/navigation/navigation-list.js +42 -0
  1515. package/navigation/navigation-marker/navigation-marker.d.ts +38 -0
  1516. package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -0
  1517. package/navigation/navigation-marker.d.ts +2 -0
  1518. package/navigation/navigation-marker.d.ts.map +1 -0
  1519. package/navigation/navigation-marker.js +77 -0
  1520. package/navigation/navigation-section/navigation-section.d.ts +76 -0
  1521. package/navigation/navigation-section/navigation-section.d.ts.map +1 -0
  1522. package/navigation/navigation-section.d.ts +2 -0
  1523. package/navigation/navigation-section.d.ts.map +1 -0
  1524. package/navigation/navigation-section.js +205 -0
  1525. package/navigation/navigation.d.ts +2 -0
  1526. package/navigation/navigation.d.ts.map +1 -0
  1527. package/navigation/navigation.js +210 -0
  1528. package/navigation.d.ts +8 -0
  1529. package/navigation.d.ts.map +1 -0
  1530. package/navigation.js +7 -0
  1531. package/normalize.css +189 -0
  1532. package/notification/notification.d.ts +82 -0
  1533. package/notification/notification.d.ts.map +1 -0
  1534. package/notification.d.ts +2 -0
  1535. package/notification.d.ts.map +1 -0
  1536. package/notification.js +158 -0
  1537. package/option/optgroup/optgroup.d.ts +33 -0
  1538. package/option/optgroup/optgroup.d.ts.map +1 -0
  1539. package/option/optgroup.d.ts +2 -0
  1540. package/option/optgroup.d.ts.map +1 -0
  1541. package/option/optgroup.js +103 -0
  1542. package/option/option/option.d.ts +91 -0
  1543. package/option/option/option.d.ts.map +1 -0
  1544. package/option/option.d.ts +2 -0
  1545. package/option/option.d.ts.map +1 -0
  1546. package/option/option.js +230 -0
  1547. package/option.d.ts +3 -0
  1548. package/option.d.ts.map +1 -0
  1549. package/option.js +2 -0
  1550. package/overlay/overlay-base-element.d.ts +43 -0
  1551. package/overlay/overlay-base-element.d.ts.map +1 -0
  1552. package/overlay/overlay.d.ts +52 -0
  1553. package/overlay/overlay.d.ts.map +1 -0
  1554. package/overlay.d.ts +3 -0
  1555. package/overlay.d.ts.map +1 -0
  1556. package/overlay.js +210 -0
  1557. package/package.json +852 -2
  1558. package/popover/popover/popover.d.ts +85 -0
  1559. package/popover/popover/popover.d.ts.map +1 -0
  1560. package/popover/popover-trigger/popover-trigger.d.ts +21 -0
  1561. package/popover/popover-trigger/popover-trigger.d.ts.map +1 -0
  1562. package/popover/popover-trigger.d.ts +2 -0
  1563. package/popover/popover-trigger.d.ts.map +1 -0
  1564. package/popover/popover-trigger.js +35 -0
  1565. package/popover/popover.d.ts +2 -0
  1566. package/popover/popover.d.ts.map +1 -0
  1567. package/popover/popover.js +241 -0
  1568. package/popover.d.ts +3 -0
  1569. package/popover.d.ts.map +1 -0
  1570. package/popover.js +2 -0
  1571. package/radio-button/radio-button/radio-button.d.ts +102 -0
  1572. package/radio-button/radio-button/radio-button.d.ts.map +1 -0
  1573. package/radio-button/radio-button-group/radio-button-group.d.ts +91 -0
  1574. package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -0
  1575. package/radio-button/radio-button-group.d.ts +2 -0
  1576. package/radio-button/radio-button-group.d.ts.map +1 -0
  1577. package/radio-button/radio-button-group.js +161 -0
  1578. package/radio-button/radio-button.d.ts +2 -0
  1579. package/radio-button/radio-button.d.ts.map +1 -0
  1580. package/radio-button/radio-button.js +167 -0
  1581. package/radio-button.d.ts +3 -0
  1582. package/radio-button.d.ts.map +1 -0
  1583. package/radio-button.js +2 -0
  1584. package/screen-reader-only/screen-reader-only.d.ts +17 -0
  1585. package/screen-reader-only/screen-reader-only.d.ts.map +1 -0
  1586. package/screen-reader-only.d.ts +2 -0
  1587. package/screen-reader-only.d.ts.map +1 -0
  1588. package/screen-reader-only.js +20 -0
  1589. package/select/select.d.ts +140 -0
  1590. package/select/select.d.ts.map +1 -0
  1591. package/select.d.ts +2 -0
  1592. package/select.d.ts.map +1 -0
  1593. package/select.js +402 -0
  1594. package/selection-panel/selection-panel.d.ts +63 -0
  1595. package/selection-panel/selection-panel.d.ts.map +1 -0
  1596. package/selection-panel.d.ts +2 -0
  1597. package/selection-panel.d.ts.map +1 -0
  1598. package/selection-panel.js +138 -0
  1599. package/signet/signet.d.ts +20 -0
  1600. package/signet/signet.d.ts.map +1 -0
  1601. package/signet.d.ts +2 -0
  1602. package/signet.d.ts.map +1 -0
  1603. package/signet.js +41 -0
  1604. package/skiplink-list/skiplink-list.d.ts +32 -0
  1605. package/skiplink-list/skiplink-list.d.ts.map +1 -0
  1606. package/skiplink-list.d.ts +2 -0
  1607. package/skiplink-list.d.ts.map +1 -0
  1608. package/skiplink-list.js +51 -0
  1609. package/slider/slider.d.ts +70 -0
  1610. package/slider/slider.d.ts.map +1 -0
  1611. package/slider.d.ts +2 -0
  1612. package/slider.d.ts.map +1 -0
  1613. package/slider.js +152 -0
  1614. package/standard-theme.css +1741 -0
  1615. package/status/status.d.ts +32 -0
  1616. package/status/status.d.ts.map +1 -0
  1617. package/status.d.ts +2 -0
  1618. package/status.d.ts.map +1 -0
  1619. package/status.js +59 -0
  1620. package/stepper/step/step.d.ts +66 -0
  1621. package/stepper/step/step.d.ts.map +1 -0
  1622. package/stepper/step-label/step-label.d.ts +47 -0
  1623. package/stepper/step-label/step-label.d.ts.map +1 -0
  1624. package/stepper/step-label.d.ts +2 -0
  1625. package/stepper/step-label.d.ts.map +1 -0
  1626. package/stepper/step-label.js +83 -0
  1627. package/stepper/step.d.ts +2 -0
  1628. package/stepper/step.d.ts.map +1 -0
  1629. package/stepper/step.js +117 -0
  1630. package/stepper/stepper/stepper.d.ts +59 -0
  1631. package/stepper/stepper/stepper.d.ts.map +1 -0
  1632. package/stepper/stepper.d.ts +2 -0
  1633. package/stepper/stepper.d.ts.map +1 -0
  1634. package/stepper/stepper.js +191 -0
  1635. package/stepper.d.ts +4 -0
  1636. package/stepper.d.ts.map +1 -0
  1637. package/stepper.js +3 -0
  1638. package/tabs/tab-group/tab-group.d.ts +94 -0
  1639. package/tabs/tab-group/tab-group.d.ts.map +1 -0
  1640. package/tabs/tab-group.d.ts +2 -0
  1641. package/tabs/tab-group.d.ts.map +1 -0
  1642. package/tabs/tab-group.js +196 -0
  1643. package/tabs/tab-title/tab-title.d.ts +32 -0
  1644. package/tabs/tab-title/tab-title.d.ts.map +1 -0
  1645. package/tabs/tab-title.d.ts +2 -0
  1646. package/tabs/tab-title.d.ts.map +1 -0
  1647. package/tabs/tab-title.js +51 -0
  1648. package/tabs.d.ts +3 -0
  1649. package/tabs.d.ts.map +1 -0
  1650. package/tabs.js +2 -0
  1651. package/tag/tag/tag.d.ts +53 -0
  1652. package/tag/tag/tag.d.ts.map +1 -0
  1653. package/tag/tag-group/tag-group.d.ts +46 -0
  1654. package/tag/tag-group/tag-group.d.ts.map +1 -0
  1655. package/tag/tag-group.d.ts +2 -0
  1656. package/tag/tag-group.d.ts.map +1 -0
  1657. package/tag/tag-group.js +82 -0
  1658. package/tag/tag.d.ts +2 -0
  1659. package/tag/tag.d.ts.map +1 -0
  1660. package/tag/tag.js +82 -0
  1661. package/tag.d.ts +3 -0
  1662. package/tag.d.ts.map +1 -0
  1663. package/tag.js +2 -0
  1664. package/teaser/teaser.d.ts +31 -0
  1665. package/teaser/teaser.d.ts.map +1 -0
  1666. package/teaser-hero/teaser-hero.d.ts +26 -0
  1667. package/teaser-hero/teaser-hero.d.ts.map +1 -0
  1668. package/teaser-hero.d.ts +2 -0
  1669. package/teaser-hero.d.ts.map +1 -0
  1670. package/teaser-hero.js +51 -0
  1671. package/teaser-paid/teaser-paid.d.ts +20 -0
  1672. package/teaser-paid/teaser-paid.d.ts.map +1 -0
  1673. package/teaser-paid.d.ts +2 -0
  1674. package/teaser-paid.d.ts.map +1 -0
  1675. package/teaser-paid.js +28 -0
  1676. package/teaser.d.ts +2 -0
  1677. package/teaser.d.ts.map +1 -0
  1678. package/teaser.js +57 -0
  1679. package/time-input/time-input.d.ts +68 -0
  1680. package/time-input/time-input.d.ts.map +1 -0
  1681. package/time-input.d.ts +2 -0
  1682. package/time-input.d.ts.map +1 -0
  1683. package/time-input.js +176 -0
  1684. package/timetable-occupancy/timetable-occupancy.d.ts +23 -0
  1685. package/timetable-occupancy/timetable-occupancy.d.ts.map +1 -0
  1686. package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +27 -0
  1687. package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -0
  1688. package/timetable-occupancy-icon.d.ts +2 -0
  1689. package/timetable-occupancy-icon.d.ts.map +1 -0
  1690. package/timetable-occupancy-icon.js +53 -0
  1691. package/timetable-occupancy.d.ts +2 -0
  1692. package/timetable-occupancy.d.ts.map +1 -0
  1693. package/timetable-occupancy.js +58 -0
  1694. package/title/title-base.d.ts +26 -0
  1695. package/title/title-base.d.ts.map +1 -0
  1696. package/title/title.d.ts +16 -0
  1697. package/title/title.d.ts.map +1 -0
  1698. package/title.d.ts +3 -0
  1699. package/title.d.ts.map +1 -0
  1700. package/title.js +58 -0
  1701. package/toast/toast.d.ts +79 -0
  1702. package/toast/toast.d.ts.map +1 -0
  1703. package/toast.d.ts +2 -0
  1704. package/toast.d.ts.map +1 -0
  1705. package/toast.js +147 -0
  1706. package/toggle/toggle/toggle.d.ts +63 -0
  1707. package/toggle/toggle/toggle.d.ts.map +1 -0
  1708. package/toggle/toggle-option/toggle-option.d.ts +37 -0
  1709. package/toggle/toggle-option/toggle-option.d.ts.map +1 -0
  1710. package/toggle/toggle-option.d.ts +2 -0
  1711. package/toggle/toggle-option.d.ts.map +1 -0
  1712. package/toggle/toggle-option.js +89 -0
  1713. package/toggle/toggle.d.ts +2 -0
  1714. package/toggle/toggle.d.ts.map +1 -0
  1715. package/toggle/toggle.js +129 -0
  1716. package/toggle-check/toggle-check.d.ts +34 -0
  1717. package/toggle-check/toggle-check.d.ts.map +1 -0
  1718. package/toggle-check.d.ts +2 -0
  1719. package/toggle-check.d.ts.map +1 -0
  1720. package/toggle-check.js +56 -0
  1721. package/toggle.d.ts +3 -0
  1722. package/toggle.d.ts.map +1 -0
  1723. package/toggle.js +2 -0
  1724. package/train/train/train.d.ts +48 -0
  1725. package/train/train/train.d.ts.map +1 -0
  1726. package/train/train-blocked-passage/train-blocked-passage.d.ts +15 -0
  1727. package/train/train-blocked-passage/train-blocked-passage.d.ts.map +1 -0
  1728. package/train/train-blocked-passage.d.ts +2 -0
  1729. package/train/train-blocked-passage.d.ts.map +1 -0
  1730. package/train/train-blocked-passage.js +26 -0
  1731. package/train/train-formation/train-formation.d.ts +40 -0
  1732. package/train/train-formation/train-formation.d.ts.map +1 -0
  1733. package/train/train-formation.d.ts +2 -0
  1734. package/train/train-formation.d.ts.map +1 -0
  1735. package/train/train-formation.js +103 -0
  1736. package/train/train-wagon/train-wagon.d.ts +49 -0
  1737. package/train/train-wagon/train-wagon.d.ts.map +1 -0
  1738. package/train/train-wagon.d.ts +2 -0
  1739. package/train/train-wagon.d.ts.map +1 -0
  1740. package/train/train-wagon.js +148 -0
  1741. package/train/train.d.ts +2 -0
  1742. package/train/train.d.ts.map +1 -0
  1743. package/train/train.js +93 -0
  1744. package/train.d.ts +5 -0
  1745. package/train.d.ts.map +1 -0
  1746. package/train.js +4 -0
  1747. package/typography.css +79 -0
  1748. package/visual-checkbox/visual-checkbox.d.ts +21 -0
  1749. package/visual-checkbox/visual-checkbox.d.ts.map +1 -0
  1750. package/visual-checkbox.d.ts +2 -0
  1751. package/visual-checkbox.d.ts.map +1 -0
  1752. package/visual-checkbox.js +49 -0
@@ -0,0 +1,1318 @@
1
+ import { css, LitElement, isServer, html, nothing } from "lit";
2
+ import { property, state, customElement } from "lit/decorators.js";
3
+ import { classMap } from "lit/directives/class-map.js";
4
+ import { sbbInputModalityDetector, isArrowKeyOrPageKeysPressed } from "./core/a11y.js";
5
+ import { SbbConnectedAbortController, SbbLanguageController } from "./core/controllers.js";
6
+ import { defaultDateAdapter, YEARS_PER_PAGE, DAYS_PER_ROW, MONTHS_PER_ROW, YEARS_PER_ROW } from "./core/datetime.js";
7
+ import { isBreakpoint } from "./core/dom.js";
8
+ import { EventEmitter } from "./core/eventing.js";
9
+ import { i18nPreviousMonth, i18nNextMonth, i18nYearMonthSelection, i18nPreviousYear, i18nNextYear, i18nCalendarDateSelection, i18nPreviousYearRange, i18nNextYearRange } from "./core/i18n.js";
10
+ import "./button/secondary-button.js";
11
+ import "./icon.js";
12
+ import "./screen-reader-only.js";
13
+ const style = css`/**
14
+ * Better font rendering (on OS X)
15
+ * http://maximilianhoffmann.com/posts/better-font-rendering-on-osx
16
+ *
17
+ * Usage:
18
+ *
19
+ * .var_dark_on_light {
20
+ * @include font-smoothing;
21
+ * }
22
+ * .var_light_on_dark {
23
+ * @include font-smoothing-reset;
24
+ * }
25
+ */
26
+ /** This mixin can be used to avoid spacing problems by inserting an invisible space as pseudo element. */
27
+ *,
28
+ ::before,
29
+ ::after {
30
+ box-sizing: border-box;
31
+ }
32
+
33
+ :host {
34
+ --sbb-calendar-cell-size: 2.5rem;
35
+ --sbb-calendar-hover-shift: 0.0625rem;
36
+ --sbb-calendar-wide-cell-size: 4.375rem;
37
+ --sbb-calendar-cell-disabled-color: var(--sbb-color-granite);
38
+ --sbb-calendar-header-color: var(--sbb-color-granite);
39
+ --sbb-calendar-cell-background-color: transparent;
40
+ --sbb-calendar-cell-padding: 0.125rem;
41
+ --sbb-calendar-cell-color: var(--sbb-color-charcoal);
42
+ --sbb-calendar-cell-selected-color: var(--sbb-color-white);
43
+ --sbb-calendar-cell-selected-background-color: var(--sbb-color-charcoal);
44
+ --sbb-calendar-cell-disabled-height: 0.09375rem;
45
+ --sbb-calendar-cell-disabled-width: 1.59375rem;
46
+ --sbb-calendar-cell-transition-duration: var(
47
+ --sbb-disable-animation-zero-time,
48
+ var(--sbb-animation-duration-2x)
49
+ );
50
+ --sbb-calendar-cell-transition-easing-function: var(--sbb-animation-easing);
51
+ --sbb-calendar-tables-gap: var(--sbb-spacing-fixed-10x);
52
+ --sbb-calendar-table-animation-shift: 0.00625rem;
53
+ --sbb-calendar-table-animation-duration: 0.1ms;
54
+ --sbb-calendar-table-column-spaces: 12;
55
+ --sbb-calendar-control-view-change-height: 2.75rem;
56
+ --sbb-calendar-control-view-change-color: var(--sbb-color-charcoal);
57
+ --sbb-calendar-control-view-change-background: var(--sbb-color-white);
58
+ display: block;
59
+ width: max-content;
60
+ }
61
+ @media (min-width: calc(22.5rem)) {
62
+ :host {
63
+ --sbb-calendar-cell-size: 2.75rem;
64
+ --sbb-calendar-wide-cell-size: 4.8125rem;
65
+ --sbb-calendar-control-view-change-height: 3rem;
66
+ }
67
+ }
68
+
69
+ .sbb-calendar__wrapper {
70
+ width: 100%;
71
+ display: block;
72
+ transition-duration: var(--sbb-calendar-cell-transition-duration);
73
+ }
74
+
75
+ .sbb-calendar__controls {
76
+ width: 100%;
77
+ display: inline-flex;
78
+ align-items: center;
79
+ gap: var(--sbb-spacing-fixed-2x);
80
+ margin-block-end: var(--sbb-spacing-fixed-4x);
81
+ }
82
+
83
+ .sbb-calendar__controls-month {
84
+ width: 100%;
85
+ display: flex;
86
+ gap: var(--sbb-calendar-tables-gap);
87
+ }
88
+
89
+ #sbb-calendar__controls-previous,
90
+ #sbb-calendar__controls-next {
91
+ -webkit-tap-highlight-color: transparent;
92
+ }
93
+
94
+ .sbb-calendar__controls-change-date {
95
+ -webkit-appearance: none;
96
+ -moz-appearance: none;
97
+ box-sizing: border-box;
98
+ margin: 0;
99
+ outline: none;
100
+ border: none;
101
+ border-radius: 0;
102
+ padding: 0;
103
+ background: none;
104
+ -webkit-tap-highlight-color: transparent;
105
+ color: inherit;
106
+ --sbb-text-font-size: var(--sbb-font-size-text-s);
107
+ font-family: var(--sbb-typo-font-family);
108
+ font-weight: normal;
109
+ line-height: var(--sbb-typo-line-height-body-text);
110
+ letter-spacing: var(--sbb-typo-letter-spacing-body-text);
111
+ font-size: var(--sbb-text-font-size);
112
+ display: flex;
113
+ align-items: center;
114
+ margin: auto;
115
+ height: var(--sbb-calendar-control-view-change-height);
116
+ text-transform: capitalize;
117
+ cursor: pointer;
118
+ padding-inline: var(--sbb-spacing-fixed-5x) var(--sbb-spacing-fixed-2x);
119
+ border-radius: var(--sbb-border-radius-infinity);
120
+ background-color: var(--sbb-calendar-control-view-change-background);
121
+ color: var(--sbb-calendar-control-view-change-color);
122
+ transition-duration: var(--sbb-calendar-cell-transition-duration);
123
+ transition-timing-function: var(--sbb-calendar-cell-transition-easing-function);
124
+ transition-property: background-color, padding-block-end;
125
+ }
126
+ .sbb-calendar__controls-change-date:disabled {
127
+ --sbb-calendar-control-view-change-background: var(--sbb-color-milk);
128
+ --sbb-calendar-control-view-change-color: var(--sbb-calendar-cell-disabled-color);
129
+ cursor: unset;
130
+ }
131
+ .sbb-calendar__controls-change-date:focus-visible:not([data-focus-origin=mouse], [data-focus-origin=touch]) {
132
+ outline-offset: var(--sbb-focus-outline-offset);
133
+ outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
134
+ outline-offset: var(--sbb-spacing-fixed-1x);
135
+ }
136
+ @media (any-hover: hover) {
137
+ .sbb-calendar__controls-change-date:not(:active, :disabled):hover {
138
+ padding-block-end: var(--sbb-calendar-hover-shift);
139
+ }
140
+ }
141
+ .sbb-calendar__controls-change-date:not(:disabled):active {
142
+ --sbb-calendar-control-view-change-background: var(--sbb-color-milk);
143
+ }
144
+
145
+ .sbb-calendar__table-month-view,
146
+ .sbb-calendar__table-year-view {
147
+ --sbb-calendar-table-column-spaces: 6;
148
+ }
149
+
150
+ .sbb-calendar__table-container {
151
+ display: flex;
152
+ gap: var(--sbb-calendar-tables-gap);
153
+ --sbb-calendar-min-width: calc(7 * var(--sbb-calendar-cell-size));
154
+ --sbb-calendar-overflow: calc(100% - var(--sbb-calendar-min-width));
155
+ --sbb-calendar-start-offset: min(
156
+ 0px,
157
+ -1 * (var(--sbb-calendar-overflow) / var(--sbb-calendar-table-column-spaces))
158
+ );
159
+ --sbb-calendar-margin: var(--sbb-calendar-start-offset);
160
+ margin-inline: var(--sbb-calendar-margin);
161
+ }
162
+ :host([data-wide]) .sbb-calendar__table-container {
163
+ --sbb-calendar-min-width: calc(
164
+ 2 * 7 * var(--sbb-calendar-cell-size) + var(--sbb-calendar-tables-gap)
165
+ );
166
+ --sbb-calendar-margin: calc(0.5 * var(--sbb-calendar-start-offset));
167
+ }
168
+
169
+ .sbb-calendar__table {
170
+ width: 100%;
171
+ border-collapse: collapse;
172
+ height: max-content;
173
+ animation-name: show;
174
+ animation-duration: var(--sbb-calendar-table-animation-duration);
175
+ }
176
+ .sbb-calendar__table.sbb-calendar__table-hide {
177
+ --sbb-calendar-cell-transition-duration: 0ms;
178
+ animation-name: hide;
179
+ animation-duration: var(--sbb-calendar-table-animation-duration);
180
+ }
181
+ :host(:not([data-wide])) .sbb-calendar__table {
182
+ min-width: 100%;
183
+ }
184
+
185
+ .sbb-calendar__table-header {
186
+ --sbb-text-font-size: var(--sbb-font-size-text-xs);
187
+ font-family: var(--sbb-typo-font-family);
188
+ font-weight: normal;
189
+ line-height: var(--sbb-typo-line-height-body-text);
190
+ letter-spacing: var(--sbb-typo-letter-spacing-body-text);
191
+ font-size: var(--sbb-text-font-size);
192
+ color: var(--sbb-calendar-header-color);
193
+ width: var(--sbb-calendar-cell-size);
194
+ padding: 0;
195
+ padding-block-end: var(--sbb-spacing-fixed-4x);
196
+ text-align: center;
197
+ }
198
+
199
+ .sbb-calendar__table-data {
200
+ position: relative;
201
+ padding: 0;
202
+ text-align: center;
203
+ }
204
+
205
+ .sbb-calendar__cell {
206
+ -webkit-appearance: none;
207
+ -moz-appearance: none;
208
+ box-sizing: border-box;
209
+ margin: 0;
210
+ outline: none;
211
+ border: none;
212
+ border-radius: 0;
213
+ padding: 0;
214
+ background: none;
215
+ -webkit-tap-highlight-color: transparent;
216
+ color: inherit;
217
+ --sbb-text-font-size: var(--sbb-font-size-text-s);
218
+ font-family: var(--sbb-typo-font-family);
219
+ font-weight: normal;
220
+ line-height: var(--sbb-typo-line-height-body-text);
221
+ letter-spacing: var(--sbb-typo-letter-spacing-body-text);
222
+ font-size: var(--sbb-text-font-size);
223
+ height: var(--sbb-calendar-cell-size);
224
+ color: var(--sbb-calendar-cell-color);
225
+ cursor: pointer;
226
+ position: relative;
227
+ z-index: 0;
228
+ }
229
+ .sbb-calendar__cell::before {
230
+ content: "";
231
+ position: absolute;
232
+ inset: var(--sbb-calendar-cell-padding);
233
+ background-color: var(--sbb-calendar-cell-background-color);
234
+ border-radius: 50%;
235
+ z-index: -1;
236
+ transition-duration: var(--sbb-calendar-cell-transition-duration);
237
+ transition-timing-function: var(--sbb-calendar-cell-transition-easing-function);
238
+ transition-property: background-color;
239
+ }
240
+ @media (any-hover: hover) {
241
+ .sbb-calendar__cell:not(.sbb-calendar__selected, :active, :disabled):hover {
242
+ --sbb-calendar-cell-background-color: var(--sbb-color-milk);
243
+ padding-block-end: var(--sbb-calendar-hover-shift);
244
+ }
245
+ }
246
+ @media (any-hover: hover) and (forced-colors: active) {
247
+ .sbb-calendar__cell:not(.sbb-calendar__selected, :active, :disabled):hover::before {
248
+ outline-offset: var(--sbb-focus-outline-offset);
249
+ outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
250
+ }
251
+ }
252
+ .sbb-calendar__cell:disabled {
253
+ --sbb-calendar-cell-color: var(--sbb-calendar-cell-disabled-color);
254
+ cursor: unset;
255
+ }
256
+ .sbb-calendar__cell:focus-visible::before {
257
+ outline-offset: var(--sbb-focus-outline-offset);
258
+ outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
259
+ }
260
+ .sbb-calendar__cell:not(.sbb-calendar__selected, :disabled):active {
261
+ --sbb-calendar-cell-background-color: var(--sbb-color-cloud);
262
+ }
263
+ @media (forced-colors: active) {
264
+ .sbb-calendar__cell:not(.sbb-calendar__selected, :disabled):active::before {
265
+ outline-offset: var(--sbb-focus-outline-offset);
266
+ outline: var(--sbb-focus-outline-color) solid var(--sbb-focus-outline-width);
267
+ }
268
+ }
269
+
270
+ .sbb-calendar__day {
271
+ border-radius: 50%;
272
+ width: var(--sbb-calendar-cell-size);
273
+ }
274
+ .sbb-calendar__day::before {
275
+ border-radius: 50%;
276
+ }
277
+
278
+ .sbb-calendar__pill {
279
+ width: var(--sbb-calendar-wide-cell-size);
280
+ border-radius: var(--sbb-border-radius-infinity);
281
+ }
282
+ .sbb-calendar__pill::before {
283
+ border-radius: var(--sbb-border-radius-infinity);
284
+ }
285
+
286
+ .sbb-calendar__crossed-out::after {
287
+ content: "";
288
+ height: var(--sbb-calendar-cell-disabled-height);
289
+ width: var(--sbb-calendar-cell-disabled-width);
290
+ position: absolute;
291
+ background-color: var(--sbb-calendar-cell-disabled-color);
292
+ top: 50%;
293
+ left: 50%;
294
+ transform: translate(-50%, -50%) rotate(-45deg);
295
+ }
296
+
297
+ .sbb-calendar__cell-current {
298
+ --sbb-text-font-size: var(--sbb-font-size-text-s);
299
+ font-family: var(--sbb-typo-font-family);
300
+ font-weight: normal;
301
+ line-height: var(--sbb-typo-line-height-body-text);
302
+ letter-spacing: var(--sbb-typo-letter-spacing-body-text);
303
+ font-size: var(--sbb-text-font-size);
304
+ font-weight: bold;
305
+ }
306
+
307
+ .sbb-calendar__selected {
308
+ --sbb-calendar-cell-color: var(--sbb-calendar-cell-selected-color);
309
+ --sbb-calendar-cell-background-color: var(--sbb-calendar-cell-selected-background-color);
310
+ }
311
+ @media (forced-colors: active) {
312
+ .sbb-calendar__selected {
313
+ --sbb-calendar-cell-background-color: ButtonText !important;
314
+ }
315
+ }
316
+
317
+ @keyframes show {
318
+ from {
319
+ opacity: 0;
320
+ transform: translateY(var(--sbb-calendar-table-animation-shift));
321
+ }
322
+ to {
323
+ opacity: 1;
324
+ transform: translateY(0%);
325
+ }
326
+ }
327
+ @keyframes hide {
328
+ from {
329
+ opacity: 1;
330
+ transform: translateY(0%);
331
+ }
332
+ to {
333
+ opacity: 0;
334
+ transform: translateY(var(--sbb-calendar-table-animation-shift));
335
+ }
336
+ }`;
337
+ var __defProp = Object.defineProperty;
338
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
339
+ var __decorateClass = (decorators, target, key, kind) => {
340
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
341
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
342
+ if (decorator = decorators[i])
343
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
344
+ if (kind && result) __defProp(target, key, result);
345
+ return result;
346
+ };
347
+ let SbbCalendarElement = class extends LitElement {
348
+ constructor() {
349
+ super();
350
+ this.wide = false;
351
+ this._now = null;
352
+ this._dateAdapter = defaultDateAdapter;
353
+ this._dateSelected = new EventEmitter(
354
+ this,
355
+ SbbCalendarElement.events.dateSelected
356
+ );
357
+ this._activeDate = this.now;
358
+ this._calendarView = "day";
359
+ this._nextCalendarView = "day";
360
+ this._weeks = [];
361
+ this._monthNames = this._dateAdapter.getMonthNames("long");
362
+ this._resetFocus = false;
363
+ this._initialized = false;
364
+ this._abort = new SbbConnectedAbortController(this);
365
+ this._language = new SbbLanguageController(this).withHandler(() => {
366
+ this._monthNames = this._dateAdapter.getMonthNames("long");
367
+ this._createMonthRows();
368
+ });
369
+ this._createMonthRows();
370
+ this._setWeekdays();
371
+ }
372
+ set min(value) {
373
+ this._min = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
374
+ }
375
+ get min() {
376
+ return this._min ?? null;
377
+ }
378
+ set max(value) {
379
+ this._max = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
380
+ }
381
+ get max() {
382
+ return this._max ?? null;
383
+ }
384
+ set now(value) {
385
+ this._now = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
386
+ }
387
+ get now() {
388
+ return this._now ?? this._dateAdapter.today();
389
+ }
390
+ set selected(value) {
391
+ this._selectedDate = this._dateAdapter.getValidDateOrNull(this._dateAdapter.deserialize(value));
392
+ if (!!this._selectedDate && (!this._isDayInRange(this._dateAdapter.toIso8601(this._selectedDate)) || this._dateFilter(this._selectedDate))) {
393
+ this._selected = this._dateAdapter.toIso8601(this._selectedDate);
394
+ } else {
395
+ this._selected = void 0;
396
+ }
397
+ }
398
+ get selected() {
399
+ return this._selectedDate ?? null;
400
+ }
401
+ set _wide(wide) {
402
+ this.toggleAttribute("data-wide", wide);
403
+ }
404
+ get _wide() {
405
+ return this.hasAttribute("data-wide");
406
+ }
407
+ /** A list of buttons corresponding to days, months or years depending on the view. */
408
+ get _cells() {
409
+ return Array.from(
410
+ this.shadowRoot.querySelectorAll(".sbb-calendar__cell") ?? []
411
+ );
412
+ }
413
+ get _dateFilter() {
414
+ return this.dateFilter ?? (() => true);
415
+ }
416
+ /** Resets the active month according to the new state of the calendar. */
417
+ resetPosition() {
418
+ if (this._calendarView !== "day") {
419
+ this._resetToDayView();
420
+ }
421
+ this._activeDate = this.selected ?? this.now;
422
+ this._init();
423
+ }
424
+ connectedCallback() {
425
+ var _a;
426
+ super.connectedCallback();
427
+ this.resetPosition();
428
+ this.focus = () => {
429
+ this._resetFocus = true;
430
+ this._focusCell();
431
+ };
432
+ (_a = globalThis.window) == null ? void 0 : _a.addEventListener("resize", () => this._init(), {
433
+ passive: true,
434
+ signal: this._abort.signal
435
+ });
436
+ }
437
+ willUpdate(changedProperties) {
438
+ super.willUpdate(changedProperties);
439
+ if (!this._initialized) {
440
+ return;
441
+ }
442
+ if (changedProperties.has("wide")) {
443
+ this.resetPosition();
444
+ }
445
+ }
446
+ updated(changedProperties) {
447
+ super.updated(changedProperties);
448
+ this._setTabIndex();
449
+ if (sbbInputModalityDetector.mostRecentModality === "keyboard") {
450
+ this._focusCell();
451
+ }
452
+ }
453
+ /** Initializes the component. */
454
+ _init(activeDate) {
455
+ if (isServer) {
456
+ return;
457
+ }
458
+ if (activeDate) {
459
+ this._assignActiveDate(activeDate);
460
+ }
461
+ this._wide = isBreakpoint("medium") && this.wide;
462
+ this._weeks = this._createWeekRows(this._activeDate);
463
+ this._years = this._createYearRows();
464
+ this._nextMonthWeeks = [[]];
465
+ this._nextMonthYears = [[]];
466
+ if (this._wide) {
467
+ const nextMonthDate = this._dateAdapter.addCalendarMonths(this._activeDate, 1);
468
+ this._nextMonthWeeks = this._createWeekRows(nextMonthDate);
469
+ this._nextMonthYears = this._createYearRows(YEARS_PER_PAGE);
470
+ }
471
+ this._initialized = true;
472
+ }
473
+ /** Focuses on a day cell prioritizing the selected day, the current day, and lastly, the first selectable day. */
474
+ _focusCell() {
475
+ var _a;
476
+ if (this._resetFocus) {
477
+ (_a = this._getFirstFocusable()) == null ? void 0 : _a.focus();
478
+ this._resetFocus = false;
479
+ }
480
+ }
481
+ /** Creates the array of weekdays. */
482
+ _setWeekdays() {
483
+ const narrowWeekdays = this._dateAdapter.getDayOfWeekNames("narrow");
484
+ const longWeekdays = this._dateAdapter.getDayOfWeekNames("long");
485
+ const weekdays = longWeekdays.map((long, i) => ({
486
+ long,
487
+ narrow: narrowWeekdays[i]
488
+ }));
489
+ const firstDayOfWeek = this._dateAdapter.getFirstDayOfWeek();
490
+ this._weekdays = weekdays.slice(firstDayOfWeek).concat(weekdays.slice(0, firstDayOfWeek));
491
+ }
492
+ /** Creates the rows for each week. */
493
+ _createWeekRows(value) {
494
+ const daysInMonth = this._dateAdapter.getNumDaysInMonth(value);
495
+ const dateNames = this._dateAdapter.getDateNames();
496
+ const weeks = [[]];
497
+ const weekOffset = this._dateAdapter.getFirstWeekOffset(value);
498
+ for (let i = 0, cell = weekOffset; i < daysInMonth; i++, cell++) {
499
+ if (cell === DAYS_PER_ROW) {
500
+ weeks.push([]);
501
+ cell = 0;
502
+ }
503
+ const date = this._dateAdapter.createDate(
504
+ this._dateAdapter.getYear(value),
505
+ this._dateAdapter.getMonth(value),
506
+ i + 1
507
+ );
508
+ weeks[weeks.length - 1].push({
509
+ value: this._dateAdapter.toIso8601(date),
510
+ dayValue: dateNames[i],
511
+ monthValue: String(this._dateAdapter.getMonth(date)),
512
+ yearValue: String(this._dateAdapter.getYear(date))
513
+ });
514
+ }
515
+ return weeks;
516
+ }
517
+ /** Creates the rows for the month selection view. */
518
+ _createMonthRows() {
519
+ const shortNames = this._dateAdapter.getMonthNames("short");
520
+ const months = new Array(12).fill(null).map(
521
+ (_, i) => ({
522
+ value: shortNames[i],
523
+ longValue: this._monthNames[i],
524
+ monthValue: i + 1
525
+ })
526
+ );
527
+ const rows = 12 / MONTHS_PER_ROW;
528
+ const monthArray = [];
529
+ for (let i = 0; i < rows; i++) {
530
+ monthArray.push(months.slice(MONTHS_PER_ROW * i, MONTHS_PER_ROW * (i + 1)));
531
+ }
532
+ this._months = monthArray;
533
+ }
534
+ /** Creates the rows for the year selection view. */
535
+ _createYearRows(offset = 0) {
536
+ const startValueYearView = this._getStartValueYearView();
537
+ const allYears = new Array(YEARS_PER_PAGE).fill(0).map((_, i) => startValueYearView + offset + i);
538
+ const rows = YEARS_PER_PAGE / YEARS_PER_ROW;
539
+ const yearArray = [];
540
+ for (let i = 0; i < rows; i++) {
541
+ yearArray.push(allYears.slice(YEARS_PER_ROW * i, YEARS_PER_ROW * (i + 1)));
542
+ }
543
+ return yearArray;
544
+ }
545
+ /**
546
+ * Calculates the first year that will be shown in the year selection panel.
547
+ * If `minDate` and `maxDate` are both null, the starting year is calculated as
548
+ * the multiple of YEARS_PER_PAGE closest to and less than activeDate,
549
+ * e.g., with `YEARS_PER_PAGE` = 24 and `activeDate` = 2020, the function will return 2016 (24 * 83),
550
+ * while with `activeDate` = 2000, the function will return 1992 (24 * 82).
551
+ * If `minDate` is not null, it returns the corresponding year; if `maxDate` is not null,
552
+ * it returns the corresponding year minus `YEARS_PER_PAGE`, so that the `maxDate` is the last rendered year.
553
+ * If both are not null, `maxDate` has priority over `minDate`.
554
+ */
555
+ _getStartValueYearView() {
556
+ let startingYear = 0;
557
+ if (this.max) {
558
+ startingYear = this._dateAdapter.getYear(this.max) - YEARS_PER_PAGE + 1;
559
+ } else if (this.min) {
560
+ startingYear = this._dateAdapter.getYear(this.min);
561
+ }
562
+ const activeYear = this._dateAdapter.getYear(this._activeDate);
563
+ return activeYear - ((activeYear - startingYear) % YEARS_PER_PAGE + YEARS_PER_PAGE) % YEARS_PER_PAGE;
564
+ }
565
+ /** Checks if date is within the min-max range. */
566
+ _isDayInRange(date) {
567
+ if (!this._min && !this._max) {
568
+ return true;
569
+ }
570
+ const isBeforeMin = this._dateAdapter.isValid(this._min) && this._dateAdapter.compareDate(this._min, this._dateAdapter.deserialize(date)) > 0;
571
+ const isAfterMax = this._dateAdapter.isValid(this._max) && this._dateAdapter.compareDate(this._max, this._dateAdapter.deserialize(date)) < 0;
572
+ return !(isBeforeMin || isAfterMax);
573
+ }
574
+ _isMonthInRange(month) {
575
+ if (!this._min && !this._max) {
576
+ return true;
577
+ }
578
+ const isBeforeMin = this._dateAdapter.isValid(this._min) && this._dateAdapter.getYear(this._min) >= this._chosenYear && this._dateAdapter.getMonth(this._min) > month;
579
+ const isAfterMax = this._dateAdapter.isValid(this._max) && this._dateAdapter.getYear(this._max) <= this._chosenYear && this._dateAdapter.getMonth(this._max) < month;
580
+ return !(isBeforeMin || isAfterMax);
581
+ }
582
+ _isYearInRange(year) {
583
+ if (!this._min && !this._max) {
584
+ return true;
585
+ }
586
+ const isBeforeMin = this._dateAdapter.isValid(this._min) && this._dateAdapter.getYear(this._min) > year;
587
+ const isAfterMax = this._dateAdapter.isValid(this._max) && this._dateAdapter.getYear(this._max) < year;
588
+ return !(isBeforeMin || isAfterMax);
589
+ }
590
+ // Implementation adapted from https://github.com/angular/components/blob/main/src/material/datepicker/year-view.ts#L366
591
+ _isMonthFilteredOut(month) {
592
+ if (!this.dateFilter) {
593
+ return true;
594
+ }
595
+ const firstOfMonth = this._dateAdapter.createDate(this._chosenYear, month, 1);
596
+ for (let date = firstOfMonth; this._dateAdapter.getMonth(date) == month; date = this._dateAdapter.addCalendarDays(date, 1)) {
597
+ if (this.dateFilter(date)) {
598
+ return true;
599
+ }
600
+ }
601
+ return false;
602
+ }
603
+ // Implementation adapted from https://github.com/angular/components/blob/main/src/material/datepicker/multi-year-view.ts#L351
604
+ _isYearFilteredOut(year) {
605
+ if (!this.dateFilter) {
606
+ return true;
607
+ }
608
+ const firstOfYear = this._dateAdapter.createDate(year, 1, 1);
609
+ for (let date = firstOfYear; this._dateAdapter.getYear(date) == year; date = this._dateAdapter.addCalendarDays(date, 1)) {
610
+ if (this.dateFilter(date)) {
611
+ return true;
612
+ }
613
+ }
614
+ return false;
615
+ }
616
+ /** Emits the selected date and sets it internally. */
617
+ _selectDate(day) {
618
+ this._chosenMonth = void 0;
619
+ this._chosenYear = void 0;
620
+ if (this._selected !== day) {
621
+ this._selected = day;
622
+ this._dateSelected.emit(this._dateAdapter.deserialize(day));
623
+ }
624
+ }
625
+ _assignActiveDate(date) {
626
+ if (this._min && this._dateAdapter.compareDate(this._min, date) > 0) {
627
+ this._activeDate = this._min;
628
+ return;
629
+ }
630
+ if (this._max && this._dateAdapter.compareDate(this._max, date) < 0) {
631
+ this._activeDate = this._max;
632
+ return;
633
+ }
634
+ this._activeDate = date;
635
+ }
636
+ /** Goes to the month identified by the shift. */
637
+ _goToDifferentMonth(months) {
638
+ this._init(this._dateAdapter.addCalendarMonths(this._activeDate, months));
639
+ }
640
+ _goToDifferentYear(years) {
641
+ this._chosenYear += years;
642
+ this._activeDate = this._dateAdapter.createDate(
643
+ this._chosenYear,
644
+ this._dateAdapter.getMonth(this._activeDate),
645
+ this._dateAdapter.getDate(this._activeDate)
646
+ );
647
+ this._init();
648
+ }
649
+ _goToDifferentYearRange(years) {
650
+ this._init(this._dateAdapter.addCalendarYears(this._activeDate, years));
651
+ }
652
+ _prevDisabled(prevDate) {
653
+ if (!this._min) {
654
+ return false;
655
+ }
656
+ return this._dateAdapter.compareDate(prevDate, this._min) < 0;
657
+ }
658
+ _nextDisabled(nextDate) {
659
+ if (!this._max) {
660
+ return false;
661
+ }
662
+ return this._dateAdapter.compareDate(nextDate, this._max) > 0;
663
+ }
664
+ /** Checks if the "previous month" button should be disabled. */
665
+ _previousMonthDisabled() {
666
+ const prevMonth = this._dateAdapter.addCalendarDays(
667
+ this._activeDate,
668
+ this._dateAdapter.getDate(this._activeDate) * -1
669
+ );
670
+ return this._prevDisabled(prevMonth);
671
+ }
672
+ /** Checks if the "next month" button should be disabled. */
673
+ _nextMonthDisabled() {
674
+ let nextMonth = this._dateAdapter.addCalendarMonths(this._activeDate, this._wide ? 2 : 1);
675
+ nextMonth = this._dateAdapter.createDate(
676
+ this._dateAdapter.getYear(nextMonth),
677
+ this._dateAdapter.getMonth(nextMonth),
678
+ 1
679
+ );
680
+ return this._nextDisabled(nextMonth);
681
+ }
682
+ _previousYearDisabled() {
683
+ const prevYear = this._dateAdapter.createDate(
684
+ this._dateAdapter.getYear(this._activeDate) - 1,
685
+ 12,
686
+ 31
687
+ );
688
+ return this._prevDisabled(prevYear);
689
+ }
690
+ _nextYearDisabled() {
691
+ const nextYear = this._dateAdapter.createDate(
692
+ this._dateAdapter.getYear(this._activeDate) + 1,
693
+ 1,
694
+ 1
695
+ );
696
+ return this._nextDisabled(nextYear);
697
+ }
698
+ _previousYearRangeDisabled() {
699
+ const prevYear = this._dateAdapter.createDate(this._years[0][0] - 1, 12, 31);
700
+ return this._prevDisabled(prevYear);
701
+ }
702
+ _nextYearRangeDisabled() {
703
+ const years = isBreakpoint("medium") && this.wide ? this._nextMonthYears : this._years;
704
+ const lastYearRange = years[years.length - 1];
705
+ const lastYear = lastYearRange[lastYearRange.length - 1];
706
+ const nextYear = this._dateAdapter.createDate(lastYear + 1, 1, 1);
707
+ return this._nextDisabled(nextYear);
708
+ }
709
+ _handleTableBlur(eventTarget) {
710
+ if ((eventTarget == null ? void 0 : eventTarget.localName) !== "button") {
711
+ this._setTabIndex();
712
+ }
713
+ }
714
+ _setTabIndex() {
715
+ Array.from(
716
+ this.shadowRoot.querySelectorAll('.sbb-calendar__cell[tabindex="0"]') ?? []
717
+ ).forEach((day) => day.tabIndex = -1);
718
+ const firstFocusable = this._getFirstFocusable();
719
+ if (firstFocusable) {
720
+ firstFocusable.tabIndex = 0;
721
+ }
722
+ }
723
+ _getFirstFocusable() {
724
+ const active = this._selected ? this._dateAdapter.deserialize(this._selected) : this.now;
725
+ let firstFocusable = this.shadowRoot.querySelector(".sbb-calendar__selected") ?? this.shadowRoot.querySelector(
726
+ `[data-day="${this._dateAdapter.getDate(active)} ${this._dateAdapter.getMonth(
727
+ active
728
+ )} ${this._dateAdapter.getYear(active)}"]`
729
+ ) ?? this.shadowRoot.querySelector(`[data-month="${this._dateAdapter.getMonth(active)}"]`) ?? this.shadowRoot.querySelector(`[data-year="${this._dateAdapter.getYear(active)}"]`);
730
+ if (!firstFocusable || (firstFocusable == null ? void 0 : firstFocusable.disabled)) {
731
+ firstFocusable = this.shadowRoot.querySelector(".sbb-calendar__cell:not([disabled])");
732
+ }
733
+ return firstFocusable || null;
734
+ }
735
+ _handleKeyboardEvent(event, day) {
736
+ if (isArrowKeyOrPageKeysPressed(event)) {
737
+ event.preventDefault();
738
+ }
739
+ const cells = this._cells;
740
+ const index = cells.findIndex((e) => e === event.target);
741
+ const nextEl = this._navigateByKeyboard(event, index, cells, day);
742
+ const activeEl = this.shadowRoot.activeElement;
743
+ if (nextEl !== activeEl) {
744
+ nextEl.tabIndex = 0;
745
+ nextEl == null ? void 0 : nextEl.focus();
746
+ activeEl.tabIndex = -1;
747
+ }
748
+ }
749
+ /**
750
+ * Gets the index of the element to move to, based on a list of elements (which can be potentially disabled),
751
+ * the keyboard input and the position of the current element in the list.
752
+ * In the day view, the `day?: Day` parameter is mandatory for calculation,
753
+ * while in month and year view it's not due to the fixed amount of rendered cells.
754
+ */
755
+ _navigateByKeyboard(evt, index, cells, day) {
756
+ const {
757
+ elementIndexForWideMode,
758
+ offsetForWideMode,
759
+ lastElementIndexForWideMode,
760
+ verticalOffset
761
+ } = this._calculateParametersForKeyboardNavigation(
762
+ cells,
763
+ index,
764
+ day
765
+ );
766
+ switch (evt.key) {
767
+ case "ArrowUp":
768
+ return this._findNext(cells, index, -verticalOffset);
769
+ case "ArrowDown":
770
+ return this._findNext(cells, index, verticalOffset);
771
+ case "ArrowLeft":
772
+ return this._findNext(cells, index, -1);
773
+ case "ArrowRight":
774
+ return this._findNext(cells, index, 1);
775
+ case "Home":
776
+ return this._findFirst(cells, offsetForWideMode);
777
+ case "PageUp":
778
+ return this._findFirstOnColumn(
779
+ cells,
780
+ elementIndexForWideMode,
781
+ offsetForWideMode,
782
+ verticalOffset
783
+ );
784
+ case "PageDown":
785
+ return this._findLastOnColumn(cells, index, lastElementIndexForWideMode, verticalOffset);
786
+ case "End":
787
+ return this._findLast(cells, lastElementIndexForWideMode - 1);
788
+ default:
789
+ return cells[index];
790
+ }
791
+ }
792
+ /**
793
+ * Calculates the parameter needed in keyboard navigation.
794
+ * Since three views are now available, the function creates and returns the correct parameters for each of them
795
+ * by considering the number of cells per each row and the correction for the wide mode.
796
+ * @param cells The array of rendered table cells; they are buttons that can represent days, months or years.
797
+ * @param index The starting element's index in the cell array.
798
+ * @param day (optional) Only in the day view, the day represented by the starting cell.
799
+ */
800
+ _calculateParametersForKeyboardNavigation(cells, index, day) {
801
+ switch (this._calendarView) {
802
+ case "day": {
803
+ const indexInView = +day.dayValue - 1;
804
+ return {
805
+ verticalOffset: DAYS_PER_ROW,
806
+ elementIndexForWideMode: indexInView,
807
+ offsetForWideMode: index - indexInView,
808
+ lastElementIndexForWideMode: index === indexInView ? this._dateAdapter.getNumDaysInMonth(
809
+ this._dateAdapter.addCalendarMonths(
810
+ this._dateAdapter.deserialize(day.value),
811
+ -1
812
+ )
813
+ ) : cells.length
814
+ };
815
+ }
816
+ case "month": {
817
+ return {
818
+ verticalOffset: MONTHS_PER_ROW,
819
+ elementIndexForWideMode: index,
820
+ offsetForWideMode: 0,
821
+ lastElementIndexForWideMode: 12
822
+ };
823
+ }
824
+ case "year": {
825
+ const offset = Math.trunc(index / YEARS_PER_PAGE) * YEARS_PER_PAGE;
826
+ const indexInView = offset === 0 ? index : index - YEARS_PER_PAGE;
827
+ return {
828
+ verticalOffset: YEARS_PER_ROW,
829
+ elementIndexForWideMode: indexInView,
830
+ offsetForWideMode: index - indexInView,
831
+ lastElementIndexForWideMode: offset === 0 ? YEARS_PER_PAGE : YEARS_PER_PAGE * 2
832
+ };
833
+ }
834
+ }
835
+ }
836
+ /**
837
+ * Gets the next element of the provided array starting from `index` by adding `delta`.
838
+ * If the found element is disabled, it continues adding `delta` until it finds an enabled one in the array bounds.
839
+ */
840
+ _findNext(days, index, delta) {
841
+ var _a;
842
+ let nextIndex = index + delta;
843
+ while (nextIndex < days.length && ((_a = days[nextIndex]) == null ? void 0 : _a.disabled)) {
844
+ nextIndex += delta;
845
+ }
846
+ return days[nextIndex] ?? days[index];
847
+ }
848
+ /** Find the first enabled element in the provided array. */
849
+ _findFirst(days, firstOfCurrentMonth) {
850
+ return !days[firstOfCurrentMonth].disabled ? days[firstOfCurrentMonth] : this._findNext(days, firstOfCurrentMonth, 1);
851
+ }
852
+ /** Find the last enabled element in the provided array. */
853
+ _findLast(days, lastOfCurrentMonth) {
854
+ return !days[lastOfCurrentMonth].disabled ? days[lastOfCurrentMonth] : this._findNext(days, lastOfCurrentMonth, -1);
855
+ }
856
+ /** Find the first enabled element in the same column of the provided array. */
857
+ _findFirstOnColumn(days, index, offset, verticalOffset) {
858
+ const nextIndex = index % verticalOffset + offset;
859
+ return !days[nextIndex].disabled ? days[nextIndex] : this._findNext(days, nextIndex, verticalOffset);
860
+ }
861
+ /** Find the last enabled element in the same column of the provided array. */
862
+ _findLastOnColumn(days, index, offset, verticalOffset) {
863
+ const nextIndex = index + Math.trunc((offset - index - 1) / verticalOffset) * verticalOffset;
864
+ return !days[nextIndex].disabled ? days[nextIndex] : this._findNext(days, nextIndex, -verticalOffset);
865
+ }
866
+ _resetToDayView() {
867
+ this._resetFocus = true;
868
+ this._activeDate = this.selected ?? this.now;
869
+ this._chosenYear = void 0;
870
+ this._chosenMonth = void 0;
871
+ this._nextCalendarView = "day";
872
+ this._removeTable();
873
+ }
874
+ /** Render the view for the day selection. */
875
+ _renderDayView() {
876
+ const nextMonthActiveDate = this._wide ? this._dateAdapter.addCalendarMonths(this._activeDate, 1) : void 0;
877
+ return html`
878
+ <div class="sbb-calendar__controls">
879
+ ${this._getArrow(
880
+ "left",
881
+ () => this._goToDifferentMonth(-1),
882
+ i18nPreviousMonth[this._language.current],
883
+ this._previousMonthDisabled()
884
+ )}
885
+ <div class="sbb-calendar__controls-month">
886
+ ${this._createLabelForDayView(this._activeDate)}
887
+ ${this._wide ? this._createLabelForDayView(nextMonthActiveDate) : nothing}
888
+ <sbb-screen-reader-only role="status">
889
+ ${this._createAriaLabelForDayView(this._activeDate, nextMonthActiveDate)}
890
+ </sbb-screen-reader-only>
891
+ </div>
892
+ ${this._getArrow(
893
+ "right",
894
+ () => this._goToDifferentMonth(1),
895
+ i18nNextMonth[this._language.current],
896
+ this._nextMonthDisabled()
897
+ )}
898
+ </div>
899
+ <div class="sbb-calendar__table-container sbb-calendar__table-day-view">
900
+ ${this._createDayTable(this._weeks)}
901
+ ${this._wide ? this._createDayTable(this._nextMonthWeeks) : nothing}
902
+ </div>
903
+ `;
904
+ }
905
+ /** Creates the label with the month for the daily view. */
906
+ _createLabelForDayView(d) {
907
+ const monthLabel = `${this._monthNames[this._dateAdapter.getMonth(d) - 1]} ${this._dateAdapter.getYear(d)}`;
908
+ return html`
909
+ <button
910
+ type="button"
911
+ id="sbb-calendar__date-selection"
912
+ class="sbb-calendar__controls-change-date"
913
+ aria-label="${i18nYearMonthSelection[this._language.current]} ${monthLabel}"
914
+ @click=${() => {
915
+ this._resetFocus = true;
916
+ this._nextCalendarView = "year";
917
+ this._removeTable();
918
+ }}
919
+ >
920
+ ${monthLabel}
921
+ <sbb-icon name="chevron-small-down-small"></sbb-icon>
922
+ </button>
923
+ `;
924
+ }
925
+ /** Creates the aria-label for the daily view. */
926
+ _createAriaLabelForDayView(...dates) {
927
+ let monthLabel = "";
928
+ for (const d of dates) {
929
+ if (d) {
930
+ monthLabel += `${this._monthNames[this._dateAdapter.getMonth(d) - 1]} ${this._dateAdapter.getYear(d)} `;
931
+ }
932
+ }
933
+ return monthLabel;
934
+ }
935
+ /** Creates the calendar table for the daily view. */
936
+ _createDayTable(weeks) {
937
+ return html`
938
+ <table
939
+ class="sbb-calendar__table"
940
+ @focusout=${(event) => this._handleTableBlur(event.relatedTarget)}
941
+ @animationend=${(e) => this._tableAnimationEnd(e)}
942
+ >
943
+ <thead class="sbb-calendar__table-header">
944
+ <tr class="sbb-calendar__table-header-row">
945
+ ${this._createDayTableHeader()}
946
+ </tr>
947
+ </thead>
948
+ <tbody class="sbb-calendar__table-body">
949
+ ${this._createDayTableBody(weeks)}
950
+ </tbody>
951
+ </table>
952
+ `;
953
+ }
954
+ /** Creates the table header with the month header cells. */
955
+ _createDayTableHeader() {
956
+ return this._weekdays.map(
957
+ (day) => html`
958
+ <th class="sbb-calendar__table-header">
959
+ <sbb-screen-reader-only>${day.long}</sbb-screen-reader-only>
960
+ <span aria-hidden="true">${day.narrow}</span>
961
+ </th>
962
+ `
963
+ );
964
+ }
965
+ /** Creates the table body with the day cells. For the first row, it also considers the possible day's offset. */
966
+ _createDayTableBody(weeks) {
967
+ const today = this._dateAdapter.toIso8601(this.now);
968
+ return weeks.map((week, rowIndex) => {
969
+ const firstRowOffset = DAYS_PER_ROW - week.length;
970
+ if (rowIndex === 0 && firstRowOffset) {
971
+ return html`
972
+ <tr>
973
+ ${[...Array(firstRowOffset).keys()].map(
974
+ () => html`<td
975
+ class="sbb-calendar__table-data"
976
+ data-day=${`0 ${week[0].monthValue} ${week[0].yearValue}`}
977
+ ></td>`
978
+ )}
979
+ ${this._createDayCells(week, today)}
980
+ </tr>
981
+ `;
982
+ }
983
+ return html`<tr>
984
+ ${this._createDayCells(week, today)}
985
+ </tr>`;
986
+ });
987
+ }
988
+ /** Creates the cells for the daily view. */
989
+ _createDayCells(week, today) {
990
+ return week.map((day) => {
991
+ const isOutOfRange = !this._isDayInRange(day.value);
992
+ const isFilteredOut = !this._dateFilter(this._dateAdapter.deserialize(day.value));
993
+ const selected = !!this._selected && day.value === this._selected;
994
+ const dayValue = `${day.dayValue} ${day.monthValue} ${day.yearValue}`;
995
+ const isToday = day.value === today;
996
+ return html`
997
+ <td
998
+ class=${classMap({
999
+ "sbb-calendar__table-data": true,
1000
+ "sbb-calendar__table-data-selected": selected
1001
+ })}
1002
+ >
1003
+ <button
1004
+ class=${classMap({
1005
+ "sbb-calendar__cell": true,
1006
+ "sbb-calendar__day": true,
1007
+ "sbb-calendar__cell-current": isToday,
1008
+ "sbb-calendar__selected": selected,
1009
+ "sbb-calendar__crossed-out": !isOutOfRange && isFilteredOut
1010
+ })}
1011
+ @click=${() => this._selectDate(day.value)}
1012
+ ?disabled=${isOutOfRange || isFilteredOut}
1013
+ aria-label=${this._dateAdapter.getAccessibilityFormatDate(day.value)}
1014
+ aria-pressed=${selected}
1015
+ aria-disabled=${isOutOfRange || isFilteredOut}
1016
+ aria-current=${isToday ? "date" : nothing}
1017
+ data-day=${dayValue || nothing}
1018
+ tabindex="-1"
1019
+ @keydown=${(evt) => this._handleKeyboardEvent(evt, day)}
1020
+ sbb-popover-close
1021
+ >
1022
+ ${day.dayValue}
1023
+ </button>
1024
+ </td>
1025
+ `;
1026
+ });
1027
+ }
1028
+ /** Render the view for the month selection. */
1029
+ _renderMonthView() {
1030
+ return html`
1031
+ <div class="sbb-calendar__controls">
1032
+ ${this._getArrow(
1033
+ "left",
1034
+ () => this._goToDifferentYear(-1),
1035
+ i18nPreviousYear[this._language.current],
1036
+ this._previousYearDisabled()
1037
+ )}
1038
+ <div class="sbb-calendar__controls-month">${this._createLabelForMonthView()}</div>
1039
+ ${this._getArrow(
1040
+ "right",
1041
+ () => this._goToDifferentYear(1),
1042
+ i18nNextYear[this._language.current],
1043
+ this._nextYearDisabled()
1044
+ )}
1045
+ </div>
1046
+ <div class="sbb-calendar__table-container sbb-calendar__table-month-view">
1047
+ ${this._createMonthTable(this._months, this._chosenYear)}
1048
+ ${this._wide ? this._createMonthTable(this._months, this._chosenYear + 1, true) : nothing}
1049
+ </div>
1050
+ `;
1051
+ }
1052
+ /** Creates the label with the year for the monthly view. */
1053
+ _createLabelForMonthView() {
1054
+ return html` <button
1055
+ type="button"
1056
+ id="sbb-calendar__month-selection"
1057
+ class="sbb-calendar__controls-change-date"
1058
+ aria-label=${`${i18nCalendarDateSelection[this._language.current]} ${this._chosenYear}`}
1059
+ @click=${() => this._resetToDayView()}
1060
+ >
1061
+ ${this._chosenYear} ${this._wide ? ` - ${this._chosenYear + 1}` : nothing}
1062
+ <sbb-icon name="chevron-small-up-small"></sbb-icon>
1063
+ </button>
1064
+ <sbb-screen-reader-only role="status"> ${this._chosenYear} </sbb-screen-reader-only>`;
1065
+ }
1066
+ /** Creates the table for the month selection view. */
1067
+ _createMonthTable(months, year, shiftRight = false) {
1068
+ return html`
1069
+ <table
1070
+ class="sbb-calendar__table"
1071
+ @animationend=${(e) => this._tableAnimationEnd(e)}
1072
+ >
1073
+ ${this._wide ? html`<thead class="sbb-calendar__table-header" aria-hidden="true">
1074
+ <tr class="sbb-calendar__table-header-row">
1075
+ <th class="sbb-calendar__table-header" colspan=${MONTHS_PER_ROW}>${year}</th>
1076
+ </tr>
1077
+ </thead>` : nothing}
1078
+ <tbody class="sbb-calendar__table-body">
1079
+ ${months.map(
1080
+ (row) => html`
1081
+ <tr>
1082
+ ${row.map((month) => {
1083
+ const isOutOfRange = !this._isMonthInRange(month.monthValue);
1084
+ const isFilteredOut = !this._isMonthFilteredOut(month.monthValue);
1085
+ const selectedMonth = this._selected ? this._dateAdapter.getMonth(this._dateAdapter.deserialize(this._selected)) : void 0;
1086
+ const selectedYear = this._selected ? this._dateAdapter.getYear(this._dateAdapter.deserialize(this._selected)) : void 0;
1087
+ const selected = !!this._selected && year === selectedYear && month.monthValue === selectedMonth;
1088
+ const isCurrentMonth = year === this._dateAdapter.getYear(this.now) && this._dateAdapter.getMonth(this.now) === month.monthValue;
1089
+ return html` <td
1090
+ class=${classMap({
1091
+ "sbb-calendar__table-data": true,
1092
+ "sbb-calendar__table-month": true
1093
+ })}
1094
+ >
1095
+ <button
1096
+ class=${classMap({
1097
+ "sbb-calendar__cell": true,
1098
+ "sbb-calendar__pill": true,
1099
+ "sbb-calendar__cell-current": isCurrentMonth,
1100
+ "sbb-calendar__crossed-out": !isOutOfRange && isFilteredOut,
1101
+ "sbb-calendar__selected": selected
1102
+ })}
1103
+ @click=${() => this._onMonthSelection(month.monthValue, year, shiftRight)}
1104
+ ?disabled=${isOutOfRange || isFilteredOut}
1105
+ aria-label=${`${month.longValue} ${this._chosenYear}`}
1106
+ aria-pressed=${selected}
1107
+ aria-disabled=${String(isOutOfRange || isFilteredOut)}
1108
+ tabindex="-1"
1109
+ data-month=${month.monthValue || nothing}
1110
+ @keydown=${(evt) => this._handleKeyboardEvent(evt)}
1111
+ >
1112
+ ${month.value}
1113
+ </button>
1114
+ </td>`;
1115
+ })}
1116
+ </tr>
1117
+ `
1118
+ )}
1119
+ </tbody>
1120
+ </table>
1121
+ `;
1122
+ }
1123
+ /** Select the month and change the view to day selection. */
1124
+ _onMonthSelection(month, year, shiftRight) {
1125
+ this._chosenMonth = shiftRight ? month + 1 : month;
1126
+ this._nextCalendarView = "day";
1127
+ this._init(
1128
+ this._dateAdapter.createDate(
1129
+ year,
1130
+ this._chosenMonth,
1131
+ this._dateAdapter.getDate(this._activeDate)
1132
+ )
1133
+ );
1134
+ this._removeTable();
1135
+ }
1136
+ /** Render the view for the year selection. */
1137
+ _renderYearView() {
1138
+ return html`
1139
+ <div class="sbb-calendar__controls">
1140
+ ${this._getArrow(
1141
+ "left",
1142
+ () => this._goToDifferentYearRange(-YEARS_PER_PAGE),
1143
+ i18nPreviousYearRange(YEARS_PER_PAGE)[this._language.current],
1144
+ this._previousYearRangeDisabled()
1145
+ )}
1146
+ <div class="sbb-calendar__controls-month">${this._createLabelForYearView()}</div>
1147
+ ${this._getArrow(
1148
+ "right",
1149
+ () => this._goToDifferentYearRange(YEARS_PER_PAGE),
1150
+ i18nNextYearRange(YEARS_PER_PAGE)[this._language.current],
1151
+ this._nextYearRangeDisabled()
1152
+ )}
1153
+ </div>
1154
+ <div class="sbb-calendar__table-container sbb-calendar__table-year-view">
1155
+ ${this._createYearTable(this._years)}
1156
+ ${this._wide ? this._createYearTable(this._nextMonthYears, true) : nothing}
1157
+ </div>
1158
+ `;
1159
+ }
1160
+ /** Creates the button arrow for all the views. */
1161
+ _getArrow(direction, click, ariaLabel, disabled) {
1162
+ return html`<sbb-secondary-button
1163
+ size="m"
1164
+ icon-name="chevron-small-${direction}-small"
1165
+ aria-label=${ariaLabel}
1166
+ @click=${click}
1167
+ ?disabled=${disabled}
1168
+ id="sbb-calendar__controls-${direction === "left" ? "previous" : "next"}"
1169
+ ></sbb-secondary-button>`;
1170
+ }
1171
+ /** Creates the label with the year range for the yearly view. */
1172
+ _createLabelForYearView() {
1173
+ const firstYear = this._years.flat()[0];
1174
+ const lastYearArray = (isBreakpoint("medium") && this.wide ? this._nextMonthYears : this._years).flat();
1175
+ const lastYear = lastYearArray[lastYearArray.length - 1];
1176
+ const yearLabel = `${firstYear} - ${lastYear}`;
1177
+ return html`
1178
+ <button
1179
+ type="button"
1180
+ id="sbb-calendar__year-selection"
1181
+ class="sbb-calendar__controls-change-date"
1182
+ aria-label="${i18nCalendarDateSelection[this._language.current]} ${yearLabel}"
1183
+ @click=${() => this._resetToDayView()}
1184
+ >
1185
+ ${yearLabel}
1186
+ <sbb-icon name="chevron-small-up-small"></sbb-icon>
1187
+ </button>
1188
+ <sbb-screen-reader-only role="status"> ${yearLabel} </sbb-screen-reader-only>
1189
+ `;
1190
+ }
1191
+ /** Creates the table for the year selection view. */
1192
+ _createYearTable(years, shiftRight = false) {
1193
+ const now = this.now;
1194
+ return html` <table
1195
+ class="sbb-calendar__table"
1196
+ @animationend=${(e) => this._tableAnimationEnd(e)}
1197
+ >
1198
+ <tbody class="sbb-calendar__table-body">
1199
+ ${years.map(
1200
+ (row) => html` <tr>
1201
+ ${row.map((year) => {
1202
+ const isOutOfRange = !this._isYearInRange(year);
1203
+ const isFilteredOut = !this._isYearFilteredOut(year);
1204
+ const selectedYear = this._selected ? this._dateAdapter.getYear(this._dateAdapter.deserialize(this._selected)) : void 0;
1205
+ const selected = !!this._selected && year === selectedYear;
1206
+ const isCurrentYear = this._dateAdapter.getYear(now) === year;
1207
+ return html` <td class="sbb-calendar__table-data sbb-calendar__table-year">
1208
+ <button
1209
+ class=${classMap({
1210
+ "sbb-calendar__cell": true,
1211
+ "sbb-calendar__pill": true,
1212
+ "sbb-calendar__cell-current": isCurrentYear,
1213
+ "sbb-calendar__crossed-out": !isOutOfRange && isFilteredOut,
1214
+ "sbb-calendar__selected": selected
1215
+ })}
1216
+ @click=${() => this._onYearSelection(year, shiftRight)}
1217
+ ?disabled=${isOutOfRange || isFilteredOut}
1218
+ aria-label=${year}
1219
+ aria-pressed=${selected}
1220
+ aria-disabled=${String(isOutOfRange || isFilteredOut)}
1221
+ tabindex="-1"
1222
+ data-year=${year || nothing}
1223
+ @keydown=${(evt) => this._handleKeyboardEvent(evt)}
1224
+ >
1225
+ ${year}
1226
+ </button>
1227
+ </td>`;
1228
+ })}
1229
+ </tr>`
1230
+ )}
1231
+ </tbody>
1232
+ </table>`;
1233
+ }
1234
+ /** Select the year and change the view to month selection. */
1235
+ _onYearSelection(year, rightSide) {
1236
+ this._chosenYear = rightSide ? year - 1 : year;
1237
+ this._nextCalendarView = "month";
1238
+ this._assignActiveDate(
1239
+ this._dateAdapter.createDate(
1240
+ this._chosenYear,
1241
+ this._dateAdapter.getMonth(this._activeDate),
1242
+ this._dateAdapter.getDate(this._activeDate)
1243
+ )
1244
+ );
1245
+ this._removeTable();
1246
+ }
1247
+ get _getView() {
1248
+ switch (this._calendarView) {
1249
+ case "year":
1250
+ return this._renderYearView();
1251
+ case "month":
1252
+ return this._renderMonthView();
1253
+ case "day":
1254
+ default:
1255
+ return this._renderDayView();
1256
+ }
1257
+ }
1258
+ _tableAnimationEnd(event) {
1259
+ const table = event.target;
1260
+ if (event.animationName === "hide") {
1261
+ table.classList.remove("sbb-calendar__table-hide");
1262
+ this._resetFocus = true;
1263
+ this._calendarView = this._nextCalendarView;
1264
+ } else if (event.animationName === "show") {
1265
+ this.removeAttribute("data-transition");
1266
+ }
1267
+ }
1268
+ _removeTable() {
1269
+ this.toggleAttribute("data-transition", true);
1270
+ this.shadowRoot.querySelectorAll("table").forEach(
1271
+ (e) => e.classList.toggle("sbb-calendar__table-hide")
1272
+ );
1273
+ }
1274
+ render() {
1275
+ return html`<div class="sbb-calendar__wrapper">${this._getView}</div>`;
1276
+ }
1277
+ };
1278
+ SbbCalendarElement.styles = style;
1279
+ SbbCalendarElement.events = {
1280
+ dateSelected: "dateSelected"
1281
+ };
1282
+ __decorateClass([
1283
+ property({ type: Boolean })
1284
+ ], SbbCalendarElement.prototype, "wide", 2);
1285
+ __decorateClass([
1286
+ property()
1287
+ ], SbbCalendarElement.prototype, "min", 1);
1288
+ __decorateClass([
1289
+ property()
1290
+ ], SbbCalendarElement.prototype, "max", 1);
1291
+ __decorateClass([
1292
+ property()
1293
+ ], SbbCalendarElement.prototype, "now", 1);
1294
+ __decorateClass([
1295
+ property()
1296
+ ], SbbCalendarElement.prototype, "selected", 1);
1297
+ __decorateClass([
1298
+ property({ attribute: "date-filter" })
1299
+ ], SbbCalendarElement.prototype, "dateFilter", 2);
1300
+ __decorateClass([
1301
+ state()
1302
+ ], SbbCalendarElement.prototype, "_activeDate", 2);
1303
+ __decorateClass([
1304
+ state()
1305
+ ], SbbCalendarElement.prototype, "_selected", 2);
1306
+ __decorateClass([
1307
+ state()
1308
+ ], SbbCalendarElement.prototype, "_wide", 1);
1309
+ __decorateClass([
1310
+ state()
1311
+ ], SbbCalendarElement.prototype, "_calendarView", 2);
1312
+ SbbCalendarElement = __decorateClass([
1313
+ customElement("sbb-calendar")
1314
+ ], SbbCalendarElement);
1315
+ export {
1316
+ SbbCalendarElement
1317
+ };
1318
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgTGl0RWxlbWVudCxcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIHByb3BlcnR5LCBzdGF0ZSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcbmltcG9ydCB7IGNsYXNzTWFwIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvY2xhc3MtbWFwLmpzJztcblxuaW1wb3J0IHsgaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkLCBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IgfSBmcm9tICcuLi9jb3JlL2ExMXkuanMnO1xuaW1wb3J0IHsgU2JiQ29ubmVjdGVkQWJvcnRDb250cm9sbGVyLCBTYmJMYW5ndWFnZUNvbnRyb2xsZXIgfSBmcm9tICcuLi9jb3JlL2NvbnRyb2xsZXJzLmpzJztcbmltcG9ydCB0eXBlIHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICcuLi9jb3JlL2RhdGV0aW1lLmpzJztcbmltcG9ydCB7XG4gIERBWVNfUEVSX1JPVyxcbiAgZGVmYXVsdERhdGVBZGFwdGVyLFxuICBNT05USFNfUEVSX1JPVyxcbiAgWUVBUlNfUEVSX1BBR0UsXG4gIFlFQVJTX1BFUl9ST1csXG59IGZyb20gJy4uL2NvcmUvZGF0ZXRpbWUuanMnO1xuaW1wb3J0IHsgaXNCcmVha3BvaW50IH0gZnJvbSAnLi4vY29yZS9kb20uanMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnLi4vY29yZS9ldmVudGluZy5qcyc7XG5pbXBvcnQge1xuICBpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uLFxuICBpMThuTmV4dE1vbnRoLFxuICBpMThuTmV4dFllYXIsXG4gIGkxOG5OZXh0WWVhclJhbmdlLFxuICBpMThuUHJldmlvdXNNb250aCxcbiAgaTE4blByZXZpb3VzWWVhcixcbiAgaTE4blByZXZpb3VzWWVhclJhbmdlLFxuICBpMThuWWVhck1vbnRoU2VsZWN0aW9uLFxufSBmcm9tICcuLi9jb3JlL2kxOG4uanMnO1xuaW1wb3J0IHR5cGUgeyBTYmJEYXRlTGlrZSB9IGZyb20gJy4uL2NvcmUvaW50ZXJmYWNlcy5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2NhbGVuZGFyLnNjc3M/bGl0JmlubGluZSc7XG5cbmltcG9ydCAnLi4vYnV0dG9uL3NlY29uZGFyeS1idXR0b24uanMnO1xuaW1wb3J0ICcuLi9pY29uLmpzJztcbmltcG9ydCAnLi4vc2NyZWVuLXJlYWRlci1vbmx5LmpzJztcblxuLyoqXG4gKiBJbiBrZXlib2FyZCBuYXZpZ2F0aW9uLCB0aGUgY2VsbCdzIGluZGV4IGFuZCB0aGUgZWxlbWVudCdzIGluZGV4IGluIGl0cyBtb250aCAvIHllYXIgYmF0Y2ggbXVzdCBiZSBkaXN0aW5ndWlzaGVkO1xuICogdGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgbmF2aWdhdGlvbiBpbiB0aGUgdmVydGljYWwgZGlyZWN0aW9uIHVzaW5nIHNvbWUga2V5cyBpcyByZXN0cmljdGVkIHRvIGEgc2luZ2xlIG1vbnRoIGZvciBkYXlzLFxuICogYW5kIHRvIGEgc2luZ2xlIHJhbmdlIG9mIDI0IHllYXJzIGZvciB5ZWFycy4gV2hpbGUgdGhlIGxhdHRlciBpcyBlYXN5IHRvIHVuZGVyc3RhbmQsIHRoZSBjZWxsJ3MgaW5kZXggaXMgdGhlIGluZGV4XG4gKiBvZiB0aGUgZWxlbWVudCBpbiB0aGUgYXJyYXkgb2YgYWxsIHRoZSByZW5kZXJlZCBjZWxscy4gSW4gbm9uLXdpZGUgbW9kZSwgdGhlcmUncyBubyBpc3N1ZSBiZWNhdXNlIHRoZSBlbGVtZW50IGluZGV4XG4gKiBpcyBiYXNpY2FsbHkgdGhlIGNlbGwncyBpbmRleCBwbHVzIDEgKGVsZW1lbnQgd2l0aCBpbmRleCAwIGRpc3BsYXlzIHRoZSAxc3Qgb2YgbW9udGgsIGVsZW1lbnQgd2l0aCBpbmRleCAxIGRpc3BsYXlzIHRoZSAybmQgYW5kIHNvIG9uKS5cbiAqIEluIHdpZGUgbW9kZSwgdGhlIGNlbGwncyBpbmRleCBjYW4gZ28gZnJvbSAwIHRvIDQ3IGZvciB5ZWFycyAodHdvIGJhdGNoZXMgb2YgMjQgeWVhcnMpLCBhbmQgZnJvbSAwIHRvIGEgbWF4aW11bSBvZiA2MSBmb3IgZGF5c1xuICogKHR3byBjb25zZWN1dGl2ZSBtb250aHMgb2YgMzEgZGF5cywgYXMgSnVseS1BdWd1c3Qgb3IgRGVjZW1iZXItSmFudWFyeSksIGRlcGVuZGluZyBvbiB0aGUgbGVuZ3RocyBvZiB0aGUgcmVuZGVyZWQgbW9udGhzO1xuICogdGhlIGVsZW1lbnQgaW5kZXggaW5zdGVhZCBnb2VzIGZyb20gMCB0byBhIG1heCB2YWx1ZSBvZiAyNCBmb3IgeWVhcnMgYW5kIDMxIGZvciBkYXlzLlxuICogTW9yZW92ZXIsIGluIGRheSB2aWV3LCB0aGUgaW5kZXggb2YgdGhlIGZpcnN0IGRheSBvZiB0aGUgc2Vjb25kIHJlbmRlcmVkIG1vbnRoIGFuZCB0aGUgaW5kZXggb2YgdGhlIGxhc3QgcmVuZGVyZWQgZGF5XG4gKiBjYW4gYWxzbyB2YXJ5IGRlcGVuZGluZyBvbiB3aGljaCBtb250aHMgYXJlIHJlbmRlcmVkOyBmb3IgSnVseS1BdWd1c3QgdGhleSBhcmUgZXF1YWxzIHRvIDMxIGFuZCA2MSwgd2hpbGUgZm9yIEZlYnJ1YXJ5LU1hcmNoIHRoZXkgYXJlIDI4IGFuZCA1OC5cbiAqIFNvLCBzb21lIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcmUgbmVlZGVkLCBiZXNpZGUgdGhlIGNlbGwncyBpbmRleCwgdG8gY29ycmVjdGx5IGNhbGN1bGF0ZSB0aGUgZWxlbWVudCB0byBuYXZpZ2F0ZSB0by5cbiAqL1xuaW50ZXJmYWNlIENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uUGFyYW1ldGVycyB7XG4gIC8qKiBUaGUgZWxlbWVudCBpbmRleCB3aXRoaW4gaXRzIG1vbnRoIChvciB5ZWFyIHJhbmdlKS4gKi9cbiAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IG51bWJlcjtcbiAgLyoqIEluIHdpZGUgbW9kZSwgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZWNvbmQgcGFuZWwsIG9yLCBhbHRlcm5hdGl2ZWx5LCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBmaXJzdCBwYW5lbC4gKi9cbiAgb2Zmc2V0Rm9yV2lkZU1vZGU6IG51bWJlcjtcbiAgLyoqIFRoZSBpbmRleCBvZiB0aGUgbGFzdCBlbGVtZW50IHdpdGhpbiB0aGUgZWxlbWVudCdzIG1vbnRoIChvciB5ZWFyIHJhbmdlKS4gKi9cbiAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBUaGUgbnVtYmVyIG9mIGNlbGxzIGRpc3BsYXllZCBpbiBhIHNpbmdsZSByb3csIGRlcGVuZGluZyBvbiB0aGUgcmVuZGVyZWQgdmlldy4gKi9cbiAgdmVydGljYWxPZmZzZXQ6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXkge1xuICB2YWx1ZTogc3RyaW5nO1xuICBkYXlWYWx1ZTogc3RyaW5nO1xuICBtb250aFZhbHVlOiBzdHJpbmc7XG4gIHllYXJWYWx1ZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRoIHtcbiAgdmFsdWU6IHN0cmluZztcbiAgbG9uZ1ZhbHVlOiBzdHJpbmc7XG4gIG1vbnRoVmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWVrZGF5IHtcbiAgbG9uZzogc3RyaW5nO1xuICBuYXJyb3c6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2FsZW5kYXJWaWV3ID0gJ2RheScgfCAnbW9udGgnIHwgJ3llYXInO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgY2FsZW5kYXIgd2hpY2ggYWxsb3dzIHRvIGNob29zZSBhIGRhdGUuXG4gKlxuICogQGV2ZW50IHtDdXN0b21FdmVudDxUPn0gZGF0ZVNlbGVjdGVkIC0gRXZlbnQgZW1pdHRlZCBvbiBkYXRlIHNlbGVjdGlvbi5cbiAqL1xuQGN1c3RvbUVsZW1lbnQoJ3NiYi1jYWxlbmRhcicpXG5leHBvcnQgY2xhc3MgU2JiQ2FsZW5kYXJFbGVtZW50PFQgPSBEYXRlPiBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgZGF0ZVNlbGVjdGVkOiAnZGF0ZVNlbGVjdGVkJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKiogSWYgc2V0IHRvIHRydWUsIHR3byBtb250aHMgYXJlIGRpc3BsYXllZCAqL1xuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pIHB1YmxpYyB3aWRlID0gZmFsc2U7XG5cbiAgLyoqIFRoZSBtaW5pbXVtIHZhbGlkIGRhdGUuIFRha2VzIFQgT2JqZWN0LCBJU09TdHJpbmcsIGFuZCBVbml4IFRpbWVzdGFtcCAobnVtYmVyIG9mIHNlY29uZHMgc2luY2UgSmFuIDEsIDE5NzApLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IG1pbih2YWx1ZTogU2JiRGF0ZUxpa2U8VD4gfCBudWxsKSB7XG4gICAgdGhpcy5fbWluID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSk7XG4gIH1cbiAgcHVibGljIGdldCBtaW4oKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9taW4gPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF9taW4/OiBUIHwgbnVsbDtcblxuICAvKiogVGhlIG1heGltdW0gdmFsaWQgZGF0ZS4gVGFrZXMgVCBPYmplY3QsIElTT1N0cmluZywgYW5kIFVuaXggVGltZXN0YW1wIChudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSBKYW4gMSwgMTk3MCkuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbWF4KHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX21heCA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbWF4KCk6IFQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4ID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfbWF4PzogVCB8IG51bGw7XG5cbiAgLyoqIEEgY29uZmlndXJlZCBkYXRlIHdoaWNoIGFjdHMgYXMgdGhlIGN1cnJlbnQgZGF0ZSBpbnN0ZWFkIG9mIHRoZSByZWFsIGN1cnJlbnQgZGF0ZS4gUmVjb21tZW5kZWQgZm9yIHRlc3RpbmcgcHVycG9zZXMuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbm93KHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX25vdyA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICB9XG4gIHB1YmxpYyBnZXQgbm93KCk6IFQge1xuICAgIHJldHVybiB0aGlzLl9ub3cgPz8gdGhpcy5fZGF0ZUFkYXB0ZXIudG9kYXkoKTtcbiAgfVxuICBwcml2YXRlIF9ub3c6IFQgfCBudWxsID0gbnVsbDtcblxuICAvKiogVGhlIHNlbGVjdGVkIGRhdGUuIFRha2VzIFQgT2JqZWN0LCBJU09TdHJpbmcsIGFuZCBVbml4IFRpbWVzdGFtcCAobnVtYmVyIG9mIHNlY29uZHMgc2luY2UgSmFuIDEsIDE5NzApLiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IHNlbGVjdGVkKHZhbHVlOiBTYmJEYXRlTGlrZTxUPiB8IHVuZGVmaW5lZCkge1xuICAgIHRoaXMuX3NlbGVjdGVkRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFZhbGlkRGF0ZU9yTnVsbCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh2YWx1ZSkpO1xuICAgIGlmIChcbiAgICAgICEhdGhpcy5fc2VsZWN0ZWREYXRlICYmXG4gICAgICAoIXRoaXMuX2lzRGF5SW5SYW5nZSh0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEodGhpcy5fc2VsZWN0ZWREYXRlKSkgfHxcbiAgICAgICAgdGhpcy5fZGF0ZUZpbHRlcih0aGlzLl9zZWxlY3RlZERhdGUpKVxuICAgICkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEodGhpcy5fc2VsZWN0ZWREYXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWQoKTogVCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZERhdGUgPz8gbnVsbDtcbiAgfVxuICBwcml2YXRlIF9zZWxlY3RlZERhdGU/OiBUIHwgbnVsbDtcblxuICAvKiogQSBmdW5jdGlvbiB1c2VkIHRvIGZpbHRlciBvdXQgZGF0ZXMuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2RhdGUtZmlsdGVyJyB9KSBwdWJsaWMgZGF0ZUZpbHRlcj86IChkYXRlOiBUIHwgbnVsbCkgPT4gYm9vbGVhbjtcblxuICBwcml2YXRlIF9kYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8VD4gPSBkZWZhdWx0RGF0ZUFkYXB0ZXIgYXMgdW5rbm93biBhcyBEYXRlQWRhcHRlcjxUPjtcblxuICAvKiogRXZlbnQgZW1pdHRlZCBvbiBkYXRlIHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfZGF0ZVNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8VD4gPSBuZXcgRXZlbnRFbWl0dGVyKFxuICAgIHRoaXMsXG4gICAgU2JiQ2FsZW5kYXJFbGVtZW50LmV2ZW50cy5kYXRlU2VsZWN0ZWQsXG4gICk7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRhdGUuICovXG4gIEBzdGF0ZSgpIHByaXZhdGUgX2FjdGl2ZURhdGU6IFQgPSB0aGlzLm5vdztcblxuICAvKiogVGhlIHNlbGVjdGVkIGRhdGUgYXMgSVNPU3RyaW5nLiAqL1xuICBAc3RhdGUoKSBwcml2YXRlIF9zZWxlY3RlZD86IHN0cmluZztcblxuICAvKiogVGhlIGN1cnJlbnQgd2lkZSBwcm9wZXJ0eSBjb25zaWRlcmluZyBwcm9wZXJ0eSB2YWx1ZSBhbmQgYnJlYWtwb2ludHMuIEZyb20gemVybyB0byBzbWFsbCBgd2lkZWAgaGFzIGFsd2F5cyB0byBiZSBmYWxzZS4gKi9cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBzZXQgX3dpZGUod2lkZTogYm9vbGVhbikge1xuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLXdpZGUnLCB3aWRlKTtcbiAgfVxuICBwcml2YXRlIGdldCBfd2lkZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoJ2RhdGEtd2lkZScpO1xuICB9XG5cbiAgQHN0YXRlKCkgcHJpdmF0ZSBfY2FsZW5kYXJWaWV3OiBDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICBwcml2YXRlIF9uZXh0Q2FsZW5kYXJWaWV3OiBDYWxlbmRhclZpZXcgPSAnZGF5JztcblxuICAvKiogQSBsaXN0IG9mIGRheXMsIGluIHR3byBmb3JtYXRzIChsb25nIGFuZCBzaW5nbGUgY2hhcikuICovXG4gIHByaXZhdGUgX3dlZWtkYXlzITogV2Vla2RheVtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB0aGUgZGF0ZXMgb2YgdGhlIG1vbnRoLiAqL1xuICBwcml2YXRlIF93ZWVrczogRGF5W11bXSA9IFtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyBtb250aHMuICovXG4gIHByaXZhdGUgX21vbnRocyE6IE1vbnRoW11bXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgeWVhcnMuICovXG4gIHByaXZhdGUgX3llYXJzITogbnVtYmVyW11bXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgeWVhcnMgZm9yIHRoZSB3aWRlIHZpZXcuICovXG4gIHByaXZhdGUgX25leHRNb250aFllYXJzITogbnVtYmVyW11bXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgdGhlIGRhdGVzIG9mIHRoZSBuZXh0IG1vbnRoLiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhXZWVrcyE6IERheVtdW107XG5cbiAgLyoqIEFuIGFycmF5IGNvbnRhaW5pbmcgYWxsIHRoZSBtb250aCBuYW1lcyBpbiB0aGUgY3VycmVudCBsYW5ndWFnZS4gKi9cbiAgcHJpdmF0ZSBfbW9udGhOYW1lczogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG5cbiAgLyoqIEEgbGlzdCBvZiBidXR0b25zIGNvcnJlc3BvbmRpbmcgdG8gZGF5cywgbW9udGhzIG9yIHllYXJzIGRlcGVuZGluZyBvbiB0aGUgdmlldy4gKi9cbiAgcHJpdmF0ZSBnZXQgX2NlbGxzKCk6IEhUTUxCdXR0b25FbGVtZW50W10ge1xuICAgIHJldHVybiBBcnJheS5mcm9tKFxuICAgICAgdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yQWxsKCcuc2JiLWNhbGVuZGFyX19jZWxsJykgPz8gW10sXG4gICAgKSBhcyBIVE1MQnV0dG9uRWxlbWVudFtdO1xuICB9XG5cbiAgLyoqIFRoZSBjaG9zZW4geWVhciBpbiB0aGUgeWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY2hvc2VuWWVhcj86IG51bWJlcjtcblxuICAvKiogVGhlIGNob3NlbiBtb250aCBpbiB0aGUgeWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY2hvc2VuTW9udGg/OiBudW1iZXI7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGZvY3VzIHNob3VsZCBiZSByZXNldCBvbiBmb2N1c0NlbGwuICovXG4gIHByaXZhdGUgX3Jlc2V0Rm9jdXMgPSBmYWxzZTtcblxuICBwcml2YXRlIF9pbml0aWFsaXplZCA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2Fib3J0ID0gbmV3IFNiYkNvbm5lY3RlZEFib3J0Q29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfbGFuZ3VhZ2UgPSBuZXcgU2JiTGFuZ3VhZ2VDb250cm9sbGVyKHRoaXMpLndpdGhIYW5kbGVyKCgpID0+IHtcbiAgICB0aGlzLl9tb250aE5hbWVzID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnbG9uZycpO1xuICAgIHRoaXMuX2NyZWF0ZU1vbnRoUm93cygpO1xuICB9KTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jcmVhdGVNb250aFJvd3MoKTtcbiAgICB0aGlzLl9zZXRXZWVrZGF5cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgX2RhdGVGaWx0ZXIoKTogKGRhdGU6IFQpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVGaWx0ZXIgPz8gKCgpID0+IHRydWUpO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgYWN0aXZlIG1vbnRoIGFjY29yZGluZyB0byB0aGUgbmV3IHN0YXRlIG9mIHRoZSBjYWxlbmRhci4gKi9cbiAgcHVibGljIHJlc2V0UG9zaXRpb24oKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NhbGVuZGFyVmlldyAhPT0gJ2RheScpIHtcbiAgICAgIHRoaXMuX3Jlc2V0VG9EYXlWaWV3KCk7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLnNlbGVjdGVkID8/IHRoaXMubm93O1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucmVzZXRQb3NpdGlvbigpO1xuICAgIHRoaXMuZm9jdXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2ZvY3VzQ2VsbCgpO1xuICAgIH07XG4gICAgZ2xvYmFsVGhpcy53aW5kb3c/LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpID0+IHRoaXMuX2luaXQoKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICAgIHNpZ25hbDogdGhpcy5fYWJvcnQuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnd2lkZScpKSB7XG4gICAgICB0aGlzLnJlc2V0UG9zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICAvLyBUaGUgY2FsZW5kYXIgbmVlZHMgdG8gY2FsY3VsYXRlIHRhYi1pbmRleGVzIG9uIGZpcnN0IHJlbmRlcixcbiAgICAvLyBhbmQgZXZlcnkgdGltZSBhIGRhdGUgaXMgc2VsZWN0ZWQgb3IgdGhlIG1vbnRoIHZpZXcgY2hhbmdlcy5cbiAgICB0aGlzLl9zZXRUYWJJbmRleCgpO1xuICAgIC8vIFdoZW4gY2hhbmdpbmcgdmlldyB0byB5ZWFyL21vbnRoLCB0aGUgdGFiaW5kZXggaXMgY2hhbmdlZCwgYnV0IHRoZSBmb2N1c2VkIGVsZW1lbnQgaXMgbm90LFxuICAgIC8vIHNvIGlmIHRoZSBuYXZpZ2F0aW9uIGlzIGRvbmUgdmlhIGtleWJvYXJkLCB0aGVyZSdzIHRoZSBuZWVkXG4gICAgLy8gdG8gY2FsbCB0aGUgYF9mb2N1c0NlbGwoKWAgbWV0aG9kIGV4cGxpY2l0bHkgdG8gY29ycmVjdGx5IHNldCB0aGUgZm9jdXMuXG4gICAgaWYgKHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICdrZXlib2FyZCcpIHtcbiAgICAgIHRoaXMuX2ZvY3VzQ2VsbCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBJbml0aWFsaXplcyB0aGUgY29tcG9uZW50LiAqL1xuICBwcml2YXRlIF9pbml0KGFjdGl2ZURhdGU/OiBUKTogdm9pZCB7XG4gICAgLy9EdWUgdG8gaXRzIGNvbXBsZXhpdHksIHRoZSBjYWxlZGFyIGlzIG9ubHkgaW5pdGlhbGl6ZWQgb24gY2xpZW50IHNpZGVcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlRGF0ZSkge1xuICAgICAgdGhpcy5fYXNzaWduQWN0aXZlRGF0ZShhY3RpdmVEYXRlKTtcbiAgICB9XG4gICAgdGhpcy5fd2lkZSA9IGlzQnJlYWtwb2ludCgnbWVkaXVtJykgJiYgdGhpcy53aWRlO1xuICAgIHRoaXMuX3dlZWtzID0gdGhpcy5fY3JlYXRlV2Vla1Jvd3ModGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgdGhpcy5feWVhcnMgPSB0aGlzLl9jcmVhdGVZZWFyUm93cygpO1xuICAgIHRoaXMuX25leHRNb250aFdlZWtzID0gW1tdXTtcbiAgICB0aGlzLl9uZXh0TW9udGhZZWFycyA9IFtbXV07XG4gICAgaWYgKHRoaXMuX3dpZGUpIHtcbiAgICAgIGNvbnN0IG5leHRNb250aERhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhck1vbnRocyh0aGlzLl9hY3RpdmVEYXRlLCAxKTtcbiAgICAgIHRoaXMuX25leHRNb250aFdlZWtzID0gdGhpcy5fY3JlYXRlV2Vla1Jvd3MobmV4dE1vbnRoRGF0ZSk7XG4gICAgICB0aGlzLl9uZXh0TW9udGhZZWFycyA9IHRoaXMuX2NyZWF0ZVllYXJSb3dzKFlFQVJTX1BFUl9QQUdFKTtcbiAgICB9XG4gICAgdGhpcy5faW5pdGlhbGl6ZWQgPSB0cnVlO1xuICB9XG5cbiAgLyoqIEZvY3VzZXMgb24gYSBkYXkgY2VsbCBwcmlvcml0aXppbmcgdGhlIHNlbGVjdGVkIGRheSwgdGhlIGN1cnJlbnQgZGF5LCBhbmQgbGFzdGx5LCB0aGUgZmlyc3Qgc2VsZWN0YWJsZSBkYXkuICovXG4gIHByaXZhdGUgX2ZvY3VzQ2VsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcmVzZXRGb2N1cykge1xuICAgICAgdGhpcy5fZ2V0Rmlyc3RGb2N1c2FibGUoKT8uZm9jdXMoKTtcbiAgICAgIHRoaXMuX3Jlc2V0Rm9jdXMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgYXJyYXkgb2Ygd2Vla2RheXMuICovXG4gIHByaXZhdGUgX3NldFdlZWtkYXlzKCk6IHZvaWQge1xuICAgIGNvbnN0IG5hcnJvd1dlZWtkYXlzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2Vla05hbWVzKCduYXJyb3cnKTtcbiAgICBjb25zdCBsb25nV2Vla2RheXM6IHN0cmluZ1tdID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF5T2ZXZWVrTmFtZXMoJ2xvbmcnKTtcbiAgICBjb25zdCB3ZWVrZGF5czogV2Vla2RheVtdID0gbG9uZ1dlZWtkYXlzLm1hcCgobG9uZzogc3RyaW5nLCBpOiBudW1iZXIpID0+ICh7XG4gICAgICBsb25nLFxuICAgICAgbmFycm93OiBuYXJyb3dXZWVrZGF5c1tpXSxcbiAgICB9KSk7XG5cbiAgICAvLyBSb3RhdGVzIHRoZSBsYWJlbHMgZm9yIGRheXMgb2YgdGhlIHdlZWsgYmFzZWQgb24gdGhlIGNvbmZpZ3VyZWQgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgIGNvbnN0IGZpcnN0RGF5T2ZXZWVrOiBudW1iZXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdERheU9mV2VlaygpO1xuICAgIHRoaXMuX3dlZWtkYXlzID0gd2Vla2RheXMuc2xpY2UoZmlyc3REYXlPZldlZWspLmNvbmNhdCh3ZWVrZGF5cy5zbGljZSgwLCBmaXJzdERheU9mV2VlaykpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIGVhY2ggd2Vlay4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlV2Vla1Jvd3ModmFsdWU6IFQpOiBEYXlbXVtdIHtcbiAgICBjb25zdCBkYXlzSW5Nb250aDogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodmFsdWUpO1xuICAgIGNvbnN0IGRhdGVOYW1lczogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlTmFtZXMoKTtcbiAgICBjb25zdCB3ZWVrczogRGF5W11bXSA9IFtbXV07XG4gICAgY29uc3Qgd2Vla09mZnNldCA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldEZpcnN0V2Vla09mZnNldCh2YWx1ZSk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGNlbGwgPSB3ZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XG4gICAgICBpZiAoY2VsbCA9PT0gREFZU19QRVJfUk9XKSB7XG4gICAgICAgIHdlZWtzLnB1c2goW10pO1xuICAgICAgICBjZWxsID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICBpICsgMSxcbiAgICAgICkhO1xuICAgICAgd2Vla3Nbd2Vla3MubGVuZ3RoIC0gMV0ucHVzaCh7XG4gICAgICAgIHZhbHVlOiB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoZGF0ZSksXG4gICAgICAgIGRheVZhbHVlOiBkYXRlTmFtZXNbaV0sXG4gICAgICAgIG1vbnRoVmFsdWU6IFN0cmluZyh0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkYXRlKSksXG4gICAgICAgIHllYXJWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZGF0ZSkpLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB3ZWVrcztcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSByb3dzIGZvciB0aGUgbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZU1vbnRoUm93cygpOiB2b2lkIHtcbiAgICBjb25zdCBzaG9ydE5hbWVzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoTmFtZXMoJ3Nob3J0Jyk7XG4gICAgY29uc3QgbW9udGhzOiBNb250aFtdID0gbmV3IEFycmF5KDEyKS5maWxsKG51bGwpLm1hcChcbiAgICAgIChfLCBpOiBudW1iZXIpOiBNb250aCA9PiAoe1xuICAgICAgICB2YWx1ZTogc2hvcnROYW1lc1tpXSxcbiAgICAgICAgbG9uZ1ZhbHVlOiB0aGlzLl9tb250aE5hbWVzW2ldLFxuICAgICAgICBtb250aFZhbHVlOiBpICsgMSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gMTIgLyBNT05USFNfUEVSX1JPVztcbiAgICBjb25zdCBtb250aEFycmF5OiBNb250aFtdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBtb250aEFycmF5LnB1c2gobW9udGhzLnNsaWNlKE1PTlRIU19QRVJfUk9XICogaSwgTU9OVEhTX1BFUl9ST1cgKiAoaSArIDEpKSk7XG4gICAgfVxuICAgIHRoaXMuX21vbnRocyA9IG1vbnRoQXJyYXk7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgcm93cyBmb3IgdGhlIHllYXIgc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZVllYXJSb3dzKG9mZnNldDogbnVtYmVyID0gMCk6IG51bWJlcltdW10ge1xuICAgIGNvbnN0IHN0YXJ0VmFsdWVZZWFyVmlldzogbnVtYmVyID0gdGhpcy5fZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk7XG4gICAgY29uc3QgYWxsWWVhcnM6IG51bWJlcltdID0gbmV3IEFycmF5KFlFQVJTX1BFUl9QQUdFKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGk6IG51bWJlcikgPT4gc3RhcnRWYWx1ZVllYXJWaWV3ICsgb2Zmc2V0ICsgaSk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gWUVBUlNfUEVSX1BBR0UgLyBZRUFSU19QRVJfUk9XO1xuICAgIGNvbnN0IHllYXJBcnJheTogbnVtYmVyW11bXSA9IFtdO1xuICAgIGZvciAobGV0IGk6IG51bWJlciA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIHllYXJBcnJheS5wdXNoKGFsbFllYXJzLnNsaWNlKFlFQVJTX1BFUl9ST1cgKiBpLCBZRUFSU19QRVJfUk9XICogKGkgKyAxKSkpO1xuICAgIH1cbiAgICByZXR1cm4geWVhckFycmF5O1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIGZpcnN0IHllYXIgdGhhdCB3aWxsIGJlIHNob3duIGluIHRoZSB5ZWFyIHNlbGVjdGlvbiBwYW5lbC5cbiAgICogSWYgYG1pbkRhdGVgIGFuZCBgbWF4RGF0ZWAgYXJlIGJvdGggbnVsbCwgdGhlIHN0YXJ0aW5nIHllYXIgaXMgY2FsY3VsYXRlZCBhc1xuICAgKiB0aGUgbXVsdGlwbGUgb2YgWUVBUlNfUEVSX1BBR0UgY2xvc2VzdCB0byBhbmQgbGVzcyB0aGFuIGFjdGl2ZURhdGUsXG4gICAqIGUuZy4sIHdpdGggYFlFQVJTX1BFUl9QQUdFYCA9IDI0IGFuZCBgYWN0aXZlRGF0ZWAgPSAyMDIwLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gMjAxNiAoMjQgKiA4MyksXG4gICAqIHdoaWxlIHdpdGggYGFjdGl2ZURhdGVgID0gMjAwMCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDE5OTIgKDI0ICogODIpLlxuICAgKiBJZiBgbWluRGF0ZWAgaXMgbm90IG51bGwsIGl0IHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgeWVhcjsgaWYgYG1heERhdGVgIGlzIG5vdCBudWxsLFxuICAgKiBpdCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHllYXIgbWludXMgYFlFQVJTX1BFUl9QQUdFYCwgc28gdGhhdCB0aGUgYG1heERhdGVgIGlzIHRoZSBsYXN0IHJlbmRlcmVkIHllYXIuXG4gICAqIElmIGJvdGggYXJlIG5vdCBudWxsLCBgbWF4RGF0ZWAgaGFzIHByaW9yaXR5IG92ZXIgYG1pbkRhdGVgLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0U3RhcnRWYWx1ZVllYXJWaWV3KCk6IG51bWJlciB7XG4gICAgbGV0IHN0YXJ0aW5nWWVhciA9IDA7XG4gICAgaWYgKHRoaXMubWF4KSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWF4KSAtIFlFQVJTX1BFUl9QQUdFICsgMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubWluKSB7XG4gICAgICBzdGFydGluZ1llYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMubWluKTtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlWWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5fYWN0aXZlRGF0ZSk7XG4gICAgcmV0dXJuIChcbiAgICAgIGFjdGl2ZVllYXIgLVxuICAgICAgKCgoKGFjdGl2ZVllYXIgLSBzdGFydGluZ1llYXIpICUgWUVBUlNfUEVSX1BBR0UpICsgWUVBUlNfUEVSX1BBR0UpICUgWUVBUlNfUEVSX1BBR0UpXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgZGF0ZSBpcyB3aXRoaW4gdGhlIG1pbi1tYXggcmFuZ2UuICovXG4gIHByaXZhdGUgX2lzRGF5SW5SYW5nZShkYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuX21pbiAmJiAhdGhpcy5fbWF4KSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgY29uc3QgaXNCZWZvcmVNaW46IGJvb2xlYW4gPVxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuaXNWYWxpZCh0aGlzLl9taW4pICYmXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl9taW4hLCB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShkYXRlKSEpID4gMDtcbiAgICBjb25zdCBpc0FmdGVyTWF4OiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWF4KSAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUodGhpcy5fbWF4ISwgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZSkhKSA8IDA7XG4gICAgcmV0dXJuICEoaXNCZWZvcmVNaW4gfHwgaXNBZnRlck1heCk7XG4gIH1cblxuICBwcml2YXRlIF9pc01vbnRoSW5SYW5nZShtb250aDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9taW4gJiYgIXRoaXMuX21heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzQmVmb3JlTWluOiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWluKSAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9taW4hKSA+PSB0aGlzLl9jaG9zZW5ZZWFyISAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fbWluISkgPiBtb250aDtcbiAgICBjb25zdCBpc0FmdGVyTWF4OiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWF4KSAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9tYXghKSA8PSB0aGlzLl9jaG9zZW5ZZWFyISAmJlxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodGhpcy5fbWF4ISkgPCBtb250aDtcbiAgICByZXR1cm4gIShpc0JlZm9yZU1pbiB8fCBpc0FmdGVyTWF4KTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzWWVhckluUmFuZ2UoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9taW4gJiYgIXRoaXMuX21heCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNvbnN0IGlzQmVmb3JlTWluOiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWluKSAmJiB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX21pbiEpID4geWVhcjtcbiAgICBjb25zdCBpc0FmdGVyTWF4OiBib29sZWFuID1cbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmlzVmFsaWQodGhpcy5fbWF4KSAmJiB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX21heCEpIDwgeWVhcjtcbiAgICByZXR1cm4gIShpc0JlZm9yZU1pbiB8fCBpc0FmdGVyTWF4KTtcbiAgfVxuXG4gIC8vIEltcGxlbWVudGF0aW9uIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9jb21wb25lbnRzL2Jsb2IvbWFpbi9zcmMvbWF0ZXJpYWwvZGF0ZXBpY2tlci95ZWFyLXZpZXcudHMjTDM2NlxuICBwcml2YXRlIF9pc01vbnRoRmlsdGVyZWRPdXQobW9udGg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5kYXRlRmlsdGVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBmaXJzdE9mTW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKHRoaXMuX2Nob3NlblllYXIhLCBtb250aCwgMSkhO1xuICAgIGZvciAoXG4gICAgICBsZXQgZGF0ZTogVCA9IGZpcnN0T2ZNb250aDtcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGUpID09IG1vbnRoO1xuICAgICAgZGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhkYXRlLCAxKVxuICAgICkge1xuICAgICAgaWYgKHRoaXMuZGF0ZUZpbHRlcihkYXRlKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBJbXBsZW1lbnRhdGlvbiBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvY29tcG9uZW50cy9ibG9iL21haW4vc3JjL21hdGVyaWFsL2RhdGVwaWNrZXIvbXVsdGkteWVhci12aWV3LnRzI0wzNTFcbiAgcHJpdmF0ZSBfaXNZZWFyRmlsdGVyZWRPdXQoeWVhcjogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmRhdGVGaWx0ZXIpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGZpcnN0T2ZZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCAxLCAxKSE7XG4gICAgZm9yIChcbiAgICAgIGxldCBkYXRlOiBUID0gZmlyc3RPZlllYXI7XG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGRhdGUpID09IHllYXI7XG4gICAgICBkYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKGRhdGUsIDEpXG4gICAgKSB7XG4gICAgICBpZiAodGhpcy5kYXRlRmlsdGVyKGRhdGUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBFbWl0cyB0aGUgc2VsZWN0ZWQgZGF0ZSBhbmQgc2V0cyBpdCBpbnRlcm5hbGx5LiAqL1xuICBwcml2YXRlIF9zZWxlY3REYXRlKGRheTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fY2hvc2VuWWVhciA9IHVuZGVmaW5lZDtcbiAgICBpZiAodGhpcy5fc2VsZWN0ZWQgIT09IGRheSkge1xuICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBkYXk7XG4gICAgICB0aGlzLl9kYXRlU2VsZWN0ZWQuZW1pdCh0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShkYXkpISk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfYXNzaWduQWN0aXZlRGF0ZShkYXRlOiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21pbiAmJiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl9taW4sIGRhdGUpID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX21pbjtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX21heCAmJiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLl9tYXgsIGRhdGUpIDwgMCkge1xuICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX21heDtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IGRhdGU7XG4gIH1cblxuICAvKiogR29lcyB0byB0aGUgbW9udGggaWRlbnRpZmllZCBieSB0aGUgc2hpZnQuICovXG4gIHByaXZhdGUgX2dvVG9EaWZmZXJlbnRNb250aChtb250aHM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luaXQodGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgbW9udGhzKSk7XG4gIH1cblxuICBwcml2YXRlIF9nb1RvRGlmZmVyZW50WWVhcih5ZWFyczogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuWWVhciEgKz0geWVhcnM7XG4gICAgLy8gQ2FuJ3QgdXNlIGBfYXNzaWduQWN0aXZlRGF0ZSguLi4pYCBoZXJlLCBiZWNhdXNlIGl0IHdpbGwgc2V0IGl0IHRvIG1pbi9tYXggdmFsdWUgaWYgYXJndW1lbnQgaXMgb3V0IG9mIHJhbmdlXG4gICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9jaG9zZW5ZZWFyISxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2FjdGl2ZURhdGUpLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICApO1xuICAgIHRoaXMuX2luaXQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2dvVG9EaWZmZXJlbnRZZWFyUmFuZ2UoeWVhcnM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2luaXQodGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJZZWFycyh0aGlzLl9hY3RpdmVEYXRlLCB5ZWFycykpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJldkRpc2FibGVkKHByZXZEYXRlOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLl9taW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHByZXZEYXRlLCB0aGlzLl9taW4pIDwgMDtcbiAgfVxuXG4gIHByaXZhdGUgX25leHREaXNhYmxlZChuZXh0RGF0ZTogVCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5fbWF4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZShuZXh0RGF0ZSwgdGhpcy5fbWF4KSA+IDA7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcInByZXZpb3VzIG1vbnRoXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgcHJpdmF0ZSBfcHJldmlvdXNNb250aERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuX2FjdGl2ZURhdGUpICogLTEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZNb250aCk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcIm5leHQgbW9udGhcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBsZXQgbmV4dE1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgdGhpcy5fd2lkZSA/IDIgOiAxKTtcbiAgICBuZXh0TW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihuZXh0TW9udGgpLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgobmV4dE1vbnRoKSxcbiAgICAgIDEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fbmV4dERpc2FibGVkKG5leHRNb250aCk7XG4gIH1cblxuICBwcml2YXRlIF9wcmV2aW91c1llYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpIC0gMSxcbiAgICAgIDEyLFxuICAgICAgMzEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZZZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgX25leHRZZWFyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbmV4dFllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9hY3RpdmVEYXRlKSArIDEsXG4gICAgICAxLFxuICAgICAgMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dFllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJldmlvdXNZZWFyUmFuZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5feWVhcnNbMF1bMF0gLSAxLCAxMiwgMzEpO1xuICAgIHJldHVybiB0aGlzLl9wcmV2RGlzYWJsZWQocHJldlllYXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmV4dFllYXJSYW5nZURpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHllYXJzID0gaXNCcmVha3BvaW50KCdtZWRpdW0nKSAmJiB0aGlzLndpZGUgPyB0aGlzLl9uZXh0TW9udGhZZWFycyA6IHRoaXMuX3llYXJzO1xuICAgIGNvbnN0IGxhc3RZZWFyUmFuZ2UgPSB5ZWFyc1t5ZWFycy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBsYXN0WWVhciA9IGxhc3RZZWFyUmFuZ2VbbGFzdFllYXJSYW5nZS5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUobGFzdFllYXIgKyAxLCAxLCAxKTtcbiAgICByZXR1cm4gdGhpcy5fbmV4dERpc2FibGVkKG5leHRZZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVRhYmxlQmx1cihldmVudFRhcmdldDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnRUYXJnZXQ/LmxvY2FsTmFtZSAhPT0gJ2J1dHRvbicpIHtcbiAgICAgIHRoaXMuX3NldFRhYkluZGV4KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfc2V0VGFiSW5kZXgoKTogdm9pZCB7XG4gICAgQXJyYXkuZnJvbShcbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvckFsbCgnLnNiYi1jYWxlbmRhcl9fY2VsbFt0YWJpbmRleD1cIjBcIl0nKSA/PyBbXSxcbiAgICApLmZvckVhY2goKGRheSkgPT4gKChkYXkgYXMgSFRNTEVsZW1lbnQpLnRhYkluZGV4ID0gLTEpKTtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IHRoaXMuX2dldEZpcnN0Rm9jdXNhYmxlKCk7XG4gICAgaWYgKGZpcnN0Rm9jdXNhYmxlKSB7XG4gICAgICBmaXJzdEZvY3VzYWJsZS50YWJJbmRleCA9IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0Rmlyc3RGb2N1c2FibGUoKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX3NlbGVjdGVkID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUodGhpcy5fc2VsZWN0ZWQpISA6IHRoaXMubm93O1xuICAgIGxldCBmaXJzdEZvY3VzYWJsZSA9XG4gICAgICB0aGlzLnNoYWRvd1Jvb3QhLnF1ZXJ5U2VsZWN0b3IoJy5zYmItY2FsZW5kYXJfX3NlbGVjdGVkJykgPz9cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcihcbiAgICAgICAgYFtkYXRhLWRheT1cIiR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZShhY3RpdmUpfSAke3RoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKFxuICAgICAgICAgIGFjdGl2ZSxcbiAgICAgICAgKX0gJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGFjdGl2ZSl9XCJdYCxcbiAgICAgICkgPz9cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcihgW2RhdGEtbW9udGg9XCIke3RoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGFjdGl2ZSl9XCJdYCkgPz9cbiAgICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvcihgW2RhdGEteWVhcj1cIiR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihhY3RpdmUpfVwiXWApO1xuICAgIGlmICghZmlyc3RGb2N1c2FibGUgfHwgKGZpcnN0Rm9jdXNhYmxlIGFzIEhUTUxCdXR0b25FbGVtZW50KT8uZGlzYWJsZWQpIHtcbiAgICAgIGZpcnN0Rm9jdXNhYmxlID0gdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yKCcuc2JiLWNhbGVuZGFyX19jZWxsOm5vdChbZGlzYWJsZWRdKScpO1xuICAgIH1cbiAgICByZXR1cm4gKGZpcnN0Rm9jdXNhYmxlIGFzIEhUTUxCdXR0b25FbGVtZW50KSB8fCBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlS2V5Ym9hcmRFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCwgZGF5PzogRGF5KTogdm9pZCB7XG4gICAgaWYgKGlzQXJyb3dLZXlPclBhZ2VLZXlzUHJlc3NlZChldmVudCkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIC8vIEdldHMgdGhlIGN1cnJlbnRseSByZW5kZXJlZCB0YWJsZSdzIGNlbGw7XG4gICAgLy8gdGhleSBjb3VsZCBiZSBkYXlzLCBtb250aHMgb3IgeWVhcnMgYmFzZWQgb24gdGhlIGN1cnJlbnQgc2VsZWN0aW9uIHZpZXcuXG4gICAgLy8gSWYgYHdpZGVgIGlzIHRydWUsIHllYXJzIGFyZSBkb3VibGVkIGluIG51bWJlciBhbmQgZGF5cyBhcmUgKHJvdWdobHkpIGRvdWJsZWQgdG9vLCBhZmZlY3RpbmcgdGhlIGBpbmRleGAgY2FsY3VsYXRpb24uXG4gICAgY29uc3QgY2VsbHM6IEhUTUxCdXR0b25FbGVtZW50W10gPSB0aGlzLl9jZWxscztcbiAgICBjb25zdCBpbmRleDogbnVtYmVyID0gY2VsbHMuZmluZEluZGV4KChlOiBIVE1MQnV0dG9uRWxlbWVudCkgPT4gZSA9PT0gZXZlbnQudGFyZ2V0KTtcbiAgICBjb25zdCBuZXh0RWw6IEhUTUxCdXR0b25FbGVtZW50ID0gdGhpcy5fbmF2aWdhdGVCeUtleWJvYXJkKGV2ZW50LCBpbmRleCwgY2VsbHMsIGRheSk7XG4gICAgY29uc3QgYWN0aXZlRWw6IEhUTUxCdXR0b25FbGVtZW50ID0gdGhpcy5zaGFkb3dSb290IS5hY3RpdmVFbGVtZW50IGFzIEhUTUxCdXR0b25FbGVtZW50O1xuICAgIGlmIChuZXh0RWwgIT09IGFjdGl2ZUVsKSB7XG4gICAgICAobmV4dEVsIGFzIEhUTUxCdXR0b25FbGVtZW50KS50YWJJbmRleCA9IDA7XG4gICAgICBuZXh0RWw/LmZvY3VzKCk7XG4gICAgICAoYWN0aXZlRWwgYXMgSFRNTEJ1dHRvbkVsZW1lbnQpLnRhYkluZGV4ID0gLTE7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIG1vdmUgdG8sIGJhc2VkIG9uIGEgbGlzdCBvZiBlbGVtZW50cyAod2hpY2ggY2FuIGJlIHBvdGVudGlhbGx5IGRpc2FibGVkKSxcbiAgICogdGhlIGtleWJvYXJkIGlucHV0IGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpbiB0aGUgbGlzdC5cbiAgICogSW4gdGhlIGRheSB2aWV3LCB0aGUgYGRheT86IERheWAgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgY2FsY3VsYXRpb24sXG4gICAqIHdoaWxlIGluIG1vbnRoIGFuZCB5ZWFyIHZpZXcgaXQncyBub3QgZHVlIHRvIHRoZSBmaXhlZCBhbW91bnQgb2YgcmVuZGVyZWQgY2VsbHMuXG4gICAqL1xuICBwcml2YXRlIF9uYXZpZ2F0ZUJ5S2V5Ym9hcmQoXG4gICAgZXZ0OiBLZXlib2FyZEV2ZW50LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2VsbHM6IEhUTUxCdXR0b25FbGVtZW50W10sXG4gICAgZGF5PzogRGF5LFxuICApOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgY29uc3Qge1xuICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGUsXG4gICAgICBvZmZzZXRGb3JXaWRlTW9kZSxcbiAgICAgIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgIHZlcnRpY2FsT2Zmc2V0LFxuICAgIH06IENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHRoaXMuX2NhbGN1bGF0ZVBhcmFtZXRlcnNGb3JLZXlib2FyZE5hdmlnYXRpb24oXG4gICAgICBjZWxscyxcbiAgICAgIGluZGV4LFxuICAgICAgZGF5LFxuICAgICk7XG5cbiAgICBzd2l0Y2ggKGV2dC5rZXkpIHtcbiAgICAgIGNhc2UgJ0Fycm93VXAnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE5leHQoY2VsbHMsIGluZGV4LCAtdmVydGljYWxPZmZzZXQpO1xuICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgdmVydGljYWxPZmZzZXQpO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgLTEpO1xuICAgICAgY2FzZSAnQXJyb3dSaWdodCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIDEpO1xuICAgICAgY2FzZSAnSG9tZSc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRmlyc3QoY2VsbHMsIG9mZnNldEZvcldpZGVNb2RlKTtcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRmlyc3RPbkNvbHVtbihcbiAgICAgICAgICBjZWxscyxcbiAgICAgICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgICAgICBvZmZzZXRGb3JXaWRlTW9kZSxcbiAgICAgICAgICB2ZXJ0aWNhbE9mZnNldCxcbiAgICAgICAgKTtcbiAgICAgIGNhc2UgJ1BhZ2VEb3duJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmRMYXN0T25Db2x1bW4oY2VsbHMsIGluZGV4LCBsYXN0RWxlbWVudEluZGV4Rm9yV2lkZU1vZGUsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgICAgIGNhc2UgJ0VuZCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTGFzdChjZWxscywgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlIC0gMSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2VsbHNbaW5kZXhdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwYXJhbWV0ZXIgbmVlZGVkIGluIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gICAqIFNpbmNlIHRocmVlIHZpZXdzIGFyZSBub3cgYXZhaWxhYmxlLCB0aGUgZnVuY3Rpb24gY3JlYXRlcyBhbmQgcmV0dXJucyB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIGZvciBlYWNoIG9mIHRoZW1cbiAgICogYnkgY29uc2lkZXJpbmcgdGhlIG51bWJlciBvZiBjZWxscyBwZXIgZWFjaCByb3cgYW5kIHRoZSBjb3JyZWN0aW9uIGZvciB0aGUgd2lkZSBtb2RlLlxuICAgKiBAcGFyYW0gY2VsbHMgVGhlIGFycmF5IG9mIHJlbmRlcmVkIHRhYmxlIGNlbGxzOyB0aGV5IGFyZSBidXR0b25zIHRoYXQgY2FuIHJlcHJlc2VudCBkYXlzLCBtb250aHMgb3IgeWVhcnMuXG4gICAqIEBwYXJhbSBpbmRleCBUaGUgc3RhcnRpbmcgZWxlbWVudCdzIGluZGV4IGluIHRoZSBjZWxsIGFycmF5LlxuICAgKiBAcGFyYW0gZGF5IChvcHRpb25hbCkgT25seSBpbiB0aGUgZGF5IHZpZXcsIHRoZSBkYXkgcmVwcmVzZW50ZWQgYnkgdGhlIHN0YXJ0aW5nIGNlbGwuXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVQYXJhbWV0ZXJzRm9yS2V5Ym9hcmROYXZpZ2F0aW9uKFxuICAgIGNlbGxzOiBIVE1MQnV0dG9uRWxlbWVudFtdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZGF5PzogRGF5LFxuICApOiBDYWxlbmRhcktleWJvYXJkTmF2aWdhdGlvblBhcmFtZXRlcnMge1xuICAgIHN3aXRjaCAodGhpcy5fY2FsZW5kYXJWaWV3KSB7XG4gICAgICBjYXNlICdkYXknOiB7XG4gICAgICAgIGNvbnN0IGluZGV4SW5WaWV3ID0gK2RheSEuZGF5VmFsdWUgLSAxO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZlcnRpY2FsT2Zmc2V0OiBEQVlTX1BFUl9ST1csXG4gICAgICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IGluZGV4SW5WaWV3LFxuICAgICAgICAgIG9mZnNldEZvcldpZGVNb2RlOiBpbmRleCAtIGluZGV4SW5WaWV3LFxuICAgICAgICAgIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZTpcbiAgICAgICAgICAgIGluZGV4ID09PSBpbmRleEluVmlld1xuICAgICAgICAgICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmdldE51bURheXNJbk1vbnRoKFxuICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHMoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRheSEudmFsdWUpISxcbiAgICAgICAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBjZWxscy5sZW5ndGgsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICAvLyBNb250aCB2aWV3IGlzIG5vdCBkZXBlbmRlbnQgZnJvbSBgd2lkZWAgdmFsdWUsIHNvIHNvbWUgcGFyYW1ldGVycyBhcmUgZml4ZWQuXG4gICAgICBjYXNlICdtb250aCc6IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2ZXJ0aWNhbE9mZnNldDogTU9OVEhTX1BFUl9ST1csXG4gICAgICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IGluZGV4LFxuICAgICAgICAgIG9mZnNldEZvcldpZGVNb2RlOiAwLFxuICAgICAgICAgIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogMTIsXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjYXNlICd5ZWFyJzoge1xuICAgICAgICBjb25zdCBvZmZzZXQ6IG51bWJlciA9IE1hdGgudHJ1bmMoaW5kZXggLyBZRUFSU19QRVJfUEFHRSkgKiBZRUFSU19QRVJfUEFHRTtcbiAgICAgICAgY29uc3QgaW5kZXhJblZpZXc6IG51bWJlciA9IG9mZnNldCA9PT0gMCA/IGluZGV4IDogaW5kZXggLSBZRUFSU19QRVJfUEFHRTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2ZXJ0aWNhbE9mZnNldDogWUVBUlNfUEVSX1JPVyxcbiAgICAgICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZTogaW5kZXhJblZpZXcsXG4gICAgICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGU6IGluZGV4IC0gaW5kZXhJblZpZXcsXG4gICAgICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBvZmZzZXQgPT09IDAgPyBZRUFSU19QRVJfUEFHRSA6IFlFQVJTX1BFUl9QQUdFICogMixcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBwcm92aWRlZCBhcnJheSBzdGFydGluZyBmcm9tIGBpbmRleGAgYnkgYWRkaW5nIGBkZWx0YWAuXG4gICAqIElmIHRoZSBmb3VuZCBlbGVtZW50IGlzIGRpc2FibGVkLCBpdCBjb250aW51ZXMgYWRkaW5nIGBkZWx0YWAgdW50aWwgaXQgZmluZHMgYW4gZW5hYmxlZCBvbmUgaW4gdGhlIGFycmF5IGJvdW5kcy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbmROZXh0KGRheXM6IEhUTUxCdXR0b25FbGVtZW50W10sIGluZGV4OiBudW1iZXIsIGRlbHRhOiBudW1iZXIpOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgbGV0IG5leHRJbmRleCA9IGluZGV4ICsgZGVsdGE7XG4gICAgd2hpbGUgKG5leHRJbmRleCA8IGRheXMubGVuZ3RoICYmIGRheXNbbmV4dEluZGV4XT8uZGlzYWJsZWQpIHtcbiAgICAgIG5leHRJbmRleCArPSBkZWx0YTtcbiAgICB9XG4gICAgcmV0dXJuIGRheXNbbmV4dEluZGV4XSA/PyBkYXlzW2luZGV4XTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBmaXJzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kRmlyc3QoZGF5czogSFRNTEJ1dHRvbkVsZW1lbnRbXSwgZmlyc3RPZkN1cnJlbnRNb250aDogbnVtYmVyKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIHJldHVybiAhZGF5c1tmaXJzdE9mQ3VycmVudE1vbnRoXS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW2ZpcnN0T2ZDdXJyZW50TW9udGhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIGZpcnN0T2ZDdXJyZW50TW9udGgsIDEpO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGxhc3QgZW5hYmxlZCBlbGVtZW50IGluIHRoZSBwcm92aWRlZCBhcnJheS4gKi9cbiAgcHJpdmF0ZSBfZmluZExhc3QoZGF5czogSFRNTEJ1dHRvbkVsZW1lbnRbXSwgbGFzdE9mQ3VycmVudE1vbnRoOiBudW1iZXIpOiBIVE1MQnV0dG9uRWxlbWVudCB7XG4gICAgcmV0dXJuICFkYXlzW2xhc3RPZkN1cnJlbnRNb250aF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tsYXN0T2ZDdXJyZW50TW9udGhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIGxhc3RPZkN1cnJlbnRNb250aCwgLTEpO1xuICB9XG5cbiAgLyoqIEZpbmQgdGhlIGZpcnN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgc2FtZSBjb2x1bW4gb2YgdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kRmlyc3RPbkNvbHVtbihcbiAgICBkYXlzOiBIVE1MQnV0dG9uRWxlbWVudFtdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgdmVydGljYWxPZmZzZXQ6IG51bWJlcixcbiAgKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IChpbmRleCAlIHZlcnRpY2FsT2Zmc2V0KSArIG9mZnNldDtcbiAgICByZXR1cm4gIWRheXNbbmV4dEluZGV4XS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW25leHRJbmRleF1cbiAgICAgIDogdGhpcy5fZmluZE5leHQoZGF5cywgbmV4dEluZGV4LCB2ZXJ0aWNhbE9mZnNldCk7XG4gIH1cblxuICAvKiogRmluZCB0aGUgbGFzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHNhbWUgY29sdW1uIG9mIHRoZSBwcm92aWRlZCBhcnJheS4gKi9cbiAgcHJpdmF0ZSBfZmluZExhc3RPbkNvbHVtbihcbiAgICBkYXlzOiBIVE1MQnV0dG9uRWxlbWVudFtdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgb2Zmc2V0OiBudW1iZXIsXG4gICAgdmVydGljYWxPZmZzZXQ6IG51bWJlcixcbiAgKTogSFRNTEJ1dHRvbkVsZW1lbnQge1xuICAgIGNvbnN0IG5leHRJbmRleCA9IGluZGV4ICsgTWF0aC50cnVuYygob2Zmc2V0IC0gaW5kZXggLSAxKSAvIHZlcnRpY2FsT2Zmc2V0KSAqIHZlcnRpY2FsT2Zmc2V0O1xuICAgIHJldHVybiAhZGF5c1tuZXh0SW5kZXhdLmRpc2FibGVkXG4gICAgICA/IGRheXNbbmV4dEluZGV4XVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBuZXh0SW5kZXgsIC12ZXJ0aWNhbE9mZnNldCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXNldFRvRGF5VmlldygpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5zZWxlY3RlZCA/PyB0aGlzLm5vdztcbiAgICB0aGlzLl9jaG9zZW5ZZWFyID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2Nob3Nlbk1vbnRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnZGF5JztcbiAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgdmlldyBmb3IgdGhlIGRheSBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX3JlbmRlckRheVZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IG5leHRNb250aEFjdGl2ZURhdGUgPSB0aGlzLl93aWRlXG4gICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuX2FjdGl2ZURhdGUsIDEpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRNb250aCgtMSksXG4gICAgICAgICAgaTE4blByZXZpb3VzTW9udGhbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fcHJldmlvdXNNb250aERpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzLW1vbnRoXCI+XG4gICAgICAgICAgJHt0aGlzLl9jcmVhdGVMYWJlbEZvckRheVZpZXcodGhpcy5fYWN0aXZlRGF0ZSl9XG4gICAgICAgICAgJHt0aGlzLl93aWRlID8gdGhpcy5fY3JlYXRlTGFiZWxGb3JEYXlWaWV3KG5leHRNb250aEFjdGl2ZURhdGUhKSA6IG5vdGhpbmd9XG4gICAgICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPlxuICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVBcmlhTGFiZWxGb3JEYXlWaWV3KHRoaXMuX2FjdGl2ZURhdGUsIG5leHRNb250aEFjdGl2ZURhdGUhKX1cbiAgICAgICAgICA8L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudE1vbnRoKDEpLFxuICAgICAgICAgIGkxOG5OZXh0TW9udGhbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fbmV4dE1vbnRoRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtY29udGFpbmVyIHNiYi1jYWxlbmRhcl9fdGFibGUtZGF5LXZpZXdcIj5cbiAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlUYWJsZSh0aGlzLl93ZWVrcyl9XG4gICAgICAgICR7dGhpcy5fd2lkZSA/IHRoaXMuX2NyZWF0ZURheVRhYmxlKHRoaXMuX25leHRNb250aFdlZWtzKSA6IG5vdGhpbmd9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGxhYmVsIHdpdGggdGhlIG1vbnRoIGZvciB0aGUgZGFpbHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlTGFiZWxGb3JEYXlWaWV3KGQ6IFQpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgbW9udGhMYWJlbCA9IGAke1xuICAgICAgdGhpcy5fbW9udGhOYW1lc1t0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkKSAtIDFdXG4gICAgfSAke3RoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZCl9YDtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGlkPVwic2JiLWNhbGVuZGFyX19kYXRlLXNlbGVjdGlvblwiXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1jaGFuZ2UtZGF0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCIke2kxOG5ZZWFyTW9udGhTZWxlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7bW9udGhMYWJlbH1cIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9ICd5ZWFyJztcbiAgICAgICAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICAke21vbnRoTGFiZWx9XG4gICAgICAgIDxzYmItaWNvbiBuYW1lPVwiY2hldnJvbi1zbWFsbC1kb3duLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgYXJpYS1sYWJlbCBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZUFyaWFMYWJlbEZvckRheVZpZXcoLi4uZGF0ZXM6IFRbXSk6IHN0cmluZyB7XG4gICAgbGV0IG1vbnRoTGFiZWwgPSAnJztcbiAgICBmb3IgKGNvbnN0IGQgb2YgZGF0ZXMpIHtcbiAgICAgIGlmIChkKSB7XG4gICAgICAgIG1vbnRoTGFiZWwgKz0gYCR7XG4gICAgICAgICAgdGhpcy5fbW9udGhOYW1lc1t0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkKSAtIDFdXG4gICAgICAgIH0gJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGQpfSBgO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9udGhMYWJlbDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBjYWxlbmRhciB0YWJsZSBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheVRhYmxlKHdlZWtzOiBEYXlbXVtdKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHRhYmxlXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZVwiXG4gICAgICAgIEBmb2N1c291dD0keyhldmVudDogRm9jdXNFdmVudCkgPT5cbiAgICAgICAgICB0aGlzLl9oYW5kbGVUYWJsZUJsdXIoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCl9XG4gICAgICAgIEBhbmltYXRpb25lbmQ9JHsoZTogQW5pbWF0aW9uRXZlbnQpID0+IHRoaXMuX3RhYmxlQW5pbWF0aW9uRW5kKGUpfVxuICAgICAgPlxuICAgICAgICA8dGhlYWQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlclwiPlxuICAgICAgICAgIDx0ciBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlUYWJsZUhlYWRlcigpfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtYm9keVwiPlxuICAgICAgICAgICR7dGhpcy5fY3JlYXRlRGF5VGFibGVCb2R5KHdlZWtzKX1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSB0YWJsZSBoZWFkZXIgd2l0aCB0aGUgbW9udGggaGVhZGVyIGNlbGxzLiAqL1xuICBwcml2YXRlIF9jcmVhdGVEYXlUYWJsZUhlYWRlcigpOiBUZW1wbGF0ZVJlc3VsdFtdIHtcbiAgICByZXR1cm4gdGhpcy5fd2Vla2RheXMubWFwKFxuICAgICAgKGRheTogV2Vla2RheSkgPT4gaHRtbGBcbiAgICAgICAgPHRoIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seT4ke2RheS5sb25nfTwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke2RheS5uYXJyb3d9PC9zcGFuPlxuICAgICAgICA8L3RoPlxuICAgICAgYCxcbiAgICApO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHRhYmxlIGJvZHkgd2l0aCB0aGUgZGF5IGNlbGxzLiBGb3IgdGhlIGZpcnN0IHJvdywgaXQgYWxzbyBjb25zaWRlcnMgdGhlIHBvc3NpYmxlIGRheSdzIG9mZnNldC4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5VGFibGVCb2R5KHdlZWtzOiBEYXlbXVtdKTogVGVtcGxhdGVSZXN1bHRbXSB7XG4gICAgY29uc3QgdG9kYXk6IHN0cmluZyA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMSh0aGlzLm5vdyk7XG4gICAgcmV0dXJuIHdlZWtzLm1hcCgod2VlazogRGF5W10sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGNvbnN0IGZpcnN0Um93T2Zmc2V0OiBudW1iZXIgPSBEQVlTX1BFUl9ST1cgLSB3ZWVrLmxlbmd0aDtcbiAgICAgIGlmIChyb3dJbmRleCA9PT0gMCAmJiBmaXJzdFJvd09mZnNldCkge1xuICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAke1suLi5BcnJheShmaXJzdFJvd09mZnNldCkua2V5cygpXS5tYXAoXG4gICAgICAgICAgICAgICgpID0+XG4gICAgICAgICAgICAgICAgaHRtbGA8dGRcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1kYXRhXCJcbiAgICAgICAgICAgICAgICAgIGRhdGEtZGF5PSR7YDAgJHt3ZWVrWzBdLm1vbnRoVmFsdWV9ICR7d2Vla1swXS55ZWFyVmFsdWV9YH1cbiAgICAgICAgICAgICAgICA+PC90ZD5gLFxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICR7dGhpcy5fY3JlYXRlRGF5Q2VsbHMod2VlaywgdG9kYXkpfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIGA7XG4gICAgICB9XG4gICAgICByZXR1cm4gaHRtbGA8dHI+XG4gICAgICAgICR7dGhpcy5fY3JlYXRlRGF5Q2VsbHMod2VlaywgdG9kYXkpfVxuICAgICAgPC90cj5gO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGNlbGxzIGZvciB0aGUgZGFpbHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5Q2VsbHMod2VlazogRGF5W10sIHRvZGF5OiBzdHJpbmcpOiBUZW1wbGF0ZVJlc3VsdFtdIHtcbiAgICByZXR1cm4gd2Vlay5tYXAoKGRheTogRGF5KSA9PiB7XG4gICAgICBjb25zdCBpc091dE9mUmFuZ2UgPSAhdGhpcy5faXNEYXlJblJhbmdlKGRheS52YWx1ZSk7XG4gICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0ID0gIXRoaXMuX2RhdGVGaWx0ZXIodGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF5LnZhbHVlKSEpO1xuICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPSAhIXRoaXMuX3NlbGVjdGVkICYmIGRheS52YWx1ZSA9PT0gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgICBjb25zdCBkYXlWYWx1ZSA9IGAke2RheS5kYXlWYWx1ZX0gJHtkYXkubW9udGhWYWx1ZX0gJHtkYXkueWVhclZhbHVlfWA7XG4gICAgICBjb25zdCBpc1RvZGF5ID0gZGF5LnZhbHVlID09PSB0b2RheTtcbiAgICAgIHJldHVybiBodG1sYFxuICAgICAgICA8dGRcbiAgICAgICAgICBjbGFzcz0ke2NsYXNzTWFwKHtcbiAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGEnOiB0cnVlLFxuICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fdGFibGUtZGF0YS1zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICAgIH0pfVxuICAgICAgICA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9JHtjbGFzc01hcCh7XG4gICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19kYXknOiB0cnVlLFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jZWxsLWN1cnJlbnQnOiBpc1RvZGF5LFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jcm9zc2VkLW91dCc6ICFpc091dE9mUmFuZ2UgJiYgaXNGaWx0ZXJlZE91dCxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fc2VsZWN0RGF0ZShkYXkudmFsdWUpfVxuICAgICAgICAgICAgP2Rpc2FibGVkPSR7aXNPdXRPZlJhbmdlIHx8IGlzRmlsdGVyZWRPdXR9XG4gICAgICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0QWNjZXNzaWJpbGl0eUZvcm1hdERhdGUoZGF5LnZhbHVlKX1cbiAgICAgICAgICAgIGFyaWEtcHJlc3NlZD0ke3NlbGVjdGVkfVxuICAgICAgICAgICAgYXJpYS1kaXNhYmxlZD0ke2lzT3V0T2ZSYW5nZSB8fCBpc0ZpbHRlcmVkT3V0fVxuICAgICAgICAgICAgYXJpYS1jdXJyZW50PSR7aXNUb2RheSA/ICdkYXRlJyA6IG5vdGhpbmd9XG4gICAgICAgICAgICBkYXRhLWRheT0ke2RheVZhbHVlIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQsIGRheSl9XG4gICAgICAgICAgICBzYmItcG9wb3Zlci1jbG9zZVxuICAgICAgICAgID5cbiAgICAgICAgICAgICR7ZGF5LmRheVZhbHVlfVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L3RkPlxuICAgICAgYDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZW5kZXIgdGhlIHZpZXcgZm9yIHRoZSBtb250aCBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX3JlbmRlck1vbnRoVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9sc1wiPlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhcigtMSksXG4gICAgICAgICAgaTE4blByZXZpb3VzWWVhclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c1llYXJEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1tb250aFwiPiR7dGhpcy5fY3JlYXRlTGFiZWxGb3JNb250aFZpZXcoKX08L2Rpdj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAncmlnaHQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRZZWFyKDEpLFxuICAgICAgICAgIGkxOG5OZXh0WWVhclt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9uZXh0WWVhckRpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWNvbnRhaW5lciBzYmItY2FsZW5kYXJfX3RhYmxlLW1vbnRoLXZpZXdcIj5cbiAgICAgICAgJHt0aGlzLl9jcmVhdGVNb250aFRhYmxlKHRoaXMuX21vbnRocywgdGhpcy5fY2hvc2VuWWVhciEpfVxuICAgICAgICAke3RoaXMuX3dpZGUgPyB0aGlzLl9jcmVhdGVNb250aFRhYmxlKHRoaXMuX21vbnRocywgdGhpcy5fY2hvc2VuWWVhciEgKyAxLCB0cnVlKSA6IG5vdGhpbmd9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGxhYmVsIHdpdGggdGhlIHllYXIgZm9yIHRoZSBtb250aGx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZUxhYmVsRm9yTW9udGhWaWV3KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgaWQ9XCJzYmItY2FsZW5kYXJfX21vbnRoLXNlbGVjdGlvblwiXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1jaGFuZ2UtZGF0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9JHtgJHtpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3RoaXMuX2Nob3NlblllYXJ9YH1cbiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fcmVzZXRUb0RheVZpZXcoKX1cbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl9jaG9zZW5ZZWFyfSAke3RoaXMuX3dpZGUgPyBgIC0gJHt0aGlzLl9jaG9zZW5ZZWFyISArIDF9YCA6IG5vdGhpbmd9XG4gICAgICAgIDxzYmItaWNvbiBuYW1lPVwiY2hldnJvbi1zbWFsbC11cC1zbWFsbFwiPjwvc2JiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5IHJvbGU9XCJzdGF0dXNcIj4gJHt0aGlzLl9jaG9zZW5ZZWFyfSA8L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+YDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSB0YWJsZSBmb3IgdGhlIG1vbnRoIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVNb250aFRhYmxlKG1vbnRoczogTW9udGhbXVtdLCB5ZWFyOiBudW1iZXIsIHNoaWZ0UmlnaHQgPSBmYWxzZSk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDx0YWJsZVxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgICBAYW5pbWF0aW9uZW5kPSR7KGU6IEFuaW1hdGlvbkV2ZW50KSA9PiB0aGlzLl90YWJsZUFuaW1hdGlvbkVuZChlKX1cbiAgICAgID5cbiAgICAgICAgJHt0aGlzLl93aWRlXG4gICAgICAgICAgPyBodG1sYDx0aGVhZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgIDx0ciBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCIgY29sc3Bhbj0ke01PTlRIU19QRVJfUk9XfT4ke3llYXJ9PC90aD5cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgPHRib2R5IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1ib2R5XCI+XG4gICAgICAgICAgJHttb250aHMubWFwKFxuICAgICAgICAgICAgKHJvdzogTW9udGhbXSkgPT4gaHRtbGBcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICR7cm93Lm1hcCgobW9udGg6IE1vbnRoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc091dE9mUmFuZ2UgPSAhdGhpcy5faXNNb250aEluUmFuZ2UobW9udGgubW9udGhWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0ZpbHRlcmVkT3V0ID0gIXRoaXMuX2lzTW9udGhGaWx0ZXJlZE91dChtb250aC5tb250aFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkTW9udGggPSB0aGlzLl9zZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHRoaXMuX3NlbGVjdGVkKSEpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5fc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHRoaXMuX3NlbGVjdGVkKSEpXG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPVxuICAgICAgICAgICAgICAgICAgICAhIXRoaXMuX3NlbGVjdGVkICYmIHllYXIgPT09IHNlbGVjdGVkWWVhciAmJiBtb250aC5tb250aFZhbHVlID09PSBzZWxlY3RlZE1vbnRoO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRNb250aCA9XG4gICAgICAgICAgICAgICAgICAgIHllYXIgPT09IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodGhpcy5ub3cpICYmXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHRoaXMubm93KSA9PT0gbW9udGgubW9udGhWYWx1ZTtcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuIGh0bWxgIDx0ZFxuICAgICAgICAgICAgICAgICAgICBjbGFzcz0ke2NsYXNzTWFwKHtcbiAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1kYXRhJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX190YWJsZS1tb250aCc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9JHtjbGFzc01hcCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jZWxsJzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3BpbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY2VsbC1jdXJyZW50JzogaXNDdXJyZW50TW9udGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAnc2JiLWNhbGVuZGFyX19jcm9zc2VkLW91dCc6ICFpc091dE9mUmFuZ2UgJiYgaXNGaWx0ZXJlZE91dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3NlbGVjdGVkJzogc2VsZWN0ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fb25Nb250aFNlbGVjdGlvbihtb250aC5tb250aFZhbHVlLCB5ZWFyLCBzaGlmdFJpZ2h0KX1cbiAgICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSR7YCR7bW9udGgubG9uZ1ZhbHVlfSAke3RoaXMuX2Nob3NlblllYXJ9YH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWRpc2FibGVkPSR7U3RyaW5nKGlzT3V0T2ZSYW5nZSB8fCBpc0ZpbHRlcmVkT3V0KX1cbiAgICAgICAgICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLW1vbnRoPSR7bW9udGgubW9udGhWYWx1ZSB8fCBub3RoaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgJHttb250aC52YWx1ZX1cbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICBgLFxuICAgICAgICAgICl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIGA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSBtb250aCBhbmQgY2hhbmdlIHRoZSB2aWV3IHRvIGRheSBzZWxlY3Rpb24uICovXG4gIHByaXZhdGUgX29uTW9udGhTZWxlY3Rpb24obW9udGg6IG51bWJlciwgeWVhcjogbnVtYmVyLCBzaGlmdFJpZ2h0OiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5fY2hvc2VuTW9udGggPSBzaGlmdFJpZ2h0ID8gbW9udGggKyAxIDogbW9udGg7XG4gICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9ICdkYXknO1xuICAgIHRoaXMuX2luaXQoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB5ZWFyLFxuICAgICAgICB0aGlzLl9jaG9zZW5Nb250aCxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgdmlldyBmb3IgdGhlIHllYXIgc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9yZW5kZXJZZWFyVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9sc1wiPlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhclJhbmdlKC1ZRUFSU19QRVJfUEFHRSksXG4gICAgICAgICAgaTE4blByZXZpb3VzWWVhclJhbmdlKFlFQVJTX1BFUl9QQUdFKVt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c1llYXJSYW5nZURpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzLW1vbnRoXCI+JHt0aGlzLl9jcmVhdGVMYWJlbEZvclllYXJWaWV3KCl9PC9kaXY+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50WWVhclJhbmdlKFlFQVJTX1BFUl9QQUdFKSxcbiAgICAgICAgICBpMThuTmV4dFllYXJSYW5nZShZRUFSU19QRVJfUEFHRSlbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fbmV4dFllYXJSYW5nZURpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWNvbnRhaW5lciBzYmItY2FsZW5kYXJfX3RhYmxlLXllYXItdmlld1wiPlxuICAgICAgICAke3RoaXMuX2NyZWF0ZVllYXJUYWJsZSh0aGlzLl95ZWFycyl9XG4gICAgICAgICR7dGhpcy5fd2lkZSA/IHRoaXMuX2NyZWF0ZVllYXJUYWJsZSh0aGlzLl9uZXh0TW9udGhZZWFycywgdHJ1ZSkgOiBub3RoaW5nfVxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBidXR0b24gYXJyb3cgZm9yIGFsbCB0aGUgdmlld3MuICovXG4gIHByaXZhdGUgX2dldEFycm93KFxuICAgIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgICBjbGljazogKCkgPT4gdm9pZCxcbiAgICBhcmlhTGFiZWw6IHN0cmluZyxcbiAgICBkaXNhYmxlZDogYm9vbGVhbixcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxzYmItc2Vjb25kYXJ5LWJ1dHRvblxuICAgICAgc2l6ZT1cIm1cIlxuICAgICAgaWNvbi1uYW1lPVwiY2hldnJvbi1zbWFsbC0ke2RpcmVjdGlvbn0tc21hbGxcIlxuICAgICAgYXJpYS1sYWJlbD0ke2FyaWFMYWJlbH1cbiAgICAgIEBjbGljaz0ke2NsaWNrfVxuICAgICAgP2Rpc2FibGVkPSR7ZGlzYWJsZWR9XG4gICAgICBpZD1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtJHtkaXJlY3Rpb24gPT09ICdsZWZ0JyA/ICdwcmV2aW91cycgOiAnbmV4dCd9XCJcbiAgICA+PC9zYmItc2Vjb25kYXJ5LWJ1dHRvbj5gO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGxhYmVsIHdpdGggdGhlIHllYXIgcmFuZ2UgZm9yIHRoZSB5ZWFybHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlTGFiZWxGb3JZZWFyVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgZmlyc3RZZWFyOiBudW1iZXIgPSB0aGlzLl95ZWFycy5mbGF0KClbMF07XG4gICAgY29uc3QgbGFzdFllYXJBcnJheTogbnVtYmVyW10gPSAoXG4gICAgICBpc0JyZWFrcG9pbnQoJ21lZGl1bScpICYmIHRoaXMud2lkZSA/IHRoaXMuX25leHRNb250aFllYXJzIDogdGhpcy5feWVhcnNcbiAgICApLmZsYXQoKTtcbiAgICBjb25zdCBsYXN0WWVhcjogbnVtYmVyID0gbGFzdFllYXJBcnJheVtsYXN0WWVhckFycmF5Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHllYXJMYWJlbCA9IGAke2ZpcnN0WWVhcn0gLSAke2xhc3RZZWFyfWA7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpZD1cInNiYi1jYWxlbmRhcl9feWVhci1zZWxlY3Rpb25cIlxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiJHtpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3llYXJMYWJlbH1cIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9yZXNldFRvRGF5VmlldygpfVxuICAgICAgPlxuICAgICAgICAke3llYXJMYWJlbH1cbiAgICAgICAgPHNiYi1pY29uIG5hbWU9XCJjaGV2cm9uLXNtYWxsLXVwLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPiAke3llYXJMYWJlbH0gPC9zYmItc2NyZWVuLXJlYWRlci1vbmx5PlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgdGFibGUgZm9yIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVZZWFyVGFibGUoeWVhcnM6IG51bWJlcltdW10sIHNoaWZ0UmlnaHQgPSBmYWxzZSk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCBub3cgPSB0aGlzLm5vdztcbiAgICByZXR1cm4gaHRtbGAgPHRhYmxlXG4gICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGVcIlxuICAgICAgQGFuaW1hdGlvbmVuZD0keyhlOiBBbmltYXRpb25FdmVudCkgPT4gdGhpcy5fdGFibGVBbmltYXRpb25FbmQoZSl9XG4gICAgPlxuICAgICAgPHRib2R5IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1ib2R5XCI+XG4gICAgICAgICR7eWVhcnMubWFwKFxuICAgICAgICAgIChyb3c6IG51bWJlcltdKSA9PlxuICAgICAgICAgICAgaHRtbGAgPHRyPlxuICAgICAgICAgICAgICAke3Jvdy5tYXAoKHllYXI6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzT3V0T2ZSYW5nZSA9ICF0aGlzLl9pc1llYXJJblJhbmdlKHllYXIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzRmlsdGVyZWRPdXQgPSAhdGhpcy5faXNZZWFyRmlsdGVyZWRPdXQoeWVhcik7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRZZWFyID0gdGhpcy5fc2VsZWN0ZWRcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZSh0aGlzLl9zZWxlY3RlZCkhKVxuICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWQ6IGJvb2xlYW4gPSAhIXRoaXMuX3NlbGVjdGVkICYmIHllYXIgPT09IHNlbGVjdGVkWWVhcjtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0N1cnJlbnRZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihub3cpID09PSB5ZWFyO1xuICAgICAgICAgICAgICAgIHJldHVybiBodG1sYCA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGEgc2JiLWNhbGVuZGFyX190YWJsZS15ZWFyXCI+XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPSR7Y2xhc3NNYXAoe1xuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX3BpbGwnOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICdzYmItY2FsZW5kYXJfX2NlbGwtY3VycmVudCc6IGlzQ3VycmVudFllYXIsXG4gICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fY3Jvc3NlZC1vdXQnOiAhaXNPdXRPZlJhbmdlICYmIGlzRmlsdGVyZWRPdXQsXG4gICAgICAgICAgICAgICAgICAgICAgJ3NiYi1jYWxlbmRhcl9fc2VsZWN0ZWQnOiBzZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX29uWWVhclNlbGVjdGlvbih5ZWFyLCBzaGlmdFJpZ2h0KX1cbiAgICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7aXNPdXRPZlJhbmdlIHx8IGlzRmlsdGVyZWRPdXR9XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9JHt5ZWFyfVxuICAgICAgICAgICAgICAgICAgICBhcmlhLXByZXNzZWQ9JHtzZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgYXJpYS1kaXNhYmxlZD0ke1N0cmluZyhpc091dE9mUmFuZ2UgfHwgaXNGaWx0ZXJlZE91dCl9XG4gICAgICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAgICAgICAgICAgICBkYXRhLXllYXI9JHt5ZWFyIHx8IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGV2dDogS2V5Ym9hcmRFdmVudCkgPT4gdGhpcy5faGFuZGxlS2V5Ym9hcmRFdmVudChldnQpfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAke3llYXJ9XG4gICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICA8L3RkPmA7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC90cj5gLFxuICAgICAgICApfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSB5ZWFyIGFuZCBjaGFuZ2UgdGhlIHZpZXcgdG8gbW9udGggc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9vblllYXJTZWxlY3Rpb24oeWVhcjogbnVtYmVyLCByaWdodFNpZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5ZZWFyID0gcmlnaHRTaWRlID8geWVhciAtIDEgOiB5ZWFyO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnbW9udGgnO1xuICAgIHRoaXMuX2Fzc2lnbkFjdGl2ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9jaG9zZW5ZZWFyLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9yZW1vdmVUYWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgX2dldFZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHN3aXRjaCAodGhpcy5fY2FsZW5kYXJWaWV3KSB7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclllYXJWaWV3KCk7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJNb250aFZpZXcoKTtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyRGF5VmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnaGlkZScpIHtcbiAgICAgIHRhYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ3NiYi1jYWxlbmRhcl9fdGFibGUtaGlkZScpO1xuICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICB0aGlzLl9jYWxlbmRhclZpZXcgPSB0aGlzLl9uZXh0Q2FsZW5kYXJWaWV3O1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ3Nob3cnKSB7XG4gICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgnZGF0YS10cmFuc2l0aW9uJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVtb3ZlVGFibGUoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtdHJhbnNpdGlvbicsIHRydWUpO1xuICAgIHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvckFsbCgndGFibGUnKS5mb3JFYWNoKChlKSA9PlxuICAgICAgZS5jbGFzc0xpc3QudG9nZ2xlKCdzYmItY2FsZW5kYXJfX3RhYmxlLWhpZGUnKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fd3JhcHBlclwiPiR7dGhpcy5fZ2V0Vmlld308L2Rpdj5gO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItY2FsZW5kYXInOiBTYmJDYWxlbmRhckVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBNEZhLElBQUEscUJBQU4sY0FBMkMsV0FBVztBQUFBLEVBcUlwRCxjQUFjO0FBQ2I7QUEvSHFCLFNBQU8sT0FBTztBQThCM0MsU0FBUSxPQUFpQjtBQXdCekIsU0FBUSxlQUErQjtBQUd2QyxTQUFRLGdCQUFpQyxJQUFJO0FBQUEsTUFDM0M7QUFBQSxNQUNBLG1CQUFtQixPQUFPO0FBQUEsSUFBQTtBQUluQixTQUFRLGNBQWlCLEtBQUs7QUFjOUIsU0FBUSxnQkFBOEI7QUFFL0MsU0FBUSxvQkFBa0M7QUFNMUMsU0FBUSxTQUFrQjtBQWUxQixTQUFRLGNBQXdCLEtBQUssYUFBYSxjQUFjLE1BQU07QUFnQnRFLFNBQVEsY0FBYztBQUV0QixTQUFRLGVBQWU7QUFFZixTQUFBLFNBQVMsSUFBSSw0QkFBNEIsSUFBSTtBQUNyRCxTQUFRLFlBQVksSUFBSSxzQkFBc0IsSUFBSSxFQUFFLFlBQVksTUFBTTtBQUNwRSxXQUFLLGNBQWMsS0FBSyxhQUFhLGNBQWMsTUFBTTtBQUN6RCxXQUFLLGlCQUFpQjtBQUFBLElB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