@spectrum-web-components/slider 0.31.1-react.21 → 0.32.0
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 +31 -31
- package/package.json +8 -8
- package/test/slider.test.js +56 -2
- package/test/slider.test.js.map +2 -2
package/custom-elements.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"modules": [
|
|
5
5
|
{
|
|
6
6
|
"kind": "javascript-module",
|
|
7
|
-
"path": "sp-slider-handle.
|
|
7
|
+
"path": "sp-slider-handle.js",
|
|
8
8
|
"declarations": [],
|
|
9
9
|
"exports": [
|
|
10
10
|
{
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
},
|
|
20
20
|
{
|
|
21
21
|
"kind": "javascript-module",
|
|
22
|
-
"path": "sp-slider.
|
|
22
|
+
"path": "sp-slider.js",
|
|
23
23
|
"declarations": [],
|
|
24
24
|
"exports": [
|
|
25
25
|
{
|
|
@@ -34,13 +34,13 @@
|
|
|
34
34
|
},
|
|
35
35
|
{
|
|
36
36
|
"kind": "javascript-module",
|
|
37
|
-
"path": "sync/sp-slider.
|
|
37
|
+
"path": "sync/sp-slider.js",
|
|
38
38
|
"declarations": [],
|
|
39
39
|
"exports": []
|
|
40
40
|
},
|
|
41
41
|
{
|
|
42
42
|
"kind": "javascript-module",
|
|
43
|
-
"path": "src/HandleController.
|
|
43
|
+
"path": "src/HandleController.js",
|
|
44
44
|
"declarations": [
|
|
45
45
|
{
|
|
46
46
|
"kind": "class",
|
|
@@ -618,14 +618,14 @@
|
|
|
618
618
|
"name": "HandleController",
|
|
619
619
|
"declaration": {
|
|
620
620
|
"name": "HandleController",
|
|
621
|
-
"module": "src/HandleController.
|
|
621
|
+
"module": "src/HandleController.js"
|
|
622
622
|
}
|
|
623
623
|
}
|
|
624
624
|
]
|
|
625
625
|
},
|
|
626
626
|
{
|
|
627
627
|
"kind": "javascript-module",
|
|
628
|
-
"path": "src/Slider.
|
|
628
|
+
"path": "src/Slider.js",
|
|
629
629
|
"declarations": [
|
|
630
630
|
{
|
|
631
631
|
"kind": "variable",
|
|
@@ -660,7 +660,7 @@
|
|
|
660
660
|
"default": "new HandleController(\n this\n )",
|
|
661
661
|
"inheritedFrom": {
|
|
662
662
|
"name": "SliderHandle",
|
|
663
|
-
"module": "src/SliderHandle.
|
|
663
|
+
"module": "src/SliderHandle.js"
|
|
664
664
|
}
|
|
665
665
|
},
|
|
666
666
|
{
|
|
@@ -733,7 +733,7 @@
|
|
|
733
733
|
"readonly": true,
|
|
734
734
|
"inheritedFrom": {
|
|
735
735
|
"name": "SliderHandle",
|
|
736
|
-
"module": "src/SliderHandle.
|
|
736
|
+
"module": "src/SliderHandle.js"
|
|
737
737
|
}
|
|
738
738
|
},
|
|
739
739
|
{
|
|
@@ -784,7 +784,7 @@
|
|
|
784
784
|
"default": "0",
|
|
785
785
|
"inheritedFrom": {
|
|
786
786
|
"name": "SliderHandle",
|
|
787
|
-
"module": "src/SliderHandle.
|
|
787
|
+
"module": "src/SliderHandle.js"
|
|
788
788
|
}
|
|
789
789
|
},
|
|
790
790
|
{
|
|
@@ -799,7 +799,7 @@
|
|
|
799
799
|
"default": "100",
|
|
800
800
|
"inheritedFrom": {
|
|
801
801
|
"name": "SliderHandle",
|
|
802
|
-
"module": "src/SliderHandle.
|
|
802
|
+
"module": "src/SliderHandle.js"
|
|
803
803
|
}
|
|
804
804
|
},
|
|
805
805
|
{
|
|
@@ -814,7 +814,7 @@
|
|
|
814
814
|
"default": "1",
|
|
815
815
|
"inheritedFrom": {
|
|
816
816
|
"name": "SliderHandle",
|
|
817
|
-
"module": "src/SliderHandle.
|
|
817
|
+
"module": "src/SliderHandle.js"
|
|
818
818
|
}
|
|
819
819
|
},
|
|
820
820
|
{
|
|
@@ -904,7 +904,7 @@
|
|
|
904
904
|
"readonly": true,
|
|
905
905
|
"inheritedFrom": {
|
|
906
906
|
"name": "SliderHandle",
|
|
907
|
-
"module": "src/SliderHandle.
|
|
907
|
+
"module": "src/SliderHandle.js"
|
|
908
908
|
}
|
|
909
909
|
},
|
|
910
910
|
{
|
|
@@ -917,7 +917,7 @@
|
|
|
917
917
|
"readonly": true,
|
|
918
918
|
"inheritedFrom": {
|
|
919
919
|
"name": "SliderHandle",
|
|
920
|
-
"module": "src/SliderHandle.
|
|
920
|
+
"module": "src/SliderHandle.js"
|
|
921
921
|
}
|
|
922
922
|
},
|
|
923
923
|
{
|
|
@@ -1143,7 +1143,7 @@
|
|
|
1143
1143
|
"default": "''",
|
|
1144
1144
|
"inheritedFrom": {
|
|
1145
1145
|
"name": "SliderHandle",
|
|
1146
|
-
"module": "src/SliderHandle.
|
|
1146
|
+
"module": "src/SliderHandle.js"
|
|
1147
1147
|
}
|
|
1148
1148
|
},
|
|
1149
1149
|
{
|
|
@@ -1156,7 +1156,7 @@
|
|
|
1156
1156
|
"attribute": "value",
|
|
1157
1157
|
"inheritedFrom": {
|
|
1158
1158
|
"name": "SliderHandle",
|
|
1159
|
-
"module": "src/SliderHandle.
|
|
1159
|
+
"module": "src/SliderHandle.js"
|
|
1160
1160
|
}
|
|
1161
1161
|
},
|
|
1162
1162
|
{
|
|
@@ -1171,7 +1171,7 @@
|
|
|
1171
1171
|
"reflects": true,
|
|
1172
1172
|
"inheritedFrom": {
|
|
1173
1173
|
"name": "SliderHandle",
|
|
1174
|
-
"module": "src/SliderHandle.
|
|
1174
|
+
"module": "src/SliderHandle.js"
|
|
1175
1175
|
}
|
|
1176
1176
|
},
|
|
1177
1177
|
{
|
|
@@ -1185,7 +1185,7 @@
|
|
|
1185
1185
|
"attribute": "highlight",
|
|
1186
1186
|
"inheritedFrom": {
|
|
1187
1187
|
"name": "SliderHandle",
|
|
1188
|
-
"module": "src/SliderHandle.
|
|
1188
|
+
"module": "src/SliderHandle.js"
|
|
1189
1189
|
}
|
|
1190
1190
|
},
|
|
1191
1191
|
{
|
|
@@ -1199,7 +1199,7 @@
|
|
|
1199
1199
|
"attribute": "name",
|
|
1200
1200
|
"inheritedFrom": {
|
|
1201
1201
|
"name": "SliderHandle",
|
|
1202
|
-
"module": "src/SliderHandle.
|
|
1202
|
+
"module": "src/SliderHandle.js"
|
|
1203
1203
|
}
|
|
1204
1204
|
},
|
|
1205
1205
|
{
|
|
@@ -1212,7 +1212,7 @@
|
|
|
1212
1212
|
"attribute": "format-options",
|
|
1213
1213
|
"inheritedFrom": {
|
|
1214
1214
|
"name": "SliderHandle",
|
|
1215
|
-
"module": "src/SliderHandle.
|
|
1215
|
+
"module": "src/SliderHandle.js"
|
|
1216
1216
|
}
|
|
1217
1217
|
},
|
|
1218
1218
|
{
|
|
@@ -1226,7 +1226,7 @@
|
|
|
1226
1226
|
"attribute": "label",
|
|
1227
1227
|
"inheritedFrom": {
|
|
1228
1228
|
"name": "SliderHandle",
|
|
1229
|
-
"module": "src/SliderHandle.
|
|
1229
|
+
"module": "src/SliderHandle.js"
|
|
1230
1230
|
}
|
|
1231
1231
|
},
|
|
1232
1232
|
{
|
|
@@ -1238,7 +1238,7 @@
|
|
|
1238
1238
|
"privacy": "public",
|
|
1239
1239
|
"inheritedFrom": {
|
|
1240
1240
|
"name": "SliderHandle",
|
|
1241
|
-
"module": "src/SliderHandle.
|
|
1241
|
+
"module": "src/SliderHandle.js"
|
|
1242
1242
|
}
|
|
1243
1243
|
},
|
|
1244
1244
|
{
|
|
@@ -1248,7 +1248,7 @@
|
|
|
1248
1248
|
"default": "new LanguageResolutionController(this)",
|
|
1249
1249
|
"inheritedFrom": {
|
|
1250
1250
|
"name": "SliderHandle",
|
|
1251
|
-
"module": "src/SliderHandle.
|
|
1251
|
+
"module": "src/SliderHandle.js"
|
|
1252
1252
|
}
|
|
1253
1253
|
},
|
|
1254
1254
|
{
|
|
@@ -1261,7 +1261,7 @@
|
|
|
1261
1261
|
"default": "{\n toNormalized(value: number, min: number, max: number) {\n return (value - min) / (max - min);\n },\n fromNormalized(value: number, min: number, max: number) {\n return value * (max - min) + min;\n },\n}",
|
|
1262
1262
|
"inheritedFrom": {
|
|
1263
1263
|
"name": "SliderHandle",
|
|
1264
|
-
"module": "src/SliderHandle.
|
|
1264
|
+
"module": "src/SliderHandle.js"
|
|
1265
1265
|
}
|
|
1266
1266
|
},
|
|
1267
1267
|
{
|
|
@@ -1275,7 +1275,7 @@
|
|
|
1275
1275
|
},
|
|
1276
1276
|
"inheritedFrom": {
|
|
1277
1277
|
"name": "SliderHandle",
|
|
1278
|
-
"module": "src/SliderHandle.
|
|
1278
|
+
"module": "src/SliderHandle.js"
|
|
1279
1279
|
}
|
|
1280
1280
|
},
|
|
1281
1281
|
{
|
|
@@ -1287,7 +1287,7 @@
|
|
|
1287
1287
|
"privacy": "protected",
|
|
1288
1288
|
"inheritedFrom": {
|
|
1289
1289
|
"name": "SliderHandle",
|
|
1290
|
-
"module": "src/SliderHandle.
|
|
1290
|
+
"module": "src/SliderHandle.js"
|
|
1291
1291
|
}
|
|
1292
1292
|
},
|
|
1293
1293
|
{
|
|
@@ -1301,7 +1301,7 @@
|
|
|
1301
1301
|
},
|
|
1302
1302
|
"inheritedFrom": {
|
|
1303
1303
|
"name": "SliderHandle",
|
|
1304
|
-
"module": "src/SliderHandle.
|
|
1304
|
+
"module": "src/SliderHandle.js"
|
|
1305
1305
|
}
|
|
1306
1306
|
}
|
|
1307
1307
|
],
|
|
@@ -1543,7 +1543,7 @@
|
|
|
1543
1543
|
"name": "variants",
|
|
1544
1544
|
"declaration": {
|
|
1545
1545
|
"name": "variants",
|
|
1546
|
-
"module": "src/Slider.
|
|
1546
|
+
"module": "src/Slider.js"
|
|
1547
1547
|
}
|
|
1548
1548
|
},
|
|
1549
1549
|
{
|
|
@@ -1551,14 +1551,14 @@
|
|
|
1551
1551
|
"name": "Slider",
|
|
1552
1552
|
"declaration": {
|
|
1553
1553
|
"name": "Slider",
|
|
1554
|
-
"module": "src/Slider.
|
|
1554
|
+
"module": "src/Slider.js"
|
|
1555
1555
|
}
|
|
1556
1556
|
}
|
|
1557
1557
|
]
|
|
1558
1558
|
},
|
|
1559
1559
|
{
|
|
1560
1560
|
"kind": "javascript-module",
|
|
1561
|
-
"path": "src/SliderHandle.
|
|
1561
|
+
"path": "src/SliderHandle.js",
|
|
1562
1562
|
"declarations": [
|
|
1563
1563
|
{
|
|
1564
1564
|
"kind": "variable",
|
|
@@ -1857,7 +1857,7 @@
|
|
|
1857
1857
|
"name": "defaultNormalization",
|
|
1858
1858
|
"declaration": {
|
|
1859
1859
|
"name": "defaultNormalization",
|
|
1860
|
-
"module": "src/SliderHandle.
|
|
1860
|
+
"module": "src/SliderHandle.js"
|
|
1861
1861
|
}
|
|
1862
1862
|
},
|
|
1863
1863
|
{
|
|
@@ -1865,7 +1865,7 @@
|
|
|
1865
1865
|
"name": "SliderHandle",
|
|
1866
1866
|
"declaration": {
|
|
1867
1867
|
"name": "SliderHandle",
|
|
1868
|
-
"module": "src/SliderHandle.
|
|
1868
|
+
"module": "src/SliderHandle.js"
|
|
1869
1869
|
}
|
|
1870
1870
|
}
|
|
1871
1871
|
]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/slider",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.32.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -75,12 +75,12 @@
|
|
|
75
75
|
"dependencies": {
|
|
76
76
|
"@internationalized/number": "^3.1.0",
|
|
77
77
|
"@lit-labs/observers": "^2.0.0",
|
|
78
|
-
"@spectrum-web-components/base": "^0.
|
|
79
|
-
"@spectrum-web-components/field-label": "^0.
|
|
80
|
-
"@spectrum-web-components/number-field": "^0.
|
|
81
|
-
"@spectrum-web-components/reactive-controllers": "^0.
|
|
82
|
-
"@spectrum-web-components/shared": "^0.
|
|
83
|
-
"@spectrum-web-components/theme": "^0.
|
|
78
|
+
"@spectrum-web-components/base": "^0.32.0",
|
|
79
|
+
"@spectrum-web-components/field-label": "^0.32.0",
|
|
80
|
+
"@spectrum-web-components/number-field": "^0.32.0",
|
|
81
|
+
"@spectrum-web-components/reactive-controllers": "^0.32.0",
|
|
82
|
+
"@spectrum-web-components/shared": "^0.32.0",
|
|
83
|
+
"@spectrum-web-components/theme": "^0.32.0"
|
|
84
84
|
},
|
|
85
85
|
"devDependencies": {
|
|
86
86
|
"@spectrum-css/slider": "^4.0.1"
|
|
@@ -92,5 +92,5 @@
|
|
|
92
92
|
"./**/*.dev.js",
|
|
93
93
|
"./sync/sp-*.js"
|
|
94
94
|
],
|
|
95
|
-
"gitHead": "
|
|
95
|
+
"gitHead": "c5f67662ac54d0e37debaf7cbd7c2df60e8b294e"
|
|
96
96
|
}
|
package/test/slider.test.js
CHANGED
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from "@open-wc/testing";
|
|
14
14
|
import { sendKeys } from "@web/test-runner-commands";
|
|
15
15
|
import { sendMouse } from "../../../test/plugins/browser.js";
|
|
16
|
-
import { stub } from "sinon";
|
|
16
|
+
import { spy, stub } from "sinon";
|
|
17
17
|
import { createLanguageContext } from "../../../tools/reactive-controllers/test/helpers.js";
|
|
18
18
|
import { testForLitDevWarnings } from "../../../test/testing-helpers.js";
|
|
19
19
|
describe("Slider", () => {
|
|
@@ -315,6 +315,54 @@ describe("Slider", () => {
|
|
|
315
315
|
await elementUpdated(el);
|
|
316
316
|
expect(el.value).to.equal(0);
|
|
317
317
|
});
|
|
318
|
+
it("dispatches `input` of the animation frame", async () => {
|
|
319
|
+
const inputSpy = spy();
|
|
320
|
+
const el = await fixture(
|
|
321
|
+
html`
|
|
322
|
+
<sp-slider
|
|
323
|
+
value="50"
|
|
324
|
+
style="width: 100px"
|
|
325
|
+
@input=${({ target }) => inputSpy(target.value)}
|
|
326
|
+
></sp-slider>
|
|
327
|
+
`
|
|
328
|
+
);
|
|
329
|
+
await elementUpdated(el);
|
|
330
|
+
let frames = 0;
|
|
331
|
+
let shouldCountFrames = true;
|
|
332
|
+
const countFrames = () => {
|
|
333
|
+
if (!shouldCountFrames)
|
|
334
|
+
return;
|
|
335
|
+
frames += 1;
|
|
336
|
+
requestAnimationFrame(countFrames);
|
|
337
|
+
};
|
|
338
|
+
countFrames();
|
|
339
|
+
const toRight = [...Array(51).keys()].map((i) => ({
|
|
340
|
+
type: "move",
|
|
341
|
+
position: [9 + i, 30]
|
|
342
|
+
}));
|
|
343
|
+
const toLeft = toRight.slice(0, -1).reverse();
|
|
344
|
+
await sendMouse({
|
|
345
|
+
steps: [
|
|
346
|
+
{
|
|
347
|
+
type: "move",
|
|
348
|
+
position: [9, 30]
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
type: "down"
|
|
352
|
+
},
|
|
353
|
+
...toRight,
|
|
354
|
+
...toLeft,
|
|
355
|
+
{
|
|
356
|
+
type: "up"
|
|
357
|
+
}
|
|
358
|
+
]
|
|
359
|
+
});
|
|
360
|
+
shouldCountFrames = false;
|
|
361
|
+
expect(
|
|
362
|
+
inputSpy.callCount,
|
|
363
|
+
'should not have more "input"s than frames'
|
|
364
|
+
).to.lte(frames);
|
|
365
|
+
});
|
|
318
366
|
it("manages RTL when min != 0", async () => {
|
|
319
367
|
const el = await fixture(
|
|
320
368
|
html`
|
|
@@ -431,6 +479,7 @@ describe("Slider", () => {
|
|
|
431
479
|
})
|
|
432
480
|
);
|
|
433
481
|
await elementUpdated(el);
|
|
482
|
+
await nextFrame();
|
|
434
483
|
handle.dispatchEvent(
|
|
435
484
|
new PointerEvent("pointermove", {
|
|
436
485
|
clientX: 58,
|
|
@@ -440,6 +489,7 @@ describe("Slider", () => {
|
|
|
440
489
|
})
|
|
441
490
|
);
|
|
442
491
|
await elementUpdated(el);
|
|
492
|
+
await nextFrame();
|
|
443
493
|
expect(el.value, "first pointerdown").to.equal(50);
|
|
444
494
|
expect(el.dragging, "is dragging").to.be.true;
|
|
445
495
|
expect(el.classList.contains("handle-highlight"), "not highlighted").to.be.false;
|
|
@@ -453,6 +503,7 @@ describe("Slider", () => {
|
|
|
453
503
|
})
|
|
454
504
|
);
|
|
455
505
|
await elementUpdated(el);
|
|
506
|
+
await nextFrame();
|
|
456
507
|
expect(el.value, "first pointermove").to.equal(0);
|
|
457
508
|
handle.dispatchEvent(
|
|
458
509
|
new PointerEvent("pointerup", {
|
|
@@ -484,6 +535,7 @@ describe("Slider", () => {
|
|
|
484
535
|
})
|
|
485
536
|
);
|
|
486
537
|
await elementUpdated(el);
|
|
538
|
+
await nextFrame();
|
|
487
539
|
expect(el.value, "second pointerdown").to.equal(50);
|
|
488
540
|
expect(el.dragging, "is dragging").to.be.true;
|
|
489
541
|
expect(el.classList.contains("handle-highlight"), "not highlighted").to.be.false;
|
|
@@ -496,6 +548,7 @@ describe("Slider", () => {
|
|
|
496
548
|
})
|
|
497
549
|
);
|
|
498
550
|
await elementUpdated(el);
|
|
551
|
+
await nextFrame();
|
|
499
552
|
expect(el.value, "second pointermove").to.equal(0);
|
|
500
553
|
handle.dispatchEvent(
|
|
501
554
|
new PointerEvent("pointerup", {
|
|
@@ -538,7 +591,7 @@ describe("Slider", () => {
|
|
|
538
591
|
}
|
|
539
592
|
]
|
|
540
593
|
});
|
|
541
|
-
await
|
|
594
|
+
await elementUpdated(el);
|
|
542
595
|
expect(el.highlight, "with no highlight").to.be.false;
|
|
543
596
|
expect(el.dragging, "dragging").to.be.true;
|
|
544
597
|
let inputEvent = oneEvent(el, "input");
|
|
@@ -554,6 +607,7 @@ describe("Slider", () => {
|
|
|
554
607
|
]
|
|
555
608
|
});
|
|
556
609
|
await inputEvent;
|
|
610
|
+
await nextFrame();
|
|
557
611
|
expect(el.value).to.equal(8);
|
|
558
612
|
inputEvent = oneEvent(el, "input");
|
|
559
613
|
await sendMouse({
|
package/test/slider.test.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["slider.test.ts"],
|
|
4
|
-
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport '@spectrum-web-components/slider/sp-slider.js';\nimport '@spectrum-web-components/slider/sp-slider-handle.js';\nimport { Slider, SliderHandle } from '@spectrum-web-components/slider';\nimport { tick } from '../stories/slider.stories.js';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { stub } from 'sinon';\nimport { createLanguageContext } from '../../../tools/reactive-controllers/test/helpers.js';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\n\ndescribe('Slider', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n )\n );\n it('loads', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads - [variant=\"tick\"]', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n label=\"Ticked Slider\"\n min=\"-100\"\n max=\"100\"\n value=\"0\"\n tick-labels\n variant=\"tick\"\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads - [variant=\"tick\"] irregularly', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('receives value from the outside', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider max=\"20\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n el.value = 10;\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n el.value = 50;\n await elementUpdated(el);\n\n expect(el.value).to.equal(20);\n });\n it('accepts keyboard events', async () => {\n const el = await fixture<Slider>(\n tick({\n variant: 'tick',\n tickStep: 5,\n })\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(46);\n expect(el.highlight).to.be.false;\n\n el.focus();\n await sendKeys({\n press: 'ArrowDown',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal(45);\n expect(el.highlight).to.be.true;\n await sendKeys({\n press: 'ArrowUp',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal(46);\n expect(el.highlight).to.be.true;\n });\n it('accepts pointer events', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(el.highlight).to.be.false;\n expect(pointerId).to.equal(-1);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 1,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId, '1').to.equal(-1);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'it is dragging 1').to.be.true;\n expect(pointerId, '2').to.equal(1);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n pointerId: 2,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(el.highlight).to.be.false;\n expect(pointerId, '3').to.equal(2);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'it is dragging 2').to.be.true;\n expect(pointerId, '4').to.equal(1);\n\n handle.dispatchEvent(\n new PointerEvent('pointercancel', {\n pointerId: 3,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId, '5').to.equal(3);\n });\n it('will `trackPointerDown` on `#controls`', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider style=\"width: 500px\" max=\"70\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(35);\n\n const controls = el.shadowRoot.querySelector(\n '#controls'\n ) as HTMLDivElement;\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 1,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(35);\n expect(el.dragging, 'handle is not yet being dragged').to.be.false;\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(0);\n expect(el.dragging, 'handle is being dragged').to.be.true;\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 508,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'handle is still being dragged').to.be.true;\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(70);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(70);\n expect(el.dragging, 'handle is no longer being dragged').to.be.false;\n });\n it('can be disabled', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider disabled></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n handle.setPointerCapture = (id: number) => (pointerId = id);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId).to.equal(-1);\n\n const controls = el.shadowRoot.querySelector(\n '#controls'\n ) as HTMLDivElement;\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n clientX: 50,\n pointerId: 1,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(50);\n });\n it('accepts pointermove events', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [9, 30],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(0);\n });\n\n it('manages RTL when min != 0', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"1\" max=\"11\" dir=\"rtl\"></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(6);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [9, 30],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(11);\n });\n\n it('goes [disabled] while dragging', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n const handleBoundingRect = handle.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n handleBoundingRect.x + handleBoundingRect.width / 2,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n expect(el.value).to.equal(50);\n\n const inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n handleBoundingRect.x +\n handleBoundingRect.width / 2 +\n 100,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ],\n },\n ],\n });\n await inputEvent;\n\n expect(el.value).to.equal(13);\n\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.false;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n 0,\n handleBoundingRect.top + handleBoundingRect.height / 2,\n ],\n },\n ],\n });\n\n expect(el.value).to.equal(13);\n });\n it('accepts pointermove events in separate interactions', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider style=\"width: 100px\"></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value, 'initial').to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n clientX: 58,\n cancelable: true,\n button: 0,\n pointerId: 100,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 58,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'first pointerdown').to.equal(50);\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.classList.contains('handle-highlight'), 'not highlighted').to\n .be.false;\n expect(pointerId).to.equal(100);\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'first pointermove').to.equal(0);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'first pointerup').to.equal(0);\n expect(el.dragging, 'is dragging').to.be.false;\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n clientX: 58,\n cancelable: true,\n button: 0,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 58,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'second pointerdown').to.equal(50);\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.classList.contains('handle-highlight'), 'not highlighted').to\n .be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'second pointermove').to.equal(0);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'second pointerup').to.equal(0);\n expect(el.dragging, 'is dragging').to.be.false;\n });\n it('accepts pointermove events - [step=0]', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider step=\"0\" max=\"20\" style=\"width: 500px; float: left;\">\n Step = 0\n </sp-slider>\n `\n );\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n\n expect(el.value).to.equal(10);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n const handleBoundingRect = handle.getBoundingClientRect();\n const position: [number, number] = [\n handleBoundingRect.x + handleBoundingRect.width / 2,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ];\n await sendMouse({\n steps: [\n {\n type: 'move',\n position,\n },\n {\n type: 'down',\n },\n ],\n });\n\n await nextFrame();\n\n expect(el.highlight, 'with no highlight').to.be.false;\n expect(el.dragging, 'dragging').to.be.true;\n\n let inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n 200,\n handleBoundingRect.y + handleBoundingRect.height + 100,\n ],\n },\n ],\n });\n await inputEvent;\n\n expect(el.value).to.equal(8);\n\n inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [125, position[1]],\n },\n ],\n });\n await inputEvent;\n\n expect(el.value).to.equal(5);\n });\n it('will not pointermove unless `pointerdown`', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n expect(el.dragging).to.be.false;\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n })\n );\n await nextFrame();\n\n expect(el.value).to.equal(50);\n });\n it('responds to input events on the <input/> element', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n const input = el.shadowRoot.querySelector('.input') as HTMLInputElement;\n\n input.value = '0';\n input.dispatchEvent(new Event('change'));\n\n expect(el.value).to.equal(0);\n });\n it('accepts variants', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider variant=\"tick\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n\n el.variant = 'ramp';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('ramp');\n expect(el.getAttribute('variant')).to.equal('ramp');\n\n el.setAttribute('variant', 'filled');\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('filled');\n expect(el.getAttribute('variant')).to.equal('filled');\n\n el.removeAttribute('variant');\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('');\n expect(el.hasAttribute('variant')).to.be.false;\n });\n it('validates variants', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider variant=\"other\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('');\n expect(el.hasAttribute('variant')).to.be.false;\n\n el.variant = 'tick';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n\n el.variant = 'tick';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n });\n it('has a `focusElement`', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input).to.not.be.undefined;\n expect(input.type).to.equal('range');\n });\n it('displays result of getAriaValueText', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n value=\"50\"\n min=\"0\"\n max=\"100\"\n .getAriaHandleText=${(value: number) => `${value}%`}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input.getAttribute('aria-valuetext')).to.equal('50%');\n\n el.value = 100;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('100%');\n });\n it('displays Intl.formatNumber results', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n value=\".5\"\n min=\"0\"\n max=\"1\"\n .formatOptions=${{ style: 'percent' }}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input.getAttribute('aria-valuetext')).to.equal('50%');\n\n el.value = 100;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('100%');\n });\n it('obeys language property', async () => {\n const [languageContext, updateLanguage] = createLanguageContext('de');\n let el = await fixture<Slider>(\n html`\n <sp-slider\n value=\"2.44\"\n min=\"0\"\n max=\"10\"\n step=\"0.01\"\n @sp-language-context=${languageContext}\n .formatOptions=${{ maximumFractionDigits: 2 }}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n let input = el.focusElement as HTMLInputElement;\n expect(\n input.getAttribute('aria-valuetext'),\n 'First German number'\n ).to.equal('2,44');\n\n updateLanguage('en');\n await elementUpdated(el);\n\n expect(\n input.getAttribute('aria-valuetext'),\n 'First English number'\n ).to.equal('2.44');\n\n updateLanguage('de');\n el = await fixture<Slider>(\n html`\n <sp-slider\n min=\"0\"\n max=\"10\"\n @sp-language-context=${languageContext}\n >\n <sp-slider-handle\n slot=\"handle\"\n step=\"0.01\"\n value=\"2.44\"\n .formatOptions=${{ maximumFractionDigits: 2 }}\n @sp-language-context=${languageContext}\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n input = el.focusElement as HTMLInputElement;\n expect(\n input.getAttribute('aria-valuetext'),\n 'Second German number'\n ).to.equal('2,44');\n\n updateLanguage('en');\n await elementUpdated(el);\n\n expect(\n input.getAttribute('aria-valuetext'),\n 'Second English number'\n ).to.equal('2.44');\n });\n it('uses fallback ariaValueText', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider value=\"50\" min=\"0\" max=\"100\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n (\n el as unknown as {\n getAriaValueText: boolean;\n }\n ).getAriaValueText = false;\n\n const input = el.focusElement as HTMLInputElement;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('50');\n });\n it('accepts min/max/value in the same timing', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n el.min = 0;\n el.max = 200;\n el.value = 200;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(200);\n\n el.value = 500;\n el.min = 0;\n el.max = 500;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(500);\n\n el.value = -100;\n el.min = -100;\n el.max = 500;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(-100);\n });\n it('returns values for handles', async () => {\n let el = await fixture<Slider>(\n html`\n <sp-slider>\n <sp-slider-handle\n slot=\"handle\"\n name=\"a\"\n min=\"0\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n max=\"100\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const middleHandle = el.querySelector('#middle-handle') as SliderHandle;\n middleHandle.value = 22;\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 22, c: 30 });\n\n el = await fixture<Slider>(\n html`\n <sp-slider value=\"10\" min=\"0\" max=\"100\"></sp-slider>\n `\n );\n expect(el.values).to.deep.equal({ value: 10 });\n\n el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n slot=\"handle\"\n value=\"10\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n expect(el.values).to.deep.equal({ handle1: 10 });\n });\n it('clamps values for multi-handle slider', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const firstHandle = el.querySelector('#first-handle') as SliderHandle;\n const middleHandle = el.querySelector('#middle-handle') as SliderHandle;\n const lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n firstHandle.value = 25;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 20, b: 20, c: 30 });\n\n firstHandle.value = 10;\n await elementUpdated(el);\n middleHandle.value = 5;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 30 });\n\n lastHandle.value = 11;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 11 });\n\n lastHandle.value = 7;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 10 });\n });\n it('warns in Dev Mode when `min=\"previous\"` is leveraged on first handle', async () => {\n const consoleWarnStub = stub(console, 'warn');\n window.__swc.issuedWarnings = new Set<BrandedSWCWarningID>();\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n spyCall.args.at(0).includes('previous'),\n 'confirm \"previous\" in message'\n ).to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-slider',\n type: 'api',\n level: 'default',\n },\n });\n consoleWarnStub.restore();\n });\n it('warns in Dev Mode when `max=\"next\"` is leveraged on last handle', async () => {\n const consoleWarnStub = stub(console, 'warn');\n window.__swc.issuedWarnings = new Set<BrandedSWCWarningID>();\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(spyCall.args.at(0).includes('next'), 'confirm \"next\" in message')\n .to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-slider',\n type: 'api',\n level: 'default',\n },\n });\n consoleWarnStub.restore();\n });\n it('builds both handles from a <template>', async () => {\n const template = document.createElement('template');\n template.innerHTML = `\n <sp-slider variant=\"range\" step=\"1\" id=\"price\" name=\"price\" label=\"Max Price\" min=\"35425\" max=\"86610\">\n <sp-slider-handle slot=\"handle\" name=\"min\" label=\"Minimum\" max=\"next\" value=\"35425\"></sp-slider-handle>\n <sp-slider-handle slot=\"handle\" name=\"max\" label=\"Maximum\" min=\"previous\" value=\"86610\"></sp-slider-handle>\n </sp-slider>\n `;\n const el = await fixture<HTMLDivElement>(\n html`\n <div></div>\n `\n );\n\n el.appendChild(template.content.cloneNode(true));\n await waitUntil(() => {\n return el.querySelector('sp-slider')?.shadowRoot != null;\n });\n // Sliders take several frames to fully upgrade\n await nextFrame();\n\n const createdHandles =\n el\n .querySelector('sp-slider')\n ?.shadowRoot.querySelectorAll('.handle') || [];\n expect(createdHandles).to.have.lengthOf(2);\n });\n it('enforces next/previous max/min', async () => {\n let el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n let firstHandle = el.querySelector('#first-handle') as SliderHandle;\n let lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n let firstInput = el.shadowRoot.querySelector(\n '.handle[name=\"a\"] > input'\n ) as HTMLInputElement;\n let middleInput = el.shadowRoot.querySelector(\n '.handle[name=\"b\"] > input'\n ) as HTMLInputElement;\n let lastInput = el.shadowRoot.querySelector(\n '.handle[name=\"c\"] > input'\n ) as HTMLInputElement;\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('10');\n expect(middleInput.max).to.equal('30');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n firstHandle.value = 15;\n lastHandle.value = 85;\n\n await elementUpdated(el);\n await elementUpdated(el);\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('15');\n expect(middleInput.max).to.equal('85');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n el = await fixture<Slider>(\n html`\n <sp-slider>\n <sp-slider-handle\n id=\"first-handle\"\n min=\"0\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n max=\"100\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n firstInput = el.shadowRoot.querySelector(\n '.handle[name=\"a\"] > input'\n ) as HTMLInputElement;\n middleInput = el.shadowRoot.querySelector(\n '.handle[name=\"b\"] > input'\n ) as HTMLInputElement;\n lastInput = el.shadowRoot.querySelector(\n '.handle[name=\"c\"] > input'\n ) as HTMLInputElement;\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('10');\n expect(middleInput.max).to.equal('30');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n firstHandle = el.querySelector('#first-handle') as SliderHandle;\n lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n firstHandle.min = 5;\n lastHandle.max = 95;\n\n await elementUpdated(el);\n await elementUpdated(el);\n\n expect(firstInput.min).to.equal('5');\n expect(firstInput.max).to.equal('20');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('95');\n });\n it('sends keyboard events to active handle', async () => {\n // let pointerId = -1;\n\n const el = await fixture<Slider>(\n html`\n <sp-slider step=\"1\" min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const lastHandle = el.querySelector('#last-handle') as SliderHandle;\n lastHandle.focus();\n\n await sendKeys({\n press: 'ArrowDown',\n });\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 29 });\n });\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport '@spectrum-web-components/slider/sp-slider.js';\nimport '@spectrum-web-components/slider/sp-slider-handle.js';\nimport { Slider, SliderHandle } from '@spectrum-web-components/slider';\nimport { tick } from '../stories/slider.stories.js';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n oneEvent,\n waitUntil,\n} from '@open-wc/testing';\nimport { sendKeys } from '@web/test-runner-commands';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { spy, stub } from 'sinon';\nimport { createLanguageContext } from '../../../tools/reactive-controllers/test/helpers.js';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\n\ndescribe('Slider', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n )\n );\n it('loads', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads - [variant=\"tick\"]', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n label=\"Ticked Slider\"\n min=\"-100\"\n max=\"100\"\n value=\"0\"\n tick-labels\n variant=\"tick\"\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads - [variant=\"tick\"] irregularly', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider label=\"Slider\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('receives value from the outside', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider max=\"20\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n el.value = 10;\n await elementUpdated(el);\n\n expect(el.value).to.equal(10);\n\n el.value = 50;\n await elementUpdated(el);\n\n expect(el.value).to.equal(20);\n });\n it('accepts keyboard events', async () => {\n const el = await fixture<Slider>(\n tick({\n variant: 'tick',\n tickStep: 5,\n })\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(46);\n expect(el.highlight).to.be.false;\n\n el.focus();\n await sendKeys({\n press: 'ArrowDown',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal(45);\n expect(el.highlight).to.be.true;\n await sendKeys({\n press: 'ArrowUp',\n });\n await elementUpdated(el);\n\n expect(el.value).to.equal(46);\n expect(el.highlight).to.be.true;\n });\n it('accepts pointer events', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(el.highlight).to.be.false;\n expect(pointerId).to.equal(-1);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 1,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId, '1').to.equal(-1);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'it is dragging 1').to.be.true;\n expect(pointerId, '2').to.equal(1);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n pointerId: 2,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(el.highlight).to.be.false;\n expect(pointerId, '3').to.equal(2);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'it is dragging 2').to.be.true;\n expect(pointerId, '4').to.equal(1);\n\n handle.dispatchEvent(\n new PointerEvent('pointercancel', {\n pointerId: 3,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId, '5').to.equal(3);\n });\n it('will `trackPointerDown` on `#controls`', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider style=\"width: 500px\" max=\"70\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(35);\n\n const controls = el.shadowRoot.querySelector(\n '#controls'\n ) as HTMLDivElement;\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 1,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(35);\n expect(el.dragging, 'handle is not yet being dragged').to.be.false;\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(0);\n expect(el.dragging, 'handle is being dragged').to.be.true;\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 508,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging, 'handle is still being dragged').to.be.true;\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(70);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n button: 0,\n // account for 8px <body> margin by default\n clientX: 9,\n pointerId: 4,\n bubbles: true,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(4);\n expect(el.value).to.equal(70);\n expect(el.dragging, 'handle is no longer being dragged').to.be.false;\n });\n it('can be disabled', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider disabled></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n handle.setPointerCapture = (id: number) => (pointerId = id);\n\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n pointerId: 1,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.dragging).to.be.false;\n expect(pointerId).to.equal(-1);\n\n const controls = el.shadowRoot.querySelector(\n '#controls'\n ) as HTMLDivElement;\n\n controls.dispatchEvent(\n new PointerEvent('pointerdown', {\n button: 0,\n clientX: 50,\n pointerId: 1,\n cancelable: true,\n })\n );\n await elementUpdated(el);\n\n expect(pointerId).to.equal(-1);\n expect(el.value).to.equal(50);\n });\n it('accepts pointermove events', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [9, 30],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(0);\n });\n\n it('dispatches `input` of the animation frame', async () => {\n const inputSpy = spy();\n const el = await fixture<Slider>(\n html`\n <sp-slider\n value=\"50\"\n style=\"width: 100px\"\n @input=${({ target }: Event & { target: Slider }) =>\n inputSpy(target.value)}\n ></sp-slider>\n `\n );\n await elementUpdated(el);\n\n let frames = 0;\n let shouldCountFrames = true;\n const countFrames = (): void => {\n if (!shouldCountFrames) return;\n frames += 1;\n requestAnimationFrame(countFrames);\n };\n countFrames();\n type Steps = {\n type: 'move';\n position: [number, number];\n }[];\n const toRight: Steps = [...Array(51).keys()].map((i) => ({\n type: 'move',\n position: [9 + i, 30],\n }));\n const toLeft: Steps = toRight.slice(0, -1).reverse();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [9, 30],\n },\n {\n type: 'down',\n },\n ...toRight,\n ...toLeft,\n {\n type: 'up',\n },\n ],\n });\n shouldCountFrames = false;\n\n expect(\n inputSpy.callCount,\n 'should not have more \"input\"s than frames'\n ).to.lte(frames);\n });\n\n it('manages RTL when min != 0', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"1\" max=\"11\" dir=\"rtl\"></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(6);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [9, 30],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n bubbles: true,\n composed: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(11);\n });\n\n it('goes [disabled] while dragging', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n const handleBoundingRect = handle.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n handleBoundingRect.x + handleBoundingRect.width / 2,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ],\n },\n {\n type: 'down',\n },\n ],\n });\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.highlight, 'not highlighted').to.be.false;\n expect(el.value).to.equal(50);\n\n const inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n handleBoundingRect.x +\n handleBoundingRect.width / 2 +\n 100,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ],\n },\n ],\n });\n await inputEvent;\n\n expect(el.value).to.equal(13);\n\n el.disabled = true;\n await elementUpdated(el);\n\n expect(el.dragging, 'is dragging').to.be.false;\n expect(el.highlight, 'not highlighted').to.be.false;\n\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n 0,\n handleBoundingRect.top + handleBoundingRect.height / 2,\n ],\n },\n ],\n });\n\n expect(el.value).to.equal(13);\n });\n it('accepts pointermove events in separate interactions', async () => {\n let pointerId = -1;\n const el = await fixture<Slider>(\n html`\n <sp-slider style=\"width: 100px\"></sp-slider>\n `\n );\n await elementUpdated(el);\n\n expect(el.value, 'initial').to.equal(50);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n el.track.setPointerCapture = (id: number) => (pointerId = id);\n el.track.releasePointerCapture = (id: number) => (pointerId = id);\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n clientX: 58,\n cancelable: true,\n button: 0,\n pointerId: 100,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 58,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n\n expect(el.value, 'first pointerdown').to.equal(50);\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.classList.contains('handle-highlight'), 'not highlighted').to\n .be.false;\n expect(pointerId).to.equal(100);\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n\n expect(el.value, 'first pointermove').to.equal(0);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'first pointerup').to.equal(0);\n expect(el.dragging, 'is dragging').to.be.false;\n handle.dispatchEvent(\n new PointerEvent('pointerdown', {\n clientX: 58,\n cancelable: true,\n button: 0,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 58,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n\n expect(el.value, 'second pointerdown').to.equal(50);\n expect(el.dragging, 'is dragging').to.be.true;\n expect(el.classList.contains('handle-highlight'), 'not highlighted').to\n .be.false;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n\n expect(el.value, 'second pointermove').to.equal(0);\n\n handle.dispatchEvent(\n new PointerEvent('pointerup', {\n clientX: 0,\n cancelable: true,\n composed: true,\n bubbles: true,\n })\n );\n await elementUpdated(el);\n\n expect(el.value, 'second pointerup').to.equal(0);\n expect(el.dragging, 'is dragging').to.be.false;\n });\n it('accepts pointermove events - [step=0]', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider step=\"0\" max=\"20\" style=\"width: 500px; float: left;\">\n Step = 0\n </sp-slider>\n `\n );\n await elementUpdated(el);\n await nextFrame();\n await nextFrame();\n\n expect(el.value).to.equal(10);\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n const handleBoundingRect = handle.getBoundingClientRect();\n const position: [number, number] = [\n handleBoundingRect.x + handleBoundingRect.width / 2,\n handleBoundingRect.y + handleBoundingRect.height / 2,\n ];\n await sendMouse({\n steps: [\n {\n type: 'move',\n position,\n },\n {\n type: 'down',\n },\n ],\n });\n\n await elementUpdated(el);\n\n expect(el.highlight, 'with no highlight').to.be.false;\n expect(el.dragging, 'dragging').to.be.true;\n\n let inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [\n 200,\n handleBoundingRect.y + handleBoundingRect.height + 100,\n ],\n },\n ],\n });\n await inputEvent;\n await nextFrame();\n\n expect(el.value).to.equal(8);\n\n inputEvent = oneEvent(el, 'input');\n await sendMouse({\n steps: [\n {\n type: 'move',\n position: [125, position[1]],\n },\n ],\n });\n await inputEvent;\n\n expect(el.value).to.equal(5);\n });\n it('will not pointermove unless `pointerdown`', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n expect(el.dragging).to.be.false;\n\n const handle = el.shadowRoot.querySelector('.handle') as HTMLDivElement;\n\n handle.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n cancelable: true,\n })\n );\n await nextFrame();\n\n expect(el.value).to.equal(50);\n });\n it('responds to input events on the <input/> element', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n const input = el.shadowRoot.querySelector('.input') as HTMLInputElement;\n\n input.value = '0';\n input.dispatchEvent(new Event('change'));\n\n expect(el.value).to.equal(0);\n });\n it('accepts variants', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider variant=\"tick\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n\n el.variant = 'ramp';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('ramp');\n expect(el.getAttribute('variant')).to.equal('ramp');\n\n el.setAttribute('variant', 'filled');\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('filled');\n expect(el.getAttribute('variant')).to.equal('filled');\n\n el.removeAttribute('variant');\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('');\n expect(el.hasAttribute('variant')).to.be.false;\n });\n it('validates variants', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider variant=\"other\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('');\n expect(el.hasAttribute('variant')).to.be.false;\n\n el.variant = 'tick';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n\n el.variant = 'tick';\n\n await elementUpdated(el);\n\n expect(el.variant).to.equal('tick');\n expect(el.getAttribute('variant')).to.equal('tick');\n });\n it('has a `focusElement`', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input).to.not.be.undefined;\n expect(input.type).to.equal('range');\n });\n it('displays result of getAriaValueText', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n value=\"50\"\n min=\"0\"\n max=\"100\"\n .getAriaHandleText=${(value: number) => `${value}%`}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input.getAttribute('aria-valuetext')).to.equal('50%');\n\n el.value = 100;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('100%');\n });\n it('displays Intl.formatNumber results', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider\n value=\".5\"\n min=\"0\"\n max=\"1\"\n .formatOptions=${{ style: 'percent' }}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n const input = el.focusElement as HTMLInputElement;\n expect(input.getAttribute('aria-valuetext')).to.equal('50%');\n\n el.value = 100;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('100%');\n });\n it('obeys language property', async () => {\n const [languageContext, updateLanguage] = createLanguageContext('de');\n let el = await fixture<Slider>(\n html`\n <sp-slider\n value=\"2.44\"\n min=\"0\"\n max=\"10\"\n step=\"0.01\"\n @sp-language-context=${languageContext}\n .formatOptions=${{ maximumFractionDigits: 2 }}\n ></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n let input = el.focusElement as HTMLInputElement;\n expect(\n input.getAttribute('aria-valuetext'),\n 'First German number'\n ).to.equal('2,44');\n\n updateLanguage('en');\n await elementUpdated(el);\n\n expect(\n input.getAttribute('aria-valuetext'),\n 'First English number'\n ).to.equal('2.44');\n\n updateLanguage('de');\n el = await fixture<Slider>(\n html`\n <sp-slider\n min=\"0\"\n max=\"10\"\n @sp-language-context=${languageContext}\n >\n <sp-slider-handle\n slot=\"handle\"\n step=\"0.01\"\n value=\"2.44\"\n .formatOptions=${{ maximumFractionDigits: 2 }}\n @sp-language-context=${languageContext}\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n input = el.focusElement as HTMLInputElement;\n expect(\n input.getAttribute('aria-valuetext'),\n 'Second German number'\n ).to.equal('2,44');\n\n updateLanguage('en');\n await elementUpdated(el);\n\n expect(\n input.getAttribute('aria-valuetext'),\n 'Second English number'\n ).to.equal('2.44');\n });\n it('uses fallback ariaValueText', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider value=\"50\" min=\"0\" max=\"100\"></sp-slider>\n `\n );\n\n await elementUpdated(el);\n (\n el as unknown as {\n getAriaValueText: boolean;\n }\n ).getAriaValueText = false;\n\n const input = el.focusElement as HTMLInputElement;\n await elementUpdated(el);\n\n expect(input.getAttribute('aria-valuetext')).to.equal('50');\n });\n it('accepts min/max/value in the same timing', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider></sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(50);\n\n el.min = 0;\n el.max = 200;\n el.value = 200;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(200);\n\n el.value = 500;\n el.min = 0;\n el.max = 500;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(500);\n\n el.value = -100;\n el.min = -100;\n el.max = 500;\n\n await elementUpdated(el);\n\n expect(el.value).to.equal(-100);\n });\n it('returns values for handles', async () => {\n let el = await fixture<Slider>(\n html`\n <sp-slider>\n <sp-slider-handle\n slot=\"handle\"\n name=\"a\"\n min=\"0\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n max=\"100\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const middleHandle = el.querySelector('#middle-handle') as SliderHandle;\n middleHandle.value = 22;\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 22, c: 30 });\n\n el = await fixture<Slider>(\n html`\n <sp-slider value=\"10\" min=\"0\" max=\"100\"></sp-slider>\n `\n );\n expect(el.values).to.deep.equal({ value: 10 });\n\n el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n slot=\"handle\"\n value=\"10\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n expect(el.values).to.deep.equal({ handle1: 10 });\n });\n it('clamps values for multi-handle slider', async () => {\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const firstHandle = el.querySelector('#first-handle') as SliderHandle;\n const middleHandle = el.querySelector('#middle-handle') as SliderHandle;\n const lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n firstHandle.value = 25;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 20, b: 20, c: 30 });\n\n firstHandle.value = 10;\n await elementUpdated(el);\n middleHandle.value = 5;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 30 });\n\n lastHandle.value = 11;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 11 });\n\n lastHandle.value = 7;\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 10, c: 10 });\n });\n it('warns in Dev Mode when `min=\"previous\"` is leveraged on first handle', async () => {\n const consoleWarnStub = stub(console, 'warn');\n window.__swc.issuedWarnings = new Set<BrandedSWCWarningID>();\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n spyCall.args.at(0).includes('previous'),\n 'confirm \"previous\" in message'\n ).to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-slider',\n type: 'api',\n level: 'default',\n },\n });\n consoleWarnStub.restore();\n });\n it('warns in Dev Mode when `max=\"next\"` is leveraged on last handle', async () => {\n const consoleWarnStub = stub(console, 'warn');\n window.__swc.issuedWarnings = new Set<BrandedSWCWarningID>();\n const el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(spyCall.args.at(0).includes('next'), 'confirm \"next\" in message')\n .to.be.true;\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'sp-slider',\n type: 'api',\n level: 'default',\n },\n });\n consoleWarnStub.restore();\n });\n it('builds both handles from a <template>', async () => {\n const template = document.createElement('template');\n template.innerHTML = `\n <sp-slider variant=\"range\" step=\"1\" id=\"price\" name=\"price\" label=\"Max Price\" min=\"35425\" max=\"86610\">\n <sp-slider-handle slot=\"handle\" name=\"min\" label=\"Minimum\" max=\"next\" value=\"35425\"></sp-slider-handle>\n <sp-slider-handle slot=\"handle\" name=\"max\" label=\"Maximum\" min=\"previous\" value=\"86610\"></sp-slider-handle>\n </sp-slider>\n `;\n const el = await fixture<HTMLDivElement>(\n html`\n <div></div>\n `\n );\n\n el.appendChild(template.content.cloneNode(true));\n await waitUntil(() => {\n return el.querySelector('sp-slider')?.shadowRoot != null;\n });\n // Sliders take several frames to fully upgrade\n await nextFrame();\n\n const createdHandles =\n el\n .querySelector('sp-slider')\n ?.shadowRoot.querySelectorAll('.handle') || [];\n expect(createdHandles).to.have.lengthOf(2);\n });\n it('enforces next/previous max/min', async () => {\n let el = await fixture<Slider>(\n html`\n <sp-slider min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n let firstHandle = el.querySelector('#first-handle') as SliderHandle;\n let lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n let firstInput = el.shadowRoot.querySelector(\n '.handle[name=\"a\"] > input'\n ) as HTMLInputElement;\n let middleInput = el.shadowRoot.querySelector(\n '.handle[name=\"b\"] > input'\n ) as HTMLInputElement;\n let lastInput = el.shadowRoot.querySelector(\n '.handle[name=\"c\"] > input'\n ) as HTMLInputElement;\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('10');\n expect(middleInput.max).to.equal('30');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n firstHandle.value = 15;\n lastHandle.value = 85;\n\n await elementUpdated(el);\n await elementUpdated(el);\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('15');\n expect(middleInput.max).to.equal('85');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n el = await fixture<Slider>(\n html`\n <sp-slider>\n <sp-slider-handle\n id=\"first-handle\"\n min=\"0\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n max=\"100\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n firstInput = el.shadowRoot.querySelector(\n '.handle[name=\"a\"] > input'\n ) as HTMLInputElement;\n middleInput = el.shadowRoot.querySelector(\n '.handle[name=\"b\"] > input'\n ) as HTMLInputElement;\n lastInput = el.shadowRoot.querySelector(\n '.handle[name=\"c\"] > input'\n ) as HTMLInputElement;\n\n expect(firstInput.min).to.equal('0');\n expect(firstInput.max).to.equal('20');\n\n expect(middleInput.min).to.equal('10');\n expect(middleInput.max).to.equal('30');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('100');\n\n firstHandle = el.querySelector('#first-handle') as SliderHandle;\n lastHandle = el.querySelector('#last-handle') as SliderHandle;\n\n firstHandle.min = 5;\n lastHandle.max = 95;\n\n await elementUpdated(el);\n await elementUpdated(el);\n\n expect(firstInput.min).to.equal('5');\n expect(firstInput.max).to.equal('20');\n\n expect(lastInput.min).to.equal('20');\n expect(lastInput.max).to.equal('95');\n });\n it('sends keyboard events to active handle', async () => {\n // let pointerId = -1;\n\n const el = await fixture<Slider>(\n html`\n <sp-slider step=\"1\" min=\"0\" max=\"100\">\n <sp-slider-handle\n id=\"first-handle\"\n max=\"next\"\n slot=\"handle\"\n name=\"a\"\n value=\"10\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"middle-handle\"\n min=\"previous\"\n max=\"next\"\n slot=\"handle\"\n name=\"b\"\n value=\"20\"\n ></sp-slider-handle>\n <sp-slider-handle\n id=\"last-handle\"\n min=\"previous\"\n slot=\"handle\"\n name=\"c\"\n value=\"30\"\n ></sp-slider-handle>\n </sp-slider>\n `\n );\n\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });\n\n const lastHandle = el.querySelector('#last-handle') as SliderHandle;\n lastHandle.focus();\n\n await sendKeys({\n press: 'ArrowDown',\n });\n await elementUpdated(el);\n expect(el.values).to.deep.equal({ a: 10, b: 20, c: 29 });\n });\n});\n"],
|
|
5
|
+
"mappings": ";AAYA,OAAO;AACP,OAAO;AAEP,SAAS,YAAY;AACrB;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,gBAAgB;AACzB,SAAS,iBAAiB;AAC1B,SAAS,KAAK,YAAY;AAC1B,SAAS,6BAA6B;AACtC,SAAS,6BAA6B;AAEtC,SAAS,UAAU,MAAM;AACrB;AAAA,IACI,YACI,MAAM;AAAA,MACF;AAAA;AAAA;AAAA,IAGJ;AAAA,EACR;AACA,KAAG,SAAS,YAAY;AACpB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,UAAM,OAAO,EAAE,EAAE,GAAG,GAAG,WAAW;AAAA,EACtC,CAAC;AACD,KAAG,4BAA4B,YAAY;AACvC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUJ;AAEA,UAAM,eAAe,EAAE;AAEvB,UAAM,OAAO,EAAE,EAAE,GAAG,GAAG,WAAW;AAAA,EACtC,CAAC;AACD,KAAG,wCAAwC,YAAY;AACnD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,UAAM,OAAO,EAAE,EAAE,GAAG,GAAG,WAAW;AAAA,EACtC,CAAC;AACD,KAAG,mCAAmC,YAAY;AAC9C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,OAAG,QAAQ;AACX,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,OAAG,QAAQ;AACX,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,EAChC,CAAC;AACD,KAAG,2BAA2B,YAAY;AACtC,UAAM,KAAK,MAAM;AAAA,MACb,KAAK;AAAA,QACD,SAAS;AAAA,QACT,UAAU;AAAA,MACd,CAAC;AAAA,IACL;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,WAAO,GAAG,SAAS,EAAE,GAAG,GAAG;AAE3B,OAAG,MAAM;AACT,UAAM,SAAS;AAAA,MACX,OAAO;AAAA,IACX,CAAC;AACD,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,WAAO,GAAG,SAAS,EAAE,GAAG,GAAG;AAC3B,UAAM,SAAS;AAAA,MACX,OAAO;AAAA,IACX,CAAC;AACD,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,WAAO,GAAG,SAAS,EAAE,GAAG,GAAG;AAAA,EAC/B,CAAC;AACD,KAAG,0BAA0B,YAAY;AACrC,QAAI,YAAY;AAChB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,QAAQ,EAAE,GAAG,GAAG;AAC1B,WAAO,GAAG,SAAS,EAAE,GAAG,GAAG;AAC3B,WAAO,SAAS,EAAE,GAAG,MAAM,EAAE;AAE7B,UAAM,SAAS,GAAG,WAAW,cAAc,SAAS;AACpD,OAAG,MAAM,oBAAoB,CAAC,OAAgB,YAAY;AAC1D,OAAG,MAAM,wBAAwB,CAAC,OAAgB,YAAY;AAC9D,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,UAAU;AAAA,MACd,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,QAAQ,EAAE,GAAG,GAAG;AAC1B,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,EAAE;AAElC,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,UAAU;AAAA,MACd,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,UAAU,kBAAkB,EAAE,GAAG,GAAG;AAC9C,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,CAAC;AAEjC,WAAO;AAAA,MACH,IAAI,aAAa,aAAa;AAAA,QAC1B,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,UAAU;AAAA,MACd,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,QAAQ,EAAE,GAAG,GAAG;AAC1B,WAAO,GAAG,SAAS,EAAE,GAAG,GAAG;AAC3B,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,CAAC;AAEjC,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,UAAU;AAAA,MACd,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,UAAU,kBAAkB,EAAE,GAAG,GAAG;AAC9C,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,CAAC;AAEjC,WAAO;AAAA,MACH,IAAI,aAAa,iBAAiB;AAAA,QAC9B,WAAW;AAAA,QACX,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,UAAU;AAAA,MACd,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,QAAQ,EAAE,GAAG,GAAG;AAC1B,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,CAAC;AAAA,EACrC,CAAC;AACD,KAAG,0CAA0C,YAAY;AACrD,QAAI,YAAY;AAChB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,UAAM,WAAW,GAAG,WAAW;AAAA,MAC3B;AAAA,IACJ;AACA,UAAM,SAAS,GAAG,WAAW,cAAc,SAAS;AACpD,OAAG,MAAM,oBAAoB,CAAC,OAAgB,YAAY;AAC1D,OAAG,MAAM,wBAAwB,CAAC,OAAgB,YAAY;AAE9D,aAAS;AAAA,MACL,IAAI,aAAa,eAAe;AAAA,QAC5B,QAAQ;AAAA;AAAA,QAER,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS;AAAA,QACT,YAAY;AAAA,MAChB,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,SAAS,EAAE,GAAG,MAAM,EAAE;AAC7B,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,WAAO,GAAG,UAAU,iCAAiC,EAAE,GAAG,GAAG;AAE7D,aAAS;AAAA,MACL,IAAI,aAAa,eAAe;AAAA,QAC5B,QAAQ;AAAA;AAAA,QAER,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS;AAAA,QACT,YAAY;AAAA,MAChB,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,SAAS,EAAE,GAAG,MAAM,CAAC;AAC5B,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAC3B,WAAO,GAAG,UAAU,yBAAyB,EAAE,GAAG,GAAG;AACrD,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,QAAQ;AAAA;AAAA,QAER,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS;AAAA,QACT,YAAY;AAAA,MAChB,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,UAAU,+BAA+B,EAAE,GAAG,GAAG;AAC3D,WAAO,SAAS,EAAE,GAAG,MAAM,CAAC;AAC5B,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,WAAO;AAAA,MACH,IAAI,aAAa,aAAa;AAAA,QAC1B,QAAQ;AAAA;AAAA,QAER,SAAS;AAAA,QACT,WAAW;AAAA,QACX,SAAS;AAAA,QACT,YAAY;AAAA,MAChB,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,SAAS,EAAE,GAAG,MAAM,CAAC;AAC5B,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,WAAO,GAAG,UAAU,mCAAmC,EAAE,GAAG,GAAG;AAAA,EACnE,CAAC;AACD,KAAG,mBAAmB,YAAY;AAC9B,QAAI,YAAY;AAChB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,QAAQ,EAAE,GAAG,GAAG;AAC1B,WAAO,SAAS,EAAE,GAAG,MAAM,EAAE;AAC7B,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,UAAM,SAAS,GAAG,WAAW,cAAc,SAAS;AACpD,WAAO,oBAAoB,CAAC,OAAgB,YAAY;AAExD,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,YAAY;AAAA,MAChB,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,QAAQ,EAAE,GAAG,GAAG;AAC1B,WAAO,SAAS,EAAE,GAAG,MAAM,EAAE;AAE7B,UAAM,WAAW,GAAG,WAAW;AAAA,MAC3B;AAAA,IACJ;AAEA,aAAS;AAAA,MACL,IAAI,aAAa,eAAe;AAAA,QAC5B,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,WAAW;AAAA,QACX,YAAY;AAAA,MAChB,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,SAAS,EAAE,GAAG,MAAM,EAAE;AAC7B,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,EAChC,CAAC;AACD,KAAG,8BAA8B,YAAY;AACzC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,UAAM,SAAS,GAAG,WAAW,cAAc,SAAS;AACpD,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU,CAAC,GAAG,EAAE;AAAA,QACpB;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,UAAU,aAAa,EAAE,GAAG,GAAG;AACzC,WAAO,GAAG,WAAW,iBAAiB,EAAE,GAAG,GAAG;AAE9C,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,UAAU;AAAA,MACd,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAAA,EAC/B,CAAC;AAED,KAAG,6CAA6C,YAAY;AACxD,UAAM,WAAW,IAAI;AACrB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA,6BAIiB,CAAC,EAAE,OAAO,MACf,SAAS,OAAO,KAAK;AAAA;AAAA;AAAA,IAGrC;AACA,UAAM,eAAe,EAAE;AAEvB,QAAI,SAAS;AACb,QAAI,oBAAoB;AACxB,UAAM,cAAc,MAAY;AAC5B,UAAI,CAAC;AAAmB;AACxB,gBAAU;AACV,4BAAsB,WAAW;AAAA,IACrC;AACA,gBAAY;AAKZ,UAAM,UAAiB,CAAC,GAAG,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,OAAO;AAAA,MACrD,MAAM;AAAA,MACN,UAAU,CAAC,IAAI,GAAG,EAAE;AAAA,IACxB,EAAE;AACF,UAAM,SAAgB,QAAQ,MAAM,GAAG,EAAE,EAAE,QAAQ;AACnD,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU,CAAC,GAAG,EAAE;AAAA,QACpB;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,QACA,GAAG;AAAA,QACH,GAAG;AAAA,QACH;AAAA,UACI,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,wBAAoB;AAEpB;AAAA,MACI,SAAS;AAAA,MACT;AAAA,IACJ,EAAE,GAAG,IAAI,MAAM;AAAA,EACnB,CAAC;AAED,KAAG,6BAA6B,YAAY;AACxC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAE3B,UAAM,SAAS,GAAG,WAAW,cAAc,SAAS;AACpD,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU,CAAC,GAAG,EAAE;AAAA,QACpB;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,UAAU,aAAa,EAAE,GAAG,GAAG;AACzC,WAAO,GAAG,WAAW,iBAAiB,EAAE,GAAG,GAAG;AAE9C,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,SAAS;AAAA,QACT,UAAU;AAAA,MACd,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,EAChC,CAAC;AAED,KAAG,kCAAkC,YAAY;AAC7C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,UAAM,SAAS,GAAG,WAAW,cAAc,SAAS;AACpD,UAAM,qBAAqB,OAAO,sBAAsB;AACxD,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU;AAAA,YACN,mBAAmB,IAAI,mBAAmB,QAAQ;AAAA,YAClD,mBAAmB,IAAI,mBAAmB,SAAS;AAAA,UACvD;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,UAAU,aAAa,EAAE,GAAG,GAAG;AACzC,WAAO,GAAG,WAAW,iBAAiB,EAAE,GAAG,GAAG;AAC9C,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,UAAM,aAAa,SAAS,IAAI,OAAO;AACvC,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU;AAAA,YACN,mBAAmB,IACf,mBAAmB,QAAQ,IAC3B;AAAA,YACJ,mBAAmB,IAAI,mBAAmB,SAAS;AAAA,UACvD;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,UAAM;AAEN,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,OAAG,WAAW;AACd,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,UAAU,aAAa,EAAE,GAAG,GAAG;AACzC,WAAO,GAAG,WAAW,iBAAiB,EAAE,GAAG,GAAG;AAE9C,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU;AAAA,YACN;AAAA,YACA,mBAAmB,MAAM,mBAAmB,SAAS;AAAA,UACzD;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,EAChC,CAAC;AACD,KAAG,uDAAuD,YAAY;AAClE,QAAI,YAAY;AAChB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,OAAO,SAAS,EAAE,GAAG,MAAM,EAAE;AAEvC,UAAM,SAAS,GAAG,WAAW,cAAc,SAAS;AACpD,OAAG,MAAM,oBAAoB,CAAC,OAAgB,YAAY;AAC1D,OAAG,MAAM,wBAAwB,CAAC,OAAgB,YAAY;AAC9D,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,WAAW;AAAA,QACX,UAAU;AAAA,QACV,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AACvB,UAAM,UAAU;AAChB,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AACvB,UAAM,UAAU;AAEhB,WAAO,GAAG,OAAO,mBAAmB,EAAE,GAAG,MAAM,EAAE;AACjD,WAAO,GAAG,UAAU,aAAa,EAAE,GAAG,GAAG;AACzC,WAAO,GAAG,UAAU,SAAS,kBAAkB,GAAG,iBAAiB,EAAE,GAChE,GAAG;AACR,WAAO,SAAS,EAAE,GAAG,MAAM,GAAG;AAE9B,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AACvB,UAAM,UAAU;AAEhB,WAAO,GAAG,OAAO,mBAAmB,EAAE,GAAG,MAAM,CAAC;AAEhD,WAAO;AAAA,MACH,IAAI,aAAa,aAAa;AAAA,QAC1B,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,OAAO,iBAAiB,EAAE,GAAG,MAAM,CAAC;AAC9C,WAAO,GAAG,UAAU,aAAa,EAAE,GAAG,GAAG;AACzC,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,UAAU;AAAA,QACV,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AACvB,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AACvB,UAAM,UAAU;AAEhB,WAAO,GAAG,OAAO,oBAAoB,EAAE,GAAG,MAAM,EAAE;AAClD,WAAO,GAAG,UAAU,aAAa,EAAE,GAAG,GAAG;AACzC,WAAO,GAAG,UAAU,SAAS,kBAAkB,GAAG,iBAAiB,EAAE,GAChE,GAAG;AAER,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AACvB,UAAM,UAAU;AAEhB,WAAO,GAAG,OAAO,oBAAoB,EAAE,GAAG,MAAM,CAAC;AAEjD,WAAO;AAAA,MACH,IAAI,aAAa,aAAa;AAAA,QAC1B,SAAS;AAAA,QACT,YAAY;AAAA,QACZ,UAAU;AAAA,QACV,SAAS;AAAA,MACb,CAAC;AAAA,IACL;AACA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,OAAO,kBAAkB,EAAE,GAAG,MAAM,CAAC;AAC/C,WAAO,GAAG,UAAU,aAAa,EAAE,GAAG,GAAG;AAAA,EAC7C,CAAC;AACD,KAAG,yCAAyC,YAAY;AACpD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA,IAKJ;AACA,UAAM,eAAe,EAAE;AACvB,UAAM,UAAU;AAChB,UAAM,UAAU;AAEhB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,UAAM,SAAS,GAAG,WAAW,cAAc,SAAS;AACpD,UAAM,qBAAqB,OAAO,sBAAsB;AACxD,UAAM,WAA6B;AAAA,MAC/B,mBAAmB,IAAI,mBAAmB,QAAQ;AAAA,MAClD,mBAAmB,IAAI,mBAAmB,SAAS;AAAA,IACvD;AACA,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN;AAAA,QACJ;AAAA,QACA;AAAA,UACI,MAAM;AAAA,QACV;AAAA,MACJ;AAAA,IACJ,CAAC;AAED,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,WAAW,mBAAmB,EAAE,GAAG,GAAG;AAChD,WAAO,GAAG,UAAU,UAAU,EAAE,GAAG,GAAG;AAEtC,QAAI,aAAa,SAAS,IAAI,OAAO;AACrC,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU;AAAA,YACN;AAAA,YACA,mBAAmB,IAAI,mBAAmB,SAAS;AAAA,UACvD;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,UAAM;AACN,UAAM,UAAU;AAEhB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAE3B,iBAAa,SAAS,IAAI,OAAO;AACjC,UAAM,UAAU;AAAA,MACZ,OAAO;AAAA,QACH;AAAA,UACI,MAAM;AAAA,UACN,UAAU,CAAC,KAAK,SAAS,CAAC,CAAC;AAAA,QAC/B;AAAA,MACJ;AAAA,IACJ,CAAC;AACD,UAAM;AAEN,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAAA,EAC/B,CAAC;AACD,KAAG,6CAA6C,YAAY;AACxD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAC5B,WAAO,GAAG,QAAQ,EAAE,GAAG,GAAG;AAE1B,UAAM,SAAS,GAAG,WAAW,cAAc,SAAS;AAEpD,WAAO;AAAA,MACH,IAAI,aAAa,eAAe;AAAA,QAC5B,SAAS;AAAA,QACT,YAAY;AAAA,MAChB,CAAC;AAAA,IACL;AACA,UAAM,UAAU;AAEhB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAAA,EAChC,CAAC;AACD,KAAG,oDAAoD,YAAY;AAC/D,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,UAAM,QAAQ,GAAG,WAAW,cAAc,QAAQ;AAElD,UAAM,QAAQ;AACd,UAAM,cAAc,IAAI,MAAM,QAAQ,CAAC;AAEvC,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,CAAC;AAAA,EAC/B,CAAC;AACD,KAAG,oBAAoB,YAAY;AAC/B,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,OAAO,EAAE,GAAG,MAAM,MAAM;AAClC,WAAO,GAAG,aAAa,SAAS,CAAC,EAAE,GAAG,MAAM,MAAM;AAElD,OAAG,UAAU;AAEb,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,OAAO,EAAE,GAAG,MAAM,MAAM;AAClC,WAAO,GAAG,aAAa,SAAS,CAAC,EAAE,GAAG,MAAM,MAAM;AAElD,OAAG,aAAa,WAAW,QAAQ;AAEnC,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,OAAO,EAAE,GAAG,MAAM,QAAQ;AACpC,WAAO,GAAG,aAAa,SAAS,CAAC,EAAE,GAAG,MAAM,QAAQ;AAEpD,OAAG,gBAAgB,SAAS;AAE5B,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE;AAC9B,WAAO,GAAG,aAAa,SAAS,CAAC,EAAE,GAAG,GAAG;AAAA,EAC7C,CAAC;AACD,KAAG,sBAAsB,YAAY;AACjC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,OAAO,EAAE,GAAG,MAAM,EAAE;AAC9B,WAAO,GAAG,aAAa,SAAS,CAAC,EAAE,GAAG,GAAG;AAEzC,OAAG,UAAU;AAEb,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,OAAO,EAAE,GAAG,MAAM,MAAM;AAClC,WAAO,GAAG,aAAa,SAAS,CAAC,EAAE,GAAG,MAAM,MAAM;AAElD,OAAG,UAAU;AAEb,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,OAAO,EAAE,GAAG,MAAM,MAAM;AAClC,WAAO,GAAG,aAAa,SAAS,CAAC,EAAE,GAAG,MAAM,MAAM;AAAA,EACtD,CAAC;AACD,KAAG,wBAAwB,YAAY;AACnC,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,UAAM,QAAQ,GAAG;AACjB,WAAO,KAAK,EAAE,GAAG,IAAI,GAAG;AACxB,WAAO,MAAM,IAAI,EAAE,GAAG,MAAM,OAAO;AAAA,EACvC,CAAC;AACD,KAAG,uCAAuC,YAAY;AAClD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA,yCAK6B,CAAC,UAAkB,GAAG;AAAA;AAAA;AAAA,IAGvD;AAEA,UAAM,eAAe,EAAE;AAEvB,UAAM,QAAQ,GAAG;AACjB,WAAO,MAAM,aAAa,gBAAgB,CAAC,EAAE,GAAG,MAAM,KAAK;AAE3D,OAAG,QAAQ;AACX,UAAM,eAAe,EAAE;AAEvB,WAAO,MAAM,aAAa,gBAAgB,CAAC,EAAE,GAAG,MAAM,MAAM;AAAA,EAChE,CAAC;AACD,KAAG,sCAAsC,YAAY;AACjD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA,qCAKyB,EAAE,OAAO,UAAU;AAAA;AAAA;AAAA,IAGhD;AAEA,UAAM,eAAe,EAAE;AAEvB,UAAM,QAAQ,GAAG;AACjB,WAAO,MAAM,aAAa,gBAAgB,CAAC,EAAE,GAAG,MAAM,KAAK;AAE3D,OAAG,QAAQ;AACX,UAAM,eAAe,EAAE;AAEvB,WAAO,MAAM,aAAa,gBAAgB,CAAC,EAAE,GAAG,MAAM,MAAM;AAAA,EAChE,CAAC;AACD,KAAG,2BAA2B,YAAY;AACtC,UAAM,CAAC,iBAAiB,cAAc,IAAI,sBAAsB,IAAI;AACpE,QAAI,KAAK,MAAM;AAAA,MACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2CAM+B;AAAA,qCACN,EAAE,uBAAuB,EAAE;AAAA;AAAA;AAAA,IAGxD;AAEA,UAAM,eAAe,EAAE;AAEvB,QAAI,QAAQ,GAAG;AACf;AAAA,MACI,MAAM,aAAa,gBAAgB;AAAA,MACnC;AAAA,IACJ,EAAE,GAAG,MAAM,MAAM;AAEjB,mBAAe,IAAI;AACnB,UAAM,eAAe,EAAE;AAEvB;AAAA,MACI,MAAM,aAAa,gBAAgB;AAAA,MACnC;AAAA,IACJ,EAAE,GAAG,MAAM,MAAM;AAEjB,mBAAe,IAAI;AACnB,SAAK,MAAM;AAAA,MACP;AAAA;AAAA;AAAA;AAAA,2CAI+B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,yCAMF,EAAE,uBAAuB,EAAE;AAAA,+CACrB;AAAA;AAAA;AAAA;AAAA,IAIvC;AAEA,UAAM,eAAe,EAAE;AAEvB,YAAQ,GAAG;AACX;AAAA,MACI,MAAM,aAAa,gBAAgB;AAAA,MACnC;AAAA,IACJ,EAAE,GAAG,MAAM,MAAM;AAEjB,mBAAe,IAAI;AACnB,UAAM,eAAe,EAAE;AAEvB;AAAA,MACI,MAAM,aAAa,gBAAgB;AAAA,MACnC;AAAA,IACJ,EAAE,GAAG,MAAM,MAAM;AAAA,EACrB,CAAC;AACD,KAAG,+BAA+B,YAAY;AAC1C,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AACvB,IACI,GAGF,mBAAmB;AAErB,UAAM,QAAQ,GAAG;AACjB,UAAM,eAAe,EAAE;AAEvB,WAAO,MAAM,aAAa,gBAAgB,CAAC,EAAE,GAAG,MAAM,IAAI;AAAA,EAC9D,CAAC;AACD,KAAG,4CAA4C,YAAY;AACvD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,EAAE;AAE5B,OAAG,MAAM;AACT,OAAG,MAAM;AACT,OAAG,QAAQ;AAEX,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAE7B,OAAG,QAAQ;AACX,OAAG,MAAM;AACT,OAAG,MAAM;AAET,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,GAAG;AAE7B,OAAG,QAAQ;AACX,OAAG,MAAM;AACT,OAAG,MAAM;AAET,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,KAAK,EAAE,GAAG,MAAM,IAAI;AAAA,EAClC,CAAC;AACD,KAAG,8BAA8B,YAAY;AACzC,QAAI,KAAK,MAAM;AAAA,MACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAsBJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAEvD,UAAM,eAAe,GAAG,cAAc,gBAAgB;AACtD,iBAAa,QAAQ;AAErB,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAEvD,SAAK,MAAM;AAAA,MACP;AAAA;AAAA;AAAA,IAGJ;AACA,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,OAAO,GAAG,CAAC;AAE7C,SAAK,MAAM;AAAA,MACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQJ;AACA,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,SAAS,GAAG,CAAC;AAAA,EACnD,CAAC;AACD,KAAG,yCAAyC,YAAY;AACpD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0BJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAEvD,UAAM,cAAc,GAAG,cAAc,eAAe;AACpD,UAAM,eAAe,GAAG,cAAc,gBAAgB;AACtD,UAAM,aAAa,GAAG,cAAc,cAAc;AAElD,gBAAY,QAAQ;AACpB,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAEvD,gBAAY,QAAQ;AACpB,UAAM,eAAe,EAAE;AACvB,iBAAa,QAAQ;AACrB,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAEvD,eAAW,QAAQ;AACnB,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAEvD,eAAW,QAAQ;AACnB,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAAA,EAC3D,CAAC;AACD,KAAG,wEAAwE,YAAY;AACnF,UAAM,kBAAkB,KAAK,SAAS,MAAM;AAC5C,WAAO,MAAM,iBAAiB,oBAAI,IAAyB;AAC3D,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA2BJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,gBAAgB,MAAM,EAAE,GAAG,GAAG;AACrC,UAAM,UAAU,gBAAgB,QAAQ,CAAC;AACzC;AAAA,MACI,QAAQ,KAAK,GAAG,CAAC,EAAE,SAAS,UAAU;AAAA,MACtC;AAAA,IACJ,EAAE,GAAG,GAAG;AACR,WAAO,QAAQ,KAAK,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,KAAK,MAAM;AAAA,MAC9D,MAAM;AAAA,QACF,WAAW;AAAA,QACX,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAAA,IACJ,CAAC;AACD,oBAAgB,QAAQ;AAAA,EAC5B,CAAC;AACD,KAAG,mEAAmE,YAAY;AAC9E,UAAM,kBAAkB,KAAK,SAAS,MAAM;AAC5C,WAAO,MAAM,iBAAiB,oBAAI,IAAyB;AAC3D,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA2BJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,gBAAgB,MAAM,EAAE,GAAG,GAAG;AACrC,UAAM,UAAU,gBAAgB,QAAQ,CAAC;AACzC,WAAO,QAAQ,KAAK,GAAG,CAAC,EAAE,SAAS,MAAM,GAAG,2BAA2B,EAClE,GAAG,GAAG;AACX,WAAO,QAAQ,KAAK,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,KAAK,MAAM;AAAA,MAC9D,MAAM;AAAA,QACF,WAAW;AAAA,QACX,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAAA,IACJ,CAAC;AACD,oBAAgB,QAAQ;AAAA,EAC5B,CAAC;AACD,KAAG,yCAAyC,YAAY;AAxsC5D;AAysCQ,UAAM,WAAW,SAAS,cAAc,UAAU;AAClD,aAAS,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAMrB,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,OAAG,YAAY,SAAS,QAAQ,UAAU,IAAI,CAAC;AAC/C,UAAM,UAAU,MAAM;AAvtC9B,UAAAA;AAwtCY,eAAOA,MAAA,GAAG,cAAc,WAAW,MAA5B,gBAAAA,IAA+B,eAAc;AAAA,IACxD,CAAC;AAED,UAAM,UAAU;AAEhB,UAAM,mBACF,QACK,cAAc,WAAW,MAD9B,mBAEM,WAAW,iBAAiB,eAAc,CAAC;AACrD,WAAO,cAAc,EAAE,GAAG,KAAK,SAAS,CAAC;AAAA,EAC7C,CAAC;AACD,KAAG,kCAAkC,YAAY;AAC7C,QAAI,KAAK,MAAM;AAAA,MACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0BJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAEvD,QAAI,cAAc,GAAG,cAAc,eAAe;AAClD,QAAI,aAAa,GAAG,cAAc,cAAc;AAEhD,QAAI,aAAa,GAAG,WAAW;AAAA,MAC3B;AAAA,IACJ;AACA,QAAI,cAAc,GAAG,WAAW;AAAA,MAC5B;AAAA,IACJ;AACA,QAAI,YAAY,GAAG,WAAW;AAAA,MAC1B;AAAA,IACJ;AAEA,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,GAAG;AACnC,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,IAAI;AAEpC,WAAO,YAAY,GAAG,EAAE,GAAG,MAAM,IAAI;AACrC,WAAO,YAAY,GAAG,EAAE,GAAG,MAAM,IAAI;AAErC,WAAO,UAAU,GAAG,EAAE,GAAG,MAAM,IAAI;AACnC,WAAO,UAAU,GAAG,EAAE,GAAG,MAAM,KAAK;AAEpC,gBAAY,QAAQ;AACpB,eAAW,QAAQ;AAEnB,UAAM,eAAe,EAAE;AACvB,UAAM,eAAe,EAAE;AAEvB,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,GAAG;AACnC,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,IAAI;AAEpC,WAAO,YAAY,GAAG,EAAE,GAAG,MAAM,IAAI;AACrC,WAAO,YAAY,GAAG,EAAE,GAAG,MAAM,IAAI;AAErC,WAAO,UAAU,GAAG,EAAE,GAAG,MAAM,IAAI;AACnC,WAAO,UAAU,GAAG,EAAE,GAAG,MAAM,KAAK;AAEpC,SAAK,MAAM;AAAA,MACP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA4BJ;AAEA,iBAAa,GAAG,WAAW;AAAA,MACvB;AAAA,IACJ;AACA,kBAAc,GAAG,WAAW;AAAA,MACxB;AAAA,IACJ;AACA,gBAAY,GAAG,WAAW;AAAA,MACtB;AAAA,IACJ;AAEA,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,GAAG;AACnC,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,IAAI;AAEpC,WAAO,YAAY,GAAG,EAAE,GAAG,MAAM,IAAI;AACrC,WAAO,YAAY,GAAG,EAAE,GAAG,MAAM,IAAI;AAErC,WAAO,UAAU,GAAG,EAAE,GAAG,MAAM,IAAI;AACnC,WAAO,UAAU,GAAG,EAAE,GAAG,MAAM,KAAK;AAEpC,kBAAc,GAAG,cAAc,eAAe;AAC9C,iBAAa,GAAG,cAAc,cAAc;AAE5C,gBAAY,MAAM;AAClB,eAAW,MAAM;AAEjB,UAAM,eAAe,EAAE;AACvB,UAAM,eAAe,EAAE;AAEvB,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,GAAG;AACnC,WAAO,WAAW,GAAG,EAAE,GAAG,MAAM,IAAI;AAEpC,WAAO,UAAU,GAAG,EAAE,GAAG,MAAM,IAAI;AACnC,WAAO,UAAU,GAAG,EAAE,GAAG,MAAM,IAAI;AAAA,EACvC,CAAC;AACD,KAAG,0CAA0C,YAAY;AAGrD,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA0BJ;AAEA,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAEvD,UAAM,aAAa,GAAG,cAAc,cAAc;AAClD,eAAW,MAAM;AAEjB,UAAM,SAAS;AAAA,MACX,OAAO;AAAA,IACX,CAAC;AACD,UAAM,eAAe,EAAE;AACvB,WAAO,GAAG,MAAM,EAAE,GAAG,KAAK,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,CAAC;AAAA,EAC3D,CAAC;AACL,CAAC;",
|
|
6
6
|
"names": ["_a"]
|
|
7
7
|
}
|