@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/core/styles/core.scss +5 -0
- package/core/styles/mixins/table.scss +40 -29
- package/core/styles/table.scss +30 -0
- package/core.css +23 -0
- package/custom-elements.json +24 -24
- 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 +83 -38
- package/package.json +2 -2
- package/safety-theme.css +83 -38
- 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 +83 -38
- package/table.css +60 -38
- package/development/slider.component-w_WtVNx-.js +0 -479
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
|
|
40
|
-
.sbb-table-m
|
|
41
|
-
.sbb-table-s
|
|
42
|
-
.sbb-table-xs
|
|
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
|
|
65
|
-
.sbb-table-m
|
|
66
|
-
.sbb-table-s
|
|
67
|
-
.sbb-table-xs
|
|
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
|
|
83
|
-
.sbb-table-m
|
|
84
|
-
.sbb-table-s
|
|
85
|
-
.sbb-table-xs
|
|
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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
|