@spectrum-web-components/slider 1.0.0 → 1.0.2

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.
@@ -1,1041 +0,0 @@
1
- "use strict";
2
- import { html } from "@spectrum-web-components/base";
3
- import "@spectrum-web-components/slider/sp-slider.js";
4
- import "@spectrum-web-components/slider/sp-slider-handle.js";
5
- import "@spectrum-web-components/popover/sp-popover.js";
6
- import "@spectrum-web-components/dialog/sp-dialog.js";
7
- import {
8
- variants
9
- } from "@spectrum-web-components/slider";
10
- import { spreadProps } from "../../../test/lit-helpers.js";
11
- export default {
12
- component: "sp-slider",
13
- title: "Slider",
14
- argTypes: {
15
- onInput: { action: "input" },
16
- onChange: { action: "change" },
17
- variant: {
18
- name: "Variant",
19
- description: "Determines the style of slider.",
20
- table: {
21
- type: { summary: "string" },
22
- defaultValue: { summary: void 0 }
23
- },
24
- control: {
25
- type: "inline-radio",
26
- options: [void 0, ...variants]
27
- }
28
- },
29
- tickStep: {
30
- name: "Tick Step",
31
- description: "Tick spacing on slider.",
32
- table: {
33
- type: { summary: "number" },
34
- defaultValue: { summary: 0.1 }
35
- },
36
- control: {
37
- type: "number"
38
- }
39
- },
40
- labelVisibility: {
41
- name: "Label Visibility",
42
- description: "The labels visibily available in the UI",
43
- table: {
44
- type: { summary: '"text" | "value" | "none" | undefined' },
45
- defaultValue: { summary: void 0 }
46
- },
47
- control: {
48
- type: "text"
49
- }
50
- }
51
- },
52
- args: {
53
- variant: void 0,
54
- tickStep: 0.1,
55
- labelVisibility: void 0
56
- }
57
- };
58
- const handleEvent = ({ onInput, onChange }) => (event) => {
59
- const { value } = event.target;
60
- if (onInput && event.type === "input") {
61
- onInput(value.toString());
62
- } else if (onChange && event.type === "change") {
63
- onChange(value.toString());
64
- }
65
- };
66
- const handleHandleEvent = ({ onInput, onChange }) => (event) => {
67
- const target = event.target;
68
- if (target.value != null) {
69
- if (typeof target.value === "object") {
70
- const value = JSON.stringify(target.value, null, 2);
71
- if (onInput && event.type === "input") {
72
- onInput(value);
73
- } else if (onChange && event.type === "change") {
74
- onChange(value);
75
- }
76
- } else {
77
- const value = `${target.name}: ${target.value}`;
78
- if (onInput && event.type === "input") {
79
- onInput(value);
80
- } else if (onChange && event.type === "change") {
81
- onChange(value);
82
- }
83
- }
84
- }
85
- };
86
- export const Default = (args = {}) => {
87
- return html`
88
- <div style="width: 500px; margin-inline: 20px;">
89
- <sp-slider
90
- max="1"
91
- min="0"
92
- value=".5"
93
- step="0.01"
94
- @input=${handleEvent(args)}
95
- @change=${handleEvent(args)}
96
- .formatOptions=${{ style: "percent" }}
97
- ...=${spreadProps(args)}
98
- >
99
- Opacity
100
- </sp-slider>
101
- </div>
102
- `;
103
- };
104
- export const Filled = (args = {}) => {
105
- return html`
106
- <div style="width: 500px; margin-inline: 20px;">
107
- <sp-slider
108
- max="1"
109
- variant="filled"
110
- min="0"
111
- value=".7"
112
- step="0.01"
113
- @input=${handleEvent(args)}
114
- @change=${handleEvent(args)}
115
- .formatOptions=${{ style: "percent" }}
116
- ...=${spreadProps(args)}
117
- >
118
- Slider Label
119
- </sp-slider>
120
- </div>
121
- `;
122
- };
123
- export const HasADefaultValue = (args = {}) => {
124
- return html`
125
- <div style="width: 500px; margin-inline: 20px;">
126
- <sp-slider
127
- max="1"
128
- min="0"
129
- value=".5"
130
- step="0.01"
131
- default-value="0.2"
132
- @input=${handleEvent(args)}
133
- @change=${handleEvent(args)}
134
- .formatOptions=${{ style: "percent" }}
135
- ...=${spreadProps(args)}
136
- >
137
- double click or press escape key to reset
138
- </sp-slider>
139
- </div>
140
- `;
141
- };
142
- export const FillStart = (args = {}) => {
143
- return html`
144
- <div style="width: 500px; margin-inline: 20px;">
145
- <sp-slider
146
- max="1"
147
- fill-start
148
- variant="filled"
149
- min="0"
150
- value=".7"
151
- step="0.01"
152
- @input=${handleEvent(args)}
153
- @change=${handleEvent(args)}
154
- .formatOptions=${{ style: "percent" }}
155
- ...=${spreadProps(args)}
156
- >
157
- Slider label
158
- </sp-slider>
159
- </div>
160
- `;
161
- };
162
- export const FillStartWithValue = (args = {}) => {
163
- return html`
164
- <div style="width: 500px; margin-inline: 20px;">
165
- <sp-slider
166
- max="1"
167
- min="0"
168
- value=".7"
169
- step="0.1"
170
- fill-start="0.3"
171
- variant="filled"
172
- @input=${handleEvent(args)}
173
- @change=${handleEvent(args)}
174
- .formatOptions=${{ style: "percent" }}
175
- ...=${spreadProps(args)}
176
- >
177
- Value Greater than Fill Start
178
- </sp-slider>
179
- </div>
180
- <div style="width: 500px; margin-inline: 20px;">
181
- <sp-slider
182
- max="20"
183
- min="0"
184
- value="5"
185
- step="1"
186
- fill-start="15"
187
- @input=${handleEvent(args)}
188
- @change=${handleEvent(args)}
189
- .formatOptions=${{ style: "number" }}
190
- ...=${spreadProps(args)}
191
- >
192
- Value Less than Fill Start
193
- </sp-slider>
194
- </div>
195
- `;
196
- };
197
- export const FillStartWithNegativeMinRange = (args = {}) => {
198
- return html`
199
- <div style="width: 500px; margin-inline: 20px;">
200
- <sp-slider
201
- max="150"
202
- min="-50"
203
- value="25"
204
- step="1"
205
- fill-start="0"
206
- @input=${handleEvent(args)}
207
- @change=${handleEvent(args)}
208
- .formatOptions=${{ style: "number" }}
209
- ...=${spreadProps(args)}
210
- >
211
- Fill start with "0" and within range -50 to 150
212
- </sp-slider>
213
- </div>
214
- <div style="width: 500px; margin-inline: 20px;">
215
- <sp-slider
216
- max="100"
217
- min="-50"
218
- value="-25"
219
- step="1"
220
- fill-start="0"
221
- @input=${handleEvent(args)}
222
- @change=${handleEvent(args)}
223
- .formatOptions=${{ style: "number" }}
224
- .normalization=${{
225
- toNormalized: (value) => {
226
- if (value === 0) return 0.5;
227
- return value < 0 ? 0.5 - value / -50 * 0.5 : 0.5 + value / 100 * 0.5;
228
- },
229
- fromNormalized: (value) => {
230
- if (value === 0.5) return 0;
231
- return value < 0.5 ? (1 - value / 0.5) * -50 : (value - 0.5) / 0.5 * 100;
232
- }
233
- }}
234
- ...=${spreadProps(args)}
235
- >
236
- Fill start with "0" and normalization function within range -50
237
- to 100
238
- </sp-slider>
239
- </div>
240
- `;
241
- };
242
- export const autofocus = (args = {}) => {
243
- return html`
244
- <div style="width: 500px; margin-inline: 20px;">
245
- <sp-slider
246
- autofocus
247
- max="1"
248
- min="0"
249
- value=".5"
250
- step="0.01"
251
- @input=${handleEvent(args)}
252
- @change=${handleEvent(args)}
253
- .formatOptions=${{ style: "percent" }}
254
- ...=${spreadProps(args)}
255
- >
256
- Opacity
257
- </sp-slider>
258
- </div>
259
- `;
260
- };
261
- export const minimalDOM = () => {
262
- return html`
263
- <div style="width: 500px; margin: 12px 20px;">
264
- <sp-slider>Opacity</sp-slider>
265
- </div>
266
- `;
267
- };
268
- export const noVisibleTextLabel = (args = {}) => {
269
- return html`
270
- <div style="width: 500px; margin: 12px 20px;">
271
- <sp-slider
272
- max="1"
273
- min="0"
274
- value=".5"
275
- step="0.01"
276
- @input=${handleEvent(args)}
277
- @change=${handleEvent(args)}
278
- .formatOptions=${{ style: "percent" }}
279
- ...=${spreadProps(args)}
280
- >
281
- Opacity
282
- </sp-slider>
283
- </div>
284
- `;
285
- };
286
- noVisibleTextLabel.args = {
287
- labelVisibility: "value"
288
- };
289
- export const noVisibleValueLabel = (args = {}) => {
290
- return html`
291
- <div style="width: 500px; margin: 12px 20px;">
292
- <sp-slider
293
- max="1"
294
- min="0"
295
- value="0"
296
- step="0.01"
297
- @input=${handleEvent(args)}
298
- @change=${handleEvent(args)}
299
- .formatOptions=${{ style: "percent" }}
300
- ...=${spreadProps(args)}
301
- >
302
- Opacity
303
- </sp-slider>
304
- </div>
305
- `;
306
- };
307
- noVisibleValueLabel.args = {
308
- labelVisibility: "text"
309
- };
310
- export const noVisibleLabels = (args = {}) => {
311
- return html`
312
- <div style="width: 500px; margin: 12px 20px;">
313
- <sp-slider
314
- max="1"
315
- min="0"
316
- value=".5"
317
- step="0.01"
318
- @input=${handleEvent(args)}
319
- @change=${handleEvent(args)}
320
- .formatOptions=${{ style: "percent" }}
321
- ...=${spreadProps(args)}
322
- >
323
- Opacity
324
- </sp-slider>
325
- </div>
326
- `;
327
- };
328
- noVisibleLabels.args = {
329
- labelVisibility: "none"
330
- };
331
- export const px = (args = {}) => {
332
- return html`
333
- <div style="width: 500px; margin: 12px 20px;">
334
- <sp-slider
335
- max="360"
336
- min="0"
337
- value="90"
338
- step="1"
339
- @input=${handleEvent(args)}
340
- @change=${handleEvent(args)}
341
- .formatOptions=${{
342
- style: "unit",
343
- unit: "px"
344
- }}
345
- ...=${spreadProps(args)}
346
- >
347
- Angle
348
- </sp-slider>
349
- </div>
350
- `;
351
- };
352
- class NumberFieldDefined extends HTMLElement {
353
- constructor() {
354
- super();
355
- this.numberFieldLoaderPromise = Promise.resolve(false);
356
- this.numberFieldLoaderPromise = new Promise((res) => {
357
- customElements.whenDefined("sp-number-field").then(() => {
358
- res(true);
359
- });
360
- });
361
- }
362
- get updateComplete() {
363
- return this.numberFieldLoaderPromise;
364
- }
365
- }
366
- customElements.define("number-field-defined", NumberFieldDefined);
367
- const editableDecorator = (story) => {
368
- return html`
369
- ${story()}
370
- <number-field-defined></number-field-defined>
371
- `;
372
- };
373
- export const max20 = (args = {}) => {
374
- return html`
375
- <div style="width: 200px; margin: 12px 20px;">
376
- <sp-slider
377
- editable
378
- max="20"
379
- min="0"
380
- value="5"
381
- step="1"
382
- @input=${handleEvent(args)}
383
- @change=${handleEvent(args)}
384
- ...=${spreadProps(args)}
385
- >
386
- Max 20
387
- </sp-slider>
388
- </div>
389
- `;
390
- };
391
- max20.swc_vrt = {
392
- skip: true
393
- };
394
- export const editable = (args = {}) => {
395
- return html`
396
- <div style="width: 500px; margin: 12px 20px;">
397
- <sp-slider
398
- editable
399
- max="360"
400
- min="0"
401
- value="90"
402
- step="1"
403
- @input=${handleEvent(args)}
404
- @change=${handleEvent(args)}
405
- .formatOptions=${{
406
- style: "unit",
407
- unit: "degree",
408
- unitDisplay: "narrow"
409
- }}
410
- ...=${spreadProps(args)}
411
- >
412
- Angle
413
- </sp-slider>
414
- </div>
415
- `;
416
- };
417
- editable.decorators = [editableDecorator];
418
- export const editableWithDefaultValue = (args = {}) => {
419
- return html`
420
- <div style="width: 500px; margin: 12px 20px;">
421
- <sp-slider
422
- editable
423
- max="360"
424
- min="0"
425
- value="90"
426
- step="1"
427
- default-value="180"
428
- @input=${handleEvent(args)}
429
- @change=${handleEvent(args)}
430
- .formatOptions=${{
431
- style: "unit",
432
- unit: "degree",
433
- unitDisplay: "narrow"
434
- }}
435
- ...=${spreadProps(args)}
436
- >
437
- Angle
438
- </sp-slider>
439
- </div>
440
- `;
441
- };
442
- editableWithDefaultValue.swc_vrt = {
443
- skip: true
444
- };
445
- export const editableWithFractionValue = (args = {}) => {
446
- return html`
447
- <div style="width: 500px; margin: 12px 20px;">
448
- <sp-slider
449
- editable
450
- max="255"
451
- min="0.1"
452
- value="0.5"
453
- step="0.01"
454
- default-value="18"
455
- @input=${handleEvent(args)}
456
- @change=${handleEvent(args)}
457
- ...=${spreadProps(args)}
458
- >
459
- Angle
460
- </sp-slider>
461
- </div>
462
- `;
463
- };
464
- editableWithFractionValue.swc_vrt = {
465
- skip: true
466
- };
467
- export const editableDisabled = (args = {}) => {
468
- return html`
469
- <div style="width: 500px; margin: 12px 20px;">
470
- <sp-slider
471
- editable
472
- disabled
473
- max="360"
474
- min="0"
475
- value="90"
476
- step="1"
477
- @input=${handleEvent(args)}
478
- @change=${handleEvent(args)}
479
- .formatOptions=${{
480
- style: "unit",
481
- unit: "degree",
482
- unitDisplay: "narrow"
483
- }}
484
- ...=${spreadProps(args)}
485
- >
486
- Angle
487
- </sp-slider>
488
- </div>
489
- `;
490
- };
491
- editable.decorators = [editableDecorator];
492
- export const editableCustom = (args = {}) => {
493
- return html`
494
- <div
495
- style="width: 500px; margin: 12px 20px; --mod-stepper-width: 150px;"
496
- >
497
- <sp-slider
498
- editable
499
- max="24"
500
- min="0"
501
- value="12.75"
502
- step="0.25"
503
- @input=${handleEvent(args)}
504
- @change=${handleEvent(args)}
505
- .formatOptions=${{ style: "unit", unit: "hour" }}
506
- ...=${spreadProps(args)}
507
- >
508
- Hours
509
- </sp-slider>
510
- </div>
511
- `;
512
- };
513
- editableCustom.decorators = [editableDecorator];
514
- export const editableWithoutVisibleLabels = (args = {}) => {
515
- return html`
516
- <div style="width: 500px; margin: 12px 20px;">
517
- <sp-slider
518
- editable
519
- max="1"
520
- min="0"
521
- value=".5"
522
- step="0.01"
523
- @input=${handleEvent(args)}
524
- @change=${handleEvent(args)}
525
- .formatOptions=${{ style: "percent" }}
526
- ...=${spreadProps(args)}
527
- >
528
- Opacity
529
- </sp-slider>
530
- </div>
531
- `;
532
- };
533
- editableWithoutVisibleLabels.args = {
534
- labelVisibility: "none"
535
- };
536
- export const hideStepper = (args = {}) => {
537
- return html`
538
- <div style="width: 500px; margin: 12px 20px;">
539
- <sp-slider
540
- editable
541
- hide-stepper
542
- max="1"
543
- min="0"
544
- value=".5"
545
- step="0.01"
546
- @input=${handleEvent(args)}
547
- @change=${handleEvent(args)}
548
- .formatOptions=${{ style: "percent" }}
549
- ...=${spreadProps(args)}
550
- >
551
- Opacity
552
- </sp-slider>
553
- </div>
554
- `;
555
- };
556
- hideStepper.decorators = [editableDecorator];
557
- export const Gradient = (args = {}) => {
558
- return html`
559
- <style>
560
- sp-slider {
561
- --mod-slider-track-color: linear-gradient(
562
- to right,
563
- red,
564
- green 100%
565
- );
566
- }
567
- sp-slider[dir='rtl'] {
568
- --mod-slider-track-color: linear-gradient(
569
- to left,
570
- red,
571
- green 100%
572
- );
573
- }
574
- </style>
575
- <div
576
- style="
577
- width: 500px;
578
- margin: 12px 20px;
579
- "
580
- >
581
- <sp-slider
582
- label="Opacity"
583
- max="100"
584
- min="0"
585
- value="50"
586
- id="opacity-slider"
587
- @input=${handleEvent(args)}
588
- @change=${handleEvent(args)}
589
- ...=${spreadProps(args)}
590
- ></sp-slider>
591
- </div>
592
- `;
593
- };
594
- Gradient.args = {
595
- variant: void 0
596
- };
597
- export const tick = (args = {}) => {
598
- return html`
599
- <sp-slider
600
- label="Slider Label"
601
- variant="tick"
602
- min="0"
603
- max="92"
604
- ...=${spreadProps(args)}
605
- ></sp-slider>
606
- <sp-slider
607
- label="Slider Label"
608
- variant="tick"
609
- min="0"
610
- max="92"
611
- ...=${spreadProps(args)}
612
- ></sp-slider>
613
- `;
614
- };
615
- tick.args = {
616
- variant: "tick",
617
- tickStep: 5
618
- };
619
- export const tickLabels = (args = {}) => {
620
- return html`
621
- <sp-slider
622
- label="Slider Label"
623
- tick-labels
624
- variant="tick"
625
- min="50"
626
- max="75"
627
- ...=${spreadProps(args)}
628
- ></sp-slider>
629
- <sp-slider
630
- label="Slider Label"
631
- tick-labels
632
- variant="tick"
633
- min="50"
634
- max="75"
635
- ...=${spreadProps(args)}
636
- ></sp-slider>
637
- `;
638
- };
639
- tickLabels.args = {
640
- variant: "tick",
641
- tickStep: 5
642
- };
643
- export const Disabled = (args = {}) => {
644
- return html`
645
- <div style="width: 500px; margin: 12px 20px;">
646
- <sp-slider
647
- disabled
648
- value="5"
649
- step="0.5"
650
- min="0"
651
- max="20"
652
- label="Intensity"
653
- ...=${spreadProps(args)}
654
- ></sp-slider>
655
- </div>
656
- `;
657
- };
658
- export const Quiet = (args = {}) => {
659
- return html`
660
- <div style="width: 500px; margin: 12px 20px;">
661
- <sp-slider
662
- editable
663
- hide-stepper
664
- quiet
665
- value="5"
666
- step="0.5"
667
- min="0"
668
- max="20"
669
- label="Intensity"
670
- ...=${spreadProps(args)}
671
- ></sp-slider>
672
- </div>
673
- `;
674
- };
675
- export const inPopover = (args = {}) => {
676
- return html`
677
- <sp-popover open style="min-width: 0">
678
- <sp-dialog no-divider>
679
- <sp-slider
680
- editable
681
- hide-stepper
682
- quiet
683
- value="5"
684
- step="0.5"
685
- min="0"
686
- max="20"
687
- label="Intensity"
688
- ...=${spreadProps(args)}
689
- ></sp-slider>
690
- </sp-dialog>
691
- </sp-popover>
692
- `;
693
- };
694
- export const Indeterminate = (args = {}) => {
695
- return html`
696
- <div style="width: 500px; margin: 12px 20px;">
697
- <sp-slider
698
- editable
699
- indeterminate
700
- value="5"
701
- step="0.5"
702
- min="0"
703
- max="20"
704
- label="Intensity"
705
- @input=${handleEvent(args)}
706
- @change=${handleEvent(args)}
707
- ...=${spreadProps(args)}
708
- ></sp-slider>
709
- </div>
710
- `;
711
- };
712
- export const ExplicitHandle = (args = {}) => {
713
- return html`
714
- <div style="width: 500px; margin: 12px 20px;">
715
- <sp-slider
716
- step="0.5"
717
- min="0"
718
- max="20"
719
- @input=${handleHandleEvent(args)}
720
- @change=${handleHandleEvent(args)}
721
- ...=${spreadProps(args)}
722
- >
723
- Intensity
724
- <sp-slider-handle slot="handle" value="5"></sp-slider-handle>
725
- </sp-slider>
726
- </div>
727
- `;
728
- };
729
- export const TwoHandles = (args = {}) => {
730
- return html`
731
- <div style="width: 500px; margin: 12px 20px;">
732
- <sp-slider
733
- value="5"
734
- step="1"
735
- min="0"
736
- max="255"
737
- @input=${handleHandleEvent(args)}
738
- @change=${handleHandleEvent(args)}
739
- ...=${spreadProps(args)}
740
- >
741
- Output Levels
742
- <sp-slider-handle
743
- slot="handle"
744
- name="min"
745
- label="Minimum"
746
- value="5"
747
- ></sp-slider-handle>
748
- <sp-slider-handle
749
- slot="handle"
750
- name="max"
751
- label="Maximum"
752
- value="250"
753
- ></sp-slider-handle>
754
- </sp-slider>
755
- </div>
756
- `;
757
- };
758
- TwoHandles.args = {
759
- variant: "range",
760
- tickStep: 10
761
- };
762
- export const TwoHandlesPt = (args = {}) => {
763
- return html`
764
- <div style="width: 500px; margin: 12px 20px;">
765
- <sp-slider
766
- value="5"
767
- step="1"
768
- min="0"
769
- max="255"
770
- @input=${handleHandleEvent(args)}
771
- @change=${handleHandleEvent(args)}
772
- .formatOptions=${{
773
- style: "unit",
774
- unit: "pt"
775
- }}
776
- ...=${spreadProps(args)}
777
- >
778
- Output Levels
779
- <sp-slider-handle
780
- slot="handle"
781
- name="min"
782
- label="Minimum"
783
- value="5"
784
- ></sp-slider-handle>
785
- <sp-slider-handle
786
- slot="handle"
787
- name="max"
788
- label="Maximum"
789
- value="250"
790
- ></sp-slider-handle>
791
- </sp-slider>
792
- </div>
793
- `;
794
- };
795
- TwoHandlesPt.args = {
796
- variant: "range",
797
- tickStep: 10
798
- };
799
- export const ThreeHandlesPc = (args = {}) => {
800
- return html`
801
- <div style="width: 500px; margin: 12px 20px;">
802
- <sp-slider
803
- value="5"
804
- step="1"
805
- min="0"
806
- max="255"
807
- @input=${handleHandleEvent(args)}
808
- @change=${handleHandleEvent(args)}
809
- .formatOptions=${{ style: "unit", unit: "pc" }}
810
- ...=${spreadProps(args)}
811
- >
812
- Output Levels
813
- <sp-slider-handle
814
- slot="handle"
815
- value="5"
816
- label="Low"
817
- ></sp-slider-handle>
818
- <sp-slider-handle
819
- slot="handle"
820
- value="133"
821
- label="Mid"
822
- ></sp-slider-handle>
823
- <sp-slider-handle
824
- slot="handle"
825
- value="250"
826
- label="High"
827
- ></sp-slider-handle>
828
- </sp-slider>
829
- </div>
830
- `;
831
- };
832
- ThreeHandlesPc.args = {
833
- variant: "range"
834
- };
835
- export const ThreeHandlesOrdered = (args = {}) => {
836
- return html`
837
- <div style="width: 500px; margin: 12px 20px;">
838
- <sp-slider
839
- step="1"
840
- min="0"
841
- max="255"
842
- @input=${handleHandleEvent(args)}
843
- @change=${handleHandleEvent(args)}
844
- ...=${spreadProps(args)}
845
- >
846
- Output Levels
847
- <sp-slider-handle
848
- slot="handle"
849
- name="low"
850
- label="Low"
851
- value="5"
852
- max="next"
853
- ></sp-slider-handle>
854
- <sp-slider-handle
855
- slot="handle"
856
- name="mid"
857
- label="Mid"
858
- value="100"
859
- min="previous"
860
- max="next"
861
- ></sp-slider-handle>
862
- <sp-slider-handle
863
- slot="handle"
864
- name="high"
865
- label="High"
866
- value="250"
867
- min="previous"
868
- ></sp-slider-handle>
869
- </sp-slider>
870
- </div>
871
- `;
872
- };
873
- ThreeHandlesOrdered.args = {
874
- variant: "range",
875
- tickStep: 10
876
- };
877
- export const ThreeHandlesComplex = (args = {}) => {
878
- const values = {
879
- black: 50,
880
- gray: 4.98,
881
- white: 225
882
- };
883
- const handleEvent2 = ({ onInput, onChange }) => (event) => {
884
- const target = event.target;
885
- if (target.value != null) {
886
- if (typeof target.value === "object") {
887
- const value = JSON.stringify(target.value, null, 2);
888
- if (onInput && event.type === "input") {
889
- onInput(value);
890
- } else if (onChange && event.type === "change") {
891
- onChange(value);
892
- }
893
- } else {
894
- const value = `${target.name}: ${target.value}`;
895
- if (onInput && event.type === "input") {
896
- onInput(value);
897
- } else if (onChange && event.type === "change") {
898
- onChange(value);
899
- }
900
- }
901
- values[target.name] = target.value;
902
- }
903
- };
904
- const grayNormalization = {
905
- toNormalized(value) {
906
- const normalizedBlack = values.black / 255;
907
- const normalizedWhite = values.white / 255;
908
- const clamped = Math.max(Math.min(value, 1), 0);
909
- return clamped * (normalizedWhite - normalizedBlack) + normalizedBlack;
910
- },
911
- fromNormalized(value) {
912
- const normalizedBlack = values.black / 255;
913
- const normalizedWhite = values.white / 255;
914
- const clamped = Math.max(
915
- Math.min(value, normalizedWhite),
916
- normalizedBlack
917
- );
918
- return (clamped - normalizedBlack) / (normalizedWhite - normalizedBlack);
919
- }
920
- };
921
- const blackNormalization = {
922
- toNormalized(value) {
923
- const clamped = Math.min(value, values.white);
924
- return clamped / 255;
925
- },
926
- fromNormalized(value) {
927
- const denormalized = value * 255;
928
- return Math.min(denormalized, values.white);
929
- }
930
- };
931
- const whiteNormalization = {
932
- toNormalized(value) {
933
- const clamped = Math.max(value, values.black);
934
- return clamped / 255;
935
- },
936
- fromNormalized(value) {
937
- const denormalized = value * 255;
938
- return Math.max(denormalized, values.black);
939
- }
940
- };
941
- const computeGray = (value) => {
942
- let result = 1;
943
- if (value > 0.5) {
944
- result = Math.max(2 * (1 - value), 0.01);
945
- } else if (value < 0.5) {
946
- result = ((1 - 2 * value) * (Math.sqrt(9.99) - 1) + 1) ** 2;
947
- }
948
- const formatOptions = {
949
- maximumFractionDigits: 2,
950
- minimumFractionDigits: 2
951
- };
952
- return new Intl.NumberFormat(navigator.language, formatOptions).format(
953
- result
954
- );
955
- };
956
- return html`
957
- <div style="width: 500px; margin: 12px 20px;">
958
- <sp-slider
959
- step="1"
960
- min="0"
961
- max="255"
962
- @input=${handleEvent2}
963
- @change=${handleEvent2}
964
- ...=${spreadProps(args)}
965
- >
966
- Output Levels
967
- <sp-slider-handle
968
- slot="handle"
969
- name="black"
970
- label="Black"
971
- value=${values.black}
972
- .normalization=${blackNormalization}
973
- ></sp-slider-handle>
974
- <sp-slider-handle
975
- slot="handle"
976
- name="gray"
977
- label="Gray"
978
- value="0.215"
979
- min="0"
980
- max="1"
981
- step="0.005"
982
- .normalization=${grayNormalization}
983
- .getAriaHandleText=${computeGray}
984
- ></sp-slider-handle>
985
- <sp-slider-handle
986
- slot="handle"
987
- name="white"
988
- label="White"
989
- value=${values.white}
990
- .normalization=${whiteNormalization}
991
- ></sp-slider-handle>
992
- </sp-slider>
993
- </div>
994
- `;
995
- };
996
- ThreeHandlesComplex.args = {
997
- variant: "range",
998
- tickStep: 10
999
- };
1000
- export const focusTabDemo = (args = {}) => {
1001
- const value = 50;
1002
- const min = 0;
1003
- const max = 100;
1004
- const step = 1;
1005
- return html`
1006
- <div style="width: 500px; margin: 12px 20px 20px;">
1007
- <sp-slider
1008
- value="${value}"
1009
- step="${step}"
1010
- min="${min}"
1011
- max="${max}"
1012
- label="Opacity"
1013
- id="opacity-slider-opacity"
1014
- ...=${spreadProps(args)}
1015
- ></sp-slider>
1016
- </div>
1017
- <div style="width: 500px; margin: 20px;">
1018
- <sp-slider
1019
- value="${value}"
1020
- step="${step}"
1021
- min="${min}"
1022
- max="${max}"
1023
- label="Lightness"
1024
- id="opacity-slider-lightness"
1025
- ...=${spreadProps(args)}
1026
- ></sp-slider>
1027
- </div>
1028
- <div style="width: 500px; margin: 20px 20px 12px;">
1029
- <sp-slider
1030
- value="${value}"
1031
- step="${step}"
1032
- min="${min}"
1033
- max="${max}"
1034
- label="Saturation"
1035
- id="opacity-slider-saturation"
1036
- ...=${spreadProps(args)}
1037
- ></sp-slider>
1038
- </div>
1039
- `;
1040
- };
1041
- //# sourceMappingURL=slider.stories.js.map