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