@spectrum-web-components/slider 0.14.0 → 0.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +4 -4
- package/sp-slider-handle.dev.js +1 -0
- package/sp-slider-handle.dev.js.map +1 -1
- package/sp-slider-handle.js +1 -1
- package/sp-slider-handle.js.map +2 -2
- package/sp-slider.dev.js +1 -0
- package/sp-slider.dev.js.map +1 -1
- package/sp-slider.js +1 -1
- package/sp-slider.js.map +2 -2
- package/src/HandleController.dev.js +71 -17
- package/src/HandleController.dev.js.map +1 -1
- package/src/HandleController.js +1 -1
- package/src/HandleController.js.map +2 -2
- package/src/Slider.dev.js +18 -7
- package/src/Slider.dev.js.map +2 -2
- package/src/Slider.js +17 -17
- package/src/Slider.js.map +3 -3
- package/src/SliderHandle.dev.js +22 -12
- package/src/SliderHandle.dev.js.map +2 -2
- package/src/SliderHandle.js +1 -1
- package/src/SliderHandle.js.map +2 -2
- package/src/index.dev.js +1 -0
- package/src/index.dev.js.map +1 -1
- package/src/index.js +1 -1
- package/src/index.js.map +1 -1
- package/src/slider.css.dev.js +1 -0
- package/src/slider.css.dev.js.map +1 -1
- package/src/slider.css.js +1 -1
- package/src/slider.css.js.map +2 -2
- package/src/spectrum-slider.css.dev.js +1 -0
- package/src/spectrum-slider.css.dev.js.map +1 -1
- package/src/spectrum-slider.css.js +1 -1
- package/src/spectrum-slider.css.js.map +2 -2
- package/stories/slider.stories.js +414 -111
- package/stories/slider.stories.js.map +2 -2
- package/sync/sp-slider.dev.js +1 -0
- package/sync/sp-slider.dev.js.map +1 -1
- package/sync/sp-slider.js +1 -1
- package/sync/sp-slider.js.map +1 -1
- package/test/benchmark/test-basic.js +5 -1
- package/test/benchmark/test-basic.js.map +1 -1
- package/test/slider-editable-sync.test.js +149 -1
- package/test/slider-editable-sync.test.js.map +1 -1
- package/test/slider-editable.test.js +197 -1
- package/test/slider-editable.test.js.map +2 -2
- package/test/slider-handle-upgrade.test.js +12 -2
- package/test/slider-handle-upgrade.test.js.map +1 -1
- package/test/slider.test-vrt.js +4 -1
- package/test/slider.test-vrt.js.map +1 -1
- package/test/slider.test.js +920 -43
- package/test/slider.test.js.map +2 -2
package/test/slider.test.js
CHANGED
|
@@ -1,8 +1,40 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
import "@spectrum-web-components/slider/sp-slider.js";
|
|
3
|
+
import "@spectrum-web-components/slider/sp-slider-handle.js";
|
|
4
|
+
import { tick } from "../stories/slider.stories.js";
|
|
5
|
+
import {
|
|
6
|
+
elementUpdated,
|
|
7
|
+
expect,
|
|
8
|
+
fixture,
|
|
9
|
+
html,
|
|
10
|
+
nextFrame,
|
|
11
|
+
oneEvent,
|
|
12
|
+
waitUntil
|
|
13
|
+
} from "@open-wc/testing";
|
|
14
|
+
import { sendKeys } from "@web/test-runner-commands";
|
|
15
|
+
import { sendMouse } from "../../../test/plugins/browser.js";
|
|
16
|
+
import { stub } from "sinon";
|
|
17
|
+
import { testForLitDevWarnings } from "../../../test/testing-helpers.js";
|
|
18
|
+
describe("Slider", () => {
|
|
19
|
+
testForLitDevWarnings(
|
|
20
|
+
async () => await fixture(
|
|
21
|
+
html`
|
|
2
22
|
<sp-slider label="Slider"></sp-slider>
|
|
3
|
-
`
|
|
23
|
+
`
|
|
24
|
+
)
|
|
25
|
+
);
|
|
26
|
+
it("loads", async () => {
|
|
27
|
+
const el = await fixture(
|
|
28
|
+
html`
|
|
4
29
|
<sp-slider label="Slider"></sp-slider>
|
|
5
|
-
`
|
|
30
|
+
`
|
|
31
|
+
);
|
|
32
|
+
await elementUpdated(el);
|
|
33
|
+
await expect(el).to.be.accessible();
|
|
34
|
+
});
|
|
35
|
+
it('loads - [variant="tick"]', async () => {
|
|
36
|
+
const el = await fixture(
|
|
37
|
+
html`
|
|
6
38
|
<sp-slider
|
|
7
39
|
label="Ticked Slider"
|
|
8
40
|
min="-100"
|
|
@@ -11,80 +43,751 @@ import"@spectrum-web-components/slider/sp-slider.js";import"@spectrum-web-compon
|
|
|
11
43
|
tick-labels
|
|
12
44
|
variant="tick"
|
|
13
45
|
></sp-slider>
|
|
14
|
-
`
|
|
46
|
+
`
|
|
47
|
+
);
|
|
48
|
+
await elementUpdated(el);
|
|
49
|
+
await expect(el).to.be.accessible();
|
|
50
|
+
});
|
|
51
|
+
it('loads - [variant="tick"] irregularly', async () => {
|
|
52
|
+
const el = await fixture(
|
|
53
|
+
html`
|
|
15
54
|
<sp-slider label="Slider"></sp-slider>
|
|
16
|
-
`
|
|
55
|
+
`
|
|
56
|
+
);
|
|
57
|
+
await elementUpdated(el);
|
|
58
|
+
await expect(el).to.be.accessible();
|
|
59
|
+
});
|
|
60
|
+
it("receives value from the outside", async () => {
|
|
61
|
+
const el = await fixture(
|
|
62
|
+
html`
|
|
17
63
|
<sp-slider max="20"></sp-slider>
|
|
18
|
-
`
|
|
64
|
+
`
|
|
65
|
+
);
|
|
66
|
+
await elementUpdated(el);
|
|
67
|
+
expect(el.value).to.equal(10);
|
|
68
|
+
el.value = 10;
|
|
69
|
+
await elementUpdated(el);
|
|
70
|
+
expect(el.value).to.equal(10);
|
|
71
|
+
el.value = 50;
|
|
72
|
+
await elementUpdated(el);
|
|
73
|
+
expect(el.value).to.equal(20);
|
|
74
|
+
});
|
|
75
|
+
it("accepts keyboard events", async () => {
|
|
76
|
+
const el = await fixture(
|
|
77
|
+
tick({
|
|
78
|
+
variant: "tick",
|
|
79
|
+
tickStep: 5
|
|
80
|
+
})
|
|
81
|
+
);
|
|
82
|
+
await elementUpdated(el);
|
|
83
|
+
expect(el.value).to.equal(10);
|
|
84
|
+
expect(el.highlight).to.be.false;
|
|
85
|
+
el.focus();
|
|
86
|
+
await sendKeys({
|
|
87
|
+
press: "ArrowDown"
|
|
88
|
+
});
|
|
89
|
+
await elementUpdated(el);
|
|
90
|
+
expect(el.value).to.equal(9);
|
|
91
|
+
expect(el.highlight).to.be.true;
|
|
92
|
+
await sendKeys({
|
|
93
|
+
press: "ArrowUp"
|
|
94
|
+
});
|
|
95
|
+
await elementUpdated(el);
|
|
96
|
+
expect(el.value).to.equal(10);
|
|
97
|
+
expect(el.highlight).to.be.true;
|
|
98
|
+
});
|
|
99
|
+
it("accepts pointer events", async () => {
|
|
100
|
+
let pointerId = -1;
|
|
101
|
+
const el = await fixture(
|
|
102
|
+
html`
|
|
19
103
|
<sp-slider></sp-slider>
|
|
20
|
-
`
|
|
104
|
+
`
|
|
105
|
+
);
|
|
106
|
+
await elementUpdated(el);
|
|
107
|
+
expect(el.dragging).to.be.false;
|
|
108
|
+
expect(el.highlight).to.be.false;
|
|
109
|
+
expect(pointerId).to.equal(-1);
|
|
110
|
+
const handle = el.shadowRoot.querySelector(".handle");
|
|
111
|
+
el.track.setPointerCapture = (id) => pointerId = id;
|
|
112
|
+
el.track.releasePointerCapture = (id) => pointerId = id;
|
|
113
|
+
handle.dispatchEvent(
|
|
114
|
+
new PointerEvent("pointerdown", {
|
|
115
|
+
button: 1,
|
|
116
|
+
pointerId: 1,
|
|
117
|
+
cancelable: true,
|
|
118
|
+
bubbles: true,
|
|
119
|
+
composed: true
|
|
120
|
+
})
|
|
121
|
+
);
|
|
122
|
+
await elementUpdated(el);
|
|
123
|
+
expect(el.dragging).to.be.false;
|
|
124
|
+
expect(pointerId, "1").to.equal(-1);
|
|
125
|
+
handle.dispatchEvent(
|
|
126
|
+
new PointerEvent("pointerdown", {
|
|
127
|
+
button: 0,
|
|
128
|
+
pointerId: 1,
|
|
129
|
+
cancelable: true,
|
|
130
|
+
bubbles: true,
|
|
131
|
+
composed: true
|
|
132
|
+
})
|
|
133
|
+
);
|
|
134
|
+
await elementUpdated(el);
|
|
135
|
+
expect(el.dragging, "it is dragging 1").to.be.true;
|
|
136
|
+
expect(pointerId, "2").to.equal(1);
|
|
137
|
+
handle.dispatchEvent(
|
|
138
|
+
new PointerEvent("pointerup", {
|
|
139
|
+
pointerId: 2,
|
|
140
|
+
cancelable: true,
|
|
141
|
+
bubbles: true,
|
|
142
|
+
composed: true
|
|
143
|
+
})
|
|
144
|
+
);
|
|
145
|
+
await elementUpdated(el);
|
|
146
|
+
expect(el.dragging).to.be.false;
|
|
147
|
+
expect(el.highlight).to.be.false;
|
|
148
|
+
expect(pointerId, "3").to.equal(2);
|
|
149
|
+
handle.dispatchEvent(
|
|
150
|
+
new PointerEvent("pointerdown", {
|
|
151
|
+
button: 0,
|
|
152
|
+
pointerId: 1,
|
|
153
|
+
cancelable: true,
|
|
154
|
+
bubbles: true,
|
|
155
|
+
composed: true
|
|
156
|
+
})
|
|
157
|
+
);
|
|
158
|
+
await elementUpdated(el);
|
|
159
|
+
expect(el.dragging, "it is dragging 2").to.be.true;
|
|
160
|
+
expect(pointerId, "4").to.equal(1);
|
|
161
|
+
handle.dispatchEvent(
|
|
162
|
+
new PointerEvent("pointercancel", {
|
|
163
|
+
pointerId: 3,
|
|
164
|
+
cancelable: true,
|
|
165
|
+
bubbles: true,
|
|
166
|
+
composed: true
|
|
167
|
+
})
|
|
168
|
+
);
|
|
169
|
+
await elementUpdated(el);
|
|
170
|
+
expect(el.dragging).to.be.false;
|
|
171
|
+
expect(pointerId, "5").to.equal(3);
|
|
172
|
+
});
|
|
173
|
+
it("will `trackPointerDown` on `#controls`", async () => {
|
|
174
|
+
let pointerId = -1;
|
|
175
|
+
const el = await fixture(
|
|
176
|
+
html`
|
|
21
177
|
<sp-slider style="width: 500px" max="70"></sp-slider>
|
|
22
|
-
`
|
|
178
|
+
`
|
|
179
|
+
);
|
|
180
|
+
await elementUpdated(el);
|
|
181
|
+
expect(el.value).to.equal(10);
|
|
182
|
+
const controls = el.shadowRoot.querySelector(
|
|
183
|
+
"#controls"
|
|
184
|
+
);
|
|
185
|
+
const handle = el.shadowRoot.querySelector(".handle");
|
|
186
|
+
el.track.setPointerCapture = (id) => pointerId = id;
|
|
187
|
+
el.track.releasePointerCapture = (id) => pointerId = id;
|
|
188
|
+
controls.dispatchEvent(
|
|
189
|
+
new PointerEvent("pointerdown", {
|
|
190
|
+
button: 1,
|
|
191
|
+
clientX: 9,
|
|
192
|
+
pointerId: 4,
|
|
193
|
+
bubbles: true,
|
|
194
|
+
cancelable: true
|
|
195
|
+
})
|
|
196
|
+
);
|
|
197
|
+
await elementUpdated(el);
|
|
198
|
+
expect(pointerId).to.equal(-1);
|
|
199
|
+
expect(el.value).to.equal(10);
|
|
200
|
+
expect(el.dragging, "handle is not yet being dragged").to.be.false;
|
|
201
|
+
controls.dispatchEvent(
|
|
202
|
+
new PointerEvent("pointerdown", {
|
|
203
|
+
button: 0,
|
|
204
|
+
clientX: 9,
|
|
205
|
+
pointerId: 4,
|
|
206
|
+
bubbles: true,
|
|
207
|
+
cancelable: true
|
|
208
|
+
})
|
|
209
|
+
);
|
|
210
|
+
await elementUpdated(el);
|
|
211
|
+
expect(pointerId).to.equal(4);
|
|
212
|
+
expect(el.value).to.equal(0);
|
|
213
|
+
expect(el.dragging, "handle is being dragged").to.be.true;
|
|
214
|
+
handle.dispatchEvent(
|
|
215
|
+
new PointerEvent("pointermove", {
|
|
216
|
+
button: 0,
|
|
217
|
+
clientX: 508,
|
|
218
|
+
pointerId: 4,
|
|
219
|
+
bubbles: true,
|
|
220
|
+
cancelable: true
|
|
221
|
+
})
|
|
222
|
+
);
|
|
223
|
+
await elementUpdated(el);
|
|
224
|
+
expect(el.dragging, "handle is still being dragged").to.be.true;
|
|
225
|
+
expect(pointerId).to.equal(4);
|
|
226
|
+
expect(el.value).to.equal(70);
|
|
227
|
+
handle.dispatchEvent(
|
|
228
|
+
new PointerEvent("pointerup", {
|
|
229
|
+
button: 0,
|
|
230
|
+
clientX: 9,
|
|
231
|
+
pointerId: 4,
|
|
232
|
+
bubbles: true,
|
|
233
|
+
cancelable: true
|
|
234
|
+
})
|
|
235
|
+
);
|
|
236
|
+
await elementUpdated(el);
|
|
237
|
+
expect(pointerId).to.equal(4);
|
|
238
|
+
expect(el.value).to.equal(70);
|
|
239
|
+
expect(el.dragging, "handle is no longer being dragged").to.be.false;
|
|
240
|
+
});
|
|
241
|
+
it("can be disabled", async () => {
|
|
242
|
+
let pointerId = -1;
|
|
243
|
+
const el = await fixture(
|
|
244
|
+
html`
|
|
23
245
|
<sp-slider disabled></sp-slider>
|
|
24
|
-
`
|
|
246
|
+
`
|
|
247
|
+
);
|
|
248
|
+
await elementUpdated(el);
|
|
249
|
+
expect(el.dragging).to.be.false;
|
|
250
|
+
expect(pointerId).to.equal(-1);
|
|
251
|
+
expect(el.value).to.equal(10);
|
|
252
|
+
const handle = el.shadowRoot.querySelector(".handle");
|
|
253
|
+
handle.setPointerCapture = (id) => pointerId = id;
|
|
254
|
+
handle.dispatchEvent(
|
|
255
|
+
new PointerEvent("pointerdown", {
|
|
256
|
+
button: 0,
|
|
257
|
+
pointerId: 1,
|
|
258
|
+
cancelable: true
|
|
259
|
+
})
|
|
260
|
+
);
|
|
261
|
+
await elementUpdated(el);
|
|
262
|
+
expect(el.dragging).to.be.false;
|
|
263
|
+
expect(pointerId).to.equal(-1);
|
|
264
|
+
const controls = el.shadowRoot.querySelector(
|
|
265
|
+
"#controls"
|
|
266
|
+
);
|
|
267
|
+
controls.dispatchEvent(
|
|
268
|
+
new PointerEvent("pointerdown", {
|
|
269
|
+
button: 0,
|
|
270
|
+
clientX: 50,
|
|
271
|
+
pointerId: 1,
|
|
272
|
+
cancelable: true
|
|
273
|
+
})
|
|
274
|
+
);
|
|
275
|
+
await elementUpdated(el);
|
|
276
|
+
expect(pointerId).to.equal(-1);
|
|
277
|
+
expect(el.value).to.equal(10);
|
|
278
|
+
});
|
|
279
|
+
it("accepts pointermove events", async () => {
|
|
280
|
+
const el = await fixture(
|
|
281
|
+
html`
|
|
25
282
|
<sp-slider></sp-slider>
|
|
26
|
-
`
|
|
283
|
+
`
|
|
284
|
+
);
|
|
285
|
+
await elementUpdated(el);
|
|
286
|
+
expect(el.value).to.equal(10);
|
|
287
|
+
const handle = el.shadowRoot.querySelector(".handle");
|
|
288
|
+
await sendMouse({
|
|
289
|
+
steps: [
|
|
290
|
+
{
|
|
291
|
+
type: "move",
|
|
292
|
+
position: [9, 30]
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
type: "down"
|
|
296
|
+
}
|
|
297
|
+
]
|
|
298
|
+
});
|
|
299
|
+
await elementUpdated(el);
|
|
300
|
+
expect(el.dragging, "is dragging").to.be.true;
|
|
301
|
+
expect(el.highlight, "not highlighted").to.be.false;
|
|
302
|
+
handle.dispatchEvent(
|
|
303
|
+
new PointerEvent("pointermove", {
|
|
304
|
+
clientX: 0,
|
|
305
|
+
cancelable: true,
|
|
306
|
+
bubbles: true,
|
|
307
|
+
composed: true
|
|
308
|
+
})
|
|
309
|
+
);
|
|
310
|
+
await elementUpdated(el);
|
|
311
|
+
expect(el.value).to.equal(0);
|
|
312
|
+
});
|
|
313
|
+
it("manages RTL when min != 0", async () => {
|
|
314
|
+
const el = await fixture(
|
|
315
|
+
html`
|
|
27
316
|
<sp-slider min="1" max="11" dir="rtl"></sp-slider>
|
|
28
|
-
`
|
|
317
|
+
`
|
|
318
|
+
);
|
|
319
|
+
await elementUpdated(el);
|
|
320
|
+
expect(el.value).to.equal(10);
|
|
321
|
+
const handle = el.shadowRoot.querySelector(".handle");
|
|
322
|
+
await sendMouse({
|
|
323
|
+
steps: [
|
|
324
|
+
{
|
|
325
|
+
type: "move",
|
|
326
|
+
position: [9, 30]
|
|
327
|
+
},
|
|
328
|
+
{
|
|
329
|
+
type: "down"
|
|
330
|
+
}
|
|
331
|
+
]
|
|
332
|
+
});
|
|
333
|
+
await elementUpdated(el);
|
|
334
|
+
expect(el.dragging, "is dragging").to.be.true;
|
|
335
|
+
expect(el.highlight, "not highlighted").to.be.false;
|
|
336
|
+
handle.dispatchEvent(
|
|
337
|
+
new PointerEvent("pointermove", {
|
|
338
|
+
clientX: 0,
|
|
339
|
+
cancelable: true,
|
|
340
|
+
bubbles: true,
|
|
341
|
+
composed: true
|
|
342
|
+
})
|
|
343
|
+
);
|
|
344
|
+
await elementUpdated(el);
|
|
345
|
+
expect(el.value).to.equal(11);
|
|
346
|
+
});
|
|
347
|
+
it("goes [disabled] while dragging", async () => {
|
|
348
|
+
const el = await fixture(
|
|
349
|
+
html`
|
|
29
350
|
<sp-slider></sp-slider>
|
|
30
|
-
`
|
|
351
|
+
`
|
|
352
|
+
);
|
|
353
|
+
await elementUpdated(el);
|
|
354
|
+
expect(el.value).to.equal(10);
|
|
355
|
+
const handle = el.shadowRoot.querySelector(".handle");
|
|
356
|
+
const handleBoundingRect = handle.getBoundingClientRect();
|
|
357
|
+
await sendMouse({
|
|
358
|
+
steps: [
|
|
359
|
+
{
|
|
360
|
+
type: "move",
|
|
361
|
+
position: [
|
|
362
|
+
handleBoundingRect.x + handleBoundingRect.width / 2,
|
|
363
|
+
handleBoundingRect.y + handleBoundingRect.height / 2
|
|
364
|
+
]
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
type: "down"
|
|
368
|
+
}
|
|
369
|
+
]
|
|
370
|
+
});
|
|
371
|
+
await elementUpdated(el);
|
|
372
|
+
expect(el.dragging, "is dragging").to.be.true;
|
|
373
|
+
expect(el.highlight, "not highlighted").to.be.false;
|
|
374
|
+
expect(el.value).to.equal(10);
|
|
375
|
+
const inputEvent = oneEvent(el, "input");
|
|
376
|
+
await sendMouse({
|
|
377
|
+
steps: [
|
|
378
|
+
{
|
|
379
|
+
type: "move",
|
|
380
|
+
position: [
|
|
381
|
+
handleBoundingRect.x + handleBoundingRect.width / 2 + 100,
|
|
382
|
+
handleBoundingRect.y + handleBoundingRect.height / 2
|
|
383
|
+
]
|
|
384
|
+
}
|
|
385
|
+
]
|
|
386
|
+
});
|
|
387
|
+
await inputEvent;
|
|
388
|
+
expect(el.value).to.equal(13);
|
|
389
|
+
el.disabled = true;
|
|
390
|
+
await elementUpdated(el);
|
|
391
|
+
expect(el.dragging, "is dragging").to.be.false;
|
|
392
|
+
expect(el.highlight, "not highlighted").to.be.false;
|
|
393
|
+
await sendMouse({
|
|
394
|
+
steps: [
|
|
395
|
+
{
|
|
396
|
+
type: "move",
|
|
397
|
+
position: [
|
|
398
|
+
0,
|
|
399
|
+
handleBoundingRect.top + handleBoundingRect.height / 2
|
|
400
|
+
]
|
|
401
|
+
}
|
|
402
|
+
]
|
|
403
|
+
});
|
|
404
|
+
expect(el.value).to.equal(13);
|
|
405
|
+
});
|
|
406
|
+
it("accepts pointermove events in separate interactions", async () => {
|
|
407
|
+
let pointerId = -1;
|
|
408
|
+
const el = await fixture(
|
|
409
|
+
html`
|
|
31
410
|
<sp-slider style="width: 100px"></sp-slider>
|
|
32
|
-
`
|
|
411
|
+
`
|
|
412
|
+
);
|
|
413
|
+
await elementUpdated(el);
|
|
414
|
+
expect(el.value, "initial").to.equal(10);
|
|
415
|
+
const handle = el.shadowRoot.querySelector(".handle");
|
|
416
|
+
el.track.setPointerCapture = (id) => pointerId = id;
|
|
417
|
+
el.track.releasePointerCapture = (id) => pointerId = id;
|
|
418
|
+
handle.dispatchEvent(
|
|
419
|
+
new PointerEvent("pointerdown", {
|
|
420
|
+
clientX: 58,
|
|
421
|
+
cancelable: true,
|
|
422
|
+
button: 0,
|
|
423
|
+
pointerId: 100,
|
|
424
|
+
composed: true,
|
|
425
|
+
bubbles: true
|
|
426
|
+
})
|
|
427
|
+
);
|
|
428
|
+
await elementUpdated(el);
|
|
429
|
+
handle.dispatchEvent(
|
|
430
|
+
new PointerEvent("pointermove", {
|
|
431
|
+
clientX: 58,
|
|
432
|
+
cancelable: true,
|
|
433
|
+
composed: true,
|
|
434
|
+
bubbles: true
|
|
435
|
+
})
|
|
436
|
+
);
|
|
437
|
+
await elementUpdated(el);
|
|
438
|
+
expect(el.value, "first pointerdown").to.equal(50);
|
|
439
|
+
expect(el.dragging, "is dragging").to.be.true;
|
|
440
|
+
expect(el.classList.contains("handle-highlight"), "not highlighted").to.be.false;
|
|
441
|
+
expect(pointerId).to.equal(100);
|
|
442
|
+
handle.dispatchEvent(
|
|
443
|
+
new PointerEvent("pointermove", {
|
|
444
|
+
clientX: 0,
|
|
445
|
+
cancelable: true,
|
|
446
|
+
composed: true,
|
|
447
|
+
bubbles: true
|
|
448
|
+
})
|
|
449
|
+
);
|
|
450
|
+
await elementUpdated(el);
|
|
451
|
+
expect(el.value, "first pointermove").to.equal(0);
|
|
452
|
+
handle.dispatchEvent(
|
|
453
|
+
new PointerEvent("pointerup", {
|
|
454
|
+
clientX: 0,
|
|
455
|
+
cancelable: true,
|
|
456
|
+
composed: true,
|
|
457
|
+
bubbles: true
|
|
458
|
+
})
|
|
459
|
+
);
|
|
460
|
+
await elementUpdated(el);
|
|
461
|
+
expect(el.value, "first pointerup").to.equal(0);
|
|
462
|
+
expect(el.dragging, "is dragging").to.be.false;
|
|
463
|
+
handle.dispatchEvent(
|
|
464
|
+
new PointerEvent("pointerdown", {
|
|
465
|
+
clientX: 58,
|
|
466
|
+
cancelable: true,
|
|
467
|
+
button: 0,
|
|
468
|
+
composed: true,
|
|
469
|
+
bubbles: true
|
|
470
|
+
})
|
|
471
|
+
);
|
|
472
|
+
await elementUpdated(el);
|
|
473
|
+
handle.dispatchEvent(
|
|
474
|
+
new PointerEvent("pointermove", {
|
|
475
|
+
clientX: 58,
|
|
476
|
+
cancelable: true,
|
|
477
|
+
composed: true,
|
|
478
|
+
bubbles: true
|
|
479
|
+
})
|
|
480
|
+
);
|
|
481
|
+
await elementUpdated(el);
|
|
482
|
+
expect(el.value, "second pointerdown").to.equal(50);
|
|
483
|
+
expect(el.dragging, "is dragging").to.be.true;
|
|
484
|
+
expect(el.classList.contains("handle-highlight"), "not highlighted").to.be.false;
|
|
485
|
+
handle.dispatchEvent(
|
|
486
|
+
new PointerEvent("pointermove", {
|
|
487
|
+
clientX: 0,
|
|
488
|
+
cancelable: true,
|
|
489
|
+
composed: true,
|
|
490
|
+
bubbles: true
|
|
491
|
+
})
|
|
492
|
+
);
|
|
493
|
+
await elementUpdated(el);
|
|
494
|
+
expect(el.value, "second pointermove").to.equal(0);
|
|
495
|
+
handle.dispatchEvent(
|
|
496
|
+
new PointerEvent("pointerup", {
|
|
497
|
+
clientX: 0,
|
|
498
|
+
cancelable: true,
|
|
499
|
+
composed: true,
|
|
500
|
+
bubbles: true
|
|
501
|
+
})
|
|
502
|
+
);
|
|
503
|
+
await elementUpdated(el);
|
|
504
|
+
expect(el.value, "second pointerup").to.equal(0);
|
|
505
|
+
expect(el.dragging, "is dragging").to.be.false;
|
|
506
|
+
});
|
|
507
|
+
it("accepts pointermove events - [step=0]", async () => {
|
|
508
|
+
const el = await fixture(
|
|
509
|
+
html`
|
|
33
510
|
<sp-slider step="0" max="20" style="width: 500px; float: left;">
|
|
34
511
|
Step = 0
|
|
35
512
|
</sp-slider>
|
|
36
|
-
`
|
|
513
|
+
`
|
|
514
|
+
);
|
|
515
|
+
await elementUpdated(el);
|
|
516
|
+
await nextFrame();
|
|
517
|
+
await nextFrame();
|
|
518
|
+
expect(el.value).to.equal(10);
|
|
519
|
+
const handle = el.shadowRoot.querySelector(".handle");
|
|
520
|
+
const handleBoundingRect = handle.getBoundingClientRect();
|
|
521
|
+
const position = [
|
|
522
|
+
handleBoundingRect.x + handleBoundingRect.width / 2,
|
|
523
|
+
handleBoundingRect.y + handleBoundingRect.height / 2
|
|
524
|
+
];
|
|
525
|
+
await sendMouse({
|
|
526
|
+
steps: [
|
|
527
|
+
{
|
|
528
|
+
type: "move",
|
|
529
|
+
position
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
type: "down"
|
|
533
|
+
}
|
|
534
|
+
]
|
|
535
|
+
});
|
|
536
|
+
await nextFrame();
|
|
537
|
+
expect(el.highlight, "with no highlight").to.be.false;
|
|
538
|
+
expect(el.dragging, "dragging").to.be.true;
|
|
539
|
+
let inputEvent = oneEvent(el, "input");
|
|
540
|
+
await sendMouse({
|
|
541
|
+
steps: [
|
|
542
|
+
{
|
|
543
|
+
type: "move",
|
|
544
|
+
position: [
|
|
545
|
+
200,
|
|
546
|
+
handleBoundingRect.y + handleBoundingRect.height + 100
|
|
547
|
+
]
|
|
548
|
+
}
|
|
549
|
+
]
|
|
550
|
+
});
|
|
551
|
+
await inputEvent;
|
|
552
|
+
expect(el.value).to.equal(8);
|
|
553
|
+
inputEvent = oneEvent(el, "input");
|
|
554
|
+
await sendMouse({
|
|
555
|
+
steps: [
|
|
556
|
+
{
|
|
557
|
+
type: "move",
|
|
558
|
+
position: [125, position[1]]
|
|
559
|
+
}
|
|
560
|
+
]
|
|
561
|
+
});
|
|
562
|
+
await inputEvent;
|
|
563
|
+
expect(el.value).to.equal(5);
|
|
564
|
+
});
|
|
565
|
+
it("will not pointermove unless `pointerdown`", async () => {
|
|
566
|
+
const el = await fixture(
|
|
567
|
+
html`
|
|
37
568
|
<sp-slider></sp-slider>
|
|
38
|
-
`
|
|
569
|
+
`
|
|
570
|
+
);
|
|
571
|
+
await elementUpdated(el);
|
|
572
|
+
expect(el.value).to.equal(10);
|
|
573
|
+
expect(el.dragging).to.be.false;
|
|
574
|
+
const handle = el.shadowRoot.querySelector(".handle");
|
|
575
|
+
handle.dispatchEvent(
|
|
576
|
+
new PointerEvent("pointermove", {
|
|
577
|
+
clientX: 0,
|
|
578
|
+
cancelable: true
|
|
579
|
+
})
|
|
580
|
+
);
|
|
581
|
+
await nextFrame();
|
|
582
|
+
expect(el.value).to.equal(10);
|
|
583
|
+
});
|
|
584
|
+
it("responds to input events on the <input/> element", async () => {
|
|
585
|
+
const el = await fixture(
|
|
586
|
+
html`
|
|
39
587
|
<sp-slider></sp-slider>
|
|
40
|
-
`
|
|
588
|
+
`
|
|
589
|
+
);
|
|
590
|
+
await elementUpdated(el);
|
|
591
|
+
expect(el.value).to.equal(10);
|
|
592
|
+
const input = el.shadowRoot.querySelector(".input");
|
|
593
|
+
input.value = "0";
|
|
594
|
+
input.dispatchEvent(new Event("change"));
|
|
595
|
+
expect(el.value).to.equal(0);
|
|
596
|
+
});
|
|
597
|
+
it("accepts variants", async () => {
|
|
598
|
+
const el = await fixture(
|
|
599
|
+
html`
|
|
41
600
|
<sp-slider variant="tick"></sp-slider>
|
|
42
|
-
`
|
|
601
|
+
`
|
|
602
|
+
);
|
|
603
|
+
await elementUpdated(el);
|
|
604
|
+
expect(el.variant).to.equal("tick");
|
|
605
|
+
expect(el.getAttribute("variant")).to.equal("tick");
|
|
606
|
+
el.variant = "ramp";
|
|
607
|
+
await elementUpdated(el);
|
|
608
|
+
expect(el.variant).to.equal("ramp");
|
|
609
|
+
expect(el.getAttribute("variant")).to.equal("ramp");
|
|
610
|
+
el.setAttribute("variant", "filled");
|
|
611
|
+
await elementUpdated(el);
|
|
612
|
+
expect(el.variant).to.equal("filled");
|
|
613
|
+
expect(el.getAttribute("variant")).to.equal("filled");
|
|
614
|
+
el.removeAttribute("variant");
|
|
615
|
+
await elementUpdated(el);
|
|
616
|
+
expect(el.variant).to.equal("");
|
|
617
|
+
expect(el.hasAttribute("variant")).to.be.false;
|
|
618
|
+
});
|
|
619
|
+
it("validates variants", async () => {
|
|
620
|
+
const el = await fixture(
|
|
621
|
+
html`
|
|
43
622
|
<sp-slider variant="other"></sp-slider>
|
|
44
|
-
`
|
|
623
|
+
`
|
|
624
|
+
);
|
|
625
|
+
await elementUpdated(el);
|
|
626
|
+
expect(el.variant).to.equal("");
|
|
627
|
+
expect(el.hasAttribute("variant")).to.be.false;
|
|
628
|
+
el.variant = "tick";
|
|
629
|
+
await elementUpdated(el);
|
|
630
|
+
expect(el.variant).to.equal("tick");
|
|
631
|
+
expect(el.getAttribute("variant")).to.equal("tick");
|
|
632
|
+
el.variant = "tick";
|
|
633
|
+
await elementUpdated(el);
|
|
634
|
+
expect(el.variant).to.equal("tick");
|
|
635
|
+
expect(el.getAttribute("variant")).to.equal("tick");
|
|
636
|
+
});
|
|
637
|
+
it("has a `focusElement`", async () => {
|
|
638
|
+
const el = await fixture(
|
|
639
|
+
html`
|
|
45
640
|
<sp-slider></sp-slider>
|
|
46
|
-
`
|
|
641
|
+
`
|
|
642
|
+
);
|
|
643
|
+
await elementUpdated(el);
|
|
644
|
+
const input = el.focusElement;
|
|
645
|
+
expect(input).to.not.be.undefined;
|
|
646
|
+
expect(input.type).to.equal("range");
|
|
647
|
+
});
|
|
648
|
+
it("displays result of getAriaValueText", async () => {
|
|
649
|
+
const el = await fixture(
|
|
650
|
+
html`
|
|
47
651
|
<sp-slider
|
|
48
652
|
value="50"
|
|
49
653
|
min="0"
|
|
50
654
|
max="100"
|
|
51
|
-
.getAriaHandleText=${
|
|
655
|
+
.getAriaHandleText=${(value) => `${value}%`}
|
|
52
656
|
></sp-slider>
|
|
53
|
-
`
|
|
657
|
+
`
|
|
658
|
+
);
|
|
659
|
+
await elementUpdated(el);
|
|
660
|
+
const input = el.focusElement;
|
|
661
|
+
expect(input.getAttribute("aria-valuetext")).to.equal("50%");
|
|
662
|
+
el.value = 100;
|
|
663
|
+
await elementUpdated(el);
|
|
664
|
+
expect(input.getAttribute("aria-valuetext")).to.equal("100%");
|
|
665
|
+
});
|
|
666
|
+
it("displays Intl.formatNumber results", async () => {
|
|
667
|
+
const el = await fixture(
|
|
668
|
+
html`
|
|
54
669
|
<sp-slider
|
|
55
670
|
value=".5"
|
|
56
671
|
min="0"
|
|
57
672
|
max="1"
|
|
58
|
-
.formatOptions=${{style:"percent"}}
|
|
673
|
+
.formatOptions=${{ style: "percent" }}
|
|
59
674
|
></sp-slider>
|
|
60
|
-
`
|
|
675
|
+
`
|
|
676
|
+
);
|
|
677
|
+
await elementUpdated(el);
|
|
678
|
+
const input = el.focusElement;
|
|
679
|
+
expect(input.getAttribute("aria-valuetext")).to.equal("50%");
|
|
680
|
+
el.value = 100;
|
|
681
|
+
await elementUpdated(el);
|
|
682
|
+
expect(input.getAttribute("aria-valuetext")).to.equal("100%");
|
|
683
|
+
});
|
|
684
|
+
it("obeys language property", async () => {
|
|
685
|
+
let lang = "de";
|
|
686
|
+
const langResolvers = [];
|
|
687
|
+
const createLangResolver = (event) => {
|
|
688
|
+
langResolvers.push(event.detail.callback);
|
|
689
|
+
resolveLanguage();
|
|
690
|
+
};
|
|
691
|
+
const resolveLanguage = () => {
|
|
692
|
+
langResolvers.forEach((resolver) => resolver(lang));
|
|
693
|
+
};
|
|
694
|
+
let el = await fixture(
|
|
695
|
+
html`
|
|
61
696
|
<sp-slider
|
|
62
697
|
value="2.44"
|
|
63
698
|
min="0"
|
|
64
699
|
max="10"
|
|
65
700
|
step="0.01"
|
|
66
|
-
@sp-language-context=${
|
|
67
|
-
.formatOptions=${{maximumFractionDigits:2}}
|
|
701
|
+
@sp-language-context=${createLangResolver}
|
|
702
|
+
.formatOptions=${{ maximumFractionDigits: 2 }}
|
|
68
703
|
></sp-slider>
|
|
69
|
-
`
|
|
704
|
+
`
|
|
705
|
+
);
|
|
706
|
+
await elementUpdated(el);
|
|
707
|
+
let input = el.focusElement;
|
|
708
|
+
expect(
|
|
709
|
+
input.getAttribute("aria-valuetext"),
|
|
710
|
+
"First German number"
|
|
711
|
+
).to.equal("2,44");
|
|
712
|
+
lang = "en";
|
|
713
|
+
resolveLanguage();
|
|
714
|
+
await elementUpdated(el);
|
|
715
|
+
expect(
|
|
716
|
+
input.getAttribute("aria-valuetext"),
|
|
717
|
+
"First English number"
|
|
718
|
+
).to.equal("2.44");
|
|
719
|
+
lang = "de";
|
|
720
|
+
resolveLanguage();
|
|
721
|
+
el = await fixture(
|
|
722
|
+
html`
|
|
70
723
|
<sp-slider
|
|
71
724
|
min="0"
|
|
72
725
|
max="10"
|
|
73
|
-
@sp-language-context=${
|
|
726
|
+
@sp-language-context=${createLangResolver}
|
|
74
727
|
>
|
|
75
728
|
<sp-slider-handle
|
|
76
729
|
slot="handle"
|
|
77
730
|
step="0.01"
|
|
78
731
|
value="2.44"
|
|
79
|
-
.formatOptions=${{maximumFractionDigits:2}}
|
|
80
|
-
@sp-language-context=${
|
|
732
|
+
.formatOptions=${{ maximumFractionDigits: 2 }}
|
|
733
|
+
@sp-language-context=${createLangResolver}
|
|
81
734
|
></sp-slider-handle>
|
|
82
735
|
</sp-slider>
|
|
83
|
-
`
|
|
736
|
+
`
|
|
737
|
+
);
|
|
738
|
+
await elementUpdated(el);
|
|
739
|
+
input = el.focusElement;
|
|
740
|
+
expect(
|
|
741
|
+
input.getAttribute("aria-valuetext"),
|
|
742
|
+
"Second German number"
|
|
743
|
+
).to.equal("2,44");
|
|
744
|
+
lang = "en";
|
|
745
|
+
resolveLanguage();
|
|
746
|
+
await elementUpdated(el);
|
|
747
|
+
expect(
|
|
748
|
+
input.getAttribute("aria-valuetext"),
|
|
749
|
+
"Second English number"
|
|
750
|
+
).to.equal("2.44");
|
|
751
|
+
});
|
|
752
|
+
it("uses fallback ariaValueText", async () => {
|
|
753
|
+
const el = await fixture(
|
|
754
|
+
html`
|
|
84
755
|
<sp-slider value="50" min="0" max="100"></sp-slider>
|
|
85
|
-
`
|
|
756
|
+
`
|
|
757
|
+
);
|
|
758
|
+
await elementUpdated(el);
|
|
759
|
+
el.getAriaValueText = false;
|
|
760
|
+
const input = el.focusElement;
|
|
761
|
+
await elementUpdated(el);
|
|
762
|
+
expect(input.getAttribute("aria-valuetext")).to.equal("50");
|
|
763
|
+
});
|
|
764
|
+
it("accepts min/max/value in the same timing", async () => {
|
|
765
|
+
const el = await fixture(
|
|
766
|
+
html`
|
|
86
767
|
<sp-slider></sp-slider>
|
|
87
|
-
`
|
|
768
|
+
`
|
|
769
|
+
);
|
|
770
|
+
await elementUpdated(el);
|
|
771
|
+
expect(el.value).to.equal(10);
|
|
772
|
+
el.min = 0;
|
|
773
|
+
el.max = 200;
|
|
774
|
+
el.value = 200;
|
|
775
|
+
await elementUpdated(el);
|
|
776
|
+
expect(el.value).to.equal(200);
|
|
777
|
+
el.value = 500;
|
|
778
|
+
el.min = 0;
|
|
779
|
+
el.max = 500;
|
|
780
|
+
await elementUpdated(el);
|
|
781
|
+
expect(el.value).to.equal(500);
|
|
782
|
+
el.value = -100;
|
|
783
|
+
el.min = -100;
|
|
784
|
+
el.max = 500;
|
|
785
|
+
await elementUpdated(el);
|
|
786
|
+
expect(el.value).to.equal(-100);
|
|
787
|
+
});
|
|
788
|
+
it("returns values for handles", async () => {
|
|
789
|
+
let el = await fixture(
|
|
790
|
+
html`
|
|
88
791
|
<sp-slider>
|
|
89
792
|
<sp-slider-handle
|
|
90
793
|
slot="handle"
|
|
@@ -105,16 +808,35 @@ import"@spectrum-web-components/slider/sp-slider.js";import"@spectrum-web-compon
|
|
|
105
808
|
max="100"
|
|
106
809
|
></sp-slider-handle>
|
|
107
810
|
</sp-slider>
|
|
108
|
-
`
|
|
811
|
+
`
|
|
812
|
+
);
|
|
813
|
+
await elementUpdated(el);
|
|
814
|
+
expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });
|
|
815
|
+
const middleHandle = el.querySelector("#middle-handle");
|
|
816
|
+
middleHandle.value = 22;
|
|
817
|
+
await elementUpdated(el);
|
|
818
|
+
expect(el.values).to.deep.equal({ a: 10, b: 22, c: 30 });
|
|
819
|
+
el = await fixture(
|
|
820
|
+
html`
|
|
109
821
|
<sp-slider value="10" min="0" max="100"></sp-slider>
|
|
110
|
-
`
|
|
822
|
+
`
|
|
823
|
+
);
|
|
824
|
+
expect(el.values).to.deep.equal({ value: 10 });
|
|
825
|
+
el = await fixture(
|
|
826
|
+
html`
|
|
111
827
|
<sp-slider min="0" max="100">
|
|
112
828
|
<sp-slider-handle
|
|
113
829
|
slot="handle"
|
|
114
830
|
value="10"
|
|
115
831
|
></sp-slider-handle>
|
|
116
832
|
</sp-slider>
|
|
117
|
-
`
|
|
833
|
+
`
|
|
834
|
+
);
|
|
835
|
+
expect(el.values).to.deep.equal({ handle1: 10 });
|
|
836
|
+
});
|
|
837
|
+
it("clamps values for multi-handle slider", async () => {
|
|
838
|
+
const el = await fixture(
|
|
839
|
+
html`
|
|
118
840
|
<sp-slider min="0" max="100">
|
|
119
841
|
<sp-slider-handle
|
|
120
842
|
id="first-handle"
|
|
@@ -139,7 +861,33 @@ import"@spectrum-web-components/slider/sp-slider.js";import"@spectrum-web-compon
|
|
|
139
861
|
value="30"
|
|
140
862
|
></sp-slider-handle>
|
|
141
863
|
</sp-slider>
|
|
142
|
-
`
|
|
864
|
+
`
|
|
865
|
+
);
|
|
866
|
+
await elementUpdated(el);
|
|
867
|
+
expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });
|
|
868
|
+
const firstHandle = el.querySelector("#first-handle");
|
|
869
|
+
const middleHandle = el.querySelector("#middle-handle");
|
|
870
|
+
const lastHandle = el.querySelector("#last-handle");
|
|
871
|
+
firstHandle.value = 25;
|
|
872
|
+
await elementUpdated(el);
|
|
873
|
+
expect(el.values).to.deep.equal({ a: 20, b: 20, c: 30 });
|
|
874
|
+
firstHandle.value = 10;
|
|
875
|
+
await elementUpdated(el);
|
|
876
|
+
middleHandle.value = 5;
|
|
877
|
+
await elementUpdated(el);
|
|
878
|
+
expect(el.values).to.deep.equal({ a: 10, b: 10, c: 30 });
|
|
879
|
+
lastHandle.value = 11;
|
|
880
|
+
await elementUpdated(el);
|
|
881
|
+
expect(el.values).to.deep.equal({ a: 10, b: 10, c: 11 });
|
|
882
|
+
lastHandle.value = 7;
|
|
883
|
+
await elementUpdated(el);
|
|
884
|
+
expect(el.values).to.deep.equal({ a: 10, b: 10, c: 10 });
|
|
885
|
+
});
|
|
886
|
+
it('warns in Dev Mode when `min="previous"` is leveraged on first handle', async () => {
|
|
887
|
+
const consoleWarnStub = stub(console, "warn");
|
|
888
|
+
window.__swc.issuedWarnings = /* @__PURE__ */ new Set();
|
|
889
|
+
const el = await fixture(
|
|
890
|
+
html`
|
|
143
891
|
<sp-slider min="0" max="100">
|
|
144
892
|
<sp-slider-handle
|
|
145
893
|
id="first-handle"
|
|
@@ -165,7 +913,29 @@ import"@spectrum-web-components/slider/sp-slider.js";import"@spectrum-web-compon
|
|
|
165
913
|
value="30"
|
|
166
914
|
></sp-slider-handle>
|
|
167
915
|
</sp-slider>
|
|
168
|
-
`
|
|
916
|
+
`
|
|
917
|
+
);
|
|
918
|
+
await elementUpdated(el);
|
|
919
|
+
expect(consoleWarnStub.called).to.be.true;
|
|
920
|
+
const spyCall = consoleWarnStub.getCall(0);
|
|
921
|
+
expect(
|
|
922
|
+
spyCall.args.at(0).includes("previous"),
|
|
923
|
+
'confirm "previous" in message'
|
|
924
|
+
).to.be.true;
|
|
925
|
+
expect(spyCall.args.at(-1), "confirm `data` shape").to.deep.equal({
|
|
926
|
+
data: {
|
|
927
|
+
localName: "sp-slider",
|
|
928
|
+
type: "api",
|
|
929
|
+
level: "default"
|
|
930
|
+
}
|
|
931
|
+
});
|
|
932
|
+
consoleWarnStub.restore();
|
|
933
|
+
});
|
|
934
|
+
it('warns in Dev Mode when `max="next"` is leveraged on last handle', async () => {
|
|
935
|
+
const consoleWarnStub = stub(console, "warn");
|
|
936
|
+
window.__swc.issuedWarnings = /* @__PURE__ */ new Set();
|
|
937
|
+
const el = await fixture(
|
|
938
|
+
html`
|
|
169
939
|
<sp-slider min="0" max="100">
|
|
170
940
|
<sp-slider-handle
|
|
171
941
|
id="first-handle"
|
|
@@ -191,14 +961,47 @@ import"@spectrum-web-components/slider/sp-slider.js";import"@spectrum-web-compon
|
|
|
191
961
|
value="30"
|
|
192
962
|
></sp-slider-handle>
|
|
193
963
|
</sp-slider>
|
|
194
|
-
`
|
|
964
|
+
`
|
|
965
|
+
);
|
|
966
|
+
await elementUpdated(el);
|
|
967
|
+
expect(consoleWarnStub.called).to.be.true;
|
|
968
|
+
const spyCall = consoleWarnStub.getCall(0);
|
|
969
|
+
expect(spyCall.args.at(0).includes("next"), 'confirm "next" in message').to.be.true;
|
|
970
|
+
expect(spyCall.args.at(-1), "confirm `data` shape").to.deep.equal({
|
|
971
|
+
data: {
|
|
972
|
+
localName: "sp-slider",
|
|
973
|
+
type: "api",
|
|
974
|
+
level: "default"
|
|
975
|
+
}
|
|
976
|
+
});
|
|
977
|
+
consoleWarnStub.restore();
|
|
978
|
+
});
|
|
979
|
+
it("builds both handles from a <template>", async () => {
|
|
980
|
+
var _a;
|
|
981
|
+
const template = document.createElement("template");
|
|
982
|
+
template.innerHTML = `
|
|
195
983
|
<sp-slider variant="range" step="1" id="price" name="price" label="Max Price" min="35425" max="86610">
|
|
196
984
|
<sp-slider-handle slot="handle" name="min" label="Minimum" max="next" value="35425"></sp-slider-handle>
|
|
197
985
|
<sp-slider-handle slot="handle" name="max" label="Maximum" min="previous" value="86610"></sp-slider-handle>
|
|
198
986
|
</sp-slider>
|
|
199
|
-
`;
|
|
987
|
+
`;
|
|
988
|
+
const el = await fixture(
|
|
989
|
+
html`
|
|
200
990
|
<div></div>
|
|
201
|
-
`
|
|
991
|
+
`
|
|
992
|
+
);
|
|
993
|
+
el.appendChild(template.content.cloneNode(true));
|
|
994
|
+
await waitUntil(() => {
|
|
995
|
+
var _a2;
|
|
996
|
+
return ((_a2 = el.querySelector("sp-slider")) == null ? void 0 : _a2.shadowRoot) != null;
|
|
997
|
+
});
|
|
998
|
+
await nextFrame();
|
|
999
|
+
const createdHandles = ((_a = el.querySelector("sp-slider")) == null ? void 0 : _a.shadowRoot.querySelectorAll(".handle")) || [];
|
|
1000
|
+
expect(createdHandles).to.have.lengthOf(2);
|
|
1001
|
+
});
|
|
1002
|
+
it("enforces next/previous max/min", async () => {
|
|
1003
|
+
let el = await fixture(
|
|
1004
|
+
html`
|
|
202
1005
|
<sp-slider min="0" max="100">
|
|
203
1006
|
<sp-slider-handle
|
|
204
1007
|
id="first-handle"
|
|
@@ -223,7 +1026,39 @@ import"@spectrum-web-components/slider/sp-slider.js";import"@spectrum-web-compon
|
|
|
223
1026
|
value="30"
|
|
224
1027
|
></sp-slider-handle>
|
|
225
1028
|
</sp-slider>
|
|
226
|
-
`
|
|
1029
|
+
`
|
|
1030
|
+
);
|
|
1031
|
+
await elementUpdated(el);
|
|
1032
|
+
expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });
|
|
1033
|
+
let firstHandle = el.querySelector("#first-handle");
|
|
1034
|
+
let lastHandle = el.querySelector("#last-handle");
|
|
1035
|
+
let firstInput = el.shadowRoot.querySelector(
|
|
1036
|
+
'.handle[name="a"] > input'
|
|
1037
|
+
);
|
|
1038
|
+
let middleInput = el.shadowRoot.querySelector(
|
|
1039
|
+
'.handle[name="b"] > input'
|
|
1040
|
+
);
|
|
1041
|
+
let lastInput = el.shadowRoot.querySelector(
|
|
1042
|
+
'.handle[name="c"] > input'
|
|
1043
|
+
);
|
|
1044
|
+
expect(firstInput.min).to.equal("0");
|
|
1045
|
+
expect(firstInput.max).to.equal("20");
|
|
1046
|
+
expect(middleInput.min).to.equal("10");
|
|
1047
|
+
expect(middleInput.max).to.equal("30");
|
|
1048
|
+
expect(lastInput.min).to.equal("20");
|
|
1049
|
+
expect(lastInput.max).to.equal("100");
|
|
1050
|
+
firstHandle.value = 15;
|
|
1051
|
+
lastHandle.value = 85;
|
|
1052
|
+
await elementUpdated(el);
|
|
1053
|
+
await elementUpdated(el);
|
|
1054
|
+
expect(firstInput.min).to.equal("0");
|
|
1055
|
+
expect(firstInput.max).to.equal("20");
|
|
1056
|
+
expect(middleInput.min).to.equal("15");
|
|
1057
|
+
expect(middleInput.max).to.equal("85");
|
|
1058
|
+
expect(lastInput.min).to.equal("20");
|
|
1059
|
+
expect(lastInput.max).to.equal("100");
|
|
1060
|
+
el = await fixture(
|
|
1061
|
+
html`
|
|
227
1062
|
<sp-slider>
|
|
228
1063
|
<sp-slider-handle
|
|
229
1064
|
id="first-handle"
|
|
@@ -250,7 +1085,37 @@ import"@spectrum-web-components/slider/sp-slider.js";import"@spectrum-web-compon
|
|
|
250
1085
|
value="30"
|
|
251
1086
|
></sp-slider-handle>
|
|
252
1087
|
</sp-slider>
|
|
253
|
-
`
|
|
1088
|
+
`
|
|
1089
|
+
);
|
|
1090
|
+
firstInput = el.shadowRoot.querySelector(
|
|
1091
|
+
'.handle[name="a"] > input'
|
|
1092
|
+
);
|
|
1093
|
+
middleInput = el.shadowRoot.querySelector(
|
|
1094
|
+
'.handle[name="b"] > input'
|
|
1095
|
+
);
|
|
1096
|
+
lastInput = el.shadowRoot.querySelector(
|
|
1097
|
+
'.handle[name="c"] > input'
|
|
1098
|
+
);
|
|
1099
|
+
expect(firstInput.min).to.equal("0");
|
|
1100
|
+
expect(firstInput.max).to.equal("20");
|
|
1101
|
+
expect(middleInput.min).to.equal("10");
|
|
1102
|
+
expect(middleInput.max).to.equal("30");
|
|
1103
|
+
expect(lastInput.min).to.equal("20");
|
|
1104
|
+
expect(lastInput.max).to.equal("100");
|
|
1105
|
+
firstHandle = el.querySelector("#first-handle");
|
|
1106
|
+
lastHandle = el.querySelector("#last-handle");
|
|
1107
|
+
firstHandle.min = 5;
|
|
1108
|
+
lastHandle.max = 95;
|
|
1109
|
+
await elementUpdated(el);
|
|
1110
|
+
await elementUpdated(el);
|
|
1111
|
+
expect(firstInput.min).to.equal("5");
|
|
1112
|
+
expect(firstInput.max).to.equal("20");
|
|
1113
|
+
expect(lastInput.min).to.equal("20");
|
|
1114
|
+
expect(lastInput.max).to.equal("95");
|
|
1115
|
+
});
|
|
1116
|
+
it("sends keyboard events to active handle", async () => {
|
|
1117
|
+
const el = await fixture(
|
|
1118
|
+
html`
|
|
254
1119
|
<sp-slider step="1" min="0" max="100">
|
|
255
1120
|
<sp-slider-handle
|
|
256
1121
|
id="first-handle"
|
|
@@ -275,5 +1140,17 @@ import"@spectrum-web-components/slider/sp-slider.js";import"@spectrum-web-compon
|
|
|
275
1140
|
value="30"
|
|
276
1141
|
></sp-slider-handle>
|
|
277
1142
|
</sp-slider>
|
|
278
|
-
`
|
|
1143
|
+
`
|
|
1144
|
+
);
|
|
1145
|
+
await elementUpdated(el);
|
|
1146
|
+
expect(el.values).to.deep.equal({ a: 10, b: 20, c: 30 });
|
|
1147
|
+
const lastHandle = el.querySelector("#last-handle");
|
|
1148
|
+
lastHandle.focus();
|
|
1149
|
+
await sendKeys({
|
|
1150
|
+
press: "ArrowDown"
|
|
1151
|
+
});
|
|
1152
|
+
await elementUpdated(el);
|
|
1153
|
+
expect(el.values).to.deep.equal({ a: 10, b: 20, c: 29 });
|
|
1154
|
+
});
|
|
1155
|
+
});
|
|
279
1156
|
//# sourceMappingURL=slider.test.js.map
|