@sbb-esta/lyne-elements-dev 4.9.0-dev.1774354777 → 4.9.0-dev.1774426040

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/table.css CHANGED
@@ -35,42 +35,25 @@
35
35
  caption-side: bottom;
36
36
  color: var(--sbb-table-color);
37
37
  table-layout: auto;
38
+ text-align: left;
38
39
  }
39
- .sbb-table thead > tr:last-of-type > th,
40
- .sbb-table-m thead > tr:last-of-type > th,
41
- .sbb-table-s thead > tr:last-of-type > th,
42
- .sbb-table-xs thead > tr:last-of-type > th {
43
- border-block-end: var(--sbb-table-border);
44
- }
45
- .sbb-table thead > tr:first-of-type > th,
46
- .sbb-table-m thead > tr:first-of-type > th,
47
- .sbb-table-s thead > tr:first-of-type > th,
48
- .sbb-table-xs thead > tr:first-of-type > th {
49
- border-block-start: var(--sbb-table-border);
50
- }
51
- .sbb-table thead > tr > th,
52
- .sbb-table-m thead > tr > th,
53
- .sbb-table-s thead > tr > th,
54
- .sbb-table-xs thead > tr > th {
40
+ .sbb-table th,
41
+ .sbb-table-m th,
42
+ .sbb-table-s th,
43
+ .sbb-table-xs th {
55
44
  font-size: var(--sbb-table-header-cell-font-size);
56
45
  letter-spacing: var(--sbb-typo-letter-spacing-text);
57
46
  font-weight: bold;
58
47
  background-color: var(--sbb-table-background-color);
48
+ border-block-end: var(--sbb-table-border);
59
49
  border-inline-end: var(--sbb-table-border);
60
50
  padding-block: var(--sbb-table-header-padding-block);
61
51
  padding-inline: var(--sbb-table-header-padding-inline);
62
- text-align: left;
63
52
  }
64
- .sbb-table thead > tr > th:first-of-type,
65
- .sbb-table-m thead > tr > th:first-of-type,
66
- .sbb-table-s thead > tr > th:first-of-type,
67
- .sbb-table-xs thead > tr > th:first-of-type {
68
- border-inline-start: var(--sbb-table-border);
69
- }
70
- .sbb-table tbody > tr > td,
71
- .sbb-table-m tbody > tr > td,
72
- .sbb-table-s tbody > tr > td,
73
- .sbb-table-xs tbody > tr > td {
53
+ .sbb-table td,
54
+ .sbb-table-m td,
55
+ .sbb-table-s td,
56
+ .sbb-table-xs td {
74
57
  font-size: var(--sbb-table-data-cell-font-size);
75
58
  letter-spacing: var(--sbb-typo-letter-spacing-text);
76
59
  background-color: var(--sbb-table-background-color);
@@ -79,12 +62,33 @@
79
62
  padding-block: var(--sbb-table-cell-padding-block);
80
63
  padding-inline: var(--sbb-table-cell-padding-inline);
81
64
  }
82
- .sbb-table tbody > tr > td:first-of-type,
83
- .sbb-table-m tbody > tr > td:first-of-type,
84
- .sbb-table-s tbody > tr > td:first-of-type,
85
- .sbb-table-xs tbody > tr > td:first-of-type {
65
+ .sbb-table :is(th, td).sbb-table-group-with-next,
66
+ .sbb-table-m :is(th, td).sbb-table-group-with-next,
67
+ .sbb-table-s :is(th, td).sbb-table-group-with-next,
68
+ .sbb-table-xs :is(th, td).sbb-table-group-with-next {
69
+ border-inline-end: none;
70
+ }
71
+ .sbb-table :is(th, td):first-child,
72
+ .sbb-table-m :is(th, td):first-child,
73
+ .sbb-table-s :is(th, td):first-child,
74
+ .sbb-table-xs :is(th, td):first-child {
86
75
  border-inline-start: var(--sbb-table-border);
87
76
  }
77
+ .sbb-table:has(thead tr) thead tr:first-of-type > :is(th, td), .sbb-table:not(:has(thead tr)) tbody tr:first-of-type > :is(th, td),
78
+ .sbb-table-m:has(thead tr) thead tr:first-of-type > :is(th, td),
79
+ .sbb-table-m:not(:has(thead tr)) tbody tr:first-of-type > :is(th, td),
80
+ .sbb-table-s:has(thead tr) thead tr:first-of-type > :is(th, td),
81
+ .sbb-table-s:not(:has(thead tr)) tbody tr:first-of-type > :is(th, td),
82
+ .sbb-table-xs:has(thead tr) thead tr:first-of-type > :is(th, td),
83
+ .sbb-table-xs:not(:has(thead tr)) tbody tr:first-of-type > :is(th, td) {
84
+ border-block-start: var(--sbb-table-border);
85
+ }
86
+ .sbb-table thead > tr:has(+ tr) > :is(th, td),
87
+ .sbb-table-m thead > tr:has(+ tr) > :is(th, td),
88
+ .sbb-table-s thead > tr:has(+ tr) > :is(th, td),
89
+ .sbb-table-xs thead > tr:has(+ tr) > :is(th, td) {
90
+ border-block-end: none;
91
+ }
88
92
  .sbb-table caption,
89
93
  .sbb-table-m caption,
90
94
  .sbb-table-s caption,
@@ -97,12 +101,6 @@
97
101
  margin-block-start: var(--sbb-table-caption-margin-block-start, var(--sbb-spacing-fixed-4x));
98
102
  text-align: left;
99
103
  }
100
- .sbb-table:not(:has(thead tr)) tbody > tr:first-of-type > td,
101
- .sbb-table-m:not(:has(thead tr)) tbody > tr:first-of-type > td,
102
- .sbb-table-s:not(:has(thead tr)) tbody > tr:first-of-type > td,
103
- .sbb-table-xs:not(:has(thead tr)) tbody > tr:first-of-type > td {
104
- border-block-start: var(--sbb-table-border);
105
- }
106
104
 
107
105
  .sbb-table-m {
108
106
  --sbb-table-header-cell-font-size: var(--sbb-text-font-size-xs);
@@ -167,10 +165,10 @@ sbb-table-wrapper[negative] .sbb-table,
167
165
  letter-spacing: var(--sbb-typo-letter-spacing-text);
168
166
  font-weight: bold;
169
167
  background-color: var(--sbb-table-background-color);
168
+ border-block-end: var(--sbb-table-border);
170
169
  border-inline-end: var(--sbb-table-border);
171
170
  padding-block: var(--sbb-table-header-padding-block);
172
171
  padding-inline: var(--sbb-table-header-padding-inline);
173
- text-align: left;
174
172
  }
175
173
 
176
174
  .sbb-table-row--striped {
@@ -246,4 +244,28 @@ html.sbb-lean .sbb-table:not(.sbb-table-xs, .sbb-table-m) {
246
244
  --sbb-table-header-padding-inline: var(--sbb-spacing-fixed-2x);
247
245
  --sbb-table-cell-padding-block: var(--sbb-spacing-fixed-1x);
248
246
  --sbb-table-cell-padding-inline: var(--sbb-spacing-fixed-2x);
247
+ }
248
+
249
+ .sbb-table-align-start {
250
+ text-align: start;
251
+ }
252
+
253
+ .sbb-table-align-center {
254
+ text-align: center;
255
+ }
256
+
257
+ .sbb-table-align-end {
258
+ text-align: end;
259
+ }
260
+
261
+ .sbb-table-align-justify {
262
+ text-align: justify;
263
+ }
264
+
265
+ .sbb-table-align-left {
266
+ text-align: left;
267
+ }
268
+
269
+ .sbb-table-align-right {
270
+ text-align: right;
249
271
  }
@@ -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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