@sbb-esta/lyne-elements-dev 4.9.0-dev.1774376412 → 4.9.0-dev.1774507634
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 +5 -0
- package/core.css +23 -0
- package/development/slider/slider.component.js +1 -1
- package/development/slider.component-QzF7A8Yl.js +456 -0
- package/development/slider.js +1 -1
- package/development/slider.pure.js +1 -1
- package/off-brand-theme.css +23 -0
- package/package.json +2 -2
- package/safety-theme.css +23 -0
- package/slider/slider.component.js +1 -1
- package/{slider.component-MdvM78XU.js → slider.component-D-yXlqJY.js} +2 -2
- package/slider.js +1 -1
- package/slider.pure.js +1 -1
- package/standard-theme.css +23 -0
- package/development/slider.component-w_WtVNx-.js +0 -479
package/core/styles/core.scss
CHANGED
|
@@ -194,6 +194,9 @@ $theme: 'standard' !default;
|
|
|
194
194
|
@use '../../signet/signet.global' as signet with (
|
|
195
195
|
$theme: $theme
|
|
196
196
|
);
|
|
197
|
+
@use '../../slider/slider.global' as slider with (
|
|
198
|
+
$theme: $theme
|
|
199
|
+
);
|
|
197
200
|
@use '../../status/status.global' as status with (
|
|
198
201
|
$theme: $theme
|
|
199
202
|
);
|
|
@@ -273,6 +276,7 @@ $theme: 'standard' !default;
|
|
|
273
276
|
@include selection-action-panel.base;
|
|
274
277
|
@include selection-expansion-panel.base;
|
|
275
278
|
@include signet.base;
|
|
279
|
+
@include slider.base;
|
|
276
280
|
@include status.base;
|
|
277
281
|
@include tab-group-common.base;
|
|
278
282
|
@include tab-label-common.base;
|
|
@@ -292,6 +296,7 @@ $theme: 'standard' !default;
|
|
|
292
296
|
@include visual-checkbox.base-forced-colors;
|
|
293
297
|
@include radio-button-common.base-forced-colors;
|
|
294
298
|
@include signet.base-forced-colors;
|
|
299
|
+
@include slider.base-forced-colors;
|
|
295
300
|
}
|
|
296
301
|
|
|
297
302
|
// Train formation
|
package/core.css
CHANGED
|
@@ -1632,6 +1632,27 @@ slot[name=error]::slotted(*) {
|
|
|
1632
1632
|
--sbb-signet-panel-color: var(--sbb-color-brand);
|
|
1633
1633
|
--sbb-signet-icon-color: var(--sbb-color-white);
|
|
1634
1634
|
--sbb-signet-aspect-ratio: 2 / 1;
|
|
1635
|
+
--sbb-slider-line-height: 0.25rem;
|
|
1636
|
+
--sbb-slider-knob-size: 1.75rem;
|
|
1637
|
+
--sbb-slider-knob-size-active: 1.9375rem;
|
|
1638
|
+
--sbb-slider-knob-border-size: 0.1875rem;
|
|
1639
|
+
--sbb-slider-knob-border-style: solid;
|
|
1640
|
+
--sbb-slider-knob-color: var(--sbb-background-color-1);
|
|
1641
|
+
--sbb-slider-knob-border-color: var(--sbb-color-primary);
|
|
1642
|
+
--sbb-slider-icon-color: var(--sbb-color-1);
|
|
1643
|
+
--sbb-slider-selected-line-disabled-color: var(--sbb-color-smoke);
|
|
1644
|
+
--sbb-slider-selected-line-disabled-color: light-dark(
|
|
1645
|
+
var(--sbb-color-smoke),
|
|
1646
|
+
var(--sbb-color-cement)
|
|
1647
|
+
);
|
|
1648
|
+
--sbb-slider-line-color: var(--sbb-border-color-5);
|
|
1649
|
+
--sbb-slider-selected-line-color: var(--sbb-color-primary);
|
|
1650
|
+
--sbb-slider-line-disabled-color: var(--sbb-color-graphite);
|
|
1651
|
+
--sbb-slider-line-disabled-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-granite));
|
|
1652
|
+
--sbb-slider-width: 25rem;
|
|
1653
|
+
--sbb-slider-min-width: 9.375rem;
|
|
1654
|
+
--sbb-slider-gap: var(--sbb-spacing-fixed-2x);
|
|
1655
|
+
--sbb-slider-padding-block: 0.125rem;
|
|
1635
1656
|
--sbb-status-color: var(--sbb-color-4);
|
|
1636
1657
|
--sbb-status-gap: var(--sbb-spacing-fixed-1x);
|
|
1637
1658
|
--sbb-status-font-size: var(--sbb-text-font-size-s);
|
|
@@ -1709,6 +1730,8 @@ slot[name=error]::slotted(*) {
|
|
|
1709
1730
|
--sbb-signet-background-color: ButtonText !important;
|
|
1710
1731
|
--sbb-signet-panel-color: ButtonText !important;
|
|
1711
1732
|
--sbb-signet-icon-color: Canvas !important;
|
|
1733
|
+
--sbb-slider-selected-line-color: Highlight;
|
|
1734
|
+
--sbb-slider-line-color: CanvasText;
|
|
1712
1735
|
}
|
|
1713
1736
|
}
|
|
1714
1737
|
:root {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as SbbSliderElement } from "../slider.component-
|
|
1
|
+
import { t as SbbSliderElement } from "../slider.component-QzF7A8Yl.js";
|
|
2
2
|
export { SbbSliderElement };
|
|
@@ -0,0 +1,456 @@
|
|
|
1
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
+
import { css, html, nothing } from "lit";
|
|
3
|
+
import { property } from "lit/decorators.js";
|
|
4
|
+
import { SbbElement } from "./core/base-elements.js";
|
|
5
|
+
import { forceType, hostAttributes } from "./core/decorators.js";
|
|
6
|
+
import { SbbDisabledMixin, SbbFormAssociatedMixin, SbbReadonlyMixin } from "./core/mixins.js";
|
|
7
|
+
import { boxSizingStyles } from "./core/styles.js";
|
|
8
|
+
import "./icon.js";
|
|
9
|
+
import { ref } from "lit/directives/ref.js";
|
|
10
|
+
//#region src/elements/slider/slider.scss?lit&inline
|
|
11
|
+
var slider_default = css`@charset "UTF-8";
|
|
12
|
+
:host {
|
|
13
|
+
--_sbb-slider-value-fraction: 0;
|
|
14
|
+
outline: none !important;
|
|
15
|
+
display: inline-block;
|
|
16
|
+
min-width: var(--sbb-slider-min-width);
|
|
17
|
+
width: min(var(--sbb-slider-width), 100%);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
:host(:disabled) {
|
|
21
|
+
--sbb-slider-icon-color: var(--sbb-color-graphite);
|
|
22
|
+
--sbb-slider-icon-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-smoke));
|
|
23
|
+
--sbb-slider-knob-border-color: var(--sbb-border-color-5);
|
|
24
|
+
--sbb-slider-knob-border-size: var(--sbb-border-width-2x);
|
|
25
|
+
--sbb-slider-knob-border-style: dashed;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
:host([readonly]) {
|
|
29
|
+
--sbb-slider-icon-color: var(--sbb-color-5);
|
|
30
|
+
--sbb-slider-knob-border-color: var(--sbb-slider-selected-line-disabled-color);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
:host(:disabled),
|
|
34
|
+
:host([readonly]) {
|
|
35
|
+
--sbb-slider-line-color: var(--sbb-slider-line-disabled-color);
|
|
36
|
+
--sbb-slider-selected-line-color: var(--sbb-slider-selected-line-disabled-color);
|
|
37
|
+
}
|
|
38
|
+
@media (forced-colors: active) {
|
|
39
|
+
:host(:disabled),
|
|
40
|
+
:host([readonly]) {
|
|
41
|
+
--sbb-slider-icon-color: GrayText;
|
|
42
|
+
--sbb-slider-selected-line-disabled-color: GrayText;
|
|
43
|
+
--sbb-slider-line-disabled-color: GrayText;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.sbb-slider__height-container {
|
|
48
|
+
display: flex;
|
|
49
|
+
flex-direction: column;
|
|
50
|
+
}
|
|
51
|
+
.sbb-slider__height-container::before {
|
|
52
|
+
content: "";
|
|
53
|
+
user-select: none;
|
|
54
|
+
width: 0;
|
|
55
|
+
height: 0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.sbb-slider__wrapper {
|
|
59
|
+
display: flex;
|
|
60
|
+
gap: var(--sbb-slider-gap);
|
|
61
|
+
padding-block: var(--sbb-slider-padding-block);
|
|
62
|
+
color: var(--sbb-slider-icon-color);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.sbb-slider__container {
|
|
66
|
+
position: relative;
|
|
67
|
+
min-height: var(--sbb-size-icon-ui-small);
|
|
68
|
+
flex-grow: 1;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.sbb-slider__range-input {
|
|
72
|
+
position: absolute;
|
|
73
|
+
width: 100%;
|
|
74
|
+
inset: 0;
|
|
75
|
+
opacity: 0;
|
|
76
|
+
margin: 0;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
.sbb-slider__line {
|
|
80
|
+
position: absolute;
|
|
81
|
+
top: 50%;
|
|
82
|
+
transform: translateY(-50%);
|
|
83
|
+
height: var(--sbb-slider-line-height);
|
|
84
|
+
width: 100%;
|
|
85
|
+
background-color: var(--sbb-slider-line-color);
|
|
86
|
+
border-radius: var(--sbb-slider-line-height);
|
|
87
|
+
overflow: hidden;
|
|
88
|
+
pointer-events: none;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.sbb-slider__selected-line {
|
|
92
|
+
position: relative;
|
|
93
|
+
height: 100%;
|
|
94
|
+
background-color: var(--sbb-slider-selected-line-color);
|
|
95
|
+
width: calc(var(--_sbb-slider-value-fraction) * 100%);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
.sbb-slider__knob {
|
|
99
|
+
position: absolute;
|
|
100
|
+
top: 50%;
|
|
101
|
+
transform: translateY(-50%);
|
|
102
|
+
box-shadow: var(--sbb-box-shadow-level-5-hard);
|
|
103
|
+
width: var(--sbb-slider-knob-size);
|
|
104
|
+
height: var(--sbb-slider-knob-size);
|
|
105
|
+
inset-inline-start: calc(var(--_sbb-slider-value-fraction) * 100% - var(--sbb-slider-knob-size) * var(--_sbb-slider-value-fraction));
|
|
106
|
+
transition-property: width, height;
|
|
107
|
+
transition-duration: var(--sbb-disable-animation-duration, var(--sbb-animation-duration-1x));
|
|
108
|
+
transition-timing-function: ease-in;
|
|
109
|
+
background-color: var(--sbb-slider-knob-color);
|
|
110
|
+
border: var(--sbb-slider-knob-border-size) var(--sbb-slider-knob-border-style) var(--sbb-slider-knob-border-color);
|
|
111
|
+
border-radius: 50%;
|
|
112
|
+
pointer-events: none;
|
|
113
|
+
}
|
|
114
|
+
:host(:focus-visible) .sbb-slider__knob {
|
|
115
|
+
outline-offset: var(--sbb-focus-outline-offset);
|
|
116
|
+
outline: var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);
|
|
117
|
+
--sbb-slider-knob-size: var(--sbb-slider-knob-size-active);
|
|
118
|
+
}
|
|
119
|
+
:host(:not(:is(:disabled, [readonly]))) .sbb-slider__range-input:active ~ .sbb-slider__knob {
|
|
120
|
+
--sbb-slider-knob-size: var(--sbb-slider-knob-size-active);
|
|
121
|
+
}`;
|
|
122
|
+
//#endregion
|
|
123
|
+
//#region src/elements/slider/slider.component.ts
|
|
124
|
+
/**
|
|
125
|
+
* It displays an input knob that can be moved in a range.
|
|
126
|
+
*
|
|
127
|
+
* @slot prefix - Use this slot to render an icon on the left side of the input.
|
|
128
|
+
* @slot suffix - Use this slot to render an icon on the right side of the input.
|
|
129
|
+
* @event {InputEvent} input - The input event fires when the value has been changed as a direct result of a user action.
|
|
130
|
+
*/
|
|
131
|
+
var SbbSliderElement = (() => {
|
|
132
|
+
let _classDecorators = [hostAttributes({ tabindex: "0" })];
|
|
133
|
+
let _classDescriptor;
|
|
134
|
+
let _classExtraInitializers = [];
|
|
135
|
+
let _classThis;
|
|
136
|
+
let _classSuper = SbbDisabledMixin(SbbReadonlyMixin(SbbFormAssociatedMixin(SbbElement)));
|
|
137
|
+
let _instanceExtraInitializers = [];
|
|
138
|
+
let _set_value_decorators;
|
|
139
|
+
let _set_valueAsNumber_decorators;
|
|
140
|
+
let _set_min_decorators;
|
|
141
|
+
let _set_max_decorators;
|
|
142
|
+
let _startIcon_decorators;
|
|
143
|
+
let _startIcon_initializers = [];
|
|
144
|
+
let _startIcon_extraInitializers = [];
|
|
145
|
+
let _endIcon_decorators;
|
|
146
|
+
let _endIcon_initializers = [];
|
|
147
|
+
let _endIcon_extraInitializers = [];
|
|
148
|
+
var SbbSliderElement = class extends _classSuper {
|
|
149
|
+
static {
|
|
150
|
+
_classThis = this;
|
|
151
|
+
}
|
|
152
|
+
static {
|
|
153
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
154
|
+
_set_value_decorators = [property()];
|
|
155
|
+
_set_valueAsNumber_decorators = [property({
|
|
156
|
+
attribute: "value-as-number",
|
|
157
|
+
type: Number
|
|
158
|
+
})];
|
|
159
|
+
_set_min_decorators = [property()];
|
|
160
|
+
_set_max_decorators = [property()];
|
|
161
|
+
_startIcon_decorators = [forceType(), property({ attribute: "start-icon" })];
|
|
162
|
+
_endIcon_decorators = [forceType(), property({ attribute: "end-icon" })];
|
|
163
|
+
__esDecorate(this, null, _set_value_decorators, {
|
|
164
|
+
kind: "setter",
|
|
165
|
+
name: "value",
|
|
166
|
+
static: false,
|
|
167
|
+
private: false,
|
|
168
|
+
access: {
|
|
169
|
+
has: (obj) => "value" in obj,
|
|
170
|
+
set: (obj, value) => {
|
|
171
|
+
obj.value = value;
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
metadata: _metadata
|
|
175
|
+
}, null, _instanceExtraInitializers);
|
|
176
|
+
__esDecorate(this, null, _set_valueAsNumber_decorators, {
|
|
177
|
+
kind: "setter",
|
|
178
|
+
name: "valueAsNumber",
|
|
179
|
+
static: false,
|
|
180
|
+
private: false,
|
|
181
|
+
access: {
|
|
182
|
+
has: (obj) => "valueAsNumber" in obj,
|
|
183
|
+
set: (obj, value) => {
|
|
184
|
+
obj.valueAsNumber = value;
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
metadata: _metadata
|
|
188
|
+
}, null, _instanceExtraInitializers);
|
|
189
|
+
__esDecorate(this, null, _set_min_decorators, {
|
|
190
|
+
kind: "setter",
|
|
191
|
+
name: "min",
|
|
192
|
+
static: false,
|
|
193
|
+
private: false,
|
|
194
|
+
access: {
|
|
195
|
+
has: (obj) => "min" in obj,
|
|
196
|
+
set: (obj, value) => {
|
|
197
|
+
obj.min = value;
|
|
198
|
+
}
|
|
199
|
+
},
|
|
200
|
+
metadata: _metadata
|
|
201
|
+
}, null, _instanceExtraInitializers);
|
|
202
|
+
__esDecorate(this, null, _set_max_decorators, {
|
|
203
|
+
kind: "setter",
|
|
204
|
+
name: "max",
|
|
205
|
+
static: false,
|
|
206
|
+
private: false,
|
|
207
|
+
access: {
|
|
208
|
+
has: (obj) => "max" in obj,
|
|
209
|
+
set: (obj, value) => {
|
|
210
|
+
obj.max = value;
|
|
211
|
+
}
|
|
212
|
+
},
|
|
213
|
+
metadata: _metadata
|
|
214
|
+
}, null, _instanceExtraInitializers);
|
|
215
|
+
__esDecorate(this, null, _startIcon_decorators, {
|
|
216
|
+
kind: "accessor",
|
|
217
|
+
name: "startIcon",
|
|
218
|
+
static: false,
|
|
219
|
+
private: false,
|
|
220
|
+
access: {
|
|
221
|
+
has: (obj) => "startIcon" in obj,
|
|
222
|
+
get: (obj) => obj.startIcon,
|
|
223
|
+
set: (obj, value) => {
|
|
224
|
+
obj.startIcon = value;
|
|
225
|
+
}
|
|
226
|
+
},
|
|
227
|
+
metadata: _metadata
|
|
228
|
+
}, _startIcon_initializers, _startIcon_extraInitializers);
|
|
229
|
+
__esDecorate(this, null, _endIcon_decorators, {
|
|
230
|
+
kind: "accessor",
|
|
231
|
+
name: "endIcon",
|
|
232
|
+
static: false,
|
|
233
|
+
private: false,
|
|
234
|
+
access: {
|
|
235
|
+
has: (obj) => "endIcon" in obj,
|
|
236
|
+
get: (obj) => obj.endIcon,
|
|
237
|
+
set: (obj, value) => {
|
|
238
|
+
obj.endIcon = value;
|
|
239
|
+
}
|
|
240
|
+
},
|
|
241
|
+
metadata: _metadata
|
|
242
|
+
}, _endIcon_initializers, _endIcon_extraInitializers);
|
|
243
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, {
|
|
244
|
+
kind: "class",
|
|
245
|
+
name: _classThis.name,
|
|
246
|
+
metadata: _metadata
|
|
247
|
+
}, null, _classExtraInitializers);
|
|
248
|
+
SbbSliderElement = _classThis = _classDescriptor.value;
|
|
249
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, {
|
|
250
|
+
enumerable: true,
|
|
251
|
+
configurable: true,
|
|
252
|
+
writable: true,
|
|
253
|
+
value: _metadata
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
static {
|
|
257
|
+
this.elementName = "sbb-slider";
|
|
258
|
+
}
|
|
259
|
+
static {
|
|
260
|
+
this.role = "slider";
|
|
261
|
+
}
|
|
262
|
+
static {
|
|
263
|
+
this.styles = [boxSizingStyles, slider_default];
|
|
264
|
+
}
|
|
265
|
+
static {
|
|
266
|
+
this.events = { didChange: "didChange" };
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Value of the form element.
|
|
270
|
+
* If no value is provided, default is the middle point between min and max.
|
|
271
|
+
*/
|
|
272
|
+
set value(value) {
|
|
273
|
+
if (this._isValidNumber(value)) this._value = this._boundBetweenMinMax(value);
|
|
274
|
+
else this._value = null;
|
|
275
|
+
this.internals.ariaValueNow = this.value;
|
|
276
|
+
}
|
|
277
|
+
get value() {
|
|
278
|
+
return this._value ?? this._defaultValue();
|
|
279
|
+
}
|
|
280
|
+
/** Numeric value for the inner HTMLInputElement. */
|
|
281
|
+
set valueAsNumber(value) {
|
|
282
|
+
this.value = value?.toString() ?? null;
|
|
283
|
+
}
|
|
284
|
+
get valueAsNumber() {
|
|
285
|
+
return Number(this.value);
|
|
286
|
+
}
|
|
287
|
+
/** Minimum acceptable value for the inner HTMLInputElement. */
|
|
288
|
+
set min(value) {
|
|
289
|
+
if (!this._isValidNumber(value)) return;
|
|
290
|
+
this._min = value;
|
|
291
|
+
this.internals.ariaValueMin = this.min;
|
|
292
|
+
const boundValue = this._boundBetweenMinMax(this.value);
|
|
293
|
+
if (this.value !== boundValue) this.value = boundValue;
|
|
294
|
+
}
|
|
295
|
+
get min() {
|
|
296
|
+
return this._min;
|
|
297
|
+
}
|
|
298
|
+
/** Maximum acceptable value for the inner HTMLInputElement. */
|
|
299
|
+
set max(value) {
|
|
300
|
+
if (!this._isValidNumber(value)) return;
|
|
301
|
+
this._max = value;
|
|
302
|
+
this.internals.ariaValueMax = this.max;
|
|
303
|
+
const boundValue = this._boundBetweenMinMax(this.value);
|
|
304
|
+
if (this.value !== boundValue) this.value = boundValue;
|
|
305
|
+
}
|
|
306
|
+
get max() {
|
|
307
|
+
return this._max;
|
|
308
|
+
}
|
|
309
|
+
#startIcon_accessor_storage;
|
|
310
|
+
/** Name of the icon at component's start, which will be forward to the nested `sbb-icon`. */
|
|
311
|
+
get startIcon() {
|
|
312
|
+
return this.#startIcon_accessor_storage;
|
|
313
|
+
}
|
|
314
|
+
set startIcon(value) {
|
|
315
|
+
this.#startIcon_accessor_storage = value;
|
|
316
|
+
}
|
|
317
|
+
#endIcon_accessor_storage;
|
|
318
|
+
/** Name of the icon at component's end, which will be forward to the nested `sbb-icon`. */
|
|
319
|
+
get endIcon() {
|
|
320
|
+
return this.#endIcon_accessor_storage;
|
|
321
|
+
}
|
|
322
|
+
set endIcon(value) {
|
|
323
|
+
this.#endIcon_accessor_storage = value;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Form type of element.
|
|
327
|
+
* @default 'range'
|
|
328
|
+
*/
|
|
329
|
+
get type() {
|
|
330
|
+
return "range";
|
|
331
|
+
}
|
|
332
|
+
constructor() {
|
|
333
|
+
super();
|
|
334
|
+
this._value = (__runInitializers(this, _instanceExtraInitializers), null);
|
|
335
|
+
this._min = "0";
|
|
336
|
+
this._max = "100";
|
|
337
|
+
this.#startIcon_accessor_storage = __runInitializers(this, _startIcon_initializers, "");
|
|
338
|
+
this.#endIcon_accessor_storage = (__runInitializers(this, _startIcon_extraInitializers), __runInitializers(this, _endIcon_initializers, ""));
|
|
339
|
+
/** Reference to the inner HTMLInputElement with type='range'. */
|
|
340
|
+
this._rangeInput = __runInitializers(this, _endIcon_extraInitializers);
|
|
341
|
+
this.addEventListener?.("keydown", (e) => this._handleKeydown(e));
|
|
342
|
+
}
|
|
343
|
+
willUpdate(changedProperties) {
|
|
344
|
+
super.willUpdate(changedProperties);
|
|
345
|
+
if (changedProperties.has("readOnly")) this.internals.ariaReadOnly = Boolean(this.readOnly).toString();
|
|
346
|
+
this.style?.setProperty("--_sbb-slider-value-fraction", this._valueFraction().toString());
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* The reset value is the attribute value (the setup value). If not present, calculates the default.
|
|
350
|
+
* @internal
|
|
351
|
+
*/
|
|
352
|
+
formResetCallback() {
|
|
353
|
+
this.value = this.getAttribute("value") ?? this._defaultValue();
|
|
354
|
+
}
|
|
355
|
+
/**
|
|
356
|
+
* @internal
|
|
357
|
+
*/
|
|
358
|
+
formStateRestoreCallback(state, _reason) {
|
|
359
|
+
this.value = state;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* If no value is provided, default is the middle point between min and max
|
|
363
|
+
* (see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/range#value)
|
|
364
|
+
*/
|
|
365
|
+
_defaultValue() {
|
|
366
|
+
return (+this.min + (+this.max - +this.min) / 2).toString();
|
|
367
|
+
}
|
|
368
|
+
_isValidNumber(value) {
|
|
369
|
+
return !!value && !isNaN(Number(value));
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Restrains the value between the min and max
|
|
373
|
+
*/
|
|
374
|
+
_boundBetweenMinMax(value) {
|
|
375
|
+
return Math.max(+this.min, Math.min(+this.max, +value)).toString();
|
|
376
|
+
}
|
|
377
|
+
_valueFraction() {
|
|
378
|
+
const value = this.valueAsNumber;
|
|
379
|
+
const min = +this.min;
|
|
380
|
+
const max = +this.max;
|
|
381
|
+
const mathFraction = (value - min) / (max - min);
|
|
382
|
+
return isNaN(mathFraction) ? 0 : Math.max(0, Math.min(1, mathFraction));
|
|
383
|
+
}
|
|
384
|
+
async _handleKeydown(event) {
|
|
385
|
+
if (event.key !== "Tab") event.preventDefault();
|
|
386
|
+
if (this.readOnly) return;
|
|
387
|
+
if (event.key === "Home") this._rangeInput.value = this.min;
|
|
388
|
+
else if (event.key === "End") this._rangeInput.value = this.max;
|
|
389
|
+
else if (event.key === "ArrowLeft" || event.key === "ArrowDown") this._rangeInput.stepDown();
|
|
390
|
+
else if (event.key === "ArrowRight" || event.key === "ArrowUp") this._rangeInput.stepUp();
|
|
391
|
+
else if (event.key === "PageDown") this._rangeInput.stepDown((+this.max - +this.min) / 10);
|
|
392
|
+
else if (event.key === "PageUp") this._rangeInput.stepUp((+this.max - +this.min) / 10);
|
|
393
|
+
else return;
|
|
394
|
+
this._rangeInput.dispatchEvent(new InputEvent("input", {
|
|
395
|
+
bubbles: true,
|
|
396
|
+
cancelable: true,
|
|
397
|
+
composed: true
|
|
398
|
+
}));
|
|
399
|
+
this._rangeInput.dispatchEvent(new Event("change", { bubbles: true }));
|
|
400
|
+
}
|
|
401
|
+
/** Emits the change event. */
|
|
402
|
+
_dispatchChangeEvent() {
|
|
403
|
+
/**
|
|
404
|
+
* The change event is fired when the user modifies the element's value.
|
|
405
|
+
* Unlike the input event, the change event is not necessarily fired
|
|
406
|
+
* for each alteration to an element's value.
|
|
407
|
+
*/
|
|
408
|
+
this.dispatchEvent(new Event("change", { bubbles: true }));
|
|
409
|
+
/**
|
|
410
|
+
* Deprecated. Mirrors change event for React. Will be removed once React properly supports change events.
|
|
411
|
+
* @deprecated
|
|
412
|
+
*/
|
|
413
|
+
this.dispatchEvent(new Event("didChange", { bubbles: true }));
|
|
414
|
+
}
|
|
415
|
+
render() {
|
|
416
|
+
return html`
|
|
417
|
+
<div class="sbb-slider__height-container">
|
|
418
|
+
<div class="sbb-slider__wrapper">
|
|
419
|
+
<slot name="prefix">
|
|
420
|
+
${this.startIcon ? html`<sbb-icon name="${this.startIcon}"></sbb-icon>` : nothing}
|
|
421
|
+
</slot>
|
|
422
|
+
<div class="sbb-slider__container">
|
|
423
|
+
<input
|
|
424
|
+
tabindex="-1"
|
|
425
|
+
min=${this.min}
|
|
426
|
+
max=${this.max}
|
|
427
|
+
?disabled=${this.disabled || this.formDisabled || this.readOnly}
|
|
428
|
+
value=${this.value || nothing}
|
|
429
|
+
class="sbb-slider__range-input"
|
|
430
|
+
type="range"
|
|
431
|
+
@change=${() => this._dispatchChangeEvent()}
|
|
432
|
+
@input=${() => this.value = this._rangeInput.value}
|
|
433
|
+
${ref((input) => this._rangeInput = input)}
|
|
434
|
+
/>
|
|
435
|
+
<div class="sbb-slider__line">
|
|
436
|
+
<div class="sbb-slider__selected-line"></div>
|
|
437
|
+
</div>
|
|
438
|
+
<div class="sbb-slider__knob"></div>
|
|
439
|
+
</div>
|
|
440
|
+
<slot name="suffix">
|
|
441
|
+
${this.endIcon ? html`<sbb-icon name="${this.endIcon}"></sbb-icon>` : nothing}
|
|
442
|
+
</slot>
|
|
443
|
+
</div>
|
|
444
|
+
</div>
|
|
445
|
+
`;
|
|
446
|
+
}
|
|
447
|
+
static {
|
|
448
|
+
__runInitializers(_classThis, _classExtraInitializers);
|
|
449
|
+
}
|
|
450
|
+
};
|
|
451
|
+
return _classThis;
|
|
452
|
+
})();
|
|
453
|
+
//#endregion
|
|
454
|
+
export { SbbSliderElement as t };
|
|
455
|
+
|
|
456
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC1RekY3QThZbC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2xpZGVyL3NsaWRlci5zY3NzP2xpdCZpbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2xpZGVyL3NsaWRlci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICAtLV9zYmItc2xpZGVyLXZhbHVlLWZyYWN0aW9uOiAwO1xuXG4gIC8vIFVzZSAhaW1wb3J0YW50IGhlcmUgdG8gbm90IGludGVyZmVyZSB3aXRoIEZpcmVmb3ggZm9jdXMgcmluZyBkZWZpbml0aW9uXG4gIC8vIHdoaWNoIGFwcGVhcnMgaW4gbm9ybWFsaXplIENTUyBvZiBzZXZlcmFsIGZyYW1ld29ya3MuXG4gIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBtaW4td2lkdGg6IHZhcigtLXNiYi1zbGlkZXItbWluLXdpZHRoKTtcbiAgd2lkdGg6IG1pbih2YXIoLS1zYmItc2xpZGVyLXdpZHRoKSwgMTAwJSk7XG59XG5cbjpob3N0KDpkaXNhYmxlZCkge1xuICAtLXNiYi1zbGlkZXItaWNvbi1jb2xvcjogbGlnaHQtZGFyayh2YXIoLS1zYmItY29sb3ItZ3JhcGhpdGUpLCB2YXIoLS1zYmItY29sb3Itc21va2UpKTtcbiAgLS1zYmItc2xpZGVyLWtub2ItYm9yZGVyLWNvbG9yOiB2YXIoLS1zYmItYm9yZGVyLWNvbG9yLTUpO1xuICAtLXNiYi1zbGlkZXIta25vYi1ib3JkZXItc2l6ZTogdmFyKC0tc2JiLWJvcmRlci13aWR0aC0yeCk7XG4gIC0tc2JiLXNsaWRlci1rbm9iLWJvcmRlci1zdHlsZTogZGFzaGVkO1xufVxuXG46aG9zdChbcmVhZG9ubHldKSB7XG4gIC0tc2JiLXNsaWRlci1pY29uLWNvbG9yOiB2YXIoLS1zYmItY29sb3ItNSk7XG4gIC0tc2JiLXNsaWRlci1rbm9iLWJvcmRlci1jb2xvcjogdmFyKC0tc2JiLXNsaWRlci1zZWxlY3RlZC1saW5lLWRpc2FibGVkLWNvbG9yKTtcbn1cblxuOmhvc3QoOmRpc2FibGVkKSxcbjpob3N0KFtyZWFkb25seV0pIHtcbiAgLS1zYmItc2xpZGVyLWxpbmUtY29sb3I6IHZhcigtLXNiYi1zbGlkZXItbGluZS1kaXNhYmxlZC1jb2xvcik7XG4gIC0tc2JiLXNsaWRlci1zZWxlY3RlZC1saW5lLWNvbG9yOiB2YXIoLS1zYmItc2xpZGVyLXNlbGVjdGVkLWxpbmUtZGlzYWJsZWQtY29sb3IpO1xuXG4gIEBpbmNsdWRlIHNiYi5pZi1mb3JjZWQtY29sb3JzIHtcbiAgICAtLXNiYi1zbGlkZXItaWNvbi1jb2xvcjogR3JheVRleHQ7XG4gICAgLS1zYmItc2xpZGVyLXNlbGVjdGVkLWxpbmUtZGlzYWJsZWQtY29sb3I6IEdyYXlUZXh0O1xuICAgIC0tc2JiLXNsaWRlci1saW5lLWRpc2FibGVkLWNvbG9yOiBHcmF5VGV4dDtcbiAgfVxufVxuXG4uc2JiLXNsaWRlcl9faGVpZ2h0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgQGluY2x1ZGUgc2JiLnplcm8td2lkdGgtc3BhY2U7XG59XG5cbi5zYmItc2xpZGVyX193cmFwcGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiB2YXIoLS1zYmItc2xpZGVyLWdhcCk7XG4gIHBhZGRpbmctYmxvY2s6IHZhcigtLXNiYi1zbGlkZXItcGFkZGluZy1ibG9jayk7XG4gIGNvbG9yOiB2YXIoLS1zYmItc2xpZGVyLWljb24tY29sb3IpO1xufVxuXG4uc2JiLXNsaWRlcl9fY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtaW4taGVpZ2h0OiB2YXIoLS1zYmItc2l6ZS1pY29uLXVpLXNtYWxsKTtcbiAgZmxleC1ncm93OiAxO1xufVxuXG4uc2JiLXNsaWRlcl9fcmFuZ2UtaW5wdXQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHdpZHRoOiAxMDAlO1xuICBpbnNldDogMDtcbiAgb3BhY2l0eTogMDtcbiAgbWFyZ2luOiAwO1xufVxuXG4uc2JiLXNsaWRlcl9fbGluZSB7XG4gIEBpbmNsdWRlIHNiYi5hYnNvbHV0ZS1jZW50ZXIteTtcblxuICBoZWlnaHQ6IHZhcigtLXNiYi1zbGlkZXItbGluZS1oZWlnaHQpO1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLXNsaWRlci1saW5lLWNvbG9yKTtcbiAgYm9yZGVyLXJhZGl1czogdmFyKC0tc2JiLXNsaWRlci1saW5lLWhlaWdodCk7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uc2JiLXNsaWRlcl9fc2VsZWN0ZWQtbGluZSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItc2xpZGVyLXNlbGVjdGVkLWxpbmUtY29sb3IpO1xuICB3aWR0aDogY2FsYyh2YXIoLS1fc2JiLXNsaWRlci12YWx1ZS1mcmFjdGlvbikgKiAxMDAlKTtcbn1cblxuLnNiYi1zbGlkZXJfX2tub2Ige1xuICBAaW5jbHVkZSBzYmIuYWJzb2x1dGUtY2VudGVyLXk7XG5cbiAgYm94LXNoYWRvdzogdmFyKC0tc2JiLWJveC1zaGFkb3ctbGV2ZWwtNS1oYXJkKTtcbiAgd2lkdGg6IHZhcigtLXNiYi1zbGlkZXIta25vYi1zaXplKTtcbiAgaGVpZ2h0OiB2YXIoLS1zYmItc2xpZGVyLWtub2Itc2l6ZSk7XG4gIGluc2V0LWlubGluZS1zdGFydDogY2FsYyhcbiAgICBjYWxjKHZhcigtLV9zYmItc2xpZGVyLXZhbHVlLWZyYWN0aW9uKSAqIDEwMCUpIC0gdmFyKC0tc2JiLXNsaWRlci1rbm9iLXNpemUpICpcbiAgICAgIHZhcigtLV9zYmItc2xpZGVyLXZhbHVlLWZyYWN0aW9uKVxuICApO1xuICB0cmFuc2l0aW9uLXByb3BlcnR5OiB3aWR0aCwgaGVpZ2h0O1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1zYmItZGlzYWJsZS1hbmltYXRpb24tZHVyYXRpb24sIHZhcigtLXNiYi1hbmltYXRpb24tZHVyYXRpb24tMXgpKTtcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IGVhc2UtaW47XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1zbGlkZXIta25vYi1jb2xvcik7XG4gIGJvcmRlcjogdmFyKC0tc2JiLXNsaWRlci1rbm9iLWJvcmRlci1zaXplKSB2YXIoLS1zYmItc2xpZGVyLWtub2ItYm9yZGVyLXN0eWxlKVxuICAgIHZhcigtLXNiYi1zbGlkZXIta25vYi1ib3JkZXItY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiA1MCU7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuXG4gIDpob3N0KDpmb2N1cy12aXNpYmxlKSAmIHtcbiAgICBAaW5jbHVkZSBzYmIuZm9jdXMtb3V0bGluZTtcblxuICAgIC0tc2JiLXNsaWRlci1rbm9iLXNpemU6IHZhcigtLXNiYi1zbGlkZXIta25vYi1zaXplLWFjdGl2ZSk7XG4gIH1cblxuICAvLyBzbGlkZXIga25vYiByZXNpemUgb24gY2xpY2sgKGFjdGl2ZSAvIGZvY3VzKVxuICA6aG9zdCg6bm90KDppcyg6ZGlzYWJsZWQsIFtyZWFkb25seV0pKSkgLnNiYi1zbGlkZXJfX3JhbmdlLWlucHV0OmFjdGl2ZSB+ICYge1xuICAgIC0tc2JiLXNsaWRlci1rbm9iLXNpemU6IHZhcigtLXNiYi1zbGlkZXIta25vYi1zaXplLWFjdGl2ZSk7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgQ1NTUmVzdWx0R3JvdXAsIFByb3BlcnR5VmFsdWVzLCBUZW1wbGF0ZVJlc3VsdCB9IGZyb20gJ2xpdCc7XG5pbXBvcnQgeyBodG1sLCBub3RoaW5nIH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IHByb3BlcnR5IH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgcmVmIH0gZnJvbSAnbGl0L2RpcmVjdGl2ZXMvcmVmLmpzJztcblxuaW1wb3J0IHsgU2JiRWxlbWVudCB9IGZyb20gJy4uL2NvcmUvYmFzZS1lbGVtZW50cy50cyc7XG5pbXBvcnQgeyBmb3JjZVR5cGUsIGhvc3RBdHRyaWJ1dGVzIH0gZnJvbSAnLi4vY29yZS9kZWNvcmF0b3JzLnRzJztcbmltcG9ydCB7XG4gIHR5cGUgRm9ybVJlc3RvcmVSZWFzb24sXG4gIHR5cGUgRm9ybVJlc3RvcmVTdGF0ZSxcbiAgU2JiRGlzYWJsZWRNaXhpbixcbiAgU2JiRm9ybUFzc29jaWF0ZWRNaXhpbixcbiAgU2JiUmVhZG9ubHlNaXhpbixcbn0gZnJvbSAnLi4vY29yZS9taXhpbnMudHMnO1xuaW1wb3J0IHsgYm94U2l6aW5nU3R5bGVzIH0gZnJvbSAnLi4vY29yZS9zdHlsZXMudHMnO1xuXG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zbGlkZXIuc2Nzcz9saXQmaW5saW5lJztcblxuaW1wb3J0ICcuLi9pY29uLnRzJztcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhbiBpbnB1dCBrbm9iIHRoYXQgY2FuIGJlIG1vdmVkIGluIGEgcmFuZ2UuXG4gKlxuICogQHNsb3QgcHJlZml4IC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gaWNvbiBvbiB0aGUgbGVmdCBzaWRlIG9mIHRoZSBpbnB1dC5cbiAqIEBzbG90IHN1ZmZpeCAtIFVzZSB0aGlzIHNsb3QgdG8gcmVuZGVyIGFuIGljb24gb24gdGhlIHJpZ2h0IHNpZGUgb2YgdGhlIGlucHV0LlxuICogQGV2ZW50IHtJbnB1dEV2ZW50fSBpbnB1dCAtIFRoZSBpbnB1dCBldmVudCBmaXJlcyB3aGVuIHRoZSB2YWx1ZSBoYXMgYmVlbiBjaGFuZ2VkIGFzIGEgZGlyZWN0IHJlc3VsdCBvZiBhIHVzZXIgYWN0aW9uLlxuICovXG5leHBvcnRcbkBob3N0QXR0cmlidXRlcyh7XG4gIHRhYmluZGV4OiAnMCcsXG59KVxuY2xhc3MgU2JiU2xpZGVyRWxlbWVudCBleHRlbmRzIFNiYkRpc2FibGVkTWl4aW4oXG4gIFNiYlJlYWRvbmx5TWl4aW4oU2JiRm9ybUFzc29jaWF0ZWRNaXhpbihTYmJFbGVtZW50KSksXG4pIHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1zbGlkZXInO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IHJvbGUgPSAnc2xpZGVyJztcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgc3R5bGVdO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICBkaWRDaGFuZ2U6ICdkaWRDaGFuZ2UnLFxuICB9IGFzIGNvbnN0O1xuXG4gIC8qKlxuICAgKiBWYWx1ZSBvZiB0aGUgZm9ybSBlbGVtZW50LlxuICAgKiBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgZGVmYXVsdCBpcyB0aGUgbWlkZGxlIHBvaW50IGJldHdlZW4gbWluIGFuZCBtYXguXG4gICAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IHZhbHVlKHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gICAgaWYgKHRoaXMuX2lzVmFsaWROdW1iZXIodmFsdWUpKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuX2JvdW5kQmV0d2Vlbk1pbk1heCh2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy5pbnRlcm5hbHMuYXJpYVZhbHVlTm93ID0gdGhpcy52YWx1ZTtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlID8/IHRoaXMuX2RlZmF1bHRWYWx1ZSgpO1xuICB9XG4gIHByaXZhdGUgX3ZhbHVlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAvKiogTnVtZXJpYyB2YWx1ZSBmb3IgdGhlIGlubmVyIEhUTUxJbnB1dEVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3ZhbHVlLWFzLW51bWJlcicsIHR5cGU6IE51bWJlciB9KVxuICBwdWJsaWMgc2V0IHZhbHVlQXNOdW1iZXIodmFsdWU6IG51bWJlciB8IG51bGwpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWU/LnRvU3RyaW5nKCkgPz8gbnVsbDtcbiAgfVxuICBwdWJsaWMgZ2V0IHZhbHVlQXNOdW1iZXIoKTogbnVtYmVyIHwgbnVsbCB7XG4gICAgcmV0dXJuIE51bWJlcih0aGlzLnZhbHVlKTtcbiAgfVxuXG4gIC8qKiBNaW5pbXVtIGFjY2VwdGFibGUgdmFsdWUgZm9yIHRoZSBpbm5lciBIVE1MSW5wdXRFbGVtZW50LiAqL1xuICBAcHJvcGVydHkoKVxuICBwdWJsaWMgc2V0IG1pbih2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKCF0aGlzLl9pc1ZhbGlkTnVtYmVyKHZhbHVlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX21pbiA9IHZhbHVlO1xuICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFWYWx1ZU1pbiA9IHRoaXMubWluO1xuICAgIGNvbnN0IGJvdW5kVmFsdWUgPSB0aGlzLl9ib3VuZEJldHdlZW5NaW5NYXgodGhpcy52YWx1ZSk7XG4gICAgaWYgKHRoaXMudmFsdWUgIT09IGJvdW5kVmFsdWUpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBib3VuZFZhbHVlO1xuICAgIH1cbiAgfVxuICBwdWJsaWMgZ2V0IG1pbigpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH1cbiAgcHJpdmF0ZSBfbWluOiBzdHJpbmcgPSAnMCc7XG5cbiAgLyoqIE1heGltdW0gYWNjZXB0YWJsZSB2YWx1ZSBmb3IgdGhlIGlubmVyIEhUTUxJbnB1dEVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbWF4KHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuX2lzVmFsaWROdW1iZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWF4ID0gdmFsdWU7XG4gICAgdGhpcy5pbnRlcm5hbHMuYXJpYVZhbHVlTWF4ID0gdGhpcy5tYXg7XG4gICAgY29uc3QgYm91bmRWYWx1ZSA9IHRoaXMuX2JvdW5kQmV0d2Vlbk1pbk1heCh0aGlzLnZhbHVlKTtcbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gYm91bmRWYWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IGJvdW5kVmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgbWF4KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX21heDtcbiAgfVxuICBwcml2YXRlIF9tYXg6IHN0cmluZyA9ICcxMDAnO1xuXG4gIC8qKiBOYW1lIG9mIHRoZSBpY29uIGF0IGNvbXBvbmVudCdzIHN0YXJ0LCB3aGljaCB3aWxsIGJlIGZvcndhcmQgdG8gdGhlIG5lc3RlZCBgc2JiLWljb25gLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnc3RhcnQtaWNvbicgfSlcbiAgcHVibGljIGFjY2Vzc29yIHN0YXJ0SWNvbjogc3RyaW5nID0gJyc7XG5cbiAgLyoqIE5hbWUgb2YgdGhlIGljb24gYXQgY29tcG9uZW50J3MgZW5kLCB3aGljaCB3aWxsIGJlIGZvcndhcmQgdG8gdGhlIG5lc3RlZCBgc2JiLWljb25gLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnZW5kLWljb24nIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBlbmRJY29uOiBzdHJpbmcgPSAnJztcblxuICAvKipcbiAgICogRm9ybSB0eXBlIG9mIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdyYW5nZSdcbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAncmFuZ2UnO1xuICB9XG5cbiAgLyoqIFJlZmVyZW5jZSB0byB0aGUgaW5uZXIgSFRNTElucHV0RWxlbWVudCB3aXRoIHR5cGU9J3JhbmdlJy4gKi9cbiAgcHJpdmF0ZSBfcmFuZ2VJbnB1dCE6IEhUTUxJbnB1dEVsZW1lbnQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyPy4oJ2tleWRvd24nLCAoZSkgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihlKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoJ3JlYWRPbmx5JykpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLmFyaWFSZWFkT25seSA9IEJvb2xlYW4odGhpcy5yZWFkT25seSkudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgdGhpcy5zdHlsZT8uc2V0UHJvcGVydHkoJy0tX3NiYi1zbGlkZXItdmFsdWUtZnJhY3Rpb24nLCB0aGlzLl92YWx1ZUZyYWN0aW9uKCkudG9TdHJpbmcoKSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHJlc2V0IHZhbHVlIGlzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgKHRoZSBzZXR1cCB2YWx1ZSkuIElmIG5vdCBwcmVzZW50LCBjYWxjdWxhdGVzIHRoZSBkZWZhdWx0LlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBmb3JtUmVzZXRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICB0aGlzLnZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJykgPz8gdGhpcy5fZGVmYXVsdFZhbHVlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZm9ybVN0YXRlUmVzdG9yZUNhbGxiYWNrKFxuICAgIHN0YXRlOiBGb3JtUmVzdG9yZVN0YXRlIHwgbnVsbCxcbiAgICBfcmVhc29uOiBGb3JtUmVzdG9yZVJlYXNvbixcbiAgKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHN0YXRlIGFzIHN0cmluZyB8IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBkZWZhdWx0IGlzIHRoZSBtaWRkbGUgcG9pbnQgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKiAgKHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQvcmFuZ2UjdmFsdWUpXG4gICAqL1xuICBwcml2YXRlIF9kZWZhdWx0VmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKCt0aGlzLm1pbiArICgrdGhpcy5tYXggLSArdGhpcy5taW4pIC8gMikudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2lzVmFsaWROdW1iZXIodmFsdWU6IHN0cmluZyB8IG51bGwpOiB2YWx1ZSBpcyBzdHJpbmcge1xuICAgIHJldHVybiAhIXZhbHVlICYmICFpc05hTihOdW1iZXIodmFsdWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0cmFpbnMgdGhlIHZhbHVlIGJldHdlZW4gdGhlIG1pbiBhbmQgbWF4XG4gICAqL1xuICBwcml2YXRlIF9ib3VuZEJldHdlZW5NaW5NYXgodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1hdGgubWF4KCt0aGlzLm1pbiwgTWF0aC5taW4oK3RoaXMubWF4LCArdmFsdWUpKS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdmFsdWVGcmFjdGlvbigpOiBudW1iZXIge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZUFzTnVtYmVyITtcbiAgICBjb25zdCBtaW4gPSArdGhpcy5taW47XG4gICAgY29uc3QgbWF4ID0gK3RoaXMubWF4O1xuXG4gICAgY29uc3QgbWF0aEZyYWN0aW9uOiBudW1iZXIgPSAodmFsdWUgLSBtaW4pIC8gKG1heCAtIG1pbik7XG4gICAgcmV0dXJuIGlzTmFOKG1hdGhGcmFjdGlvbikgPyAwIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgbWF0aEZyYWN0aW9uKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gJ1RhYicpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucmVhZE9ubHkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSAnSG9tZScpIHtcbiAgICAgIHRoaXMuX3JhbmdlSW5wdXQudmFsdWUgPSB0aGlzLm1pbjtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0VuZCcpIHtcbiAgICAgIHRoaXMuX3JhbmdlSW5wdXQudmFsdWUgPSB0aGlzLm1heDtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93TGVmdCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJykge1xuICAgICAgdGhpcy5fcmFuZ2VJbnB1dC5zdGVwRG93bigpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnQXJyb3dSaWdodCcgfHwgZXZlbnQua2V5ID09PSAnQXJyb3dVcCcpIHtcbiAgICAgIHRoaXMuX3JhbmdlSW5wdXQuc3RlcFVwKCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdQYWdlRG93bicpIHtcbiAgICAgIHRoaXMuX3JhbmdlSW5wdXQuc3RlcERvd24oKCt0aGlzLm1heCAtICt0aGlzLm1pbikgLyAxMCk7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdQYWdlVXAnKSB7XG4gICAgICB0aGlzLl9yYW5nZUlucHV0LnN0ZXBVcCgoK3RoaXMubWF4IC0gK3RoaXMubWluKSAvIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFdlIGhhdmUgdG8gbWFudWFsbHkgZmlyZSBldmVudHMgYmVjYXVzZSBwcm9ncmFtbWF0aWMgY2hhbmdlcyBkb24ndCB0cmlnZ2VyIHRoZW1cbiAgICB0aGlzLl9yYW5nZUlucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgSW5wdXRFdmVudCgnaW5wdXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pLFxuICAgICk7XG4gICAgdGhpcy5fcmFuZ2VJbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgfVxuXG4gIC8qKiBFbWl0cyB0aGUgY2hhbmdlIGV2ZW50LiAqL1xuICBwcml2YXRlIF9kaXNwYXRjaENoYW5nZUV2ZW50KCk6IHZvaWQge1xuICAgIC8qKlxuICAgICAqIFRoZSBjaGFuZ2UgZXZlbnQgaXMgZmlyZWQgd2hlbiB0aGUgdXNlciBtb2RpZmllcyB0aGUgZWxlbWVudCdzIHZhbHVlLlxuICAgICAqIFVubGlrZSB0aGUgaW5wdXQgZXZlbnQsIHRoZSBjaGFuZ2UgZXZlbnQgaXMgbm90IG5lY2Vzc2FyaWx5IGZpcmVkXG4gICAgICogZm9yIGVhY2ggYWx0ZXJhdGlvbiB0byBhbiBlbGVtZW50J3MgdmFsdWUuXG4gICAgICovXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJywgeyBidWJibGVzOiB0cnVlIH0pKTtcblxuICAgIC8qKlxuICAgICAqIERlcHJlY2F0ZWQuIE1pcnJvcnMgY2hhbmdlIGV2ZW50IGZvciBSZWFjdC4gV2lsbCBiZSByZW1vdmVkIG9uY2UgUmVhY3QgcHJvcGVybHkgc3VwcG9ydHMgY2hhbmdlIGV2ZW50cy5cbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2RpZENoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2xpZGVyX19oZWlnaHQtY29udGFpbmVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2xpZGVyX193cmFwcGVyXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInByZWZpeFwiPlxuICAgICAgICAgICAgJHt0aGlzLnN0YXJ0SWNvbiA/IGh0bWxgPHNiYi1pY29uIG5hbWU9XCIke3RoaXMuc3RhcnRJY29ufVwiPjwvc2JiLWljb24+YCA6IG5vdGhpbmd9XG4gICAgICAgICAgPC9zbG90PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2xpZGVyX19jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICB0YWJpbmRleD1cIi0xXCJcbiAgICAgICAgICAgICAgbWluPSR7dGhpcy5taW59XG4gICAgICAgICAgICAgIG1heD0ke3RoaXMubWF4fVxuICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkIHx8IHRoaXMuZm9ybURpc2FibGVkIHx8IHRoaXMucmVhZE9ubHl9XG4gICAgICAgICAgICAgIHZhbHVlPSR7dGhpcy52YWx1ZSB8fCBub3RoaW5nfVxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1zbGlkZXJfX3JhbmdlLWlucHV0XCJcbiAgICAgICAgICAgICAgdHlwZT1cInJhbmdlXCJcbiAgICAgICAgICAgICAgQGNoYW5nZT0keygpID0+IHRoaXMuX2Rpc3BhdGNoQ2hhbmdlRXZlbnQoKX1cbiAgICAgICAgICAgICAgQGlucHV0PSR7KCkgPT4gKHRoaXMudmFsdWUgPSB0aGlzLl9yYW5nZUlucHV0LnZhbHVlKX1cbiAgICAgICAgICAgICAgJHtyZWYoKGlucHV0PzogRWxlbWVudCkgPT4gKHRoaXMuX3JhbmdlSW5wdXQgPSBpbnB1dCBhcyBIVE1MSW5wdXRFbGVtZW50KSl9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zbGlkZXJfX2xpbmVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zbGlkZXJfX3NlbGVjdGVkLWxpbmVcIj48L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1zbGlkZXJfX2tub2JcIj48L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8c2xvdCBuYW1lPVwic3VmZml4XCI+XG4gICAgICAgICAgICAke3RoaXMuZW5kSWNvbiA/IGh0bWxgPHNiYi1pY29uIG5hbWU9XCIke3RoaXMuZW5kSWNvbn1cIj48L3NiYi1pY29uPmAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvc2xvdD5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItc2xpZGVyJzogU2JiU2xpZGVyRWxlbWVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDK0JNLDBCQUFnQjt5QkFIckIsZUFBZSxFQUNkLFVBQVUsS0FDWCxDQUFDLENBQUE7Ozs7bUJBQzZCLGlCQUM3QixpQkFBaUIsdUJBQXVCLFdBQVcsQ0FBQyxDQUNyRDs7Ozs7Ozs7Ozs7O3NDQUY4QixZQUU5Qjs7Ozs7OzRCQVlF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
|
package/development/slider.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as SbbSliderElement } from "./slider.component-
|
|
1
|
+
import { t as SbbSliderElement } from "./slider.component-QzF7A8Yl.js";
|
|
2
2
|
export { SbbSliderElement };
|
package/off-brand-theme.css
CHANGED
|
@@ -1736,6 +1736,27 @@ slot[name=error]::slotted(*) {
|
|
|
1736
1736
|
--sbb-signet-panel-color: var(--sbb-color-brand);
|
|
1737
1737
|
--sbb-signet-icon-color: var(--sbb-color-white);
|
|
1738
1738
|
--sbb-signet-aspect-ratio: 2 / 1;
|
|
1739
|
+
--sbb-slider-line-height: 0.25rem;
|
|
1740
|
+
--sbb-slider-knob-size: 1.75rem;
|
|
1741
|
+
--sbb-slider-knob-size-active: 1.9375rem;
|
|
1742
|
+
--sbb-slider-knob-border-size: 0.1875rem;
|
|
1743
|
+
--sbb-slider-knob-border-style: solid;
|
|
1744
|
+
--sbb-slider-knob-color: var(--sbb-background-color-1);
|
|
1745
|
+
--sbb-slider-knob-border-color: var(--sbb-color-primary);
|
|
1746
|
+
--sbb-slider-icon-color: var(--sbb-color-1);
|
|
1747
|
+
--sbb-slider-selected-line-disabled-color: var(--sbb-color-smoke);
|
|
1748
|
+
--sbb-slider-selected-line-disabled-color: light-dark(
|
|
1749
|
+
var(--sbb-color-smoke),
|
|
1750
|
+
var(--sbb-color-cement)
|
|
1751
|
+
);
|
|
1752
|
+
--sbb-slider-line-color: var(--sbb-border-color-5);
|
|
1753
|
+
--sbb-slider-selected-line-color: var(--sbb-color-primary);
|
|
1754
|
+
--sbb-slider-line-disabled-color: var(--sbb-color-graphite);
|
|
1755
|
+
--sbb-slider-line-disabled-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-granite));
|
|
1756
|
+
--sbb-slider-width: 25rem;
|
|
1757
|
+
--sbb-slider-min-width: 9.375rem;
|
|
1758
|
+
--sbb-slider-gap: var(--sbb-spacing-fixed-2x);
|
|
1759
|
+
--sbb-slider-padding-block: 0.125rem;
|
|
1739
1760
|
--sbb-status-color: var(--sbb-color-4);
|
|
1740
1761
|
--sbb-status-gap: var(--sbb-spacing-fixed-1x);
|
|
1741
1762
|
--sbb-status-font-size: var(--sbb-text-font-size-s);
|
|
@@ -1813,6 +1834,8 @@ slot[name=error]::slotted(*) {
|
|
|
1813
1834
|
--sbb-signet-background-color: ButtonText !important;
|
|
1814
1835
|
--sbb-signet-panel-color: ButtonText !important;
|
|
1815
1836
|
--sbb-signet-icon-color: Canvas !important;
|
|
1837
|
+
--sbb-slider-selected-line-color: Highlight;
|
|
1838
|
+
--sbb-slider-line-color: CanvasText;
|
|
1816
1839
|
}
|
|
1817
1840
|
}
|
|
1818
1841
|
:root {
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sbb-esta/lyne-elements-dev",
|
|
3
|
-
"version": "4.9.0-dev.
|
|
3
|
+
"version": "4.9.0-dev.1774507634",
|
|
4
4
|
"description": "Lyne Design System",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"design system",
|
|
7
7
|
"web components",
|
|
8
8
|
"lit",
|
|
9
|
-
"https://github.com/sbb-design-systems/lyne-components/commit/
|
|
9
|
+
"https://github.com/sbb-design-systems/lyne-components/commit/e719ede6b528296fc0f36847302124d52a6f5c1c"
|
|
10
10
|
],
|
|
11
11
|
"type": "module",
|
|
12
12
|
"exports": {
|
package/safety-theme.css
CHANGED
|
@@ -1736,6 +1736,27 @@ slot[name=error]::slotted(*) {
|
|
|
1736
1736
|
--sbb-signet-panel-color: var(--sbb-color-brand);
|
|
1737
1737
|
--sbb-signet-icon-color: var(--sbb-color-white);
|
|
1738
1738
|
--sbb-signet-aspect-ratio: 2 / 1;
|
|
1739
|
+
--sbb-slider-line-height: 0.25rem;
|
|
1740
|
+
--sbb-slider-knob-size: 1.75rem;
|
|
1741
|
+
--sbb-slider-knob-size-active: 1.9375rem;
|
|
1742
|
+
--sbb-slider-knob-border-size: 0.1875rem;
|
|
1743
|
+
--sbb-slider-knob-border-style: solid;
|
|
1744
|
+
--sbb-slider-knob-color: var(--sbb-background-color-1);
|
|
1745
|
+
--sbb-slider-knob-border-color: var(--sbb-color-primary);
|
|
1746
|
+
--sbb-slider-icon-color: var(--sbb-color-1);
|
|
1747
|
+
--sbb-slider-selected-line-disabled-color: var(--sbb-color-smoke);
|
|
1748
|
+
--sbb-slider-selected-line-disabled-color: light-dark(
|
|
1749
|
+
var(--sbb-color-smoke),
|
|
1750
|
+
var(--sbb-color-cement)
|
|
1751
|
+
);
|
|
1752
|
+
--sbb-slider-line-color: var(--sbb-border-color-5);
|
|
1753
|
+
--sbb-slider-selected-line-color: var(--sbb-color-primary);
|
|
1754
|
+
--sbb-slider-line-disabled-color: var(--sbb-color-graphite);
|
|
1755
|
+
--sbb-slider-line-disabled-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-granite));
|
|
1756
|
+
--sbb-slider-width: 25rem;
|
|
1757
|
+
--sbb-slider-min-width: 9.375rem;
|
|
1758
|
+
--sbb-slider-gap: var(--sbb-spacing-fixed-2x);
|
|
1759
|
+
--sbb-slider-padding-block: 0.125rem;
|
|
1739
1760
|
--sbb-status-color: var(--sbb-color-4);
|
|
1740
1761
|
--sbb-status-gap: var(--sbb-spacing-fixed-1x);
|
|
1741
1762
|
--sbb-status-font-size: var(--sbb-text-font-size-s);
|
|
@@ -1813,6 +1834,8 @@ slot[name=error]::slotted(*) {
|
|
|
1813
1834
|
--sbb-signet-background-color: ButtonText !important;
|
|
1814
1835
|
--sbb-signet-panel-color: ButtonText !important;
|
|
1815
1836
|
--sbb-signet-icon-color: Canvas !important;
|
|
1837
|
+
--sbb-slider-selected-line-color: Highlight;
|
|
1838
|
+
--sbb-slider-line-color: CanvasText;
|
|
1816
1839
|
}
|
|
1817
1840
|
}
|
|
1818
1841
|
:root {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "../slider.component-
|
|
1
|
+
import { t as e } from "../slider.component-D-yXlqJY.js";
|
|
2
2
|
export { e as SbbSliderElement };
|
|
@@ -8,7 +8,7 @@ import { boxSizingStyles as f } from "./core/styles.js";
|
|
|
8
8
|
import "./icon.js";
|
|
9
9
|
import { ref as p } from "lit/directives/ref.js";
|
|
10
10
|
//#region src/elements/slider/slider.scss?lit&inline
|
|
11
|
-
var m = n`@charset "UTF-8";:host{outline:none!important;display:inline-block;min-width:
|
|
11
|
+
var m = n`@charset "UTF-8";:host{--_sbb-slider-value-fraction: 0;outline:none!important;display:inline-block;min-width:var(--sbb-slider-min-width);width:min(var(--sbb-slider-width),100%)}:host(:disabled){--sbb-slider-icon-color: var(--sbb-color-graphite);--sbb-slider-icon-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-smoke));--sbb-slider-knob-border-color: var(--sbb-border-color-5);--sbb-slider-knob-border-size: var(--sbb-border-width-2x);--sbb-slider-knob-border-style: dashed}:host([readonly]){--sbb-slider-icon-color: var(--sbb-color-5);--sbb-slider-knob-border-color: var(--sbb-slider-selected-line-disabled-color)}:host(:disabled),:host([readonly]){--sbb-slider-line-color: var(--sbb-slider-line-disabled-color);--sbb-slider-selected-line-color: var(--sbb-slider-selected-line-disabled-color)}@media(forced-colors:active){:host(:disabled),:host([readonly]){--sbb-slider-icon-color: GrayText;--sbb-slider-selected-line-disabled-color: GrayText;--sbb-slider-line-disabled-color: GrayText}}.sbb-slider__height-container{display:flex;flex-direction:column}.sbb-slider__height-container:before{content:"";-webkit-user-select:none;user-select:none;width:0;height:0}.sbb-slider__wrapper{display:flex;gap:var(--sbb-slider-gap);padding-block:var(--sbb-slider-padding-block);color:var(--sbb-slider-icon-color)}.sbb-slider__container{position:relative;min-height:var(--sbb-size-icon-ui-small);flex-grow:1}.sbb-slider__range-input{position:absolute;width:100%;inset:0;opacity:0;margin:0}.sbb-slider__line{position:absolute;top:50%;transform:translateY(-50%);height:var(--sbb-slider-line-height);width:100%;background-color:var(--sbb-slider-line-color);border-radius:var(--sbb-slider-line-height);overflow:hidden;pointer-events:none}.sbb-slider__selected-line{position:relative;height:100%;background-color:var(--sbb-slider-selected-line-color);width:calc(var(--_sbb-slider-value-fraction) * 100%)}.sbb-slider__knob{position:absolute;top:50%;transform:translateY(-50%);box-shadow:var(--sbb-box-shadow-level-5-hard);width:var(--sbb-slider-knob-size);height:var(--sbb-slider-knob-size);inset-inline-start:calc(var(--_sbb-slider-value-fraction) * 100% - var(--sbb-slider-knob-size) * var(--_sbb-slider-value-fraction));transition-property:width,height;transition-duration:var(--sbb-disable-animation-duration, var(--sbb-animation-duration-1x));transition-timing-function:ease-in;background-color:var(--sbb-slider-knob-color);border:var(--sbb-slider-knob-border-size) var(--sbb-slider-knob-border-style) var(--sbb-slider-knob-border-color);border-radius:50%;pointer-events:none}:host(:focus-visible) .sbb-slider__knob{outline-offset:var(--sbb-focus-outline-offset);outline:var(--sbb-focus-outline-color) var(--sbb-focus-outline-style, solid) var(--sbb-focus-outline-width);--sbb-slider-knob-size: var(--sbb-slider-knob-size-active)}:host(:not(:is(:disabled,[readonly]))) .sbb-slider__range-input:active~.sbb-slider__knob{--sbb-slider-knob-size: var(--sbb-slider-knob-size-active)}`, h = (() => {
|
|
12
12
|
let n = [c({ tabindex: "0" })], h, g = [], _, v = l(d(u(o))), y = [], b, x, S, C, w, T = [], E = [], D, O = [], k = [];
|
|
13
13
|
var A = class extends v {
|
|
14
14
|
static {
|
|
@@ -167,7 +167,7 @@ var m = n`@charset "UTF-8";:host{outline:none!important;display:inline-block;min
|
|
|
167
167
|
super(), this._value = (t(this, y), null), this._min = "0", this._max = "100", this.#e = t(this, T, ""), this.#t = (t(this, E), t(this, O, "")), this._rangeInput = t(this, k), this.addEventListener?.("keydown", (e) => this._handleKeydown(e));
|
|
168
168
|
}
|
|
169
169
|
willUpdate(e) {
|
|
170
|
-
super.willUpdate(e), e.has("readOnly") && (this.internals.ariaReadOnly = (!!this.readOnly).toString()), this.style?.setProperty("--
|
|
170
|
+
super.willUpdate(e), e.has("readOnly") && (this.internals.ariaReadOnly = (!!this.readOnly).toString()), this.style?.setProperty("--_sbb-slider-value-fraction", this._valueFraction().toString());
|
|
171
171
|
}
|
|
172
172
|
formResetCallback() {
|
|
173
173
|
this.value = this.getAttribute("value") ?? this._defaultValue();
|
package/slider.js
CHANGED
package/slider.pure.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as e } from "./slider.component-
|
|
1
|
+
import { t as e } from "./slider.component-D-yXlqJY.js";
|
|
2
2
|
export { e as SbbSliderElement };
|
package/standard-theme.css
CHANGED
|
@@ -1736,6 +1736,27 @@ slot[name=error]::slotted(*) {
|
|
|
1736
1736
|
--sbb-signet-panel-color: var(--sbb-color-brand);
|
|
1737
1737
|
--sbb-signet-icon-color: var(--sbb-color-white);
|
|
1738
1738
|
--sbb-signet-aspect-ratio: 2 / 1;
|
|
1739
|
+
--sbb-slider-line-height: 0.25rem;
|
|
1740
|
+
--sbb-slider-knob-size: 1.75rem;
|
|
1741
|
+
--sbb-slider-knob-size-active: 1.9375rem;
|
|
1742
|
+
--sbb-slider-knob-border-size: 0.1875rem;
|
|
1743
|
+
--sbb-slider-knob-border-style: solid;
|
|
1744
|
+
--sbb-slider-knob-color: var(--sbb-background-color-1);
|
|
1745
|
+
--sbb-slider-knob-border-color: var(--sbb-color-primary);
|
|
1746
|
+
--sbb-slider-icon-color: var(--sbb-color-1);
|
|
1747
|
+
--sbb-slider-selected-line-disabled-color: var(--sbb-color-smoke);
|
|
1748
|
+
--sbb-slider-selected-line-disabled-color: light-dark(
|
|
1749
|
+
var(--sbb-color-smoke),
|
|
1750
|
+
var(--sbb-color-cement)
|
|
1751
|
+
);
|
|
1752
|
+
--sbb-slider-line-color: var(--sbb-border-color-5);
|
|
1753
|
+
--sbb-slider-selected-line-color: var(--sbb-color-primary);
|
|
1754
|
+
--sbb-slider-line-disabled-color: var(--sbb-color-graphite);
|
|
1755
|
+
--sbb-slider-line-disabled-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-granite));
|
|
1756
|
+
--sbb-slider-width: 25rem;
|
|
1757
|
+
--sbb-slider-min-width: 9.375rem;
|
|
1758
|
+
--sbb-slider-gap: var(--sbb-spacing-fixed-2x);
|
|
1759
|
+
--sbb-slider-padding-block: 0.125rem;
|
|
1739
1760
|
--sbb-status-color: var(--sbb-color-4);
|
|
1740
1761
|
--sbb-status-gap: var(--sbb-spacing-fixed-1x);
|
|
1741
1762
|
--sbb-status-font-size: var(--sbb-text-font-size-s);
|
|
@@ -1813,6 +1834,8 @@ slot[name=error]::slotted(*) {
|
|
|
1813
1834
|
--sbb-signet-background-color: ButtonText !important;
|
|
1814
1835
|
--sbb-signet-panel-color: ButtonText !important;
|
|
1815
1836
|
--sbb-signet-icon-color: Canvas !important;
|
|
1837
|
+
--sbb-slider-selected-line-color: Highlight;
|
|
1838
|
+
--sbb-slider-line-color: CanvasText;
|
|
1816
1839
|
}
|
|
1817
1840
|
}
|
|
1818
1841
|
:root {
|
|
@@ -1,479 +0,0 @@
|
|
|
1
|
-
import { __esDecorate, __runInitializers } from "tslib";
|
|
2
|
-
import { css, html, nothing } from "lit";
|
|
3
|
-
import { property } from "lit/decorators.js";
|
|
4
|
-
import { SbbElement } from "./core/base-elements.js";
|
|
5
|
-
import { forceType, hostAttributes } from "./core/decorators.js";
|
|
6
|
-
import { SbbDisabledMixin, SbbFormAssociatedMixin, SbbReadonlyMixin } from "./core/mixins.js";
|
|
7
|
-
import { boxSizingStyles } from "./core/styles.js";
|
|
8
|
-
import "./icon.js";
|
|
9
|
-
import { ref } from "lit/directives/ref.js";
|
|
10
|
-
//#region src/elements/slider/slider.scss?lit&inline
|
|
11
|
-
var slider_default = css`@charset "UTF-8";
|
|
12
|
-
:host {
|
|
13
|
-
outline: none !important;
|
|
14
|
-
display: inline-block;
|
|
15
|
-
min-width: 9.375rem;
|
|
16
|
-
width: min(25rem, 100%);
|
|
17
|
-
--sbb-slider-line-height: 0.25rem;
|
|
18
|
-
--sbb-slider-value-fraction: 0;
|
|
19
|
-
--sbb-slider-knob-size: 1.75rem;
|
|
20
|
-
--sbb-slider-knob-size-active: 1.9375rem;
|
|
21
|
-
--sbb-slider-knob-border-size: 0.1875rem;
|
|
22
|
-
--sbb-slider-knob-border-style: solid;
|
|
23
|
-
--sbb-slider-knob-color: var(--sbb-background-color-1);
|
|
24
|
-
--sbb-slider-knob-border-color: var(--sbb-color-primary);
|
|
25
|
-
--sbb-slider-icon-color: var(--sbb-color-1);
|
|
26
|
-
--sbb-slider-selected-line-color: var(--sbb-color-primary);
|
|
27
|
-
--sbb-slider-selected-line-disabled-color: var(--sbb-color-smoke);
|
|
28
|
-
--sbb-slider-selected-line-disabled-color: light-dark(
|
|
29
|
-
var(--sbb-color-smoke),
|
|
30
|
-
var(--sbb-color-cement)
|
|
31
|
-
);
|
|
32
|
-
--sbb-slider-line-color: var(--sbb-border-color-5);
|
|
33
|
-
--sbb-slider-line-disabled-color: var(--sbb-color-graphite);
|
|
34
|
-
--sbb-slider-line-disabled-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-granite));
|
|
35
|
-
}
|
|
36
|
-
@media (forced-colors: active) {
|
|
37
|
-
:host {
|
|
38
|
-
--sbb-slider-selected-line-color: Highlight;
|
|
39
|
-
--sbb-slider-line-color: CanvasText;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
:host(:disabled) {
|
|
44
|
-
--sbb-slider-icon-color: var(--sbb-color-graphite);
|
|
45
|
-
--sbb-slider-icon-color: light-dark(var(--sbb-color-graphite), var(--sbb-color-smoke));
|
|
46
|
-
--sbb-slider-knob-border-color: var(--sbb-border-color-5);
|
|
47
|
-
--sbb-slider-knob-border-size: var(--sbb-border-width-2x);
|
|
48
|
-
--sbb-slider-knob-border-style: dashed;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
:host([readonly]) {
|
|
52
|
-
--sbb-slider-icon-color: var(--sbb-color-5);
|
|
53
|
-
--sbb-slider-knob-border-color: var(--sbb-slider-selected-line-disabled-color);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
:host(:disabled),
|
|
57
|
-
:host([readonly]) {
|
|
58
|
-
--sbb-slider-line-color: var(--sbb-slider-line-disabled-color);
|
|
59
|
-
--sbb-slider-selected-line-color: var(--sbb-slider-selected-line-disabled-color);
|
|
60
|
-
}
|
|
61
|
-
@media (forced-colors: active) {
|
|
62
|
-
:host(:disabled),
|
|
63
|
-
:host([readonly]) {
|
|
64
|
-
--sbb-slider-icon-color: GrayText;
|
|
65
|
-
--sbb-slider-selected-line-disabled-color: GrayText;
|
|
66
|
-
--sbb-slider-line-disabled-color: GrayText;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
.sbb-slider__height-container {
|
|
71
|
-
display: flex;
|
|
72
|
-
flex-direction: column;
|
|
73
|
-
}
|
|
74
|
-
.sbb-slider__height-container::before {
|
|
75
|
-
content: "";
|
|
76
|
-
user-select: none;
|
|
77
|
-
width: 0;
|
|
78
|
-
height: 0;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
.sbb-slider__wrapper {
|
|
82
|
-
display: flex;
|
|
83
|
-
gap: var(--sbb-spacing-fixed-2x);
|
|
84
|
-
padding-block: calc(var(--sbb-spacing-fixed-1x) / 2);
|
|
85
|
-
color: var(--sbb-slider-icon-color);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
.sbb-slider__container {
|
|
89
|
-
position: relative;
|
|
90
|
-
min-height: var(--sbb-size-icon-ui-small);
|
|
91
|
-
flex-grow: 1;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.sbb-slider__range-input {
|
|
95
|
-
position: absolute;
|
|
96
|
-
width: 100%;
|
|
97
|
-
inset: 0;
|
|
98
|
-
opacity: 0;
|
|
99
|
-
margin: 0;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
.sbb-slider__line {
|
|
103
|
-
position: absolute;
|
|
104
|
-
top: 50%;
|
|
105
|
-
transform: translateY(-50%);
|
|
106
|
-
height: var(--sbb-slider-line-height);
|
|
107
|
-
width: 100%;
|
|
108
|
-
background-color: var(--sbb-slider-line-color);
|
|
109
|
-
border-radius: var(--sbb-slider-line-height);
|
|
110
|
-
overflow: hidden;
|
|
111
|
-
pointer-events: none;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
.sbb-slider__selected-line {
|
|
115
|
-
position: relative;
|
|
116
|
-
height: 100%;
|
|
117
|
-
background-color: var(--sbb-slider-selected-line-color);
|
|
118
|
-
width: calc(var(--sbb-slider-value-fraction) * 100%);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
.sbb-slider__knob {
|
|
122
|
-
position: absolute;
|
|
123
|
-
top: 50%;
|
|
124
|
-
transform: translateY(-50%);
|
|
125
|
-
box-shadow: var(--sbb-box-shadow-level-5-hard);
|
|
126
|
-
width: var(--sbb-slider-knob-size);
|
|
127
|
-
height: var(--sbb-slider-knob-size);
|
|
128
|
-
inset-inline-start: calc(var(--sbb-slider-value-fraction) * 100% - var(--sbb-slider-knob-size) * var(--sbb-slider-value-fraction));
|
|
129
|
-
transition-property: width, height;
|
|
130
|
-
transition-duration: var(--sbb-disable-animation-duration, var(--sbb-animation-duration-1x));
|
|
131
|
-
transition-timing-function: ease-in;
|
|
132
|
-
background-color: var(--sbb-slider-knob-color);
|
|
133
|
-
border: var(--sbb-slider-knob-border-size) var(--sbb-slider-knob-border-style) var(--sbb-slider-knob-border-color);
|
|
134
|
-
border-radius: 50%;
|
|
135
|
-
pointer-events: none;
|
|
136
|
-
}
|
|
137
|
-
:host(:focus-visible) .sbb-slider__knob {
|
|
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
|
-
--sbb-slider-knob-size: var(--sbb-slider-knob-size-active);
|
|
141
|
-
}
|
|
142
|
-
:host(:not(:is(:disabled, [readonly]))) .sbb-slider__range-input:active ~ .sbb-slider__knob {
|
|
143
|
-
--sbb-slider-knob-size: var(--sbb-slider-knob-size-active);
|
|
144
|
-
}`;
|
|
145
|
-
//#endregion
|
|
146
|
-
//#region src/elements/slider/slider.component.ts
|
|
147
|
-
/**
|
|
148
|
-
* It displays an input knob that can be moved in a range.
|
|
149
|
-
*
|
|
150
|
-
* @slot prefix - Use this slot to render an icon on the left side of the input.
|
|
151
|
-
* @slot suffix - Use this slot to render an icon on the right side of the input.
|
|
152
|
-
* @event {InputEvent} input - The input event fires when the value has been changed as a direct result of a user action.
|
|
153
|
-
*/
|
|
154
|
-
var SbbSliderElement = (() => {
|
|
155
|
-
let _classDecorators = [hostAttributes({ tabindex: "0" })];
|
|
156
|
-
let _classDescriptor;
|
|
157
|
-
let _classExtraInitializers = [];
|
|
158
|
-
let _classThis;
|
|
159
|
-
let _classSuper = SbbDisabledMixin(SbbReadonlyMixin(SbbFormAssociatedMixin(SbbElement)));
|
|
160
|
-
let _instanceExtraInitializers = [];
|
|
161
|
-
let _set_value_decorators;
|
|
162
|
-
let _set_valueAsNumber_decorators;
|
|
163
|
-
let _set_min_decorators;
|
|
164
|
-
let _set_max_decorators;
|
|
165
|
-
let _startIcon_decorators;
|
|
166
|
-
let _startIcon_initializers = [];
|
|
167
|
-
let _startIcon_extraInitializers = [];
|
|
168
|
-
let _endIcon_decorators;
|
|
169
|
-
let _endIcon_initializers = [];
|
|
170
|
-
let _endIcon_extraInitializers = [];
|
|
171
|
-
var SbbSliderElement = class extends _classSuper {
|
|
172
|
-
static {
|
|
173
|
-
_classThis = this;
|
|
174
|
-
}
|
|
175
|
-
static {
|
|
176
|
-
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
177
|
-
_set_value_decorators = [property()];
|
|
178
|
-
_set_valueAsNumber_decorators = [property({
|
|
179
|
-
attribute: "value-as-number",
|
|
180
|
-
type: Number
|
|
181
|
-
})];
|
|
182
|
-
_set_min_decorators = [property()];
|
|
183
|
-
_set_max_decorators = [property()];
|
|
184
|
-
_startIcon_decorators = [forceType(), property({ attribute: "start-icon" })];
|
|
185
|
-
_endIcon_decorators = [forceType(), property({ attribute: "end-icon" })];
|
|
186
|
-
__esDecorate(this, null, _set_value_decorators, {
|
|
187
|
-
kind: "setter",
|
|
188
|
-
name: "value",
|
|
189
|
-
static: false,
|
|
190
|
-
private: false,
|
|
191
|
-
access: {
|
|
192
|
-
has: (obj) => "value" in obj,
|
|
193
|
-
set: (obj, value) => {
|
|
194
|
-
obj.value = value;
|
|
195
|
-
}
|
|
196
|
-
},
|
|
197
|
-
metadata: _metadata
|
|
198
|
-
}, null, _instanceExtraInitializers);
|
|
199
|
-
__esDecorate(this, null, _set_valueAsNumber_decorators, {
|
|
200
|
-
kind: "setter",
|
|
201
|
-
name: "valueAsNumber",
|
|
202
|
-
static: false,
|
|
203
|
-
private: false,
|
|
204
|
-
access: {
|
|
205
|
-
has: (obj) => "valueAsNumber" in obj,
|
|
206
|
-
set: (obj, value) => {
|
|
207
|
-
obj.valueAsNumber = value;
|
|
208
|
-
}
|
|
209
|
-
},
|
|
210
|
-
metadata: _metadata
|
|
211
|
-
}, null, _instanceExtraInitializers);
|
|
212
|
-
__esDecorate(this, null, _set_min_decorators, {
|
|
213
|
-
kind: "setter",
|
|
214
|
-
name: "min",
|
|
215
|
-
static: false,
|
|
216
|
-
private: false,
|
|
217
|
-
access: {
|
|
218
|
-
has: (obj) => "min" in obj,
|
|
219
|
-
set: (obj, value) => {
|
|
220
|
-
obj.min = value;
|
|
221
|
-
}
|
|
222
|
-
},
|
|
223
|
-
metadata: _metadata
|
|
224
|
-
}, null, _instanceExtraInitializers);
|
|
225
|
-
__esDecorate(this, null, _set_max_decorators, {
|
|
226
|
-
kind: "setter",
|
|
227
|
-
name: "max",
|
|
228
|
-
static: false,
|
|
229
|
-
private: false,
|
|
230
|
-
access: {
|
|
231
|
-
has: (obj) => "max" in obj,
|
|
232
|
-
set: (obj, value) => {
|
|
233
|
-
obj.max = value;
|
|
234
|
-
}
|
|
235
|
-
},
|
|
236
|
-
metadata: _metadata
|
|
237
|
-
}, null, _instanceExtraInitializers);
|
|
238
|
-
__esDecorate(this, null, _startIcon_decorators, {
|
|
239
|
-
kind: "accessor",
|
|
240
|
-
name: "startIcon",
|
|
241
|
-
static: false,
|
|
242
|
-
private: false,
|
|
243
|
-
access: {
|
|
244
|
-
has: (obj) => "startIcon" in obj,
|
|
245
|
-
get: (obj) => obj.startIcon,
|
|
246
|
-
set: (obj, value) => {
|
|
247
|
-
obj.startIcon = value;
|
|
248
|
-
}
|
|
249
|
-
},
|
|
250
|
-
metadata: _metadata
|
|
251
|
-
}, _startIcon_initializers, _startIcon_extraInitializers);
|
|
252
|
-
__esDecorate(this, null, _endIcon_decorators, {
|
|
253
|
-
kind: "accessor",
|
|
254
|
-
name: "endIcon",
|
|
255
|
-
static: false,
|
|
256
|
-
private: false,
|
|
257
|
-
access: {
|
|
258
|
-
has: (obj) => "endIcon" in obj,
|
|
259
|
-
get: (obj) => obj.endIcon,
|
|
260
|
-
set: (obj, value) => {
|
|
261
|
-
obj.endIcon = value;
|
|
262
|
-
}
|
|
263
|
-
},
|
|
264
|
-
metadata: _metadata
|
|
265
|
-
}, _endIcon_initializers, _endIcon_extraInitializers);
|
|
266
|
-
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, {
|
|
267
|
-
kind: "class",
|
|
268
|
-
name: _classThis.name,
|
|
269
|
-
metadata: _metadata
|
|
270
|
-
}, null, _classExtraInitializers);
|
|
271
|
-
SbbSliderElement = _classThis = _classDescriptor.value;
|
|
272
|
-
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, {
|
|
273
|
-
enumerable: true,
|
|
274
|
-
configurable: true,
|
|
275
|
-
writable: true,
|
|
276
|
-
value: _metadata
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
static {
|
|
280
|
-
this.elementName = "sbb-slider";
|
|
281
|
-
}
|
|
282
|
-
static {
|
|
283
|
-
this.role = "slider";
|
|
284
|
-
}
|
|
285
|
-
static {
|
|
286
|
-
this.styles = [boxSizingStyles, slider_default];
|
|
287
|
-
}
|
|
288
|
-
static {
|
|
289
|
-
this.events = { didChange: "didChange" };
|
|
290
|
-
}
|
|
291
|
-
/**
|
|
292
|
-
* Value of the form element.
|
|
293
|
-
* If no value is provided, default is the middle point between min and max.
|
|
294
|
-
*/
|
|
295
|
-
set value(value) {
|
|
296
|
-
if (this._isValidNumber(value)) this._value = this._boundBetweenMinMax(value);
|
|
297
|
-
else this._value = null;
|
|
298
|
-
this.internals.ariaValueNow = this.value;
|
|
299
|
-
}
|
|
300
|
-
get value() {
|
|
301
|
-
return this._value ?? this._defaultValue();
|
|
302
|
-
}
|
|
303
|
-
/** Numeric value for the inner HTMLInputElement. */
|
|
304
|
-
set valueAsNumber(value) {
|
|
305
|
-
this.value = value?.toString() ?? null;
|
|
306
|
-
}
|
|
307
|
-
get valueAsNumber() {
|
|
308
|
-
return Number(this.value);
|
|
309
|
-
}
|
|
310
|
-
/** Minimum acceptable value for the inner HTMLInputElement. */
|
|
311
|
-
set min(value) {
|
|
312
|
-
if (!this._isValidNumber(value)) return;
|
|
313
|
-
this._min = value;
|
|
314
|
-
this.internals.ariaValueMin = this.min;
|
|
315
|
-
const boundValue = this._boundBetweenMinMax(this.value);
|
|
316
|
-
if (this.value !== boundValue) this.value = boundValue;
|
|
317
|
-
}
|
|
318
|
-
get min() {
|
|
319
|
-
return this._min;
|
|
320
|
-
}
|
|
321
|
-
/** Maximum acceptable value for the inner HTMLInputElement. */
|
|
322
|
-
set max(value) {
|
|
323
|
-
if (!this._isValidNumber(value)) return;
|
|
324
|
-
this._max = value;
|
|
325
|
-
this.internals.ariaValueMax = this.max;
|
|
326
|
-
const boundValue = this._boundBetweenMinMax(this.value);
|
|
327
|
-
if (this.value !== boundValue) this.value = boundValue;
|
|
328
|
-
}
|
|
329
|
-
get max() {
|
|
330
|
-
return this._max;
|
|
331
|
-
}
|
|
332
|
-
#startIcon_accessor_storage;
|
|
333
|
-
/** Name of the icon at component's start, which will be forward to the nested `sbb-icon`. */
|
|
334
|
-
get startIcon() {
|
|
335
|
-
return this.#startIcon_accessor_storage;
|
|
336
|
-
}
|
|
337
|
-
set startIcon(value) {
|
|
338
|
-
this.#startIcon_accessor_storage = value;
|
|
339
|
-
}
|
|
340
|
-
#endIcon_accessor_storage;
|
|
341
|
-
/** Name of the icon at component's end, which will be forward to the nested `sbb-icon`. */
|
|
342
|
-
get endIcon() {
|
|
343
|
-
return this.#endIcon_accessor_storage;
|
|
344
|
-
}
|
|
345
|
-
set endIcon(value) {
|
|
346
|
-
this.#endIcon_accessor_storage = value;
|
|
347
|
-
}
|
|
348
|
-
/**
|
|
349
|
-
* Form type of element.
|
|
350
|
-
* @default 'range'
|
|
351
|
-
*/
|
|
352
|
-
get type() {
|
|
353
|
-
return "range";
|
|
354
|
-
}
|
|
355
|
-
constructor() {
|
|
356
|
-
super();
|
|
357
|
-
this._value = (__runInitializers(this, _instanceExtraInitializers), null);
|
|
358
|
-
this._min = "0";
|
|
359
|
-
this._max = "100";
|
|
360
|
-
this.#startIcon_accessor_storage = __runInitializers(this, _startIcon_initializers, "");
|
|
361
|
-
this.#endIcon_accessor_storage = (__runInitializers(this, _startIcon_extraInitializers), __runInitializers(this, _endIcon_initializers, ""));
|
|
362
|
-
/** Reference to the inner HTMLInputElement with type='range'. */
|
|
363
|
-
this._rangeInput = __runInitializers(this, _endIcon_extraInitializers);
|
|
364
|
-
this.addEventListener?.("keydown", (e) => this._handleKeydown(e));
|
|
365
|
-
}
|
|
366
|
-
willUpdate(changedProperties) {
|
|
367
|
-
super.willUpdate(changedProperties);
|
|
368
|
-
if (changedProperties.has("readOnly")) this.internals.ariaReadOnly = Boolean(this.readOnly).toString();
|
|
369
|
-
this.style?.setProperty("--sbb-slider-value-fraction", this._valueFraction().toString());
|
|
370
|
-
}
|
|
371
|
-
/**
|
|
372
|
-
* The reset value is the attribute value (the setup value). If not present, calculates the default.
|
|
373
|
-
* @internal
|
|
374
|
-
*/
|
|
375
|
-
formResetCallback() {
|
|
376
|
-
this.value = this.getAttribute("value") ?? this._defaultValue();
|
|
377
|
-
}
|
|
378
|
-
/**
|
|
379
|
-
* @internal
|
|
380
|
-
*/
|
|
381
|
-
formStateRestoreCallback(state, _reason) {
|
|
382
|
-
this.value = state;
|
|
383
|
-
}
|
|
384
|
-
/**
|
|
385
|
-
* If no value is provided, default is the middle point between min and max
|
|
386
|
-
* (see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/range#value)
|
|
387
|
-
*/
|
|
388
|
-
_defaultValue() {
|
|
389
|
-
return (+this.min + (+this.max - +this.min) / 2).toString();
|
|
390
|
-
}
|
|
391
|
-
_isValidNumber(value) {
|
|
392
|
-
return !!value && !isNaN(Number(value));
|
|
393
|
-
}
|
|
394
|
-
/**
|
|
395
|
-
* Restrains the value between the min and max
|
|
396
|
-
*/
|
|
397
|
-
_boundBetweenMinMax(value) {
|
|
398
|
-
return Math.max(+this.min, Math.min(+this.max, +value)).toString();
|
|
399
|
-
}
|
|
400
|
-
_valueFraction() {
|
|
401
|
-
const value = this.valueAsNumber;
|
|
402
|
-
const min = +this.min;
|
|
403
|
-
const max = +this.max;
|
|
404
|
-
const mathFraction = (value - min) / (max - min);
|
|
405
|
-
return isNaN(mathFraction) ? 0 : Math.max(0, Math.min(1, mathFraction));
|
|
406
|
-
}
|
|
407
|
-
async _handleKeydown(event) {
|
|
408
|
-
if (event.key !== "Tab") event.preventDefault();
|
|
409
|
-
if (this.readOnly) return;
|
|
410
|
-
if (event.key === "Home") this._rangeInput.value = this.min;
|
|
411
|
-
else if (event.key === "End") this._rangeInput.value = this.max;
|
|
412
|
-
else if (event.key === "ArrowLeft" || event.key === "ArrowDown") this._rangeInput.stepDown();
|
|
413
|
-
else if (event.key === "ArrowRight" || event.key === "ArrowUp") this._rangeInput.stepUp();
|
|
414
|
-
else if (event.key === "PageDown") this._rangeInput.stepDown((+this.max - +this.min) / 10);
|
|
415
|
-
else if (event.key === "PageUp") this._rangeInput.stepUp((+this.max - +this.min) / 10);
|
|
416
|
-
else return;
|
|
417
|
-
this._rangeInput.dispatchEvent(new InputEvent("input", {
|
|
418
|
-
bubbles: true,
|
|
419
|
-
cancelable: true,
|
|
420
|
-
composed: true
|
|
421
|
-
}));
|
|
422
|
-
this._rangeInput.dispatchEvent(new Event("change", { bubbles: true }));
|
|
423
|
-
}
|
|
424
|
-
/** Emits the change event. */
|
|
425
|
-
_dispatchChangeEvent() {
|
|
426
|
-
/**
|
|
427
|
-
* The change event is fired when the user modifies the element's value.
|
|
428
|
-
* Unlike the input event, the change event is not necessarily fired
|
|
429
|
-
* for each alteration to an element's value.
|
|
430
|
-
*/
|
|
431
|
-
this.dispatchEvent(new Event("change", { bubbles: true }));
|
|
432
|
-
/**
|
|
433
|
-
* Deprecated. Mirrors change event for React. Will be removed once React properly supports change events.
|
|
434
|
-
* @deprecated
|
|
435
|
-
*/
|
|
436
|
-
this.dispatchEvent(new Event("didChange", { bubbles: true }));
|
|
437
|
-
}
|
|
438
|
-
render() {
|
|
439
|
-
return html`
|
|
440
|
-
<div class="sbb-slider__height-container">
|
|
441
|
-
<div class="sbb-slider__wrapper">
|
|
442
|
-
<slot name="prefix">
|
|
443
|
-
${this.startIcon ? html`<sbb-icon name="${this.startIcon}"></sbb-icon>` : nothing}
|
|
444
|
-
</slot>
|
|
445
|
-
<div class="sbb-slider__container">
|
|
446
|
-
<input
|
|
447
|
-
tabindex="-1"
|
|
448
|
-
min=${this.min}
|
|
449
|
-
max=${this.max}
|
|
450
|
-
?disabled=${this.disabled || this.formDisabled || this.readOnly}
|
|
451
|
-
value=${this.value || nothing}
|
|
452
|
-
class="sbb-slider__range-input"
|
|
453
|
-
type="range"
|
|
454
|
-
@change=${() => this._dispatchChangeEvent()}
|
|
455
|
-
@input=${() => this.value = this._rangeInput.value}
|
|
456
|
-
${ref((input) => this._rangeInput = input)}
|
|
457
|
-
/>
|
|
458
|
-
<div class="sbb-slider__line">
|
|
459
|
-
<div class="sbb-slider__selected-line"></div>
|
|
460
|
-
</div>
|
|
461
|
-
<div class="sbb-slider__knob"></div>
|
|
462
|
-
</div>
|
|
463
|
-
<slot name="suffix">
|
|
464
|
-
${this.endIcon ? html`<sbb-icon name="${this.endIcon}"></sbb-icon>` : nothing}
|
|
465
|
-
</slot>
|
|
466
|
-
</div>
|
|
467
|
-
</div>
|
|
468
|
-
`;
|
|
469
|
-
}
|
|
470
|
-
static {
|
|
471
|
-
__runInitializers(_classThis, _classExtraInitializers);
|
|
472
|
-
}
|
|
473
|
-
};
|
|
474
|
-
return _classThis;
|
|
475
|
-
})();
|
|
476
|
-
//#endregion
|
|
477
|
-
export { SbbSliderElement as t };
|
|
478
|
-
|
|
479
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2xpZGVyLmNvbXBvbmVudC13X1d0Vk54LS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2xpZGVyL3NsaWRlci5zY3NzP2xpdCZpbmxpbmUiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvc2xpZGVyL3NsaWRlci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICAvLyBVc2UgIWltcG9ydGFudCBoZXJlIHRvIG5vdCBpbnRlcmZlcmUgd2l0aCBGaXJlZm94IGZvY3VzIHJpbmcgZGVmaW5pdGlvblxuICAvLyB3aGljaCBhcHBlYXJzIGluIG5vcm1hbGl6ZSBDU1Mgb2Ygc2V2ZXJhbCBmcmFtZXdvcmtzLlxuICBvdXRsaW5lOiBub25lICFpbXBvcnRhbnQ7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWluLXdpZHRoOiAje3NiYi5weC10by1yZW0tYnVpbGQoMTUwKX07XG4gIHdpZHRoOiBtaW4oI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDQwMCl9LCAxMDAlKTtcblxuICAtLXNiYi1zbGlkZXItbGluZS1oZWlnaHQ6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCg0KX07XG4gIC0tc2JiLXNsaWRlci12YWx1ZS1mcmFjdGlvbjogMDtcbiAgLS1zYmItc2xpZGVyLWtub2Itc2l6ZTogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDI4KX07XG4gIC0tc2JiLXNsaWRlci1rbm9iLXNpemUtYWN0aXZlOiAje3NiYi5weC10by1yZW0tYnVpbGQoMzEpfTtcbiAgLS1zYmItc2xpZGVyLWtub2ItYm9yZGVyLXNpemU6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCgzKX07XG4gIC0tc2JiLXNsaWRlci1rbm9iLWJvcmRlci1zdHlsZTogc29saWQ7XG4gIC0tc2JiLXNsaWRlci1rbm9iLWNvbG9yOiB2YXIoLS1zYmItYmFja2dyb3VuZC1jb2xvci0xKTtcbiAgLS1zYmItc2xpZGVyLWtub2ItYm9yZGVyLWNvbG9yOiB2YXIoLS1zYmItY29sb3ItcHJpbWFyeSk7XG4gIC0tc2JiLXNsaWRlci1pY29uLWNvbG9yOiB2YXIoLS1zYmItY29sb3ItMSk7XG4gIC0tc2JiLXNsaWRlci1zZWxlY3RlZC1saW5lLWNvbG9yOiB2YXIoLS1zYmItY29sb3ItcHJpbWFyeSk7XG4gIC0tc2JiLXNsaWRlci1zZWxlY3RlZC1saW5lLWRpc2FibGVkLWNvbG9yOiBsaWdodC1kYXJrKFxuICAgIHZhcigtLXNiYi1jb2xvci1zbW9rZSksXG4gICAgdmFyKC0tc2JiLWNvbG9yLWNlbWVudClcbiAgKTtcbiAgLS1zYmItc2xpZGVyLWxpbmUtY29sb3I6IHZhcigtLXNiYi1ib3JkZXItY29sb3ItNSk7XG4gIC0tc2JiLXNsaWRlci1saW5lLWRpc2FibGVkLWNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1ncmFwaGl0ZSksIHZhcigtLXNiYi1jb2xvci1ncmFuaXRlKSk7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIC0tc2JiLXNsaWRlci1zZWxlY3RlZC1saW5lLWNvbG9yOiBIaWdobGlnaHQ7XG4gICAgLS1zYmItc2xpZGVyLWxpbmUtY29sb3I6IENhbnZhc1RleHQ7XG4gIH1cbn1cblxuOmhvc3QoOmRpc2FibGVkKSB7XG4gIC0tc2JiLXNsaWRlci1pY29uLWNvbG9yOiBsaWdodC1kYXJrKHZhcigtLXNiYi1jb2xvci1ncmFwaGl0ZSksIHZhcigtLXNiYi1jb2xvci1zbW9rZSkpO1xuICAtLXNiYi1zbGlkZXIta25vYi1ib3JkZXItY29sb3I6IHZhcigtLXNiYi1ib3JkZXItY29sb3ItNSk7XG4gIC0tc2JiLXNsaWRlci1rbm9iLWJvcmRlci1zaXplOiB2YXIoLS1zYmItYm9yZGVyLXdpZHRoLTJ4KTtcbiAgLS1zYmItc2xpZGVyLWtub2ItYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XG59XG5cbjpob3N0KFtyZWFkb25seV0pIHtcbiAgLS1zYmItc2xpZGVyLWljb24tY29sb3I6IHZhcigtLXNiYi1jb2xvci01KTtcbiAgLS1zYmItc2xpZGVyLWtub2ItYm9yZGVyLWNvbG9yOiB2YXIoLS1zYmItc2xpZGVyLXNlbGVjdGVkLWxpbmUtZGlzYWJsZWQtY29sb3IpO1xufVxuXG46aG9zdCg6ZGlzYWJsZWQpLFxuOmhvc3QoW3JlYWRvbmx5XSkge1xuICAtLXNiYi1zbGlkZXItbGluZS1jb2xvcjogdmFyKC0tc2JiLXNsaWRlci1saW5lLWRpc2FibGVkLWNvbG9yKTtcbiAgLS1zYmItc2xpZGVyLXNlbGVjdGVkLWxpbmUtY29sb3I6IHZhcigtLXNiYi1zbGlkZXItc2VsZWN0ZWQtbGluZS1kaXNhYmxlZC1jb2xvcik7XG5cbiAgQGluY2x1ZGUgc2JiLmlmLWZvcmNlZC1jb2xvcnMge1xuICAgIC0tc2JiLXNsaWRlci1pY29uLWNvbG9yOiBHcmF5VGV4dDtcbiAgICAtLXNiYi1zbGlkZXItc2VsZWN0ZWQtbGluZS1kaXNhYmxlZC1jb2xvcjogR3JheVRleHQ7XG4gICAgLS1zYmItc2xpZGVyLWxpbmUtZGlzYWJsZWQtY29sb3I6IEdyYXlUZXh0O1xuICB9XG59XG5cbi5zYmItc2xpZGVyX19oZWlnaHQtY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblxuICBAaW5jbHVkZSBzYmIuemVyby13aWR0aC1zcGFjZTtcbn1cblxuLnNiYi1zbGlkZXJfX3dyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTJ4KTtcbiAgcGFkZGluZy1ibG9jazogY2FsYyh2YXIoLS1zYmItc3BhY2luZy1maXhlZC0xeCkgLyAyKTtcbiAgY29sb3I6IHZhcigtLXNiYi1zbGlkZXItaWNvbi1jb2xvcik7XG59XG5cbi5zYmItc2xpZGVyX19jb250YWluZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1pbi1oZWlnaHQ6IHZhcigtLXNiYi1zaXplLWljb24tdWktc21hbGwpO1xuICBmbGV4LWdyb3c6IDE7XG59XG5cbi5zYmItc2xpZGVyX19yYW5nZS1pbnB1dCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDEwMCU7XG4gIGluc2V0OiAwO1xuICBvcGFjaXR5OiAwO1xuICBtYXJnaW46IDA7XG59XG5cbi5zYmItc2xpZGVyX19saW5lIHtcbiAgQGluY2x1ZGUgc2JiLmFic29sdXRlLWNlbnRlci15O1xuXG4gIGhlaWdodDogdmFyKC0tc2JiLXNsaWRlci1saW5lLWhlaWdodCk7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1zYmItc2xpZGVyLWxpbmUtY29sb3IpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1zYmItc2xpZGVyLWxpbmUtaGVpZ2h0KTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5zYmItc2xpZGVyX19zZWxlY3RlZC1saW5lIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1zbGlkZXItc2VsZWN0ZWQtbGluZS1jb2xvcik7XG4gIHdpZHRoOiBjYWxjKHZhcigtLXNiYi1zbGlkZXItdmFsdWUtZnJhY3Rpb24pICogMTAwJSk7XG59XG5cbi5zYmItc2xpZGVyX19rbm9iIHtcbiAgQGluY2x1ZGUgc2JiLmFic29sdXRlLWNlbnRlci15O1xuXG4gIGJveC1zaGFkb3c6IHZhcigtLXNiYi1ib3gtc2hhZG93LWxldmVsLTUtaGFyZCk7XG4gIHdpZHRoOiB2YXIoLS1zYmItc2xpZGVyLWtub2Itc2l6ZSk7XG4gIGhlaWdodDogdmFyKC0tc2JiLXNsaWRlci1rbm9iLXNpemUpO1xuICBpbnNldC1pbmxpbmUtc3RhcnQ6IGNhbGMoXG4gICAgY2FsYyh2YXIoLS1zYmItc2xpZGVyLXZhbHVlLWZyYWN0aW9uKSAqIDEwMCUpIC0gdmFyKC0tc2JiLXNsaWRlci1rbm9iLXNpemUpICpcbiAgICAgIHZhcigtLXNiYi1zbGlkZXItdmFsdWUtZnJhY3Rpb24pXG4gICk7XG4gIHRyYW5zaXRpb24tcHJvcGVydHk6IHdpZHRoLCBoZWlnaHQ7XG4gIHRyYW5zaXRpb24tZHVyYXRpb246IHZhcigtLXNiYi1kaXNhYmxlLWFuaW1hdGlvbi1kdXJhdGlvbiwgdmFyKC0tc2JiLWFuaW1hdGlvbi1kdXJhdGlvbi0xeCkpO1xuICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1pbjtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tc2JiLXNsaWRlci1rbm9iLWNvbG9yKTtcbiAgYm9yZGVyOiB2YXIoLS1zYmItc2xpZGVyLWtub2ItYm9yZGVyLXNpemUpIHZhcigtLXNiYi1zbGlkZXIta25vYi1ib3JkZXItc3R5bGUpXG4gICAgdmFyKC0tc2JiLXNsaWRlci1rbm9iLWJvcmRlci1jb2xvcik7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG5cbiAgOmhvc3QoOmZvY3VzLXZpc2libGUpICYge1xuICAgIEBpbmNsdWRlIHNiYi5mb2N1cy1vdXRsaW5lO1xuXG4gICAgLS1zYmItc2xpZGVyLWtub2Itc2l6ZTogdmFyKC0tc2JiLXNsaWRlci1rbm9iLXNpemUtYWN0aXZlKTtcbiAgfVxuXG4gIC8vIHNsaWRlciBrbm9iIHJlc2l6ZSBvbiBjbGljayAoYWN0aXZlIC8gZm9jdXMpXG4gIDpob3N0KDpub3QoOmlzKDpkaXNhYmxlZCwgW3JlYWRvbmx5XSkpKSAuc2JiLXNsaWRlcl9fcmFuZ2UtaW5wdXQ6YWN0aXZlIH4gJiB7XG4gICAgLS1zYmItc2xpZGVyLWtub2Itc2l6ZTogdmFyKC0tc2JiLXNsaWRlci1rbm9iLXNpemUtYWN0aXZlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHR5cGUgeyBDU1NSZXN1bHRHcm91cCwgUHJvcGVydHlWYWx1ZXMsIFRlbXBsYXRlUmVzdWx0IH0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGh0bWwsIG5vdGhpbmcgfSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQgeyBTYmJFbGVtZW50IH0gZnJvbSAnLi4vY29yZS9iYXNlLWVsZW1lbnRzLnRzJztcbmltcG9ydCB7IGZvcmNlVHlwZSwgaG9zdEF0dHJpYnV0ZXMgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMudHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBGb3JtUmVzdG9yZVJlYXNvbixcbiAgdHlwZSBGb3JtUmVzdG9yZVN0YXRlLFxuICBTYmJEaXNhYmxlZE1peGluLFxuICBTYmJGb3JtQXNzb2NpYXRlZE1peGluLFxuICBTYmJSZWFkb25seU1peGluLFxufSBmcm9tICcuLi9jb3JlL21peGlucy50cyc7XG5pbXBvcnQgeyBib3hTaXppbmdTdHlsZXMgfSBmcm9tICcuLi9jb3JlL3N0eWxlcy50cyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL3NsaWRlci5zY3NzP2xpdCZpbmxpbmUnO1xuXG5pbXBvcnQgJy4uL2ljb24udHMnO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGFuIGlucHV0IGtub2IgdGhhdCBjYW4gYmUgbW92ZWQgaW4gYSByYW5nZS5cbiAqXG4gKiBAc2xvdCBwcmVmaXggLSBVc2UgdGhpcyBzbG90IHRvIHJlbmRlciBhbiBpY29uIG9uIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIGlucHV0LlxuICogQHNsb3Qgc3VmZml4IC0gVXNlIHRoaXMgc2xvdCB0byByZW5kZXIgYW4gaWNvbiBvbiB0aGUgcmlnaHQgc2lkZSBvZiB0aGUgaW5wdXQuXG4gKiBAZXZlbnQge0lucHV0RXZlbnR9IGlucHV0IC0gVGhlIGlucHV0IGV2ZW50IGZpcmVzIHdoZW4gdGhlIHZhbHVlIGhhcyBiZWVuIGNoYW5nZWQgYXMgYSBkaXJlY3QgcmVzdWx0IG9mIGEgdXNlciBhY3Rpb24uXG4gKi9cbmV4cG9ydFxuQGhvc3RBdHRyaWJ1dGVzKHtcbiAgdGFiaW5kZXg6ICcwJyxcbn0pXG5jbGFzcyBTYmJTbGlkZXJFbGVtZW50IGV4dGVuZHMgU2JiRGlzYWJsZWRNaXhpbihcbiAgU2JiUmVhZG9ubHlNaXhpbihTYmJGb3JtQXNzb2NpYXRlZE1peGluKFNiYkVsZW1lbnQpKSxcbikge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHJlYWRvbmx5IGVsZW1lbnROYW1lOiBzdHJpbmcgPSAnc2JiLXNsaWRlcic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgcmVhZG9ubHkgcm9sZSA9ICdzbGlkZXInO1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBbYm94U2l6aW5nU3R5bGVzLCBzdHlsZV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGRpZENoYW5nZTogJ2RpZENoYW5nZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqXG4gICAqIFZhbHVlIG9mIHRoZSBmb3JtIGVsZW1lbnQuXG4gICAqIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCBkZWZhdWx0IGlzIHRoZSBtaWRkbGUgcG9pbnQgYmV0d2VlbiBtaW4gYW5kIG1heC5cbiAgICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgdmFsdWUodmFsdWU6IHN0cmluZyB8IG51bGwpIHtcbiAgICBpZiAodGhpcy5faXNWYWxpZE51bWJlcih2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdGhpcy5fYm91bmRCZXR3ZWVuTWluTWF4KHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgIH1cbiAgICB0aGlzLmludGVybmFscy5hcmlhVmFsdWVOb3cgPSB0aGlzLnZhbHVlO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdmFsdWUgPz8gdGhpcy5fZGVmYXVsdFZhbHVlKCk7XG4gIH1cbiAgcHJpdmF0ZSBfdmFsdWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBOdW1lcmljIHZhbHVlIGZvciB0aGUgaW5uZXIgSFRNTElucHV0RWxlbWVudC4gKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAndmFsdWUtYXMtbnVtYmVyJywgdHlwZTogTnVtYmVyIH0pXG4gIHB1YmxpYyBzZXQgdmFsdWVBc051bWJlcih2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZT8udG9TdHJpbmcoKSA/PyBudWxsO1xuICB9XG4gIHB1YmxpYyBnZXQgdmFsdWVBc051bWJlcigpOiBudW1iZXIgfCBudWxsIHtcbiAgICByZXR1cm4gTnVtYmVyKHRoaXMudmFsdWUpO1xuICB9XG5cbiAgLyoqIE1pbmltdW0gYWNjZXB0YWJsZSB2YWx1ZSBmb3IgdGhlIGlubmVyIEhUTUxJbnB1dEVsZW1lbnQuICovXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBzZXQgbWluKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuX2lzVmFsaWROdW1iZXIodmFsdWUpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWluID0gdmFsdWU7XG4gICAgdGhpcy5pbnRlcm5hbHMuYXJpYVZhbHVlTWluID0gdGhpcy5taW47XG4gICAgY29uc3QgYm91bmRWYWx1ZSA9IHRoaXMuX2JvdW5kQmV0d2Vlbk1pbk1heCh0aGlzLnZhbHVlKTtcbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gYm91bmRWYWx1ZSkge1xuICAgICAgdGhpcy52YWx1ZSA9IGJvdW5kVmFsdWU7XG4gICAgfVxuICB9XG4gIHB1YmxpYyBnZXQgbWluKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfVxuICBwcml2YXRlIF9taW46IHN0cmluZyA9ICcwJztcblxuICAvKiogTWF4aW11bSBhY2NlcHRhYmxlIHZhbHVlIGZvciB0aGUgaW5uZXIgSFRNTElucHV0RWxlbWVudC4gKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBtYXgodmFsdWU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5faXNWYWxpZE51bWJlcih2YWx1ZSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9tYXggPSB2YWx1ZTtcbiAgICB0aGlzLmludGVybmFscy5hcmlhVmFsdWVNYXggPSB0aGlzLm1heDtcbiAgICBjb25zdCBib3VuZFZhbHVlID0gdGhpcy5fYm91bmRCZXR3ZWVuTWluTWF4KHRoaXMudmFsdWUpO1xuICAgIGlmICh0aGlzLnZhbHVlICE9PSBib3VuZFZhbHVlKSB7XG4gICAgICB0aGlzLnZhbHVlID0gYm91bmRWYWx1ZTtcbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBtYXgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4O1xuICB9XG4gIHByaXZhdGUgX21heDogc3RyaW5nID0gJzEwMCc7XG5cbiAgLyoqIE5hbWUgb2YgdGhlIGljb24gYXQgY29tcG9uZW50J3Mgc3RhcnQsIHdoaWNoIHdpbGwgYmUgZm9yd2FyZCB0byB0aGUgbmVzdGVkIGBzYmItaWNvbmAuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdzdGFydC1pY29uJyB9KVxuICBwdWJsaWMgYWNjZXNzb3Igc3RhcnRJY29uOiBzdHJpbmcgPSAnJztcblxuICAvKiogTmFtZSBvZiB0aGUgaWNvbiBhdCBjb21wb25lbnQncyBlbmQsIHdoaWNoIHdpbGwgYmUgZm9yd2FyZCB0byB0aGUgbmVzdGVkIGBzYmItaWNvbmAuICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdlbmQtaWNvbicgfSlcbiAgcHVibGljIGFjY2Vzc29yIGVuZEljb246IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBGb3JtIHR5cGUgb2YgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgJ3JhbmdlJ1xuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGdldCB0eXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdyYW5nZSc7XG4gIH1cblxuICAvKiogUmVmZXJlbmNlIHRvIHRoZSBpbm5lciBIVE1MSW5wdXRFbGVtZW50IHdpdGggdHlwZT0ncmFuZ2UnLiAqL1xuICBwcml2YXRlIF9yYW5nZUlucHV0ITogSFRNTElucHV0RWxlbWVudDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXI/Ligna2V5ZG93bicsIChlKSA9PiB0aGlzLl9oYW5kbGVLZXlkb3duKGUpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSB3aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IHZvaWQge1xuICAgIHN1cGVyLndpbGxVcGRhdGUoY2hhbmdlZFByb3BlcnRpZXMpO1xuXG4gICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygncmVhZE9ubHknKSkge1xuICAgICAgdGhpcy5pbnRlcm5hbHMuYXJpYVJlYWRPbmx5ID0gQm9vbGVhbih0aGlzLnJlYWRPbmx5KS50b1N0cmluZygpO1xuICAgIH1cbiAgICB0aGlzLnN0eWxlPy5zZXRQcm9wZXJ0eSgnLS1zYmItc2xpZGVyLXZhbHVlLWZyYWN0aW9uJywgdGhpcy5fdmFsdWVGcmFjdGlvbigpLnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZXNldCB2YWx1ZSBpcyB0aGUgYXR0cmlidXRlIHZhbHVlICh0aGUgc2V0dXAgdmFsdWUpLiBJZiBub3QgcHJlc2VudCwgY2FsY3VsYXRlcyB0aGUgZGVmYXVsdC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZm9ybVJlc2V0Q2FsbGJhY2soKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0QXR0cmlidXRlKCd2YWx1ZScpID8/IHRoaXMuX2RlZmF1bHRWYWx1ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIGZvcm1TdGF0ZVJlc3RvcmVDYWxsYmFjayhcbiAgICBzdGF0ZTogRm9ybVJlc3RvcmVTdGF0ZSB8IG51bGwsXG4gICAgX3JlYXNvbjogRm9ybVJlc3RvcmVSZWFzb24sXG4gICk6IHZvaWQge1xuICAgIHRoaXMudmFsdWUgPSBzdGF0ZSBhcyBzdHJpbmcgfCBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqICBJZiBubyB2YWx1ZSBpcyBwcm92aWRlZCwgZGVmYXVsdCBpcyB0aGUgbWlkZGxlIHBvaW50IGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICogIChzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0L3JhbmdlI3ZhbHVlKVxuICAgKi9cbiAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICgrdGhpcy5taW4gKyAoK3RoaXMubWF4IC0gK3RoaXMubWluKSAvIDIpLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIF9pc1ZhbGlkTnVtYmVyKHZhbHVlOiBzdHJpbmcgfCBudWxsKTogdmFsdWUgaXMgc3RyaW5nIHtcbiAgICByZXR1cm4gISF2YWx1ZSAmJiAhaXNOYU4oTnVtYmVyKHZhbHVlKSk7XG4gIH1cblxuICAvKipcbiAgICogUmVzdHJhaW5zIHRoZSB2YWx1ZSBiZXR3ZWVuIHRoZSBtaW4gYW5kIG1heFxuICAgKi9cbiAgcHJpdmF0ZSBfYm91bmRCZXR3ZWVuTWluTWF4KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBNYXRoLm1heCgrdGhpcy5taW4sIE1hdGgubWluKCt0aGlzLm1heCwgK3ZhbHVlKSkudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ZhbHVlRnJhY3Rpb24oKTogbnVtYmVyIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMudmFsdWVBc051bWJlciE7XG4gICAgY29uc3QgbWluID0gK3RoaXMubWluO1xuICAgIGNvbnN0IG1heCA9ICt0aGlzLm1heDtcblxuICAgIGNvbnN0IG1hdGhGcmFjdGlvbjogbnVtYmVyID0gKHZhbHVlIC0gbWluKSAvIChtYXggLSBtaW4pO1xuICAgIHJldHVybiBpc05hTihtYXRoRnJhY3Rpb24pID8gMCA6IE1hdGgubWF4KDAsIE1hdGgubWluKDEsIG1hdGhGcmFjdGlvbikpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBfaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChldmVudC5rZXkgIT09ICdUYWInKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICB0aGlzLl9yYW5nZUlucHV0LnZhbHVlID0gdGhpcy5taW47XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdFbmQnKSB7XG4gICAgICB0aGlzLl9yYW5nZUlucHV0LnZhbHVlID0gdGhpcy5tYXg7XG4gICAgfSBlbHNlIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIHRoaXMuX3JhbmdlSW5wdXQuc3RlcERvd24oKTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0Fycm93UmlnaHQnIHx8IGV2ZW50LmtleSA9PT0gJ0Fycm93VXAnKSB7XG4gICAgICB0aGlzLl9yYW5nZUlucHV0LnN0ZXBVcCgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnUGFnZURvd24nKSB7XG4gICAgICB0aGlzLl9yYW5nZUlucHV0LnN0ZXBEb3duKCgrdGhpcy5tYXggLSArdGhpcy5taW4pIC8gMTApO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAnUGFnZVVwJykge1xuICAgICAgdGhpcy5fcmFuZ2VJbnB1dC5zdGVwVXAoKCt0aGlzLm1heCAtICt0aGlzLm1pbikgLyAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBXZSBoYXZlIHRvIG1hbnVhbGx5IGZpcmUgZXZlbnRzIGJlY2F1c2UgcHJvZ3JhbW1hdGljIGNoYW5nZXMgZG9uJ3QgdHJpZ2dlciB0aGVtXG4gICAgdGhpcy5fcmFuZ2VJbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IElucHV0RXZlbnQoJ2lucHV0JywgeyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSB9KSxcbiAgICApO1xuICAgIHRoaXMuX3JhbmdlSW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gIH1cblxuICAvKiogRW1pdHMgdGhlIGNoYW5nZSBldmVudC4gKi9cbiAgcHJpdmF0ZSBfZGlzcGF0Y2hDaGFuZ2VFdmVudCgpOiB2b2lkIHtcbiAgICAvKipcbiAgICAgKiBUaGUgY2hhbmdlIGV2ZW50IGlzIGZpcmVkIHdoZW4gdGhlIHVzZXIgbW9kaWZpZXMgdGhlIGVsZW1lbnQncyB2YWx1ZS5cbiAgICAgKiBVbmxpa2UgdGhlIGlucHV0IGV2ZW50LCB0aGUgY2hhbmdlIGV2ZW50IGlzIG5vdCBuZWNlc3NhcmlseSBmaXJlZFxuICAgICAqIGZvciBlYWNoIGFsdGVyYXRpb24gdG8gYW4gZWxlbWVudCdzIHZhbHVlLlxuICAgICAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2NoYW5nZScsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG5cbiAgICAvKipcbiAgICAgKiBEZXByZWNhdGVkLiBNaXJyb3JzIGNoYW5nZSBldmVudCBmb3IgUmVhY3QuIFdpbGwgYmUgcmVtb3ZlZCBvbmNlIFJlYWN0IHByb3Blcmx5IHN1cHBvcnRzIGNoYW5nZSBldmVudHMuXG4gICAgICogQGRlcHJlY2F0ZWRcbiAgICAgKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdkaWRDaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLXNsaWRlcl9faGVpZ2h0LWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNsaWRlcl9fd3JhcHBlclwiPlxuICAgICAgICAgIDxzbG90IG5hbWU9XCJwcmVmaXhcIj5cbiAgICAgICAgICAgICR7dGhpcy5zdGFydEljb24gPyBodG1sYDxzYmItaWNvbiBuYW1lPVwiJHt0aGlzLnN0YXJ0SWNvbn1cIj48L3NiYi1pY29uPmAgOiBub3RoaW5nfVxuICAgICAgICAgIDwvc2xvdD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLXNsaWRlcl9fY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICAgICAgICAgIG1pbj0ke3RoaXMubWlufVxuICAgICAgICAgICAgICBtYXg9JHt0aGlzLm1heH1cbiAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZCB8fCB0aGlzLmZvcm1EaXNhYmxlZCB8fCB0aGlzLnJlYWRPbmx5fVxuICAgICAgICAgICAgICB2YWx1ZT0ke3RoaXMudmFsdWUgfHwgbm90aGluZ31cbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItc2xpZGVyX19yYW5nZS1pbnB1dFwiXG4gICAgICAgICAgICAgIHR5cGU9XCJyYW5nZVwiXG4gICAgICAgICAgICAgIEBjaGFuZ2U9JHsoKSA9PiB0aGlzLl9kaXNwYXRjaENoYW5nZUV2ZW50KCl9XG4gICAgICAgICAgICAgIEBpbnB1dD0keygpID0+ICh0aGlzLnZhbHVlID0gdGhpcy5fcmFuZ2VJbnB1dC52YWx1ZSl9XG4gICAgICAgICAgICAgICR7cmVmKChpbnB1dD86IEVsZW1lbnQpID0+ICh0aGlzLl9yYW5nZUlucHV0ID0gaW5wdXQgYXMgSFRNTElucHV0RWxlbWVudCkpfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2xpZGVyX19saW5lXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2xpZGVyX19zZWxlY3RlZC1saW5lXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzYmItc2xpZGVyX19rbm9iXCI+PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPHNsb3QgbmFtZT1cInN1ZmZpeFwiPlxuICAgICAgICAgICAgJHt0aGlzLmVuZEljb24gPyBodG1sYDxzYmItaWNvbiBuYW1lPVwiJHt0aGlzLmVuZEljb259XCI+PC9zYmItaWNvbj5gIDogbm90aGluZ31cbiAgICAgICAgICA8L3Nsb3Q+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLXNsaWRlcic6IFNiYlNsaWRlckVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0lDK0JNLDBCQUFnQjt5QkFIckIsZUFBZSxFQUNkLFVBQVUsS0FDWCxDQUFDLENBQUE7Ozs7bUJBQzZCLGlCQUM3QixpQkFBaUIsdUJB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
|