@sbb-esta/lyne-elements-dev 5.0.0-next.1-dev.1777534945 → 5.0.0-next.1-dev.1777543026

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 (144) hide show
  1. package/autocomplete/autocomplete-base-element.js +1 -1
  2. package/autocomplete/autocomplete.component.js +1 -1
  3. package/{autocomplete-base-element-CSCv_WVh.js → autocomplete-base-element-BiLyvcN-.js} +1 -1
  4. package/autocomplete.js +1 -1
  5. package/autocomplete.pure.js +1 -1
  6. package/core/styles/mixins/scrollbar.scss +0 -6
  7. package/core/styles/scrollbar.scss +19 -24
  8. package/core/styles/styles.js +2 -2
  9. package/core.css +0 -37
  10. package/core.js +2 -2
  11. package/custom-elements.json +66 -16
  12. package/development/autocomplete/autocomplete-base-element.js +1 -1
  13. package/development/autocomplete/autocomplete.component.js +1 -1
  14. package/development/{autocomplete-base-element-Bwkns3IL.js → autocomplete-base-element-BxBpn8_e.js} +2 -2
  15. package/development/autocomplete.js +1 -1
  16. package/development/autocomplete.pure.js +1 -1
  17. package/development/core/styles/styles.d.ts +1 -0
  18. package/development/core/styles/styles.d.ts.map +1 -1
  19. package/development/core/styles/styles.js +2 -2
  20. package/development/core.js +2 -2
  21. package/development/dialog/dialog-content/dialog-content.component.d.ts +1 -0
  22. package/development/dialog/dialog-content/dialog-content.component.d.ts.map +1 -1
  23. package/development/dialog/dialog-content/dialog-content.component.js +1 -1
  24. package/development/{dialog-content.component-B7Grxjk6.js → dialog-content.component-Bzt-PL6f.js} +10 -3
  25. package/development/dialog.js +1 -1
  26. package/development/dialog.pure.js +1 -1
  27. package/development/file-selector/common/file-selector-common.d.ts +1 -2
  28. package/development/file-selector/common/file-selector-common.d.ts.map +1 -1
  29. package/development/file-selector/common/file-selector-common.js +2 -2
  30. package/development/file-selector/file-selector/file-selector.component.d.ts +1 -2
  31. package/development/file-selector/file-selector/file-selector.component.d.ts.map +1 -1
  32. package/development/file-selector/file-selector/file-selector.component.js +3 -6
  33. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts.map +1 -1
  34. package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
  35. package/development/file-selector-common-BH_iIjcB.js +417 -0
  36. package/development/{file-selector-dropzone.component-DRUUWI1A.js → file-selector-dropzone.component-ZCanLwF-.js} +4 -8
  37. package/development/file-selector.js +3 -3
  38. package/development/file-selector.pure.js +3 -3
  39. package/development/map-container/map-container.component.d.ts.map +1 -1
  40. package/development/map-container/map-container.component.js +1 -1
  41. package/development/map-container.component-DoFCVBoh.js +180 -0
  42. package/development/map-container.js +1 -1
  43. package/development/map-container.pure.js +1 -1
  44. package/development/menu/menu/menu.component.d.ts.map +1 -1
  45. package/development/menu/menu/menu.component.js +1 -1
  46. package/development/menu.component-CDBUaD8s.js +369 -0
  47. package/development/menu.js +1 -1
  48. package/development/menu.pure.js +1 -1
  49. package/development/navigation/navigation/navigation.component.d.ts.map +1 -1
  50. package/development/navigation/navigation/navigation.component.js +1 -1
  51. package/development/navigation/navigation-section/navigation-section.component.d.ts.map +1 -1
  52. package/development/navigation/navigation-section/navigation-section.component.js +1 -1
  53. package/development/navigation-section.component-D3_XVwyt.js +350 -0
  54. package/development/navigation.component-Cco4llBt.js +319 -0
  55. package/development/navigation.js +2 -2
  56. package/development/navigation.pure.js +2 -2
  57. package/development/overlay/overlay.component.d.ts.map +1 -1
  58. package/development/overlay/overlay.component.js +1 -1
  59. package/development/overlay.component-DBzb0PdD.js +206 -0
  60. package/development/overlay.js +1 -1
  61. package/development/overlay.pure.js +1 -1
  62. package/development/popover/popover.component.d.ts +1 -0
  63. package/development/popover/popover.component.d.ts.map +1 -1
  64. package/development/popover/popover.component.js +1 -1
  65. package/development/popover.component-Dj0INQsI.js +564 -0
  66. package/development/popover.js +1 -1
  67. package/development/popover.pure.js +1 -1
  68. package/development/select/select.component.js +1 -1
  69. package/development/{select.component-C1Xfvvii.js → select.component-D_9pjl7T.js} +2 -2
  70. package/development/select.js +1 -1
  71. package/development/select.pure.js +1 -1
  72. package/development/sidebar/sidebar/sidebar.component.d.ts.map +1 -1
  73. package/development/sidebar/sidebar/sidebar.component.js +1 -1
  74. package/development/sidebar.component-CYLbI1Vp.js +356 -0
  75. package/development/sidebar.js +1 -1
  76. package/development/sidebar.pure.js +1 -1
  77. package/development/styles-B_IWjHc5.js +22 -0
  78. package/development/table/table-wrapper/table-wrapper.component.js +1 -1
  79. package/development/table-wrapper.component-D8IFPow6.js +119 -0
  80. package/development/table.js +1 -1
  81. package/development/table.pure.js +1 -1
  82. package/dialog/dialog-content/dialog-content.component.js +1 -1
  83. package/{dialog-content.component-are-UBx3.js → dialog-content.component-iRLHPKPb.js} +7 -2
  84. package/dialog.js +1 -1
  85. package/dialog.pure.js +1 -1
  86. package/file-selector/common/file-selector-common.js +2 -2
  87. package/file-selector/file-selector/file-selector.component.js +10 -13
  88. package/file-selector/file-selector-dropzone/file-selector-dropzone.component.js +1 -1
  89. package/{file-selector-common-jpJmVqAw.js → file-selector-common-PcqPdsnN.js} +44 -38
  90. package/{file-selector-dropzone.component-DDRTu6p2.js → file-selector-dropzone.component-2XUfh1NC.js} +20 -24
  91. package/file-selector.js +5 -5
  92. package/file-selector.pure.js +4 -4
  93. package/map-container/map-container.component.js +1 -1
  94. package/{map-container.component-Btnl3n9d.js → map-container.component-5I5DW5dJ.js} +23 -16
  95. package/map-container.js +1 -1
  96. package/map-container.pure.js +1 -1
  97. package/menu/menu/menu.component.js +1 -1
  98. package/{menu.component-CpNMheMG.js → menu.component-Bd37u3Ps.js} +26 -22
  99. package/menu.js +1 -1
  100. package/menu.pure.js +1 -1
  101. package/navigation/navigation/navigation.component.js +1 -1
  102. package/navigation/navigation-section/navigation-section.component.js +1 -1
  103. package/{navigation-section.component-219JlVIe.js → navigation-section.component-B_0xi30L.js} +24 -20
  104. package/{navigation.component-gLrMCbh9.js → navigation.component-CmrLIeDB.js} +24 -20
  105. package/navigation.js +2 -2
  106. package/navigation.pure.js +2 -2
  107. package/off-brand-theme.css +33 -134
  108. package/overlay/overlay.component.js +1 -1
  109. package/overlay.component-D2jtCeeb.js +156 -0
  110. package/overlay.js +1 -1
  111. package/overlay.pure.js +1 -1
  112. package/package.json +2 -2
  113. package/popover/popover.component.js +1 -1
  114. package/{popover.component-DnY9obd7.js → popover.component-CiMeNnO-.js} +27 -24
  115. package/popover.js +1 -1
  116. package/popover.pure.js +1 -1
  117. package/safety-theme.css +33 -134
  118. package/scrollbar.css +33 -97
  119. package/select/select.component.js +1 -1
  120. package/{select.component-Bhvd_sUV.js → select.component-BXPU7X_X.js} +1 -1
  121. package/select.js +1 -1
  122. package/select.pure.js +1 -1
  123. package/sidebar/sidebar/sidebar.component.js +1 -1
  124. package/{sidebar.component-Dpf9jZ1P.js → sidebar.component-CeUPJaqy.js} +28 -21
  125. package/sidebar.js +1 -1
  126. package/sidebar.pure.js +1 -1
  127. package/standard-theme.css +33 -134
  128. package/styles-Cb4jdMeE.js +5 -0
  129. package/table/table-wrapper/table-wrapper.component.js +1 -1
  130. package/{table-wrapper.component-DGL8RaxF.js → table-wrapper.component-CZ90q3pY.js} +1 -1
  131. package/table.js +1 -1
  132. package/table.pure.js +1 -1
  133. package/development/file-selector-common-BwkZZzA0.js +0 -409
  134. package/development/map-container.component-BLF21LG7.js +0 -173
  135. package/development/menu.component-BpKGNICN.js +0 -365
  136. package/development/navigation-section.component-DumXFFfg.js +0 -346
  137. package/development/navigation.component-CpoBEP55.js +0 -315
  138. package/development/overlay.component-CC_quHYI.js +0 -206
  139. package/development/popover.component-DT-cfDqo.js +0 -561
  140. package/development/sidebar.component-DR2JGwnM.js +0 -349
  141. package/development/styles-6T7UvhxK.js +0 -18
  142. package/development/table-wrapper.component-CjMOENHV.js +0 -119
  143. package/overlay.component-B00EoAd5.js +0 -156
  144. package/styles-D5okOWF1.js +0 -5
