@sbb-esta/lyne-elements-dev 4.8.1-dev.1773955183 → 4.8.1-dev.1774008620

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.
@@ -0,0 +1,489 @@
1
+ import { __esDecorate, __runInitializers } from "tslib";
2
+ import { css, html, isServer } from "lit";
3
+ import { property, state } from "lit/decorators.js";
4
+ import { SbbElement } from "./core/base-elements.js";
5
+ import { forceType, idReference } from "./core/decorators.js";
6
+ import { isLean, queueDomContentLoaded } from "./core/dom.js";
7
+ import { boxSizingStyles } from "./core/styles.js";
8
+ import { SbbFocusVisibleWithinController } from "./core/a11y.js";
9
+ //#region src/elements/header/header/header.scss?lit&inline
10
+ var header_default = css`:host {
11
+ --sbb-logo-height: 1rem;
12
+ --sbb-signet-height: 1rem;
13
+ --sbb-header-transition-duration: var(
14
+ --sbb-disable-animation-duration,
15
+ var(--sbb-animation-duration-6x)
16
+ );
17
+ }
18
+ @media (min-width: calc(64rem)) {
19
+ :host {
20
+ --sbb-logo-height: 1.25rem;
21
+ --sbb-signet-height: 1.25rem;
22
+ }
23
+ }
24
+ :host {
25
+ display: block;
26
+ height: var(--sbb-header-height);
27
+ }
28
+
29
+ :host([size=s]) ::slotted(:is(sbb-header-button, sbb-header-link)) {
30
+ --sbb-header-action-min-height: var(--sbb-size-element-xs);
31
+ --sbb-header-action-padding-inline: var(--sbb-spacing-fixed-4x);
32
+ }
33
+
34
+ :host([hide-on-scroll]) {
35
+ --sbb-header-position: absolute;
36
+ }
37
+
38
+ :host([hide-on-scroll]:is(:state(fixed),[state--fixed])) {
39
+ --sbb-header-position: fixed;
40
+ --sbb-header-animation-name: hide;
41
+ --sbb-header-transform: translate3d(0, -100%, 0);
42
+ --sbb-header-inset-inline-end: var(--sbb-scrollbar-width, 0);
43
+ }
44
+
45
+ :host([hide-on-scroll]:is(:state(fixed),[state--fixed]):is(:state(animated),[state--animated])) {
46
+ --sbb-header-transition-timing: cubic-bezier(0.4, 0, 1, 1);
47
+ }
48
+
49
+ :host([hide-on-scroll]:is(:state(fixed),[state--fixed]):is(:state(visible),[state--visible])) {
50
+ --sbb-header-animation-name: show;
51
+ --sbb-header-transform: translate3d(0, 0, 0);
52
+ --sbb-header-transition-timing: cubic-bezier(0, 0, 0.2, 1);
53
+ }
54
+
55
+ :host([hide-on-scroll]:is(:state(fixed),[state--fixed]):is(:state(has-visible-focus-within),[state--has-visible-focus-within])) {
56
+ --sbb-header-transition-duration: 0;
57
+ --sbb-header-transform: translate3d(0, 0, 0);
58
+ }
59
+
60
+ .sbb-header {
61
+ position: var(--sbb-header-position);
62
+ inset: 0 var(--sbb-header-inset-inline-end) auto 0;
63
+ background: var(--sbb-header-background);
64
+ z-index: var(--sbb-header-z-index, 10);
65
+ transform: var(--sbb-header-transform);
66
+ transition-property: box-shadow;
67
+ transition-duration: var(--sbb-header-transition-duration);
68
+ transition-timing-function: var(--sbb-header-transition-timing);
69
+ animation-name: var(--sbb-header-animation-name);
70
+ animation-duration: var(--sbb-header-transition-duration);
71
+ animation-timing-function: var(--sbb-header-transition-timing);
72
+ }
73
+ :host(:is(:is(:state(shadow),[state--shadow]), :is(:state(has-visible-focus-within),[state--has-visible-focus-within]):is(:state(fixed),[state--fixed]))) .sbb-header {
74
+ box-shadow: var(--sbb-header-box-shadow);
75
+ }
76
+ @media (forced-colors: active) {
77
+ .sbb-header {
78
+ border-block-end: var(--sbb-border-width-1x) solid CanvasText;
79
+ }
80
+ }
81
+
82
+ .sbb-header__wrapper {
83
+ display: flex;
84
+ align-items: center;
85
+ justify-content: flex-start;
86
+ height: var(--sbb-header-height);
87
+ }
88
+ :host(:not([expanded])) .sbb-header__wrapper {
89
+ padding-inline: var(--sbb-page-spacing-padding, var(--sbb-layout-base-offset-responsive));
90
+ margin-inline: auto;
91
+ width: 100%;
92
+ }
93
+ @media (min-width: calc(90rem)) {
94
+ :host(:not([expanded])) .sbb-header__wrapper {
95
+ max-width: var(--sbb-spacing-max-width, calc(var(--sbb-layout-base-page-max-width) + 2 * var(--sbb-layout-base-offset-responsive)));
96
+ }
97
+ }
98
+ :host([expanded]) .sbb-header__wrapper {
99
+ padding-inline: var(--sbb-page-spacing-padding, var(--sbb-spacing-responsive-xxs));
100
+ }
101
+
102
+ ::slotted(:is(sbb-header-button, sbb-header-link):first-child) {
103
+ margin-inline-start: var(--sbb-header-first-item-margin-inline-start);
104
+ }
105
+
106
+ ::slotted(*) {
107
+ flex: 0 0 auto;
108
+ }
109
+
110
+ ::slotted(.sbb-header-shrinkable) {
111
+ flex-shrink: 1;
112
+ min-width: 0;
113
+ }
114
+
115
+ ::slotted(.sbb-header-spacer) {
116
+ flex-grow: 1;
117
+ }
118
+
119
+ ::slotted(.sbb-header-logo) {
120
+ margin-inline-start: var(--sbb-spacing-responsive-s);
121
+ }
122
+
123
+ ::slotted(a.sbb-header-logo) {
124
+ display: block;
125
+ padding-block: var(--sbb-spacing-fixed-3x);
126
+ position: relative;
127
+ outline: none !important;
128
+ }
129
+
130
+ ::slotted(a.sbb-header-logo)::before {
131
+ content: "";
132
+ display: block;
133
+ position: absolute;
134
+ inset: var(--sbb-spacing-fixed-3x) 0;
135
+ }
136
+
137
+ ::slotted(a.sbb-header-logo:focus-visible)::before {
138
+ outline-offset: var(--sbb-focus-outline-offset);
139
+ outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);
140
+ outline-offset: var(--sbb-spacing-fixed-3x);
141
+ border-radius: 1px;
142
+ }
143
+
144
+ @keyframes show {
145
+ from {
146
+ transform: translate3d(0, -100%, 0);
147
+ }
148
+ to {
149
+ transform: translate3d(0, 0, 0);
150
+ }
151
+ }
152
+ @keyframes hide {
153
+ from {
154
+ transform: translate3d(0, 0, 0);
155
+ }
156
+ to {
157
+ transform: translate3d(0, -100%, 0);
158
+ }
159
+ }`;
160
+ //#endregion
161
+ //#region src/elements/header/header/header.component.ts
162
+ var IS_MENU_OPENED_QUERY = "[aria-controls][aria-expanded='true']";
163
+ /**
164
+ * It displays a header section for the page.
165
+ *
166
+ * @slot - Use the unnamed slot to add actions, content and logo to the header.
167
+ * @cssprop [--sbb-header-z-index=10] - Can be used to modify the z-index of the header.
168
+ * @cssprop [--sbb-header-height=zero-small:var(--sbb-spacing-fixed-14x);large-ultra:var(--sbb-spacing-fixed-24x)] - Can be used to modify height of the header.
169
+ */
170
+ var SbbHeaderElement = (() => {
171
+ let _classSuper = SbbElement;
172
+ let _expanded_decorators;
173
+ let _expanded_initializers = [];
174
+ let _expanded_extraInitializers = [];
175
+ let _scrollOrigin_decorators;
176
+ let _scrollOrigin_initializers = [];
177
+ let _scrollOrigin_extraInitializers = [];
178
+ let _hideOnScroll_decorators;
179
+ let _hideOnScroll_initializers = [];
180
+ let _hideOnScroll_extraInitializers = [];
181
+ let _size_decorators;
182
+ let _size_initializers = [];
183
+ let _size_extraInitializers = [];
184
+ let __headerOnTop_decorators;
185
+ let __headerOnTop_initializers = [];
186
+ let __headerOnTop_extraInitializers = [];
187
+ return class SbbHeaderElement extends _classSuper {
188
+ static {
189
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
190
+ _expanded_decorators = [forceType(), property({
191
+ reflect: true,
192
+ type: Boolean
193
+ })];
194
+ _scrollOrigin_decorators = [idReference(), property({ attribute: "scroll-origin" })];
195
+ _hideOnScroll_decorators = [forceType(), property({
196
+ attribute: "hide-on-scroll",
197
+ reflect: true,
198
+ type: Boolean
199
+ })];
200
+ _size_decorators = [property({ reflect: true })];
201
+ __headerOnTop_decorators = [state()];
202
+ __esDecorate(this, null, _expanded_decorators, {
203
+ kind: "accessor",
204
+ name: "expanded",
205
+ static: false,
206
+ private: false,
207
+ access: {
208
+ has: (obj) => "expanded" in obj,
209
+ get: (obj) => obj.expanded,
210
+ set: (obj, value) => {
211
+ obj.expanded = value;
212
+ }
213
+ },
214
+ metadata: _metadata
215
+ }, _expanded_initializers, _expanded_extraInitializers);
216
+ __esDecorate(this, null, _scrollOrigin_decorators, {
217
+ kind: "accessor",
218
+ name: "scrollOrigin",
219
+ static: false,
220
+ private: false,
221
+ access: {
222
+ has: (obj) => "scrollOrigin" in obj,
223
+ get: (obj) => obj.scrollOrigin,
224
+ set: (obj, value) => {
225
+ obj.scrollOrigin = value;
226
+ }
227
+ },
228
+ metadata: _metadata
229
+ }, _scrollOrigin_initializers, _scrollOrigin_extraInitializers);
230
+ __esDecorate(this, null, _hideOnScroll_decorators, {
231
+ kind: "accessor",
232
+ name: "hideOnScroll",
233
+ static: false,
234
+ private: false,
235
+ access: {
236
+ has: (obj) => "hideOnScroll" in obj,
237
+ get: (obj) => obj.hideOnScroll,
238
+ set: (obj, value) => {
239
+ obj.hideOnScroll = value;
240
+ }
241
+ },
242
+ metadata: _metadata
243
+ }, _hideOnScroll_initializers, _hideOnScroll_extraInitializers);
244
+ __esDecorate(this, null, _size_decorators, {
245
+ kind: "accessor",
246
+ name: "size",
247
+ static: false,
248
+ private: false,
249
+ access: {
250
+ has: (obj) => "size" in obj,
251
+ get: (obj) => obj.size,
252
+ set: (obj, value) => {
253
+ obj.size = value;
254
+ }
255
+ },
256
+ metadata: _metadata
257
+ }, _size_initializers, _size_extraInitializers);
258
+ __esDecorate(this, null, __headerOnTop_decorators, {
259
+ kind: "accessor",
260
+ name: "_headerOnTop",
261
+ static: false,
262
+ private: false,
263
+ access: {
264
+ has: (obj) => "_headerOnTop" in obj,
265
+ get: (obj) => obj._headerOnTop,
266
+ set: (obj, value) => {
267
+ obj._headerOnTop = value;
268
+ }
269
+ },
270
+ metadata: _metadata
271
+ }, __headerOnTop_initializers, __headerOnTop_extraInitializers);
272
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, {
273
+ enumerable: true,
274
+ configurable: true,
275
+ writable: true,
276
+ value: _metadata
277
+ });
278
+ }
279
+ static {
280
+ this.elementName = "sbb-header";
281
+ }
282
+ static {
283
+ this.styles = [boxSizingStyles, header_default];
284
+ }
285
+ static {
286
+ this._headerScrollOrigins = /* @__PURE__ */ new Set();
287
+ }
288
+ static {
289
+ this._headerElements = /* @__PURE__ */ new Set();
290
+ }
291
+ static {
292
+ if (!isServer) queueDomContentLoaded(() => this._initializeScrollOriginObserver());
293
+ }
294
+ #expanded_accessor_storage;
295
+ /**
296
+ * Whether to allow the header content to stretch to full width.
297
+ * By default, the content has the appropriate page size.
298
+ */
299
+ get expanded() {
300
+ return this.#expanded_accessor_storage;
301
+ }
302
+ set expanded(value) {
303
+ this.#expanded_accessor_storage = value;
304
+ }
305
+ #scrollOrigin_accessor_storage;
306
+ /**
307
+ * The element's id or the element on which the scroll listener is attached.
308
+ *
309
+ * For attribute usage, provide an id reference.
310
+ */
311
+ get scrollOrigin() {
312
+ return this.#scrollOrigin_accessor_storage;
313
+ }
314
+ set scrollOrigin(value) {
315
+ this.#scrollOrigin_accessor_storage = value;
316
+ }
317
+ #hideOnScroll_accessor_storage;
318
+ /** Whether the header should hide and show on scroll. */
319
+ get hideOnScroll() {
320
+ return this.#hideOnScroll_accessor_storage;
321
+ }
322
+ set hideOnScroll(value) {
323
+ this.#hideOnScroll_accessor_storage = value;
324
+ }
325
+ #size_accessor_storage;
326
+ /**
327
+ * Size of the header, either m or s.
328
+ * @default 'm' / 's' (lean)
329
+ */
330
+ get size() {
331
+ return this.#size_accessor_storage;
332
+ }
333
+ set size(value) {
334
+ this.#size_accessor_storage = value;
335
+ }
336
+ #_headerOnTop_accessor_storage;
337
+ get _headerOnTop() {
338
+ return this.#_headerOnTop_accessor_storage;
339
+ }
340
+ set _headerOnTop(value) {
341
+ this.#_headerOnTop_accessor_storage = value;
342
+ }
343
+ constructor() {
344
+ super();
345
+ this.#expanded_accessor_storage = __runInitializers(this, _expanded_initializers, false);
346
+ this.#scrollOrigin_accessor_storage = (__runInitializers(this, _expanded_extraInitializers), __runInitializers(this, _scrollOrigin_initializers, null));
347
+ this.#hideOnScroll_accessor_storage = (__runInitializers(this, _scrollOrigin_extraInitializers), __runInitializers(this, _hideOnScroll_initializers, false));
348
+ this.#size_accessor_storage = (__runInitializers(this, _hideOnScroll_extraInitializers), __runInitializers(this, _size_initializers, isLean() ? "s" : "m"));
349
+ this.#_headerOnTop_accessor_storage = (__runInitializers(this, _size_extraInitializers), __runInitializers(this, __headerOnTop_initializers, true));
350
+ this._scrollElement = __runInitializers(this, __headerOnTop_extraInitializers);
351
+ this._lastScroll = 0;
352
+ this._scrollOriginFromObserver = null;
353
+ this.addController(new SbbFocusVisibleWithinController(this));
354
+ }
355
+ static _initializeScrollOriginObserver() {
356
+ new MutationObserver((mutations) => {
357
+ for (const mutation of mutations) if (mutation.type === "attributes") this._handleScrollOriginElement(mutation.target);
358
+ else if (mutation.type === "childList") for (const node of [...mutation.addedNodes, ...mutation.removedNodes].filter((n) => n.nodeType === n.ELEMENT_NODE)) {
359
+ this._handleScrollOriginElement(node);
360
+ this._findAndHandleScrollOrigins(node);
361
+ }
362
+ this._updateHeaderElements();
363
+ }).observe(document.documentElement, {
364
+ attributeFilter: ["sbb-header-scroll-origin"],
365
+ childList: true,
366
+ subtree: true
367
+ });
368
+ this._findAndHandleScrollOrigins(document.body);
369
+ this._updateHeaderElements();
370
+ }
371
+ static _findAndHandleScrollOrigins(root) {
372
+ root.querySelectorAll("[sbb-header-scroll-origin]").forEach((e) => this._handleScrollOriginElement(e));
373
+ }
374
+ static _handleScrollOriginElement(element) {
375
+ if (element.hasAttribute("sbb-header-scroll-origin")) this._headerScrollOrigins.add(element);
376
+ else this._headerScrollOrigins.delete(element);
377
+ }
378
+ static _updateHeaderElements() {
379
+ for (const header of this._headerElements) {
380
+ if (this._headerScrollOrigins.size === 0) header._scrollOriginFromObserver = null;
381
+ else if (this._headerScrollOrigins.size === 1) header._scrollOriginFromObserver = this._headerScrollOrigins.values().next().value ?? null;
382
+ else header._scrollOriginFromObserver = Array.from(this._headerScrollOrigins).sort((c1, c2) => c1.compareDocumentPosition(c2) & Node.DOCUMENT_POSITION_CONTAINS).at(-1) ?? null;
383
+ header._updateScrollListener();
384
+ }
385
+ }
386
+ /** If `hideOnScroll` is set, checks the element to hook the listener on, and possibly add it.*/
387
+ connectedCallback() {
388
+ super.connectedCallback();
389
+ SbbHeaderElement._headerElements.add(this);
390
+ if (this.hasUpdated) this._updateScrollListener();
391
+ }
392
+ /** Removes the scroll listener, if previously attached. */
393
+ disconnectedCallback() {
394
+ super.disconnectedCallback();
395
+ this._scrollElement = null;
396
+ this._scrollEventsController?.abort();
397
+ SbbHeaderElement._headerElements.delete(this);
398
+ }
399
+ requestUpdate(name, oldValue, options) {
400
+ super.requestUpdate(name, oldValue, options);
401
+ if (!isServer && (!name || name === "scrollOrigin") && this.hasUpdated) this._updateScrollListener();
402
+ }
403
+ firstUpdated(changedProperties) {
404
+ super.firstUpdated(changedProperties);
405
+ this._updateScrollListener();
406
+ }
407
+ _updateScrollListener() {
408
+ const scrollElement = this.scrollOrigin ?? this._scrollOriginFromObserver ?? document;
409
+ if (scrollElement === this._scrollElement) return;
410
+ this._scrollEventsController?.abort();
411
+ this._scrollElement = scrollElement;
412
+ if (!this._scrollElement) return;
413
+ this._scrollEventsController = new AbortController();
414
+ this._scrollFunction = this._getScrollFunction.bind(this);
415
+ this._scrollElement.addEventListener("scroll", this._scrollFunction, {
416
+ passive: true,
417
+ signal: this._scrollEventsController.signal
418
+ });
419
+ const currentScroll = this._getCurrentScrollProperty("scrollTop");
420
+ this._lastScroll = currentScroll <= 0 ? 0 : currentScroll;
421
+ }
422
+ /** Returns the correct function to attach on scroll. */
423
+ _getScrollFunction() {
424
+ return this.hideOnScroll ? this._scrollListener() : this._scrollShadowListener();
425
+ }
426
+ /** Returns the requested property of the scrollContext. */
427
+ _getCurrentScrollProperty(property) {
428
+ if (this._scrollElement instanceof Document) return this._scrollElement.documentElement[property] || this._scrollElement.body[property];
429
+ return this._scrollElement?.[property] || 0;
430
+ }
431
+ /**
432
+ * Sets the correct value for `scrollTop`, then:
433
+ * - apply the shadow if the element/document has been scrolled down;
434
+ * - hides the header, remove the shadow and possibly close any open menu on the header if it is not visible anymore;
435
+ * - shows the header and re-apply the shadow if the element/document has been scrolled up.
436
+ */
437
+ _scrollListener() {
438
+ const currentScroll = this._getCurrentScrollProperty("scrollTop");
439
+ if (this._getCurrentScrollProperty("scrollHeight") - window.innerHeight - currentScroll <= 0) return;
440
+ this.toggleState("shadow", currentScroll !== 0);
441
+ if (currentScroll > this.offsetHeight && currentScroll > 0 && this._lastScroll < currentScroll) this._closeOpenOverlays();
442
+ if (currentScroll > this.offsetHeight * 2) {
443
+ this._headerOnTop = false;
444
+ if (currentScroll > 0 && this._lastScroll < currentScroll) ["shadow", "visible"].forEach((name) => this.internals.states.delete(name));
445
+ else [
446
+ "fixed",
447
+ "shadow",
448
+ "animated",
449
+ "visible"
450
+ ].forEach((name) => this.internals.states.add(name));
451
+ } else {
452
+ if (currentScroll === 0) this._headerOnTop = true;
453
+ if (this._headerOnTop) [
454
+ "shadow",
455
+ "animated",
456
+ "fixed",
457
+ "visible"
458
+ ].forEach((name) => this.internals.states.delete(name));
459
+ }
460
+ this._lastScroll = currentScroll <= 0 ? 0 : currentScroll;
461
+ }
462
+ /** Apply the shadow if the element/document has been scrolled down. */
463
+ _scrollShadowListener() {
464
+ this.toggleState("shadow", this._getCurrentScrollProperty("scrollTop") !== 0);
465
+ }
466
+ _closeOpenOverlays() {
467
+ if (this.matches(":is(:state(has-visible-focus-within),[state--has-visible-focus-within])")) return;
468
+ const overlayTriggers = Array.from(this.querySelectorAll(IS_MENU_OPENED_QUERY));
469
+ for (const overlayTrigger of overlayTriggers) {
470
+ const overlayId = overlayTrigger.getAttribute("aria-controls");
471
+ const overlay = document.getElementById(overlayId);
472
+ if (typeof overlay?.close === "function") overlay.close();
473
+ }
474
+ }
475
+ render() {
476
+ return html`
477
+ <header class="sbb-header">
478
+ <div class="sbb-header__wrapper">
479
+ <slot></slot>
480
+ </div>
481
+ </header>
482
+ `;
483
+ }
484
+ };
485
+ })();
486
+ //#endregion
487
+ export { SbbHeaderElement as t };
488
+
489
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC1DeExUa0xfZy5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvaGVhZGVyL2hlYWRlci9oZWFkZXIuc2Nzcz9saXQmaW5saW5lIiwiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL2hlYWRlci9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJAdXNlICcuLi8uLi9jb3JlL3N0eWxlcycgYXMgc2JiO1xuXG46aG9zdCB7XG4gIC0tc2JiLWxvZ28taGVpZ2h0OiAje3NiYi5weC10by1yZW0tYnVpbGQoMTYpfTtcbiAgLS1zYmItc2lnbmV0LWhlaWdodDogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDE2KX07XG4gIC0tc2JiLWhlYWRlci10cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoXG4gICAgLS1zYmItZGlzYWJsZS1hbmltYXRpb24tZHVyYXRpb24sXG4gICAgdmFyKC0tc2JiLWFuaW1hdGlvbi1kdXJhdGlvbi02eClcbiAgKTtcblxuICBAaW5jbHVkZSBzYmIubXEoJGZyb206IGxhcmdlKSB7XG4gICAgLS1zYmItbG9nby1oZWlnaHQ6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgyMCl9O1xuICAgIC0tc2JiLXNpZ25ldC1oZWlnaHQ6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgyMCl9O1xuICB9XG5cbiAgZGlzcGxheTogYmxvY2s7XG5cbiAgLy8gU2V0dGluZyB0aGUgaGVpZ2h0IGhlcmUgcmVzZXJ2ZXMgdGhlIHNwYWNlIGZvciB0aGUgaGVhZGVyIHdoaWNoIHdpbGwgZWxzZSBiZSBsb3N0IHdpdGggZml4ZWQgcG9zaXRpb24uXG4gIGhlaWdodDogdmFyKC0tc2JiLWhlYWRlci1oZWlnaHQpO1xufVxuXG46aG9zdChbc2l6ZT0ncyddKSB7XG4gIDo6c2xvdHRlZCg6aXMoc2JiLWhlYWRlci1idXR0b24sIHNiYi1oZWFkZXItbGluaykpIHtcbiAgICAtLXNiYi1oZWFkZXItYWN0aW9uLW1pbi1oZWlnaHQ6IHZhcigtLXNiYi1zaXplLWVsZW1lbnQteHMpO1xuICAgIC0tc2JiLWhlYWRlci1hY3Rpb24tcGFkZGluZy1pbmxpbmU6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTR4KTtcbiAgfVxufVxuXG46aG9zdChbaGlkZS1vbi1zY3JvbGxdKSB7XG4gIC0tc2JiLWhlYWRlci1wb3NpdGlvbjogYWJzb2x1dGU7XG59XG5cbjpob3N0KFtoaWRlLW9uLXNjcm9sbF06c3RhdGUoZml4ZWQpKSB7XG4gIC0tc2JiLWhlYWRlci1wb3NpdGlvbjogZml4ZWQ7XG4gIC0tc2JiLWhlYWRlci1hbmltYXRpb24tbmFtZTogaGlkZTtcbiAgLS1zYmItaGVhZGVyLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTEwMCUsIDApO1xuICAtLXNiYi1oZWFkZXItaW5zZXQtaW5saW5lLWVuZDogdmFyKC0tc2JiLXNjcm9sbGJhci13aWR0aCwgMCk7XG59XG5cbjpob3N0KFtoaWRlLW9uLXNjcm9sbF06c3RhdGUoZml4ZWQpOnN0YXRlKGFuaW1hdGVkKSkge1xuICAvLyBIaWRlIHRyYW5zaXRpb25cbiAgLS1zYmItaGVhZGVyLXRyYW5zaXRpb24tdGltaW5nOiBjdWJpYy1iZXppZXIoMC40LCAwLCAxLCAxKTtcbn1cblxuOmhvc3QoW2hpZGUtb24tc2Nyb2xsXTpzdGF0ZShmaXhlZCk6c3RhdGUodmlzaWJsZSkpIHtcbiAgLS1zYmItaGVhZGVyLWFuaW1hdGlvbi1uYW1lOiBzaG93O1xuICAtLXNiYi1oZWFkZXItdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcblxuICAvLyBTaG93IHRyYW5zaXRpb25cbiAgLS1zYmItaGVhZGVyLXRyYW5zaXRpb24tdGltaW5nOiBjdWJpYy1iZXppZXIoMCwgMCwgMC4yLCAxKTtcbn1cblxuOmhvc3QoW2hpZGUtb24tc2Nyb2xsXTpzdGF0ZShmaXhlZCk6c3RhdGUoaGFzLXZpc2libGUtZm9jdXMtd2l0aGluKSkge1xuICAtLXNiYi1oZWFkZXItdHJhbnNpdGlvbi1kdXJhdGlvbjogMDtcbiAgLS1zYmItaGVhZGVyLXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG59XG5cbi5zYmItaGVhZGVyIHtcbiAgcG9zaXRpb246IHZhcigtLXNiYi1oZWFkZXItcG9zaXRpb24pO1xuICBpbnNldDogMCB2YXIoLS1zYmItaGVhZGVyLWluc2V0LWlubGluZS1lbmQpIGF1dG8gMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tc2JiLWhlYWRlci1iYWNrZ3JvdW5kKTtcbiAgei1pbmRleDogdmFyKC0tc2JiLWhlYWRlci16LWluZGV4LCAxMCk7XG4gIHRyYW5zZm9ybTogdmFyKC0tc2JiLWhlYWRlci10cmFuc2Zvcm0pO1xuICB0cmFuc2l0aW9uOiB7XG4gICAgcHJvcGVydHk6IGJveC1zaGFkb3c7XG4gICAgZHVyYXRpb246IHZhcigtLXNiYi1oZWFkZXItdHJhbnNpdGlvbi1kdXJhdGlvbik7XG4gICAgdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1zYmItaGVhZGVyLXRyYW5zaXRpb24tdGltaW5nKTtcbiAgfVxuICBhbmltYXRpb246IHtcbiAgICBuYW1lOiB2YXIoLS1zYmItaGVhZGVyLWFuaW1hdGlvbi1uYW1lKTtcbiAgICBkdXJhdGlvbjogdmFyKC0tc2JiLWhlYWRlci10cmFuc2l0aW9uLWR1cmF0aW9uKTtcbiAgICB0aW1pbmctZnVuY3Rpb246IHZhcigtLXNiYi1oZWFkZXItdHJhbnNpdGlvbi10aW1pbmcpO1xuICB9XG5cbiAgOmhvc3QoOmlzKDpzdGF0ZShzaGFkb3cpLCA6c3RhdGUoaGFzLXZpc2libGUtZm9jdXMtd2l0aGluKTpzdGF0ZShmaXhlZCkpKSAmIHtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zYmItaGVhZGVyLWJveC1zaGFkb3cpO1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIGJvcmRlci1ibG9jay1lbmQ6IHZhcigtLXNiYi1ib3JkZXItd2lkdGgtMXgpIHNvbGlkIENhbnZhc1RleHQ7XG4gIH1cbn1cblxuLnNiYi1oZWFkZXJfX3dyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGhlaWdodDogdmFyKC0tc2JiLWhlYWRlci1oZWlnaHQpO1xuXG4gIDpob3N0KDpub3QoW2V4cGFuZGVkXSkpICYge1xuICAgIEBpbmNsdWRlIHNiYi5wYWdlLXNwYWNpbmc7XG4gIH1cblxuICA6aG9zdChbZXhwYW5kZWRdKSAmIHtcbiAgICBAaW5jbHVkZSBzYmIucGFnZS1zcGFjaW5nLWV4cGFuZGVkO1xuICB9XG59XG5cbi8vIEZpeCBsZWZ0IG9mZnNldCBpZiBmaXJzdCBlbGVtZW50IG9mIHRoZSBoZWFkZXIgaXMgYSBzYmItaGVhZGVyLWJ1dHRvbi9zYmItaGVhZGVyLWxpbmsuXG4vLyBUaGUgdmFsdWUgb2YgdGhlIG9mZnNldCBpcyBjYWxjdWxhdGVkIGluc2lkZSBzYmItaGVhZGVyLWJ1dHRvbi9zYmItaGVhZGVyLWxpbmsgc3R5bGVzLlxuOjpzbG90dGVkKDppcyhzYmItaGVhZGVyLWJ1dHRvbiwgc2JiLWhlYWRlci1saW5rKTpmaXJzdC1jaGlsZCkge1xuICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1zYmItaGVhZGVyLWZpcnN0LWl0ZW0tbWFyZ2luLWlubGluZS1zdGFydCk7XG59XG5cbjo6c2xvdHRlZCgqKSB7XG4gIGZsZXg6IDAgMCBhdXRvO1xufVxuXG46OnNsb3R0ZWQoLnNiYi1oZWFkZXItc2hyaW5rYWJsZSkge1xuICBmbGV4LXNocmluazogMTtcbiAgbWluLXdpZHRoOiAwO1xufVxuXG46OnNsb3R0ZWQoLnNiYi1oZWFkZXItc3BhY2VyKSB7XG4gIGZsZXgtZ3JvdzogMTtcbn1cblxuOjpzbG90dGVkKC5zYmItaGVhZGVyLWxvZ28pIHtcbiAgbWFyZ2luLWlubGluZS1zdGFydDogdmFyKC0tc2JiLXNwYWNpbmctcmVzcG9uc2l2ZS1zKTtcbn1cblxuLy8gQXBwbHkgcGFkZGluZyBhbmQgb3V0bGluZSB0byBwb3NzaWJsZSBzbG90dGVkIGxpbmsgaW4gbG9nbyBzbG90XG46OnNsb3R0ZWQoYS5zYmItaGVhZGVyLWxvZ28pIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHBhZGRpbmctYmxvY2s6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC8vIFVzZSAhaW1wb3J0YW50IGhlcmUgdG8gbm90IGludGVyZmVyZSB3aXRoIEZpcmVmb3ggZm9jdXMgcmluZyBkZWZpbml0aW9uXG4gIC8vIHdoaWNoIGFwcGVhcnMgaW4gbm9ybWFsaXplIENTUyBvZiBzZXZlcmFsIGZyYW1ld29ya3MuXG4gIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLy8gVG8gc2hvdyB0aGUgY29ycmVjdCBvdXRsaW5lLCB3ZSBuZWVkIHRvIHNwYW4gYSBoaWRkZW4gZWxlbWVudCBmaWxsaW5nIHRoZSBsaW5rIGJ1dCB3aXRob3V0IHRoZSBvdXRsaW5lLW9mZnNldC5cbjo6c2xvdHRlZChhLnNiYi1oZWFkZXItbG9nbyk6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6ICcnO1xuICBkaXNwbGF5OiBibG9jaztcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtM3gpIDA7XG59XG5cbjo6c2xvdHRlZChhLnNiYi1oZWFkZXItbG9nbzpmb2N1cy12aXNpYmxlKTo6YmVmb3JlIHtcbiAgQGluY2x1ZGUgc2JiLmZvY3VzLW91dGxpbmU7XG5cbiAgb3V0bGluZS1vZmZzZXQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcblxuICAvLyBBcyBpZiB0aGUgb3V0bGluZSBoYXMgYW4gb2Zmc2V0LCB0aGUgYm9yZGVyIHJhZGl1cyBpbmNyZWFzZXMsIHdlIHNldCBpdCB0byB0aGUgc21hbGxlc3QgcG9zc2libGUgYm9yZGVyLXJhZGl1cy5cbiAgYm9yZGVyLXJhZGl1czogMXB4O1xufVxuXG5Aa2V5ZnJhbWVzIHNob3cge1xuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0xMDAlLCAwKTtcbiAgfVxuXG4gIHRvIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgaGlkZSB7XG4gIGZyb20ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cblxuICB0byB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMTAwJSwgMCk7XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIHR5cGUgQ1NTUmVzdWx0R3JvdXAsXG4gIGh0bWwsXG4gIGlzU2VydmVyLFxuICB0eXBlIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIHR5cGUgUHJvcGVydHlWYWx1ZXMsXG4gIHR5cGUgVGVtcGxhdGVSZXN1bHQsXG59IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSwgc3RhdGUgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5cbmltcG9ydCB7IFNiYkZvY3VzVmlzaWJsZVdpdGhpbkNvbnRyb2xsZXIgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkudHMnO1xuaW1wb3J0IHsgU2JiRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy50cyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUsIGlkUmVmZXJlbmNlIH0gZnJvbSAnLi4vLi4vY29yZS9kZWNvcmF0b3JzLnRzJztcbmltcG9ydCB7IGlzTGVhbiwgcXVldWVEb21Db250ZW50TG9hZGVkIH0gZnJvbSAnLi4vLi4vY29yZS9kb20udHMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnLi4vLi4vY29yZS9zdHlsZXMudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9oZWFkZXIuc2Nzcz9saXQmaW5saW5lJztcblxuY29uc3QgSVNfTUVOVV9PUEVORURfUVVFUlkgPSBcIlthcmlhLWNvbnRyb2xzXVthcmlhLWV4cGFuZGVkPSd0cnVlJ11cIjtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhIGhlYWRlciBzZWN0aW9uIGZvciB0aGUgcGFnZS5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBhY3Rpb25zLCBjb250ZW50IGFuZCBsb2dvIHRvIHRoZSBoZWFkZXIuXG4gKiBAY3NzcHJvcCBbLS1zYmItaGVhZGVyLXotaW5kZXg9MTBdIC0gQ2FuIGJlIHVzZWQgdG8gbW9kaWZ5IHRoZSB6LWluZGV4IG9mIHRoZSBoZWFkZXIuXG4gKiBAY3NzcHJvcCBbLS1zYmItaGVhZGVyLWhlaWdodD16ZXJvLXNtYWxsOnZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTE0eCk7bGFyZ2UtdWx0cmE6dmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMjR4KV0gLSBDYW4gYmUgdXNlZCB0byBtb2RpZnkgaGVpZ2h0IG9mIHRoZSBoZWFkZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJIZWFkZXJFbGVtZW50IGV4dGVuZHMgU2JiRWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgZWxlbWVudE5hbWU6IHN0cmluZyA9ICdzYmItaGVhZGVyJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgc3R5bGVdO1xuXG4gIHByaXZhdGUgc3RhdGljIF9oZWFkZXJTY3JvbGxPcmlnaW5zID0gbmV3IFNldDxIVE1MRWxlbWVudD4oKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hlYWRlckVsZW1lbnRzID0gbmV3IFNldDxTYmJIZWFkZXJFbGVtZW50PigpO1xuXG4gIHN0YXRpYyB7XG4gICAgaWYgKCFpc1NlcnZlcikge1xuICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBibG9jayBleGVjdXRpb24gZm9yIGluaXRpYWxpemF0aW9uLFxuICAgICAgLy8gc28gd2UgZGVmZXIgaXQgdW50aWwgdGhlIERPTSBjb250ZW50IGlzIGxvYWRlZC5cbiAgICAgIHF1ZXVlRG9tQ29udGVudExvYWRlZCgoKSA9PiB0aGlzLl9pbml0aWFsaXplU2Nyb2xsT3JpZ2luT2JzZXJ2ZXIoKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gYWxsb3cgdGhlIGhlYWRlciBjb250ZW50IHRvIHN0cmV0Y2ggdG8gZnVsbCB3aWR0aC5cbiAgICogQnkgZGVmYXVsdCwgdGhlIGNvbnRlbnQgaGFzIHRoZSBhcHByb3ByaWF0ZSBwYWdlIHNpemUuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSwgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIGVsZW1lbnQncyBpZCBvciB0aGUgZWxlbWVudCBvbiB3aGljaCB0aGUgc2Nyb2xsIGxpc3RlbmVyIGlzIGF0dGFjaGVkLlxuICAgKlxuICAgKiBGb3IgYXR0cmlidXRlIHVzYWdlLCBwcm92aWRlIGFuIGlkIHJlZmVyZW5jZS5cbiAgICovXG4gIEBpZFJlZmVyZW5jZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3Njcm9sbC1vcmlnaW4nIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBzY3JvbGxPcmlnaW46IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGhlYWRlciBzaG91bGQgaGlkZSBhbmQgc2hvdyBvbiBzY3JvbGwuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdoaWRlLW9uLXNjcm9sbCcsIHJlZmxlY3Q6IHRydWUsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGhpZGVPblNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBTaXplIG9mIHRoZSBoZWFkZXIsIGVpdGhlciBtIG9yIHMuXG4gICAqIEBkZWZhdWx0ICdtJyAvICdzJyAobGVhbilcbiAgICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGFjY2Vzc29yIHNpemU6ICdtJyB8ICdzJyA9IGlzTGVhbigpID8gJ3MnIDogJ20nO1xuXG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX2hlYWRlck9uVG9wID0gdHJ1ZTtcblxuICBwcml2YXRlIF9zY3JvbGxFbGVtZW50OiBIVE1MRWxlbWVudCB8IERvY3VtZW50IHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfc2Nyb2xsRXZlbnRzQ29udHJvbGxlciE6IEFib3J0Q29udHJvbGxlcjtcbiAgcHJpdmF0ZSBfc2Nyb2xsRnVuY3Rpb246ICgoKSA9PiB2b2lkKSB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBfbGFzdFNjcm9sbCA9IDA7XG4gIHByaXZhdGUgX3Njcm9sbE9yaWdpbkZyb21PYnNlcnZlcjogSFRNTEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZENvbnRyb2xsZXIobmV3IFNiYkZvY3VzVmlzaWJsZVdpdGhpbkNvbnRyb2xsZXIodGhpcykpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX2luaXRpYWxpemVTY3JvbGxPcmlnaW5PYnNlcnZlcigpOiB2b2lkIHtcbiAgICAvLyBXZSBhcmUgdXNpbmcgTXV0YXRpb25PYnNlcnZlciBkaXJlY3RseSBoZXJlLCBhcyBpdCB3aWxsIG9ubHkgYmUgY2FsbGVkIG9uIGNsaWVudCBzaWRlLFxuICAgIC8vIGFuZCB3ZSBkbyBub3QgbmVlZCB0byBkaXNjb25uZWN0IGl0LCBhcyB3ZSB3YW50IGl0IHRvIHdvcmsgZHVyaW5nIHRoZSBmdWxsIGxpZmV0aW1lXG4gICAgLy8gb2YgdGhlIHBhZ2UuXG4gICAgbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xuICAgICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcbiAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJykge1xuICAgICAgICAgIHRoaXMuX2hhbmRsZVNjcm9sbE9yaWdpbkVsZW1lbnQobXV0YXRpb24udGFyZ2V0IGFzIEhUTUxFbGVtZW50KTtcbiAgICAgICAgfSBlbHNlIGlmIChtdXRhdGlvbi50eXBlID09PSAnY2hpbGRMaXN0Jykge1xuICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBbLi4ubXV0YXRpb24uYWRkZWROb2RlcywgLi4ubXV0YXRpb24ucmVtb3ZlZE5vZGVzXS5maWx0ZXIoXG4gICAgICAgICAgICAobik6IG4gaXMgSFRNTEVsZW1lbnQgPT4gbi5ub2RlVHlwZSA9PT0gbi5FTEVNRU5UX05PREUsXG4gICAgICAgICAgKSkge1xuICAgICAgICAgICAgdGhpcy5faGFuZGxlU2Nyb2xsT3JpZ2luRWxlbWVudChub2RlKTtcbiAgICAgICAgICAgIHRoaXMuX2ZpbmRBbmRIYW5kbGVTY3JvbGxPcmlnaW5zKG5vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5fdXBkYXRlSGVhZGVyRWxlbWVudHMoKTtcbiAgICB9KS5vYnNlcnZlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbJ3NiYi1oZWFkZXItc2Nyb2xsLW9yaWdpbiddLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLl9maW5kQW5kSGFuZGxlU2Nyb2xsT3JpZ2lucyhkb2N1bWVudC5ib2R5KTtcbiAgICB0aGlzLl91cGRhdGVIZWFkZXJFbGVtZW50cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgX2ZpbmRBbmRIYW5kbGVTY3JvbGxPcmlnaW5zKHJvb3Q6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgcm9vdFxuICAgICAgLnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTEVsZW1lbnQ+KCdbc2JiLWhlYWRlci1zY3JvbGwtb3JpZ2luXScpXG4gICAgICAuZm9yRWFjaCgoZSkgPT4gdGhpcy5faGFuZGxlU2Nyb2xsT3JpZ2luRWxlbWVudChlKSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBfaGFuZGxlU2Nyb2xsT3JpZ2luRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGlmIChlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnc2JiLWhlYWRlci1zY3JvbGwtb3JpZ2luJykpIHtcbiAgICAgIHRoaXMuX2hlYWRlclNjcm9sbE9yaWdpbnMuYWRkKGVsZW1lbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9oZWFkZXJTY3JvbGxPcmlnaW5zLmRlbGV0ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBfdXBkYXRlSGVhZGVyRWxlbWVudHMoKTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgdGhpcy5faGVhZGVyRWxlbWVudHMpIHtcbiAgICAgIGlmICh0aGlzLl9oZWFkZXJTY3JvbGxPcmlnaW5zLnNpemUgPT09IDApIHtcbiAgICAgICAgaGVhZGVyLl9zY3JvbGxPcmlnaW5Gcm9tT2JzZXJ2ZXIgPSBudWxsO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oZWFkZXJTY3JvbGxPcmlnaW5zLnNpemUgPT09IDEpIHtcbiAgICAgICAgaGVhZGVyLl9zY3JvbGxPcmlnaW5Gcm9tT2JzZXJ2ZXIgPSB0aGlzLl9oZWFkZXJTY3JvbGxPcmlnaW5zLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBudWxsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyLl9zY3JvbGxPcmlnaW5Gcm9tT2JzZXJ2ZXIgPVxuICAgICAgICAgIEFycmF5LmZyb20odGhpcy5faGVhZGVyU2Nyb2xsT3JpZ2lucylcbiAgICAgICAgICAgIC5zb3J0KChjMSwgYzIpID0+IGMxLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGMyKSAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fQ09OVEFJTlMpXG4gICAgICAgICAgICAuYXQoLTEpID8/IG51bGw7XG4gICAgICB9XG4gICAgICBoZWFkZXIuX3VwZGF0ZVNjcm9sbExpc3RlbmVyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIElmIGBoaWRlT25TY3JvbGxgIGlzIHNldCwgY2hlY2tzIHRoZSBlbGVtZW50IHRvIGhvb2sgdGhlIGxpc3RlbmVyIG9uLCBhbmQgcG9zc2libHkgYWRkIGl0LiovXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIFNiYkhlYWRlckVsZW1lbnQuX2hlYWRlckVsZW1lbnRzLmFkZCh0aGlzKTtcbiAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl91cGRhdGVTY3JvbGxMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZW1vdmVzIHRoZSBzY3JvbGwgbGlzdGVuZXIsIGlmIHByZXZpb3VzbHkgYXR0YWNoZWQuICovXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuX3Njcm9sbEVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuX3Njcm9sbEV2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgU2JiSGVhZGVyRWxlbWVudC5faGVhZGVyRWxlbWVudHMuZGVsZXRlKHRoaXMpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIHJlcXVlc3RVcGRhdGUoXG4gICAgbmFtZT86IFByb3BlcnR5S2V5LFxuICAgIG9sZFZhbHVlPzogdW5rbm93bixcbiAgICBvcHRpb25zPzogUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgKTogdm9pZCB7XG4gICAgc3VwZXIucmVxdWVzdFVwZGF0ZShuYW1lLCBvbGRWYWx1ZSwgb3B0aW9ucyk7XG5cbiAgICBpZiAoIWlzU2VydmVyICYmICghbmFtZSB8fCBuYW1lID09PSAnc2Nyb2xsT3JpZ2luJykgJiYgdGhpcy5oYXNVcGRhdGVkKSB7XG4gICAgICB0aGlzLl91cGRhdGVTY3JvbGxMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICB0aGlzLl91cGRhdGVTY3JvbGxMaXN0ZW5lcigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlU2Nyb2xsTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuc2Nyb2xsT3JpZ2luID8/IHRoaXMuX3Njcm9sbE9yaWdpbkZyb21PYnNlcnZlciA/PyBkb2N1bWVudDtcbiAgICBpZiAoc2Nyb2xsRWxlbWVudCA9PT0gdGhpcy5fc2Nyb2xsRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3Njcm9sbEV2ZW50c0NvbnRyb2xsZXI/LmFib3J0KCk7XG4gICAgdGhpcy5fc2Nyb2xsRWxlbWVudCA9IHNjcm9sbEVsZW1lbnQ7XG4gICAgaWYgKCF0aGlzLl9zY3JvbGxFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3Njcm9sbEV2ZW50c0NvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgdGhpcy5fc2Nyb2xsRnVuY3Rpb24gPSB0aGlzLl9nZXRTY3JvbGxGdW5jdGlvbi5iaW5kKHRoaXMpO1xuICAgIHRoaXMuX3Njcm9sbEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5fc2Nyb2xsRnVuY3Rpb24sIHtcbiAgICAgIHBhc3NpdmU6IHRydWUsXG4gICAgICBzaWduYWw6IHRoaXMuX3Njcm9sbEV2ZW50c0NvbnRyb2xsZXIuc2lnbmFsLFxuICAgIH0pO1xuXG4gICAgY29uc3QgY3VycmVudFNjcm9sbCA9IHRoaXMuX2dldEN1cnJlbnRTY3JvbGxQcm9wZXJ0eSgnc2Nyb2xsVG9wJyk7XG4gICAgLy8gYGN1cnJlbnRTY3JvbGxgIGNhbiBiZSBuZWdhdGl2ZSwgZS5nLiBvbiBtb2JpbGU7IHRoaXMgaXMgbm90IGFsbG93ZWQuXG4gICAgdGhpcy5fbGFzdFNjcm9sbCA9IGN1cnJlbnRTY3JvbGwgPD0gMCA/IDAgOiBjdXJyZW50U2Nyb2xsO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGNvcnJlY3QgZnVuY3Rpb24gdG8gYXR0YWNoIG9uIHNjcm9sbC4gKi9cbiAgcHJpdmF0ZSBfZ2V0U2Nyb2xsRnVuY3Rpb24oKTogdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuaGlkZU9uU2Nyb2xsID8gdGhpcy5fc2Nyb2xsTGlzdGVuZXIoKSA6IHRoaXMuX3Njcm9sbFNoYWRvd0xpc3RlbmVyKCk7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgcmVxdWVzdGVkIHByb3BlcnR5IG9mIHRoZSBzY3JvbGxDb250ZXh0LiAqL1xuICBwcml2YXRlIF9nZXRDdXJyZW50U2Nyb2xsUHJvcGVydHkocHJvcGVydHk6ICdzY3JvbGxUb3AnIHwgJ3Njcm9sbEhlaWdodCcpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLl9zY3JvbGxFbGVtZW50IGluc3RhbmNlb2YgRG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50LmRvY3VtZW50RWxlbWVudFtwcm9wZXJ0eV0gfHwgdGhpcy5fc2Nyb2xsRWxlbWVudC5ib2R5W3Byb3BlcnR5XTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQ/Lltwcm9wZXJ0eV0gfHwgMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb3JyZWN0IHZhbHVlIGZvciBgc2Nyb2xsVG9wYCwgdGhlbjpcbiAgICogLSBhcHBseSB0aGUgc2hhZG93IGlmIHRoZSBlbGVtZW50L2RvY3VtZW50IGhhcyBiZWVuIHNjcm9sbGVkIGRvd247XG4gICAqIC0gaGlkZXMgdGhlIGhlYWRlciwgcmVtb3ZlIHRoZSBzaGFkb3cgYW5kIHBvc3NpYmx5IGNsb3NlIGFueSBvcGVuIG1lbnUgb24gdGhlIGhlYWRlciBpZiBpdCBpcyBub3QgdmlzaWJsZSBhbnltb3JlO1xuICAgKiAtIHNob3dzIHRoZSBoZWFkZXIgYW5kIHJlLWFwcGx5IHRoZSBzaGFkb3cgaWYgdGhlIGVsZW1lbnQvZG9jdW1lbnQgaGFzIGJlZW4gc2Nyb2xsZWQgdXAuXG4gICAqL1xuICBwcml2YXRlIF9zY3JvbGxMaXN0ZW5lcigpOiB2b2lkIHtcbiAgICBjb25zdCBjdXJyZW50U2Nyb2xsID0gdGhpcy5fZ2V0Q3VycmVudFNjcm9sbFByb3BlcnR5KCdzY3JvbGxUb3AnKTtcblxuICAgIC8vIFdoZXRoZXIgdGhlIHNjcm9sbCB2aWV3IGlzIGJvdW5jaW5nIHBhc3QgdGhlIGVkZ2Ugb2YgY29udGVudCBhbmQgYmFjayBhZ2Fpbi5cbiAgICBpZiAodGhpcy5fZ2V0Q3VycmVudFNjcm9sbFByb3BlcnR5KCdzY3JvbGxIZWlnaHQnKSAtIHdpbmRvdy5pbm5lckhlaWdodCAtIGN1cnJlbnRTY3JvbGwgPD0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMudG9nZ2xlU3RhdGUoJ3NoYWRvdycsIGN1cnJlbnRTY3JvbGwgIT09IDApO1xuXG4gICAgLy8gQ2xvc2Ugb3BlbiBvdmVybGF5cyB3aGVuIHNjcm9sbGluZyBkb3duIGlmIHRoZSBoZWFkZXIgaXMgc2Nyb2xsZWQgb3V0IG9mIHNpZ2h0LlxuICAgIGlmIChcbiAgICAgIGN1cnJlbnRTY3JvbGwgPiB0aGlzLm9mZnNldEhlaWdodCAmJlxuICAgICAgY3VycmVudFNjcm9sbCA+IDAgJiZcbiAgICAgIHRoaXMuX2xhc3RTY3JvbGwgPCBjdXJyZW50U2Nyb2xsXG4gICAgKSB7XG4gICAgICB0aGlzLl9jbG9zZU9wZW5PdmVybGF5cygpO1xuICAgIH1cbiAgICAvLyBDaGVjayBpZiB0aGUgaGVhZGVyIGlzIHNjcm9sbGVkIG91dCBvZiBzaWdodCwgc2Nyb2xsIHBvc2l0aW9uID4gaGVhZGVyIGhlaWdodCAqIDIuXG4gICAgaWYgKGN1cnJlbnRTY3JvbGwgPiB0aGlzLm9mZnNldEhlaWdodCAqIDIpIHtcbiAgICAgIHRoaXMuX2hlYWRlck9uVG9wID0gZmFsc2U7XG4gICAgICBpZiAoY3VycmVudFNjcm9sbCA+IDAgJiYgdGhpcy5fbGFzdFNjcm9sbCA8IGN1cnJlbnRTY3JvbGwpIHtcbiAgICAgICAgLy8gU2Nyb2xsaW5nIGRvd25cbiAgICAgICAgWydzaGFkb3cnLCAndmlzaWJsZSddLmZvckVhY2goKG5hbWUpID0+IHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUobmFtZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gU2Nyb2xsaW5nIHVwXG4gICAgICAgIFsnZml4ZWQnLCAnc2hhZG93JywgJ2FuaW1hdGVkJywgJ3Zpc2libGUnXS5mb3JFYWNoKChuYW1lKSA9PlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5hZGQobmFtZSksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENoZWNrIGlmIGhlYWRlciBpbiBpdHMgb3JpZ2luYWwgcG9zaXRpb24sIHNjcm9sbCBwb3NpdGlvbiA8IGhlYWRlciBoZWlnaHQuXG4gICAgICAvLyBSZXNldCBoZWFkZXIgYmVoYXZpb3Igd2hlbiBzY3JvbGwgaGl0cyB0b3Agb2YgdGhlIHBhZ2UsIG9uIHNjcm9sbCBwb3NpdGlvbiA9IDAuXG4gICAgICBpZiAoY3VycmVudFNjcm9sbCA9PT0gMCkge1xuICAgICAgICB0aGlzLl9oZWFkZXJPblRvcCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5faGVhZGVyT25Ub3ApIHtcbiAgICAgICAgWydzaGFkb3cnLCAnYW5pbWF0ZWQnLCAnZml4ZWQnLCAndmlzaWJsZSddLmZvckVhY2goKG5hbWUpID0+XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZShuYW1lKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gYGN1cnJlbnRTY3JvbGxgIGNhbiBiZSBuZWdhdGl2ZSwgZS5nLiBvbiBtb2JpbGU7IHRoaXMgaXMgbm90IGFsbG93ZWQuXG4gICAgdGhpcy5fbGFzdFNjcm9sbCA9IGN1cnJlbnRTY3JvbGwgPD0gMCA/IDAgOiBjdXJyZW50U2Nyb2xsO1xuICB9XG5cbiAgLyoqIEFwcGx5IHRoZSBzaGFkb3cgaWYgdGhlIGVsZW1lbnQvZG9jdW1lbnQgaGFzIGJlZW4gc2Nyb2xsZWQgZG93bi4gKi9cbiAgcHJpdmF0ZSBfc2Nyb2xsU2hhZG93TGlzdGVuZXIoKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgnc2hhZG93JywgdGhpcy5fZ2V0Q3VycmVudFNjcm9sbFByb3BlcnR5KCdzY3JvbGxUb3AnKSAhPT0gMCk7XG4gIH1cblxuICBwcml2YXRlIF9jbG9zZU9wZW5PdmVybGF5cygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5tYXRjaGVzKCc6c3RhdGUoaGFzLXZpc2libGUtZm9jdXMtd2l0aGluKScpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG92ZXJsYXlUcmlnZ2VyczogSFRNTEVsZW1lbnRbXSA9IEFycmF5LmZyb20oXG4gICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoSVNfTUVOVV9PUEVORURfUVVFUlkpIGFzIE5vZGVMaXN0T2Y8SFRNTEVsZW1lbnQ+LFxuICAgICk7XG4gICAgZm9yIChjb25zdCBvdmVybGF5VHJpZ2dlciBvZiBvdmVybGF5VHJpZ2dlcnMpIHtcbiAgICAgIGNvbnN0IG92ZXJsYXlJZDogc3RyaW5nID0gb3ZlcmxheVRyaWdnZXIuZ2V0QXR0cmlidXRlKCdhcmlhLWNvbnRyb2xzJykhO1xuICAgICAgY29uc3Qgb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG92ZXJsYXlJZCkgYXMgSFRNTEVsZW1lbnQgJiB7IGNsb3NlOiAoKSA9PiB2b2lkIH07XG4gICAgICBpZiAodHlwZW9mIG92ZXJsYXk/LmNsb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG92ZXJsYXkuY2xvc2UoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxoZWFkZXIgY2xhc3M9XCJzYmItaGVhZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItaGVhZGVyX193cmFwcGVyXCI+XG4gICAgICAgICAgPHNsb3Q+PC9zbG90PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvaGVhZGVyPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1oZWFkZXInOiBTYmJIZWFkZXJFbGVtZW50O1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDa0JBLElBQU0sdUJBQXVCOzs7Ozs7OztJQVNoQiwwQkFBZ0I7bUJBQVM7Ozs7Ozs7Ozs7Ozs7Ozs7Y0FBekIseUJBQXlCLFlBQVU7OzsyQkFtQjdDLFdBQVcsRUFDWCxTQUFTO0lBQUUsU0FBUztJQUFNLE1BQU07SUFBUyxDQUFDLENBQUE7K0JBUTFDLGFBQWEsRUFDYixTQUFTLEVBQUUsV0FBVyxpQkFBaUIsQ0FBQyxDQUFBOytCQUl4QyxXQUFXLEVBQ1gsU0FBUztJQUFF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
@@ -2,7 +2,7 @@ import { t as SbbHeaderActionCommonElementMixin } from "./header-action-common-B
2
2
  import { SbbHeaderButtonElement } from "./header/header-button/header-button.component.js";
