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