@@ -1,173 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { html, nothing, unsafeCSS } from "lit";
3
- import { property, state } from "lit/decorators.js";
4
- import { SbbElement, SbbLanguageController, boxSizingStyles, forceType, forwardEvent, i18nMapContainerButtonLabel } from "./core.js";
5
- import { SbbAccentButtonElement } from "./button.pure.js";
6
- import { IntersectionController } from "@lit-labs/observers/intersection-controller.js";
7
- //#region src/elements/map-container/map-container.scss?inline
8
- var map_container_default = ":host {\n --sbb-map-container-animation-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-4x)\n );\n --_sbb-map-container-map-height: calc(\n var(--sbb-map-container-map-height-zero) + var(--sbb-map-container-border-radius)\n );\n display: grid;\n grid-template-rows: auto auto;\n}\n@media (min-width: calc(37.5rem)) {\n :host {\n --_sbb-map-container-map-height: calc(\n var(--sbb-map-container-map-height-small) + var(--sbb-map-container-border-radius)\n );\n }\n}\n@media (min-width: calc(64rem)) {\n :host {\n grid-template-columns: max(var(--sbb-map-container-sidebar-width)) calc(100% - var(--sbb-map-container-sidebar-width));\n position: fixed;\n inset: var(--sbb-map-container-margin-start, var(--sbb-header-height)) 0 0 0;\n }\n}\n\n.sbb-map-container__sidebar-button {\n position: fixed;\n left: 50%;\n inset-block-end: var(--sbb-spacing-fixed-5x);\n visibility: hidden;\n opacity: 0;\n transform: translateX(-50%) translateY(calc(100% + var(--sbb-spacing-fixed-5x)));\n transition: opacity var(--sbb-map-container-animation-duration) var(--sbb-animation-easing), visibility var(--sbb-map-container-animation-duration) var(--sbb-animation-easing) var(--sbb-map-container-animation-duration), transform var(--sbb-map-container-animation-duration) var(--sbb-animation-easing);\n}\n:host(:is(:state(scroll-up-button-visible),[state--scroll-up-button-visible])) .sbb-map-container__sidebar-button {\n transition: visibility var(--sbb-map-container-animation-duration) var(--sbb-animation-easing), opacity var(--sbb-map-container-animation-duration) var(--sbb-animation-easing), transform var(--sbb-map-container-animation-duration) ease-out;\n visibility: visible;\n opacity: 1;\n transform: translateX(-50%) translateY(0);\n}\n@media (min-width: calc(64rem)) {\n .sbb-map-container__sidebar-button {\n display: none;\n }\n}\n\n.sbb-map-container__sidebar {\n --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);\n --sbb-scrollbar-thumb-width: 0.5rem;\n --sbb-scrollbar-thumb-width-hover: var(--sbb-scrollbar-thumb-width);\n --sbb-scrollbar-width-firefox: auto;\n --sbb-scrollbar-color: color-mix(in srgb, var(--sbb-color-black) 30%, transparent);\n --sbb-scrollbar-color: light-dark(\n color-mix(in srgb, var(--sbb-color-black) 30%, transparent),\n color-mix(in srgb, var(--sbb-color-white) 30%, transparent)\n );\n --sbb-scrollbar-color-hover: color-mix(in srgb, var(--sbb-color-black) 60%, transparent);\n --sbb-scrollbar-color-hover: light-dark(\n color-mix(in srgb, var(--sbb-color-black) 60%, transparent),\n color-mix(in srgb, var(--sbb-color-white) 60%, transparent)\n );\n --sbb-scrollbar-track-color: var(--sbb-background-color-4);\n}\n.sbb-map-container__sidebar::-webkit-scrollbar {\n width: var(--sbb-scrollbar-width);\n height: var(--sbb-scrollbar-width);\n background-color: var(--sbb-scrollbar-track-color, transparent);\n}\n.sbb-map-container__sidebar::-webkit-scrollbar-corner {\n background-color: var(--sbb-scrollbar-track-color, transparent);\n}\n.sbb-map-container__sidebar::-webkit-scrollbar-thumb {\n background-color: var(--sbb-scrollbar-color, currentcolor);\n border: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width))) solid transparent;\n border-radius: var(--sbb-border-radius-4x);\n background-clip: padding-box;\n}\n.sbb-map-container__sidebar::-webkit-scrollbar-thumb:hover {\n background-color: var(--sbb-scrollbar-color-hover, currentcolor);\n border-width: calc(0.5 * (var(--sbb-scrollbar-width) - var(--sbb-scrollbar-thumb-width-hover)));\n}\n.sbb-map-container__sidebar::-webkit-scrollbar-button, .sbb-map-container__sidebar::-webkit-scrollbar-corner {\n display: none;\n}\n@supports not selector(::-webkit-scrollbar) {\n .sbb-map-container__sidebar {\n scrollbar-width: var(--sbb-scrollbar-width-firefox);\n scrollbar-color: var(--sbb-scrollbar-color, currentcolor) var(--sbb-scrollbar-track-color, transparent);\n }\n}\n.sbb-map-container__sidebar {\n grid-column: 1/3;\n grid-row: 2/3;\n width: 100%;\n overflow: hidden auto;\n position: relative;\n border-start-end-radius: var(--sbb-map-container-border-radius);\n border-start-start-radius: var(--sbb-map-container-border-radius);\n margin-block-start: calc(var(--sbb-map-container-border-radius) * -1);\n background-color: var(--sbb-map-container-sidebar-background-color);\n}\n@media (min-width: calc(64rem)) {\n .sbb-map-container__sidebar {\n grid-column: 1/2;\n grid-row: 1/3;\n border-radius: 0;\n margin-block-start: 0;\n border-block-start: var(--sbb-border-width-1x) solid var(--sbb-border-color-4-inverted);\n }\n}\n\n.sbb-map-container__map {\n position: sticky;\n inset-block-start: 0;\n inset-inline: 0;\n grid-row: 1/2;\n grid-column: 1/3;\n}\n@media (max-width: calc(63.9375rem)) {\n .sbb-map-container__map {\n inset-block-start: var(--sbb-map-container-mobile-sticky-block-start, 0);\n height: var(--_sbb-map-container-map-height);\n }\n}\n@media (min-width: calc(64rem)) {\n .sbb-map-container__map {\n grid-row: 1/3;\n grid-column: 2/3;\n position: relative;\n }\n}";
9
- //#endregion
10
- //#region src/elements/map-container/map-container.component.ts
11
- /**
12
- * It can be used as a container for maps.
13
- *
14
- * @slot - Use the unnamed slot to add content to the sidebar.
15
- * @slot map - Used for slotting the map.
16
- * @cssprop [--sbb-map-container-margin-start=var(--sbb-header-height)] - The component
17
- * comes along with a height calculation that subtracts the height of the header.
18
- * For specific use cases, this variable can be used to modify the preset height.
19
- * @cssprop [--sbb-map-container-sidebar-width=zero-large:400px;ultra:480px] - Can be used
20
- * to modify the width of the left sidebar.
21
- * @cssprop [--sbb-map-container-mobile-sticky-block-start=0] - If e.g. a header with a fixed height
22
- * is placed before the map-container, the map should be sticky respecting
23
- * this offset from the document's top. Only applied on mobile views.
24
- * Most commonly it can be set to `var(--sbb-header-height)`.
25
- */
26
- var SbbMapContainerElement = (() => {
27
- let _classSuper = SbbElement;
28
- let _hideScrollUpButton_decorators;
29
- let _hideScrollUpButton_initializers = [];
30
- let _hideScrollUpButton_extraInitializers = [];
31
- let __scrollUpButtonVisible_decorators;
32
- let __scrollUpButtonVisible_initializers = [];
33
- let __scrollUpButtonVisible_extraInitializers = [];
34
- return class SbbMapContainerElement extends _classSuper {
35
- constructor() {
36
- super(...arguments);
37
- this.#hideScrollUpButton_accessor_storage = __runInitializers(this, _hideScrollUpButton_initializers, false);
38
- this.#_scrollUpButtonVisible_accessor_storage = (__runInitializers(this, _hideScrollUpButton_extraInitializers), __runInitializers(this, __scrollUpButtonVisible_initializers, false));
39
- this._language = (__runInitializers(this, __scrollUpButtonVisible_extraInitializers), new SbbLanguageController(this));
40
- this._observer = new IntersectionController(this, {
41
- target: null,
42
- callback: (entries) => this._toggleButtonVisibilityOnIntersect(entries)
43
- });
44
- }
45
- static {
46
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
47
- _hideScrollUpButton_decorators = [forceType(), property({
48
- attribute: "hide-scroll-up-button",
49
- reflect: true,
50
- type: Boolean
51
- })];
52
- __scrollUpButtonVisible_decorators = [state()];
53
- __esDecorate(this, null, _hideScrollUpButton_decorators, {
54
- kind: "accessor",
55
- name: "hideScrollUpButton",
56
- static: false,
57
- private: false,
58
- access: {
59
- has: (obj) => "hideScrollUpButton" in obj,
60
- get: (obj) => obj.hideScrollUpButton,
61
- set: (obj, value) => {
62
- obj.hideScrollUpButton = value;
63
- }
64
- },
65
- metadata: _metadata
66
- }, _hideScrollUpButton_initializers, _hideScrollUpButton_extraInitializers);
67
- __esDecorate(this, null, __scrollUpButtonVisible_decorators, {
68
- kind: "accessor",
69
- name: "_scrollUpButtonVisible",
70
- static: false,
71
- private: false,
72
- access: {
73
- has: (obj) => "_scrollUpButtonVisible" in obj,
74
- get: (obj) => obj._scrollUpButtonVisible,
75
- set: (obj, value) => {
76
- obj._scrollUpButtonVisible = value;
77
- }
78
- },
79
- metadata: _metadata
80
- }, __scrollUpButtonVisible_initializers, __scrollUpButtonVisible_extraInitializers);
81
- if (_metadata) Object.defineProperty(this, Symbol.metadata, {
82
- enumerable: true,
83
- configurable: true,
84
- writable: true,
85
- value: _metadata
86
- });
87
- }
88
- static {
89
- this.elementName = "sbb-map-container";
90
- }
91
- static {
92
- this.elementDependencies = [SbbAccentButtonElement];
93
- }
94
- static {
95
- this.styles = [boxSizingStyles, unsafeCSS(map_container_default)];
96
- }
97
- #hideScrollUpButton_accessor_storage;
98
- /** Flag to show/hide the scroll up button inside the sidebar on mobile. */
99
- get hideScrollUpButton() {
100
- return this.#hideScrollUpButton_accessor_storage;
101
- }
102
- set hideScrollUpButton(value) {
103
- this.#hideScrollUpButton_accessor_storage = value;
104
- }
105
- #_scrollUpButtonVisible_accessor_storage;
106
- get _scrollUpButtonVisible() {
107
- return this.#_scrollUpButtonVisible_accessor_storage;
108
- }
109
- set _scrollUpButtonVisible(value) {
110
- this.#_scrollUpButtonVisible_accessor_storage = value;
111
- }
112
- willUpdate(changedProperties) {
113
- super.willUpdate(changedProperties);
114
- if (changedProperties.has("hideScrollUpButton")) {
115
- const intersectorElement = this._intersector();
116
- if (!this.hideScrollUpButton && intersectorElement) this._observer.observe(intersectorElement);
117
- else if (intersectorElement) this._observer.unobserve(intersectorElement);
118
- }
119
- }
120
- firstUpdated(changedProperties) {
121
- super.firstUpdated(changedProperties);
122
- if (!this.hideScrollUpButton) this._observer.observe(this._intersector());
123
- }
124
- _intersector() {
125
- return this.shadowRoot?.querySelector("#intersector") ?? null;
126
- }
127
- /**
128
- * Button click callback to trigger the scroll to container top
129
- * @private
130
- */
131
- _onScrollButtonClick() {
132
- this.scrollIntoView({ behavior: "smooth" });
133
- }
134
- /**
135
- * Intersection callback. Toggles the visibility.
136
- * @param entries
137
- * @private
138
- */
139
- _toggleButtonVisibilityOnIntersect(entries) {
140
- entries.forEach((entry) => {
141
- const mapIsHidden = !entry.isIntersecting;
142
- this.toggleState("scroll-up-button-visible", mapIsHidden);
143
- this._scrollUpButtonVisible = mapIsHidden;
144
- });
145
- }
146
- render() {
147
- return html`
148
- <div class="sbb-map-container__map">
149
- <slot name="map"></slot>
150
- </div>
151
- <div class="sbb-map-container__sidebar" @scroll=${(e) => forwardEvent(e, document)}>
152
- <span id="intersector"></span>
153
-
154
- <slot></slot>
155
-
156
- ${!this.hideScrollUpButton ? html`<sbb-accent-button
157
- class="sbb-map-container__sidebar-button"
158
- size="l"
159
- icon-name="location-pin-map-small"
160
- @click=${() => this._onScrollButtonClick()}
161
- ?inert=${!this._scrollUpButtonVisible}
162
- >
163
- ${i18nMapContainerButtonLabel[this._language.current]}
164
- </sbb-accent-button>` : nothing}
165
- </div>
166
- `;
167
- }
168
- };
169
- })();
170
- //#endregion
171
- export { SbbMapContainerElement as t };
172
-
173
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLWNvbnRhaW5lci5jb21wb25lbnQtQkxGMjFMRzcuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL21hcC1jb250YWluZXIvbWFwLWNvbnRhaW5lci5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9tYXAtY29udGFpbmVyL21hcC1jb250YWluZXIuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgLS1zYmItbWFwLWNvbnRhaW5lci1hbmltYXRpb24tZHVyYXRpb246IHZhcihcbiAgICAtLXNiYi1kaXNhYmxlLWFuaW1hdGlvbi1kdXJhdGlvbixcbiAgICB2YXIoLS1zYmItYW5pbWF0aW9uLWR1cmF0aW9uLTR4KVxuICApO1xuICAtLV9zYmItbWFwLWNvbnRhaW5lci1tYXAtaGVpZ2h0OiBjYWxjKFxuICAgIHZhcigtLXNiYi1tYXAtY29udGFpbmVyLW1hcC1oZWlnaHQtemVybykgKyB2YXIoLS1zYmItbWFwLWNvbnRhaW5lci1ib3JkZXItcmFkaXVzKVxuICApO1xuXG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byBhdXRvO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogc21hbGwpIHtcbiAgICAtLV9zYmItbWFwLWNvbnRhaW5lci1tYXAtaGVpZ2h0OiBjYWxjKFxuICAgICAgdmFyKC0tc2JiLW1hcC1jb250YWluZXItbWFwLWhlaWdodC1zbWFsbCkgKyB2YXIoLS1zYmItbWFwLWNvbnRhaW5lci1ib3JkZXItcmFkaXVzKVxuICAgICk7XG4gIH1cblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IGxhcmdlKSB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtYXgodmFyKC0tc2JiLW1hcC1jb250YWluZXItc2lkZWJhci13aWR0aCkpIGNhbGMoXG4gICAgICAgIDEwMCUgLSB2YXIoLS1zYmItbWFwLWNvbnRhaW5lci1zaWRlYmFyLXdpZHRoKVxuICAgICAgKTtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgaW5zZXQ6IHZhcigtLXNiYi1tYXAtY29udGFpbmVyLW1hcmdpbi1zdGFydCwgdmFyKC0tc2JiLWhlYWRlci1oZWlnaHQpKSAwIDAgMDtcbiAgfVxufVxuXG4uc2JiLW1hcC1jb250YWluZXJfX3NpZGViYXItYnV0dG9uIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBsZWZ0OiA1MCU7XG4gIGluc2V0LWJsb2NrLWVuZDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNXgpO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKSB0cmFuc2xhdGVZKGNhbGMoMTAwJSArIHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTV4KSkpO1xuXG4gIC8vIEhpZGUgdHJhbnNpdGlvbiwgdmlzaWJpbGl0eSBzaG91bGQgYmUgZGVsYXllZFxuICB0cmFuc2l0aW9uOlxuICAgIG9wYWNpdHkgdmFyKC0tc2JiLW1hcC1jb250YWluZXItYW5pbWF0aW9uLWR1cmF0aW9uKSB2YXIoLS1zYmItYW5pbWF0aW9uLWVhc2luZyksXG4gICAgdmlzaWJpbGl0eSB2YXIoLS1zYmItbWFwLWNvbnRhaW5lci1hbmltYXRpb24tZHVyYXRpb24pIHZhcigtLXNiYi1hbmltYXRpb24tZWFzaW5nKVxuICAgICAgdmFyKC0tc2JiLW1hcC1jb250YWluZXItYW5pbWF0aW9uLWR1cmF0aW9uKSxcbiAgICB0cmFuc2Zvcm0gdmFyKC0tc2JiLW1hcC1jb250YWluZXItYW5pbWF0aW9uLWR1cmF0aW9uKSB2YXIoLS1zYmItYW5pbWF0aW9uLWVhc2luZyk7XG5cbiAgOmhvc3QoOnN0YXRlKHNjcm9sbC11cC1idXR0b24tdmlzaWJsZSkpICYge1xuICAgIC8vIFNob3cgdHJhbnNpdGlvblxuICAgIHRyYW5zaXRpb246XG4gICAgICB2aXNpYmlsaXR5IHZhcigtLXNiYi1tYXAtY29udGFpbmVyLWFuaW1hdGlvbi1kdXJhdGlvbikgdmFyKC0tc2JiLWFuaW1hdGlvbi1lYXNpbmcpLFxuICAgICAgb3BhY2l0eSB2YXIoLS1zYmItbWFwLWNvbnRhaW5lci1hbmltYXRpb24tZHVyYXRpb24pIHZhcigtLXNiYi1hbmltYXRpb24tZWFzaW5nKSxcbiAgICAgIHRyYW5zZm9ybSB2YXIoLS1zYmItbWFwLWNvbnRhaW5lci1hbmltYXRpb24tZHVyYXRpb24pIGVhc2Utb3V0O1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgwKTtcbiAgfVxuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG5cbi5zYmItbWFwLWNvbnRhaW5lcl9fc2lkZWJhciB7XG4gIEBpbmNsdWRlIHNiYi5zY3JvbGxiYXIoJHNpemU6IHRoaWNrLCAkdHJhY2stdmlzaWJsZTogdHJ1ZSk7XG5cbiAgZ3JpZC1jb2x1bW46IDEgLyAzO1xuICBncmlkLXJvdzogMiAvIDM7XG4gIHdpZHRoOiAxMDAlO1xuICBvdmVyZmxvdzogaGlkZGVuIGF1dG87XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgYm9yZGVyLXN0YXJ0LWVuZC1yYWRpdXM6IHZhcigtLXNiYi1tYXAtY29udGFpbmVyLWJvcmRlci1yYWRpdXMpO1xuICBib3JkZXItc3RhcnQtc3RhcnQtcmFkaXVzOiB2YXIoLS1zYmItbWFwLWNvbnRhaW5lci1ib3JkZXItcmFkaXVzKTtcbiAgbWFyZ2luLWJsb2NrLXN0YXJ0OiBjYWxjKHZhcigtLXNiYi1tYXAtY29udGFpbmVyLWJvcmRlci1yYWRpdXMpICogLTEpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItbWFwLWNvbnRhaW5lci1zaWRlYmFyLWJhY2tncm91bmQtY29sb3IpO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICBncmlkLWNvbHVtbjogMSAvIDI7XG4gICAgZ3JpZC1yb3c6IDEgLyAzO1xuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgbWFyZ2luLWJsb2NrLXN0YXJ0OiAwO1xuICAgIGJvcmRlci1ibG9jay1zdGFydDogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0xeCkgc29saWQgdmFyKC0tc2JiLWJvcmRlci1jb2xvci00LWludmVydGVkKTtcbiAgfVxufVxuXG4uc2JiLW1hcC1jb250YWluZXJfX21hcCB7XG4gIHBvc2l0aW9uOiBzdGlja3k7XG4gIGluc2V0LWJsb2NrLXN0YXJ0OiAwO1xuICBpbnNldC1pbmxpbmU6IDA7XG4gIGdyaWQtcm93OiAxIC8gMjtcbiAgZ3JpZC1jb2x1bW46IDEgLyAzO1xuXG4gIC8vIFdlIHVzZSBcInRvOiBsYXJnZVwiIHRvIGF2b2lkIHJlc2V0dGluZyB0aGUgc3R5bGVzXG4gIEBpbmNsdWRlIHNiYi5tcSgkdG86IGxhcmdlKSB7XG4gICAgaW5zZXQtYmxvY2stc3RhcnQ6IHZhcigtLXNiYi1tYXAtY29udGFpbmVyLW1vYmlsZS1zdGlja3ktYmxvY2stc3RhcnQsIDApO1xuICAgIGhlaWdodDogdmFyKC0tX3NiYi1tYXAtY29udGFpbmVyLW1hcC1oZWlnaHQpO1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIGdyaWQtcm93OiAxIC8gMztcbiAgICBncmlkLWNvbHVtbjogMiAvIDM7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG59XG4iLCJpbXBvcnQgeyBJbnRlcnNlY3Rpb25Db250cm9sbGVyIH0gZnJvbSAnQGxpdC1sYWJzL29ic2VydmVycy9pbnRlcnNlY3Rpb24tY29udHJvbGxlci5qcyc7XG5pbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBub3RoaW5nLFxuICB0eXBlIFByb3BlcnR5VmFsdWVzLFxuICB0eXBlIFRlbXBsYXRlUmVzdWx0LFxuICB1bnNhZmVDU1MsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYkFjY2VudEJ1dHRvbkVsZW1lbnQgfSBmcm9tICcuLi9idXR0b24ucHVyZS50cyc7XG5pbXBvcnQge1xuICBib3hTaXppbmdTdHlsZXMsXG4gIGZvcmNlVHlwZSxcbiAgZm9yd2FyZEV2ZW50LFxuICBpMThuTWFwQ29udGFpbmVyQnV0dG9uTGFiZWwsXG4gIFNiYkVsZW1lbnQsXG4gIHR5cGUgU2JiRWxlbWVudFR5cGUsXG4gIFNiYkxhbmd1YWdlQ29udHJvbGxlcixcbn0gZnJvbSAnLi4vY29yZS50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL21hcC1jb250YWluZXIuc2Nzcz9pbmxpbmUnO1xuXG4vKipcbiAqIEl0IGNhbiBiZSB1c2VkIGFzIGEgY29udGFpbmVyIGZvciBtYXBzLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGNvbnRlbnQgdG8gdGhlIHNpZGViYXIuXG4gKiBAc2xvdCBtYXAgLSBVc2VkIGZvciBzbG90dGluZyB0aGUgbWFwLlxuICogQGNzc3Byb3AgWy0tc2JiLW1hcC1jb250YWluZXItbWFyZ2luLXN0YXJ0PXZhcigtLXNiYi1oZWFkZXItaGVpZ2h0KV0gLSBUaGUgY29tcG9uZW50XG4gKiBjb21lcyBhbG9uZyB3aXRoIGEgaGVpZ2h0IGNhbGN1bGF0aW9uIHRoYXQgc3VidHJhY3RzIHRoZSBoZWlnaHQgb2YgdGhlIGhlYWRlci5cbiAqIEZvciBzcGVjaWZpYyB1c2UgY2FzZXMsIHRoaXMgdmFyaWFibGUgY2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSBwcmVzZXQgaGVpZ2h0LlxuICogQGNzc3Byb3AgWy0tc2JiLW1hcC1jb250YWluZXItc2lkZWJhci13aWR0aD16ZXJvLWxhcmdlOjQwMHB4O3VsdHJhOjQ4MHB4XSAtIENhbiBiZSB1c2VkXG4gKiB0byBtb2RpZnkgdGhlIHdpZHRoIG9mIHRoZSBsZWZ0IHNpZGViYXIuXG4gKiBAY3NzcHJvcCBbLS1zYmItbWFwLWNvbnRhaW5lci1tb2JpbGUtc3RpY2t5LWJsb2NrLXN0YXJ0PTBdIC0gSWYgZS5nLiBhIGhlYWRlciB3aXRoIGEgZml4ZWQgaGVpZ2h0XG4gKiBpcyBwbGFjZWQgYmVmb3JlIHRoZSBtYXAtY29udGFpbmVyLCB0aGUgbWFwIHNob3VsZCBiZSBzdGlja3kgcmVzcGVjdGluZ1xuICogdGhpcyBvZmZzZXQgZnJvbSB0aGUgZG9jdW1lbnQncyB0b3AuIE9ubHkgYXBwbGllZCBvbiBtb2JpbGUgdmlld3MuXG4gKiBNb3N0IGNvbW1vbmx5IGl0IGNhbiBiZSBzZXQgdG8gYHZhcigtLXNiYi1oZWFkZXItaGVpZ2h0KWAuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJNYXBDb250YWluZXJFbGVtZW50IGV4dGVuZHMgU2JiRWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItbWFwLWNvbnRhaW5lcic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgZWxlbWVudERlcGVuZGVuY2llczogU2JiRWxlbWVudFR5cGVbXSA9IFtTYmJBY2NlbnRCdXR0b25FbGVtZW50XTtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG5cbiAgLyoqIEZsYWcgdG8gc2hvdy9oaWRlIHRoZSBzY3JvbGwgdXAgYnV0dG9uIGluc2lkZSB0aGUgc2lkZWJhciBvbiBtb2JpbGUuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdoaWRlLXNjcm9sbC11cC1idXR0b24nLCByZWZsZWN0OiB0cnVlLCB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBoaWRlU2Nyb2xsVXBCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9zY3JvbGxVcEJ1dHRvblZpc2libGUgPSBmYWxzZTtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcyk7XG4gIHByaXZhdGUgX29ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbkNvbnRyb2xsZXIodGhpcywge1xuICAgIHRhcmdldDogbnVsbCxcbiAgICBjYWxsYmFjazogKGVudHJpZXMpID0+IHRoaXMuX3RvZ2dsZUJ1dHRvblZpc2liaWxpdHlPbkludGVyc2VjdChlbnRyaWVzKSxcbiAgfSk7XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdoaWRlU2Nyb2xsVXBCdXR0b24nKSkge1xuICAgICAgY29uc3QgaW50ZXJzZWN0b3JFbGVtZW50ID0gdGhpcy5faW50ZXJzZWN0b3IoKTtcblxuICAgICAgaWYgKCF0aGlzLmhpZGVTY3JvbGxVcEJ1dHRvbiAmJiBpbnRlcnNlY3RvckVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fb2JzZXJ2ZXIub2JzZXJ2ZShpbnRlcnNlY3RvckVsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmIChpbnRlcnNlY3RvckVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy5fb2JzZXJ2ZXIudW5vYnNlcnZlKGludGVyc2VjdG9yRWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpO1xuICAgIGlmICghdGhpcy5oaWRlU2Nyb2xsVXBCdXR0b24pIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcy5faW50ZXJzZWN0b3IoKSEpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2ludGVyc2VjdG9yKCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcignI2ludGVyc2VjdG9yJykgPz8gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBCdXR0b24gY2xpY2sgY2FsbGJhY2sgdG8gdHJpZ2dlciB0aGUgc2Nyb2xsIHRvIGNvbnRhaW5lciB0b3BcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgX29uU2Nyb2xsQnV0dG9uQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcnNlY3Rpb24gY2FsbGJhY2suIFRvZ2dsZXMgdGhlIHZpc2liaWxpdHkuXG4gICAqIEBwYXJhbSBlbnRyaWVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF90b2dnbGVCdXR0b25WaXNpYmlsaXR5T25JbnRlcnNlY3QoZW50cmllczogSW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbnRyeVtdKTogdm9pZCB7XG4gICAgZW50cmllcy5mb3JFYWNoKChlbnRyeSkgPT4ge1xuICAgICAgY29uc3QgbWFwSXNIaWRkZW4gPSAhZW50cnkuaXNJbnRlcnNlY3Rpbmc7XG4gICAgICB0aGlzLnRvZ2dsZVN0YXRlKCdzY3JvbGwtdXAtYnV0dG9uLXZpc2libGUnLCBtYXBJc0hpZGRlbik7XG4gICAgICB0aGlzLl9zY3JvbGxVcEJ1dHRvblZpc2libGUgPSBtYXBJc0hpZGRlbjtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1tYXAtY29udGFpbmVyX19tYXBcIj5cbiAgICAgICAgPHNsb3QgbmFtZT1cIm1hcFwiPjwvc2xvdD5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1tYXAtY29udGFpbmVyX19zaWRlYmFyXCIgQHNjcm9sbD0keyhlOiBFdmVudCkgPT4gZm9yd2FyZEV2ZW50KGUsIGRvY3VtZW50KX0+XG4gICAgICAgIDxzcGFuIGlkPVwiaW50ZXJzZWN0b3JcIj48L3NwYW4+XG5cbiAgICAgICAgPHNsb3Q+PC9zbG90PlxuXG4gICAgICAgICR7IXRoaXMuaGlkZVNjcm9sbFVwQnV0dG9uXG4gICAgICAgICAgPyBodG1sYDxzYmItYWNjZW50LWJ1dHRvblxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1tYXAtY29udGFpbmVyX19zaWRlYmFyLWJ1dHRvblwiXG4gICAgICAgICAgICAgIHNpemU9XCJsXCJcbiAgICAgICAgICAgICAgaWNvbi1uYW1lPVwibG9jYXRpb24tcGluLW1hcC1zbWFsbFwiXG4gICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX29uU2Nyb2xsQnV0dG9uQ2xpY2soKX1cbiAgICAgICAgICAgICAgP2luZXJ0PSR7IXRoaXMuX3Njcm9sbFVwQnV0dG9uVmlzaWJsZX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgJHtpMThuTWFwQ29udGFpbmVyQnV0dG9uTGFiZWxbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19XG4gICAgICAgICAgICA8L3NiYi1hY2NlbnQtYnV0dG9uPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItbWFwLWNvbnRhaW5lcic6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