@spectrum-web-components/split-view 0.4.10 → 0.4.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +3 -3
- package/package.json +24 -7
- package/sp-split-view.dev.js +3 -0
- package/sp-split-view.dev.js.map +7 -0
- package/sp-split-view.js +3 -14
- package/sp-split-view.js.map +7 -1
- package/src/SplitView.dev.js +319 -0
- package/src/SplitView.dev.js.map +7 -0
- package/src/SplitView.js +279 -310
- package/src/SplitView.js.map +7 -1
- package/src/index.dev.js +2 -0
- package/src/index.dev.js.map +7 -0
- package/src/index.js +2 -13
- package/src/index.js.map +7 -1
- package/src/spectrum-split-view.css.dev.js +99 -0
- package/src/spectrum-split-view.css.dev.js.map +7 -0
- package/src/spectrum-split-view.css.js +3 -14
- package/src/spectrum-split-view.css.js.map +7 -1
- package/src/split-view.css.dev.js +111 -0
- package/src/split-view.css.dev.js.map +7 -0
- package/src/split-view.css.js +3 -14
- package/src/split-view.css.js.map +7 -1
- package/src/types.dev.js +1 -0
- package/src/types.dev.js.map +7 -0
- package/src/types.js +1 -13
- package/src/types.js.map +7 -1
- package/stories/split-view.stories.js +36 -47
- package/stories/split-view.stories.js.map +7 -1
- package/test/benchmark/basic-test.js +5 -16
- package/test/benchmark/basic-test.js.map +7 -1
- package/test/split-view.test-vrt.js +4 -15
- package/test/split-view.test-vrt.js.map +7 -1
- package/test/split-view.test.js +540 -542
- package/test/split-view.test.js.map +7 -1
package/test/split-view.test.js
CHANGED
@@ -1,53 +1,59 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
import { spy } from
|
16
|
-
describe(
|
17
|
-
|
18
|
-
|
1
|
+
import { elementUpdated, expect, fixture, html } from "@open-wc/testing";
|
2
|
+
import "@spectrum-web-components/split-view/sp-split-view.js";
|
3
|
+
import {
|
4
|
+
arrowDownEvent,
|
5
|
+
arrowLeftEvent,
|
6
|
+
arrowRightEvent,
|
7
|
+
arrowUpEvent,
|
8
|
+
endEvent,
|
9
|
+
homeEvent,
|
10
|
+
pageDownEvent,
|
11
|
+
pageUpEvent,
|
12
|
+
shiftTabEvent,
|
13
|
+
testForLitDevWarnings
|
14
|
+
} from "../../../test/testing-helpers.js";
|
15
|
+
import { spy } from "sinon";
|
16
|
+
describe("SplitView", () => {
|
17
|
+
testForLitDevWarnings(async () => await fixture(html`
|
18
|
+
<sp-split-view primary-size="100">
|
19
|
+
<div>First panel</div>
|
20
|
+
<div>Second panel</div>
|
21
|
+
</sp-split-view>
|
22
|
+
`));
|
23
|
+
it("loads default (horizontal) split-view accessibly", async () => {
|
24
|
+
const el = await fixture(html`
|
19
25
|
<sp-split-view primary-size="100">
|
20
26
|
<div>First panel</div>
|
21
27
|
<div>Second panel</div>
|
22
28
|
</sp-split-view>
|
23
29
|
`);
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
30
|
+
await elementUpdated(el);
|
31
|
+
await expect(el).to.be.accessible();
|
32
|
+
expect(el.splitterPos || 0).to.equal(100);
|
33
|
+
expect(el.resizable).to.be.false;
|
34
|
+
expect(el.collapsible).to.be.false;
|
35
|
+
const gripper = el.shadowRoot.querySelector("#gripper");
|
36
|
+
expect(gripper).to.be.null;
|
37
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
38
|
+
expect(getComputedStyle(splitter).cursor).to.equal("auto");
|
39
|
+
});
|
40
|
+
it("loads horizontal [resizable] split-view accessibly", async () => {
|
41
|
+
const el = await fixture(html`
|
36
42
|
<sp-split-view resizable primary-size="100px">
|
37
43
|
<div>First panel</div>
|
38
44
|
<div>Second panel</div>
|
39
45
|
</sp-split-view>
|
40
46
|
`);
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
47
|
+
await elementUpdated(el);
|
48
|
+
await expect(el).to.be.accessible();
|
49
|
+
expect(el.splitterPos || 0).to.equal(100);
|
50
|
+
const gripper = el.shadowRoot.querySelector("#gripper");
|
51
|
+
await expect(gripper).to.be.accessible();
|
52
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
53
|
+
expect(getComputedStyle(splitter).cursor).to.equal("ew-resize");
|
54
|
+
});
|
55
|
+
it("loads [vertical] split-view accessibly", async () => {
|
56
|
+
const el = await fixture(html`
|
51
57
|
<sp-split-view
|
52
58
|
vertical
|
53
59
|
primary-size="75%"
|
@@ -57,28 +63,28 @@ describe('SplitView', () => {
|
|
57
63
|
<div>Second panel</div>
|
58
64
|
</sp-split-view>
|
59
65
|
`);
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
66
|
+
await elementUpdated(el);
|
67
|
+
await expect(el).to.be.accessible();
|
68
|
+
expect(el.splitterPos || 0).to.equal(300);
|
69
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
70
|
+
expect(getComputedStyle(splitter).cursor).to.equal("auto");
|
71
|
+
});
|
72
|
+
it("loads [vertical] [resizable] split-view accessibly", async () => {
|
73
|
+
const el = await fixture(html`
|
68
74
|
<sp-split-view vertical resizable style="height: 400px">
|
69
75
|
<div>First panel</div>
|
70
76
|
<div>Second panel</div>
|
71
77
|
</sp-split-view>
|
72
78
|
`);
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
79
|
+
await elementUpdated(el);
|
80
|
+
await expect(el).to.be.accessible();
|
81
|
+
expect(el.splitterPos || 0).to.equal(200);
|
82
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
83
|
+
expect(getComputedStyle(splitter).cursor).to.equal("ns-resize");
|
84
|
+
});
|
85
|
+
it("set all panel values", async () => {
|
86
|
+
const splitTotalWidth = 400;
|
87
|
+
const el = await fixture(html`
|
82
88
|
<sp-split-view
|
83
89
|
resizable
|
84
90
|
primary-min="50"
|
@@ -90,16 +96,16 @@ describe('SplitView', () => {
|
|
90
96
|
<div>Second panel</div>
|
91
97
|
</sp-split-view>
|
92
98
|
`);
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
99
|
+
await elementUpdated(el);
|
100
|
+
expect(el.resizable).to.be.true;
|
101
|
+
expect(el.primaryMin).to.equal(50);
|
102
|
+
expect(el.primaryMax).to.equal(300);
|
103
|
+
expect(el.secondaryMin).to.equal(50);
|
104
|
+
expect(el.secondaryMax).to.equal(3840);
|
105
|
+
});
|
106
|
+
it("use auto height in primary pane", async () => {
|
107
|
+
const splitTotalWidth = 400;
|
108
|
+
const el = await fixture(html`
|
103
109
|
<sp-split-view
|
104
110
|
resizable
|
105
111
|
primary-size="auto"
|
@@ -117,15 +123,15 @@ describe('SplitView', () => {
|
|
117
123
|
<div>Second panel</div>
|
118
124
|
</sp-split-view>
|
119
125
|
`);
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
126
|
+
await elementUpdated(el);
|
127
|
+
expect(el.resizable).to.be.true;
|
128
|
+
expect(el.primarySize).to.equal("auto");
|
129
|
+
expect(el.splitterPos || 0).to.equal(398);
|
130
|
+
});
|
131
|
+
it("resizes when pointer moves and resizable is enabled [ltr]", async () => {
|
132
|
+
let pointerId = -1;
|
133
|
+
const splitTotalWidth = 400;
|
134
|
+
const el = await fixture(html`
|
129
135
|
<sp-split-view
|
130
136
|
resizable
|
131
137
|
primary-min="50"
|
@@ -136,50 +142,47 @@ describe('SplitView', () => {
|
|
136
142
|
<div>Second panel</div>
|
137
143
|
</sp-split-view>
|
138
144
|
`);
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
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
|
-
let pointerId = -1;
|
181
|
-
const splitTotalWidth = 400;
|
182
|
-
const el = await fixture(html `
|
145
|
+
await elementUpdated(el);
|
146
|
+
expect(el.resizable).to.be.true;
|
147
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
148
|
+
splitter.setPointerCapture = (id) => pointerId = id;
|
149
|
+
splitter.releasePointerCapture = (id) => pointerId = id;
|
150
|
+
let pos = el.splitterPos;
|
151
|
+
expect(el.splitterPos).to.equal(200);
|
152
|
+
splitter.dispatchEvent(new PointerEvent("pointerdown", { pointerId: 1 }));
|
153
|
+
await elementUpdated(el);
|
154
|
+
expect(pointerId).to.equal(1);
|
155
|
+
pos -= 10;
|
156
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
157
|
+
clientX: pos
|
158
|
+
}));
|
159
|
+
await elementUpdated(el);
|
160
|
+
expect(Math.round(el.splitterPos)).to.equal(pos - el.getBoundingClientRect().left);
|
161
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
162
|
+
clientX: 0
|
163
|
+
}));
|
164
|
+
await elementUpdated(el);
|
165
|
+
expect(el.splitterPos).to.equal(el.primaryMin);
|
166
|
+
expect(getComputedStyle(splitter).cursor).to.equal("e-resize");
|
167
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
168
|
+
clientX: splitTotalWidth
|
169
|
+
}));
|
170
|
+
await elementUpdated(el);
|
171
|
+
expect(el.splitterPos, "350 first time").to.equal(splitTotalWidth - el.secondaryMin);
|
172
|
+
expect(getComputedStyle(splitter).cursor).to.equal("w-resize");
|
173
|
+
splitter.dispatchEvent(new PointerEvent("pointerup"));
|
174
|
+
await elementUpdated(el);
|
175
|
+
splitter.dispatchEvent(new MouseEvent("pointerdown", { button: 2, cancelable: true }));
|
176
|
+
await elementUpdated(el);
|
177
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
178
|
+
clientX: 0
|
179
|
+
}));
|
180
|
+
expect(el.splitterPos, "350 second time, because right click").to.equal(splitTotalWidth - el.secondaryMin);
|
181
|
+
});
|
182
|
+
it("resizes when pointer moves and resizable is enabled [rtl]", async () => {
|
183
|
+
let pointerId = -1;
|
184
|
+
const splitTotalWidth = 400;
|
185
|
+
const el = await fixture(html`
|
183
186
|
<sp-split-view
|
184
187
|
resizable
|
185
188
|
primary-min="50"
|
@@ -191,37 +194,37 @@ describe('SplitView', () => {
|
|
191
194
|
<div>Second panel</div>
|
192
195
|
</sp-split-view>
|
193
196
|
`);
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
197
|
+
await elementUpdated(el);
|
198
|
+
expect(el.resizable).to.be.true;
|
199
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
200
|
+
splitter.setPointerCapture = (id) => pointerId = id;
|
201
|
+
splitter.releasePointerCapture = (id) => pointerId = id;
|
202
|
+
let pos = el.splitterPos || 0;
|
203
|
+
splitter.dispatchEvent(new PointerEvent("pointerdown", { pointerId: 1 }));
|
204
|
+
await elementUpdated(el);
|
205
|
+
expect(pointerId).to.equal(1);
|
206
|
+
pos = el.getBoundingClientRect().right - 100;
|
207
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
208
|
+
clientX: pos
|
209
|
+
}));
|
210
|
+
await elementUpdated(el);
|
211
|
+
expect(Math.round(el.splitterPos || 0)).to.equal(el.getBoundingClientRect().right - pos);
|
212
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
213
|
+
clientX: 0
|
214
|
+
}));
|
215
|
+
await elementUpdated(el);
|
216
|
+
expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.secondaryMin);
|
217
|
+
expect(getComputedStyle(splitter).cursor).to.equal("e-resize");
|
218
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
219
|
+
clientX: el.getBoundingClientRect().right
|
220
|
+
}));
|
221
|
+
await elementUpdated(el);
|
222
|
+
expect(el.splitterPos || 0).to.equal(el.primaryMin);
|
223
|
+
expect(getComputedStyle(splitter).cursor).to.equal("w-resize");
|
224
|
+
});
|
225
|
+
it("resizes to start pos when pointer moves in horizontal splitview", async () => {
|
226
|
+
let pointerId = -1;
|
227
|
+
const el = await fixture(html`
|
225
228
|
<sp-split-view
|
226
229
|
resizable
|
227
230
|
secondary-min="50"
|
@@ -231,27 +234,27 @@ describe('SplitView', () => {
|
|
231
234
|
<div>Second panel</div>
|
232
235
|
</sp-split-view>
|
233
236
|
`);
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
237
|
+
await elementUpdated(el);
|
238
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
239
|
+
splitter.setPointerCapture = (id) => pointerId = id;
|
240
|
+
splitter.releasePointerCapture = (id) => pointerId = id;
|
241
|
+
splitter.dispatchEvent(new PointerEvent("pointerdown", { pointerId: 1 }));
|
242
|
+
await elementUpdated(el);
|
243
|
+
expect(pointerId).to.equal(1);
|
244
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
245
|
+
clientX: -10
|
246
|
+
}));
|
247
|
+
await elementUpdated(el);
|
248
|
+
expect(el.splitterPos || 0).to.equal(0);
|
249
|
+
splitter.dispatchEvent(new PointerEvent("pointerup"));
|
250
|
+
await elementUpdated(el);
|
251
|
+
expect(splitter.classList.contains("is-collapsed-start")).to.be.true;
|
252
|
+
expect(getComputedStyle(splitter).cursor).to.equal("e-resize");
|
253
|
+
});
|
254
|
+
it("resizes to end pos when pointer moves in horizontal splitview", async () => {
|
255
|
+
let pointerId = -1;
|
256
|
+
const splitTotalWidth = 400;
|
257
|
+
const el = await fixture(html`
|
255
258
|
<sp-split-view
|
256
259
|
resizable
|
257
260
|
primary-min="50"
|
@@ -261,28 +264,28 @@ describe('SplitView', () => {
|
|
261
264
|
<div>Second panel</div>
|
262
265
|
</sp-split-view>
|
263
266
|
`);
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
267
|
+
await elementUpdated(el);
|
268
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
269
|
+
splitter.setPointerCapture = (id) => pointerId = id;
|
270
|
+
splitter.releasePointerCapture = (id) => pointerId = id;
|
271
|
+
expect(el.primaryMin).to.equal(50);
|
272
|
+
expect(el.resizable).to.be.true;
|
273
|
+
splitter.dispatchEvent(new PointerEvent("pointerdown", { pointerId: 1 }));
|
274
|
+
await elementUpdated(el);
|
275
|
+
expect(pointerId).to.equal(1);
|
276
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
277
|
+
clientX: splitTotalWidth + 10
|
278
|
+
}));
|
279
|
+
await elementUpdated(el);
|
280
|
+
expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.splitterSize);
|
281
|
+
splitter.dispatchEvent(new PointerEvent("pointerup"));
|
282
|
+
await elementUpdated(el);
|
283
|
+
expect(splitter.classList.contains("is-collapsed-end")).to.be.true;
|
284
|
+
expect(getComputedStyle(splitter).cursor).to.equal("w-resize");
|
285
|
+
});
|
286
|
+
it("resizes to start pos when pointer moves in [vertical] splitview", async () => {
|
287
|
+
let pointerId = -1;
|
288
|
+
const el = await fixture(html`
|
286
289
|
<sp-split-view
|
287
290
|
vertical
|
288
291
|
resizable
|
@@ -294,27 +297,27 @@ describe('SplitView', () => {
|
|
294
297
|
<div>Second panel</div>
|
295
298
|
</sp-split-view>
|
296
299
|
`);
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
317
|
-
|
300
|
+
await elementUpdated(el);
|
301
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
302
|
+
splitter.setPointerCapture = (id) => pointerId = id;
|
303
|
+
splitter.releasePointerCapture = (id) => pointerId = id;
|
304
|
+
splitter.dispatchEvent(new PointerEvent("pointerdown", { pointerId: 1 }));
|
305
|
+
await elementUpdated(el);
|
306
|
+
expect(pointerId).to.equal(1);
|
307
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
308
|
+
clientY: 0
|
309
|
+
}));
|
310
|
+
await elementUpdated(el);
|
311
|
+
expect(el.splitterPos || 0).to.equal(0);
|
312
|
+
splitter.dispatchEvent(new PointerEvent("pointerup"));
|
313
|
+
await elementUpdated(el);
|
314
|
+
expect(splitter.classList.contains("is-collapsed-start")).to.be.true;
|
315
|
+
expect(getComputedStyle(splitter).cursor).to.equal("s-resize");
|
316
|
+
});
|
317
|
+
it("resizes to end pos when pointer moves in [vertical] splitview", async () => {
|
318
|
+
let pointerId = -1;
|
319
|
+
const splitTotalHeight = 400;
|
320
|
+
const el = await fixture(html`
|
318
321
|
<sp-split-view
|
319
322
|
vertical
|
320
323
|
resizable
|
@@ -325,28 +328,28 @@ describe('SplitView', () => {
|
|
325
328
|
<div>Second panel</div>
|
326
329
|
</sp-split-view>
|
327
330
|
`);
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
331
|
+
await elementUpdated(el);
|
332
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
333
|
+
splitter.setPointerCapture = (id) => pointerId = id;
|
334
|
+
splitter.releasePointerCapture = (id) => pointerId = id;
|
335
|
+
expect(el.primaryMin).to.equal(50);
|
336
|
+
expect(el.resizable).to.be.true;
|
337
|
+
splitter.dispatchEvent(new PointerEvent("pointerdown", { pointerId: 1 }));
|
338
|
+
await elementUpdated(el);
|
339
|
+
expect(pointerId).to.equal(1);
|
340
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
341
|
+
clientY: splitTotalHeight + 10
|
342
|
+
}));
|
343
|
+
await elementUpdated(el);
|
344
|
+
expect(el.splitterPos || 0).to.equal(splitTotalHeight - el.splitterSize);
|
345
|
+
splitter.dispatchEvent(new PointerEvent("pointerup"));
|
346
|
+
await elementUpdated(el);
|
347
|
+
expect(splitter.classList.contains("is-collapsed-end")).to.be.true;
|
348
|
+
expect(getComputedStyle(splitter).cursor).to.equal("n-resize");
|
349
|
+
});
|
350
|
+
it("resizes and collapses when pointer moves in horizontal splitview", async () => {
|
351
|
+
let pointerId = -1;
|
352
|
+
const el = await fixture(html`
|
350
353
|
<sp-split-view
|
351
354
|
resizable
|
352
355
|
collapsible
|
@@ -358,49 +361,49 @@ describe('SplitView', () => {
|
|
358
361
|
<div>Second panel</div>
|
359
362
|
</sp-split-view>
|
360
363
|
`);
|
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
|
-
|
364
|
+
await elementUpdated(el);
|
365
|
+
expect(el.collapsible).to.be.true;
|
366
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
367
|
+
splitter.setPointerCapture = (id) => pointerId = id;
|
368
|
+
splitter.releasePointerCapture = (id) => pointerId = id;
|
369
|
+
splitter.dispatchEvent(new PointerEvent("pointerdown", { pointerId: 1 }));
|
370
|
+
await elementUpdated(el);
|
371
|
+
expect(pointerId).to.equal(1);
|
372
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
373
|
+
clientX: 40
|
374
|
+
}));
|
375
|
+
await elementUpdated(el);
|
376
|
+
expect(el.splitterPos || 0).to.equal(50);
|
377
|
+
expect(splitter.classList.contains("is-collapsed-start")).to.be.false;
|
378
|
+
expect(getComputedStyle(splitter).cursor).to.equal("ew-resize");
|
379
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
380
|
+
clientX: -10
|
381
|
+
}));
|
382
|
+
await elementUpdated(el);
|
383
|
+
expect(el.splitterPos || 0).to.equal(0);
|
384
|
+
expect(splitter.classList.contains("is-collapsed-start")).to.be.true;
|
385
|
+
expect(getComputedStyle(splitter).cursor).to.equal("e-resize");
|
386
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
387
|
+
clientX: el.getBoundingClientRect().right - 10
|
388
|
+
}));
|
389
|
+
await elementUpdated(el);
|
390
|
+
expect(el.splitterPos || 0).to.equal(350);
|
391
|
+
expect(splitter.classList.contains("is-collapsed-end")).to.be.false;
|
392
|
+
expect(getComputedStyle(splitter).cursor).to.equal("ew-resize");
|
393
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
394
|
+
clientX: el.getBoundingClientRect().right
|
395
|
+
}));
|
396
|
+
await elementUpdated(el);
|
397
|
+
expect(el.splitterPos || 0).to.equal(400 - el.splitterSize);
|
398
|
+
splitter.dispatchEvent(new PointerEvent("pointerup"));
|
399
|
+
await elementUpdated(el);
|
400
|
+
expect(splitter.classList.contains("is-collapsed-end")).to.be.true;
|
401
|
+
expect(getComputedStyle(splitter).cursor).to.equal("w-resize");
|
402
|
+
});
|
403
|
+
it("resizes and collapses when pointer moves in [vertical] splitview", async () => {
|
404
|
+
let pointerId = -1;
|
405
|
+
const splitTotalHeight = 400;
|
406
|
+
const el = await fixture(html`
|
404
407
|
<sp-split-view
|
405
408
|
vertical
|
406
409
|
resizable
|
@@ -413,47 +416,47 @@ describe('SplitView', () => {
|
|
413
416
|
<div>Second panel</div>
|
414
417
|
</sp-split-view>
|
415
418
|
`);
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
440
|
-
|
441
|
-
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
446
|
-
|
447
|
-
|
448
|
-
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
419
|
+
await elementUpdated(el);
|
420
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
421
|
+
splitter.setPointerCapture = (id) => pointerId = id;
|
422
|
+
splitter.releasePointerCapture = (id) => pointerId = id;
|
423
|
+
splitter.dispatchEvent(new PointerEvent("pointerdown", { pointerId: 1 }));
|
424
|
+
await elementUpdated(el);
|
425
|
+
expect(pointerId).to.equal(1);
|
426
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
427
|
+
clientY: 40
|
428
|
+
}));
|
429
|
+
await elementUpdated(el);
|
430
|
+
expect(el.splitterPos || 0).to.equal(50);
|
431
|
+
expect(splitter.classList.contains("is-collapsed-start")).to.be.false;
|
432
|
+
expect(getComputedStyle(splitter).cursor).to.equal("ns-resize");
|
433
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
434
|
+
clientY: -10
|
435
|
+
}));
|
436
|
+
await elementUpdated(el);
|
437
|
+
expect(el.splitterPos || 0).to.equal(0);
|
438
|
+
expect(splitter.classList.contains("is-collapsed-start")).to.be.true;
|
439
|
+
expect(getComputedStyle(splitter).cursor).to.equal("s-resize");
|
440
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
441
|
+
clientY: splitTotalHeight - 40
|
442
|
+
}));
|
443
|
+
await elementUpdated(el);
|
444
|
+
expect(el.splitterPos || 0).to.equal(splitTotalHeight - 50);
|
445
|
+
expect(splitter.classList.contains("is-collapsed-end")).to.be.false;
|
446
|
+
expect(getComputedStyle(splitter).cursor).to.equal("ns-resize");
|
447
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
448
|
+
clientY: splitTotalHeight + 50
|
449
|
+
}));
|
450
|
+
await elementUpdated(el);
|
451
|
+
expect(el.splitterPos || 0).to.equal(splitTotalHeight - el.splitterSize);
|
452
|
+
splitter.dispatchEvent(new PointerEvent("pointerup"));
|
453
|
+
await elementUpdated(el);
|
454
|
+
expect(splitter.classList.contains("is-collapsed-end")).to.be.true;
|
455
|
+
expect(getComputedStyle(splitter).cursor).to.equal("n-resize");
|
456
|
+
});
|
457
|
+
it("handles focus and keyboard inputs and resizes accordingly for horizontal splitviews [ltr]", async () => {
|
458
|
+
const splitTotalWidth = 500;
|
459
|
+
const el = await fixture(html`
|
457
460
|
<sp-split-view
|
458
461
|
resizable
|
459
462
|
primary-min="50"
|
@@ -464,48 +467,48 @@ describe('SplitView', () => {
|
|
464
467
|
<div>Second panel</div>
|
465
468
|
</sp-split-view>
|
466
469
|
`);
|
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
|
-
|
492
|
-
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
506
|
-
|
507
|
-
|
508
|
-
|
470
|
+
await elementUpdated(el);
|
471
|
+
expect(el.resizable).to.be.true;
|
472
|
+
const pos = el.splitterPos || 0;
|
473
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
474
|
+
splitter.dispatchEvent(arrowLeftEvent());
|
475
|
+
await elementUpdated(el);
|
476
|
+
expect(el.splitterPos || 0).to.equal(pos - 10);
|
477
|
+
splitter.dispatchEvent(arrowRightEvent());
|
478
|
+
await elementUpdated(el);
|
479
|
+
expect(el.splitterPos || 0).to.equal(pos);
|
480
|
+
splitter.dispatchEvent(arrowUpEvent());
|
481
|
+
await elementUpdated(el);
|
482
|
+
expect(el.splitterPos || 0).to.equal(pos + 10);
|
483
|
+
splitter.dispatchEvent(arrowDownEvent());
|
484
|
+
await elementUpdated(el);
|
485
|
+
expect(el.splitterPos || 0).to.equal(pos);
|
486
|
+
splitter.dispatchEvent(pageUpEvent());
|
487
|
+
await elementUpdated(el);
|
488
|
+
expect(el.splitterPos || 0).to.equal(pos + 50);
|
489
|
+
splitter.dispatchEvent(pageDownEvent());
|
490
|
+
await elementUpdated(el);
|
491
|
+
expect(el.splitterPos || 0).to.equal(pos);
|
492
|
+
splitter.dispatchEvent(homeEvent());
|
493
|
+
await elementUpdated(el);
|
494
|
+
expect(el.splitterPos || 0).to.equal(50);
|
495
|
+
splitter.dispatchEvent(arrowLeftEvent());
|
496
|
+
await elementUpdated(el);
|
497
|
+
expect(el.splitterPos || 0).to.equal(50);
|
498
|
+
splitter.dispatchEvent(endEvent());
|
499
|
+
await elementUpdated(el);
|
500
|
+
expect(el.splitterPos || 0).to.equal(splitTotalWidth - 50);
|
501
|
+
splitter.dispatchEvent(arrowRightEvent());
|
502
|
+
await elementUpdated(el);
|
503
|
+
expect(el.splitterPos || 0).to.equal(splitTotalWidth - 50);
|
504
|
+
splitter.dispatchEvent(shiftTabEvent());
|
505
|
+
await elementUpdated(el);
|
506
|
+
const outsideFocused = document.activeElement;
|
507
|
+
expect(typeof outsideFocused).not.to.equal(splitter);
|
508
|
+
});
|
509
|
+
it("handles focus and keyboard inputs and resizes accordingly for horizontal splitviews [rtl]", async () => {
|
510
|
+
const splitTotalWidth = 500;
|
511
|
+
const el = await fixture(html`
|
509
512
|
<sp-split-view
|
510
513
|
resizable
|
511
514
|
style=${`height: 200px; width: ${splitTotalWidth}px;`}
|
@@ -515,42 +518,42 @@ describe('SplitView', () => {
|
|
515
518
|
<div>Second panel</div>
|
516
519
|
</sp-split-view>
|
517
520
|
`);
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
527
|
-
|
528
|
-
|
529
|
-
|
530
|
-
|
531
|
-
|
532
|
-
|
533
|
-
|
534
|
-
|
535
|
-
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
|
545
|
-
|
546
|
-
|
547
|
-
|
548
|
-
|
549
|
-
|
550
|
-
|
551
|
-
|
552
|
-
|
553
|
-
|
521
|
+
await elementUpdated(el);
|
522
|
+
expect(el.resizable).to.be.true;
|
523
|
+
const pos = el.splitterPos || 0;
|
524
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
525
|
+
splitter.dispatchEvent(arrowLeftEvent());
|
526
|
+
await elementUpdated(el);
|
527
|
+
expect(el.splitterPos || 0).to.equal(pos + 10);
|
528
|
+
splitter.dispatchEvent(arrowRightEvent());
|
529
|
+
await elementUpdated(el);
|
530
|
+
expect(el.splitterPos || 0).to.equal(pos);
|
531
|
+
splitter.dispatchEvent(arrowUpEvent());
|
532
|
+
await elementUpdated(el);
|
533
|
+
expect(el.splitterPos || 0).to.equal(pos + 10);
|
534
|
+
splitter.dispatchEvent(arrowDownEvent());
|
535
|
+
await elementUpdated(el);
|
536
|
+
expect(el.splitterPos || 0).to.equal(pos);
|
537
|
+
splitter.dispatchEvent(pageUpEvent());
|
538
|
+
await elementUpdated(el);
|
539
|
+
expect(el.splitterPos || 0).to.equal(pos + 50);
|
540
|
+
splitter.dispatchEvent(pageDownEvent());
|
541
|
+
await elementUpdated(el);
|
542
|
+
expect(el.splitterPos || 0).to.equal(pos);
|
543
|
+
splitter.dispatchEvent(homeEvent());
|
544
|
+
await elementUpdated(el);
|
545
|
+
expect(el.splitterPos || 0).to.equal(0);
|
546
|
+
splitter.dispatchEvent(endEvent());
|
547
|
+
await elementUpdated(el);
|
548
|
+
expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.splitterSize);
|
549
|
+
splitter.dispatchEvent(shiftTabEvent());
|
550
|
+
await elementUpdated(el);
|
551
|
+
const outsideFocused = document.activeElement;
|
552
|
+
expect(typeof outsideFocused).not.to.equal(splitter);
|
553
|
+
});
|
554
|
+
it("handles keyboard inputs and resizes accordingly for [vertical] splitviews", async () => {
|
555
|
+
const splitTotalHeight = 500;
|
556
|
+
const el = await fixture(html`
|
554
557
|
<sp-split-view
|
555
558
|
vertical
|
556
559
|
resizable
|
@@ -560,42 +563,42 @@ describe('SplitView', () => {
|
|
560
563
|
<div>Second panel</div>
|
561
564
|
</sp-split-view>
|
562
565
|
`);
|
563
|
-
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
566
|
+
await elementUpdated(el);
|
567
|
+
expect(el.resizable).to.be.true;
|
568
|
+
const pos = el.splitterPos || 0;
|
569
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
570
|
+
splitter.dispatchEvent(arrowLeftEvent());
|
571
|
+
await elementUpdated(el);
|
572
|
+
expect(el.splitterPos || 0).to.equal(pos - 10);
|
573
|
+
splitter.dispatchEvent(arrowRightEvent());
|
574
|
+
await elementUpdated(el);
|
575
|
+
expect(el.splitterPos || 0).to.equal(pos);
|
576
|
+
splitter.dispatchEvent(arrowUpEvent());
|
577
|
+
await elementUpdated(el);
|
578
|
+
expect(el.splitterPos || 0).to.equal(pos - 10);
|
579
|
+
splitter.dispatchEvent(arrowDownEvent());
|
580
|
+
await elementUpdated(el);
|
581
|
+
expect(el.splitterPos || 0).to.equal(pos);
|
582
|
+
splitter.dispatchEvent(pageUpEvent());
|
583
|
+
await elementUpdated(el);
|
584
|
+
expect(el.splitterPos || 0).to.equal(pos - 50);
|
585
|
+
splitter.dispatchEvent(pageDownEvent());
|
586
|
+
await elementUpdated(el);
|
587
|
+
expect(el.splitterPos || 0).to.equal(pos);
|
588
|
+
splitter.dispatchEvent(homeEvent());
|
589
|
+
await elementUpdated(el);
|
590
|
+
expect(el.splitterPos || 0).to.equal(0);
|
591
|
+
splitter.dispatchEvent(endEvent());
|
592
|
+
await elementUpdated(el);
|
593
|
+
expect(el.splitterPos || 0).to.equal(splitTotalHeight - el.splitterSize);
|
594
|
+
splitter.dispatchEvent(shiftTabEvent());
|
595
|
+
await elementUpdated(el);
|
596
|
+
const outsideFocused = document.activeElement;
|
597
|
+
expect(typeof outsideFocused).not.to.equal(splitter);
|
598
|
+
});
|
599
|
+
it("handles focus and keyboard inputs and resizes accordingly for collapsible horizontal splitviews", async () => {
|
600
|
+
const splitTotalWidth = 500;
|
601
|
+
const el = await fixture(html`
|
599
602
|
<sp-split-view
|
600
603
|
resizable
|
601
604
|
collapsible
|
@@ -607,114 +610,109 @@ describe('SplitView', () => {
|
|
607
610
|
<div>Second panel</div>
|
608
611
|
</sp-split-view>
|
609
612
|
`);
|
610
|
-
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
613
|
+
await elementUpdated(el);
|
614
|
+
expect(el.resizable).to.be.true;
|
615
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
616
|
+
splitter.dispatchEvent(homeEvent());
|
617
|
+
await elementUpdated(el);
|
618
|
+
expect(el.splitterPos || 0).to.equal(0);
|
619
|
+
splitter.dispatchEvent(endEvent());
|
620
|
+
await elementUpdated(el);
|
621
|
+
expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.splitterSize);
|
622
|
+
});
|
623
|
+
it("does not resize when not resizable", async () => {
|
624
|
+
const el = await fixture(html`
|
622
625
|
<sp-split-view>
|
623
626
|
<div>First panel</div>
|
624
627
|
<div>Second panel</div>
|
625
628
|
</sp-split-view>
|
626
629
|
`);
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
637
|
-
|
638
|
-
|
639
|
-
});
|
640
|
-
it('renders no splitter if only one panel is provided', async () => {
|
641
|
-
const el = await fixture(html `
|
630
|
+
await elementUpdated(el);
|
631
|
+
expect(el.resizable).to.be.false;
|
632
|
+
const pos = el.splitterPos || 0;
|
633
|
+
const splitter = el.shadowRoot ? el.shadowRoot.querySelector("#splitter") : el;
|
634
|
+
splitter.dispatchEvent(new PointerEvent("pointerdown"));
|
635
|
+
await elementUpdated(el);
|
636
|
+
splitter.dispatchEvent(arrowLeftEvent());
|
637
|
+
await elementUpdated(el);
|
638
|
+
expect(el.splitterPos || 0).to.equal(pos);
|
639
|
+
});
|
640
|
+
it("renders no splitter if only one panel is provided", async () => {
|
641
|
+
const el = await fixture(html`
|
642
642
|
<sp-split-view style="width: 400px">
|
643
643
|
<div id="primary" style="width: 200px">First panel</div>
|
644
644
|
</sp-split-view>
|
645
645
|
`);
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
646
|
+
await elementUpdated(el);
|
647
|
+
expect(el.resizable).to.be.false;
|
648
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
649
|
+
expect(splitter).to.be.null;
|
650
|
+
const slot = el.shadowRoot.querySelector("slot");
|
651
|
+
expect(slot).to.exist;
|
652
|
+
expect(slot.assignedElements().length).to.equal(1);
|
653
|
+
const elPrim = slot.assignedElements()[0];
|
654
|
+
expect(getComputedStyle(elPrim).width).to.equal("200px");
|
655
|
+
});
|
656
|
+
it("renders only 2 out of 3 panels", async () => {
|
657
|
+
const el = await fixture(html`
|
658
658
|
<sp-split-view>
|
659
659
|
<div>First panel</div>
|
660
660
|
<div>Second panel</div>
|
661
661
|
<div id="testPanel">Third (invisible) panel</div>
|
662
662
|
</sp-split-view>
|
663
663
|
`);
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
|
664
|
+
await elementUpdated(el);
|
665
|
+
const testPanel = el.shadowRoot.querySelector("#testPanel");
|
666
|
+
expect(testPanel).to.be.null;
|
667
|
+
});
|
668
|
+
it("keeps the splitter pos when removing and re-adding a panel", async () => {
|
669
|
+
var _a, _b;
|
670
|
+
let pointerId = -1;
|
671
|
+
const el = await fixture(html`
|
672
672
|
<sp-split-view resizable style="width: 400px">
|
673
673
|
<div id="primary">First panel</div>
|
674
674
|
<div id="secondary">Second panel</div>
|
675
675
|
</sp-split-view>
|
676
676
|
`);
|
677
|
-
|
678
|
-
|
679
|
-
|
680
|
-
|
681
|
-
|
682
|
-
|
683
|
-
|
684
|
-
|
685
|
-
|
686
|
-
|
687
|
-
|
688
|
-
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
const changeSpy = spy();
|
717
|
-
const el = await fixture(html `
|
677
|
+
await elementUpdated(el);
|
678
|
+
expect(el.resizable).to.be.true;
|
679
|
+
let splitter = el.shadowRoot.querySelector("#splitter");
|
680
|
+
splitter.setPointerCapture = (id) => pointerId = id;
|
681
|
+
splitter.releasePointerCapture = (id) => pointerId = id;
|
682
|
+
let pos = el.splitterPos || 0;
|
683
|
+
expect(pos).to.equal(200);
|
684
|
+
splitter.dispatchEvent(new PointerEvent("pointerdown", { pointerId: 1 }));
|
685
|
+
await elementUpdated(el);
|
686
|
+
expect(pointerId).to.equal(1);
|
687
|
+
pos -= 10;
|
688
|
+
splitter.dispatchEvent(new PointerEvent("pointermove", {
|
689
|
+
clientX: pos
|
690
|
+
}));
|
691
|
+
await elementUpdated(el);
|
692
|
+
expect(Math.round(el.splitterPos || 0)).to.equal(pos - el.getBoundingClientRect().left);
|
693
|
+
const secPanel = (_a = el.lastElementChild) == null ? void 0 : _a.cloneNode(true);
|
694
|
+
expect(secPanel).not.to.be.null;
|
695
|
+
(_b = el.lastElementChild) == null ? void 0 : _b.remove();
|
696
|
+
await elementUpdated(el);
|
697
|
+
let slot = el.shadowRoot.querySelector("slot");
|
698
|
+
expect(slot).to.exist;
|
699
|
+
expect(slot.assignedElements().length).to.equal(1);
|
700
|
+
splitter = el.shadowRoot.querySelector("#splitter");
|
701
|
+
expect(splitter).to.be.null;
|
702
|
+
if (secPanel) {
|
703
|
+
el.appendChild(secPanel);
|
704
|
+
await elementUpdated(el);
|
705
|
+
expect(Math.round(el.splitterPos || 0)).to.equal(pos - el.getBoundingClientRect().left);
|
706
|
+
slot = el.shadowRoot.querySelector("slot");
|
707
|
+
expect(slot).to.exist;
|
708
|
+
expect(slot.assignedElements().length).to.equal(2);
|
709
|
+
splitter = el.shadowRoot.querySelector("#splitter");
|
710
|
+
await expect(splitter).to.be.accessible();
|
711
|
+
}
|
712
|
+
});
|
713
|
+
it("announces when splitterPos moves", async () => {
|
714
|
+
const changeSpy = spy();
|
715
|
+
const el = await fixture(html`
|
718
716
|
<sp-split-view
|
719
717
|
resizable
|
720
718
|
style=${`height: 200px; width: 500px;`}
|
@@ -723,18 +721,18 @@ describe('SplitView', () => {
|
|
723
721
|
<div>Second panel</div>
|
724
722
|
</sp-split-view>
|
725
723
|
`);
|
726
|
-
|
727
|
-
|
728
|
-
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
724
|
+
el.addEventListener("change", changeSpy);
|
725
|
+
await elementUpdated(el);
|
726
|
+
expect(el.resizable).to.be.true;
|
727
|
+
const pos = el.splitterPos || 0;
|
728
|
+
const splitter = el.shadowRoot.querySelector("#splitter");
|
729
|
+
splitter.dispatchEvent(arrowLeftEvent());
|
730
|
+
await elementUpdated(el);
|
731
|
+
expect(el.splitterPos || 0).to.equal(pos - 10);
|
732
|
+
expect(changeSpy.callCount).to.equal(1);
|
733
|
+
});
|
734
|
+
it("resizes when primarySize changes", async () => {
|
735
|
+
const el = await fixture(html`
|
738
736
|
<sp-split-view
|
739
737
|
resizable
|
740
738
|
primary-size="100"
|
@@ -744,11 +742,11 @@ describe('SplitView', () => {
|
|
744
742
|
<div>Second panel</div>
|
745
743
|
</sp-split-view>
|
746
744
|
`);
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
745
|
+
await elementUpdated(el);
|
746
|
+
expect(el.splitterPos || 0).to.equal(100);
|
747
|
+
el.primarySize = "300";
|
748
|
+
await elementUpdated(el);
|
749
|
+
expect(el.splitterPos || 0).to.equal(300);
|
750
|
+
});
|
753
751
|
});
|
754
|
-
//# sourceMappingURL=split-view.test.js.map
|
752
|
+
//# sourceMappingURL=split-view.test.js.map
|