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