3
3
  import { t as SbbHeaderEnvironmentElement } from "./header-environment.component-JltjpGKu.js";
4
4
  import { SbbHeaderLinkElement } from "./header/header-link/header-link.component.js";
5
- import { t as SbbHeaderElement } from "./header.component-DEw_zC-n.js";
5
+ import { t as SbbHeaderElement } from "./header.component-CxLTkL_g.js";
6
6
  import "./header.pure.js";
7
7
  //#region src/elements/header.ts
8
8
  /** @entrypoint */
@@ -2,5 +2,5 @@ import { t as SbbHeaderActionCommonElementMixin } from "./header-action-common-B
2
2
  import { SbbHeaderButtonElement } from "./header/header-button/header-button.component.js";
3
3
  import { t as SbbHeaderEnvironmentElement } from "./header-environment.component-JltjpGKu.js";
4
4
  import { SbbHeaderLinkElement } from "./header/header-link/header-link.component.js";
5
- import { t as SbbHeaderElement } from "./header.component-DEw_zC-n.js";
5
+ import { t as SbbHeaderElement } from "./header.component-CxLTkL_g.js";
6
6
  export { SbbHeaderActionCommonElementMixin, SbbHeaderButtonElement, SbbHeaderElement, SbbHeaderEnvironmentElement, SbbHeaderLinkElement };
@@ -1,2 +1,2 @@
1
- import { t as e } from "../../header.component-BiIWWPA0.js";
1
+ import { t as e } from "../../header.component-BpevKe1F.js";
2
2
  export { e as SbbHeaderElement };
package/header/header.js CHANGED
@@ -1,4 +1,4 @@
1
- import { t as e } from "../header.component-BiIWWPA0.js";
1
+ import { t as e } from "../header.component-BpevKe1F.js";
2
2
  e.define(), console.warn("The entrypoint '@sbb-esta/elements/header/header.js' has been deprecated.\nUse either '@sbb-esta/elements/header.js' or '@sbb-esta/elements/header.pure.js' instead.");
3
3
  //#endregion
4
4
  export { e as SbbHeaderElement };