@sbb-esta/lyne-elements-dev 5.0.0-next-dev.1777034079 → 5.0.0-next-dev.1777038043
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.
- package/core/styles/core.scss +24 -0
- package/core.css +66 -0
- package/custom-elements.json +592 -592
- package/development/navigation/common/navigation-action-common.js +1 -1
- package/development/navigation/navigation/navigation.component.js +1 -1
- package/development/navigation/navigation-list/navigation-list.component.js +1 -1
- package/development/navigation/navigation-marker/navigation-marker.component.js +1 -1
- package/development/navigation/navigation-section/navigation-section.component.js +1 -1
- package/development/navigation-action-common-BsrmO4QQ.js +92 -0
- package/development/navigation-list.component-CQ4q671G.js +90 -0
- package/development/navigation-marker.component-D7ks8vbC.js +121 -0
- package/development/navigation-section.component-t36xyaq4.js +346 -0
- package/development/navigation.component-Djm0PFOA.js +315 -0
- package/development/navigation.js +5 -5
- package/development/navigation.pure.js +5 -5
- package/navigation/common/navigation-action-common.js +1 -1
- package/navigation/navigation/navigation.component.js +1 -1
- package/navigation/navigation-list/navigation-list.component.js +1 -1
- package/navigation/navigation-marker/navigation-marker.component.js +1 -1
- package/navigation/navigation-section/navigation-section.component.js +1 -1
- package/navigation-action-common-XvWVU7Zk.js +66 -0
- package/{navigation-list.component-DSJx3LwB.js → navigation-list.component-BX-kv06z.js} +1 -1
- package/{navigation-marker.component-xmkTtMap.js → navigation-marker.component-iSodFQRj.js} +1 -1
- package/{navigation-section.component-CUrICmbc.js → navigation-section.component-K4Pa53K7.js} +1 -1
- package/{navigation.component-CR4vG3vH.js → navigation.component-BFejmwjr.js} +1 -1
- package/navigation.js +5 -5
- package/navigation.pure.js +5 -5
- package/off-brand-theme.css +66 -0
- package/package.json +2 -2
- package/safety-theme.css +66 -0
- package/standard-theme.css +66 -0
- package/development/navigation-action-common-DREsZcc7.js +0 -92
- package/development/navigation-list.component-3kQyQ-yJ.js +0 -90
- package/development/navigation-marker.component-DyWfazQL.js +0 -121
- package/development/navigation-section.component-DyPWGns2.js +0 -346
- package/development/navigation.component-CZ2P2xfh.js +0 -315
- package/navigation-action-common-D3rE0ZNS.js +0 -66
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { unsafeCSS } from "lit";
|
|
3
|
-
import { property } from "lit/decorators.js";
|
|
4
|
-
import { SbbElement, SbbNamedSlotListMixin, boxSizingStyles, ɵstateController } from "./core.js";
|
|
5
|
-
import { ResizeController } from "@lit-labs/observers/resize-controller.js";
|
|
6
|
-
//#region src/elements/navigation/navigation-marker/navigation-marker.scss?inline
|
|
7
|
-
var navigation_marker_default = ":host {\n --sbb-navigation-action-gap: var(--sbb-spacing-responsive-xs);\n --sbb-navigation-marker-position-x: var(--sbb-spacing-fixed-1x);\n --sbb-navigation-marker-position-y: unset;\n --sbb-navigation-marker-width: 1.0625rem;\n --sbb-navigation-marker-border: var(--sbb-border-width-1x);\n --sbb-navigation-marker-padding-inline-start: var(--sbb-spacing-fixed-6x);\n --sbb-navigation-marker-typo-line-height: var(--sbb-typo-line-height-heading);\n --sbb-navigation-margin-inline-start: var(--sbb-spacing-fixed-3x);\n --sbb-navigation-marker-margin-block: calc(\n 1em * var(--sbb-navigation-marker-typo-line-height) / 2 - var(--sbb-navigation-marker-border) /\n 2\n );\n display: block;\n}\n\n:host([size=s]) {\n --sbb-navigation-action-gap: var(--sbb-spacing-fixed-2x);\n --sbb-navigation-marker-width: 0.5rem;\n --sbb-navigation-marker-typo-line-height: var(--sbb-typo-line-height-text);\n --sbb-navigation-margin-inline-start: var(--sbb-spacing-fixed-2x);\n --sbb-navigation-marker-position-x: calc(\n var(--sbb-navigation-marker-padding-inline-start) - var(--sbb-spacing-fixed-2x)\n );\n --sbb-navigation-marker-padding-inline-start: calc(\n var(--sbb-spacing-fixed-6x) + var(--sbb-spacing-fixed-1x)\n );\n}\n\n.sbb-navigation-marker {\n list-style: none;\n margin: 0;\n padding: 0;\n font-size: inherit;\n --sbb-title-font-size: var(--sbb-title-font-size-level-4-lean, var(--sbb-heading-font-size-4));\n margin-block: var(--sbb-title-margin-block, 0);\n margin-inline: 0;\n font-family: var(--sbb-typo-font-family);\n font-weight: bold;\n font-size: var(--sbb-title-font-size);\n letter-spacing: var(--sbb-typo-letter-spacing-heading);\n line-height: var(--sbb-title-line-height, var(--sbb-typo-line-height-heading));\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: flex-start;\n gap: var(--sbb-navigation-action-gap);\n padding-inline-start: var(--sbb-navigation-marker-padding-inline-start);\n}\n.sbb-navigation-marker::before {\n content: \"\";\n position: absolute;\n opacity: 0;\n inset-inline-start: var(--sbb-navigation-marker-position-x);\n inset-block-start: var(--sbb-navigation-marker-position-y);\n width: var(--sbb-navigation-marker-width);\n border-block-start: var(--sbb-navigation-marker-border) solid var(--sbb-color-5);\n margin-block: var(--sbb-navigation-marker-margin-block);\n transition-duration: var(--sbb-disable-animation-duration, var(--sbb-animation-duration-6x));\n transition-timing-function: ease;\n transition-property: opacity, inset-block-start;\n}\n:host(:is(:state(has-active-action),[state--has-active-action])) .sbb-navigation-marker::before {\n opacity: 1;\n}\n@media (forced-colors: active) {\n .sbb-navigation-marker::before {\n border-color: CanvasText;\n }\n}\n:host([size=s]) .sbb-navigation-marker {\n --sbb-text-font-size: var(--sbb-text-font-size-xxs);\n font-family: var(--sbb-typo-font-family);\n font-weight: normal;\n line-height: var(--sbb-typo-line-height-text);\n letter-spacing: var(--sbb-typo-letter-spacing-text);\n font-size: var(--sbb-text-font-size);\n font-weight: bold;\n}\n\n::slotted(:is(sbb-navigation-button, sbb-navigation-link)) {\n margin-inline-start: var(--sbb-navigation-margin-inline-start);\n}";
|
|
8
|
-
//#endregion
|
|
9
|
-
//#region src/elements/navigation/navigation-marker/navigation-marker.component.ts
|
|
10
|
-
/**
|
|
11
|
-
* It can be used as a container for one or more `sbb-navigation-button`/`sbb-navigation-link` within a `sbb-navigation`.
|
|
12
|
-
*
|
|
13
|
-
* @slot - Use the unnamed slot to add `sbb-navigation-button`/`sbb-navigation-link` elements into the `sbb-navigation-marker`.
|
|
14
|
-
*/
|
|
15
|
-
var SbbNavigationMarkerElement = (() => {
|
|
16
|
-
let _classSuper = SbbNamedSlotListMixin(SbbElement);
|
|
17
|
-
let _size_decorators;
|
|
18
|
-
let _size_initializers = [];
|
|
19
|
-
let _size_extraInitializers = [];
|
|
20
|
-
return class SbbNavigationMarkerElement extends _classSuper {
|
|
21
|
-
static {
|
|
22
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
23
|
-
_size_decorators = [property({ reflect: true })];
|
|
24
|
-
__esDecorate(this, null, _size_decorators, {
|
|
25
|
-
kind: "accessor",
|
|
26
|
-
name: "size",
|
|
27
|
-
static: false,
|
|
28
|
-
private: false,
|
|
29
|
-
access: {
|
|
30
|
-
has: (obj) => "size" in obj,
|
|
31
|
-
get: (obj) => obj.size,
|
|
32
|
-
set: (obj, value) => {
|
|
33
|
-
obj.size = value;
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
metadata: _metadata
|
|
37
|
-
}, _size_initializers, _size_extraInitializers);
|
|
38
|
-
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
39
|
-
enumerable: true,
|
|
40
|
-
configurable: true,
|
|
41
|
-
writable: true,
|
|
42
|
-
value: _metadata
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
static {
|
|
46
|
-
this.elementName = "sbb-navigation-marker";
|
|
47
|
-
}
|
|
48
|
-
static {
|
|
49
|
-
this.styles = [boxSizingStyles, unsafeCSS(navigation_marker_default)];
|
|
50
|
-
}
|
|
51
|
-
#size_accessor_storage;
|
|
52
|
-
/**
|
|
53
|
-
* Marker size variant, either s or l.
|
|
54
|
-
*/
|
|
55
|
-
get size() {
|
|
56
|
-
return this.#size_accessor_storage;
|
|
57
|
-
}
|
|
58
|
-
set size(value) {
|
|
59
|
-
this.#size_accessor_storage = value;
|
|
60
|
-
}
|
|
61
|
-
constructor() {
|
|
62
|
-
super();
|
|
63
|
-
this.listChildLocalNames = ["sbb-navigation-button", "sbb-navigation-link"];
|
|
64
|
-
this.#size_accessor_storage = __runInitializers(this, _size_initializers, "l");
|
|
65
|
-
this._currentActiveAction = __runInitializers(this, _size_extraInitializers);
|
|
66
|
-
this.addController(new ResizeController(this, {
|
|
67
|
-
skipInitial: true,
|
|
68
|
-
callback: () => this._setMarkerPosition()
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
71
|
-
willUpdate(changedProperties) {
|
|
72
|
-
super.willUpdate(changedProperties);
|
|
73
|
-
if (changedProperties.has("size") || changedProperties.has("listChildren")) this._updateMarkerActions();
|
|
74
|
-
this.toggleState("has-active-action", !!this._currentActiveAction);
|
|
75
|
-
}
|
|
76
|
-
_updateMarkerActions() {
|
|
77
|
-
for (const action of this.listChildren) action.size = this.size;
|
|
78
|
-
this._currentActiveAction = this.listChildren.find((action) => action.matches(":is(:state(action-active),[state--action-active])"));
|
|
79
|
-
this._setMarkerPosition();
|
|
80
|
-
}
|
|
81
|
-
connectedCallback() {
|
|
82
|
-
super.connectedCallback();
|
|
83
|
-
this._checkActiveAction();
|
|
84
|
-
}
|
|
85
|
-
_checkActiveAction() {
|
|
86
|
-
const activeAction = this.querySelector(":is(sbb-navigation-button, sbb-navigation-link).sbb-active");
|
|
87
|
-
if (activeAction) this.select(activeAction);
|
|
88
|
-
}
|
|
89
|
-
select(action) {
|
|
90
|
-
if (!action) return;
|
|
91
|
-
this.reset();
|
|
92
|
-
ɵstateController(action).add("action-active");
|
|
93
|
-
this._currentActiveAction = action;
|
|
94
|
-
setTimeout(() => this._setMarkerPosition());
|
|
95
|
-
}
|
|
96
|
-
firstUpdated(changedProperties) {
|
|
97
|
-
super.firstUpdated(changedProperties);
|
|
98
|
-
setTimeout(() => this._setMarkerPosition());
|
|
99
|
-
}
|
|
100
|
-
reset() {
|
|
101
|
-
if (this._currentActiveAction) {
|
|
102
|
-
ɵstateController(this._currentActiveAction).delete("action-active");
|
|
103
|
-
this._currentActiveAction.connectedSection?.close();
|
|
104
|
-
this._currentActiveAction = void 0;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
_setMarkerPosition() {
|
|
108
|
-
if (!this._currentActiveAction) return;
|
|
109
|
-
const index = this.listChildren.indexOf(this._currentActiveAction);
|
|
110
|
-
const value = this.shadowRoot.querySelector(`li:nth-child(${index + 1})`)?.offsetTop;
|
|
111
|
-
if (value != null) this.style?.setProperty("--sbb-navigation-marker-position-y", `${value}px`);
|
|
112
|
-
}
|
|
113
|
-
render() {
|
|
114
|
-
return this.renderList();
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
})();
|
|
118
|
-
//#endregion
|
|
119
|
-
export { SbbNavigationMarkerElement as t };
|
|
120
|
-
|
|
121
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1tYXJrZXIuY29tcG9uZW50LUR5V2ZhelFMLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9uYXZpZ2F0aW9uL25hdmlnYXRpb24tbWFya2VyL25hdmlnYXRpb24tbWFya2VyLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL25hdmlnYXRpb24vbmF2aWdhdGlvbi1tYXJrZXIvbmF2aWdhdGlvbi1tYXJrZXIuY29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIkB1c2UgJy4uLy4uL2NvcmUvc3R5bGVzJyBhcyBzYmI7XG5cbjpob3N0IHtcbiAgLS1zYmItbmF2aWdhdGlvbi1hY3Rpb24tZ2FwOiB2YXIoLS1zYmItc3BhY2luZy1yZXNwb25zaXZlLXhzKTtcbiAgLS1zYmItbmF2aWdhdGlvbi1tYXJrZXItcG9zaXRpb24teDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xuICAtLXNiYi1uYXZpZ2F0aW9uLW1hcmtlci1wb3NpdGlvbi15OiB1bnNldDtcbiAgLS1zYmItbmF2aWdhdGlvbi1tYXJrZXItd2lkdGg6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgxNyl9O1xuICAtLXNiYi1uYXZpZ2F0aW9uLW1hcmtlci1ib3JkZXI6IHZhcigtLXNiYi1ib3JkZXItd2lkdGgtMXgpO1xuICAtLXNiYi1uYXZpZ2F0aW9uLW1hcmtlci1wYWRkaW5nLWlubGluZS1zdGFydDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNngpO1xuICAtLXNiYi1uYXZpZ2F0aW9uLW1hcmtlci10eXBvLWxpbmUtaGVpZ2h0OiB2YXIoLS1zYmItdHlwby1saW5lLWhlaWdodC1oZWFkaW5nKTtcbiAgLS1zYmItbmF2aWdhdGlvbi1tYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0zeCk7XG4gIC0tc2JiLW5hdmlnYXRpb24tbWFya2VyLW1hcmdpbi1ibG9jazogY2FsYyhcbiAgICAxZW0gKiB2YXIoLS1zYmItbmF2aWdhdGlvbi1tYXJrZXItdHlwby1saW5lLWhlaWdodCkgLyAyIC0gdmFyKC0tc2JiLW5hdmlnYXRpb24tbWFya2VyLWJvcmRlcikgL1xuICAgICAgMlxuICApO1xuXG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuXG46aG9zdChbc2l6ZT0ncyddKSB7XG4gIC0tc2JiLW5hdmlnYXRpb24tYWN0aW9uLWdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMngpO1xuICAtLXNiYi1uYXZpZ2F0aW9uLW1hcmtlci13aWR0aDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDgpfTtcbiAgLS1zYmItbmF2aWdhdGlvbi1tYXJrZXItdHlwby1saW5lLWhlaWdodDogdmFyKC0tc2JiLXR5cG8tbGluZS1oZWlnaHQtdGV4dCk7XG4gIC0tc2JiLW5hdmlnYXRpb24tbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMngpO1xuICAtLXNiYi1uYXZpZ2F0aW9uLW1hcmtlci1wb3NpdGlvbi14OiBjYWxjKFxuICAgIHZhcigtLXNiYi1uYXZpZ2F0aW9uLW1hcmtlci1wYWRkaW5nLWlubGluZS1zdGFydCkgLSB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0yeClcbiAgKTtcbiAgLS1zYmItbmF2aWdhdGlvbi1tYXJrZXItcGFkZGluZy1pbmxpbmUtc3RhcnQ6IGNhbGMoXG4gICAgdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNngpICsgdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpXG4gICk7XG59XG5cbi5zYmItbmF2aWdhdGlvbi1tYXJrZXIge1xuICBAaW5jbHVkZSBzYmIubGlzdC1yZXNldDtcbiAgQGluY2x1ZGUgc2JiLnRpdGxlLTQoJGV4Y2x1ZGUtc3BhY2luZzogdHJ1ZSk7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgZ2FwOiB2YXIoLS1zYmItbmF2aWdhdGlvbi1hY3Rpb24tZ2FwKTtcbiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHZhcigtLXNiYi1uYXZpZ2F0aW9uLW1hcmtlci1wYWRkaW5nLWlubGluZS1zdGFydCk7XG5cbiAgJjo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgb3BhY2l0eTogMDtcbiAgICBpbnNldC1pbmxpbmUtc3RhcnQ6IHZhcigtLXNiYi1uYXZpZ2F0aW9uLW1hcmtlci1wb3NpdGlvbi14KTtcbiAgICBpbnNldC1ibG9jay1zdGFydDogdmFyKC0tc2JiLW5hdmlnYXRpb24tbWFya2VyLXBvc2l0aW9uLXkpO1xuICAgIHdpZHRoOiB2YXIoLS1zYmItbmF2aWdhdGlvbi1tYXJrZXItd2lkdGgpO1xuICAgIGJvcmRlci1ibG9jay1zdGFydDogdmFyKC0tc2JiLW5hdmlnYXRpb24tbWFya2VyLWJvcmRlcikgc29saWQgdmFyKC0tc2JiLWNvbG9yLTUpO1xuICAgIG1hcmdpbi1ibG9jazogdmFyKC0tc2JiLW5hdmlnYXRpb24tbWFya2VyLW1hcmdpbi1ibG9jayk7XG4gICAgdHJhbnNpdGlvbjoge1xuICAgICAgZHVyYXRpb246IHZhcigtLXNiYi1kaXNhYmxlLWFuaW1hdGlvbi1kdXJhdGlvbiwgdmFyKC0tc2JiLWFuaW1hdGlvbi1kdXJhdGlvbi02eCkpO1xuICAgICAgdGltaW5nLWZ1bmN0aW9uOiBlYXNlO1xuICAgICAgcHJvcGVydHk6IG9wYWNpdHksIGluc2V0LWJsb2NrLXN0YXJ0O1xuICAgIH1cblxuICAgIDpob3N0KDpzdGF0ZShoYXMtYWN0aXZlLWFjdGlvbikpICYge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICB9XG5cbiAgICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgICBib3JkZXItY29sb3I6IENhbnZhc1RleHQ7XG4gICAgfVxuICB9XG5cbiAgOmhvc3QoW3NpemU9J3MnXSkgJiB7XG4gICAgQGluY2x1ZGUgc2JiLnRleHQteHhzLS1ib2xkO1xuICB9XG59XG5cbjo6c2xvdHRlZCg6aXMoc2JiLW5hdmlnYXRpb24tYnV0dG9uLCBzYmItbmF2aWdhdGlvbi1saW5rKSkge1xuICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1zYmItbmF2aWdhdGlvbi1tYXJnaW4taW5saW5lLXN0YXJ0KTtcbn1cbiIsImltcG9ydCB7IFJlc2l6ZUNvbnRyb2xsZXIgfSBmcm9tICdAbGl0LWxhYnMvb2JzZXJ2ZXJzL3Jlc2l6ZS1jb250cm9sbGVyLmpzJztcbmltcG9ydCB7IHR5cGUgQ1NTUmVzdWx0R3JvdXAsIHR5cGUgUHJvcGVydHlWYWx1ZXMsIHR5cGUgVGVtcGxhdGVSZXN1bHQsIHVuc2FmZUNTUyB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHtcbiAgYm94U2l6aW5nU3R5bGVzLFxuICBTYmJFbGVtZW50LFxuICBTYmJOYW1lZFNsb3RMaXN0TWl4aW4sXG4gIHR5cGUgV2l0aExpc3RDaGlsZHJlbixcbiAgybVzdGF0ZUNvbnRyb2xsZXIsXG59IGZyb20gJy4uLy4uL2NvcmUudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJOYXZpZ2F0aW9uQnV0dG9uRWxlbWVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tYnV0dG9uL25hdmlnYXRpb24tYnV0dG9uLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYk5hdmlnYXRpb25MaW5rRWxlbWVudCB9IGZyb20gJy4uL25hdmlnYXRpb24tbGluay9uYXZpZ2F0aW9uLWxpbmsuY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vbmF2aWdhdGlvbi1tYXJrZXIuc2Nzcz9pbmxpbmUnO1xuXG4vKipcbiAqIEl0IGNhbiBiZSB1c2VkIGFzIGEgY29udGFpbmVyIGZvciBvbmUgb3IgbW9yZSBgc2JiLW5hdmlnYXRpb24tYnV0dG9uYC9gc2JiLW5hdmlnYXRpb24tbGlua2Agd2l0aGluIGEgYHNiYi1uYXZpZ2F0aW9uYC5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBgc2JiLW5hdmlnYXRpb24tYnV0dG9uYC9gc2JiLW5hdmlnYXRpb24tbGlua2AgZWxlbWVudHMgaW50byB0aGUgYHNiYi1uYXZpZ2F0aW9uLW1hcmtlcmAuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJOYXZpZ2F0aW9uTWFya2VyRWxlbWVudCBleHRlbmRzIFNiYk5hbWVkU2xvdExpc3RNaXhpbjxcbiAgU2JiTmF2aWdhdGlvbkJ1dHRvbkVsZW1lbnQgfCBTYmJOYXZpZ2F0aW9uTGlua0VsZW1lbnQsXG4gIHR5cGVvZiBTYmJFbGVtZW50XG4+KFNiYkVsZW1lbnQpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1uYXZpZ2F0aW9uLW1hcmtlcic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IFtib3hTaXppbmdTdHlsZXMsIHVuc2FmZUNTUyhzdHlsZSldO1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVhZG9ubHkgbGlzdENoaWxkTG9jYWxOYW1lcyA9IFtcbiAgICAnc2JiLW5hdmlnYXRpb24tYnV0dG9uJyxcbiAgICAnc2JiLW5hdmlnYXRpb24tbGluaycsXG4gIF07XG5cbiAgLyoqXG4gICAqIE1hcmtlciBzaXplIHZhcmlhbnQsIGVpdGhlciBzIG9yIGwuXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBzaXplOiAnbCcgfCAncycgPSAnbCc7XG5cbiAgcHJpdmF0ZSBfY3VycmVudEFjdGl2ZUFjdGlvbj86IFNiYk5hdmlnYXRpb25CdXR0b25FbGVtZW50IHwgU2JiTmF2aWdhdGlvbkxpbmtFbGVtZW50O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5hZGRDb250cm9sbGVyKFxuICAgICAgbmV3IFJlc2l6ZUNvbnRyb2xsZXIodGhpcywge1xuICAgICAgICBza2lwSW5pdGlhbDogdHJ1ZSxcbiAgICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuX3NldE1hcmtlclBvc2l0aW9uKCksXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHdpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPFdpdGhMaXN0Q2hpbGRyZW48dGhpcz4+KTogdm9pZCB7XG4gICAgc3VwZXIud2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdzaXplJykgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdsaXN0Q2hpbGRyZW4nKSkge1xuICAgICAgdGhpcy5fdXBkYXRlTWFya2VyQWN0aW9ucygpO1xuICAgIH1cbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdoYXMtYWN0aXZlLWFjdGlvbicsICEhdGhpcy5fY3VycmVudEFjdGl2ZUFjdGlvbik7XG4gIH1cblxuICBwcml2YXRlIF91cGRhdGVNYXJrZXJBY3Rpb25zKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMubGlzdENoaWxkcmVuKSB7XG4gICAgICBhY3Rpb24uc2l6ZSA9IHRoaXMuc2l6ZTtcbiAgICB9XG5cbiAgICB0aGlzLl9jdXJyZW50QWN0aXZlQWN0aW9uID0gdGhpcy5saXN0Q2hpbGRyZW4uZmluZCgoYWN0aW9uKSA9PlxuICAgICAgYWN0aW9uLm1hdGNoZXMoJzpzdGF0ZShhY3Rpb24tYWN0aXZlKScpLFxuICAgICk7XG4gICAgdGhpcy5fc2V0TWFya2VyUG9zaXRpb24oKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX2NoZWNrQWN0aXZlQWN0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIF9jaGVja0FjdGl2ZUFjdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBhY3RpdmVBY3Rpb24gPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXG4gICAgICAnOmlzKHNiYi1uYXZpZ2F0aW9uLWJ1dHRvbiwgc2JiLW5hdmlnYXRpb24tbGluaykuc2JiLWFjdGl2ZScsXG4gICAgKSBhcyBTYmJOYXZpZ2F0aW9uQnV0dG9uRWxlbWVudCB8IFNiYk5hdmlnYXRpb25MaW5rRWxlbWVudDtcbiAgICBpZiAoYWN0aXZlQWN0aW9uKSB7XG4gICAgICB0aGlzLnNlbGVjdChhY3RpdmVBY3Rpb24pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3QoYWN0aW9uOiBTYmJOYXZpZ2F0aW9uQnV0dG9uRWxlbWVudCB8IFNiYk5hdmlnYXRpb25MaW5rRWxlbWVudCk6IHZvaWQge1xuICAgIGlmICghYWN0aW9uKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucmVzZXQoKTtcbiAgICDJtXN0YXRlQ29udHJvbGxlcihhY3Rpb24pLmFkZCgnYWN0aW9uLWFjdGl2ZScpO1xuICAgIHRoaXMuX2N1cnJlbnRBY3RpdmVBY3Rpb24gPSBhY3Rpb247XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zZXRNYXJrZXJQb3NpdGlvbigpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPFdpdGhMaXN0Q2hpbGRyZW48dGhpcz4+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fc2V0TWFya2VyUG9zaXRpb24oKSk7XG4gIH1cblxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2N1cnJlbnRBY3RpdmVBY3Rpb24pIHtcbiAgICAgIMm1c3RhdGVDb250cm9sbGVyKHRoaXMuX2N1cnJlbnRBY3RpdmVBY3Rpb24pLmRlbGV0ZSgnYWN0aW9uLWFjdGl2ZScpO1xuICAgICAgdGhpcy5fY3VycmVudEFjdGl2ZUFjdGlvbi5jb25uZWN0ZWRTZWN0aW9uPy5jbG9zZSgpO1xuICAgICAgdGhpcy5fY3VycmVudEFjdGl2ZUFjdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRNYXJrZXJQb3NpdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2N1cnJlbnRBY3RpdmVBY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleCA9IHRoaXMubGlzdENoaWxkcmVuLmluZGV4T2YodGhpcy5fY3VycmVudEFjdGl2ZUFjdGlvbikhO1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yPEhUTUxMSUVsZW1lbnQ+KFxuICAgICAgYGxpOm50aC1jaGlsZCgke2luZGV4ICsgMX0pYCxcbiAgICApPy5vZmZzZXRUb3A7XG4gICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi1uYXZpZ2F0aW9uLW1hcmtlci1wb3NpdGlvbi15JywgYCR7dmFsdWV9cHhgKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gdGhpcy5yZW5kZXJMaXN0KCk7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1uYXZpZ2F0aW9uLW1hcmtlcic6IFNiYk5hdmlnYXRpb25NYXJrZXJFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7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
|
|
@@ -1,346 +0,0 @@
|
|
|
1
|
-
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { html, isServer, nothing, unsafeCSS } from "lit";
|
|
3
|
-
import { property } from "lit/decorators.js";
|
|
4
|
-
import { IS_FOCUSABLE_QUERY, SbbFocusTrapController, SbbLanguageController, SbbMediaMatcherController, SbbMediaQueryBreakpointSmallAndBelow, SbbOpenCloseBaseElement, SbbUpdateSchedulerMixin, boxSizingStyles, forceType, i18nGoBack, idReference, isZeroAnimationDuration, omitEmptyConverter, removeAriaOverlayTriggerProperties, sbbInputModalityDetector, setAriaOverlayTriggerProperties, ɵstateController } from "./core.js";
|
|
5
|
-
import { SbbTransparentButtonElement } from "./button.pure.js";
|
|
6
|
-
//#region src/elements/navigation/navigation-section/navigation-section.scss?inline
|
|
7
|
-
var navigation_section_default = ":host {\n --sbb-navigation-section-display: none;\n --sbb-navigation-section-column: 1 / -1;\n --sbb-navigation-section-position: fixed;\n --sbb-navigation-section-pointer-events: none;\n --sbb-navigation-section-animation-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-3x)\n );\n --sbb-navigation-section-animation-easing: ease-out;\n --sbb-navigation-section-padding-inline: var(--sbb-layout-base-offset-responsive);\n --sbb-navigation-section-padding-block: var(--sbb-spacing-responsive-l);\n --sbb-navigation-section-translate: 100%;\n --sbb-navigation-section-content-padding-inline-start: var(--sbb-spacing-fixed-12x);\n --sbb-focus-outline-color: var(--sbb-focus-outline-color-dark);\n --sbb-navigation-section-width: 100dvw;\n --sbb-navigation-section-height: 100dvh;\n display: var(--sbb-navigation-section-display);\n position: var(--sbb-navigation-section-position);\n grid-column: var(--sbb-navigation-section-column);\n inset-inline-start: 0;\n inset-block-start: 0;\n width: var(--sbb-navigation-section-width);\n height: var(--sbb-navigation-section-height);\n z-index: var(--sbb-navigation-z-index, var(--sbb-overlay-default-z-index));\n}\n@media (min-width: calc(64rem)) {\n :host {\n --sbb-navigation-section-column: 5 / 13;\n --sbb-navigation-section-animation-duration: var(\n --sbb-disable-animation-duration,\n var(--sbb-animation-duration-4x)\n );\n --sbb-navigation-section-padding-block: var(--sbb-spacing-responsive-xl);\n --sbb-navigation-section-padding-inline: var(--sbb-spacing-fixed-8x)\n var(--sbb-layout-base-offset-responsive);\n --sbb-navigation-section-position: relative;\n --sbb-navigation-section-translate: 0;\n --sbb-navigation-section-content-padding-inline-start: 0;\n --sbb-navigation-section-width: calc(\n 100% + var(--sbb-layout-base-offset-responsive) + var(--sbb-grid-base-gutter-responsive)\n );\n translate: calc(var(--sbb-grid-base-gutter-responsive) * -1) 0;\n }\n}\n@media (min-width: calc(90rem)) {\n :host {\n --sbb-navigation-section-column: 6 / 17;\n --sbb-navigation-section-padding-block: var(--sbb-spacing-responsive-xxl)\n var(--sbb-spacing-responsive-l);\n }\n}\n\n:host(:is(:state(state-opened),[state--state-opened])) {\n --sbb-navigation-section-pointer-events: all;\n}\n\n:host(:is(:state(state-opening),[state--state-opening])) {\n --sbb-navigation-section-position: absolute;\n}\n\n:host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-closing),[state--state-closing]))) {\n --sbb-navigation-section-pointer-events: none;\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-navigation-section-display: block;\n}\n\n::slotted(*) {\n padding-inline-start: var(--sbb-navigation-section-content-padding-inline-start);\n}\n\n::slotted(:is(:state(sbb-button),[state--sbb-button])) {\n grid-column-start: 1;\n}\n\n.sbb-navigation-section__container {\n pointer-events: var(--sbb-navigation-section-pointer-events);\n height: var(--sbb-navigation-section-height);\n}\n\n.sbb-navigation-section {\n display: none;\n border: none;\n margin: 0;\n width: 100%;\n height: 100%;\n color: var(--sbb-navigation-color, var(--sbb-color-1-negative));\n background-color: transparent;\n padding: 0;\n overflow: hidden;\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]))) .sbb-navigation-section {\n display: block;\n animation-name: open;\n animation-duration: var(--sbb-navigation-section-animation-duration);\n animation-timing-function: var(--sbb-navigation-section-animation-easing);\n}\n:host(:is(:state(state-closing),[state--state-closing])) .sbb-navigation-section {\n animation-name: close;\n}\n@media (forced-colors: active) {\n .sbb-navigation-section {\n outline: var(--sbb-border-width-1x) solid CanvasText;\n }\n}\n\n.sbb-navigation-section__wrapper {\n --sbb-scrollbar-width: var(--sbb-spacing-fixed-3x);\n --sbb-scrollbar-thumb-width: 0.125rem;\n --sbb-scrollbar-thumb-width-hover: 0.25rem;\n --sbb-scrollbar-width-firefox: thin;\n --sbb-scrollbar-color: color-mix(in srgb, var(--sbb-color-white) 30%, transparent);\n --sbb-scrollbar-color-hover: color-mix(in srgb, var(--sbb-color-white) 60%, transparent);\n --sbb-scrollbar-track-color: transparent;\n}\n.sbb-navigation-section__wrapper::-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-navigation-section__wrapper::-webkit-scrollbar-corner {\n background-color: var(--sbb-scrollbar-track-color, transparent);\n}\n.sbb-navigation-section__wrapper::-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-navigation-section__wrapper::-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-navigation-section__wrapper::-webkit-scrollbar-button, .sbb-navigation-section__wrapper::-webkit-scrollbar-corner {\n display: none;\n}\n@supports not selector(::-webkit-scrollbar) {\n .sbb-navigation-section__wrapper {\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-navigation-section__wrapper {\n height: 100%;\n padding-block: var(--sbb-navigation-section-padding-block);\n outline: none;\n overflow-y: auto;\n}\n:host(:is(:is(:state(state-opening),[state--state-opening]), :is(:state(state-closing),[state--state-closing]))) .sbb-navigation-section__wrapper {\n --sbb-scrollbar-color: transparent;\n scrollbar-color: transparent transparent;\n}\n\n.sbb-navigation-section__header {\n position: relative;\n display: flex;\n align-items: center;\n gap: var(--sbb-spacing-fixed-1x);\n margin-block-start: var(--sbb-spacing-responsive-xxl);\n padding-inline-start: var(--sbb-navigation-section-content-padding-inline-start);\n}\n@media (min-width: calc(64rem)) {\n .sbb-navigation-section__header {\n margin-block-start: 0;\n padding-inline-start: 0;\n }\n}\n@media (min-width: calc(90rem)) {\n .sbb-navigation-section__header {\n grid-column: 1/4;\n }\n}\n\n.sbb-navigation-section__back {\n position: absolute;\n translate: calc((100% + var(--sbb-spacing-fixed-1x)) * -1) 0;\n}\n@media (min-width: calc(64rem)) {\n .sbb-navigation-section__back {\n display: none;\n }\n}\n\n.sbb-navigation-section__title {\n margin-block: var(--sbb-title-margin-block, 0);\n margin-inline: 0;\n font-family: var(--sbb-typo-font-family);\n font-weight: bold;\n font-size: var(--sbb-title-font-size);\n letter-spacing: var(--sbb-typo-letter-spacing-heading);\n line-height: var(--sbb-title-line-height, var(--sbb-typo-line-height-heading));\n --sbb-title-font-size: var(--sbb-title-font-size-level-4-lean, var(--sbb-heading-font-size-4));\n}\n@media (min-width: calc(64rem)) {\n .sbb-navigation-section__title {\n --sbb-title-font-size: var(--sbb-title-font-size-level-2-lean, var(--sbb-heading-font-size-2));\n }\n}\n\n.sbb-navigation-section__content {\n display: grid;\n grid-template-columns: 1fr;\n gap: var(--sbb-spacing-responsive-l) var(--sbb-grid-base-gutter-responsive);\n padding-inline: var(--sbb-navigation-section-padding-inline);\n}\n@media (min-width: calc(64rem)) {\n .sbb-navigation-section__content {\n opacity: 0;\n translate: 0 var(--sbb-spacing-fixed-3x);\n transition-duration: var(--sbb-navigation-section-animation-duration);\n transition-delay: var(--sbb-navigation-section-animation-duration);\n transition-timing-function: var(--sbb-navigation-section-animation-easing);\n transition-property: opacity, translate;\n }\n :host(:is(:state(state-opened),[state--state-opened])) .sbb-navigation-section__content {\n opacity: 1;\n translate: 0 0;\n }\n}\n@media (min-width: calc(90rem)) {\n .sbb-navigation-section__content {\n grid-template-columns: repeat(3, 1fr);\n }\n}\n:host(:is(:state(state-closing),[state--state-closing])) .sbb-navigation-section__content {\n transition-delay: 0s;\n}\n\n@keyframes open {\n from {\n translate: var(--sbb-navigation-section-translate) 0;\n }\n to {\n translate: 0 0;\n }\n}\n@keyframes close {\n from {\n translate: 0 0;\n }\n to {\n translate: var(--sbb-navigation-section-translate) 0;\n }\n}";
|
|
8
|
-
//#endregion
|
|
9
|
-
//#region src/elements/navigation/navigation-section/navigation-section.component.ts
|
|
10
|
-
/**
|
|
11
|
-
* It can be used as a container for `sbb-navigation-list` within a `sbb-navigation`.
|
|
12
|
-
*
|
|
13
|
-
* @slot - Use the unnamed slot to add content into the `sbb-navigation-section`.
|
|
14
|
-
*/
|
|
15
|
-
var SbbNavigationSectionElement = (() => {
|
|
16
|
-
let _classSuper = SbbUpdateSchedulerMixin(SbbOpenCloseBaseElement);
|
|
17
|
-
let _titleContent_decorators;
|
|
18
|
-
let _titleContent_initializers = [];
|
|
19
|
-
let _titleContent_extraInitializers = [];
|
|
20
|
-
let _trigger_decorators;
|
|
21
|
-
let _trigger_initializers = [];
|
|
22
|
-
let _trigger_extraInitializers = [];
|
|
23
|
-
let _accessibilityLabel_decorators;
|
|
24
|
-
let _accessibilityLabel_initializers = [];
|
|
25
|
-
let _accessibilityLabel_extraInitializers = [];
|
|
26
|
-
let _accessibilityBackLabel_decorators;
|
|
27
|
-
let _accessibilityBackLabel_initializers = [];
|
|
28
|
-
let _accessibilityBackLabel_extraInitializers = [];
|
|
29
|
-
return class SbbNavigationSectionElement extends _classSuper {
|
|
30
|
-
static {
|
|
31
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
32
|
-
_titleContent_decorators = [forceType(), property({
|
|
33
|
-
attribute: "title-content",
|
|
34
|
-
reflect: true,
|
|
35
|
-
converter: omitEmptyConverter
|
|
36
|
-
})];
|
|
37
|
-
_trigger_decorators = [idReference(), property()];
|
|
38
|
-
_accessibilityLabel_decorators = [forceType(), property({ attribute: "accessibility-label" })];
|
|
39
|
-
_accessibilityBackLabel_decorators = [forceType(), property({ attribute: "accessibility-back-label" })];
|
|
40
|
-
__esDecorate(this, null, _titleContent_decorators, {
|
|
41
|
-
kind: "accessor",
|
|
42
|
-
name: "titleContent",
|
|
43
|
-
static: false,
|
|
44
|
-
private: false,
|
|
45
|
-
access: {
|
|
46
|
-
has: (obj) => "titleContent" in obj,
|
|
47
|
-
get: (obj) => obj.titleContent,
|
|
48
|
-
set: (obj, value) => {
|
|
49
|
-
obj.titleContent = value;
|
|
50
|
-
}
|
|
51
|
-
},
|
|
52
|
-
metadata: _metadata
|
|
53
|
-
}, _titleContent_initializers, _titleContent_extraInitializers);
|
|
54
|
-
__esDecorate(this, null, _trigger_decorators, {
|
|
55
|
-
kind: "accessor",
|
|
56
|
-
name: "trigger",
|
|
57
|
-
static: false,
|
|
58
|
-
private: false,
|
|
59
|
-
access: {
|
|
60
|
-
has: (obj) => "trigger" in obj,
|
|
61
|
-
get: (obj) => obj.trigger,
|
|
62
|
-
set: (obj, value) => {
|
|
63
|
-
obj.trigger = value;
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
metadata: _metadata
|
|
67
|
-
}, _trigger_initializers, _trigger_extraInitializers);
|
|
68
|
-
__esDecorate(this, null, _accessibilityLabel_decorators, {
|
|
69
|
-
kind: "accessor",
|
|
70
|
-
name: "accessibilityLabel",
|
|
71
|
-
static: false,
|
|
72
|
-
private: false,
|
|
73
|
-
access: {
|
|
74
|
-
has: (obj) => "accessibilityLabel" in obj,
|
|
75
|
-
get: (obj) => obj.accessibilityLabel,
|
|
76
|
-
set: (obj, value) => {
|
|
77
|
-
obj.accessibilityLabel = value;
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
metadata: _metadata
|
|
81
|
-
}, _accessibilityLabel_initializers, _accessibilityLabel_extraInitializers);
|
|
82
|
-
__esDecorate(this, null, _accessibilityBackLabel_decorators, {
|
|
83
|
-
kind: "accessor",
|
|
84
|
-
name: "accessibilityBackLabel",
|
|
85
|
-
static: false,
|
|
86
|
-
private: false,
|
|
87
|
-
access: {
|
|
88
|
-
has: (obj) => "accessibilityBackLabel" in obj,
|
|
89
|
-
get: (obj) => obj.accessibilityBackLabel,
|
|
90
|
-
set: (obj, value) => {
|
|
91
|
-
obj.accessibilityBackLabel = value;
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
metadata: _metadata
|
|
95
|
-
}, _accessibilityBackLabel_initializers, _accessibilityBackLabel_extraInitializers);
|
|
96
|
-
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
97
|
-
enumerable: true,
|
|
98
|
-
configurable: true,
|
|
99
|
-
writable: true,
|
|
100
|
-
value: _metadata
|
|
101
|
-
});
|
|
102
|
-
}
|
|
103
|
-
static {
|
|
104
|
-
this.elementName = "sbb-navigation-section";
|
|
105
|
-
}
|
|
106
|
-
static {
|
|
107
|
-
this.elementDependencies = [SbbTransparentButtonElement];
|
|
108
|
-
}
|
|
109
|
-
static {
|
|
110
|
-
this.styles = [boxSizingStyles, unsafeCSS(navigation_section_default)];
|
|
111
|
-
}
|
|
112
|
-
#titleContent_accessor_storage;
|
|
113
|
-
/**
|
|
114
|
-
* The label to be shown before the action list.
|
|
115
|
-
*/
|
|
116
|
-
get titleContent() {
|
|
117
|
-
return this.#titleContent_accessor_storage;
|
|
118
|
-
}
|
|
119
|
-
set titleContent(value) {
|
|
120
|
-
this.#titleContent_accessor_storage = value;
|
|
121
|
-
}
|
|
122
|
-
#trigger_accessor_storage;
|
|
123
|
-
/**
|
|
124
|
-
* The element that will trigger the navigation section.
|
|
125
|
-
*
|
|
126
|
-
* For attribute usage, provide an id reference.
|
|
127
|
-
*/
|
|
128
|
-
get trigger() {
|
|
129
|
-
return this.#trigger_accessor_storage;
|
|
130
|
-
}
|
|
131
|
-
set trigger(value) {
|
|
132
|
-
this.#trigger_accessor_storage = value;
|
|
133
|
-
}
|
|
134
|
-
#accessibilityLabel_accessor_storage;
|
|
135
|
-
/**
|
|
136
|
-
* This will be forwarded as aria-label to the nav element and is read as a title of the navigation-section.
|
|
137
|
-
*/
|
|
138
|
-
get accessibilityLabel() {
|
|
139
|
-
return this.#accessibilityLabel_accessor_storage;
|
|
140
|
-
}
|
|
141
|
-
set accessibilityLabel(value) {
|
|
142
|
-
this.#accessibilityLabel_accessor_storage = value;
|
|
143
|
-
}
|
|
144
|
-
#accessibilityBackLabel_accessor_storage;
|
|
145
|
-
/**
|
|
146
|
-
* This will be forwarded as aria-label to the back button element.
|
|
147
|
-
*/
|
|
148
|
-
get accessibilityBackLabel() {
|
|
149
|
-
return this.#accessibilityBackLabel_accessor_storage;
|
|
150
|
-
}
|
|
151
|
-
set accessibilityBackLabel(value) {
|
|
152
|
-
this.#accessibilityBackLabel_accessor_storage = value;
|
|
153
|
-
}
|
|
154
|
-
/** The state of the component. */
|
|
155
|
-
set state(state) {
|
|
156
|
-
super.state = state;
|
|
157
|
-
this.internals.ariaHidden = this.state !== "opened" ? "true" : null;
|
|
158
|
-
}
|
|
159
|
-
get state() {
|
|
160
|
-
return super.state;
|
|
161
|
-
}
|
|
162
|
-
constructor() {
|
|
163
|
-
super();
|
|
164
|
-
this.#titleContent_accessor_storage = __runInitializers(this, _titleContent_initializers, "");
|
|
165
|
-
this.#trigger_accessor_storage = (__runInitializers(this, _titleContent_extraInitializers), __runInitializers(this, _trigger_initializers, null));
|
|
166
|
-
this.#accessibilityLabel_accessor_storage = (__runInitializers(this, _trigger_extraInitializers), __runInitializers(this, _accessibilityLabel_initializers, ""));
|
|
167
|
-
this.#accessibilityBackLabel_accessor_storage = (__runInitializers(this, _accessibilityLabel_extraInitializers), __runInitializers(this, _accessibilityBackLabel_initializers, ""));
|
|
168
|
-
this._firstLevelNavigation = (__runInitializers(this, _accessibilityBackLabel_extraInitializers), null);
|
|
169
|
-
this._triggerElement = null;
|
|
170
|
-
this._language = new SbbLanguageController(this);
|
|
171
|
-
this._focusTrapController = new SbbFocusTrapController(this);
|
|
172
|
-
this._lastKeydownEvent = null;
|
|
173
|
-
this._mediaMatcherController = new SbbMediaMatcherController(this, { [SbbMediaQueryBreakpointSmallAndBelow]: (matches) => {
|
|
174
|
-
if (this.state !== "closed") this._setNavigationInert(matches);
|
|
175
|
-
} });
|
|
176
|
-
this._handleNavigationSectionClose = (event) => {
|
|
177
|
-
if (event.composedPath().filter((el) => el instanceof HTMLElement).some((el) => this._isCloseElement(el))) this.close();
|
|
178
|
-
};
|
|
179
|
-
this.addEventListener?.("keydown", (e) => {
|
|
180
|
-
this._lastKeydownEvent = e;
|
|
181
|
-
});
|
|
182
|
-
this.addEventListener?.("focusout", (e) => {
|
|
183
|
-
if (e.relatedTarget instanceof HTMLElement && !this.contains(e.relatedTarget) && sbbInputModalityDetector.mostRecentModality === "keyboard" && this._lastKeydownEvent?.key === "Tab" && this._triggerElement) {
|
|
184
|
-
const navigationElement = this.closest("sbb-navigation");
|
|
185
|
-
const focusableElements = Array.from(navigationElement?.querySelectorAll(IS_FOCUSABLE_QUERY) ?? []).filter((e) => !this.contains(e));
|
|
186
|
-
if (this._lastKeydownEvent.shiftKey || !focusableElements.length) this._triggerElement?.focus();
|
|
187
|
-
else (focusableElements[focusableElements.indexOf(this._triggerElement) + 1] ?? navigationElement.closeButton)?.focus();
|
|
188
|
-
}
|
|
189
|
-
});
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Opens the navigation section on trigger click.
|
|
193
|
-
*/
|
|
194
|
-
open() {
|
|
195
|
-
if (this.state !== "closed" || !this.hasUpdated || !this.dispatchBeforeOpenEvent()) return;
|
|
196
|
-
if (this._isNavigationButton(this._triggerElement)) this._triggerElement?.marker?.select(this._triggerElement);
|
|
197
|
-
this._closePreviousNavigationSection();
|
|
198
|
-
this.state = "opening";
|
|
199
|
-
/** @internal */
|
|
200
|
-
this.dispatchEvent(new Event("ɵnavigationsectionopening"));
|
|
201
|
-
this.startUpdate();
|
|
202
|
-
this.inert = true;
|
|
203
|
-
if (this._triggerElement) this._triggerElement.ariaExpanded = "true";
|
|
204
|
-
if (this._isZeroAnimationDuration()) this._handleOpening();
|
|
205
|
-
}
|
|
206
|
-
_isZeroAnimationDuration() {
|
|
207
|
-
return isZeroAnimationDuration(this, "--sbb-navigation-section-animation-duration");
|
|
208
|
-
}
|
|
209
|
-
_handleOpening() {
|
|
210
|
-
this.state = "opened";
|
|
211
|
-
this.inert = false;
|
|
212
|
-
this._attachWindowEvents();
|
|
213
|
-
this._setNavigationInert();
|
|
214
|
-
this._focusTrapController.focusInitialElement();
|
|
215
|
-
this._checkActiveAction();
|
|
216
|
-
this.completeUpdate();
|
|
217
|
-
this.dispatchOpenEvent();
|
|
218
|
-
}
|
|
219
|
-
_handleClosing() {
|
|
220
|
-
this.state = "closed";
|
|
221
|
-
this.shadowRoot?.querySelector(".sbb-navigation-section__container")?.scrollTo(0, 0);
|
|
222
|
-
this._windowEventsController?.abort();
|
|
223
|
-
this._resetLists();
|
|
224
|
-
this._setNavigationInert();
|
|
225
|
-
if (this._isBelowLarge() && this._triggerElement) this._triggerElement.focus();
|
|
226
|
-
this.completeUpdate();
|
|
227
|
-
this.dispatchCloseEvent();
|
|
228
|
-
}
|
|
229
|
-
_closePreviousNavigationSection() {
|
|
230
|
-
this._firstLevelNavigation?.activeNavigationSection?.close();
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Closes the navigation section.
|
|
234
|
-
*/
|
|
235
|
-
close() {
|
|
236
|
-
if (this.state !== "opened" || !this.dispatchBeforeCloseEvent()) return;
|
|
237
|
-
/** @internal */
|
|
238
|
-
this.dispatchEvent(new Event("ɵnavigationsectionclosing"));
|
|
239
|
-
this.state = "closing";
|
|
240
|
-
this.startUpdate();
|
|
241
|
-
this.inert = true;
|
|
242
|
-
if (this._triggerElement) this._triggerElement.ariaExpanded = "false";
|
|
243
|
-
if (this._isZeroAnimationDuration()) this._handleClosing();
|
|
244
|
-
}
|
|
245
|
-
_configureTrigger() {
|
|
246
|
-
if (this.trigger === this._triggerElement) return;
|
|
247
|
-
this._triggerAbortController?.abort();
|
|
248
|
-
removeAriaOverlayTriggerProperties(this._triggerElement);
|
|
249
|
-
this._triggerElement = this.trigger;
|
|
250
|
-
if (!this._triggerElement) return;
|
|
251
|
-
setAriaOverlayTriggerProperties(this, this._triggerElement, "menu", this.state);
|
|
252
|
-
this._triggerAbortController = new AbortController();
|
|
253
|
-
if (this._isNavigationButton(this._triggerElement)) this._triggerElement.connectedSection = this;
|
|
254
|
-
this._triggerElement.addEventListener("click", () => this.open(), { signal: this._triggerAbortController.signal });
|
|
255
|
-
this._firstLevelNavigation = this._triggerElement?.closest?.("sbb-navigation");
|
|
256
|
-
}
|
|
257
|
-
_isNavigationButton(trigger) {
|
|
258
|
-
return trigger?.localName === "sbb-navigation-button";
|
|
259
|
-
}
|
|
260
|
-
_setNavigationInert(isBelowLarge = this._isBelowLarge()) {
|
|
261
|
-
const navigationContent = this._firstLevelNavigation?.navigationContent;
|
|
262
|
-
if (navigationContent) navigationContent.inert = isBelowLarge && this.state !== "closed";
|
|
263
|
-
}
|
|
264
|
-
_onAnimationEnd(event) {
|
|
265
|
-
if (event.animationName === "open" && this.state === "opening") this._handleOpening();
|
|
266
|
-
else if (event.animationName === "close" && this.state === "closing") this._handleClosing();
|
|
267
|
-
}
|
|
268
|
-
_resetLists() {
|
|
269
|
-
Array.from(this.querySelectorAll(":is(:state(section-action),[state--section-action]):is(:state(action-active),[state--action-active])") ?? []).forEach((action) => ɵstateController(action).delete("action-active"));
|
|
270
|
-
}
|
|
271
|
-
_attachWindowEvents() {
|
|
272
|
-
this._windowEventsController = new AbortController();
|
|
273
|
-
window.addEventListener("keydown", (event) => this._onKeydownEvent(event), { signal: this._windowEventsController.signal });
|
|
274
|
-
window.addEventListener("click", this._handleNavigationSectionClose, { signal: this._windowEventsController.signal });
|
|
275
|
-
}
|
|
276
|
-
_isCloseElement(element) {
|
|
277
|
-
return element.nodeName === "A" || !element.hasAttribute("disabled") && (element.hasAttribute("sbb-navigation-close") || element.hasAttribute("sbb-navigation-section-close"));
|
|
278
|
-
}
|
|
279
|
-
_isBelowLarge() {
|
|
280
|
-
return this._mediaMatcherController.matches(SbbMediaQueryBreakpointSmallAndBelow) ?? false;
|
|
281
|
-
}
|
|
282
|
-
_onKeydownEvent(event) {
|
|
283
|
-
if (this.state === "opened" && event.key === "Escape") this.close();
|
|
284
|
-
}
|
|
285
|
-
_checkActiveAction() {
|
|
286
|
-
ɵstateController(this.querySelector(":is(sbb-navigation-button, sbb-navigation-link).sbb-active"))?.toggle("action-active", true);
|
|
287
|
-
}
|
|
288
|
-
connectedCallback() {
|
|
289
|
-
super.connectedCallback();
|
|
290
|
-
this.slot ||= "navigation-section";
|
|
291
|
-
if (this.hasUpdated) this._configureTrigger();
|
|
292
|
-
}
|
|
293
|
-
disconnectedCallback() {
|
|
294
|
-
super.disconnectedCallback();
|
|
295
|
-
this._triggerElement = null;
|
|
296
|
-
this._triggerAbortController?.abort();
|
|
297
|
-
this._windowEventsController?.abort();
|
|
298
|
-
}
|
|
299
|
-
requestUpdate(name, oldValue, options) {
|
|
300
|
-
super.requestUpdate(name, oldValue, options);
|
|
301
|
-
if (!isServer && (!name || name === "trigger") && this.hasUpdated) this._configureTrigger();
|
|
302
|
-
}
|
|
303
|
-
firstUpdated(changedProperties) {
|
|
304
|
-
super.firstUpdated(changedProperties);
|
|
305
|
-
this._configureTrigger();
|
|
306
|
-
}
|
|
307
|
-
render() {
|
|
308
|
-
return html`
|
|
309
|
-
<div class="sbb-navigation-section__container">
|
|
310
|
-
<nav
|
|
311
|
-
@animationend=${this._onAnimationEnd}
|
|
312
|
-
class="sbb-navigation-section"
|
|
313
|
-
aria-labelledby=${!this.accessibilityLabel ? "title" : nothing}
|
|
314
|
-
aria-label=${this.accessibilityLabel ? this.accessibilityLabel : nothing}
|
|
315
|
-
>
|
|
316
|
-
<div class="sbb-navigation-section__wrapper">
|
|
317
|
-
<div class="sbb-navigation-section__content">
|
|
318
|
-
<div class="sbb-navigation-section__header">
|
|
319
|
-
<!-- Back button -->
|
|
320
|
-
<sbb-transparent-button
|
|
321
|
-
id="sbb-navigation-section-back-button"
|
|
322
|
-
class="sbb-navigation-section__back"
|
|
323
|
-
aria-label=${this.accessibilityBackLabel || i18nGoBack[this._language.current]}
|
|
324
|
-
negative
|
|
325
|
-
size="m"
|
|
326
|
-
icon-name="chevron-small-left-small"
|
|
327
|
-
sbb-navigation-section-close
|
|
328
|
-
></sbb-transparent-button>
|
|
329
|
-
|
|
330
|
-
<span class="sbb-navigation-section__title" id="title">
|
|
331
|
-
<slot name="title">${this.titleContent}</slot>
|
|
332
|
-
</span>
|
|
333
|
-
</div>
|
|
334
|
-
<slot></slot>
|
|
335
|
-
</div>
|
|
336
|
-
</div>
|
|
337
|
-
</nav>
|
|
338
|
-
</div>
|
|
339
|
-
`;
|
|
340
|
-
}
|
|
341
|
-
};
|
|
342
|
-
})();
|
|
343
|
-
//#endregion
|
|
344
|
-
export { SbbNavigationSectionElement as t };
|
|
345
|
-
|
|
346
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmF2aWdhdGlvbi1zZWN0aW9uLmNvbXBvbmVudC1EeVBXR25zMi5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLXNlY3Rpb24vbmF2aWdhdGlvbi1zZWN0aW9uLnNjc3M/aW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL25hdmlnYXRpb24vbmF2aWdhdGlvbi1zZWN0aW9uL25hdmlnYXRpb24tc2VjdGlvbi5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICAtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tZGlzcGxheTogbm9uZTtcbiAgLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLWNvbHVtbjogMSAvIC0xO1xuICAtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tcG9zaXRpb246IGZpeGVkO1xuICAtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1hbmltYXRpb24tZHVyYXRpb246IHZhcihcbiAgICAtLXNiYi1kaXNhYmxlLWFuaW1hdGlvbi1kdXJhdGlvbixcbiAgICB2YXIoLS1zYmItYW5pbWF0aW9uLWR1cmF0aW9uLTN4KVxuICApO1xuICAtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tYW5pbWF0aW9uLWVhc2luZzogZWFzZS1vdXQ7XG4gIC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1wYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLWxheW91dC1iYXNlLW9mZnNldC1yZXNwb25zaXZlKTtcbiAgLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLXBhZGRpbmctYmxvY2s6IHZhcigtLXNiYi1zcGFjaW5nLXJlc3BvbnNpdmUtbCk7XG4gIC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi10cmFuc2xhdGU6IDEwMCU7XG4gIC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1jb250ZW50LXBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0xMngpO1xuICAtLXNiYi1mb2N1cy1vdXRsaW5lLWNvbG9yOiB2YXIoLS1zYmItZm9jdXMtb3V0bGluZS1jb2xvci1kYXJrKTtcbiAgLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLXdpZHRoOiAxMDBkdnc7XG4gIC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1oZWlnaHQ6IDEwMGR2aDtcblxuICAvLyBXZSBoYXZlIHRvIHBsYWNlIHRoZSBzdHlsZXMgb24gdGhlIGhvc3QgYXMgaXQgaGFzIHRvIGJlIGFsaWduZWQgb24gdGhlIGdyaWQgb2YgdGhlIG5hdmlnYXRpb25cbiAgZGlzcGxheTogdmFyKC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1kaXNwbGF5KTtcbiAgcG9zaXRpb246IHZhcigtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tcG9zaXRpb24pO1xuICBncmlkLWNvbHVtbjogdmFyKC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1jb2x1bW4pO1xuICBpbnNldC1pbmxpbmUtc3RhcnQ6IDA7XG4gIGluc2V0LWJsb2NrLXN0YXJ0OiAwO1xuICB3aWR0aDogdmFyKC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi13aWR0aCk7XG4gIGhlaWdodDogdmFyKC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1oZWlnaHQpO1xuICB6LWluZGV4OiB2YXIoLS1zYmItbmF2aWdhdGlvbi16LWluZGV4LCB2YXIoLS1zYmItb3ZlcmxheS1kZWZhdWx0LXotaW5kZXgpKTtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IGxhcmdlKSB7XG4gICAgLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLWNvbHVtbjogNSAvIDEzO1xuICAgIC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1hbmltYXRpb24tZHVyYXRpb246IHZhcihcbiAgICAgIC0tc2JiLWRpc2FibGUtYW5pbWF0aW9uLWR1cmF0aW9uLFxuICAgICAgdmFyKC0tc2JiLWFuaW1hdGlvbi1kdXJhdGlvbi00eClcbiAgICApO1xuICAgIC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1wYWRkaW5nLWJsb2NrOiB2YXIoLS1zYmItc3BhY2luZy1yZXNwb25zaXZlLXhsKTtcbiAgICAtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tcGFkZGluZy1pbmxpbmU6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTh4KVxuICAgICAgdmFyKC0tc2JiLWxheW91dC1iYXNlLW9mZnNldC1yZXNwb25zaXZlKTtcbiAgICAtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi10cmFuc2xhdGU6IDA7XG4gICAgLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLWNvbnRlbnQtcGFkZGluZy1pbmxpbmUtc3RhcnQ6IDA7XG4gICAgLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLXdpZHRoOiBjYWxjKFxuICAgICAgMTAwJSArIHZhcigtLXNiYi1sYXlvdXQtYmFzZS1vZmZzZXQtcmVzcG9uc2l2ZSkgKyB2YXIoLS1zYmItZ3JpZC1iYXNlLWd1dHRlci1yZXNwb25zaXZlKVxuICAgICk7XG5cbiAgICB0cmFuc2xhdGU6IGNhbGModmFyKC0tc2JiLWdyaWQtYmFzZS1ndXR0ZXItcmVzcG9uc2l2ZSkgKiAtMSkgMDtcbiAgfVxuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogdWx0cmEpIHtcbiAgICAtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tY29sdW1uOiA2IC8gMTc7XG4gICAgLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLXBhZGRpbmctYmxvY2s6IHZhcigtLXNiYi1zcGFjaW5nLXJlc3BvbnNpdmUteHhsKVxuICAgICAgdmFyKC0tc2JiLXNwYWNpbmctcmVzcG9uc2l2ZS1sKTtcbiAgfVxufVxuXG46aG9zdCg6c3RhdGUoc3RhdGUtb3BlbmVkKSkge1xuICAtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tcG9pbnRlci1ldmVudHM6IGFsbDtcbn1cblxuOmhvc3QoOnN0YXRlKHN0YXRlLW9wZW5pbmcpKSB7XG4gIC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1wb3NpdGlvbjogYWJzb2x1dGU7XG59XG5cbjpob3N0KDppcyg6c3RhdGUoc3RhdGUtb3BlbmluZyksIDpzdGF0ZShzdGF0ZS1jbG9zaW5nKSkpIHtcbiAgLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLXBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG46aG9zdCg6aXMoOnN0YXRlKHN0YXRlLW9wZW5pbmcpLCA6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLWNsb3NpbmcpKSkge1xuICAtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tZGlzcGxheTogYmxvY2s7XG59XG5cbjo6c2xvdHRlZCgqKSB7XG4gIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLWNvbnRlbnQtcGFkZGluZy1pbmxpbmUtc3RhcnQpO1xufVxuXG4vLyBBbHdheXMgcGxhY2UgdGhlIHNiYi1idXR0b24gb24gYSBuZXcgcm93XG46OnNsb3R0ZWQoOnN0YXRlKHNiYi1idXR0b24pKSB7XG4gIGdyaWQtY29sdW1uLXN0YXJ0OiAxO1xufVxuXG4uc2JiLW5hdmlnYXRpb24tc2VjdGlvbl9fY29udGFpbmVyIHtcbiAgcG9pbnRlci1ldmVudHM6IHZhcigtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tcG9pbnRlci1ldmVudHMpO1xuICBoZWlnaHQ6IHZhcigtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24taGVpZ2h0KTtcbn1cblxuLnNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24ge1xuICBkaXNwbGF5OiBub25lO1xuICBib3JkZXI6IG5vbmU7XG4gIG1hcmdpbjogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgY29sb3I6IHZhcigtLXNiYi1uYXZpZ2F0aW9uLWNvbG9yLCB2YXIoLS1zYmItY29sb3ItMS1uZWdhdGl2ZSkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgcGFkZGluZzogMDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICA6aG9zdCg6aXMoOnN0YXRlKHN0YXRlLW9wZW5pbmcpLCA6c3RhdGUoc3RhdGUtb3BlbmVkKSwgOnN0YXRlKHN0YXRlLWNsb3NpbmcpKSkgJiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG5cbiAgICBhbmltYXRpb246IHtcbiAgICAgIG5hbWU6IG9wZW47XG4gICAgICBkdXJhdGlvbjogdmFyKC0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1hbmltYXRpb24tZHVyYXRpb24pO1xuICAgICAgdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLWFuaW1hdGlvbi1lYXNpbmcpO1xuICAgIH1cbiAgfVxuXG4gIDpob3N0KDpzdGF0ZShzdGF0ZS1jbG9zaW5nKSkgJiB7XG4gICAgYW5pbWF0aW9uLW5hbWU6IGNsb3NlO1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIG91dGxpbmU6IHZhcigtLXNiYi1ib3JkZXItd2lkdGgtMXgpIHNvbGlkIENhbnZhc1RleHQ7XG4gIH1cbn1cblxuLnNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25fX3dyYXBwZXIge1xuICBAaW5jbHVkZSBzYmIuc2Nyb2xsYmFyKCRuZWdhdGl2ZTogdHJ1ZSk7XG5cbiAgaGVpZ2h0OiAxMDAlO1xuICBwYWRkaW5nLWJsb2NrOiB2YXIoLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLXBhZGRpbmctYmxvY2spO1xuICBvdXRsaW5lOiBub25lO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuXG4gIDpob3N0KDppcyg6c3RhdGUoc3RhdGUtb3BlbmluZyksIDpzdGF0ZShzdGF0ZS1jbG9zaW5nKSkpICYge1xuICAgIC0tc2JiLXNjcm9sbGJhci1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgICBzY3JvbGxiYXItY29sb3I6IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi5zYmItbmF2aWdhdGlvbi1zZWN0aW9uX19oZWFkZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xuICBtYXJnaW4tYmxvY2stc3RhcnQ6IHZhcigtLXNiYi1zcGFjaW5nLXJlc3BvbnNpdmUteHhsKTtcbiAgcGFkZGluZy1pbmxpbmUtc3RhcnQ6IHZhcigtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tY29udGVudC1wYWRkaW5nLWlubGluZS1zdGFydCk7XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBsYXJnZSkge1xuICAgIG1hcmdpbi1ibG9jay1zdGFydDogMDtcbiAgICBwYWRkaW5nLWlubGluZS1zdGFydDogMDtcbiAgfVxuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogdWx0cmEpIHtcbiAgICBncmlkLWNvbHVtbjogMSAvIDQ7XG4gIH1cbn1cblxuLnNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25fX2JhY2sge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRyYW5zbGF0ZTogY2FsYygoMTAwJSArIHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTF4KSkgKiAtMSkgMDtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IGxhcmdlKSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxufVxuXG4uc2JiLW5hdmlnYXRpb24tc2VjdGlvbl9fdGl0bGUge1xuICBAaW5jbHVkZSBzYmIudGl0bGUtcnVsZXM7XG4gIEBpbmNsdWRlIHNiYi50aXRsZS0tbGV2ZWwtNDtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IGxhcmdlKSB7XG4gICAgQGluY2x1ZGUgc2JiLnRpdGxlLS1sZXZlbC0yO1xuICB9XG59XG5cbi5zYmItbmF2aWdhdGlvbi1zZWN0aW9uX19jb250ZW50IHtcbiAgZGlzcGxheTogZ3JpZDtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gIGdhcDogdmFyKC0tc2JiLXNwYWNpbmctcmVzcG9uc2l2ZS1sKSB2YXIoLS1zYmItZ3JpZC1iYXNlLWd1dHRlci1yZXNwb25zaXZlKTtcbiAgcGFkZGluZy1pbmxpbmU6IHZhcigtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tcGFkZGluZy1pbmxpbmUpO1xuXG4gIEBpbmNsdWRlIHNiYi5tcSgkZnJvbTogbGFyZ2UpIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zbGF0ZTogMCB2YXIoLS1zYmItc3BhY2luZy1maXhlZC0zeCk7XG4gICAgdHJhbnNpdGlvbjoge1xuICAgICAgZHVyYXRpb246IHZhcigtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tYW5pbWF0aW9uLWR1cmF0aW9uKTtcbiAgICAgIGRlbGF5OiB2YXIoLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLWFuaW1hdGlvbi1kdXJhdGlvbik7XG4gICAgICB0aW1pbmctZnVuY3Rpb246IHZhcigtLXNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tYW5pbWF0aW9uLWVhc2luZyk7XG4gICAgICBwcm9wZXJ0eTogb3BhY2l0eSwgdHJhbnNsYXRlO1xuICAgIH1cblxuICAgIDpob3N0KDpzdGF0ZShzdGF0ZS1vcGVuZWQpKSAmIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB0cmFuc2xhdGU6IDAgMDtcbiAgICB9XG4gIH1cblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IHVsdHJhKSB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTtcbiAgfVxuXG4gIDpob3N0KDpzdGF0ZShzdGF0ZS1jbG9zaW5nKSkgJiB7XG4gICAgdHJhbnNpdGlvbi1kZWxheTogMHM7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBvcGVuIHtcbiAgZnJvbSB7XG4gICAgdHJhbnNsYXRlOiB2YXIoLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLXRyYW5zbGF0ZSkgMDtcbiAgfVxuXG4gIHRvIHtcbiAgICB0cmFuc2xhdGU6IDAgMDtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGNsb3NlIHtcbiAgZnJvbSB7XG4gICAgdHJhbnNsYXRlOiAwIDA7XG4gIH1cblxuICB0byB7XG4gICAgdHJhbnNsYXRlOiB2YXIoLS1zYmItbmF2aWdhdGlvbi1zZWN0aW9uLXRyYW5zbGF0ZSkgMDtcbiAgfVxufVxuIiwiaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgaXNTZXJ2ZXIsXG4gIG5vdGhpbmcsXG4gIHR5cGUgUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbiAgdW5zYWZlQ1NTLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYlRyYW5zcGFyZW50QnV0dG9uRWxlbWVudCB9IGZyb20gJy4uLy4uL2J1dHRvbi5wdXJlLnRzJztcbmltcG9ydCB7XG4gIGJveFNpemluZ1N0eWxlcyxcbiAgZm9yY2VUeXBlLFxuICBpMThuR29CYWNrLFxuICBpZFJlZmVyZW5jZSxcbiAgSVNfRk9DVVNBQkxFX1FVRVJZLFxuICBpc1plcm9BbmltYXRpb25EdXJhdGlvbixcbiAgb21pdEVtcHR5Q29udmVydGVyLFxuICByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJQcm9wZXJ0aWVzLFxuICB0eXBlIFNiYkVsZW1lbnRUeXBlLFxuICBTYmJGb2N1c1RyYXBDb250cm9sbGVyLFxuICBzYmJJbnB1dE1vZGFsaXR5RGV0ZWN0b3IsXG4gIFNiYkxhbmd1YWdlQ29udHJvbGxlcixcbiAgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcixcbiAgU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRTbWFsbEFuZEJlbG93LFxuICBTYmJPcGVuQ2xvc2VCYXNlRWxlbWVudCxcbiAgdHlwZSBTYmJPcGVuZWRDbG9zZWRTdGF0ZSxcbiAgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4sXG4gIHNldEFyaWFPdmVybGF5VHJpZ2dlclByb3BlcnRpZXMsXG4gIMm1c3RhdGVDb250cm9sbGVyLFxufSBmcm9tICcuLi8uLi9jb3JlLnRzJztcbmltcG9ydCB0eXBlIHsgU2JiTmF2aWdhdGlvbkVsZW1lbnQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uL25hdmlnYXRpb24uY29tcG9uZW50LnRzJztcbmltcG9ydCB0eXBlIHsgU2JiTmF2aWdhdGlvbkJ1dHRvbkVsZW1lbnQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uLWJ1dHRvbi9uYXZpZ2F0aW9uLWJ1dHRvbi5jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBTYmJOYXZpZ2F0aW9uTGlua0VsZW1lbnQgfSBmcm9tICcuLi9uYXZpZ2F0aW9uLWxpbmsvbmF2aWdhdGlvbi1saW5rLmNvbXBvbmVudC50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL25hdmlnYXRpb24tc2VjdGlvbi5zY3NzP2lubGluZSc7XG5cbi8qKlxuICogSXQgY2FuIGJlIHVzZWQgYXMgYSBjb250YWluZXIgZm9yIGBzYmItbmF2aWdhdGlvbi1saXN0YCB3aXRoaW4gYSBgc2JiLW5hdmlnYXRpb25gLlxuICpcbiAqIEBzbG90IC0gVXNlIHRoZSB1bm5hbWVkIHNsb3QgdG8gYWRkIGNvbnRlbnQgaW50byB0aGUgYHNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25gLlxuICovXG5leHBvcnQgY2xhc3MgU2JiTmF2aWdhdGlvblNlY3Rpb25FbGVtZW50IGV4dGVuZHMgU2JiVXBkYXRlU2NoZWR1bGVyTWl4aW4oU2JiT3BlbkNsb3NlQmFzZUVsZW1lbnQpIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1uYXZpZ2F0aW9uLXNlY3Rpb24nO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIGVsZW1lbnREZXBlbmRlbmNpZXM6IFNiYkVsZW1lbnRUeXBlW10gPSBbU2JiVHJhbnNwYXJlbnRCdXR0b25FbGVtZW50XTtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG5cbiAgLyoqXG4gICAqIFRoZSBsYWJlbCB0byBiZSBzaG93biBiZWZvcmUgdGhlIGFjdGlvbiBsaXN0LlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3RpdGxlLWNvbnRlbnQnLCByZWZsZWN0OiB0cnVlLCBjb252ZXJ0ZXI6IG9taXRFbXB0eUNvbnZlcnRlciB9KVxuICBwdWJsaWMgYWNjZXNzb3IgdGl0bGVDb250ZW50OiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQgdGhhdCB3aWxsIHRyaWdnZXIgdGhlIG5hdmlnYXRpb24gc2VjdGlvbi5cbiAgICpcbiAgICogRm9yIGF0dHJpYnV0ZSB1c2FnZSwgcHJvdmlkZSBhbiBpZCByZWZlcmVuY2UuXG4gICAqL1xuICBAaWRSZWZlcmVuY2UoKVxuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgYWNjZXNzb3IgdHJpZ2dlcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICAvKipcbiAgICogVGhpcyB3aWxsIGJlIGZvcndhcmRlZCBhcyBhcmlhLWxhYmVsIHRvIHRoZSBuYXYgZWxlbWVudCBhbmQgaXMgcmVhZCBhcyBhIHRpdGxlIG9mIHRoZSBuYXZpZ2F0aW9uLXNlY3Rpb24uXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYWNjZXNzaWJpbGl0eS1sYWJlbCcgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFjY2Vzc2liaWxpdHlMYWJlbDogc3RyaW5nID0gJyc7XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBmb3J3YXJkZWQgYXMgYXJpYS1sYWJlbCB0byB0aGUgYmFjayBidXR0b24gZWxlbWVudC5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhY2Nlc3NpYmlsaXR5LWJhY2stbGFiZWwnIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBhY2Nlc3NpYmlsaXR5QmFja0xhYmVsOiBzdHJpbmcgPSAnJztcblxuICAvKiogVGhlIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuICovXG4gIHByb3RlY3RlZCBvdmVycmlkZSBzZXQgc3RhdGUoc3RhdGU6IFNiYk9wZW5lZENsb3NlZFN0YXRlKSB7XG4gICAgc3VwZXIuc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLmludGVybmFscy5hcmlhSGlkZGVuID0gdGhpcy5zdGF0ZSAhPT0gJ29wZW5lZCcgPyAndHJ1ZScgOiBudWxsO1xuICB9XG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXQgc3RhdGUoKTogU2JiT3BlbmVkQ2xvc2VkU3RhdGUge1xuICAgIHJldHVybiBzdXBlci5zdGF0ZTtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpcnN0TGV2ZWxOYXZpZ2F0aW9uPzogU2JiTmF2aWdhdGlvbkVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfdHJpZ2dlckVsZW1lbnQ6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIhOiBBYm9ydENvbnRyb2xsZXI7XG4gIHByaXZhdGUgX2xhbmd1YWdlID0gbmV3IFNiYkxhbmd1YWdlQ29udHJvbGxlcih0aGlzKTtcbiAgcHJpdmF0ZSBfZm9jdXNUcmFwQ29udHJvbGxlciA9IG5ldyBTYmJGb2N1c1RyYXBDb250cm9sbGVyKHRoaXMpO1xuICBwcml2YXRlIF9sYXN0S2V5ZG93bkV2ZW50OiBLZXlib2FyZEV2ZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX21lZGlhTWF0Y2hlckNvbnRyb2xsZXIgPSBuZXcgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcih0aGlzLCB7XG4gICAgW1NiYk1lZGlhUXVlcnlCcmVha3BvaW50U21hbGxBbmRCZWxvd106IChtYXRjaGVzKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCcpIHtcbiAgICAgICAgdGhpcy5fc2V0TmF2aWdhdGlvbkluZXJ0KG1hdGNoZXMpO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZSkgPT4ge1xuICAgICAgdGhpcy5fbGFzdEtleWRvd25FdmVudCA9IGU7XG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/LignZm9jdXNvdXQnLCAoZSkgPT4ge1xuICAgICAgaWYgKFxuICAgICAgICBlLnJlbGF0ZWRUYXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJlxuICAgICAgICAhdGhpcy5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpICYmXG4gICAgICAgIHNiYklucHV0TW9kYWxpdHlEZXRlY3Rvci5tb3N0UmVjZW50TW9kYWxpdHkgPT09ICdrZXlib2FyZCcgJiZcbiAgICAgICAgdGhpcy5fbGFzdEtleWRvd25FdmVudD8ua2V5ID09PSAnVGFiJyAmJlxuICAgICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudFxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG5hdmlnYXRpb25FbGVtZW50ID0gdGhpcy5jbG9zZXN0PFNiYk5hdmlnYXRpb25FbGVtZW50Pignc2JiLW5hdmlnYXRpb24nKTtcbiAgICAgICAgY29uc3QgZm9jdXNhYmxlRWxlbWVudHMgPSBBcnJheS5mcm9tKFxuICAgICAgICAgIG5hdmlnYXRpb25FbGVtZW50Py5xdWVyeVNlbGVjdG9yQWxsPEhUTUxFbGVtZW50PihJU19GT0NVU0FCTEVfUVVFUlkpID8/IFtdLFxuICAgICAgICApLmZpbHRlcigoZSkgPT4gIXRoaXMuY29udGFpbnMoZSkpO1xuXG4gICAgICAgIGlmICh0aGlzLl9sYXN0S2V5ZG93bkV2ZW50LnNoaWZ0S2V5IHx8ICFmb2N1c2FibGVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudD8uZm9jdXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB0cmlnZ2VySW5kZXggPSBmb2N1c2FibGVFbGVtZW50cy5pbmRleE9mKHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcbiAgICAgICAgICAoZm9jdXNhYmxlRWxlbWVudHNbdHJpZ2dlckluZGV4ICsgMV0gPz8gbmF2aWdhdGlvbkVsZW1lbnQhLmNsb3NlQnV0dG9uKT8uZm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9wZW5zIHRoZSBuYXZpZ2F0aW9uIHNlY3Rpb24gb24gdHJpZ2dlciBjbGljay5cbiAgICovXG4gIHB1YmxpYyBvcGVuKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnY2xvc2VkJyB8fCAhdGhpcy5oYXNVcGRhdGVkIHx8ICF0aGlzLmRpc3BhdGNoQmVmb3JlT3BlbkV2ZW50KCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNOYXZpZ2F0aW9uQnV0dG9uKHRoaXMuX3RyaWdnZXJFbGVtZW50KSkge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQ/Lm1hcmtlcj8uc2VsZWN0KHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcbiAgICB9XG5cbiAgICB0aGlzLl9jbG9zZVByZXZpb3VzTmF2aWdhdGlvblNlY3Rpb24oKTtcbiAgICB0aGlzLnN0YXRlID0gJ29wZW5pbmcnO1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCfJtW5hdmlnYXRpb25zZWN0aW9ub3BlbmluZycpKTtcbiAgICB0aGlzLnN0YXJ0VXBkYXRlKCk7XG4gICAgdGhpcy5pbmVydCA9IHRydWU7XG4gICAgaWYgKHRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hcmlhRXhwYW5kZWQgPSAndHJ1ZSc7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGFuaW1hdGlvbiBkdXJhdGlvbiBpcyB6ZXJvLCB0aGUgYW5pbWF0aW9uZW5kIGV2ZW50IGlzIG5vdCBhbHdheXMgZmlyZWQgcmVsaWFibHkuXG4gICAgLy8gSW4gdGhpcyBjYXNlIHdlIGRpcmVjdGx5IHNldCB0aGUgYG9wZW5lZGAgc3RhdGUuXG4gICAgaWYgKHRoaXMuX2lzWmVyb0FuaW1hdGlvbkR1cmF0aW9uKCkpIHtcbiAgICAgIHRoaXMuX2hhbmRsZU9wZW5pbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9pc1plcm9BbmltYXRpb25EdXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gaXNaZXJvQW5pbWF0aW9uRHVyYXRpb24odGhpcywgJy0tc2JiLW5hdmlnYXRpb24tc2VjdGlvbi1hbmltYXRpb24tZHVyYXRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZU9wZW5pbmcoKTogdm9pZCB7XG4gICAgdGhpcy5zdGF0ZSA9ICdvcGVuZWQnO1xuICAgIHRoaXMuaW5lcnQgPSBmYWxzZTtcbiAgICB0aGlzLl9hdHRhY2hXaW5kb3dFdmVudHMoKTtcbiAgICB0aGlzLl9zZXROYXZpZ2F0aW9uSW5lcnQoKTtcbiAgICB0aGlzLl9mb2N1c1RyYXBDb250cm9sbGVyLmZvY3VzSW5pdGlhbEVsZW1lbnQoKTtcbiAgICB0aGlzLl9jaGVja0FjdGl2ZUFjdGlvbigpO1xuICAgIHRoaXMuY29tcGxldGVVcGRhdGUoKTtcbiAgICB0aGlzLmRpc3BhdGNoT3BlbkV2ZW50KCk7XG4gIH1cblxuICBwcml2YXRlIF9oYW5kbGVDbG9zaW5nKCk6IHZvaWQge1xuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2VkJztcbiAgICB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoJy5zYmItbmF2aWdhdGlvbi1zZWN0aW9uX19jb250YWluZXInKT8uc2Nyb2xsVG8oMCwgMCk7XG4gICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICB0aGlzLl9yZXNldExpc3RzKCk7XG4gICAgdGhpcy5fc2V0TmF2aWdhdGlvbkluZXJ0KCk7XG4gICAgaWYgKHRoaXMuX2lzQmVsb3dMYXJnZSgpICYmIHRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgICB0aGlzLmNvbXBsZXRlVXBkYXRlKCk7XG4gICAgdGhpcy5kaXNwYXRjaENsb3NlRXZlbnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2Nsb3NlUHJldmlvdXNOYXZpZ2F0aW9uU2VjdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9maXJzdExldmVsTmF2aWdhdGlvbj8uYWN0aXZlTmF2aWdhdGlvblNlY3Rpb24/LmNsb3NlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBuYXZpZ2F0aW9uIHNlY3Rpb24uXG4gICAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvcGVuZWQnIHx8ICF0aGlzLmRpc3BhdGNoQmVmb3JlQ2xvc2VFdmVudCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ8m1bmF2aWdhdGlvbnNlY3Rpb25jbG9zaW5nJykpO1xuICAgIHRoaXMuc3RhdGUgPSAnY2xvc2luZyc7XG4gICAgdGhpcy5zdGFydFVwZGF0ZSgpO1xuICAgIHRoaXMuaW5lcnQgPSB0cnVlO1xuICAgIGlmICh0aGlzLl90cmlnZ2VyRWxlbWVudCkge1xuICAgICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQuYXJpYUV4cGFuZGVkID0gJ2ZhbHNlJztcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgYW5pbWF0aW9uIGR1cmF0aW9uIGlzIHplcm8sIHRoZSBhbmltYXRpb25lbmQgZXZlbnQgaXMgbm90IGFsd2F5cyBmaXJlZCByZWxpYWJseS5cbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgZGlyZWN0bHkgc2V0IHRoZSBgY2xvc2VkYCBzdGF0ZS5cbiAgICBpZiAodGhpcy5faXNaZXJvQW5pbWF0aW9uRHVyYXRpb24oKSkge1xuICAgICAgdGhpcy5faGFuZGxlQ2xvc2luZygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSB0cmlnZ2VyIGlzIHZhbGlkIGFuZCBhdHRhY2ggY2xpY2sgZXZlbnQgbGlzdGVuZXJzLlxuICBwcml2YXRlIF9jb25maWd1cmVUcmlnZ2VyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09IHRoaXMuX3RyaWdnZXJFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdHJpZ2dlckFib3J0Q29udHJvbGxlcj8uYWJvcnQoKTtcbiAgICByZW1vdmVBcmlhT3ZlcmxheVRyaWdnZXJQcm9wZXJ0aWVzKHRoaXMuX3RyaWdnZXJFbGVtZW50KTtcbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudCA9IHRoaXMudHJpZ2dlcjtcblxuICAgIGlmICghdGhpcy5fdHJpZ2dlckVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRBcmlhT3ZlcmxheVRyaWdnZXJQcm9wZXJ0aWVzKHRoaXMsIHRoaXMuX3RyaWdnZXJFbGVtZW50LCAnbWVudScsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgaWYgKHRoaXMuX2lzTmF2aWdhdGlvbkJ1dHRvbih0aGlzLl90cmlnZ2VyRWxlbWVudCkpIHtcbiAgICAgIHRoaXMuX3RyaWdnZXJFbGVtZW50LmNvbm5lY3RlZFNlY3Rpb24gPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLl90cmlnZ2VyRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHRoaXMub3BlbigpLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICAgIHRoaXMuX2ZpcnN0TGV2ZWxOYXZpZ2F0aW9uID0gdGhpcy5fdHJpZ2dlckVsZW1lbnQ/LmNsb3Nlc3Q/Lignc2JiLW5hdmlnYXRpb24nKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzTmF2aWdhdGlvbkJ1dHRvbih0cmlnZ2VyOiBIVE1MRWxlbWVudCB8IG51bGwpOiB0cmlnZ2VyIGlzIFNiYk5hdmlnYXRpb25CdXR0b25FbGVtZW50IHtcbiAgICByZXR1cm4gdHJpZ2dlcj8ubG9jYWxOYW1lID09PSAnc2JiLW5hdmlnYXRpb24tYnV0dG9uJztcbiAgfVxuXG4gIHByaXZhdGUgX3NldE5hdmlnYXRpb25JbmVydChpc0JlbG93TGFyZ2U6IGJvb2xlYW4gPSB0aGlzLl9pc0JlbG93TGFyZ2UoKSk6IHZvaWQge1xuICAgIGNvbnN0IG5hdmlnYXRpb25Db250ZW50ID0gdGhpcy5fZmlyc3RMZXZlbE5hdmlnYXRpb24/Lm5hdmlnYXRpb25Db250ZW50O1xuICAgIGlmIChuYXZpZ2F0aW9uQ29udGVudCkge1xuICAgICAgbmF2aWdhdGlvbkNvbnRlbnQuaW5lcnQgPSBpc0JlbG93TGFyZ2UgJiYgdGhpcy5zdGF0ZSAhPT0gJ2Nsb3NlZCc7XG4gICAgfVxuICB9XG5cbiAgLy8gSW4gcmFyZSBjYXNlcyBpdCBjYW4gYmUgdGhhdCB0aGUgYW5pbWF0aW9uRW5kIGV2ZW50IGlzIHRyaWdnZXJlZCB0d2ljZS5cbiAgLy8gVG8gYXZvaWQgZW50ZXJpbmcgYSBjb3JydXB0IHN0YXRlLCBleGl0IHdoZW4gc3RhdGUgaXMgbm90IGV4cGVjdGVkLlxuICBwcml2YXRlIF9vbkFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ29wZW4nICYmIHRoaXMuc3RhdGUgPT09ICdvcGVuaW5nJykge1xuICAgICAgdGhpcy5faGFuZGxlT3BlbmluZygpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSA9PT0gJ2Nsb3NlJyAmJiB0aGlzLnN0YXRlID09PSAnY2xvc2luZycpIHtcbiAgICAgIHRoaXMuX2hhbmRsZUNsb3NpbmcoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9yZXNldExpc3RzKCk6IHZvaWQge1xuICAgIEFycmF5LmZyb20oXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGw8U2JiTmF2aWdhdGlvbkJ1dHRvbkVsZW1lbnQgfCBTYmJOYXZpZ2F0aW9uTGlua0VsZW1lbnQ+KFxuICAgICAgICAnOnN0YXRlKHNlY3Rpb24tYWN0aW9uKTpzdGF0ZShhY3Rpb24tYWN0aXZlKScsXG4gICAgICApID8/IFtdLFxuICAgICkuZm9yRWFjaCgoYWN0aW9uKSA9PiDJtXN0YXRlQ29udHJvbGxlcihhY3Rpb24pLmRlbGV0ZSgnYWN0aW9uLWFjdGl2ZScpKTtcbiAgfVxuXG4gIHByaXZhdGUgX2F0dGFjaFdpbmRvd0V2ZW50cygpOiB2b2lkIHtcbiAgICB0aGlzLl93aW5kb3dFdmVudHNDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9vbktleWRvd25FdmVudChldmVudCksIHtcbiAgICAgIHNpZ25hbDogdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlci5zaWduYWwsXG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBuYXZpZ2F0aW9uIHNlY3Rpb24gb24gYWN0aW9uIGNsaWNrIG9yIHNiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tY2xvc2UgY2xpY2tcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLl9oYW5kbGVOYXZpZ2F0aW9uU2VjdGlvbkNsb3NlLCB7XG4gICAgICBzaWduYWw6IHRoaXMuX3dpbmRvd0V2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIGNsaWNrIHdhcyB0cmlnZ2VyZWQgb24gYW4gZWxlbWVudCB0aGF0IHNob3VsZCBjbG9zZSB0aGUgc2VjdGlvbi5cbiAgcHJpdmF0ZSBfaGFuZGxlTmF2aWdhdGlvblNlY3Rpb25DbG9zZSA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoXG4gICAgICBldmVudFxuICAgICAgICAuY29tcG9zZWRQYXRoKClcbiAgICAgICAgLmZpbHRlcigoZWwpID0+IGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpXG4gICAgICAgIC5zb21lKChlbCkgPT4gdGhpcy5faXNDbG9zZUVsZW1lbnQoZWwpKVxuICAgICkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfTtcblxuICBwcml2YXRlIF9pc0Nsb3NlRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAoXG4gICAgICBlbGVtZW50Lm5vZGVOYW1lID09PSAnQScgfHxcbiAgICAgICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiZcbiAgICAgICAgKGVsZW1lbnQuaGFzQXR0cmlidXRlKCdzYmItbmF2aWdhdGlvbi1jbG9zZScpIHx8XG4gICAgICAgICAgZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3NiYi1uYXZpZ2F0aW9uLXNlY3Rpb24tY2xvc2UnKSkpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzQmVsb3dMYXJnZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbWVkaWFNYXRjaGVyQ29udHJvbGxlci5tYXRjaGVzKFNiYk1lZGlhUXVlcnlCcmVha3BvaW50U21hbGxBbmRCZWxvdykgPz8gZmFsc2U7XG4gIH1cblxuICAvLyBDbG9zZXMgdGhlIG5hdmlnYXRpb24gb24gXCJFc2NcIiBrZXkgcHJlc3NlZC5cbiAgcHJpdmF0ZSBfb25LZXlkb3duRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gJ29wZW5lZCcgJiYgZXZlbnQua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NoZWNrQWN0aXZlQWN0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnF1ZXJ5U2VsZWN0b3I8U2JiTmF2aWdhdGlvbkJ1dHRvbkVsZW1lbnQgfCBTYmJOYXZpZ2F0aW9uTGlua0VsZW1lbnQ+KFxuICAgICAgJzppcyhzYmItbmF2aWdhdGlvbi1idXR0b24sIHNiYi1uYXZpZ2F0aW9uLWxpbmspLnNiYi1hY3RpdmUnLFxuICAgICk7XG4gICAgybVzdGF0ZUNvbnRyb2xsZXIoZWxlbWVudCk/LnRvZ2dsZSgnYWN0aW9uLWFjdGl2ZScsIHRydWUpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5zbG90IHx8PSAnbmF2aWdhdGlvbi1zZWN0aW9uJztcbiAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl9jb25maWd1cmVUcmlnZ2VyKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgdGhpcy5fdHJpZ2dlckVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuX3RyaWdnZXJBYm9ydENvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fd2luZG93RXZlbnRzQ29udHJvbGxlcj8uYWJvcnQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSByZXF1ZXN0VXBkYXRlKFxuICAgIG5hbWU/OiBQcm9wZXJ0eUtleSxcbiAgICBvbGRWYWx1ZT86IHVua25vd24sXG4gICAgb3B0aW9ucz86IFByb3BlcnR5RGVjbGFyYXRpb24sXG4gICk6IHZvaWQge1xuICAgIHN1cGVyLnJlcXVlc3RVcGRhdGUobmFtZSwgb2xkVmFsdWUsIG9wdGlvbnMpO1xuXG4gICAgaWYgKCFpc1NlcnZlciAmJiAoIW5hbWUgfHwgbmFtZSA9PT0gJ3RyaWdnZXInKSAmJiB0aGlzLmhhc1VwZGF0ZWQpIHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZVRyaWdnZXIoKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgdGhpcy5fY29uZmlndXJlVHJpZ2dlcigpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLW5hdmlnYXRpb24tc2VjdGlvbl9fY29udGFpbmVyXCI+XG4gICAgICAgIDxuYXZcbiAgICAgICAgICBAYW5pbWF0aW9uZW5kPSR7dGhpcy5fb25BbmltYXRpb25FbmR9XG4gICAgICAgICAgY2xhc3M9XCJzYmItbmF2aWdhdGlvbi1zZWN0aW9uXCJcbiAgICAgICAgICBhcmlhLWxhYmVsbGVkYnk9JHshdGhpcy5hY2Nlc3NpYmlsaXR5TGFiZWwgPyAndGl0bGUnIDogbm90aGluZ31cbiAgICAgICAgICBhcmlhLWxhYmVsPSR7dGhpcy5hY2Nlc3NpYmlsaXR5TGFiZWwgPyB0aGlzLmFjY2Vzc2liaWxpdHlMYWJlbCA6IG5vdGhpbmd9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLW5hdmlnYXRpb24tc2VjdGlvbl9fd3JhcHBlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25fX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25fX2hlYWRlclwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQmFjayBidXR0b24gLS0+XG4gICAgICAgICAgICAgICAgPHNiYi10cmFuc3BhcmVudC1idXR0b25cbiAgICAgICAgICAgICAgICAgIGlkPVwic2JiLW5hdmlnYXRpb24tc2VjdGlvbi1iYWNrLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi1uYXZpZ2F0aW9uLXNlY3Rpb25fX2JhY2tcIlxuICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0ke3RoaXMuYWNjZXNzaWJpbGl0eUJhY2tMYWJlbCB8fCBpMThuR29CYWNrW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfVxuICAgICAgICAgICAgICAgICAgbmVnYXRpdmVcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICAgIGljb24tbmFtZT1cImNoZXZyb24tc21hbGwtbGVmdC1zbWFsbFwiXG4gICAgICAgICAgICAgICAgICBzYmItbmF2aWdhdGlvbi1zZWN0aW9uLWNsb3NlXG4gICAgICAgICAgICAgICAgPjwvc2JiLXRyYW5zcGFyZW50LWJ1dHRvbj5cblxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2JiLW5hdmlnYXRpb24tc2VjdGlvbl9fdGl0bGVcIiBpZD1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICA8c2xvdCBuYW1lPVwidGl0bGVcIj4ke3RoaXMudGl0bGVDb250ZW50fTwvc2xvdD5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8c2xvdD48L3Nsb3Q+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9uYXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItbmF2aWdhdGlvbi1zZWN0aW9uJzogU2JiTmF2aWdhdGlvblNlY3Rpb25FbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0lDNkNhLHFDQUEyQjttQkFBUyx3QkFBd0Isd0JBQXdCOzs7Ozs7Ozs7Ozs7O2NBQXBGLG9DQUFvQyxZQUFnRDs7OytCQVE5RixXQUFXLEVBQ1gsU0FBUztJQUFFLFdBQVc7SUFBaUIsU0FBUztJQUFNLFdBQVc7SUFBb0IsQ0FBQyxDQUFBOzBCQVF0RixhQUFhLEVBQ2IsVUFBVSxDQUFBO3FDQU1WLFdBQVcsRUFDWCxTQUFTLEVBQUUsV0FBVyx1QkFBdUIsQ0FBQyxDQUFBO3lDQU05QyxXQUFXLEVBQ1gsU0FBUyxFQUFFLFdBQVcsNEJBQTRCLENBQUMsQ0FBQTtBQXRCcEQsZ0JBQUEsTUFBQSxNQUFBLDBCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsa0JBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBWSxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQVosZUFBWTs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLDRCQUFBLGdDQUFBO0FBUzVCLGdCQUFBLE1BQUEsTUFBQSxxQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLGFBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBTyxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQVAsVUFBTzs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLHVCQUFBLDJCQUFBO0FBT3ZCLGdCQUFBLE1BQUEsTUFBQSxnQ0FBQTtJQUFBLE1BQUE7SUFB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
|