@sbb-esta/lyne-elements-dev 5.0.0-next-dev.1776736853 → 5.0.0-next-dev.1776760633

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 (222) hide show
  1. package/autocomplete/autocomplete-base-element.js +1 -1
  2. package/autocomplete/autocomplete.component.js +1 -1
  3. package/{autocomplete-base-element-B7fDDO1F.js → autocomplete-base-element-gPLexIVc.js} +1 -1
  4. package/autocomplete.js +1 -1
  5. package/autocomplete.pure.js +1 -1
  6. package/core/overlay/overlay-trigger-attributes.js +3 -3
  7. package/core/styles/host-scrollbar.scss +6 -0
  8. package/core/styles/mixins/scrollbar.scss +5 -8
  9. package/core/styles/scrollbar.scss +10 -8
  10. package/core/styles/styles.js +2 -2
  11. package/core.css +2 -2
  12. package/core.js +3 -3
  13. package/custom-elements.json +26 -14
  14. package/datepicker/datepicker/datepicker.component.js +1 -1
  15. package/{datepicker.component-BBmEvmW3.js → datepicker.component-CNQGkdr-.js} +11 -11
  16. package/datepicker.js +1 -1
  17. package/datepicker.pure.js +1 -1
  18. package/development/autocomplete/autocomplete-base-element.js +1 -1
  19. package/development/autocomplete/autocomplete.component.js +1 -1
  20. package/development/{autocomplete-base-element-DnpaK_k3.js → autocomplete-base-element-8hV4-ys6.js} +2 -2
  21. package/development/autocomplete.js +1 -1
  22. package/development/autocomplete.pure.js +1 -1
  23. package/development/core/overlay/overlay-trigger-attributes.d.ts +4 -4
  24. package/development/core/overlay/overlay-trigger-attributes.d.ts.map +1 -1
  25. package/development/core/overlay/overlay-trigger-attributes.js +12 -12
  26. package/development/core/styles/styles.d.ts +1 -0
  27. package/development/core/styles/styles.d.ts.map +1 -1
  28. package/development/core/styles/styles.js +2 -2
  29. package/development/core.js +3 -3
  30. package/development/datepicker/datepicker/datepicker.component.d.ts.map +1 -1
  31. package/development/datepicker/datepicker/datepicker.component.js +1 -1
  32. package/development/datepicker.component-Chnvwnp7.js +212 -0
  33. package/development/datepicker.js +1 -1
  34. package/development/datepicker.pure.js +1 -1
  35. package/development/dialog/dialog/dialog.component.d.ts +0 -1
  36. package/development/dialog/dialog/dialog.component.d.ts.map +1 -1
  37. package/development/dialog/dialog/dialog.component.js +1 -1
  38. package/development/dialog/dialog-content/dialog-content.component.d.ts +1 -0
  39. package/development/dialog/dialog-content/dialog-content.component.d.ts.map +1 -1
  40. package/development/dialog/dialog-content/dialog-content.component.js +1 -1
  41. package/development/dialog-content.component-DlSxpY_e.js +34 -0
  42. package/development/{dialog.component-BYVTZAUU.js → dialog.component-B4cZfRCl.js} +1 -6
  43. package/development/dialog.js +2 -2
  44. package/development/dialog.pure.js +2 -2
  45. package/development/header/header/header.component.d.ts.map +1 -1
  46. package/development/header/header/header.component.js +1 -1
  47. package/development/{header.component-Hfgz9sSb.js → header.component-B2T2pmHs.js} +2 -3
  48. package/development/header.js +1 -1
  49. package/development/header.pure.js +1 -1
  50. package/development/icon-sidebar/icon-sidebar/icon-sidebar.component.d.ts.map +1 -1
  51. package/development/icon-sidebar/icon-sidebar/icon-sidebar.component.js +1 -1
  52. package/development/icon-sidebar/icon-sidebar-content/icon-sidebar-content.component.d.ts.map +1 -1
  53. package/development/icon-sidebar/icon-sidebar-content/icon-sidebar-content.component.js +1 -1
  54. package/development/icon-sidebar-content.component-CfkM9k--.js +35 -0
  55. package/development/{icon-sidebar.component-xzwoc_4y.js → icon-sidebar.component-Cgvuxg4k.js} +3 -3
  56. package/development/icon-sidebar.js +2 -2
  57. package/development/icon-sidebar.pure.js +2 -2
  58. package/development/map-container/map-container.component.js +1 -1
  59. package/development/{map-container.component-mzZ_K_fR.js → map-container.component-rgU7ZofE.js} +2 -2
  60. package/development/map-container.js +1 -1
  61. package/development/map-container.pure.js +1 -1
  62. package/development/menu/common/menu-action-common.js +1 -1
  63. package/development/menu/menu/menu.component.d.ts.map +1 -1
  64. package/development/menu/menu/menu.component.js +1 -1
  65. package/development/menu-action-common-CEnwq60Z.js +32 -0
  66. package/development/menu.component-DbNRrGYy.js +365 -0
  67. package/development/menu.js +2 -2
  68. package/development/menu.pure.js +2 -2
  69. package/development/navigation/navigation/navigation.component.d.ts.map +1 -1
  70. package/development/navigation/navigation/navigation.component.js +1 -1
  71. package/development/navigation/navigation-section/navigation-section.component.d.ts.map +1 -1
  72. package/development/navigation/navigation-section/navigation-section.component.js +1 -1
  73. package/development/{navigation-section.component-C_9myQKr.js → navigation-section.component-BSvxMUxM.js} +7 -9
  74. package/development/{navigation.component-C8MhqBLY.js → navigation.component-lgvLMF5e.js} +7 -9
  75. package/development/navigation.js +2 -2
  76. package/development/navigation.pure.js +2 -2
  77. package/development/overlay/overlay-base-element.d.ts.map +1 -1
  78. package/development/overlay/overlay-base-element.js +6 -6
  79. package/development/overlay/overlay.component.d.ts +0 -1
  80. package/development/overlay/overlay.component.d.ts.map +1 -1
  81. package/development/overlay/overlay.component.js +1 -1
  82. package/development/overlay.component-iy6QUYWU.js +211 -0
  83. package/development/overlay.js +1 -1
  84. package/development/overlay.pure.js +1 -1
  85. package/development/popover/popover.component.d.ts.map +1 -1
  86. package/development/popover/popover.component.js +1 -1
  87. package/development/popover.component-C-zVDwjc.js +527 -0
  88. package/development/popover.js +1 -1
  89. package/development/popover.pure.js +1 -1
  90. package/development/select/select.component.js +1 -1
  91. package/development/{select.component-CqwBdtsN.js → select.component-Ibby7Q-L.js} +2 -2
  92. package/development/select.js +1 -1
  93. package/development/select.pure.js +1 -1
  94. package/development/sidebar/sidebar/sidebar.component.js +1 -1
  95. package/development/sidebar/sidebar-content/sidebar-content.component.d.ts +1 -2
  96. package/development/sidebar/sidebar-content/sidebar-content.component.d.ts.map +1 -1
  97. package/development/sidebar/sidebar-content/sidebar-content.component.js +1 -1
  98. package/development/{sidebar-content.component-Os9gd7zB.js → sidebar-content.component-DbcREBUa.js} +8 -5
  99. package/development/{sidebar.component-CwuT6dno.js → sidebar.component-zMWbdz0h.js} +2 -2
  100. package/development/sidebar.js +2 -2
  101. package/development/sidebar.pure.js +2 -2
  102. package/development/{step-label.component-CxqPgbzK.js → step-label.component-B7M9Yqyz.js} +1 -3
  103. package/development/{step.component-B2qbHl0l.js → step.component-CVWxYkrv.js} +1 -3
  104. package/development/stepper/step/step.component.d.ts.map +1 -1
  105. package/development/stepper/step/step.component.js +1 -1
  106. package/development/stepper/step-label/step-label.component.d.ts.map +1 -1
  107. package/development/stepper/step-label/step-label.component.js +1 -1
  108. package/development/stepper.js +2 -2
  109. package/development/stepper.pure.js +2 -2
  110. package/development/styles-DcuJgwEt.js +14 -0
  111. package/development/tab.component-BVhYPy5Y.js +68 -0
  112. package/development/table/table-wrapper/table-wrapper.component.d.ts.map +1 -1
  113. package/development/table/table-wrapper/table-wrapper.component.js +1 -1
  114. package/development/table-wrapper.component-DcLwEDzr.js +119 -0
  115. package/development/table.js +1 -1
  116. package/development/table.pure.js +1 -1
  117. package/development/tabs/tab/tab.component.d.ts.map +1 -1
  118. package/development/tabs/tab/tab.component.js +1 -1
  119. package/development/tabs.js +1 -1
  120. package/development/tabs.pure.js +1 -1
  121. package/development/tooltip/tooltip.component.d.ts.map +1 -1
  122. package/development/tooltip/tooltip.component.js +1 -1
  123. package/development/tooltip.component-lvElko6C.js +369 -0
  124. package/development/tooltip.js +1 -1
  125. package/development/tooltip.pure.js +1 -1
  126. package/development/train/train-formation/train-formation.component.js +1 -1
  127. package/development/{train-formation.component-CfdHRBsd.js → train-formation.component-BoQcwy6n.js} +2 -2
  128. package/development/train.js +1 -1
  129. package/development/train.pure.js +1 -1
  130. package/dialog/dialog/dialog.component.js +1 -1
  131. package/dialog/dialog-content/dialog-content.component.js +1 -1
  132. package/dialog-content.component-C_Gr8BNL.js +22 -0
  133. package/{dialog.component-ca14M0hZ.js → dialog.component-DTbAHlVd.js} +7 -10
  134. package/dialog.js +2 -2
  135. package/dialog.pure.js +2 -2
  136. package/header/header/header.component.js +1 -1
  137. package/{header.component-BxizSy1O.js → header.component-D-WVEMFn.js} +2 -2
  138. package/header.js +1 -1
  139. package/header.pure.js +1 -1
  140. package/icon-sidebar/icon-sidebar/icon-sidebar.component.js +1 -1
  141. package/icon-sidebar/icon-sidebar-content/icon-sidebar-content.component.js +1 -1
  142. package/{icon-sidebar-content.component-DlUqWEAX.js → icon-sidebar-content.component-lFstg91Y.js} +9 -5
  143. package/{icon-sidebar.component-DbA4omxc.js → icon-sidebar.component-D0TtF-kR.js} +11 -11
  144. package/icon-sidebar.js +2 -2
  145. package/icon-sidebar.pure.js +2 -2
  146. package/map-container/map-container.component.js +1 -1
  147. package/{map-container.component-Cqn9mKoo.js → map-container.component-De-8Tsau.js} +1 -1
  148. package/map-container.js +1 -1
  149. package/map-container.pure.js +1 -1
  150. package/menu/common/menu-action-common.js +1 -1
  151. package/menu/menu/menu.component.js +1 -1
  152. package/{menu-action-common-DY4RrfCy.js → menu-action-common-krzD_Ca2.js} +1 -1
  153. package/{menu.component-XvtyRok7.js → menu.component-KdXwqe55.js} +15 -15
  154. package/menu.js +2 -2
  155. package/menu.pure.js +2 -2
  156. package/navigation/navigation/navigation.component.js +1 -1
  157. package/navigation/navigation-section/navigation-section.component.js +1 -1
  158. package/{navigation-section.component-CLcdmPV3.js → navigation-section.component-DrnbQAZX.js} +17 -17
  159. package/{navigation.component-Cnyb5_4R.js → navigation.component-D6HU-F51.js} +16 -16
  160. package/navigation.js +2 -2
  161. package/navigation.pure.js +2 -2
  162. package/off-brand-theme.css +53 -55
  163. package/overlay/overlay-base-element.js +4 -4
  164. package/overlay/overlay.component.js +1 -1
  165. package/overlay.component-bHg2Xk6D.js +161 -0
  166. package/overlay.js +1 -1
  167. package/overlay.pure.js +1 -1
  168. package/package.json +2 -2
  169. package/popover/popover.component.js +1 -1
  170. package/{popover.component-BfSXNxKK.js → popover.component-BCLBnddM.js} +12 -12
  171. package/popover.js +1 -1
  172. package/popover.pure.js +1 -1
  173. package/safety-theme.css +53 -55
  174. package/scrollbar.css +51 -53
  175. package/select/select.component.js +1 -1
  176. package/{select.component-Cu3ewc4i.js → select.component-BcDZm7EM.js} +1 -1
  177. package/select.js +1 -1
  178. package/select.pure.js +1 -1
  179. package/sidebar/sidebar/sidebar.component.js +1 -1
  180. package/sidebar/sidebar-content/sidebar-content.component.js +1 -1
  181. package/{sidebar-content.component-DEgmt4BB.js → sidebar-content.component-CYupfsq_.js} +9 -5
  182. package/{sidebar.component-Bxt8pWMf.js → sidebar.component-Sw06otwx.js} +1 -1
  183. package/sidebar.js +2 -2
  184. package/sidebar.pure.js +2 -2
  185. package/standard-theme.css +53 -55
  186. package/{step-label.component-qdfunibJ.js → step-label.component-BXg13qOD.js} +3 -3
  187. package/{step.component-aBAfTJyO.js → step.component-sQbJslHx.js} +3 -3
  188. package/stepper/step/step.component.js +1 -1
  189. package/stepper/step-label/step-label.component.js +1 -1
  190. package/stepper.js +2 -2
  191. package/stepper.pure.js +2 -2
  192. package/styles-swTeDfst.js +5 -0
  193. package/{tab.component-DGzqld4u.js → tab.component-D6hfhlZw.js} +6 -6
  194. package/table/table-wrapper/table-wrapper.component.js +1 -1
  195. package/{table-wrapper.component-C36NdMWS.js → table-wrapper.component-Dxb8kzV3.js} +13 -13
  196. package/table.js +1 -1
  197. package/table.pure.js +1 -1
  198. package/tabs/tab/tab.component.js +1 -1
  199. package/tabs.js +1 -1
  200. package/tabs.pure.js +1 -1
  201. package/tooltip/tooltip.component.js +1 -1
  202. package/{tooltip.component-C5y6zCtF.js → tooltip.component-Do4V1jGd.js} +12 -12
  203. package/tooltip.js +1 -1
  204. package/tooltip.pure.js +1 -1
  205. package/train/train-formation/train-formation.component.js +1 -1
  206. package/{train-formation.component-5AASBGSX.js → train-formation.component-B8IFJ_7b.js} +1 -1
  207. package/train.js +1 -1
  208. package/train.pure.js +1 -1
  209. package/development/datepicker.component-AKlc7SAO.js +0 -214
  210. package/development/dialog-content.component-B3VB2ptp.js +0 -30
  211. package/development/icon-sidebar-content.component-CMzp1ewD.js +0 -31
  212. package/development/menu-action-common-Crx-dDgH.js +0 -32
  213. package/development/menu.component-DOv7PKIi.js +0 -367
  214. package/development/overlay.component-BuCkqG6Q.js +0 -216
  215. package/development/popover.component-B15jFLe9.js +0 -529
  216. package/development/styles-CcYw6JtZ.js +0 -8
  217. package/development/tab.component-DteuwiHv.js +0 -70
  218. package/development/table-wrapper.component-iSeT-FPH.js +0 -119
  219. package/development/tooltip.component-BtWTK2R0.js +0 -371
  220. package/dialog-content.component-DvJiuDJI.js +0 -19
  221. package/overlay.component-OzDUV8t1.js +0 -164
  222. package/styles-x5HG0xjp.js +0 -6
