@spectrum-web-components/slider 0.12.6-express.9 → 0.12.6
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/custom-elements.json +6 -6
- package/package.json +8 -8
- package/sp-slider-handle.d.ts +0 -6
- package/sp-slider-handle.js +0 -14
- package/sp-slider-handle.js.map +0 -1
- package/sp-slider.d.ts +0 -7
- package/sp-slider.js +0 -15
- package/sp-slider.js.map +0 -1
- package/src/HandleController.d.ts +0 -110
- package/src/HandleController.js +0 -470
- package/src/HandleController.js.map +0 -1
- package/src/Slider.d.ts +0 -68
- package/src/Slider.js +0 -370
- package/src/Slider.js.map +0 -1
- package/src/SliderHandle.d.ts +0 -57
- package/src/SliderHandle.js +0 -192
- package/src/SliderHandle.js.map +0 -1
- package/src/index.d.ts +0 -3
- package/src/index.js +0 -15
- package/src/index.js.map +0 -1
- package/src/slider.css.d.ts +0 -2
- package/src/slider.css.js +0 -203
- package/src/slider.css.js.map +0 -1
- package/src/spectrum-slider.css.d.ts +0 -2
- package/src/spectrum-slider.css.js +0 -189
- package/src/spectrum-slider.css.js.map +0 -1
- package/stories/slider.stories.js +0 -699
- package/stories/slider.stories.js.map +0 -1
- package/sync/sp-slider.js +0 -14
- package/sync/sp-slider.js.map +0 -1
- package/test/slider-editable-sync.test.js +0 -147
- package/test/slider-editable-sync.test.js.map +0 -1
- package/test/slider-editable.test.js +0 -147
- package/test/slider-editable.test.js.map +0 -1
- package/test/slider-handle-upgrade.test.js +0 -38
- package/test/slider-handle-upgrade.test.js.map +0 -1
- package/test/slider.test-vrt.js +0 -15
- package/test/slider.test-vrt.js.map +0 -1
- package/test/slider.test.js +0 -842
- package/test/slider.test.js.map +0 -1
|
@@ -1,699 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
Copyright 2020 Adobe. All rights reserved.
|
|
3
|
-
This file is licensed to you under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
you may not use this file except in compliance with the License. You may obtain a copy
|
|
5
|
-
of the License at http://www.apache.org/licenses/LICENSE-2.0
|
|
6
|
-
|
|
7
|
-
Unless required by applicable law or agreed to in writing, software distributed under
|
|
8
|
-
the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
|
|
9
|
-
OF ANY KIND, either express or implied. See the License for the specific language
|
|
10
|
-
governing permissions and limitations under the License.
|
|
11
|
-
*/
|
|
12
|
-
import { html } from '@spectrum-web-components/base';
|
|
13
|
-
import '../sp-slider.js';
|
|
14
|
-
import '../sp-slider-handle.js';
|
|
15
|
-
import { variants } from '../';
|
|
16
|
-
import { spreadProps } from '../../../test/lit-helpers.js';
|
|
17
|
-
export default {
|
|
18
|
-
component: 'sp-slider',
|
|
19
|
-
title: 'Slider',
|
|
20
|
-
argTypes: {
|
|
21
|
-
onInput: { action: 'input' },
|
|
22
|
-
onChange: { action: 'change' },
|
|
23
|
-
variant: {
|
|
24
|
-
name: 'Variant',
|
|
25
|
-
description: 'Determines the style of slider.',
|
|
26
|
-
table: {
|
|
27
|
-
type: { summary: 'string' },
|
|
28
|
-
defaultValue: { summary: undefined },
|
|
29
|
-
},
|
|
30
|
-
control: {
|
|
31
|
-
type: 'inline-radio',
|
|
32
|
-
options: [undefined, ...variants],
|
|
33
|
-
},
|
|
34
|
-
},
|
|
35
|
-
tickStep: {
|
|
36
|
-
name: 'Tick Step',
|
|
37
|
-
description: 'Tick spacing on slider.',
|
|
38
|
-
table: {
|
|
39
|
-
type: { summary: 'number' },
|
|
40
|
-
defaultValue: { summary: 0.1 },
|
|
41
|
-
},
|
|
42
|
-
control: {
|
|
43
|
-
type: 'number',
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
labelVisibility: {
|
|
47
|
-
name: 'Label Visibility',
|
|
48
|
-
description: 'The labels visibily available in the UI',
|
|
49
|
-
table: {
|
|
50
|
-
type: { summary: '"text" | "value" | "none" | undefined' },
|
|
51
|
-
defaultValue: { summary: undefined },
|
|
52
|
-
},
|
|
53
|
-
control: {
|
|
54
|
-
type: 'text',
|
|
55
|
-
},
|
|
56
|
-
},
|
|
57
|
-
},
|
|
58
|
-
args: {
|
|
59
|
-
variant: undefined,
|
|
60
|
-
tickStep: 0.1,
|
|
61
|
-
labelVisibility: undefined,
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
const handleEvent = ({ onInput, onChange }) => (event) => {
|
|
65
|
-
const { value } = event.target;
|
|
66
|
-
if (onInput && event.type === 'input') {
|
|
67
|
-
onInput(value.toString());
|
|
68
|
-
}
|
|
69
|
-
else if (onChange && event.type === 'change') {
|
|
70
|
-
onChange(value.toString());
|
|
71
|
-
}
|
|
72
|
-
};
|
|
73
|
-
const handleHandleEvent = ({ onInput, onChange }) => (event) => {
|
|
74
|
-
const target = event.target;
|
|
75
|
-
if (target.value != null) {
|
|
76
|
-
if (typeof target.value === 'object') {
|
|
77
|
-
const value = JSON.stringify(target.value, null, 2);
|
|
78
|
-
if (onInput && event.type === 'input') {
|
|
79
|
-
onInput(value);
|
|
80
|
-
}
|
|
81
|
-
else if (onChange && event.type === 'change') {
|
|
82
|
-
onChange(value);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
else {
|
|
86
|
-
const value = `${target.name}: ${target.value}`;
|
|
87
|
-
if (onInput && event.type === 'input') {
|
|
88
|
-
onInput(value);
|
|
89
|
-
}
|
|
90
|
-
else if (onChange && event.type === 'change') {
|
|
91
|
-
onChange(value);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
};
|
|
96
|
-
export const Default = (args = {}) => {
|
|
97
|
-
return html `
|
|
98
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
99
|
-
<sp-slider
|
|
100
|
-
max="1"
|
|
101
|
-
min="0"
|
|
102
|
-
value=".5"
|
|
103
|
-
step="0.01"
|
|
104
|
-
@input=${handleEvent(args)}
|
|
105
|
-
@change=${handleEvent(args)}
|
|
106
|
-
.formatOptions=${{ style: 'percent' }}
|
|
107
|
-
...=${spreadProps(args)}
|
|
108
|
-
>
|
|
109
|
-
Opacity
|
|
110
|
-
</sp-slider>
|
|
111
|
-
</div>
|
|
112
|
-
`;
|
|
113
|
-
};
|
|
114
|
-
export const noVisibleTextLabel = (args = {}) => {
|
|
115
|
-
return html `
|
|
116
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
117
|
-
<sp-slider
|
|
118
|
-
max="1"
|
|
119
|
-
min="0"
|
|
120
|
-
value=".5"
|
|
121
|
-
step="0.01"
|
|
122
|
-
@input=${handleEvent(args)}
|
|
123
|
-
@change=${handleEvent(args)}
|
|
124
|
-
.formatOptions=${{ style: 'percent' }}
|
|
125
|
-
...=${spreadProps(args)}
|
|
126
|
-
>
|
|
127
|
-
Opacity
|
|
128
|
-
</sp-slider>
|
|
129
|
-
</div>
|
|
130
|
-
`;
|
|
131
|
-
};
|
|
132
|
-
noVisibleTextLabel.args = {
|
|
133
|
-
labelVisibility: 'value',
|
|
134
|
-
};
|
|
135
|
-
export const noVisibleValueLabel = (args = {}) => {
|
|
136
|
-
return html `
|
|
137
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
138
|
-
<sp-slider
|
|
139
|
-
max="1"
|
|
140
|
-
min="0"
|
|
141
|
-
value=".5"
|
|
142
|
-
step="0.01"
|
|
143
|
-
@input=${handleEvent(args)}
|
|
144
|
-
@change=${handleEvent(args)}
|
|
145
|
-
.formatOptions=${{ style: 'percent' }}
|
|
146
|
-
...=${spreadProps(args)}
|
|
147
|
-
>
|
|
148
|
-
Opacity
|
|
149
|
-
</sp-slider>
|
|
150
|
-
</div>
|
|
151
|
-
`;
|
|
152
|
-
};
|
|
153
|
-
noVisibleValueLabel.args = {
|
|
154
|
-
labelVisibility: 'text',
|
|
155
|
-
};
|
|
156
|
-
export const noVisibleLabels = (args = {}) => {
|
|
157
|
-
return html `
|
|
158
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
159
|
-
<sp-slider
|
|
160
|
-
max="1"
|
|
161
|
-
min="0"
|
|
162
|
-
value=".5"
|
|
163
|
-
step="0.01"
|
|
164
|
-
@input=${handleEvent(args)}
|
|
165
|
-
@change=${handleEvent(args)}
|
|
166
|
-
.formatOptions=${{ style: 'percent' }}
|
|
167
|
-
...=${spreadProps(args)}
|
|
168
|
-
>
|
|
169
|
-
Opacity
|
|
170
|
-
</sp-slider>
|
|
171
|
-
</div>
|
|
172
|
-
`;
|
|
173
|
-
};
|
|
174
|
-
noVisibleLabels.args = {
|
|
175
|
-
labelVisibility: 'none',
|
|
176
|
-
};
|
|
177
|
-
export const px = (args = {}) => {
|
|
178
|
-
return html `
|
|
179
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
180
|
-
<sp-slider
|
|
181
|
-
max="360"
|
|
182
|
-
min="0"
|
|
183
|
-
value="90"
|
|
184
|
-
step="1"
|
|
185
|
-
@input=${handleEvent(args)}
|
|
186
|
-
@change=${handleEvent(args)}
|
|
187
|
-
.formatOptions=${{
|
|
188
|
-
style: 'unit',
|
|
189
|
-
unit: 'px',
|
|
190
|
-
}}
|
|
191
|
-
...=${spreadProps(args)}
|
|
192
|
-
>
|
|
193
|
-
Angle
|
|
194
|
-
</sp-slider>
|
|
195
|
-
</div>
|
|
196
|
-
`;
|
|
197
|
-
};
|
|
198
|
-
class NumberFieldDefined extends HTMLElement {
|
|
199
|
-
constructor() {
|
|
200
|
-
super();
|
|
201
|
-
this.numberFieldLoaderPromise = Promise.resolve(false);
|
|
202
|
-
this.numberFieldLoaderPromise = new Promise((res) => {
|
|
203
|
-
customElements.whenDefined('sp-number-field').then(() => {
|
|
204
|
-
res(true);
|
|
205
|
-
});
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
get updateComplete() {
|
|
209
|
-
return this.numberFieldLoaderPromise;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
customElements.define('number-field-defined', NumberFieldDefined);
|
|
213
|
-
const editableDecorator = (story) => {
|
|
214
|
-
return html `
|
|
215
|
-
${story()}
|
|
216
|
-
<number-field-defined></number-field-defined>
|
|
217
|
-
`;
|
|
218
|
-
};
|
|
219
|
-
export const editable = (args = {}) => {
|
|
220
|
-
return html `
|
|
221
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
222
|
-
<sp-slider
|
|
223
|
-
editable
|
|
224
|
-
max="360"
|
|
225
|
-
min="0"
|
|
226
|
-
value="90"
|
|
227
|
-
step="1"
|
|
228
|
-
@input=${handleEvent(args)}
|
|
229
|
-
@change=${handleEvent(args)}
|
|
230
|
-
.formatOptions=${{
|
|
231
|
-
style: 'unit',
|
|
232
|
-
unit: 'degree',
|
|
233
|
-
unitDisplay: 'narrow',
|
|
234
|
-
}}
|
|
235
|
-
...=${spreadProps(args)}
|
|
236
|
-
>
|
|
237
|
-
Angle
|
|
238
|
-
</sp-slider>
|
|
239
|
-
</div>
|
|
240
|
-
`;
|
|
241
|
-
};
|
|
242
|
-
editable.decorators = [editableDecorator];
|
|
243
|
-
export const editableDisabled = (args = {}) => {
|
|
244
|
-
return html `
|
|
245
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
246
|
-
<sp-slider
|
|
247
|
-
editable
|
|
248
|
-
disabled
|
|
249
|
-
max="360"
|
|
250
|
-
min="0"
|
|
251
|
-
value="90"
|
|
252
|
-
step="1"
|
|
253
|
-
@input=${handleEvent(args)}
|
|
254
|
-
@change=${handleEvent(args)}
|
|
255
|
-
.formatOptions=${{
|
|
256
|
-
style: 'unit',
|
|
257
|
-
unit: 'degree',
|
|
258
|
-
unitDisplay: 'narrow',
|
|
259
|
-
}}
|
|
260
|
-
...=${spreadProps(args)}
|
|
261
|
-
>
|
|
262
|
-
Angle
|
|
263
|
-
</sp-slider>
|
|
264
|
-
</div>
|
|
265
|
-
`;
|
|
266
|
-
};
|
|
267
|
-
editable.decorators = [editableDecorator];
|
|
268
|
-
export const editableCustom = (args = {}) => {
|
|
269
|
-
return html `
|
|
270
|
-
<div
|
|
271
|
-
style="width: 500px; margin: 12px 20px; --spectrum-slider-editable-number-field-width: 150px;"
|
|
272
|
-
>
|
|
273
|
-
<sp-slider
|
|
274
|
-
editable
|
|
275
|
-
max="24"
|
|
276
|
-
min="0"
|
|
277
|
-
value="12.75"
|
|
278
|
-
step="0.25"
|
|
279
|
-
@input=${handleEvent(args)}
|
|
280
|
-
@change=${handleEvent(args)}
|
|
281
|
-
.formatOptions=${{ style: 'unit', unit: 'hour' }}
|
|
282
|
-
...=${spreadProps(args)}
|
|
283
|
-
>
|
|
284
|
-
Hours
|
|
285
|
-
</sp-slider>
|
|
286
|
-
</div>
|
|
287
|
-
`;
|
|
288
|
-
};
|
|
289
|
-
editableCustom.decorators = [editableDecorator];
|
|
290
|
-
export const hideStepper = (args = {}) => {
|
|
291
|
-
return html `
|
|
292
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
293
|
-
<sp-slider
|
|
294
|
-
editable
|
|
295
|
-
hide-stepper
|
|
296
|
-
max="1"
|
|
297
|
-
min="0"
|
|
298
|
-
value=".5"
|
|
299
|
-
step="0.01"
|
|
300
|
-
@input=${handleEvent(args)}
|
|
301
|
-
@change=${handleEvent(args)}
|
|
302
|
-
.formatOptions=${{ style: 'percent' }}
|
|
303
|
-
...=${spreadProps(args)}
|
|
304
|
-
>
|
|
305
|
-
Opacity
|
|
306
|
-
</sp-slider>
|
|
307
|
-
</div>
|
|
308
|
-
`;
|
|
309
|
-
};
|
|
310
|
-
hideStepper.decorators = [editableDecorator];
|
|
311
|
-
export const Gradient = (args = {}) => {
|
|
312
|
-
return html `
|
|
313
|
-
<div
|
|
314
|
-
style="
|
|
315
|
-
width: 500px;
|
|
316
|
-
margin: 12px 20px;
|
|
317
|
-
--spectrum-slider-track-color:linear-gradient(to right, red, green 100%);
|
|
318
|
-
--spectrum-slider-track-color-rtl:linear-gradient(to left, red, green 100%);
|
|
319
|
-
"
|
|
320
|
-
>
|
|
321
|
-
<sp-slider
|
|
322
|
-
label="Opacity"
|
|
323
|
-
max="100"
|
|
324
|
-
min="0"
|
|
325
|
-
value="50"
|
|
326
|
-
id="opacity-slider"
|
|
327
|
-
@input=${handleEvent(args)}
|
|
328
|
-
@change=${handleEvent(args)}
|
|
329
|
-
...=${spreadProps(args)}
|
|
330
|
-
></sp-slider>
|
|
331
|
-
</div>
|
|
332
|
-
`;
|
|
333
|
-
};
|
|
334
|
-
Gradient.args = {
|
|
335
|
-
variant: undefined,
|
|
336
|
-
};
|
|
337
|
-
export const tick = (args = {}) => {
|
|
338
|
-
return html `
|
|
339
|
-
<sp-slider
|
|
340
|
-
label="Slider Label"
|
|
341
|
-
variant="tick"
|
|
342
|
-
min="0"
|
|
343
|
-
max="92"
|
|
344
|
-
...=${spreadProps(args)}
|
|
345
|
-
></sp-slider>
|
|
346
|
-
`;
|
|
347
|
-
};
|
|
348
|
-
tick.args = {
|
|
349
|
-
variant: 'tick',
|
|
350
|
-
tickStep: 5,
|
|
351
|
-
};
|
|
352
|
-
export const Disabled = (args = {}) => {
|
|
353
|
-
return html `
|
|
354
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
355
|
-
<sp-slider
|
|
356
|
-
disabled
|
|
357
|
-
value="5"
|
|
358
|
-
step="0.5"
|
|
359
|
-
min="0"
|
|
360
|
-
max="20"
|
|
361
|
-
label="Intensity"
|
|
362
|
-
...=${spreadProps(args)}
|
|
363
|
-
></sp-slider>
|
|
364
|
-
</div>
|
|
365
|
-
`;
|
|
366
|
-
};
|
|
367
|
-
export const ExplicitHandle = (args = {}) => {
|
|
368
|
-
return html `
|
|
369
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
370
|
-
<sp-slider
|
|
371
|
-
step="0.5"
|
|
372
|
-
min="0"
|
|
373
|
-
max="20"
|
|
374
|
-
@input=${handleHandleEvent(args)}
|
|
375
|
-
@change=${handleHandleEvent(args)}
|
|
376
|
-
...=${spreadProps(args)}
|
|
377
|
-
>
|
|
378
|
-
Intensity
|
|
379
|
-
<sp-slider-handle slot="handle" value="5"></sp-slider-handle>
|
|
380
|
-
</sp-slider>
|
|
381
|
-
</div>
|
|
382
|
-
`;
|
|
383
|
-
};
|
|
384
|
-
export const TwoHandles = (args = {}) => {
|
|
385
|
-
return html `
|
|
386
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
387
|
-
<sp-slider
|
|
388
|
-
value="5"
|
|
389
|
-
step="1"
|
|
390
|
-
min="0"
|
|
391
|
-
max="255"
|
|
392
|
-
@input=${handleHandleEvent(args)}
|
|
393
|
-
@change=${handleHandleEvent(args)}
|
|
394
|
-
...=${spreadProps(args)}
|
|
395
|
-
>
|
|
396
|
-
Output Levels
|
|
397
|
-
<sp-slider-handle
|
|
398
|
-
slot="handle"
|
|
399
|
-
name="min"
|
|
400
|
-
value="5"
|
|
401
|
-
></sp-slider-handle>
|
|
402
|
-
<sp-slider-handle
|
|
403
|
-
slot="handle"
|
|
404
|
-
name="max"
|
|
405
|
-
value="250"
|
|
406
|
-
></sp-slider-handle>
|
|
407
|
-
</sp-slider>
|
|
408
|
-
</div>
|
|
409
|
-
`;
|
|
410
|
-
};
|
|
411
|
-
TwoHandles.args = {
|
|
412
|
-
variant: 'range',
|
|
413
|
-
tickStep: 10,
|
|
414
|
-
};
|
|
415
|
-
export const TwoHandlesPt = (args = {}) => {
|
|
416
|
-
return html `
|
|
417
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
418
|
-
<sp-slider
|
|
419
|
-
value="5"
|
|
420
|
-
step="1"
|
|
421
|
-
min="0"
|
|
422
|
-
max="255"
|
|
423
|
-
@input=${handleHandleEvent(args)}
|
|
424
|
-
@change=${handleHandleEvent(args)}
|
|
425
|
-
.formatOptions=${{
|
|
426
|
-
style: 'unit',
|
|
427
|
-
unit: 'pt',
|
|
428
|
-
}}
|
|
429
|
-
...=${spreadProps(args)}
|
|
430
|
-
>
|
|
431
|
-
Output Levels
|
|
432
|
-
<sp-slider-handle
|
|
433
|
-
slot="handle"
|
|
434
|
-
name="min"
|
|
435
|
-
value="5"
|
|
436
|
-
></sp-slider-handle>
|
|
437
|
-
<sp-slider-handle
|
|
438
|
-
slot="handle"
|
|
439
|
-
name="max"
|
|
440
|
-
value="250"
|
|
441
|
-
></sp-slider-handle>
|
|
442
|
-
</sp-slider>
|
|
443
|
-
</div>
|
|
444
|
-
`;
|
|
445
|
-
};
|
|
446
|
-
TwoHandlesPt.args = {
|
|
447
|
-
variant: 'range',
|
|
448
|
-
tickStep: 10,
|
|
449
|
-
};
|
|
450
|
-
export const ThreeHandlesPc = (args = {}) => {
|
|
451
|
-
return html `
|
|
452
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
453
|
-
<sp-slider
|
|
454
|
-
value="5"
|
|
455
|
-
step="1"
|
|
456
|
-
min="0"
|
|
457
|
-
max="255"
|
|
458
|
-
@input=${handleHandleEvent(args)}
|
|
459
|
-
@change=${handleHandleEvent(args)}
|
|
460
|
-
.formatOptions=${{
|
|
461
|
-
style: 'unit',
|
|
462
|
-
unit: 'pc',
|
|
463
|
-
}}
|
|
464
|
-
...=${spreadProps(args)}
|
|
465
|
-
>
|
|
466
|
-
Output Levels
|
|
467
|
-
<sp-slider-handle slot="handle" value="5"></sp-slider-handle>
|
|
468
|
-
<sp-slider-handle slot="handle" value="133"></sp-slider-handle>
|
|
469
|
-
<sp-slider-handle slot="handle" value="250"></sp-slider-handle>
|
|
470
|
-
</sp-slider>
|
|
471
|
-
</div>
|
|
472
|
-
`;
|
|
473
|
-
};
|
|
474
|
-
export const ThreeHandlesOrdered = (args = {}) => {
|
|
475
|
-
return html `
|
|
476
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
477
|
-
<sp-slider
|
|
478
|
-
step="1"
|
|
479
|
-
min="0"
|
|
480
|
-
max="255"
|
|
481
|
-
@input=${handleHandleEvent(args)}
|
|
482
|
-
@change=${handleHandleEvent(args)}
|
|
483
|
-
...=${spreadProps(args)}
|
|
484
|
-
>
|
|
485
|
-
Output Levels
|
|
486
|
-
<sp-slider-handle
|
|
487
|
-
slot="handle"
|
|
488
|
-
name="low"
|
|
489
|
-
value="5"
|
|
490
|
-
max="next"
|
|
491
|
-
></sp-slider-handle>
|
|
492
|
-
<sp-slider-handle
|
|
493
|
-
slot="handle"
|
|
494
|
-
name="mid"
|
|
495
|
-
value="100"
|
|
496
|
-
min="previous"
|
|
497
|
-
max="next"
|
|
498
|
-
></sp-slider-handle>
|
|
499
|
-
<sp-slider-handle
|
|
500
|
-
slot="handle"
|
|
501
|
-
name="high"
|
|
502
|
-
value="250"
|
|
503
|
-
min="previous"
|
|
504
|
-
></sp-slider-handle>
|
|
505
|
-
</sp-slider>
|
|
506
|
-
</div>
|
|
507
|
-
`;
|
|
508
|
-
};
|
|
509
|
-
ThreeHandlesOrdered.args = {
|
|
510
|
-
tickStep: 10,
|
|
511
|
-
};
|
|
512
|
-
// This is a very complex example from an actual application.
|
|
513
|
-
//
|
|
514
|
-
// The first and last handles go from 0 to 255 in a linear fashion.
|
|
515
|
-
// The last and first handles are ordered so that the last handle
|
|
516
|
-
// must be greater than or equal to the first handle.
|
|
517
|
-
//
|
|
518
|
-
// The middle handle's range goes from 9.99 to 0.01, counting down.
|
|
519
|
-
// the middle handle's limits are set by the outer handles such that
|
|
520
|
-
// the position of the left handle is the staring value (9.99) for the
|
|
521
|
-
// middle handle. And the position of the right handle is the end
|
|
522
|
-
// value (0.01). That means that the middle handle will move
|
|
523
|
-
// proportionally as you move the outer handles.
|
|
524
|
-
//
|
|
525
|
-
// The two other interesting features of the middle handle are that
|
|
526
|
-
// it counts down, and that it does so exponentially for the first
|
|
527
|
-
// half of its range.
|
|
528
|
-
//
|
|
529
|
-
// Because the specification for the <input> tag in HTML says that the
|
|
530
|
-
// min should be less than the max, we do a double normalization to make
|
|
531
|
-
// this work. The middle handle is considered to go between 0 and 1,
|
|
532
|
-
// where 0 is the left handle's position and 1 is the right handle's
|
|
533
|
-
// position. We then do the appropriate calculation to convert that
|
|
534
|
-
// value into one between 9.99 and 0.01 for display to the user.
|
|
535
|
-
//
|
|
536
|
-
// One iteresting thing to note is that the normalization function
|
|
537
|
-
// can also be used to enforce clamping.
|
|
538
|
-
//
|
|
539
|
-
export const ThreeHandlesComplex = (args = {}) => {
|
|
540
|
-
const values = {
|
|
541
|
-
black: 50,
|
|
542
|
-
gray: 4.98,
|
|
543
|
-
white: 225,
|
|
544
|
-
};
|
|
545
|
-
const handleEvent = ({ onInput, onChange }) => (event) => {
|
|
546
|
-
const target = event.target;
|
|
547
|
-
if (target.value != null) {
|
|
548
|
-
if (typeof target.value === 'object') {
|
|
549
|
-
const value = JSON.stringify(target.value, null, 2);
|
|
550
|
-
if (onInput && event.type === 'input') {
|
|
551
|
-
onInput(value);
|
|
552
|
-
}
|
|
553
|
-
else if (onChange && event.type === 'change') {
|
|
554
|
-
onChange(value);
|
|
555
|
-
}
|
|
556
|
-
}
|
|
557
|
-
else {
|
|
558
|
-
const value = `${target.name}: ${target.value}`;
|
|
559
|
-
if (onInput && event.type === 'input') {
|
|
560
|
-
onInput(value);
|
|
561
|
-
}
|
|
562
|
-
else if (onChange && event.type === 'change') {
|
|
563
|
-
onChange(value);
|
|
564
|
-
}
|
|
565
|
-
}
|
|
566
|
-
values[target.name] = target.value;
|
|
567
|
-
}
|
|
568
|
-
};
|
|
569
|
-
const grayNormalization = {
|
|
570
|
-
toNormalized(value) {
|
|
571
|
-
const normalizedBlack = values.black / 255;
|
|
572
|
-
const normalizedWhite = values.white / 255;
|
|
573
|
-
const clamped = Math.max(Math.min(value, 1), 0);
|
|
574
|
-
return (clamped * (normalizedWhite - normalizedBlack) + normalizedBlack);
|
|
575
|
-
},
|
|
576
|
-
fromNormalized(value) {
|
|
577
|
-
const normalizedBlack = values.black / 255;
|
|
578
|
-
const normalizedWhite = values.white / 255;
|
|
579
|
-
const clamped = Math.max(Math.min(value, normalizedWhite), normalizedBlack);
|
|
580
|
-
return ((clamped - normalizedBlack) /
|
|
581
|
-
(normalizedWhite - normalizedBlack));
|
|
582
|
-
},
|
|
583
|
-
};
|
|
584
|
-
const blackNormalization = {
|
|
585
|
-
toNormalized(value) {
|
|
586
|
-
const clamped = Math.min(value, values.white);
|
|
587
|
-
return clamped / 255;
|
|
588
|
-
},
|
|
589
|
-
fromNormalized(value) {
|
|
590
|
-
const denormalized = value * 255;
|
|
591
|
-
return Math.min(denormalized, values.white);
|
|
592
|
-
},
|
|
593
|
-
};
|
|
594
|
-
const whiteNormalization = {
|
|
595
|
-
toNormalized(value) {
|
|
596
|
-
const clamped = Math.max(value, values.black);
|
|
597
|
-
return clamped / 255;
|
|
598
|
-
},
|
|
599
|
-
fromNormalized(value) {
|
|
600
|
-
const denormalized = value * 255;
|
|
601
|
-
return Math.max(denormalized, values.black);
|
|
602
|
-
},
|
|
603
|
-
};
|
|
604
|
-
const computeGray = (value) => {
|
|
605
|
-
let result = 1.0;
|
|
606
|
-
if (value > 0.5) {
|
|
607
|
-
result = Math.max(2 * (1 - value), 0.01);
|
|
608
|
-
}
|
|
609
|
-
else if (value < 0.5) {
|
|
610
|
-
result = ((1 - 2 * value) * (Math.sqrt(9.99) - 1) + 1) ** 2;
|
|
611
|
-
}
|
|
612
|
-
const formatOptions = {
|
|
613
|
-
maximumFractionDigits: 2,
|
|
614
|
-
minimumFractionDigits: 2,
|
|
615
|
-
};
|
|
616
|
-
return new Intl.NumberFormat(navigator.language, formatOptions).format(result);
|
|
617
|
-
};
|
|
618
|
-
return html `
|
|
619
|
-
<div style="width: 500px; margin: 12px 20px;">
|
|
620
|
-
<sp-slider
|
|
621
|
-
step="1"
|
|
622
|
-
min="0"
|
|
623
|
-
max="255"
|
|
624
|
-
@input=${handleEvent}
|
|
625
|
-
@change=${handleEvent}
|
|
626
|
-
...=${spreadProps(args)}
|
|
627
|
-
>
|
|
628
|
-
Output Levels
|
|
629
|
-
<sp-slider-handle
|
|
630
|
-
slot="handle"
|
|
631
|
-
name="black"
|
|
632
|
-
value=${values.black}
|
|
633
|
-
.normalization=${blackNormalization}
|
|
634
|
-
></sp-slider-handle>
|
|
635
|
-
<sp-slider-handle
|
|
636
|
-
slot="handle"
|
|
637
|
-
name="gray"
|
|
638
|
-
value="0.215"
|
|
639
|
-
min="0"
|
|
640
|
-
max="1"
|
|
641
|
-
step="0.005"
|
|
642
|
-
.normalization=${grayNormalization}
|
|
643
|
-
.getAriaHandleText=${computeGray}
|
|
644
|
-
></sp-slider-handle>
|
|
645
|
-
<sp-slider-handle
|
|
646
|
-
slot="handle"
|
|
647
|
-
name="white"
|
|
648
|
-
value=${values.white}
|
|
649
|
-
.normalization=${whiteNormalization}
|
|
650
|
-
></sp-slider-handle>
|
|
651
|
-
</sp-slider>
|
|
652
|
-
</div>
|
|
653
|
-
`;
|
|
654
|
-
};
|
|
655
|
-
ThreeHandlesOrdered.args = {
|
|
656
|
-
tickStep: 10,
|
|
657
|
-
};
|
|
658
|
-
export const focusTabDemo = (args = {}) => {
|
|
659
|
-
const value = 50;
|
|
660
|
-
const min = 0;
|
|
661
|
-
const max = 100;
|
|
662
|
-
const step = 1;
|
|
663
|
-
return html `
|
|
664
|
-
<div style="width: 500px; margin: 12px 20px 20px;">
|
|
665
|
-
<sp-slider
|
|
666
|
-
value="${value}"
|
|
667
|
-
step="${step}"
|
|
668
|
-
min="${min}"
|
|
669
|
-
max="${max}"
|
|
670
|
-
label="Opacity"
|
|
671
|
-
id="opacity-slider-opacity"
|
|
672
|
-
...=${spreadProps(args)}
|
|
673
|
-
></sp-slider>
|
|
674
|
-
</div>
|
|
675
|
-
<div style="width: 500px; margin: 20px;">
|
|
676
|
-
<sp-slider
|
|
677
|
-
value="${value}"
|
|
678
|
-
step="${step}"
|
|
679
|
-
min="${min}"
|
|
680
|
-
max="${max}"
|
|
681
|
-
label="Lightness"
|
|
682
|
-
id="opacity-slider-lightness"
|
|
683
|
-
...=${spreadProps(args)}
|
|
684
|
-
></sp-slider>
|
|
685
|
-
</div>
|
|
686
|
-
<div style="width: 500px; margin: 20px 20px 12px;">
|
|
687
|
-
<sp-slider
|
|
688
|
-
value="${value}"
|
|
689
|
-
step="${step}"
|
|
690
|
-
min="${min}"
|
|
691
|
-
max="${max}"
|
|
692
|
-
label="Saturation"
|
|
693
|
-
id="opacity-slider-saturation"
|
|
694
|
-
...=${spreadProps(args)}
|
|
695
|
-
></sp-slider>
|
|
696
|
-
</div>
|
|
697
|
-
`;
|
|
698
|
-
};
|
|
699
|
-
//# sourceMappingURL=slider.stories.js.map
|