@sbb-esta/lyne-elements-dev 4.9.0-dev.1775022187 → 4.9.0-dev.1775028444
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 +9 -0
- package/core.css +22 -0
- package/custom-elements.json +616 -616
- package/development/step-label.component-D3wrRPQ7.js +265 -0
- package/development/step.component-ewujsOVD.js +212 -0
- package/development/stepper/step/step.component.js +1 -1
- package/development/stepper/step-label/step-label.component.d.ts.map +1 -1
- package/development/stepper/step-label/step-label.component.js +1 -1
- package/development/stepper/step-label.js +1 -1
- package/development/stepper/step.js +1 -1
- package/development/stepper/stepper/stepper.component.d.ts.map +1 -1
- package/development/stepper/stepper/stepper.component.js +1 -1
- package/development/stepper/stepper.js +1 -1
- package/development/stepper.component-BJC_4cep.js +497 -0
- package/development/stepper.js +3 -3
- package/development/stepper.pure.js +3 -3
- package/off-brand-theme.css +22 -0
- package/package.json +2 -2
- package/safety-theme.css +22 -0
- package/standard-theme.css +22 -0
- package/step-label.component-Cu_Hck4P.js +80 -0
- package/{step.component-CbfVfpi6.js → step.component-DY61vAFB.js} +1 -1
- package/stepper/step/step.component.js +1 -1
- package/stepper/step-label/step-label.component.js +1 -1
- package/stepper/step-label.js +1 -1
- package/stepper/step.js +1 -1
- package/stepper/stepper/stepper.component.js +1 -1
- package/stepper/stepper.js +1 -1
- package/{stepper.component-CrMknCZm.js → stepper.component-83cngpic.js} +6 -8
- package/stepper.js +3 -3
- package/stepper.pure.js +3 -3
- package/development/step-label.component-C_obpSzp.js +0 -298
- package/development/step.component-DsXAckYS.js +0 -220
- package/development/stepper.component-yAkgcauE.js +0 -508
- package/step-label.component-BYaPBTcl.js +0 -82
|
@@ -1,508 +0,0 @@
|
|
|
1
|
-
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { css, html } from "lit";
|
|
3
|
-
import { property } from "lit/decorators.js";
|
|
4
|
-
import { SbbElement } from "./core/base-elements.js";
|
|
5
|
-
import { forceType } from "./core/decorators.js";
|
|
6
|
-
import { isLean } from "./core/dom.js";
|
|
7
|
-
import { boxSizingStyles } from "./core/styles.js";
|
|
8
|
-
import { getNextElementIndex, isArrowKeyPressed } from "./core/a11y.js";
|
|
9
|
-
import { IntersectionController } from "@lit-labs/observers/intersection-controller.js";
|
|
10
|
-
import { SbbMediaMatcherController, SbbMediaQueryBreakpointLargeAndAbove, SbbMediaQueryBreakpointSmallAndAbove, SbbMediaQueryBreakpointUltraAndAbove, SbbMediaQueryBreakpointZeroAndAbove } from "./core/controllers/media-matchers-controller.js";
|
|
11
|
-
//#region src/elements/stepper/stepper/stepper.scss?lit&inline
|
|
12
|
-
var stepper_default = css`:host {
|
|
13
|
-
--sbb-stepper-orientation: row;
|
|
14
|
-
--sbb-stepper-border-width: var(--sbb-border-width-1x);
|
|
15
|
-
--sbb-stepper-marker-size: 0;
|
|
16
|
-
--sbb-stepper-marker-width: var(--sbb-border-width-3x);
|
|
17
|
-
--sbb-stepper-animation-duration: var(
|
|
18
|
-
--sbb-disable-animation-duration,
|
|
19
|
-
var(--sbb-animation-duration-6x)
|
|
20
|
-
);
|
|
21
|
-
--sbb-stepper-marker-color: var(--sbb-color-3);
|
|
22
|
-
display: block;
|
|
23
|
-
position: relative;
|
|
24
|
-
counter-reset: step-label;
|
|
25
|
-
}
|
|
26
|
-
@media (forced-colors: active) {
|
|
27
|
-
:host {
|
|
28
|
-
--sbb-stepper-marker-color: ButtonText;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
:host(:is(:state(disable-animation),[state--disable-animation])) {
|
|
33
|
-
--sbb-disable-animation-duration: 0s;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
:host([orientation=vertical]) {
|
|
37
|
-
--sbb-stepper-orientation: column;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.sbb-stepper {
|
|
41
|
-
width: 100%;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.sbb-stepper__labels {
|
|
45
|
-
display: flex;
|
|
46
|
-
flex-direction: var(--sbb-stepper-orientation);
|
|
47
|
-
position: relative;
|
|
48
|
-
justify-content: start;
|
|
49
|
-
margin-block-end: var(--sbb-spacing-responsive-m);
|
|
50
|
-
}
|
|
51
|
-
.sbb-stepper__labels::before {
|
|
52
|
-
content: "";
|
|
53
|
-
position: absolute;
|
|
54
|
-
inset-inline-start: calc(var(--sbb-stepper-border-width) * -1);
|
|
55
|
-
background-color: var(--sbb-stepper-marker-color);
|
|
56
|
-
}
|
|
57
|
-
:host([orientation=horizontal]) .sbb-stepper__labels {
|
|
58
|
-
gap: var(--sbb-spacing-responsive-m);
|
|
59
|
-
padding-block-end: var(--sbb-spacing-fixed-4x);
|
|
60
|
-
border-block-end: var(--sbb-stepper-border-width) solid var(--sbb-border-color-4-inverted);
|
|
61
|
-
}
|
|
62
|
-
:host([orientation=horizontal]) .sbb-stepper__labels::before {
|
|
63
|
-
inset-block-end: calc(var(--sbb-stepper-border-width) * -1);
|
|
64
|
-
height: var(--sbb-stepper-marker-width);
|
|
65
|
-
width: var(--sbb-stepper-marker-size);
|
|
66
|
-
transition: width var(--sbb-stepper-animation-duration) var(--sbb-animation-easing);
|
|
67
|
-
}
|
|
68
|
-
:host([orientation=vertical]) .sbb-stepper__labels {
|
|
69
|
-
padding-inline-start: var(--sbb-spacing-fixed-4x);
|
|
70
|
-
border-inline-start: var(--sbb-stepper-border-width) solid var(--sbb-border-color-4-inverted);
|
|
71
|
-
}
|
|
72
|
-
:host([orientation=vertical]) .sbb-stepper__labels::before {
|
|
73
|
-
inset-block-start: 0;
|
|
74
|
-
width: var(--sbb-stepper-marker-width);
|
|
75
|
-
height: var(--sbb-stepper-marker-size);
|
|
76
|
-
transition: height var(--sbb-stepper-animation-duration) var(--sbb-animation-easing);
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
.sbb-stepper__steps {
|
|
80
|
-
position: relative;
|
|
81
|
-
}
|
|
82
|
-
:host([orientation=horizontal]) .sbb-stepper__steps {
|
|
83
|
-
height: var(--sbb-stepper-content-height);
|
|
84
|
-
transition: height var(--sbb-stepper-animation-duration) var(--sbb-animation-easing);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
::slotted(sbb-step-label)::before {
|
|
88
|
-
content: counter(step-label);
|
|
89
|
-
counter-increment: step-label;
|
|
90
|
-
}`;
|
|
91
|
-
//#endregion
|
|
92
|
-
//#region src/elements/stepper/stepper/stepper.component.ts
|
|
93
|
-
var DEBOUNCE_TIME = 150;
|
|
94
|
-
var breakpointMap = {
|
|
95
|
-
zero: SbbMediaQueryBreakpointZeroAndAbove,
|
|
96
|
-
small: SbbMediaQueryBreakpointSmallAndAbove,
|
|
97
|
-
large: SbbMediaQueryBreakpointLargeAndAbove,
|
|
98
|
-
ultra: SbbMediaQueryBreakpointUltraAndAbove
|
|
99
|
-
};
|
|
100
|
-
var SbbStepChangeEvent = class extends Event {
|
|
101
|
-
constructor(selectedIndex, previousIndex, selectedStep, previousStep) {
|
|
102
|
-
super("stepchange", {
|
|
103
|
-
bubbles: true,
|
|
104
|
-
composed: true
|
|
105
|
-
});
|
|
106
|
-
this.selectedIndex = selectedIndex;
|
|
107
|
-
this.previousIndex = previousIndex;
|
|
108
|
-
this.selectedStep = selectedStep;
|
|
109
|
-
this.previousStep = previousStep;
|
|
110
|
-
}
|
|
111
|
-
};
|
|
112
|
-
/**
|
|
113
|
-
* Provides a structured, step-by-step workflow for user interactions.
|
|
114
|
-
* @slot - Provide a `sbb-expansion-panel-header` and a `sbb-expansion-panel-content` to the stepper.
|
|
115
|
-
* @slot step-label - Use this slot to provide an `sbb-step-label`.
|
|
116
|
-
* @slot step - Use this slot to provide an `sbb-step`.
|
|
117
|
-
* @event {SbbStepChangeEvent} stepchange - Emits whenever a step was changed.
|
|
118
|
-
*/
|
|
119
|
-
var SbbStepperElement = (() => {
|
|
120
|
-
let _classSuper = SbbElement;
|
|
121
|
-
let _instanceExtraInitializers = [];
|
|
122
|
-
let _linear_decorators;
|
|
123
|
-
let _linear_initializers = [];
|
|
124
|
-
let _linear_extraInitializers = [];
|
|
125
|
-
let _set_horizontalFrom_decorators;
|
|
126
|
-
let _orientation_decorators;
|
|
127
|
-
let _orientation_initializers = [];
|
|
128
|
-
let _orientation_extraInitializers = [];
|
|
129
|
-
let _size_decorators;
|
|
130
|
-
let _size_initializers = [];
|
|
131
|
-
let _size_extraInitializers = [];
|
|
132
|
-
let _set_selected_decorators;
|
|
133
|
-
let _set_selectedIndex_decorators;
|
|
134
|
-
return class SbbStepperElement extends _classSuper {
|
|
135
|
-
static {
|
|
136
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
137
|
-
_linear_decorators = [forceType(), property({ type: Boolean })];
|
|
138
|
-
_set_horizontalFrom_decorators = [property({
|
|
139
|
-
attribute: "horizontal-from",
|
|
140
|
-
reflect: true
|
|
141
|
-
})];
|
|
142
|
-
_orientation_decorators = [property({ reflect: true })];
|
|
143
|
-
_size_decorators = [property({ reflect: true })];
|
|
144
|
-
_set_selected_decorators = [property({ attribute: false })];
|
|
145
|
-
_set_selectedIndex_decorators = [property({
|
|
146
|
-
attribute: "selected-index",
|
|
147
|
-
type: Number
|
|
148
|
-
})];
|
|
149
|
-
__esDecorate(this, null, _linear_decorators, {
|
|
150
|
-
kind: "accessor",
|
|
151
|
-
name: "linear",
|
|
152
|
-
static: false,
|
|
153
|
-
private: false,
|
|
154
|
-
access: {
|
|
155
|
-
has: (obj) => "linear" in obj,
|
|
156
|
-
get: (obj) => obj.linear,
|
|
157
|
-
set: (obj, value) => {
|
|
158
|
-
obj.linear = value;
|
|
159
|
-
}
|
|
160
|
-
},
|
|
161
|
-
metadata: _metadata
|
|
162
|
-
}, _linear_initializers, _linear_extraInitializers);
|
|
163
|
-
__esDecorate(this, null, _set_horizontalFrom_decorators, {
|
|
164
|
-
kind: "setter",
|
|
165
|
-
name: "horizontalFrom",
|
|
166
|
-
static: false,
|
|
167
|
-
private: false,
|
|
168
|
-
access: {
|
|
169
|
-
has: (obj) => "horizontalFrom" in obj,
|
|
170
|
-
set: (obj, value) => {
|
|
171
|
-
obj.horizontalFrom = value;
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
metadata: _metadata
|
|
175
|
-
}, null, _instanceExtraInitializers);
|
|
176
|
-
__esDecorate(this, null, _orientation_decorators, {
|
|
177
|
-
kind: "accessor",
|
|
178
|
-
name: "orientation",
|
|
179
|
-
static: false,
|
|
180
|
-
private: false,
|
|
181
|
-
access: {
|
|
182
|
-
has: (obj) => "orientation" in obj,
|
|
183
|
-
get: (obj) => obj.orientation,
|
|
184
|
-
set: (obj, value) => {
|
|
185
|
-
obj.orientation = value;
|
|
186
|
-
}
|
|
187
|
-
},
|
|
188
|
-
metadata: _metadata
|
|
189
|
-
}, _orientation_initializers, _orientation_extraInitializers);
|
|
190
|
-
__esDecorate(this, null, _size_decorators, {
|
|
191
|
-
kind: "accessor",
|
|
192
|
-
name: "size",
|
|
193
|
-
static: false,
|
|
194
|
-
private: false,
|
|
195
|
-
access: {
|
|
196
|
-
has: (obj) => "size" in obj,
|
|
197
|
-
get: (obj) => obj.size,
|
|
198
|
-
set: (obj, value) => {
|
|
199
|
-
obj.size = value;
|
|
200
|
-
}
|
|
201
|
-
},
|
|
202
|
-
metadata: _metadata
|
|
203
|
-
}, _size_initializers, _size_extraInitializers);
|
|
204
|
-
__esDecorate(this, null, _set_selected_decorators, {
|
|
205
|
-
kind: "setter",
|
|
206
|
-
name: "selected",
|
|
207
|
-
static: false,
|
|
208
|
-
private: false,
|
|
209
|
-
access: {
|
|
210
|
-
has: (obj) => "selected" in obj,
|
|
211
|
-
set: (obj, value) => {
|
|
212
|
-
obj.selected = value;
|
|
213
|
-
}
|
|
214
|
-
},
|
|
215
|
-
metadata: _metadata
|
|
216
|
-
}, null, _instanceExtraInitializers);
|
|
217
|
-
__esDecorate(this, null, _set_selectedIndex_decorators, {
|
|
218
|
-
kind: "setter",
|
|
219
|
-
name: "selectedIndex",
|
|
220
|
-
static: false,
|
|
221
|
-
private: false,
|
|
222
|
-
access: {
|
|
223
|
-
has: (obj) => "selectedIndex" in obj,
|
|
224
|
-
set: (obj, value) => {
|
|
225
|
-
obj.selectedIndex = value;
|
|
226
|
-
}
|
|
227
|
-
},
|
|
228
|
-
metadata: _metadata
|
|
229
|
-
}, null, _instanceExtraInitializers);
|
|
230
|
-
if (_metadata) Object.defineProperty(this, Symbol.metadata, {
|
|
231
|
-
enumerable: true,
|
|
232
|
-
configurable: true,
|
|
233
|
-
writable: true,
|
|
234
|
-
value: _metadata
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
static {
|
|
238
|
-
this.elementName = "sbb-stepper";
|
|
239
|
-
}
|
|
240
|
-
static {
|
|
241
|
-
this.styles = [boxSizingStyles, stepper_default];
|
|
242
|
-
}
|
|
243
|
-
static {
|
|
244
|
-
this.events = { stepchange: "stepchange" };
|
|
245
|
-
}
|
|
246
|
-
#linear_accessor_storage;
|
|
247
|
-
/** If set to true, only the current and previous labels can be clicked and selected. */
|
|
248
|
-
get linear() {
|
|
249
|
-
return this.#linear_accessor_storage;
|
|
250
|
-
}
|
|
251
|
-
set linear(value) {
|
|
252
|
-
this.#linear_accessor_storage = value;
|
|
253
|
-
}
|
|
254
|
-
/** Overrides the behavior of `orientation` property. */
|
|
255
|
-
set horizontalFrom(value) {
|
|
256
|
-
this._horizontalFrom = value && breakpointMap[value] ? value : null;
|
|
257
|
-
if (this._horizontalFrom && this._loaded) this._checkOrientation();
|
|
258
|
-
}
|
|
259
|
-
get horizontalFrom() {
|
|
260
|
-
return this._horizontalFrom;
|
|
261
|
-
}
|
|
262
|
-
#orientation_accessor_storage;
|
|
263
|
-
/** Steps orientation, either horizontal or vertical. */
|
|
264
|
-
get orientation() {
|
|
265
|
-
return this.#orientation_accessor_storage;
|
|
266
|
-
}
|
|
267
|
-
set orientation(value) {
|
|
268
|
-
this.#orientation_accessor_storage = value;
|
|
269
|
-
}
|
|
270
|
-
#size_accessor_storage;
|
|
271
|
-
/**
|
|
272
|
-
* Size variant, either s or m.
|
|
273
|
-
* @default 'm' / 's' (lean)
|
|
274
|
-
*/
|
|
275
|
-
get size() {
|
|
276
|
-
return this.#size_accessor_storage;
|
|
277
|
-
}
|
|
278
|
-
set size(value) {
|
|
279
|
-
this.#size_accessor_storage = value;
|
|
280
|
-
}
|
|
281
|
-
/** The currently selected step. */
|
|
282
|
-
set selected(step) {
|
|
283
|
-
if (this._loaded) this._select(step);
|
|
284
|
-
this._requestedSelected = step;
|
|
285
|
-
}
|
|
286
|
-
get selected() {
|
|
287
|
-
return this.querySelector?.("sbb-step:is(:state(selected),[state--selected])") ?? null;
|
|
288
|
-
}
|
|
289
|
-
/** The currently selected step index. */
|
|
290
|
-
set selectedIndex(index) {
|
|
291
|
-
if (this._loaded && index !== null) this._select(this.steps[index]);
|
|
292
|
-
this._requestedSelectedIndex = index;
|
|
293
|
-
}
|
|
294
|
-
get selectedIndex() {
|
|
295
|
-
return this.selected ? this.steps.indexOf(this.selected) : null;
|
|
296
|
-
}
|
|
297
|
-
/** The steps of the stepper. */
|
|
298
|
-
get steps() {
|
|
299
|
-
const steps = [];
|
|
300
|
-
this.querySelectorAll?.("sbb-step").forEach((step) => {
|
|
301
|
-
customElements.upgrade(step);
|
|
302
|
-
steps.push(step);
|
|
303
|
-
});
|
|
304
|
-
return steps;
|
|
305
|
-
}
|
|
306
|
-
get _enabledSteps() {
|
|
307
|
-
return this.steps.filter((s) => {
|
|
308
|
-
if (s.label) {
|
|
309
|
-
customElements.upgrade(s.label);
|
|
310
|
-
return !s.label.disabled;
|
|
311
|
-
}
|
|
312
|
-
return false;
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
constructor() {
|
|
316
|
-
super();
|
|
317
|
-
/**
|
|
318
|
-
* If the sbb-stepper is used in a sbb-dialog, the marker on the selected element will not appear,
|
|
319
|
-
* because the calculations are done when the dialog is closed, so the marker has a width of 0;
|
|
320
|
-
* the same happens for the stepper height.
|
|
321
|
-
* We need to recalculate it when the element becomes visible.
|
|
322
|
-
*/
|
|
323
|
-
this._observer = (__runInitializers(this, _instanceExtraInitializers), new IntersectionController(this, {
|
|
324
|
-
target: null,
|
|
325
|
-
callback: (entries) => {
|
|
326
|
-
entries.forEach((e) => {
|
|
327
|
-
if (e.intersectionRatio > 0) {
|
|
328
|
-
this._setStepperHeight(this.selected);
|
|
329
|
-
this._setMarkerSize();
|
|
330
|
-
}
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
}));
|
|
334
|
-
this.#linear_accessor_storage = __runInitializers(this, _linear_initializers, false);
|
|
335
|
-
this._horizontalFrom = (__runInitializers(this, _linear_extraInitializers), null);
|
|
336
|
-
this.#orientation_accessor_storage = __runInitializers(this, _orientation_initializers, "horizontal");
|
|
337
|
-
this.#size_accessor_storage = (__runInitializers(this, _orientation_extraInitializers), __runInitializers(this, _size_initializers, isLean() ? "s" : "m"));
|
|
338
|
-
this._requestedSelected = (__runInitializers(this, _size_extraInitializers), null);
|
|
339
|
-
this._requestedSelectedIndex = null;
|
|
340
|
-
this._loaded = false;
|
|
341
|
-
this._resizeObserverTimeout = null;
|
|
342
|
-
this._mediaMatcher = new SbbMediaMatcherController(this, {});
|
|
343
|
-
this._onStepperResize = () => {
|
|
344
|
-
this._checkOrientation();
|
|
345
|
-
this._setStepperHeight(this.selected);
|
|
346
|
-
clearTimeout(this._resizeObserverTimeout);
|
|
347
|
-
this.internals.states.add("disable-animation");
|
|
348
|
-
this._resizeObserverTimeout = setTimeout(() => this.internals.states.delete("disable-animation"), DEBOUNCE_TIME);
|
|
349
|
-
};
|
|
350
|
-
this.addEventListener?.("keydown", (e) => this._handleKeyDown(e));
|
|
351
|
-
this.addEventListener?.("resizechange", (e) => this._onSelectedStepResize(e));
|
|
352
|
-
}
|
|
353
|
-
/** Selects the next step. */
|
|
354
|
-
next() {
|
|
355
|
-
if (this.selectedIndex !== null) this._select(this.steps[this.selectedIndex + 1]);
|
|
356
|
-
}
|
|
357
|
-
/** Selects the previous step. */
|
|
358
|
-
previous() {
|
|
359
|
-
if (this.selectedIndex !== null) this._select(this.steps[this.selectedIndex - 1]);
|
|
360
|
-
}
|
|
361
|
-
/** Resets the form in which the stepper is nested or every form of each step, if any. */
|
|
362
|
-
reset() {
|
|
363
|
-
const closestForm = this.closest("form");
|
|
364
|
-
if (closestForm) closestForm.reset();
|
|
365
|
-
else this.querySelectorAll("form").forEach((form) => form.reset());
|
|
366
|
-
this.selectedIndex = 0;
|
|
367
|
-
if (document.activeElement?.closest("sbb-stepper") === this) this.selected?.label?.focus();
|
|
368
|
-
}
|
|
369
|
-
_isSelectable(step) {
|
|
370
|
-
if (step) {
|
|
371
|
-
customElements.upgrade(step);
|
|
372
|
-
if (step.label) {
|
|
373
|
-
customElements.upgrade(step.label);
|
|
374
|
-
if (!this.linear && step.label.disabled) return false;
|
|
375
|
-
}
|
|
376
|
-
return true;
|
|
377
|
-
} else return false;
|
|
378
|
-
}
|
|
379
|
-
_select(step) {
|
|
380
|
-
if (!this._isSelectable(step) || step === this.selected) return;
|
|
381
|
-
const currentIndex = this.selectedIndex;
|
|
382
|
-
const currentStep = this.selected;
|
|
383
|
-
const validatePayload = {
|
|
384
|
-
currentIndex,
|
|
385
|
-
currentStep,
|
|
386
|
-
nextIndex: this.selectedIndex !== null ? this.selectedIndex + 1 : null,
|
|
387
|
-
nextStep: this.selectedIndex !== null ? this.steps[this.selectedIndex + 1] : null
|
|
388
|
-
};
|
|
389
|
-
if (this.selected && !this.selected.validate(validatePayload)) return;
|
|
390
|
-
this.selected?.deselect();
|
|
391
|
-
step.select();
|
|
392
|
-
/** @internal only to provide double entry in docs. It is a public event! */
|
|
393
|
-
this.dispatchEvent(new SbbStepChangeEvent(this.selectedIndex, currentIndex, this.selected, currentStep));
|
|
394
|
-
this._setMarkerSize();
|
|
395
|
-
this._setStepperHeight(step);
|
|
396
|
-
this._configureLinearMode();
|
|
397
|
-
if (document.activeElement?.closest("sbb-stepper") === this) this.selected?.label?.focus();
|
|
398
|
-
}
|
|
399
|
-
_setMarkerSize() {
|
|
400
|
-
if (!this._loaded || !this.selected || this.selectedIndex === void 0 || !this.selected.label) return;
|
|
401
|
-
const offset = this.orientation === "horizontal" ? this.selected.label.offsetLeft + this.selected.label.offsetWidth : this._calculateLabelOffsetTop();
|
|
402
|
-
this.style.setProperty("--sbb-stepper-marker-size", `${offset}px`);
|
|
403
|
-
}
|
|
404
|
-
/**
|
|
405
|
-
* Sets the stepper height based on the height of the provided step.
|
|
406
|
-
*/
|
|
407
|
-
_setStepperHeight(step) {
|
|
408
|
-
if (step && step.shadowRoot) {
|
|
409
|
-
const innerElement = step.shadowRoot.querySelector(".sbb-step");
|
|
410
|
-
if (innerElement) this.style?.setProperty("--sbb-stepper-content-height", `${innerElement.offsetHeight}px`);
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
_calculateLabelOffsetTop() {
|
|
414
|
-
if (this.selectedIndex === null) return;
|
|
415
|
-
let offset = 0;
|
|
416
|
-
for (const step of this.steps) {
|
|
417
|
-
if (step === this.selected) break;
|
|
418
|
-
offset = step.label.offsetHeight + offset;
|
|
419
|
-
}
|
|
420
|
-
return offset + this.selected.label.offsetHeight + parseFloat(getComputedStyle(this).getPropertyValue("--sbb-spacing-fixed-6x")) * 16 * this.selectedIndex;
|
|
421
|
-
}
|
|
422
|
-
_onSelectedStepResize(e) {
|
|
423
|
-
this._setStepperHeight(e.target);
|
|
424
|
-
}
|
|
425
|
-
_configure() {
|
|
426
|
-
this.steps.forEach((step, i, array) => {
|
|
427
|
-
step.configure(this._loaded);
|
|
428
|
-
step.label?.configure(i + 1, array.length, this._loaded);
|
|
429
|
-
});
|
|
430
|
-
this._select(this.selected || this._enabledSteps[0]);
|
|
431
|
-
}
|
|
432
|
-
_updateLabels() {
|
|
433
|
-
this.steps.forEach((step) => {
|
|
434
|
-
step.slot = this.orientation === "horizontal" ? "step" : "step-label";
|
|
435
|
-
});
|
|
436
|
-
}
|
|
437
|
-
_checkOrientation() {
|
|
438
|
-
if (this.horizontalFrom) {
|
|
439
|
-
this.orientation = this._mediaMatcher.matches(breakpointMap[this.horizontalFrom]) ? "horizontal" : "vertical";
|
|
440
|
-
this._updateLabels();
|
|
441
|
-
}
|
|
442
|
-
setTimeout(() => this._setMarkerSize(), 0);
|
|
443
|
-
}
|
|
444
|
-
_configureLinearMode() {
|
|
445
|
-
this.steps.forEach((step, index) => {
|
|
446
|
-
if (!step.label) return;
|
|
447
|
-
customElements.upgrade(step.label);
|
|
448
|
-
step.label.disable(this.linear && index > this.selectedIndex || !this.linear && step.label.matches(":is(:state(user-disabled),[state--user-disabled])"));
|
|
449
|
-
});
|
|
450
|
-
}
|
|
451
|
-
connectedCallback() {
|
|
452
|
-
super.connectedCallback();
|
|
453
|
-
window.addEventListener("resize", this._onStepperResize, { passive: true });
|
|
454
|
-
this.toggleState("disable-animation", !this._loaded);
|
|
455
|
-
}
|
|
456
|
-
disconnectedCallback() {
|
|
457
|
-
super.disconnectedCallback();
|
|
458
|
-
window.removeEventListener("resize", this._onStepperResize);
|
|
459
|
-
}
|
|
460
|
-
firstUpdated(changedProperties) {
|
|
461
|
-
super.firstUpdated(changedProperties);
|
|
462
|
-
this.updateComplete.then(() => {
|
|
463
|
-
this._loaded = true;
|
|
464
|
-
this._configure();
|
|
465
|
-
if (this._requestedSelected && this.steps.indexOf(this._requestedSelected) !== -1) this.selectedIndex = this.steps.indexOf(this._requestedSelected);
|
|
466
|
-
else if (this._requestedSelectedIndex) this.selectedIndex = this._requestedSelectedIndex;
|
|
467
|
-
else this.selectedIndex = 0;
|
|
468
|
-
this._observer.observe(this);
|
|
469
|
-
this._checkOrientation();
|
|
470
|
-
setTimeout(() => this.internals.states.delete("disable-animation"), DEBOUNCE_TIME);
|
|
471
|
-
});
|
|
472
|
-
}
|
|
473
|
-
willUpdate(changedProperties) {
|
|
474
|
-
super.willUpdate(changedProperties);
|
|
475
|
-
if (changedProperties.has("orientation") && !this.horizontalFrom) {
|
|
476
|
-
this._updateLabels();
|
|
477
|
-
this._setMarkerSize();
|
|
478
|
-
}
|
|
479
|
-
if (changedProperties.has("linear") && this._loaded) this._configureLinearMode();
|
|
480
|
-
if (changedProperties.has("size")) this._setMarkerSize();
|
|
481
|
-
}
|
|
482
|
-
_handleKeyDown(evt) {
|
|
483
|
-
const enabledSteps = this._enabledSteps;
|
|
484
|
-
if (!enabledSteps || evt.target !== this && evt.target.parentElement !== this) return;
|
|
485
|
-
if (isArrowKeyPressed(evt)) {
|
|
486
|
-
const nextIndex = getNextElementIndex(evt, enabledSteps.indexOf(this.selected), enabledSteps.length);
|
|
487
|
-
this._select(enabledSteps[nextIndex]);
|
|
488
|
-
evt.preventDefault();
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
render() {
|
|
492
|
-
return html`
|
|
493
|
-
<div class="sbb-stepper">
|
|
494
|
-
<div class="sbb-stepper__labels" role="tablist">
|
|
495
|
-
<slot name="step-label" @slotchange=${this._configure}></slot>
|
|
496
|
-
</div>
|
|
497
|
-
<div class="sbb-stepper__steps">
|
|
498
|
-
<slot name="step" @slotchange=${this._configure}></slot>
|
|
499
|
-
</div>
|
|
500
|
-
</div>
|
|
501
|
-
`;
|
|
502
|
-
}
|
|
503
|
-
};
|
|
504
|
-
})();
|
|
505
|
-
//#endregion
|
|
506
|
-
export { SbbStepperElement as n, SbbStepChangeEvent as t };
|
|
507
|
-
|
|
508
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci5jb21wb25lbnQteUFrZ2NhdUUuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VsZW1lbnRzL3N0ZXBwZXIvc3RlcHBlci9zdGVwcGVyLnNjc3M/bGl0JmlubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9zdGVwcGVyL3N0ZXBwZXIvc3RlcHBlci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICAtLXNiYi1zdGVwcGVyLW9yaWVudGF0aW9uOiByb3c7XG4gIC0tc2JiLXN0ZXBwZXItYm9yZGVyLXdpZHRoOiB2YXIoLS1zYmItYm9yZGVyLXdpZHRoLTF4KTtcbiAgLS1zYmItc3RlcHBlci1tYXJrZXItc2l6ZTogMDtcbiAgLS1zYmItc3RlcHBlci1tYXJrZXItd2lkdGg6IHZhcigtLXNiYi1ib3JkZXItd2lkdGgtM3gpO1xuICAtLXNiYi1zdGVwcGVyLWFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKFxuICAgIC0tc2JiLWRpc2FibGUtYW5pbWF0aW9uLWR1cmF0aW9uLFxuICAgIHZhcigtLXNiYi1hbmltYXRpb24tZHVyYXRpb24tNngpXG4gICk7XG4gIC0tc2JiLXN0ZXBwZXItbWFya2VyLWNvbG9yOiB2YXIoLS1zYmItY29sb3ItMyk7XG5cbiAgZGlzcGxheTogYmxvY2s7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgY291bnRlci1yZXNldDogc3RlcC1sYWJlbDtcblxuICBAaW5jbHVkZSBzYmIuaWYtZm9yY2VkLWNvbG9ycyB7XG4gICAgLS1zYmItc3RlcHBlci1tYXJrZXItY29sb3I6IEJ1dHRvblRleHQ7XG4gIH1cbn1cblxuOmhvc3QoOnN0YXRlKGRpc2FibGUtYW5pbWF0aW9uKSkge1xuICBAaW5jbHVkZSBzYmIuZGlzYWJsZS1hbmltYXRpb247XG59XG5cbjpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXSkge1xuICAtLXNiYi1zdGVwcGVyLW9yaWVudGF0aW9uOiBjb2x1bW47XG59XG5cbi5zYmItc3RlcHBlciB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4uc2JiLXN0ZXBwZXJfX2xhYmVscyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiB2YXIoLS1zYmItc3RlcHBlci1vcmllbnRhdGlvbik7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAganVzdGlmeS1jb250ZW50OiBzdGFydDtcbiAgbWFyZ2luLWJsb2NrLWVuZDogdmFyKC0tc2JiLXNwYWNpbmctcmVzcG9uc2l2ZS1tKTtcblxuICAmOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldC1pbmxpbmUtc3RhcnQ6IGNhbGModmFyKC0tc2JiLXN0ZXBwZXItYm9yZGVyLXdpZHRoKSAqIC0xKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItc3RlcHBlci1tYXJrZXItY29sb3IpO1xuICB9XG5cbiAgOmhvc3QoW29yaWVudGF0aW9uPSdob3Jpem9udGFsJ10pICYge1xuICAgIGdhcDogdmFyKC0tc2JiLXNwYWNpbmctcmVzcG9uc2l2ZS1tKTtcbiAgICBwYWRkaW5nLWJsb2NrLWVuZDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtNHgpO1xuICAgIGJvcmRlci1ibG9jay1lbmQ6IHZhcigtLXNiYi1zdGVwcGVyLWJvcmRlci13aWR0aCkgc29saWQgdmFyKC0tc2JiLWJvcmRlci1jb2xvci00LWludmVydGVkKTtcblxuICAgICY6OmJlZm9yZSB7XG4gICAgICBpbnNldC1ibG9jay1lbmQ6IGNhbGModmFyKC0tc2JiLXN0ZXBwZXItYm9yZGVyLXdpZHRoKSAqIC0xKTtcbiAgICAgIGhlaWdodDogdmFyKC0tc2JiLXN0ZXBwZXItbWFya2VyLXdpZHRoKTtcbiAgICAgIHdpZHRoOiB2YXIoLS1zYmItc3RlcHBlci1tYXJrZXItc2l6ZSk7XG4gICAgICB0cmFuc2l0aW9uOiB3aWR0aCB2YXIoLS1zYmItc3RlcHBlci1hbmltYXRpb24tZHVyYXRpb24pIHZhcigtLXNiYi1hbmltYXRpb24tZWFzaW5nKTtcbiAgICB9XG4gIH1cblxuICA6aG9zdChbb3JpZW50YXRpb249J3ZlcnRpY2FsJ10pICYge1xuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiB2YXIoLS1zYmItc3BhY2luZy1maXhlZC00eCk7XG4gICAgYm9yZGVyLWlubGluZS1zdGFydDogdmFyKC0tc2JiLXN0ZXBwZXItYm9yZGVyLXdpZHRoKSBzb2xpZCB2YXIoLS1zYmItYm9yZGVyLWNvbG9yLTQtaW52ZXJ0ZWQpO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIGluc2V0LWJsb2NrLXN0YXJ0OiAwO1xuICAgICAgd2lkdGg6IHZhcigtLXNiYi1zdGVwcGVyLW1hcmtlci13aWR0aCk7XG4gICAgICBoZWlnaHQ6IHZhcigtLXNiYi1zdGVwcGVyLW1hcmtlci1zaXplKTtcbiAgICAgIHRyYW5zaXRpb246IGhlaWdodCB2YXIoLS1zYmItc3RlcHBlci1hbmltYXRpb24tZHVyYXRpb24pIHZhcigtLXNiYi1hbmltYXRpb24tZWFzaW5nKTtcbiAgICB9XG4gIH1cbn1cblxuLnNiYi1zdGVwcGVyX19zdGVwcyB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXSkgJiB7XG4gICAgaGVpZ2h0OiB2YXIoLS1zYmItc3RlcHBlci1jb250ZW50LWhlaWdodCk7XG4gICAgdHJhbnNpdGlvbjogaGVpZ2h0IHZhcigtLXNiYi1zdGVwcGVyLWFuaW1hdGlvbi1kdXJhdGlvbikgdmFyKC0tc2JiLWFuaW1hdGlvbi1lYXNpbmcpO1xuICB9XG59XG5cbjo6c2xvdHRlZChzYmItc3RlcC1sYWJlbCk6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IGNvdW50ZXIoc3RlcC1sYWJlbCk7XG4gIGNvdW50ZXItaW5jcmVtZW50OiBzdGVwLWxhYmVsO1xufVxuIiwiaW1wb3J0IHsgSW50ZXJzZWN0aW9uQ29udHJvbGxlciB9IGZyb20gJ0BsaXQtbGFicy9vYnNlcnZlcnMvaW50ZXJzZWN0aW9uLWNvbnRyb2xsZXIuanMnO1xuaW1wb3J0IHsgdHlwZSBDU1NSZXN1bHRHcm91cCwgaHRtbCwgdHlwZSBQcm9wZXJ0eVZhbHVlcywgdHlwZSBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBwcm9wZXJ0eSB9IGZyb20gJ2xpdC9kZWNvcmF0b3JzLmpzJztcblxuaW1wb3J0IHsgZ2V0TmV4dEVsZW1lbnRJbmRleCwgaXNBcnJvd0tleVByZXNzZWQgfSBmcm9tICcuLi8uLi9jb3JlL2ExMXkudHMnO1xuaW1wb3J0IHsgU2JiRWxlbWVudCB9IGZyb20gJy4uLy4uL2NvcmUvYmFzZS1lbGVtZW50cy50cyc7XG5pbXBvcnQge1xuICBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludExhcmdlQW5kQWJvdmUsXG4gIFNiYk1lZGlhUXVlcnlCcmVha3BvaW50U21hbGxBbmRBYm92ZSxcbiAgU2JiTWVkaWFRdWVyeUJyZWFrcG9pbnRVbHRyYUFuZEFib3ZlLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFplcm9BbmRBYm92ZSxcbn0gZnJvbSAnLi4vLi4vY29yZS9jb250cm9sbGVycy9tZWRpYS1tYXRjaGVycy1jb250cm9sbGVyLnRzJztcbmltcG9ydCB7IGZvcmNlVHlwZSB9IGZyb20gJy4uLy4uL2NvcmUvZGVjb3JhdG9ycy50cyc7XG5pbXBvcnQgeyBpc0xlYW4gfSBmcm9tICcuLi8uLi9jb3JlL2RvbS50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYkhvcml6b250YWxGcm9tLCBTYmJPcmllbnRhdGlvbiB9IGZyb20gJy4uLy4uL2NvcmUvaW50ZXJmYWNlcy50cyc7XG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMgfSBmcm9tICcuLi8uLi9jb3JlL3N0eWxlcy50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYlN0ZXBFbGVtZW50LCBTYmJTdGVwVmFsaWRhdGVFdmVudERldGFpbHMgfSBmcm9tICcuLi9zdGVwL3N0ZXAuY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vc3RlcHBlci5zY3NzP2xpdCZpbmxpbmUnO1xuXG5jb25zdCBERUJPVU5DRV9USU1FID0gMTUwO1xuXG5jb25zdCBicmVha3BvaW50TWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICB6ZXJvOiBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludFplcm9BbmRBYm92ZSxcbiAgc21hbGw6IFNiYk1lZGlhUXVlcnlCcmVha3BvaW50U21hbGxBbmRBYm92ZSxcbiAgbGFyZ2U6IFNiYk1lZGlhUXVlcnlCcmVha3BvaW50TGFyZ2VBbmRBYm92ZSxcbiAgdWx0cmE6IFNiYk1lZGlhUXVlcnlCcmVha3BvaW50VWx0cmFBbmRBYm92ZSxcbn07XG5cbmV4cG9ydCBjbGFzcyBTYmJTdGVwQ2hhbmdlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gIC8qKiBUaGUgaW5kZXggb2YgdGhlIG5ld2x5IHNlbGVjdGVkIHN0ZXAuICovXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZEluZGV4OiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKiBUaGUgaW5kZXggb2YgdGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgc3RlcC4gKi9cbiAgcHVibGljIHJlYWRvbmx5IHByZXZpb3VzSW5kZXg6IG51bWJlciB8IG51bGw7XG5cbiAgLyoqIFRoZSBuZXdseSBzZWxlY3RlZCBzdGVwIGVsZW1lbnQuICovXG4gIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZFN0ZXA6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbDtcblxuICAvKiogVGhlIHByZXZpb3VzbHkgc2VsZWN0ZWQgc3RlcCBlbGVtZW50LiAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJldmlvdXNTdGVwOiBTYmJTdGVwRWxlbWVudCB8IG51bGw7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHNlbGVjdGVkSW5kZXg6IG51bWJlciB8IG51bGwsXG4gICAgcHJldmlvdXNJbmRleDogbnVtYmVyIHwgbnVsbCxcbiAgICBzZWxlY3RlZFN0ZXA6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCxcbiAgICBwcmV2aW91c1N0ZXA6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCxcbiAgKSB7XG4gICAgc3VwZXIoJ3N0ZXBjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pO1xuICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHNlbGVjdGVkSW5kZXg7XG4gICAgdGhpcy5wcmV2aW91c0luZGV4ID0gcHJldmlvdXNJbmRleDtcbiAgICB0aGlzLnNlbGVjdGVkU3RlcCA9IHNlbGVjdGVkU3RlcDtcbiAgICB0aGlzLnByZXZpb3VzU3RlcCA9IHByZXZpb3VzU3RlcDtcbiAgfVxufVxuLyoqXG4gKiBQcm92aWRlcyBhIHN0cnVjdHVyZWQsIHN0ZXAtYnktc3RlcCB3b3JrZmxvdyBmb3IgdXNlciBpbnRlcmFjdGlvbnMuXG4gKiBAc2xvdCAtIFByb3ZpZGUgYSBgc2JiLWV4cGFuc2lvbi1wYW5lbC1oZWFkZXJgIGFuZCBhIGBzYmItZXhwYW5zaW9uLXBhbmVsLWNvbnRlbnRgIHRvIHRoZSBzdGVwcGVyLlxuICogQHNsb3Qgc3RlcC1sYWJlbCAtIFVzZSB0aGlzIHNsb3QgdG8gcHJvdmlkZSBhbiBgc2JiLXN0ZXAtbGFiZWxgLlxuICogQHNsb3Qgc3RlcCAtIFVzZSB0aGlzIHNsb3QgdG8gcHJvdmlkZSBhbiBgc2JiLXN0ZXBgLlxuICogQGV2ZW50IHtTYmJTdGVwQ2hhbmdlRXZlbnR9IHN0ZXBjaGFuZ2UgLSBFbWl0cyB3aGVuZXZlciBhIHN0ZXAgd2FzIGNoYW5nZWQuXG4gKi9cbmV4cG9ydCBjbGFzcyBTYmJTdGVwcGVyRWxlbWVudCBleHRlbmRzIFNiYkVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLXN0ZXBwZXInO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIHN0ZXBjaGFuZ2U6ICdzdGVwY2hhbmdlJyxcbiAgfSBhcyBjb25zdDtcblxuICAvKipcbiAgICogSWYgdGhlIHNiYi1zdGVwcGVyIGlzIHVzZWQgaW4gYSBzYmItZGlhbG9nLCB0aGUgbWFya2VyIG9uIHRoZSBzZWxlY3RlZCBlbGVtZW50IHdpbGwgbm90IGFwcGVhcixcbiAgICogYmVjYXVzZSB0aGUgY2FsY3VsYXRpb25zIGFyZSBkb25lIHdoZW4gdGhlIGRpYWxvZyBpcyBjbG9zZWQsIHNvIHRoZSBtYXJrZXIgaGFzIGEgd2lkdGggb2YgMDtcbiAgICogdGhlIHNhbWUgaGFwcGVucyBmb3IgdGhlIHN0ZXBwZXIgaGVpZ2h0LlxuICAgKiBXZSBuZWVkIHRvIHJlY2FsY3VsYXRlIGl0IHdoZW4gdGhlIGVsZW1lbnQgYmVjb21lcyB2aXNpYmxlLlxuICAgKi9cbiAgcHJpdmF0ZSBfb2JzZXJ2ZXIgPSBuZXcgSW50ZXJzZWN0aW9uQ29udHJvbGxlcih0aGlzLCB7XG4gICAgdGFyZ2V0OiBudWxsLFxuICAgIGNhbGxiYWNrOiAoZW50cmllcykgPT4ge1xuICAgICAgZW50cmllcy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICAgIGlmIChlLmludGVyc2VjdGlvblJhdGlvID4gMCkge1xuICAgICAgICAgIHRoaXMuX3NldFN0ZXBwZXJIZWlnaHQodGhpcy5zZWxlY3RlZCk7XG4gICAgICAgICAgdGhpcy5fc2V0TWFya2VyU2l6ZSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcblxuICAvKiogSWYgc2V0IHRvIHRydWUsIG9ubHkgdGhlIGN1cnJlbnQgYW5kIHByZXZpb3VzIGxhYmVscyBjYW4gYmUgY2xpY2tlZCBhbmQgc2VsZWN0ZWQuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyB0eXBlOiBCb29sZWFuIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBsaW5lYXI6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogT3ZlcnJpZGVzIHRoZSBiZWhhdmlvciBvZiBgb3JpZW50YXRpb25gIHByb3BlcnR5LiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdob3Jpem9udGFsLWZyb20nLCByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBzZXQgaG9yaXpvbnRhbEZyb20odmFsdWU6IFNiYkhvcml6b250YWxGcm9tIHwgbnVsbCkge1xuICAgIHRoaXMuX2hvcml6b250YWxGcm9tID0gdmFsdWUgJiYgYnJlYWtwb2ludE1hcFt2YWx1ZV0gPyB2YWx1ZSA6IG51bGw7XG4gICAgaWYgKHRoaXMuX2hvcml6b250YWxGcm9tICYmIHRoaXMuX2xvYWRlZCkge1xuICAgICAgdGhpcy5fY2hlY2tPcmllbnRhdGlvbigpO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IGhvcml6b250YWxGcm9tKCk6IFNiYkhvcml6b250YWxGcm9tIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2hvcml6b250YWxGcm9tO1xuICB9XG4gIHByaXZhdGUgX2hvcml6b250YWxGcm9tOiBTYmJIb3Jpem9udGFsRnJvbSB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBTdGVwcyBvcmllbnRhdGlvbiwgZWl0aGVyIGhvcml6b250YWwgb3IgdmVydGljYWwuICovXG4gIEBwcm9wZXJ0eSh7IHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIG9yaWVudGF0aW9uOiBTYmJPcmllbnRhdGlvbiA9ICdob3Jpem9udGFsJztcblxuICAvKipcbiAgICogU2l6ZSB2YXJpYW50LCBlaXRoZXIgcyBvciBtLlxuICAgKiBAZGVmYXVsdCAnbScgLyAncycgKGxlYW4pXG4gICAqL1xuICBAcHJvcGVydHkoeyByZWZsZWN0OiB0cnVlIH0pIHB1YmxpYyBhY2Nlc3NvciBzaXplOiAncycgfCAnbScgPSBpc0xlYW4oKSA/ICdzJyA6ICdtJztcblxuICAvKiogVGhlIGN1cnJlbnRseSBzZWxlY3RlZCBzdGVwLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXG4gIHB1YmxpYyBzZXQgc2VsZWN0ZWQoc3RlcDogU2JiU3RlcEVsZW1lbnQgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuX2xvYWRlZCkge1xuICAgICAgdGhpcy5fc2VsZWN0KHN0ZXApO1xuICAgIH1cbiAgICB0aGlzLl9yZXF1ZXN0ZWRTZWxlY3RlZCA9IHN0ZXA7XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBTYmJTdGVwRWxlbWVudCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3I/LjxTYmJTdGVwRWxlbWVudD4oJ3NiYi1zdGVwOnN0YXRlKHNlbGVjdGVkKScpID8/IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfcmVxdWVzdGVkU2VsZWN0ZWQ6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgc3RlcCBpbmRleC4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnc2VsZWN0ZWQtaW5kZXgnLCB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIHNldCBzZWxlY3RlZEluZGV4KGluZGV4OiBudW1iZXIgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuX2xvYWRlZCAmJiBpbmRleCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fc2VsZWN0KHRoaXMuc3RlcHNbaW5kZXhdKTtcbiAgICB9XG4gICAgdGhpcy5fcmVxdWVzdGVkU2VsZWN0ZWRJbmRleCA9IGluZGV4O1xuICB9XG4gIHB1YmxpYyBnZXQgc2VsZWN0ZWRJbmRleCgpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZCA/IHRoaXMuc3RlcHMuaW5kZXhPZih0aGlzLnNlbGVjdGVkKSA6IG51bGw7XG4gIH1cbiAgcHJpdmF0ZSBfcmVxdWVzdGVkU2VsZWN0ZWRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBzdGVwcyBvZiB0aGUgc3RlcHBlci4gKi9cbiAgcHVibGljIGdldCBzdGVwcygpOiBTYmJTdGVwRWxlbWVudFtdIHtcbiAgICBjb25zdCBzdGVwczogU2JiU3RlcEVsZW1lbnRbXSA9IFtdO1xuICAgIHRoaXMucXVlcnlTZWxlY3RvckFsbD8uKCdzYmItc3RlcCcpLmZvckVhY2goKHN0ZXApID0+IHtcbiAgICAgIGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUoc3RlcCk7XG4gICAgICBzdGVwcy5wdXNoKHN0ZXApO1xuICAgIH0pO1xuICAgIHJldHVybiBzdGVwcztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9lbmFibGVkU3RlcHMoKTogU2JiU3RlcEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuc3RlcHMuZmlsdGVyKChzKSA9PiB7XG4gICAgICBpZiAocy5sYWJlbCkge1xuICAgICAgICBjdXN0b21FbGVtZW50cy51cGdyYWRlKHMubGFiZWwpO1xuICAgICAgICByZXR1cm4gIXMubGFiZWwuZGlzYWJsZWQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9sb2FkZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfcmVzaXplT2JzZXJ2ZXJUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9tZWRpYU1hdGNoZXIgPSBuZXcgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcih0aGlzLCB7fSk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZSkgPT4gdGhpcy5faGFuZGxlS2V5RG93bihlKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ3Jlc2l6ZWNoYW5nZScsIChlOiBFdmVudCkgPT4gdGhpcy5fb25TZWxlY3RlZFN0ZXBSZXNpemUoZSkpO1xuICB9XG5cbiAgLyoqIFNlbGVjdHMgdGhlIG5leHQgc3RlcC4gKi9cbiAgcHVibGljIG5leHQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fc2VsZWN0KHRoaXMuc3RlcHNbdGhpcy5zZWxlY3RlZEluZGV4ICsgMV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTZWxlY3RzIHRoZSBwcmV2aW91cyBzdGVwLiAqL1xuICBwdWJsaWMgcHJldmlvdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5fc2VsZWN0KHRoaXMuc3RlcHNbdGhpcy5zZWxlY3RlZEluZGV4IC0gMV0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBSZXNldHMgdGhlIGZvcm0gaW4gd2hpY2ggdGhlIHN0ZXBwZXIgaXMgbmVzdGVkIG9yIGV2ZXJ5IGZvcm0gb2YgZWFjaCBzdGVwLCBpZiBhbnkuICovXG4gIHB1YmxpYyByZXNldCgpOiB2b2lkIHtcbiAgICBjb25zdCBjbG9zZXN0Rm9ybSA9IHRoaXMuY2xvc2VzdCgnZm9ybScpO1xuICAgIGlmIChjbG9zZXN0Rm9ybSkge1xuICAgICAgY2xvc2VzdEZvcm0ucmVzZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yQWxsKCdmb3JtJykuZm9yRWFjaCgoZm9ybSkgPT4gZm9ybS5yZXNldCgpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gMDtcbiAgICAvLyBJbiBjYXNlIHRoZSBmb2N1cyBpcyBjdXJyZW50bHkgaW5zaWRlIHRoZSBzdGVwcGVyLCB3ZSByZXNldCB0aGUgZm9jdXMgdG8gdGhlIGZpcnN0L3NlbGVjdGVkIHN0ZXAgbGFiZWwuXG4gICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ/LmNsb3Nlc3QoJ3NiYi1zdGVwcGVyJykgPT09IHRoaXMpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQ/LmxhYmVsPy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2lzU2VsZWN0YWJsZShzdGVwOiBTYmJTdGVwRWxlbWVudCB8IG51bGwpOiBzdGVwIGlzIFNiYlN0ZXBFbGVtZW50IHtcbiAgICBpZiAoc3RlcCkge1xuICAgICAgY3VzdG9tRWxlbWVudHMudXBncmFkZShzdGVwKTtcbiAgICAgIGlmIChzdGVwLmxhYmVsKSB7XG4gICAgICAgIGN1c3RvbUVsZW1lbnRzLnVwZ3JhZGUoc3RlcC5sYWJlbCk7XG4gICAgICAgIGlmICghdGhpcy5saW5lYXIgJiYgc3RlcC5sYWJlbC5kaXNhYmxlZCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3Qoc3RlcDogU2JiU3RlcEVsZW1lbnQgfCBudWxsKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9pc1NlbGVjdGFibGUoc3RlcCkgfHwgc3RlcCA9PT0gdGhpcy5zZWxlY3RlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjdXJyZW50SW5kZXggPSB0aGlzLnNlbGVjdGVkSW5kZXg7XG4gICAgY29uc3QgY3VycmVudFN0ZXAgPSB0aGlzLnNlbGVjdGVkO1xuICAgIGNvbnN0IHZhbGlkYXRlUGF5bG9hZDogU2JiU3RlcFZhbGlkYXRlRXZlbnREZXRhaWxzID0ge1xuICAgICAgY3VycmVudEluZGV4LFxuICAgICAgY3VycmVudFN0ZXAsXG4gICAgICBuZXh0SW5kZXg6IHRoaXMuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCA/IHRoaXMuc2VsZWN0ZWRJbmRleCArIDEgOiBudWxsLFxuICAgICAgbmV4dFN0ZXA6IHRoaXMuc2VsZWN0ZWRJbmRleCAhPT0gbnVsbCA/IHRoaXMuc3RlcHNbdGhpcy5zZWxlY3RlZEluZGV4ICsgMV0gOiBudWxsLFxuICAgIH07XG5cbiAgICBpZiAodGhpcy5zZWxlY3RlZCAmJiAhdGhpcy5zZWxlY3RlZC52YWxpZGF0ZSh2YWxpZGF0ZVBheWxvYWQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWQ7XG4gICAgY3VycmVudD8uZGVzZWxlY3QoKTtcbiAgICBzdGVwLnNlbGVjdCgpO1xuXG4gICAgLyoqIEBpbnRlcm5hbCBvbmx5IHRvIHByb3ZpZGUgZG91YmxlIGVudHJ5IGluIGRvY3MuIEl0IGlzIGEgcHVibGljIGV2ZW50ISAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBTYmJTdGVwQ2hhbmdlRXZlbnQodGhpcy5zZWxlY3RlZEluZGV4LCBjdXJyZW50SW5kZXgsIHRoaXMuc2VsZWN0ZWQsIGN1cnJlbnRTdGVwKSxcbiAgICApO1xuXG4gICAgdGhpcy5fc2V0TWFya2VyU2l6ZSgpO1xuICAgIHRoaXMuX3NldFN0ZXBwZXJIZWlnaHQoc3RlcCk7XG4gICAgdGhpcy5fY29uZmlndXJlTGluZWFyTW9kZSgpO1xuICAgIC8vIEluIGNhc2UgdGhlIGZvY3VzIGlzIGN1cnJlbnRseSBpbnNpZGUgdGhlIHN0ZXBwZXIsIHdlIGZvY3VzIHRoZSBzZWxlY3RlZCBzdGVwIGxhYmVsLlxuICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50Py5jbG9zZXN0KCdzYmItc3RlcHBlcicpID09PSB0aGlzKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkPy5sYWJlbD8uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zZXRNYXJrZXJTaXplKCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgICF0aGlzLl9sb2FkZWQgfHxcbiAgICAgICF0aGlzLnNlbGVjdGVkIHx8XG4gICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPT09IHVuZGVmaW5lZCB8fFxuICAgICAgIXRoaXMuc2VsZWN0ZWQubGFiZWxcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb2Zmc2V0ID1cbiAgICAgIHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJ1xuICAgICAgICA/IHRoaXMuc2VsZWN0ZWQubGFiZWwub2Zmc2V0TGVmdCArIHRoaXMuc2VsZWN0ZWQubGFiZWwub2Zmc2V0V2lkdGhcbiAgICAgICAgOiB0aGlzLl9jYWxjdWxhdGVMYWJlbE9mZnNldFRvcCgpO1xuXG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eSgnLS1zYmItc3RlcHBlci1tYXJrZXItc2l6ZScsIGAke29mZnNldH1weGApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHN0ZXBwZXIgaGVpZ2h0IGJhc2VkIG9uIHRoZSBoZWlnaHQgb2YgdGhlIHByb3ZpZGVkIHN0ZXAuXG4gICAqL1xuICBwcml2YXRlIF9zZXRTdGVwcGVySGVpZ2h0KHN0ZXA6IFNiYlN0ZXBFbGVtZW50IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChzdGVwICYmIHN0ZXAuc2hhZG93Um9vdCkge1xuICAgICAgY29uc3QgaW5uZXJFbGVtZW50OiBTYmJTdGVwRWxlbWVudCB8IG51bGwgPSBzdGVwLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcignLnNiYi1zdGVwJyk7XG4gICAgICBpZiAoaW5uZXJFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc3R5bGU/LnNldFByb3BlcnR5KCctLXNiYi1zdGVwcGVyLWNvbnRlbnQtaGVpZ2h0JywgYCR7aW5uZXJFbGVtZW50Lm9mZnNldEhlaWdodH1weGApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2NhbGN1bGF0ZUxhYmVsT2Zmc2V0VG9wKCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGhpcy5zdGVwcykge1xuICAgICAgaWYgKHN0ZXAgPT09IHRoaXMuc2VsZWN0ZWQpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBvZmZzZXQgPSBzdGVwLmxhYmVsIS5vZmZzZXRIZWlnaHQgKyBvZmZzZXQ7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBvZmZzZXQgK1xuICAgICAgdGhpcy5zZWxlY3RlZCEubGFiZWwhLm9mZnNldEhlaWdodCEgK1xuICAgICAgcGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHRoaXMpLmdldFByb3BlcnR5VmFsdWUoJy0tc2JiLXNwYWNpbmctZml4ZWQtNngnKSkgKlxuICAgICAgICAxNiAqXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9vblNlbGVjdGVkU3RlcFJlc2l6ZShlOiBFdmVudCk6IHZvaWQge1xuICAgIHRoaXMuX3NldFN0ZXBwZXJIZWlnaHQoZS50YXJnZXQgYXMgU2JiU3RlcEVsZW1lbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlndXJlKCk6IHZvaWQge1xuICAgIHRoaXMuc3RlcHMuZm9yRWFjaCgoc3RlcCwgaSwgYXJyYXkpID0+IHtcbiAgICAgIHN0ZXAuY29uZmlndXJlKHRoaXMuX2xvYWRlZCk7XG4gICAgICBzdGVwLmxhYmVsPy5jb25maWd1cmUoaSArIDEsIGFycmF5Lmxlbmd0aCwgdGhpcy5fbG9hZGVkKTtcbiAgICB9KTtcbiAgICB0aGlzLl9zZWxlY3QodGhpcy5zZWxlY3RlZCB8fCB0aGlzLl9lbmFibGVkU3RlcHNbMF0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXBkYXRlTGFiZWxzKCk6IHZvaWQge1xuICAgIHRoaXMuc3RlcHMuZm9yRWFjaCgoc3RlcCkgPT4ge1xuICAgICAgc3RlcC5zbG90ID0gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnID8gJ3N0ZXAnIDogJ3N0ZXAtbGFiZWwnO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfY2hlY2tPcmllbnRhdGlvbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ob3Jpem9udGFsRnJvbSkge1xuICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IHRoaXMuX21lZGlhTWF0Y2hlci5tYXRjaGVzKGJyZWFrcG9pbnRNYXBbdGhpcy5ob3Jpem9udGFsRnJvbV0pXG4gICAgICAgID8gJ2hvcml6b250YWwnXG4gICAgICAgIDogJ3ZlcnRpY2FsJztcbiAgICAgIHRoaXMuX3VwZGF0ZUxhYmVscygpO1xuICAgIH1cbiAgICAvLyBUaGUgdGltZW91dCBpcyBuZWVkZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG1hcmtlciB0YWtlcyB0aGUgY29ycmVjdCBzdGVwLWxhYmVsIHNpemUuXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLl9zZXRNYXJrZXJTaXplKCksIDApO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25TdGVwcGVyUmVzaXplID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX2NoZWNrT3JpZW50YXRpb24oKTtcbiAgICB0aGlzLl9zZXRTdGVwcGVySGVpZ2h0KHRoaXMuc2VsZWN0ZWQpO1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZXNpemVPYnNlcnZlclRpbWVvdXQhKTtcbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCdkaXNhYmxlLWFuaW1hdGlvbicpO1xuXG4gICAgLy8gRGlzYWJsZSB0aGUgYW5pbWF0aW9uIHdoZW4gcmVzaXppbmcgdG8gYXZvaWQgc3RyYW5nZSB0cmFuc2l0aW9uIGVmZmVjdHMuXG4gICAgdGhpcy5fcmVzaXplT2JzZXJ2ZXJUaW1lb3V0ID0gc2V0VGltZW91dChcbiAgICAgICgpID0+IHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoJ2Rpc2FibGUtYW5pbWF0aW9uJyksXG4gICAgICBERUJPVU5DRV9USU1FLFxuICAgICk7XG4gIH07XG5cbiAgcHJpdmF0ZSBfY29uZmlndXJlTGluZWFyTW9kZSgpOiB2b2lkIHtcbiAgICB0aGlzLnN0ZXBzLmZvckVhY2goKHN0ZXAsIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIXN0ZXAubGFiZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY3VzdG9tRWxlbWVudHMudXBncmFkZShzdGVwLmxhYmVsKTtcblxuICAgICAgc3RlcC5sYWJlbC5kaXNhYmxlKFxuICAgICAgICAodGhpcy5saW5lYXIgJiYgaW5kZXggPiB0aGlzLnNlbGVjdGVkSW5kZXghKSB8fFxuICAgICAgICAgICghdGhpcy5saW5lYXIgJiYgc3RlcC5sYWJlbC5tYXRjaGVzKCc6c3RhdGUodXNlci1kaXNhYmxlZCknKSksXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGNvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uU3RlcHBlclJlc2l6ZSwge1xuICAgICAgcGFzc2l2ZTogdHJ1ZSxcbiAgICB9KTtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCdkaXNhYmxlLWFuaW1hdGlvbicsICF0aGlzLl9sb2FkZWQpO1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCk6IHZvaWQge1xuICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX29uU3RlcHBlclJlc2l6ZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG4gICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuX2xvYWRlZCA9IHRydWU7XG4gICAgICB0aGlzLl9jb25maWd1cmUoKTtcblxuICAgICAgaWYgKHRoaXMuX3JlcXVlc3RlZFNlbGVjdGVkICYmIHRoaXMuc3RlcHMuaW5kZXhPZih0aGlzLl9yZXF1ZXN0ZWRTZWxlY3RlZCkgIT09IC0xKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IHRoaXMuc3RlcHMuaW5kZXhPZih0aGlzLl9yZXF1ZXN0ZWRTZWxlY3RlZCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX3JlcXVlc3RlZFNlbGVjdGVkSW5kZXgpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEluZGV4ID0gdGhpcy5fcmVxdWVzdGVkU2VsZWN0ZWRJbmRleDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcyk7XG4gICAgICB0aGlzLl9jaGVja09yaWVudGF0aW9uKCk7XG4gICAgICAvLyBSZW1vdmUgZGlzYWJsZS1hbmltYXRpb24gc3RhdGUgYWZ0ZXIgY29tcG9uZW50IGluaXRcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5pbnRlcm5hbHMuc3RhdGVzLmRlbGV0ZSgnZGlzYWJsZS1hbmltYXRpb24nKSwgREVCT1VOQ0VfVElNRSk7XG4gICAgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdvcmllbnRhdGlvbicpICYmICF0aGlzLmhvcml6b250YWxGcm9tKSB7XG4gICAgICB0aGlzLl91cGRhdGVMYWJlbHMoKTtcbiAgICAgIHRoaXMuX3NldE1hcmtlclNpemUoKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnbGluZWFyJykgJiYgdGhpcy5fbG9hZGVkKSB7XG4gICAgICB0aGlzLl9jb25maWd1cmVMaW5lYXJNb2RlKCk7XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygnc2l6ZScpKSB7XG4gICAgICB0aGlzLl9zZXRNYXJrZXJTaXplKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaGFuZGxlS2V5RG93bihldnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICBjb25zdCBlbmFibGVkU3RlcHM6IFNiYlN0ZXBFbGVtZW50W10gPSB0aGlzLl9lbmFibGVkU3RlcHM7XG5cbiAgICBpZiAoXG4gICAgICAhZW5hYmxlZFN0ZXBzIHx8XG4gICAgICAvLyBkb24ndCB0cmFwIG5lc3RlZCBoYW5kbGluZ1xuICAgICAgKChldnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50KSAhPT0gdGhpcyAmJiAoZXZ0LnRhcmdldCBhcyBIVE1MRWxlbWVudCkucGFyZW50RWxlbWVudCAhPT0gdGhpcylcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNBcnJvd0tleVByZXNzZWQoZXZ0KSkge1xuICAgICAgY29uc3QgY3VycmVudDogbnVtYmVyID0gZW5hYmxlZFN0ZXBzLmluZGV4T2YodGhpcy5zZWxlY3RlZCEpO1xuICAgICAgY29uc3QgbmV4dEluZGV4OiBudW1iZXIgPSBnZXROZXh0RWxlbWVudEluZGV4KGV2dCwgY3VycmVudCwgZW5hYmxlZFN0ZXBzLmxlbmd0aCk7XG4gICAgICB0aGlzLl9zZWxlY3QoZW5hYmxlZFN0ZXBzW25leHRJbmRleF0pO1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXN0ZXBwZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zdGVwcGVyX19sYWJlbHNcIiByb2xlPVwidGFibGlzdFwiPlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJzdGVwLWxhYmVsXCIgQHNsb3RjaGFuZ2U9JHt0aGlzLl9jb25maWd1cmV9Pjwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc3RlcHBlcl9fc3RlcHNcIj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwic3RlcFwiIEBzbG90Y2hhbmdlPSR7dGhpcy5fY29uZmlndXJlfT48L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXN0ZXBwZXInOiBTYmJTdGVwcGVyRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3FCQSxJQUFNLGdCQUFnQjtBQUV0QixJQUFNLGdCQUF3QztDQUM1QyxNQUFNO0NBQ04sT0FBTztDQUNQLE9BQU87Q0FDUCxPQUFPO0NBQ1I7QUFFRCxJQUFhLHFCQUFiLGNBQXdDLE1BQUs7Q0FhM0MsWUFDRSxlQUNBLGVBQ0EsY0FDQSxjQUFtQztBQUVuQyxRQUFNLGNBQWM7R0FBRSxTQUFTO0dBQU0sVUFBVTtHQUFNLENBQUM7QUFDdEQsT0FBSyxnQkFBZ0I7QUFDckIsT0FBSyxnQkFBZ0I7QUFDckIsT0FBSyxlQUFlO0FBQ3BCLE9BQUssZUFBZTs7Ozs7Ozs7OztJQVVYLDJCQUFpQjttQkFBUzs7Ozs7Ozs7Ozs7Ozs7Y0FBMUIsMEJBQTBCLFlBQVU7Ozt5QkEwQjlDLFdBQVcsRUFDWCxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQTtxQ0FJM0IsU0FBUztJQUFFLFdB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
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import { css as e, html as t } from "lit";
|
|
2
|
-
import { SbbButtonBaseElement as n } from "./core/base-elements.js";
|
|
3
|
-
import { SbbDisabledMixin as r, appendAriaElements as i, removeAriaElements as a } from "./core/mixins.js";
|
|
4
|
-
import { boxSizingStyles as o } from "./core/styles.js";
|
|
5
|
-
import { SbbPropertyWatcherController as s } from "./core/controllers.js";
|
|
6
|
-
import { SbbIconNameMixin as c } from "./icon.js";
|
|
7
|
-
//#region src/elements/stepper/step-label/step-label.scss?lit&inline
|
|
8
|
-
var l = e`:host{--sbb-step-label-color: var(--sbb-color-4);--sbb-step-label-animation-duration: var( --sbb-disable-animation-duration, var(--sbb-animation-duration-2x) );--sbb-step-label-prefix-size: var(--sbb-size-element-xxs);--sbb-step-label-prefix-border-style: solid;--sbb-step-label-prefix-border-color: var(--sbb-border-color-4-inverted);--sbb-step-label-prefix-background-color: var(--sbb-background-color-1);--sbb-step-label-gap: var(--sbb-spacing-fixed-4x);position:relative;min-width:0;max-width:fit-content}:host:before{--sbb-text-font-size: var(--sbb-text-font-size-xxs);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-text);letter-spacing:var(--sbb-typo-letter-spacing-text);font-size:var(--sbb-text-font-size);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);cursor:var(--sbb-step-label-cursor);color:var(--sbb-step-label-color);inset-block-start:calc(var(--sbb-text-font-size-l) * var(--sbb-typo-line-height-text) / 2 + var(--sbb-border-width-1x) / 2);inset-inline-start:calc(var(--sbb-step-label-prefix-size) / 2);line-height:1;z-index:1;transform:translate(-50%,calc(-50% + var(--sbb-step-label-translate-y-content-hover, 0rem)));transition:transform var(--sbb-step-label-animation-duration) var(--sbb-animation-easing)}@media(forced-colors:active){:host{--sbb-step-label-color: ButtonText;--sbb-step-label-prefix-border-color: ButtonText}}:host(:is(:state(selected),[state--selected])){--sbb-text-font-size: var(--sbb-text-font-size-xxs);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-text);letter-spacing:var(--sbb-typo-letter-spacing-text);font-size:var(--sbb-text-font-size);font-weight:700;--sbb-step-label-color: var(--sbb-color-3)}@media(forced-colors:active){:host(:is(:state(selected),[state--selected])){--sbb-step-label-color: Highlight !important}}:host(:is(:state(size-s),[state--size-s])){--sbb-step-label-gap: var(--sbb-spacing-fixed-3x);--sbb-step-label-prefix-size: var(--sbb-size-element-xxxs)}:host(:is(:state(size-s),[state--size-s])):before{inset-block-start:calc(var(--sbb-text-font-size-m) * var(--sbb-typo-line-height-text) / 2 + var(--sbb-border-width-1x) / 2)}:host(:disabled){--sbb-step-label-color: var(--sbb-color-granite);--sbb-step-label-color: light-dark(var(--sbb-color-granite), var(--sbb-color-graphite));--sbb-step-label-prefix-border-style: dashed}@media(forced-colors:active){:host(:disabled){--sbb-step-label-color: GrayText !important}}@media(any-hover:hover){:host(:hover:not(:disabled)){--sbb-step-label-cursor: var(--sbb-cursor-pointer);--sbb-step-label-prefix-background-color: var(--sbb-background-color-3);--sbb-step-label-translate-y-content-hover: -.0625rem;--sbb-step-label-prefix-size-grow-hover: calc(var(--sbb-border-width-2x) * -1)}}:host(:focus-visible){outline-offset:var(--sbb-focus-outline-offset);outline:var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);border-radius:var(--sbb-border-radius-1x)}:host(:is(:state(orientation-vertical),[state--orientation-vertical])){transition:margin var(--sbb-stepper-animation-duration) var(--sbb-animation-easing)}:host(:is(:state(orientation-vertical),[state--orientation-vertical]):not(:first-of-type)){margin-block-start:var(--sbb-spacing-fixed-6x)}:host(:is(:state(selected),[state--selected]):is(:state(orientation-vertical),[state--orientation-vertical])){margin-block-end:var(--sbb-spacing-fixed-8x)}.sbb-step-label{--sbb-text-font-size: var(--sbb-text-font-size-l);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-text);letter-spacing:var(--sbb-typo-letter-spacing-text);font-size:var(--sbb-text-font-size);font-weight:700;cursor:var(--sbb-step-label-cursor);position:relative;display:flex;gap:var(--sbb-step-label-gap);color:var(--sbb-step-label-color)}:host(:is(:state(size-s),[state--size-s])) .sbb-step-label{--sbb-text-font-size: var(--sbb-text-font-size-m);font-family:var(--sbb-typo-font-family);font-weight:400;line-height:var(--sbb-typo-line-height-text);letter-spacing:var(--sbb-typo-letter-spacing-text);font-size:var(--sbb-text-font-size);font-weight:700}.sbb-step-label__prefix{position:relative;display:flex;flex-shrink:0;align-items:center;justify-content:center;width:var(--sbb-step-label-prefix-size);height:var(--sbb-step-label-prefix-size);inset-block-start:calc(1em * var(--sbb-typo-line-height-text) / 2 + var(--sbb-border-width-1x) / 2 - var(--sbb-step-label-prefix-size) / 2)}.sbb-step-label__prefix:before{content:"";position:absolute;inset:calc(var(--sbb-step-label-prefix-size-grow-hover, 0rem));border-radius:var(--sbb-border-radius-infinity);border:var(--sbb-border-width-1x) var(--sbb-step-label-prefix-border-style) var(--sbb-step-label-prefix-border-color);background-color:var(--sbb-step-label-prefix-background-color);transition-duration:var(--sbb-step-label-animation-duration);transition-timing-function:var(--sbb-animation-easing);transition-property:background-color,inset}:host(:is(:state(orientation-horizontal),[state--orientation-horizontal])) .sbb-step-label__text{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}::slotted(sbb-icon),sbb-icon{z-index:1;background-color:var(--sbb-step-label-prefix-background-color);border-radius:var(--sbb-border-radius-infinity);transform:translateY(var(--sbb-step-label-translate-y-content-hover, 0rem));transition-duration:var(--sbb-step-label-animation-duration);transition-timing-function:var(--sbb-animation-easing);transition-property:background-color,transform}`, u = 0, d = class extends c(r(n)) {
|
|
9
|
-
static {
|
|
10
|
-
this.elementName = "sbb-step-label";
|
|
11
|
-
}
|
|
12
|
-
static {
|
|
13
|
-
this.role = "tab";
|
|
14
|
-
}
|
|
15
|
-
static {
|
|
16
|
-
this.styles = [o, l];
|
|
17
|
-
}
|
|
18
|
-
get step() {
|
|
19
|
-
return this._step;
|
|
20
|
-
}
|
|
21
|
-
get stepper() {
|
|
22
|
-
return this.closest("sbb-stepper");
|
|
23
|
-
}
|
|
24
|
-
set disabled(e) {
|
|
25
|
-
super.disabled = e, this.toggleState("user-disabled", e);
|
|
26
|
-
}
|
|
27
|
-
get disabled() {
|
|
28
|
-
return super.disabled;
|
|
29
|
-
}
|
|
30
|
-
constructor() {
|
|
31
|
-
super(), this._step = null, this.addEventListener?.("click", () => {
|
|
32
|
-
let e = this.stepper;
|
|
33
|
-
e && this.step && this._isNotDeactivatedByLinearMode(this.step) && (e.selected = this.step);
|
|
34
|
-
}), this.addController(new s(this, () => this.stepper, {
|
|
35
|
-
orientation: (e) => {
|
|
36
|
-
this._previousOrientation && this.internals.states.delete(`orientation-${this._previousOrientation}`), this._previousOrientation = e.orientation, this._previousOrientation && this.internals.states.add(`orientation-${this._previousOrientation}`);
|
|
37
|
-
},
|
|
38
|
-
size: (e) => {
|
|
39
|
-
this._previousSize && this.internals.states.delete(`size-${this._previousSize}`), this._previousSize = e.size, this._previousSize && this.internals.states.add(`size-${this._previousSize}`);
|
|
40
|
-
}
|
|
41
|
-
}));
|
|
42
|
-
}
|
|
43
|
-
_isNotDeactivatedByLinearMode(e) {
|
|
44
|
-
let t = this.stepper;
|
|
45
|
-
if (t?.linear && t.selectedIndex !== null) {
|
|
46
|
-
let n = t.steps.indexOf(e);
|
|
47
|
-
return n < t.selectedIndex || n === t.selectedIndex + 1;
|
|
48
|
-
}
|
|
49
|
-
return !0;
|
|
50
|
-
}
|
|
51
|
-
connectedCallback() {
|
|
52
|
-
super.connectedCallback(), this.id ||= `sbb-step-label-${u++}`, this.slot ||= "step-label", this.internals.ariaSelected = "false", this.tabIndex = -1, this._assignStep();
|
|
53
|
-
}
|
|
54
|
-
select() {
|
|
55
|
-
this.tabIndex = 0, this.internals.ariaSelected = "true", this.internals.states.add("selected");
|
|
56
|
-
}
|
|
57
|
-
deselect() {
|
|
58
|
-
this.tabIndex = -1, this.internals.ariaSelected = "false", this.internals.states.delete("selected");
|
|
59
|
-
}
|
|
60
|
-
configure(e, t, n) {
|
|
61
|
-
n && this._assignStep(), this.internals.ariaPosInSet = `${e}`, this.internals.ariaSetSize = `${t}`;
|
|
62
|
-
}
|
|
63
|
-
_assignStep() {
|
|
64
|
-
let e = this.nextElementSibling;
|
|
65
|
-
for (; e && e.localName !== "sbb-step";) e = e.nextElementSibling;
|
|
66
|
-
let t = e;
|
|
67
|
-
this.internals.ariaControlsElements = a(this.internals.ariaControlsElements, this._step), this._step = t instanceof Element ? t : null, this.internals.ariaControlsElements = i(this.internals.ariaControlsElements, this._step);
|
|
68
|
-
}
|
|
69
|
-
disable(e) {
|
|
70
|
-
super.disabled = e;
|
|
71
|
-
}
|
|
72
|
-
render() {
|
|
73
|
-
return t`
|
|
74
|
-
<div class="sbb-step-label">
|
|
75
|
-
<span class="sbb-step-label__prefix">${this.renderIconSlot()}</span>
|
|
76
|
-
<span class="sbb-step-label__text"><slot></slot></span>
|
|
77
|
-
</div>
|
|
78
|
-
`;
|
|
79
|
-
}
|
|
80
|
-
};
|
|
81
|
-
//#endregion
|
|
82
|
-
export { d as t };
|