@@ -1,70 +0,0 @@
1
- import { html, unsafeCSS } from "lit";
2
- import { SbbElement } from "./core.js";
3
- import { ResizeController } from "@lit-labs/observers/resize-controller.js";
4
- //#region src/elements/tabs/tab/tab.scss?inline
5
- var tab_default = "@charset \"UTF-8\";\n:host::after, :host::before {\n content: \"\xA0\";\n display: block;\n visibility: hidden;\n height: 0;\n overflow: hidden;\n}\n\n:host(:focus-visible) {\n outline-offset: var(--sbb-focus-outline-offset);\n outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);\n}\n\n:host(:not(:is(:state(active),[state--active]))) {\n display: none !important;\n}\n\n:host(:is(:state(active),[state--active])) {\n display: block;\n opacity: 1;\n transition-duration: var(--sbb-tab-group-animation-duration);\n transition-delay: var(--sbb-tab-group-animation-duration);\n transition-timing-function: var(--sbb-animation-easing);\n transition-property: opacity, height;\n transition-behavior: allow-discrete;\n}\n@starting-style {\n :host(:is(:state(active),[state--active])) {\n opacity: 0;\n }\n}";
6
- //#endregion
7
- //#region src/elements/tabs/tab/tab.component.ts
8
- var nextId = 0;
9
- /**
10
- * Combined with a `sbb-tab-group` and `sbb-tab-label`, it displays a tab's content.
11
- *
12
- * @slot - Use the unnamed slot to provide content.
13
- * @event {Event} active - The `active` event fires when the sbb-tab has been activated via user selection on the sbb-tab-label.
14
- */
15
- var SbbTabElement = class extends SbbElement {
16
- constructor() {
17
- super(...arguments);
18
- this._tabContentResizeObserver = new ResizeController(this, {
19
- target: null,
20
- skipInitial: true,
21
- callback: () => this._onTabContentElementResize()
22
- });
23
- }
24
- static {
25
- this.elementName = "sbb-tab";
26
- }
27
- static {
28
- this.role = "tabpanel";
29
- }
30
- static {
31
- this.styles = unsafeCSS(tab_default);
32
- }
33
- static {
34
- this.events = { active: "active" };
35
- }
36
- /** The `sbb-tab-label` associated with the tab. */
37
- get label() {
38
- return this.previousElementSibling?.localName === "sbb-tab-label" ? this.previousElementSibling : null;
39
- }
40
- /** Get the parent `sbb-tab-group`. */
41
- get group() {
42
- return this.closest("sbb-tab-group");
43
- }
44
- connectedCallback() {
45
- super.connectedCallback();
46
- this.id ||= `sbb-tab-${nextId++}`;
47
- this.tabIndex = 0;
48
- this.classList.add("sbb-scrollbar");
49
- }
50
- /** @internal */
51
- activate() {
52
- this.internals.states.add("active");
53
- this._tabContentResizeObserver.observe(this);
54
- }
55
- /** @internal */
56
- deactivate() {
57
- this._tabContentResizeObserver.unobserve(this);
58
- this.internals.states.delete("active");
59
- }
60
- _onTabContentElementResize() {
61
- this.group?.["setTabContentHeight"](Math.floor(this.getBoundingClientRect().height));
62
- }
63
- render() {
64
- return html`<slot></slot>`;
65
- }
66
- };
67
- //#endregion
68
- export { SbbTabElement as t };
69
-
70
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC1EdGV1d2lIdi5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvdGFicy90YWIvdGFiLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RhYnMvdGFiL3RhYi5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBAaW5jbHVkZSBzYmIuaWdub3JlLWNoaWxkcmVuLW1hcmdpbjtcbn1cblxuOmhvc3QoOmZvY3VzLXZpc2libGUpIHtcbiAgQGluY2x1ZGUgc2JiLmZvY3VzLW91dGxpbmU7XG59XG5cbjpob3N0KDpub3QoOnN0YXRlKGFjdGl2ZSkpKSB7XG4gIC8vIFdlIHdhbnQgdGhhdCBhIGNvbnN1bWVyIGNhbiBoYXZlIGEgZGlmZmVyZW50IGRpc3BsYXkgcHJvcGVydHkgb24gdGhlIHRhYiwgZS5nLiBmbGV4LCBncmlkLCBldGMuXG4gIC8vIEJ1dCBpZiB0aGUgdGFiIGlzIG5vdCBhY3RpdmUsIGRpc3BsYXk6IG5vbmUgc2hvdWxkIGFsd2F5cyB3aW4uXG4gIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuOmhvc3QoOnN0YXRlKGFjdGl2ZSkpIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zaXRpb246IHtcbiAgICBkdXJhdGlvbjogdmFyKC0tc2JiLXRhYi1ncm91cC1hbmltYXRpb24tZHVyYXRpb24pO1xuICAgIGRlbGF5OiB2YXIoLS1zYmItdGFiLWdyb3VwLWFuaW1hdGlvbi1kdXJhdGlvbik7XG4gICAgdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1zYmItYW5pbWF0aW9uLWVhc2luZyk7XG4gICAgcHJvcGVydHk6IG9wYWNpdHksIGhlaWdodDtcbiAgfVxuXG4gIC8vIEV4cGVyaW1lbnRhbCBwcm9wZXJ0eSwgYnV0IHN1cHBvcnRlZCBpbiBldmVyeSBtYWpvciBicm93c2VyLlxuICB0cmFuc2l0aW9uLWJlaGF2aW9yOiBhbGxvdy1kaXNjcmV0ZTtcblxuICAvLyBFeHBlcmltZW50YWwgcHJvcGVydHksIGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gZXZlcnkgbWFqb3IgYnJvd3NlciBleGNlcHQgRmlyZWZveC5cbiAgQHN0YXJ0aW5nLXN0eWxlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG59XG4iLCJpbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQgeyB0eXBlIENTU1Jlc3VsdEdyb3VwLCBodG1sLCB0eXBlIFRlbXBsYXRlUmVzdWx0LCB1bnNhZmVDU1MgfSBmcm9tICdsaXQnO1xuXG5pbXBvcnQgeyBTYmJFbGVtZW50IH0gZnJvbSAnLi4vLi4vY29yZS50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYlRhYkdyb3VwRWxlbWVudCB9IGZyb20gJy4uL3RhYi1ncm91cC90YWItZ3JvdXAuY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgU2JiVGFiTGFiZWxFbGVtZW50IH0gZnJvbSAnLi4vdGFiLWxhYmVsL3RhYi1sYWJlbC5jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi90YWIuc2Nzcz9pbmxpbmUnO1xuXG5sZXQgbmV4dElkID0gMDtcblxuLyoqXG4gKiBDb21iaW5lZCB3aXRoIGEgYHNiYi10YWItZ3JvdXBgIGFuZCBgc2JiLXRhYi1sYWJlbGAsIGl0IGRpc3BsYXlzIGEgdGFiJ3MgY29udGVudC5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIHByb3ZpZGUgY29udGVudC5cbiAqIEBldmVudCB7RXZlbnR9IGFjdGl2ZSAtIFRoZSBgYWN0aXZlYCBldmVudCBmaXJlcyB3aGVuIHRoZSBzYmItdGFiIGhhcyBiZWVuIGFjdGl2YXRlZCB2aWEgdXNlciBzZWxlY3Rpb24gb24gdGhlIHNiYi10YWItbGFiZWwuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJUYWJFbGVtZW50IGV4dGVuZHMgU2JiRWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItdGFiJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByb2xlID0gJ3RhYnBhbmVsJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gdW5zYWZlQ1NTKHN0eWxlKTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgYWN0aXZlOiAnYWN0aXZlJyxcbiAgfSBhcyBjb25zdDtcblxuICBwcml2YXRlIF90YWJDb250ZW50UmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplQ29udHJvbGxlcih0aGlzLCB7XG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIHNraXBJbml0aWFsOiB0cnVlLFxuICAgIGNhbGxiYWNrOiAoKSA9PiB0aGlzLl9vblRhYkNvbnRlbnRFbGVtZW50UmVzaXplKCksXG4gIH0pO1xuXG4gIC8qKiBUaGUgYHNiYi10YWItbGFiZWxgIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGFiLiAqL1xuICBwdWJsaWMgZ2V0IGxhYmVsKCk6IFNiYlRhYkxhYmVsRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnByZXZpb3VzRWxlbWVudFNpYmxpbmc/LmxvY2FsTmFtZSA9PT0gJ3NiYi10YWItbGFiZWwnXG4gICAgICA/ICh0aGlzLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgYXMgU2JiVGFiTGFiZWxFbGVtZW50KVxuICAgICAgOiBudWxsO1xuICB9XG5cbiAgLyoqIEdldCB0aGUgcGFyZW50IGBzYmItdGFiLWdyb3VwYC4gKi9cbiAgcHVibGljIGdldCBncm91cCgpOiBTYmJUYWJHcm91cEVsZW1lbnQgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KCdzYmItdGFiLWdyb3VwJyk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcblxuICAgIHRoaXMuaWQgfHw9IGBzYmItdGFiLSR7bmV4dElkKyt9YDtcbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcblxuICAgIC8vIEFzIHdlIGNhbid0IGluY2x1ZGUgdGhlIHNjcm9sbGJhciBtaXhpbiBvbiB0aGUgaG9zdCBhbmQgdG8gbWluaW1pemVcbiAgICAvLyBwYXlsb2FkLCB3ZSBkZWNpZGVkIHRvIGFkZCB0aGUgc2Nyb2xsYmFyIGNsYXNzIGhlcmUuXG4gICAgLy8gVGhpcyBpcyBhbiBleGNlcHRpb24gYXMgd2Ugbm9ybWFsbHkgZG9uJ3QgYWx0ZXIgdGhlIGNsYXNzTGlzdCBvZiB0aGUgaG9zdC5cbiAgICB0aGlzLmNsYXNzTGlzdC5hZGQoJ3NiYi1zY3JvbGxiYXInKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHJvdGVjdGVkIGFjdGl2YXRlKCk6IHZvaWQge1xuICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQoJ2FjdGl2ZScpO1xuICAgIHRoaXMuX3RhYkNvbnRlbnRSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwcm90ZWN0ZWQgZGVhY3RpdmF0ZSgpOiB2b2lkIHtcbiAgICB0aGlzLl90YWJDb250ZW50UmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMpO1xuICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoJ2FjdGl2ZScpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25UYWJDb250ZW50RWxlbWVudFJlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmdyb3VwPy5bJ3NldFRhYkNvbnRlbnRIZWlnaHQnXShNYXRoLmZsb29yKHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGA8c2xvdD48L3Nsb3Q+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXRhYic6IFNiYlRhYkVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQ1NBLElBQUksU0FBUzs7Ozs7OztBQVFiLElBQWEsZ0JBQWIsY0FBbUMsV0FBVTtDQUE3QyxjQUFBOztBQVFVLE9BQUEsNEJBQTRCLElBQUksaUJBQWlCLE1BQU07R0FDN0QsUUFBUTtHQUNSLGFBQWE7R0FDYixnQkFBZ0IsS0FBSyw0QkFBQTtHQUN0QixDQUFDOzs7QUFYOEIsT0FBQSxjQUFzQjs7O0FBQy9CLE9BQUEsT0FBTzs7O0FBQ1AsT0FBQSxTQUF5QixVQUFVLFlBQU07OztBQUN6QyxPQUFBLFNBQVMsRUFDOUIsUUFBUSxVQUNBOzs7Q0FTVixJQUFXLFFBQUs7QUFDZCxTQUFPLEtBQUssd0JBQXdCLGNBQWMsa0JBQzdDLEtBQUsseUJBQ047OztDQUlOLElBQVcsUUFBSztBQUNkLFNBQU8sS0FBSyxRQUFRLGdCQUFnQjs7Q0FHdEIsb0JBQWlCO0FBQy9CLFFBQU0sbUJBQW1CO0FBRXpCLE9BQUssT0FBTyxXQUFXO0FBQ3ZCLE9BQUssV0FBVztBQUtoQixPQUFLLFVBQVUsSUFBSSxnQkFBZ0I7OztDQUkzQixXQUFRO0FBQ2hCLE9BQUssVUFBVSxPQUFPLElBQUksU0FBUztBQUNuQyxPQUFLLDBCQUEwQixRQUFRLEtBQUs7OztDQUlwQyxhQUFVO0FBQ2xCLE9BQUssMEJBQTBCLFVBQVUsS0FBSztBQUM5QyxPQUFLLFVBQVUsT0FBTyxPQUFPLFNBQVM7O0NBR2hDLDZCQUEwQjtBQUNoQyxPQUFLLFFBQVEsdUJBQXVCLEtBQUssTUFBTSxLQUFLLHVCQUF1QixDQUFDLE9BQU8sQ0FBQzs7Q0FHbkUsU0FBTTtBQUN2QixTQUFPLElBQUkifQ==
@@ -1,119 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { html, isServer, unsafeCSS } from "lit";
3
- import { property } from "lit/decorators.js";
4
- import { SbbElement, SbbNegativeMixin, forceType } from "./core.js";
5
- import { ResizeController } from "@lit-labs/observers/resize-controller.js";
6
- //#region src/elements/table/table-wrapper/table-wrapper.scss?inline
7
- var table_wrapper_default = ":host {\n display: block;\n overflow: auto;\n}\n\n:host(:focus-visible) {\n outline-offset: var(--sbb-focus-outline-offset);\n outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);\n}\n\n::slotted(.sbb-table) {\n width: 100%;\n}";
8
- //#endregion
9
- //#region src/elements/table/table-wrapper/table-wrapper.component.ts
10
- /**
11
- * Wraps a table to enhance its functionality.
12
- *
13
- * @slot - Use the unnamed slot to add the table.
14
- */
15
- var SbbTableWrapperElement = (() => {
16
- let _classSuper = SbbNegativeMixin(SbbElement);
17
- let _focusable_decorators;
18
- let _focusable_initializers = [];
19
- let _focusable_extraInitializers = [];
20
- return class SbbTableWrapperElement extends _classSuper {
21
- static {
22
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
23
- _focusable_decorators = [forceType(), property({
24
- reflect: true,
25
- type: Boolean
26
- })];
27
- __esDecorate(this, null, _focusable_decorators, {
28
- kind: "accessor",
29
- name: "focusable",
30
- static: false,
31
- private: false,
32
- access: {
33
- has: (obj) => "focusable" in obj,
34
- get: (obj) => obj.focusable,
35
- set: (obj, value) => {
36
- obj.focusable = value;
37
- }
38
- },
39
- metadata: _metadata
40
- }, _focusable_initializers, _focusable_extraInitializers);
41
- if (_metadata) Object.defineProperty(this, Symbol.metadata, {
42
- enumerable: true,
43
- configurable: true,
44
- writable: true,
45
- value: _metadata
46
- });
47
- }
48
- static {
49
- this.elementName = "sbb-table-wrapper";
50
- }
51
- static {
52
- this.role = "section";
53
- }
54
- static {
55
- this.styles = unsafeCSS(table_wrapper_default);
56
- }
57
- #focusable_accessor_storage = __runInitializers(this, _focusable_initializers, false);
58
- /** Whether the table wrapper is focusable. */
59
- get focusable() {
60
- return this.#focusable_accessor_storage;
61
- }
62
- set focusable(value) {
63
- this.#focusable_accessor_storage = value;
64
- }
65
- constructor() {
66
- super();
67
- __runInitializers(this, _focusable_extraInitializers);
68
- this.addController(new ResizeController(this, {
69
- skipInitial: true,
70
- callback: () => this._checkHorizontalScrollbarOffset()
71
- }));
72
- this.addEventListener?.("scroll", () => this._checkHorizontalScrollbarOffset(), { passive: true });
73
- }
74
- connectedCallback() {
75
- super.connectedCallback();
76
- this._updateScrollbarClass();
77
- }
78
- willUpdate(changedProperties) {
79
- super.willUpdate(changedProperties);
80
- if (changedProperties.has("focusable")) if (this.focusable) {
81
- if (!this.hasAttribute("tabindex")) this.setAttribute("tabindex", "0");
82
- } else this.removeAttribute("tabindex");
83
- if (changedProperties.has("negative")) this._updateScrollbarClass();
84
- }
85
- _updateScrollbarClass() {
86
- if (isServer) return;
87
- if (this.negative) {
88
- this.classList.remove("sbb-scrollbar-thick-track-visible");
89
- this.classList.add("sbb-scrollbar-thick-negative-track-visible");
90
- } else {
91
- this.classList.remove("sbb-scrollbar-thick-negative-track-visible");
92
- this.classList.add("sbb-scrollbar-thick-track-visible");
93
- }
94
- }
95
- /**
96
- * Calculates whether the table is horizontally scrolled and adds the
97
- * corresponding class `sbb-table-wrapper-offset-${none | left | right | both}`
98
- */
99
- _checkHorizontalScrollbarOffset() {
100
- const state = this._calculateScrollOffset();
101
- this.classList.remove(`sbb-table-wrapper-offset-none`, `sbb-table-wrapper-offset-left`, `sbb-table-wrapper-offset-right`, `sbb-table-wrapper-offset-both`);
102
- this.classList.add(`sbb-table-wrapper-offset-${state}`);
103
- }
104
- _calculateScrollOffset() {
105
- if (this.scrollWidth === this.offsetWidth) return "none";
106
- const isAtStart = this.scrollLeft === 0;
107
- const isAtEnd = this.scrollWidth - this.scrollLeft - this.offsetWidth <= 1;
108
- if (isAtStart) return isAtEnd ? "none" : "right";
109
- return isAtEnd ? "left" : "both";
110
- }
111
- render() {
112
- return html`<slot></slot>`;
113
- }
114
- };
115
- })();
116
- //#endregion
117
- export { SbbTableWrapperElement as t };
118
-
119
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtd3JhcHBlci5jb21wb25lbnQtaVNlVC1GUEguanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3RhYmxlL3RhYmxlLXdyYXBwZXIvdGFibGUtd3JhcHBlci5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy90YWJsZS90YWJsZS13cmFwcGVyL3RhYmxlLXdyYXBwZXIuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uLy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG46aG9zdCg6Zm9jdXMtdmlzaWJsZSkge1xuICBAaW5jbHVkZSBzYmIuZm9jdXMtb3V0bGluZTtcbn1cblxuOjpzbG90dGVkKC5zYmItdGFibGUpIHtcbiAgd2lkdGg6IDEwMCU7XG59XG4iLCJpbXBvcnQgeyBSZXNpemVDb250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9yZXNpemUtY29udHJvbGxlci5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbiAgdW5zYWZlQ1NTLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IGZvcmNlVHlwZSwgU2JiRWxlbWVudCwgU2JiTmVnYXRpdmVNaXhpbiB9IGZyb20gJy4uLy4uL2NvcmUudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi90YWJsZS13cmFwcGVyLnNjc3M/aW5saW5lJztcblxuLyoqXG4gKiBXcmFwcyBhIHRhYmxlIHRvIGVuaGFuY2UgaXRzIGZ1bmN0aW9uYWxpdHkuXG4gKlxuICogQHNsb3QgLSBVc2UgdGhlIHVubmFtZWQgc2xvdCB0byBhZGQgdGhlIHRhYmxlLlxuICovXG5leHBvcnQgY2xhc3MgU2JiVGFibGVXcmFwcGVyRWxlbWVudCBleHRlbmRzIFNiYk5lZ2F0aXZlTWl4aW4oU2JiRWxlbWVudCkge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLXRhYmxlLXdyYXBwZXInO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IHJvbGUgPSAnc2VjdGlvbic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHVuc2FmZUNTUyhzdHlsZSk7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHRhYmxlIHdyYXBwZXIgaXMgZm9jdXNhYmxlLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZm9jdXNhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRDb250cm9sbGVyKFxuICAgICAgbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgICAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuX2NoZWNrSG9yaXpvbnRhbFNjcm9sbGJhck9mZnNldCgpLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcj8uKCdzY3JvbGwnLCAoKSA9PiB0aGlzLl9jaGVja0hvcml6b250YWxTY3JvbGxiYXJPZmZzZXQoKSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuXG4gICAgLy8gQXMgd2UgY2FuJ3QgaW5jbHVkZSB0aGUgc2Nyb2xsYmFyIG1peGluIG9uIHRoZSBob3N0IGFuZCB0byBtaW5pbWl6ZVxuICAgIC8vIHBheWxvYWQsIHdlIGRlY2lkZWQgdG8gYWRkIHRoZSBzY3JvbGxiYXIgY2xhc3MgaGVyZS5cbiAgICAvLyBUaGlzIGlzIGFuIGV4Y2VwdGlvbiBhcyB3ZSBub3JtYWxseSBkb24ndCBhbHRlciB0aGUgY2xhc3NMaXN0IG9mIHRoZSBob3N0LlxuICAgIHRoaXMuX3VwZGF0ZVNjcm9sbGJhckNsYXNzKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ2ZvY3VzYWJsZScpKSB7XG4gICAgICBpZiAodGhpcy5mb2N1c2FibGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZSgndGFiaW5kZXgnKSkge1xuICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICcwJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ25lZ2F0aXZlJykpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZVNjcm9sbGJhckNsYXNzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU2Nyb2xsYmFyQ2xhc3MoKTogdm9pZCB7XG4gICAgaWYgKGlzU2VydmVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm5lZ2F0aXZlKSB7XG4gICAgICB0aGlzLmNsYXNzTGlzdC5yZW1vdmUoJ3NiYi1zY3JvbGxiYXItdGhpY2stdHJhY2stdmlzaWJsZScpO1xuICAgICAgdGhpcy5jbGFzc0xpc3QuYWRkKCdzYmItc2Nyb2xsYmFyLXRoaWNrLW5lZ2F0aXZlLXRyYWNrLXZpc2libGUnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKCdzYmItc2Nyb2xsYmFyLXRoaWNrLW5lZ2F0aXZlLXRyYWNrLXZpc2libGUnKTtcbiAgICAgIHRoaXMuY2xhc3NMaXN0LmFkZCgnc2JiLXNjcm9sbGJhci10aGljay10cmFjay12aXNpYmxlJyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqICBDYWxjdWxhdGVzIHdoZXRoZXIgdGhlIHRhYmxlIGlzIGhvcml6b250YWxseSBzY3JvbGxlZCBhbmQgYWRkcyB0aGVcbiAgICogIGNvcnJlc3BvbmRpbmcgY2xhc3MgYHNiYi10YWJsZS13cmFwcGVyLW9mZnNldC0ke25vbmUgfCBsZWZ0IHwgcmlnaHQgfCBib3RofWBcbiAgICovXG4gIHByaXZhdGUgX2NoZWNrSG9yaXpvbnRhbFNjcm9sbGJhck9mZnNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuX2NhbGN1bGF0ZVNjcm9sbE9mZnNldCgpO1xuICAgIHRoaXMuY2xhc3NMaXN0LnJlbW92ZShcbiAgICAgIGBzYmItdGFibGUtd3JhcHBlci1vZmZzZXQtbm9uZWAsXG4gICAgICBgc2JiLXRhYmxlLXdyYXBwZXItb2Zmc2V0LWxlZnRgLFxuICAgICAgYHNiYi10YWJsZS13cmFwcGVyLW9mZnNldC1yaWdodGAsXG4gICAgICBgc2JiLXRhYmxlLXdyYXBwZXItb2Zmc2V0LWJvdGhgLFxuICAgICk7XG4gICAgdGhpcy5jbGFzc0xpc3QuYWRkKGBzYmItdGFibGUtd3JhcHBlci1vZmZzZXQtJHtzdGF0ZX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZVNjcm9sbE9mZnNldCgpOiAnbm9uZScgfCAnbGVmdCcgfCAncmlnaHQnIHwgJ2JvdGgnIHtcbiAgICBpZiAodGhpcy5zY3JvbGxXaWR0aCA9PT0gdGhpcy5vZmZzZXRXaWR0aCkge1xuICAgICAgcmV0dXJuICdub25lJztcbiAgICB9XG4gICAgY29uc3QgaXNBdFN0YXJ0ID0gdGhpcy5zY3JvbGxMZWZ0ID09PSAwO1xuICAgIC8vIEluIHNvbWUgY2FzZXMgdGhlIGNvbWJpbmVkIHZhbHVlIG9mIHNjcm9sbExlZnQgYW5kIG9mZnNldFdpZHRoIGlzIG9mZiBieVxuICAgIC8vIDEgcGl4ZWwgZnJvbSB0aGUgc2Nyb2xsV2lkdGguXG4gICAgY29uc3QgaXNBdEVuZCA9IHRoaXMuc2Nyb2xsV2lkdGggLSB0aGlzLnNjcm9sbExlZnQgLSB0aGlzLm9mZnNldFdpZHRoIDw9IDE7XG5cbiAgICBpZiAoaXNBdFN0YXJ0KSB7XG4gICAgICByZXR1cm4gaXNBdEVuZCA/ICdub25lJyA6ICdyaWdodCc7XG4gICAgfVxuICAgIHJldHVybiBpc0F0RW5kID8gJ2xlZnQnIDogJ2JvdGgnO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgPHNsb3Q+PC9zbG90PmA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi10YWJsZS13cmFwcGVyJzogU2JiVGFibGVXcmFwcGVyRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztJQ29CYSxnQ0FBc0I7bUJBQVMsaUJBQWlCLFdBQVc7Ozs7Y0FBM0QsK0JBQStCLFlBQTRCOzs7NEJBTXJFLFdBQVcsRUFDWCxTQUFTO0lBQUUsU0FBUztJQUFNLE1BQU07SUFBUyxDQUFDLENBQUE7QUFDM0MsZ0JBQUEsTUFBQSxNQUFBLHVCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsZUFBQTtLQUFBLE1BQUEsUUFBQSxJQUFnQjtLQUFTLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBVCxZQUFTOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEseUJBQUEsNkJBQUE7Ozs7Ozs7OztBQVBPLFFBQUEsY0FBc0I7OztBQUN0QixRQUFBLE9BQU87OztBQUNoQixRQUFBLFNBQXlCLFVBQVUsc0JBQU07O0VBS2hFLDhCQUFBLGtCQUFBLE1BQUEseUJBQXFDLE1BQUs7O0VBQTFDLElBQWdCLFlBQVM7QUFBQSxVQUFBLE1BQUE7O0VBQXpCLElBQWdCLFVBQVMsT0FBQTtBQUFBLFNBQUEsNkJBQUE7O0VBRXpCLGNBQUE7QUFDRSxVQUFPOztBQUNQLFFBQUssY0FDSCxJQUFJLGlCQUFpQixNQUFNO0lBQ3pCLGFBQWE7SUFDYixnQkFBZ0IsS0FBSyxpQ0FBQTtJQUN0QixDQUFDLENBQ0g7QUFFRCxRQUFLLG1CQUFtQixnQkFBZ0IsS0FBSyxpQ0FBaUMsRUFBRSxFQUM5RSxTQUFTLE1BQ1YsQ0FBQzs7RUFHWSxvQkFBaUI7QUFDL0IsU0FBTSxtQkFBbUI7QUFLekIsUUFBSyx1QkFBdUI7O0VBR1gsV0FBVyxtQkFBdUM7QUFDbkUsU0FBTSxXQUFXLGtCQUFrQjtBQUVuQyxPQUFJLGtCQUFrQixJQUFJLFlBQVksQ0FDcEMsS0FBSSxLQUFLO1FBQ0gsQ0FBQyxLQUFLLGFBQWEsV0FBVyxDQUNoQyxNQUFLLGFBQWEsWUFBWSxJQUFJO1NBR3BDLE1BQUssZ0JBQWdCLFdBQVc7QUFJcEMsT0FBSSxrQkFBa0IsSUFBSSxXQUFXLENBQ25DLE1BQUssdUJBQXVCOztFQUl4Qix3QkFBcUI7QUFDM0IsT0FBSSxTQUNGO0FBRUYsT0FBSSxLQUFLLFVBQVU7QUFDakIsU0FBSyxVQUFVLE9BQU8sb0NBQW9DO0FBQzFELFNBQUssVUFBVSxJQUFJLDZDQUE2QztVQUMzRDtBQUNMLFNBQUssVUFBVSxPQUFPLDZDQUE2QztBQUNuRSxTQUFLLFVBQVUsSUFBSSxvQ0FBb0M7Ozs7Ozs7RUFRbkQsa0NBQStCO0dBQ3JDLE1BQU0sUUFBUSxLQUFLLHdCQUF3QjtBQUMzQyxRQUFLLFVBQVUsT0FDYixpQ0FDQSxpQ0FDQSxrQ0FDQSxnQ0FDRDtBQUNELFFBQUssVUFBVSxJQUFJLDRCQUE0QixRQUFROztFQUdqRCx5QkFBc0I7QUFDNUIsT0FBSSxLQUFLLGdCQUFnQixLQUFLLFlBQzVCLFFBQU87R0FFVCxNQUFNLFlBQVksS0FBSyxlQUFlO0dBR3RDLE1BQU0sVUFBVSxLQUFLLGNBQWMsS0FBSyxhQUFhLEtBQUssZUFBZTtBQUV6RSxPQUFJLFVBQ0YsUUFBTyxVQUFVLFNBQVM7QUFFNUIsVUFBTyxVQUFVLFNBQVM7O0VBR1QsU0FBTTtBQUN2QixVQUFPLElBQUkifQ==
@@ -1,371 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { html, isServer, unsafeCSS } from "lit";
3
- import { property } from "lit/decorators.js";
4
- import { SbbDisabledMixin, SbbEscapableOverlayController, SbbOpenCloseBaseElement, SbbOverlayPositionController, appendAriaElements, boxSizingStyles, idReference, isAndroid, isIOS, isZeroAnimationDuration, queueDomContentLoaded, readConfig, removeAriaElements, sbbOverlayOutsidePointerEventListener } from "./core.js";
5
- //#region src/elements/tooltip/tooltip.scss?inline
6
- var tooltip_default = ":host {\n --sbb-tooltip-max-width: min(\n 25rem,\n calc(100vw - var(--sbb-spacing-fixed-2x))\n );\n --sbb-tooltip-animation-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-4x)\n );\n position-area: var(--sbb-overlay-position-area);\n position-try-fallbacks: var(--sbb-overlay-position-try-fallbacks);\n display: none;\n position: fixed;\n background-color: transparent;\n pointer-events: var(--sbb-tooltip-pointer-events, all);\n z-index: var(--sbb-tooltip-z-index, var(--sbb-overlay-default-z-index));\n animation-name: var(--sbb-tooltip-animation-name);\n animation-duration: var(--sbb-tooltip-animation-duration);\n animation-timing-function: var(--sbb-tooltip-animation-easing);\n font-size: var(--sbb-tooltip-font-size);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n border: none;\n inset: initial;\n padding: 0;\n margin: 0;\n}\n\n:host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-opened),[state--state-opened]), :is(:state(state-closing),[state--state-closing]))) {\n --sbb-tooltip-animation-name: open;\n display: block;\n}\n\n:host(:is(:state(state-closing),[state--state-closing])) {\n --sbb-tooltip-animation-name: close;\n --sbb-tooltip-pointer-events: none;\n}\n\n:host(:is([data-position~=block-end], [data-position~=bottom], [data-position^=end])) {\n padding-block-start: var(--sbb-tooltip-gap);\n}\n\n:host(:is([data-position~=block-start], [data-position~=top], [data-position^=start])) {\n padding-block-end: var(--sbb-tooltip-gap);\n}\n\n:host(:is([data-position~=inline-start],\n[data-position~=inline-end],\n[data-position~=left],\n[data-position~=right],\n[data-position$=\" start\"],\n[data-position$=\" end\"])) {\n padding-inline: var(--sbb-tooltip-gap);\n}\n\n.sbb-tooltip {\n box-shadow: var(--sbb-box-shadow-level-5-soft);\n border: var(--sbb-border-width-1x) solid var(--sbb-tooltip-border-color);\n border-radius: var(--sbb-tooltip-border-radius);\n padding: var(--sbb-tooltip-padding);\n color: var(--sbb-tooltip-color);\n background-color: var(--sbb-tooltip-background-color);\n min-width: var(--sbb-tooltip-min-width);\n max-width: var(--sbb-tooltip-max-width);\n}\n\n@keyframes open {\n from {\n opacity: 0;\n translate: var(--sbb-tooltip-animation-translate);\n }\n to {\n opacity: 1;\n translate: 0;\n }\n}\n@keyframes close {\n from {\n opacity: 1;\n translate: 0;\n }\n to {\n opacity: 0;\n translate: var(--sbb-tooltip-animation-translate);\n }\n}";
7
- //#endregion
8
- //#region src/elements/tooltip/tooltip.component.ts
9
- /**
10
- * Time between the user putting the pointer on a tooltip
11
- * trigger and the long press event being fired.
12
- */
13
- var LONGPRESS_DELAY = 500;
14
- var isMobile = isAndroid || isIOS;
15
- var tooltipTriggers = /* @__PURE__ */ new WeakMap();
16
- var nextId = 0;
17
- /**
18
- * It displays text content within a tooltip.
19
- *
20
- * @slot - Use the unnamed slot to add the text into the tooltip.
21
- * @cssprop [--sbb-overlay-position-area=block-end] - The primary position for the tooltip.
22
- * @cssprop [--sbb-overlay-position-try-fallbacks=block-end span-inline-end, block-end span-inline-start, block-start, block-start span-inline-end, block-start span-inline-start] -
23
- * The list of fallback positions, separated by ',', for the tooltip
24
- * @cssprop [--sbb-tooltip-z-index=var(--sbb-overlay-default-z-index)] - To specify a custom stack order,
25
- * the `z-index` can be overridden by defining this CSS variable. The default `z-index` of the
26
- * component is set to `var(--sbb-overlay-default-z-index)` with a value of `1000`.
27
- */
28
- var SbbTooltipElement = (() => {
29
- let _classSuper = SbbDisabledMixin(SbbOpenCloseBaseElement);
30
- let _instanceExtraInitializers = [];
31
- let _trigger_decorators;
32
- let _trigger_initializers = [];
33
- let _trigger_extraInitializers = [];
34
- let _set_openDelay_decorators;
35
- let _set_closeDelay_decorators;
36
- let _set_longPressCloseDelay_decorators;
37
- return class SbbTooltipElement extends _classSuper {
38
- static {
39
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
40
- _trigger_decorators = [idReference(), property()];
41
- _set_openDelay_decorators = [property({
42
- attribute: "open-delay",
43
- type: Number
44
- })];
45
- _set_closeDelay_decorators = [property({
46
- attribute: "close-delay",
47
- type: Number
48
- })];
49
- _set_longPressCloseDelay_decorators = [property({
50
- attribute: "long-press-close-delay",
51
- type: Number
52
- })];
53
- __esDecorate(this, null, _trigger_decorators, {
54
- kind: "accessor",
55
- name: "trigger",
56
- static: false,
57
- private: false,
58
- access: {
59
- has: (obj) => "trigger" in obj,
60
- get: (obj) => obj.trigger,
61
- set: (obj, value) => {
62
- obj.trigger = value;
63
- }
64
- },
65
- metadata: _metadata
66
- }, _trigger_initializers, _trigger_extraInitializers);
67
- __esDecorate(this, null, _set_openDelay_decorators, {
68
- kind: "setter",
69
- name: "openDelay",
70
- static: false,
71
- private: false,
72
- access: {
73
- has: (obj) => "openDelay" in obj,
74
- set: (obj, value) => {
75
- obj.openDelay = value;
76
- }
77
- },
78
- metadata: _metadata
79
- }, null, _instanceExtraInitializers);
80
- __esDecorate(this, null, _set_closeDelay_decorators, {
81
- kind: "setter",
82
- name: "closeDelay",
83
- static: false,
84
- private: false,
85
- access: {
86
- has: (obj) => "closeDelay" in obj,
87
- set: (obj, value) => {
88
- obj.closeDelay = value;
89
- }
90
- },
91
- metadata: _metadata
92
- }, null, _instanceExtraInitializers);
93
- __esDecorate(this, null, _set_longPressCloseDelay_decorators, {
94
- kind: "setter",
95
- name: "longPressCloseDelay",
96
- static: false,
97
- private: false,
98
- access: {
99
- has: (obj) => "longPressCloseDelay" in obj,
100
- set: (obj, value) => {
101
- obj.longPressCloseDelay = value;
102
- }
103
- },
104
- metadata: _metadata
105
- }, null, _instanceExtraInitializers);
106
- if (_metadata) Object.defineProperty(this, Symbol.metadata, {
107
- enumerable: true,
108
- configurable: true,
109
- writable: true,
110
- value: _metadata
111
- });
112
- }
113
- static {
114
- this.elementName = "sbb-tooltip";
115
- }
116
- static {
117
- this.role = "tooltip";
118
- }
119
- static {
120
- this.styles = [boxSizingStyles, unsafeCSS(tooltip_default)];
121
- }
122
- static {
123
- if (!isServer) queueDomContentLoaded(() => this._initializeTooltipOutlet());
124
- }
125
- #trigger_accessor_storage;
126
- /**
127
- * The element that will trigger the tooltip overlay.
128
- *
129
- * For attribute usage, provide an id reference.
130
- */
131
- get trigger() {
132
- return this.#trigger_accessor_storage;
133
- }
134
- set trigger(value) {
135
- this.#trigger_accessor_storage = value;
136
- }
137
- /**
138
- * Open the tooltip after a given delay in milliseconds.
139
- * Global configuration is used as default, if not set.
140
- *
141
- * @default null
142
- */
143
- set openDelay(value) {
144
- this._openDelay = value;
145
- }
146
- get openDelay() {
147
- return this._openDelay ?? readConfig().tooltip?.openDelay ?? 0;
148
- }
149
- /**
150
- * Close the tooltip after a given delay in milliseconds.
151
- * Global configuration is used as default, if not set.
152
- *
153
- * @default null
154
- */
155
- set closeDelay(value) {
156
- this._closeDelay = value;
157
- }
158
- get closeDelay() {
159
- return this._closeDelay ?? readConfig().tooltip?.closeDelay ?? 0;
160
- }
161
- /**
162
- * Automatically close the tooltip after it has been open by long press.
163
- * Global configuration is used as default, if not set.
164
- *
165
- * @default 1500
166
- */
167
- set longPressCloseDelay(value) {
168
- this._longPressCloseDelay = +value;
169
- }
170
- get longPressCloseDelay() {
171
- return this._longPressCloseDelay ?? readConfig().tooltip?.longPressCloseDelay ?? 1500;
172
- }
173
- constructor() {
174
- super();
175
- this.#trigger_accessor_storage = (__runInitializers(this, _instanceExtraInitializers), __runInitializers(this, _trigger_initializers, null));
176
- this._openDelay = (__runInitializers(this, _trigger_extraInitializers), null);
177
- this._closeDelay = null;
178
- this._triggerElement = null;
179
- this._escapableOverlayController = new SbbEscapableOverlayController(this);
180
- this._overlayController = new SbbOverlayPositionController(this);
181
- this.addEventListener("mouseleave", (event) => {
182
- if ((this.state === "opened" || this.state === "opening") && (!event.relatedTarget || !this._triggerElement?.contains(event.relatedTarget))) this._delayedClose();
183
- }, { passive: true });
184
- this.addEventListener("overlayOutsidePointer", () => this.close(), { passive: true });
185
- this.addEventListener("animationend", (e) => this._onTooltipAnimationEnd(e), { passive: true });
186
- }
187
- static _initializeTooltipOutlet() {
188
- this._tooltipOutlet = document.createElement("div");
189
- this._tooltipOutlet.classList.add("sbb-overlay-outlet");
190
- document.body.appendChild(this._tooltipOutlet);
191
- new MutationObserver((mutations) => {
192
- for (const mutation of mutations) if (mutation.type === "attributes") this._handleTooltipTrigger(mutation.target);
193
- else if (mutation.type === "childList") for (const node of [...mutation.addedNodes, ...mutation.removedNodes].filter((n) => n.nodeType === n.ELEMENT_NODE)) {
194
- this._handleTooltipTrigger(node);
195
- this._findAndHandleTooltipTriggers(node);
196
- }
197
- }).observe(document.documentElement, {
198
- attributeFilter: [
199
- "sbb-tooltip",
200
- "sbb-tooltip-open-delay",
201
- "sbb-tooltip-close-delay",
202
- "sbb-tooltip-position"
203
- ],
204
- childList: true,
205
- subtree: true
206
- });
207
- this._findAndHandleTooltipTriggers(document.body);
208
- }
209
- static _findAndHandleTooltipTriggers(root) {
210
- root.querySelectorAll("[sbb-tooltip]").forEach((e) => this._handleTooltipTrigger(e));
211
- }
212
- static _handleTooltipTrigger(triggerElement) {
213
- const tooltipMessage = triggerElement.getAttribute("sbb-tooltip");
214
- let tooltip = tooltipTriggers.get(triggerElement);
215
- if (tooltipMessage && triggerElement.isConnected) {
216
- if (!tooltip) {
217
- tooltip = document.createElement("sbb-tooltip");
218
- tooltipTriggers.set(triggerElement, tooltip);
219
- this._tooltipOutlet.appendChild(tooltip);
220
- tooltip.trigger = triggerElement;
221
- }
222
- tooltip.textContent = tooltipMessage;
223
- tooltip.openDelay = triggerElement.hasAttribute("sbb-tooltip-open-delay") ? +triggerElement.getAttribute("sbb-tooltip-open-delay") : null;
224
- tooltip.closeDelay = triggerElement.hasAttribute("sbb-tooltip-close-delay") ? +triggerElement.getAttribute("sbb-tooltip-close-delay") : null;
225
- const positions = triggerElement.hasAttribute("sbb-tooltip-position") ? triggerElement.getAttribute("sbb-tooltip-position").split(",").map((p) => p.trim()) : triggerElement.tooltipPositions;
226
- if (positions && positions.length > 0) {
227
- tooltip.style.setProperty("--sbb-overlay-position-area", positions[0]);
228
- tooltip.style.setProperty("--sbb-overlay-position-try-fallbacks", positions.slice(1).join(", "));
229
- } else {
230
- tooltip.style.removeProperty("--sbb-overlay-position-area");
231
- tooltip.style.removeProperty("--sbb-overlay-position-try-fallbacks");
232
- }
233
- } else if (tooltip) {
234
- tooltipTriggers.delete(triggerElement);
235
- tooltip._destroy?.();
236
- }
237
- }
238
- connectedCallback() {
239
- super.connectedCallback();
240
- this.popover = "manual";
241
- this.id ||= `sbb-tooltip-${++nextId}`;
242
- this.state = "closed";
243
- sbbOverlayOutsidePointerEventListener.connect(this);
244
- if (this.hasUpdated && this.trigger) this._attach(this.trigger);
245
- }
246
- disconnectedCallback() {
247
- super.disconnectedCallback();
248
- sbbOverlayOutsidePointerEventListener.disconnect(this);
249
- this._detach();
250
- }
251
- requestUpdate(name, oldValue, options) {
252
- super.requestUpdate(name, oldValue, options);
253
- if (isServer) return;
254
- if ((!name || name === "trigger") && this.hasUpdated) this._attach(this.trigger);
255
- }
256
- firstUpdated(changedProperties) {
257
- super.firstUpdated(changedProperties);
258
- this._attach(this.trigger);
259
- }
260
- open() {
261
- this._resetOpenCloseTimeout();
262
- if (this.state !== "closed" && this.state !== "closing" || this.disabled || !this.trigger || !this.dispatchBeforeOpenEvent()) return;
263
- this.showPopover?.();
264
- this.state = "opening";
265
- this._overlayController.connect(this.trigger);
266
- if (this._isZeroAnimationDuration()) this._handleOpening();
267
- }
268
- close() {
269
- this._resetOpenCloseTimeout();
270
- if (this.state !== "opened" && this.state !== "opening") return;
271
- this.dispatchBeforeCloseEvent();
272
- this.state = "closing";
273
- if (this._isZeroAnimationDuration()) this._handleClosing();
274
- }
275
- _delayedOpen() {
276
- this._resetOpenCloseTimeout();
277
- this._openTimeout = setTimeout(() => this.open(), this.openDelay);
278
- }
279
- _handleOpening() {
280
- this.state = "opened";
281
- this._escapableOverlayController.connect();
282
- this.dispatchOpenEvent();
283
- }
284
- _delayedClose() {
285
- this._resetOpenCloseTimeout();
286
- this._closeTimeout = setTimeout(() => this.close(), this.closeDelay);
287
- }
288
- _handleClosing() {
289
- this.state = "closed";
290
- this.hidePopover?.();
291
- this._overlayController.disconnect();
292
- this._escapableOverlayController.disconnect();
293
- this.dispatchCloseEvent();
294
- this._openStateController?.abort();
295
- }
296
- _onTooltipAnimationEnd(event) {
297
- if (event.animationName === "open" && this.state === "opening") this._handleOpening();
298
- else if (event.animationName === "close" && this.state === "closing") this._handleClosing();
299
- }
300
- _attach(trigger) {
301
- if (this._triggerElement) this._detach();
302
- this._triggerElement = trigger;
303
- if (!this._triggerElement) return;
304
- this._triggerElement.ariaDescribedByElements = appendAriaElements(this._triggerElement.ariaDescribedByElements, this);
305
- this._addTriggerEventHandlers();
306
- }
307
- _detach() {
308
- this._triggerAbortController?.abort();
309
- this._openStateController?.abort();
310
- this._resetOpenCloseTimeout();
311
- clearTimeout(this._longPressOpenTimeout);
312
- clearTimeout(this._longPressCloseTimeout);
313
- if (!this._triggerElement) return;
314
- this._triggerElement.ariaDescribedByElements = removeAriaElements(this._triggerElement.ariaDescribedByElements, this);
315
- this._triggerElement = null;
316
- }
317
- _destroy() {
318
- this._detach();
319
- this.remove();
320
- }
321
- _addTriggerEventHandlers() {
322
- const trigger = this._triggerElement;
323
- if (!trigger) return;
324
- this._triggerAbortController?.abort();
325
- this._triggerAbortController = new AbortController();
326
- const options = {
327
- signal: this._triggerAbortController.signal,
328
- passive: true
329
- };
330
- if (!isMobile) {
331
- trigger.addEventListener("mouseenter", () => this._delayedOpen(), options);
332
- trigger.addEventListener("mouseleave", (event) => {
333
- const newTarget = event.relatedTarget;
334
- if (!newTarget || newTarget !== this) this._delayedClose();
335
- }, options);
336
- trigger.addEventListener("blur", () => this.close(), options);
337
- trigger.addEventListener("focus", () => this._delayedOpen(), options);
338
- }
339
- trigger.addEventListener("touchstart", () => {
340
- clearTimeout(this._longPressOpenTimeout);
341
- clearTimeout(this._longPressCloseTimeout);
342
- this._longPressOpenTimeout = setTimeout(() => this.open(), LONGPRESS_DELAY);
343
- }, options);
344
- trigger.addEventListener("touchend", () => {
345
- clearTimeout(this._longPressOpenTimeout);
346
- this._longPressCloseTimeout = setTimeout(() => this.close(), this.longPressCloseDelay);
347
- }, options);
348
- trigger.addEventListener("touchcancel", () => {
349
- clearTimeout(this._longPressOpenTimeout);
350
- }, options);
351
- }
352
- _isZeroAnimationDuration() {
353
- return isZeroAnimationDuration(this, "--sbb-tooltip-animation-duration");
354
- }
355
- _resetOpenCloseTimeout() {
356
- clearTimeout(this._openTimeout);
357
- clearTimeout(this._closeTimeout);
358
- }
359
- render() {
360
- return html`
361
- <div class="sbb-tooltip">
362
- <slot></slot>
363
- </div>
364
- `;
365
- }
366
- };
367
- })();
368
- //#endregion
369
- export { SbbTooltipElement as t };
370
-
371
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbHRpcC5jb21wb25lbnQtQnRXVEsyUjAuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3Rvb2x0aXAvdG9vbHRpcC5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy90b29sdGlwL3Rvb2x0aXAuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgLS1zYmItdG9vbHRpcC1tYXgtd2lkdGg6IG1pbihcbiAgICAje3NiYi5weC10by1yZW0tYnVpbGQoNDAwKX0sXG4gICAgY2FsYygxMDB2dyAtIHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTJ4KSlcbiAgKTtcbiAgLS1zYmItdG9vbHRpcC1hbmltYXRpb24tZHVyYXRpb246IHZhcihcbiAgICAtLXNiYi1kaXNhYmxlLWFuaW1hdGlvbi1kdXJhdGlvbixcbiAgICB2YXIoLS1zYmItYW5pbWF0aW9uLWR1cmF0aW9uLTR4KVxuICApO1xuXG4gIHBvc2l0aW9uLWFyZWE6IHZhcigtLXNiYi1vdmVybGF5LXBvc2l0aW9uLWFyZWEpO1xuICBwb3NpdGlvbi10cnktZmFsbGJhY2tzOiB2YXIoLS1zYmItb3ZlcmxheS1wb3NpdGlvbi10cnktZmFsbGJhY2tzKTtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgcG9pbnRlci1ldmVudHM6IHZhcigtLXNiYi10b29sdGlwLXBvaW50ZXItZXZlbnRzLCBhbGwpO1xuICB6LWluZGV4OiB2YXIoLS1zYmItdG9vbHRpcC16LWluZGV4LCB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpKTtcbiAgYW5pbWF0aW9uLW5hbWU6IHZhcigtLXNiYi10b29sdGlwLWFuaW1hdGlvbi1uYW1lKTtcbiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1zYmItdG9vbHRpcC1hbmltYXRpb24tZHVyYXRpb24pO1xuICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1zYmItdG9vbHRpcC1hbmltYXRpb24tZWFzaW5nKTtcbiAgZm9udC1zaXplOiB2YXIoLS1zYmItdG9vbHRpcC1mb250LXNpemUpO1xuICBsZXR0ZXItc3BhY2luZzogdmFyKC0tc2JiLXR5cG8tbGV0dGVyLXNwYWNpbmctdGV4dCk7XG5cbiAgLy8gUmVzZXQgW3BvcG92ZXJdIHN0eWxlc1xuICBib3JkZXI6IG5vbmU7XG4gIGluc2V0OiBpbml0aWFsO1xuICBwYWRkaW5nOiAwO1xuICBtYXJnaW46IDA7XG59XG5cbjpob3N0KDppcyg6c3RhdGUoc3RhdGUtb3BlbmluZyksIDpzdGF0ZShzdGF0ZS1vcGVuZWQpLCA6c3RhdGUoc3RhdGUtY2xvc2luZykpKSB7XG4gIC0tc2JiLXRvb2x0aXAtYW5pbWF0aW9uLW5hbWU6IG9wZW47XG5cbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbjpob3N0KDpzdGF0ZShzdGF0ZS1jbG9zaW5nKSkge1xuICAtLXNiYi10b29sdGlwLWFuaW1hdGlvbi1uYW1lOiBjbG9zZTtcbiAgLS1zYmItdG9vbHRpcC1wb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuOmhvc3QoOmlzKFtkYXRhLXBvc2l0aW9ufj0nYmxvY2stZW5kJ10sIFtkYXRhLXBvc2l0aW9ufj0nYm90dG9tJ10sIFtkYXRhLXBvc2l0aW9uXj0nZW5kJ10pKSB7XG4gIHBhZGRpbmctYmxvY2stc3RhcnQ6IHZhcigtLXNiYi10b29sdGlwLWdhcCk7XG59XG5cbjpob3N0KDppcyhbZGF0YS1wb3NpdGlvbn49J2Jsb2NrLXN0YXJ0J10sIFtkYXRhLXBvc2l0aW9ufj0ndG9wJ10sIFtkYXRhLXBvc2l0aW9uXj0nc3RhcnQnXSkpIHtcbiAgcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNiYi10b29sdGlwLWdhcCk7XG59XG5cbjpob3N0KFxuICA6aXMoXG4gICAgW2RhdGEtcG9zaXRpb25+PSdpbmxpbmUtc3RhcnQnXSxcbiAgICBbZGF0YS1wb3NpdGlvbn49J2lubGluZS1lbmQnXSxcbiAgICBbZGF0YS1wb3NpdGlvbn49J2xlZnQnXSxcbiAgICBbZGF0YS1wb3NpdGlvbn49J3JpZ2h0J10sXG4gICAgW2RhdGEtcG9zaXRpb24kPScgc3RhcnQnXSxcbiAgICBbZGF0YS1wb3NpdGlvbiQ9JyBlbmQnXVxuICApXG4pIHtcbiAgLy8gQWRkIGEgZ2FwIG9uIGJvdGggc2lkZXMgdG8gZGlzdGFuY2UgdGhlIHRvb2x0aXAgZnJvbSB0aGUgdHJpZ2dlciBhbmQgdGhlIGVkZ2Ugb2YgdGhlIHZpZXdwb3J0LlxuICBwYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLXRvb2x0aXAtZ2FwKTtcbn1cblxuLnNiYi10b29sdGlwIHtcbiAgYm94LXNoYWRvdzogdmFyKC0tc2JiLWJveC1zaGFkb3ctbGV2ZWwtNS1zb2Z0KTtcbiAgYm9yZGVyOiB2YXIoLS1zYmItYm9yZGVyLXdpZHRoLTF4KSBzb2xpZCB2YXIoLS1zYmItdG9vbHRpcC1ib3JkZXItY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1zYmItdG9vbHRpcC1ib3JkZXItcmFkaXVzKTtcbiAgcGFkZGluZzogdmFyKC0tc2JiLXRvb2x0aXAtcGFkZGluZyk7XG4gIGNvbG9yOiB2YXIoLS1zYmItdG9vbHRpcC1jb2xvcik7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi10b29sdGlwLWJhY2tncm91bmQtY29sb3IpO1xuICBtaW4td2lkdGg6IHZhcigtLXNiYi10b29sdGlwLW1pbi13aWR0aCk7XG4gIG1heC13aWR0aDogdmFyKC0tc2JiLXRvb2x0aXAtbWF4LXdpZHRoKTtcbn1cblxuQGtleWZyYW1lcyBvcGVuIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2xhdGU6IHZhcigtLXNiYi10b29sdGlwLWFuaW1hdGlvbi10cmFuc2xhdGUpO1xuICB9XG5cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNsYXRlOiAwO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgY2xvc2Uge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zbGF0ZTogMDtcbiAgfVxuXG4gIHRvIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zbGF0ZTogdmFyKC0tc2JiLXRvb2x0aXAtYW5pbWF0aW9uLXRyYW5zbGF0ZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICB0eXBlIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG4gIHVuc2FmZUNTUyxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQge1xuICBhcHBlbmRBcmlhRWxlbWVudHMsXG4gIGJveFNpemluZ1N0eWxlcyxcbiAgaWRSZWZlcmVuY2UsXG4gIGlzQW5kcm9pZCxcbiAgaXNJT1MsXG4gIGlzWmVyb0FuaW1hdGlvbkR1cmF0aW9uLFxuICBxdWV1ZURvbUNvbnRlbnRMb2FkZWQsXG4gIHJlYWRDb25maWcsXG4gIHJlbW92ZUFyaWFFbGVtZW50cyxcbiAgU2JiRGlzYWJsZWRNaXhpbixcbiAgU2JiRXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIsXG4gIFNiYk9wZW5DbG9zZUJhc2VFbGVtZW50LFxuICBzYmJPdmVybGF5T3V0c2lkZVBvaW50ZXJFdmVudExpc3RlbmVyLFxuICBTYmJPdmVybGF5UG9zaXRpb25Db250cm9sbGVyLFxufSBmcm9tICcuLi9jb3JlLnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vdG9vbHRpcC5zY3NzP2lubGluZSc7XG5cbi8qKlxuICogRGVmaW5lcyB0aGUgZGVmYXVsdCBwb3NpdGlvbiBmb3IgdGhlIHRvb2x0aXAgaWYgdGhpcyBlbGVtZW50IGlzIHVzZWQgYXMgYSB0cmlnZ2VyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNiYlRvb2x0aXBEZWZhdWx0UG9zaXRpb25zIHtcbiAgcmVhZG9ubHkgdG9vbHRpcFBvc2l0aW9uczogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGltZSBiZXR3ZWVuIHRoZSB1c2VyIHB1dHRpbmcgdGhlIHBvaW50ZXIgb24gYSB0b29sdGlwXG4gKiB0cmlnZ2VyIGFuZCB0aGUgbG9uZyBwcmVzcyBldmVudCBiZWluZyBmaXJlZC5cbiAqL1xuY29uc3QgTE9OR1BSRVNTX0RFTEFZID0gNTAwO1xuXG5jb25zdCBpc01vYmlsZSA9IGlzQW5kcm9pZCB8fCBpc0lPUztcbmNvbnN0IHRvb2x0aXBUcmlnZ2VycyA9IG5ldyBXZWFrTWFwPEhUTUxFbGVtZW50LCBTYmJUb29sdGlwRWxlbWVudD4oKTtcbmxldCBuZXh0SWQgPSAwO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIHRleHQgY29udGVudCB3aXRoaW4gYSB0b29sdGlwLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIHRoZSB0ZXh0IGludG8gdGhlIHRvb2x0aXAuXG4gKiBAY3NzcHJvcCBbLS1zYmItb3ZlcmxheS1wb3NpdGlvbi1hcmVhPWJsb2NrLWVuZF0gLSBUaGUgcHJpbWFyeSBwb3NpdGlvbiBmb3IgdGhlIHRvb2x0aXAuXG4gKiBAY3NzcHJvcCBbLS1zYmItb3ZlcmxheS1wb3NpdGlvbi10cnktZmFsbGJhY2tzPWJsb2NrLWVuZCBzcGFuLWlubGluZS1lbmQsIGJsb2NrLWVuZCBzcGFuLWlubGluZS1zdGFydCwgYmxvY2stc3RhcnQsIGJsb2NrLXN0YXJ0IHNwYW4taW5saW5lLWVuZCwgYmxvY2stc3RhcnQgc3Bhbi1pbmxpbmUtc3RhcnRdIC1cbiAqIFRoZSBsaXN0IG9mIGZhbGxiYWNrIHBvc2l0aW9ucywgc2VwYXJhdGVkIGJ5ICcsJywgZm9yIHRoZSB0b29sdGlwXG4gKiBAY3NzcHJvcCBbLS1zYmItdG9vbHRpcC16LWluZGV4PXZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleCldIC0gVG8gc3BlY2lmeSBhIGN1c3RvbSBzdGFjayBvcmRlcixcbiAqIHRoZSBgei1pbmRleGAgY2FuIGJlIG92ZXJyaWRkZW4gYnkgZGVmaW5pbmcgdGhpcyBDU1MgdmFyaWFibGUuIFRoZSBkZWZhdWx0IGB6LWluZGV4YCBvZiB0aGVcbiAqIGNvbXBvbmVudCBpcyBzZXQgdG8gYHZhcigtLXNiYi1vdmVybGF5LWRlZmF1bHQtei1pbmRleClgIHdpdGggYSB2YWx1ZSBvZiBgMTAwMGAuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJUb29sdGlwRWxlbWVudCBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi10b29sdGlwJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSByb2xlID0gJ3Rvb2x0aXAnO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCB1bnNhZmVDU1Moc3R5bGUpXTtcblxuICBwcml2YXRlIHN0YXRpYyBfdG9vbHRpcE91dGxldDogRWxlbWVudDtcblxuICBzdGF0aWMge1xuICAgIGlmICghaXNTZXJ2ZXIpIHtcbiAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gYmxvY2sgZXhlY3V0aW9uIGZvciBpbml0aWFsaXphdGlvbixcbiAgICAgIC8vIHNvIHdlIGRlZmVyIGl0IHVudGlsIHRoZSBET00gY29udGVudCBpcyBsb2FkZWQuXG4gICAgICBxdWV1ZURvbUNvbnRlbnRMb2FkZWQoKCkgPT4gdGhpcy5faW5pdGlhbGl6ZVRvb2x0aXBPdXRsZXQoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBlbGVtZW50IHRoYXQgd2lsbCB0cmlnZ2VyIHRoZSB0b29sdGlwIG92ZXJsYXkuXG4gICAqXG4gICAqIEZvciBhdHRyaWJ1dGUgdXNhZ2UsIHByb3ZpZGUgYW4gaWQgcmVmZXJlbmNlLlxuICAgKi9cbiAgQGlkUmVmZXJlbmNlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIHRyaWdnZXI6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIE9wZW4gdGhlIHRvb2x0aXAgYWZ0ZXIgYSBnaXZlbiBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gICAqIEdsb2JhbCBjb25maWd1cmF0aW9uIGlzIHVzZWQgYXMgZGVmYXVsdCwgaWYgbm90IHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnb3Blbi1kZWxheScsIHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgc2V0IG9wZW5EZWxheSh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMuX29wZW5EZWxheSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgb3BlbkRlbGF5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX29wZW5EZWxheSA/PyByZWFkQ29uZmlnKCkudG9vbHRpcD8ub3BlbkRlbGF5ID8/IDA7XG4gIH1cbiAgcHJpdmF0ZSBfb3BlbkRlbGF5OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogQ2xvc2UgdGhlIHRvb2x0aXAgYWZ0ZXIgYSBnaXZlbiBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gICAqIEdsb2JhbCBjb25maWd1cmF0aW9uIGlzIHVzZWQgYXMgZGVmYXVsdCwgaWYgbm90IHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgbnVsbFxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnY2xvc2UtZGVsYXknLCB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIHNldCBjbG9zZURlbGF5KHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XG4gICAgdGhpcy5fY2xvc2VEZWxheSA9IHZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgY2xvc2VEZWxheSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9jbG9zZURlbGF5ID8/IHJlYWRDb25maWcoKS50b29sdGlwPy5jbG9zZURlbGF5ID8/IDA7XG4gIH1cbiAgcHJpdmF0ZSBfY2xvc2VEZWxheTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgY2xvc2UgdGhlIHRvb2x0aXAgYWZ0ZXIgaXQgaGFzIGJlZW4gb3BlbiBieSBsb25nIHByZXNzLlxuICAgKiBHbG9iYWwgY29uZmlndXJhdGlvbiBpcyB1c2VkIGFzIGRlZmF1bHQsIGlmIG5vdCBzZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IDE1MDBcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2xvbmctcHJlc3MtY2xvc2UtZGVsYXknLCB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIHNldCBsb25nUHJlc3NDbG9zZURlbGF5KHZhbHVlOiBudW1iZXIpIHtcbiAgICB0aGlzLl9sb25nUHJlc3NDbG9zZURlbGF5ID0gK3ZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgbG9uZ1ByZXNzQ2xvc2VEZWxheSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9sb25nUHJlc3NDbG9zZURlbGF5ID8/IHJlYWRDb25maWcoKS50b29sdGlwPy5sb25nUHJlc3NDbG9zZURlbGF5ID8/IDE1MDA7XG4gIH1cbiAgcHJpdmF0ZSBfbG9uZ1ByZXNzQ2xvc2VEZWxheT86IG51bWJlcjtcblxuICBwcml2YXRlIF90cmlnZ2VyRWxlbWVudDogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckFib3J0Q29udHJvbGxlcj86IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfb3BlblN0YXRlQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfZXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIgPSBuZXcgU2JiRXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX292ZXJsYXlDb250cm9sbGVyID0gbmV3IFNiYk92ZXJsYXlQb3NpdGlvbkNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX29wZW5UaW1lb3V0PzogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG4gIHByaXZhdGUgX2Nsb3NlVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIF9sb25nUHJlc3NPcGVuVGltZW91dD86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIF9sb25nUHJlc3NDbG9zZVRpbWVvdXQ/OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIC8vIFVudGlsIHRoZSBtb3VzZSBob3ZlcnMgdGhlIHRvb2x0aXAsIGl0IHN0YXlzIG9wZW4uXG4gICAgLy8gT24gJ21vdXNlbGVhdmUnIChpZiB0aGUgbW91c2UgaXMgbm90IG1vdmVkIG9udG8gdGhlIHRyaWdnZXIgYWdhaW4pLCBjbG9zZSBpdC5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAnbW91c2VsZWF2ZScsXG4gICAgICAoZXZlbnQpID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICh0aGlzLnN0YXRlID09PSAnb3BlbmVkJyB8fCB0aGlzLnN0YXRlID09PSAnb3BlbmluZycpICYmXG4gICAgICAgICAgKCFldmVudC5yZWxhdGVkVGFyZ2V0IHx8ICF0aGlzLl90cmlnZ2VyRWxlbWVudD8uY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBOb2RlKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fZGVsYXllZENsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7IHBhc3NpdmU6IHRydWUgfSxcbiAgICApO1xuXG4gICAgLy8gQW55IHVzZXIgaW50ZXJhY3Rpb24gb3V0c2lkZSB0aGUgdG9vbHRpcCBjbG9zZXMgaXQgaW1tZWRpYXRlbHlcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ292ZXJsYXlPdXRzaWRlUG9pbnRlcicsICgpID0+IHRoaXMuY2xvc2UoKSwgeyBwYXNzaXZlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdhbmltYXRpb25lbmQnLCAoZSkgPT4gdGhpcy5fb25Ub29sdGlwQW5pbWF0aW9uRW5kKGUpLCB7IHBhc3NpdmU6IHRydWUgfSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBfaW5pdGlhbGl6ZVRvb2x0aXBPdXRsZXQoKTogdm9pZCB7XG4gICAgdGhpcy5fdG9vbHRpcE91dGxldCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHRoaXMuX3Rvb2x0aXBPdXRsZXQuY2xhc3NMaXN0LmFkZCgnc2JiLW92ZXJsYXktb3V0bGV0Jyk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLl90b29sdGlwT3V0bGV0KTtcblxuICAgIC8vIFdlIGFyZSB1c2luZyBNdXRhdGlvbk9ic2VydmVyIGRpcmVjdGx5IGhlcmUsIGFzIGl0IHdpbGwgb25seSBiZSBjYWxsZWQgb24gY2xpZW50IHNpZGUsXG4gICAgLy8gYW5kIHdlIGRvIG5vdCBuZWVkIHRvIGRpc2Nvbm5lY3QgaXQsIGFzIHdlIHdhbnQgaXQgdG8gd29yayBkdXJpbmcgdGhlIGZ1bGwgbGlmZXRpbWVcbiAgICAvLyBvZiB0aGUgcGFnZS5cbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuICAgICAgICBpZiAobXV0YXRpb24udHlwZSA9PT0gJ2F0dHJpYnV0ZXMnKSB7XG4gICAgICAgICAgdGhpcy5faGFuZGxlVG9vbHRpcFRyaWdnZXIobXV0YXRpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0Jykge1xuICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBbLi4ubXV0YXRpb24uYWRkZWROb2RlcywgLi4ubXV0YXRpb24ucmVtb3ZlZE5vZGVzXS5maWx0ZXIoXG4gICAgICAgICAgICAobik6IG4gaXMgSFRNTEVsZW1lbnQgPT4gbi5ub2RlVHlwZSA9PT0gbi5FTEVNRU5UX05PREUsXG4gICAgICAgICAgKSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlVG9vbHRpcFRyaWdnZXIobm9kZSk7XG4gICAgICAgICAgICB0aGlzLl9maW5kQW5kSGFuZGxlVG9vbHRpcFRyaWdnZXJzKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLm9ic2VydmUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcbiAgICAgICAgJ3NiYi10b29sdGlwJyxcbiAgICAgICAgJ3NiYi10b29sdGlwLW9wZW4tZGVsYXknLFxuICAgICAgICAnc2JiLXRvb2x0aXAtY2xvc2UtZGVsYXknLFxuICAgICAgICAnc2JiLXRvb2x0aXAtcG9zaXRpb24nLFxuICAgICAgXSxcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5fZmluZEFuZEhhbmRsZVRvb2x0aXBUcmlnZ2Vycyhkb2N1bWVudC5ib2R5KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIF9maW5kQW5kSGFuZGxlVG9vbHRpcFRyaWdnZXJzKHJvb3Q6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgcm9vdFxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCdbc2JiLXRvb2x0aXBdJylcbiAgICAgIC5mb3JFYWNoKChlKSA9PiB0aGlzLl9oYW5kbGVUb29sdGlwVHJpZ2dlcihlKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBfaGFuZGxlVG9vbHRpcFRyaWdnZXIodHJpZ2dlckVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgY29uc3QgdG9vbHRpcE1lc3NhZ2UgPSB0cmlnZ2VyRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3NiYi10b29sdGlwJyk7XG4gICAgbGV0IHRvb2x0aXAgPSB0b29sdGlwVHJpZ2dlcnMuZ2V0KHRyaWdnZXJFbGVtZW50KTtcblxuICAgIGlmICh0b29sdGlwTWVzc2FnZSAmJiB0cmlnZ2VyRWxlbWVudC5pc0Nvbm5lY3RlZCkge1xuICAgICAgaWYgKCF0b29sdGlwKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBzYmItdG9vbHRpcCBpbiB0aGUgb3V0bGV0IGFuZCBhdHRhY2ggaXQgdG8gdGhlIHRyaWdnZXJcbiAgICAgICAgdG9vbHRpcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NiYi10b29sdGlwJyk7XG4gICAgICAgIHRvb2x0aXBUcmlnZ2Vycy5zZXQodHJpZ2dlckVsZW1lbnQsIHRvb2x0aXApO1xuICAgICAgICB0aGlzLl90b29sdGlwT3V0bGV0LmFwcGVuZENoaWxkKHRvb2x0aXApO1xuICAgICAgICB0b29sdGlwLnRyaWdnZXIgPSB0cmlnZ2VyRWxlbWVudDtcbiAgICAgIH1cblxuICAgICAgdG9vbHRpcC50ZXh0Q29udGVudCA9IHRvb2x0aXBNZXNzYWdlO1xuICAgICAgdG9vbHRpcC5vcGVuRGVsYXkgPSB0cmlnZ2VyRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3NiYi10b29sdGlwLW9wZW4tZGVsYXknKVxuICAgICAgICA/ICt0cmlnZ2VyRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3NiYi10b29sdGlwLW9wZW4tZGVsYXknKSFcbiAgICAgICAgOiBudWxsO1xuICAgICAgdG9vbHRpcC5jbG9zZURlbGF5ID0gdHJpZ2dlckVsZW1lbnQuaGFzQXR0cmlidXRlKCdzYmItdG9vbHRpcC1jbG9zZS1kZWxheScpXG4gICAgICAgID8gK3RyaWdnZXJFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2JiLXRvb2x0aXAtY2xvc2UtZGVsYXknKSFcbiAgICAgICAgOiBudWxsO1xuXG4gICAgICAvLyBSZWFkIHRoZSBwb3NpdGlvbnMgZnJvbSB0aGUgdHJpZ2dlciAoZWl0aGVyIGZyb20gdGhlIGF0dHJpYnV0ZSBvciB0aGUgcHJvcGVydHkpXG4gICAgICBjb25zdCBwb3NpdGlvbnMgPSB0cmlnZ2VyRWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3NiYi10b29sdGlwLXBvc2l0aW9uJylcbiAgICAgICAgPyB0cmlnZ2VyRWxlbWVudFxuICAgICAgICAgICAgLmdldEF0dHJpYnV0ZSgnc2JiLXRvb2x0aXAtcG9zaXRpb24nKSFcbiAgICAgICAgICAgIC5zcGxpdCgnLCcpXG4gICAgICAgICAgICAubWFwKChwKSA9PiBwLnRyaW0oKSlcbiAgICAgICAgOiAodHJpZ2dlckVsZW1lbnQgYXMgdW5rbm93biBhcyBTYmJUb29sdGlwRGVmYXVsdFBvc2l0aW9ucykudG9vbHRpcFBvc2l0aW9ucztcblxuICAgICAgaWYgKHBvc2l0aW9ucyAmJiBwb3NpdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICB0b29sdGlwLnN0eWxlLnNldFByb3BlcnR5KCctLXNiYi1vdmVybGF5LXBvc2l0aW9uLWFyZWEnLCBwb3NpdGlvbnNbMF0pO1xuICAgICAgICB0b29sdGlwLnN0eWxlLnNldFByb3BlcnR5KFxuICAgICAgICAgICctLXNiYi1vdmVybGF5LXBvc2l0aW9uLXRyeS1mYWxsYmFja3MnLFxuICAgICAgICAgIHBvc2l0aW9ucy5zbGljZSgxKS5qb2luKCcsICcpLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdG9vbHRpcC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgnLS1zYmItb3ZlcmxheS1wb3NpdGlvbi1hcmVhJyk7XG4gICAgICAgIHRvb2x0aXAuc3R5bGUucmVtb3ZlUHJvcGVydHkoJy0tc2JiLW92ZXJsYXktcG9zaXRpb24tdHJ5LWZhbGxiYWNrcycpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodG9vbHRpcCkge1xuICAgICAgLy8gVGhlIHRyaWdnZXIgb3IgdGhlIGF0dHJpYnV0ZSBoYXMgYmVlbiBkZWxldGVkID0+IGRlbGV0ZSB0aGUgY29ubmVjdGVkIHRvb2x0aXBcbiAgICAgIHRvb2x0aXBUcmlnZ2Vycy5kZWxldGUodHJpZ2dlckVsZW1lbnQpO1xuICAgICAgLy8gSWYgYSBjb25zdW1lciBvdmVycmlkZXMgdGhlIGBzYmItdG9vbHRpcGAsIHRoZSBmb2xsb3dpbmcgY29kZSBzaG91bGQgbm90IGJlXG4gICAgICAvLyBleGVjdXRlZCBhcyB3ZSBjYW4ndCBleHBlY3QgdGhhdCBwcml2YXRlIG1ldGhvZHMgYXJlIG1vY2tlZC5cbiAgICAgIHRvb2x0aXAuX2Rlc3Ryb3k/LigpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMucG9wb3ZlciA9ICdtYW51YWwnO1xuICAgIHRoaXMuaWQgfHw9IGBzYmItdG9vbHRpcC0keysrbmV4dElkfWA7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zZWQnO1xuICAgIHNiYk92ZXJsYXlPdXRzaWRlUG9pbnRlckV2ZW50TGlzdGVuZXIuY29ubmVjdCh0aGlzKTtcblxuICAgIGlmICh0aGlzLmhhc1VwZGF0ZWQgJiYgdGhpcy50cmlnZ2VyKSB7XG4gICAgICB0aGlzLl9hdHRhY2godGhpcy50cmlnZ2VyKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZGlzY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICBzYmJPdmVybGF5T3V0c2lkZVBvaW50ZXJFdmVudExpc3RlbmVyLmRpc2Nvbm5lY3QodGhpcyk7XG4gICAgdGhpcy5fZGV0YWNoKCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcmVxdWVzdFVwZGF0ZShcbiAgICBuYW1lPzogUHJvcGVydHlLZXksXG4gICAgb2xkVmFsdWU/OiB1bmtub3duLFxuICAgIG9wdGlvbnM/OiBQcm9wZXJ0eURlY2xhcmF0aW9uLFxuICApOiB2b2lkIHtcbiAgICBzdXBlci5yZXF1ZXN0VXBkYXRlKG5hbWUsIG9sZFZhbHVlLCBvcHRpb25zKTtcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoKCFuYW1lIHx8IG5hbWUgPT09ICd0cmlnZ2VyJykgJiYgdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl9hdHRhY2godGhpcy50cmlnZ2VyKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlcyk6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgdGhpcy5fYXR0YWNoKHRoaXMudHJpZ2dlcik7XG4gIH1cblxuICBwdWJsaWMgb3BlbigpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNldE9wZW5DbG9zZVRpbWVvdXQoKTtcbiAgICBpZiAoXG4gICAgICAodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcgJiYgdGhpcy5zdGF0ZSAhPT0gJ2Nsb3NpbmcnKSB8fFxuICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgIXRoaXMudHJpZ2dlciB8fFxuICAgICAgIXRoaXMuZGlzcGF0Y2hCZWZvcmVPcGVuRXZlbnQoKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd1BvcG92ZXI/LigpO1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmluZyc7XG4gICAgdGhpcy5fb3ZlcmxheUNvbnRyb2xsZXIuY29ubmVjdCh0aGlzLnRyaWdnZXIpO1xuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYG9wZW5lZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzZXRPcGVuQ2xvc2VUaW1lb3V0KCk7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnICYmIHRoaXMuc3RhdGUgIT09ICdvcGVuaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZGlzcGF0Y2hCZWZvcmVDbG9zZUV2ZW50KCk7XG4gICAgdGhpcy5zdGF0ZSA9ICdjbG9zaW5nJztcblxuICAgIC8vIElmIHRoZSBhbmltYXRpb24gZHVyYXRpb24gaXMgemVybywgdGhlIGFuaW1hdGlvbmVuZCBldmVudCBpcyBub3QgYWx3YXlzIGZpcmVkIHJlbGlhYmx5LlxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBkaXJlY3RseSBzZXQgdGhlIGBjbG9zZWRgIHN0YXRlLlxuICAgIGlmICh0aGlzLl9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpKSB7XG4gICAgICB0aGlzLl9oYW5kbGVDbG9zaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfZGVsYXllZE9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzZXRPcGVuQ2xvc2VUaW1lb3V0KCk7XG4gICAgdGhpcy5fb3BlblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3BlbigpLCB0aGlzLm9wZW5EZWxheSk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVPcGVuaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnb3BlbmVkJztcbiAgICB0aGlzLl9lc2NhcGFibGVPdmVybGF5Q29udHJvbGxlci5jb25uZWN0KCk7XG4gICAgdGhpcy5kaXNwYXRjaE9wZW5FdmVudCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGVsYXllZENsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3Jlc2V0T3BlbkNsb3NlVGltZW91dCgpO1xuICAgIHRoaXMuX2Nsb3NlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbG9zZSgpLCB0aGlzLmNsb3NlRGVsYXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlQ2xvc2luZygpOiB2b2lkIHtcbiAgICB0aGlzLnN0YXRlID0gJ2Nsb3NlZCc7XG4gICAgdGhpcy5oaWRlUG9wb3Zlcj8uKCk7XG4gICAgdGhpcy5fb3ZlcmxheUNvbnRyb2xsZXIuZGlzY29ubmVjdCgpO1xuXG4gICAgdGhpcy5fZXNjYXBhYmxlT3ZlcmxheUNvbnRyb2xsZXIuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMuZGlzcGF0Y2hDbG9zZUV2ZW50KCk7XG4gICAgdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX29uVG9vbHRpcEFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9hdHRhY2godHJpZ2dlcjogSFRNTEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICAvLyBFdmVudHVhbGx5IGRldGFjaCBmcm9tIHRoZSBvbGQgdHJpZ2dlclxuICAgICAgdGhpcy5fZGV0YWNoKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQgPSB0cmlnZ2VyO1xuICAgIGlmICghdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMgPSBhcHBlbmRBcmlhRWxlbWVudHMoXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cyxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgICB0aGlzLl9hZGRUcmlnZ2VyRXZlbnRIYW5kbGVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZGV0YWNoKCk6IHZvaWQge1xuICAgIHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fb3BlblN0YXRlQ29udHJvbGxlcj8uYWJvcnQoKTtcblxuICAgIC8vIGNsZWFyIHRpbWVvdXRzXG4gICAgdGhpcy5fcmVzZXRPcGVuQ2xvc2VUaW1lb3V0KCk7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdQcmVzc09wZW5UaW1lb3V0KTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fbG9uZ1ByZXNzQ2xvc2VUaW1lb3V0KTtcblxuICAgIGlmICghdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMgPSByZW1vdmVBcmlhRWxlbWVudHMoXG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hcmlhRGVzY3JpYmVkQnlFbGVtZW50cyxcbiAgICAgIHRoaXMsXG4gICAgKTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIF9kZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2RldGFjaCgpO1xuICAgIHRoaXMucmVtb3ZlKCk7XG4gIH1cblxuICBwcml2YXRlIF9hZGRUcmlnZ2VyRXZlbnRIYW5kbGVycygpOiB2b2lkIHtcbiAgICBjb25zdCB0cmlnZ2VyID0gdGhpcy5fdHJpZ2dlckVsZW1lbnQ7XG4gICAgaWYgKCF0cmlnZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIGNvbnN0IG9wdGlvbnM6IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zID0ge1xuICAgICAgc2lnbmFsOiB0aGlzLl90cmlnZ2VyQWJvcnRDb250cm9sbGVyLnNpZ25hbCxcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgfTtcblxuICAgIGlmICghaXNNb2JpbGUpIHtcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHRoaXMuX2RlbGF5ZWRPcGVuKCksIG9wdGlvbnMpO1xuICAgICAgdHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgICAnbW91c2VsZWF2ZScsXG4gICAgICAgIChldmVudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld1RhcmdldCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQgYXMgTm9kZSB8IG51bGw7XG4gICAgICAgICAgaWYgKCFuZXdUYXJnZXQgfHwgbmV3VGFyZ2V0ICE9PSB0aGlzKSB7XG4gICAgICAgICAgICB0aGlzLl9kZWxheWVkQ2xvc2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnMsXG4gICAgICApO1xuXG4gICAgICAvLyAnYmx1cnMnIGltbWVkaWF0ZWx5IGNsb3NlIHRoZSB0b29sdGlwIGJlY2F1c2UgaXQgaXMgY29uc2lkZXJlZCBhbiAnaW50ZXJhY3Rpb24gd2l0aCBvdGhlciBlbGVtZW50cydcbiAgICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsICgpID0+IHRoaXMuY2xvc2UoKSwgb3B0aW9ucyk7XG4gICAgICB0cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJywgKCkgPT4gdGhpcy5fZGVsYXllZE9wZW4oKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gTG9uZy1wcmVzcyBldmVudCBoYW5kbGluZyAobWFpbmx5IGZvciBtb2JpbGUgdXNlcnMpXG4gICAgdHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ3RvdWNoc3RhcnQnLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbG9uZ1ByZXNzT3BlblRpbWVvdXQpO1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbG9uZ1ByZXNzQ2xvc2VUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5fbG9uZ1ByZXNzT3BlblRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3BlbigpLCBMT05HUFJFU1NfREVMQVkpO1xuICAgICAgfSxcbiAgICAgIG9wdGlvbnMsXG4gICAgKTtcbiAgICB0cmlnZ2VyLmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgICAndG91Y2hlbmQnLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5fbG9uZ1ByZXNzT3BlblRpbWVvdXQpO1xuICAgICAgICB0aGlzLl9sb25nUHJlc3NDbG9zZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2xvc2UoKSwgdGhpcy5sb25nUHJlc3NDbG9zZURlbGF5KTtcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLFxuICAgICk7XG4gICAgdHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKFxuICAgICAgJ3RvdWNoY2FuY2VsJyxcbiAgICAgICgpID0+IHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2xvbmdQcmVzc09wZW5UaW1lb3V0KTtcbiAgICAgIH0sXG4gICAgICBvcHRpb25zLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLXRvb2x0aXAtYW5pbWF0aW9uLWR1cmF0aW9uJyk7XG4gIH1cblxuICBwcml2YXRlIF9yZXNldE9wZW5DbG9zZVRpbWVvdXQoKTogdm9pZCB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX29wZW5UaW1lb3V0KTtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fY2xvc2VUaW1lb3V0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi10b29sdGlwXCI+XG4gICAgICAgIDxzbG90Pjwvc2xvdD5cbiAgICAgIDwvZGl2PlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi10b29sdGlwJzogU2JiVG9vbHRpcEVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FDeUNBLElBQU0sa0JBQWtCO0FBRXhCLElBQU0sV0FBVyxhQUFhO0FBQzlCLElBQU0sa0NBQWtCLElBQUksU0FBeUM7QUFDckUsSUFBSSxTQUFTOzs7Ozs7Ozs7Ozs7SUFhQSwyQkFBaUI7bUJBQVMsaUJBQWlCLHdCQUF3Qjs7Ozs7Ozs7Y0FBbkUsMEJBQTBCLFlBQXlDOzs7MEJBb0I3RSxhQUFhLEVBQ2IsVUFBVSxDQUFBO2dDQVNWLFNBQVM7SUFBRSxXQUFXO0lBQWMsTUFBTTtJQUFRLENBQUMsQ0FBQTtpQ0FlbkQsU0FBUztJQUFFLFdBQVc7SUFBZSxNQUFNO0lBQVEsQ0FBQyxDQUFBOzBDQWVwRCxTQUFTO0lBQUUsV0FBVztJQUEwQixNQUFNO0lBQVEs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