@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.
Files changed (40) hide show
  1. package/custom-elements.json +6 -6
  2. package/package.json +8 -8
  3. package/sp-slider-handle.d.ts +0 -6
  4. package/sp-slider-handle.js +0 -14
  5. package/sp-slider-handle.js.map +0 -1
  6. package/sp-slider.d.ts +0 -7
  7. package/sp-slider.js +0 -15
  8. package/sp-slider.js.map +0 -1
  9. package/src/HandleController.d.ts +0 -110
  10. package/src/HandleController.js +0 -470
  11. package/src/HandleController.js.map +0 -1
  12. package/src/Slider.d.ts +0 -68
  13. package/src/Slider.js +0 -370
  14. package/src/Slider.js.map +0 -1
  15. package/src/SliderHandle.d.ts +0 -57
  16. package/src/SliderHandle.js +0 -192
  17. package/src/SliderHandle.js.map +0 -1
  18. package/src/index.d.ts +0 -3
  19. package/src/index.js +0 -15
  20. package/src/index.js.map +0 -1
  21. package/src/slider.css.d.ts +0 -2
  22. package/src/slider.css.js +0 -203
  23. package/src/slider.css.js.map +0 -1
  24. package/src/spectrum-slider.css.d.ts +0 -2
  25. package/src/spectrum-slider.css.js +0 -189
  26. package/src/spectrum-slider.css.js.map +0 -1
  27. package/stories/slider.stories.js +0 -699
  28. package/stories/slider.stories.js.map +0 -1
  29. package/sync/sp-slider.js +0 -14
  30. package/sync/sp-slider.js.map +0 -1
  31. package/test/slider-editable-sync.test.js +0 -147
  32. package/test/slider-editable-sync.test.js.map +0 -1
  33. package/test/slider-editable.test.js +0 -147
  34. package/test/slider-editable.test.js.map +0 -1
  35. package/test/slider-handle-upgrade.test.js +0 -38
  36. package/test/slider-handle-upgrade.test.js.map +0 -1
  37. package/test/slider.test-vrt.js +0 -15
  38. package/test/slider.test-vrt.js.map +0 -1
  39. package/test/slider.test.js +0 -842
  40. 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