@spectrum-web-components/split-view 0.31.1-react.3 → 0.32.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,13 +4,22 @@
4
4
  "modules": [
5
5
  {
6
6
  "kind": "javascript-module",
7
- "path": "sp-split-view.ts",
7
+ "path": "sp-split-view.js",
8
8
  "declarations": [],
9
- "exports": []
9
+ "exports": [
10
+ {
11
+ "kind": "custom-element-definition",
12
+ "name": "sp-split-view",
13
+ "declaration": {
14
+ "name": "SplitView",
15
+ "module": "/src/SplitView.js"
16
+ }
17
+ }
18
+ ]
10
19
  },
11
20
  {
12
21
  "kind": "javascript-module",
13
- "path": "src/SplitView.ts",
22
+ "path": "src/SplitView.js",
14
23
  "declarations": [
15
24
  {
16
25
  "kind": "class",
@@ -232,7 +241,8 @@
232
241
  "type": {
233
242
  "text": "number"
234
243
  },
235
- "privacy": "private"
244
+ "privacy": "private",
245
+ "readonly": true
236
246
  },
237
247
  {
238
248
  "kind": "method",
@@ -567,7 +577,7 @@
567
577
  "name": "SplitView",
568
578
  "declaration": {
569
579
  "name": "SplitView",
570
- "module": "src/SplitView.ts"
580
+ "module": "src/SplitView.js"
571
581
  }
572
582
  }
573
583
  ]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/split-view",
3
- "version": "0.31.1-react.3+886f51591",
3
+ "version": "0.32.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -61,10 +61,10 @@
61
61
  "lit-html"
62
62
  ],
63
63
  "dependencies": {
64
- "@spectrum-web-components/base": "^0.31.1-react.3+886f51591"
64
+ "@spectrum-web-components/base": "^0.32.0"
65
65
  },
66
66
  "devDependencies": {
67
- "@spectrum-css/splitview": "^3.0.38"
67
+ "@spectrum-css/splitview": "^3.0.40"
68
68
  },
69
69
  "types": "./src/index.d.ts",
70
70
  "customElements": "custom-elements.json",
@@ -72,5 +72,5 @@
72
72
  "./sp-*.js",
73
73
  "./**/*.dev.js"
74
74
  ],
75
- "gitHead": "886f515919ca0e8a1cec52a00babb1d4a195ae01"
75
+ "gitHead": "c5f67662ac54d0e37debaf7cbd7c2df60e8b294e"
76
76
  }
@@ -1,5 +1,11 @@
1
1
  "use strict";
2
- import { elementUpdated, expect, fixture, html } from "@open-wc/testing";
2
+ import {
3
+ elementUpdated,
4
+ expect,
5
+ fixture,
6
+ html,
7
+ nextFrame
8
+ } from "@open-wc/testing";
3
9
  import "@spectrum-web-components/split-view/sp-split-view.js";
4
10
  import {
5
11
  arrowDownEvent,
@@ -194,6 +200,7 @@ describe("SplitView", () => {
194
200
  })
195
201
  );
196
202
  await elementUpdated(el);
203
+ await nextFrame();
197
204
  expect(Math.round(el.splitterPos)).to.equal(
198
205
  pos - el.getBoundingClientRect().left
199
206
  );
@@ -203,6 +210,7 @@ describe("SplitView", () => {
203
210
  })
204
211
  );
205
212
  await elementUpdated(el);
213
+ await nextFrame();
206
214
  expect(el.splitterPos).to.equal(el.primaryMin);
207
215
  expect(getComputedStyle(splitter).cursor).to.equal("e-resize");
208
216
  splitter.dispatchEvent(
@@ -267,6 +275,7 @@ describe("SplitView", () => {
267
275
  })
268
276
  );
269
277
  await elementUpdated(el);
278
+ await nextFrame();
270
279
  expect(Math.round(el.splitterPos || 0)).to.equal(
271
280
  el.getBoundingClientRect().right - pos
272
281
  );
@@ -276,6 +285,7 @@ describe("SplitView", () => {
276
285
  })
277
286
  );
278
287
  await elementUpdated(el);
288
+ await nextFrame();
279
289
  expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.secondaryMin);
280
290
  expect(getComputedStyle(splitter).cursor).to.equal("e-resize");
281
291
  splitter.dispatchEvent(
@@ -480,6 +490,7 @@ describe("SplitView", () => {
480
490
  })
481
491
  );
482
492
  await elementUpdated(el);
493
+ await nextFrame();
483
494
  expect(el.splitterPos || 0).to.equal(50);
484
495
  expect(splitter.classList.contains("is-collapsed-start")).to.be.false;
485
496
  expect(getComputedStyle(splitter).cursor).to.equal("ew-resize");
@@ -489,6 +500,7 @@ describe("SplitView", () => {
489
500
  })
490
501
  );
491
502
  await elementUpdated(el);
503
+ await nextFrame();
492
504
  expect(el.splitterPos || 0).to.equal(0);
493
505
  expect(splitter.classList.contains("is-collapsed-start")).to.be.true;
494
506
  expect(getComputedStyle(splitter).cursor).to.equal("e-resize");
@@ -498,6 +510,7 @@ describe("SplitView", () => {
498
510
  })
499
511
  );
500
512
  await elementUpdated(el);
513
+ await nextFrame();
501
514
  expect(el.splitterPos || 0).to.equal(350);
502
515
  expect(splitter.classList.contains("is-collapsed-end")).to.be.false;
503
516
  expect(getComputedStyle(splitter).cursor).to.equal("ew-resize");
@@ -548,6 +561,7 @@ describe("SplitView", () => {
548
561
  })
549
562
  );
550
563
  await elementUpdated(el);
564
+ await nextFrame();
551
565
  expect(el.splitterPos || 0).to.equal(50);
552
566
  expect(splitter.classList.contains("is-collapsed-start")).to.be.false;
553
567
  expect(getComputedStyle(splitter).cursor).to.equal("ns-resize");
@@ -557,6 +571,7 @@ describe("SplitView", () => {
557
571
  })
558
572
  );
559
573
  await elementUpdated(el);
574
+ await nextFrame();
560
575
  expect(el.splitterPos || 0).to.equal(0);
561
576
  expect(splitter.classList.contains("is-collapsed-start")).to.be.true;
562
577
  expect(getComputedStyle(splitter).cursor).to.equal("s-resize");
@@ -566,6 +581,7 @@ describe("SplitView", () => {
566
581
  })
567
582
  );
568
583
  await elementUpdated(el);
584
+ await nextFrame();
569
585
  expect(el.splitterPos || 0).to.equal(splitTotalHeight - 50);
570
586
  expect(splitter.classList.contains("is-collapsed-end")).to.be.false;
571
587
  expect(getComputedStyle(splitter).cursor).to.equal("ns-resize");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["split-view.test.ts"],
4
- "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport { elementUpdated, expect, fixture, html } from '@open-wc/testing';\n\nimport '@spectrum-web-components/split-view/sp-split-view.js';\nimport { SplitView } from '@spectrum-web-components/split-view';\nimport {\n arrowDownEvent,\n arrowLeftEvent,\n arrowRightEvent,\n arrowUpEvent,\n endEvent,\n homeEvent,\n pageDownEvent,\n pageUpEvent,\n shiftTabEvent,\n testForLitDevWarnings,\n} from '../../../test/testing-helpers.js';\nimport { spy } from 'sinon';\n\ndescribe('SplitView', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<SplitView>(\n html`\n <sp-split-view primary-size=\"100\">\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n )\n );\n it('loads default (horizontal) split-view accessibly', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view primary-size=\"100\">\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n await expect(el).to.be.accessible();\n expect(el.splitterPos || 0).to.equal(100);\n expect(el.resizable).to.be.false;\n expect(el.collapsible).to.be.false;\n const gripper = el.shadowRoot.querySelector(\n '#gripper'\n ) as HTMLDivElement;\n expect(gripper).to.be.null;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n expect(getComputedStyle(splitter).cursor).to.equal('auto');\n });\n\n it('loads horizontal [resizable] split-view accessibly', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view resizable primary-size=\"100px\">\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n await expect(el).to.be.accessible();\n expect(el.splitterPos || 0).to.equal(100);\n\n const gripper = el.shadowRoot.querySelector(\n '#gripper'\n ) as HTMLDivElement;\n await expect(gripper).to.be.accessible();\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n expect(getComputedStyle(splitter).cursor).to.equal('ew-resize');\n });\n\n it('loads [vertical] split-view accessibly', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n vertical\n primary-size=\"75%\"\n style=\"height: 400px\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n await expect(el).to.be.accessible();\n expect(el.splitterPos || 0).to.equal(300);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n expect(getComputedStyle(splitter).cursor).to.equal('auto');\n });\n\n it('loads [vertical] [resizable] split-view accessibly', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view vertical resizable style=\"height: 400px\">\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n await expect(el).to.be.accessible();\n expect(el.splitterPos || 0).to.equal(200);\n\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n expect(getComputedStyle(splitter).cursor).to.equal('ns-resize');\n });\n\n it('set all panel values', async () => {\n const splitTotalWidth = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-min=\"50\"\n primary-max=\"300\"\n secondary-min=\"50\"\n style=${`height: 500px; width: ${splitTotalWidth}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n expect(el.primaryMin).to.equal(50);\n expect(el.primaryMax).to.equal(300);\n expect(el.secondaryMin).to.equal(50);\n expect(el.secondaryMax).to.equal(3840);\n });\n\n it('use auto height in primary pane', async () => {\n const splitTotalWidth = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-size=\"auto\"\n style=${`height: 500px; width: ${splitTotalWidth}px;`}\n >\n <div>\n First panel Lorem Ipsum is simply dummy text of the\n printing and typesetting industry. Lorem Ipsum has been\n the industry's standard dummy text ever since the 1500s,\n when an unknown printer took a galley of type and\n scrambled it to make a type specimen book. It has\n survived not only five centuries, but also the leap into\n electronic typesetting, remaining essentially unchanged.\n </div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n expect(el.primarySize).to.equal('auto');\n expect(el.splitterPos || 0).to.equal(398);\n });\n\n it('resizes when pointer moves and resizable is enabled [ltr]', async () => {\n let pointerId = -1;\n const splitTotalWidth = 400;\n const el = await fixture<\n SplitView & {\n splitterPos: number;\n }\n >(\n html`\n <sp-split-view\n resizable\n primary-min=\"50\"\n secondary-min=\"50\"\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n let pos = el.splitterPos;\n expect(el.splitterPos).to.equal(200);\n\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n pos -= 10;\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: pos,\n })\n );\n await elementUpdated(el);\n expect(Math.round(el.splitterPos)).to.equal(\n pos - el.getBoundingClientRect().left\n );\n\n // don't collapse to start\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos).to.equal(el.primaryMin);\n expect(getComputedStyle(splitter).cursor).to.equal('e-resize');\n\n // don't collapse to end\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: splitTotalWidth,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos, '350 first time').to.equal(\n splitTotalWidth - el.secondaryMin\n );\n expect(getComputedStyle(splitter).cursor).to.equal('w-resize');\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n // don't change anything when triggering mouseevent with right button click\n splitter.dispatchEvent(\n new MouseEvent('pointerdown', { button: 2, cancelable: true })\n );\n await elementUpdated(el);\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n })\n );\n expect(el.splitterPos, '350 second time, because right click').to.equal(\n splitTotalWidth - el.secondaryMin\n );\n });\n\n it('resizes when pointer moves and resizable is enabled [rtl]', async () => {\n let pointerId = -1;\n const splitTotalWidth = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-min=\"50\"\n secondary-min=\"40\"\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n dir=\"rtl\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n\n let pos = el.splitterPos || 0;\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n pos = el.getBoundingClientRect().right - 100;\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: pos,\n })\n );\n await elementUpdated(el);\n expect(Math.round(el.splitterPos || 0)).to.equal(\n el.getBoundingClientRect().right - pos\n );\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.secondaryMin);\n expect(getComputedStyle(splitter).cursor).to.equal('e-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: el.getBoundingClientRect().right,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(el.primaryMin);\n expect(getComputedStyle(splitter).cursor).to.equal('w-resize');\n });\n\n it('resizes to start pos when pointer moves in horizontal splitview', async () => {\n let pointerId = -1;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n secondary-min=\"50\"\n style=\"height: 200px; width: 400px;\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: -10,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-start')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('e-resize');\n });\n\n it('resizes to end pos when pointer moves in horizontal splitview', async () => {\n let pointerId = -1;\n const splitTotalWidth = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-min=\"50\"\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n expect(el.primaryMin).to.equal(50);\n expect(el.resizable).to.be.true;\n\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: splitTotalWidth + 10,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.splitterSize);\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('w-resize');\n });\n\n it('resizes to start pos when pointer moves in [vertical] splitview', async () => {\n let pointerId = -1;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n vertical\n resizable\n primary-min=\"0\"\n secondary-min=\"50\"\n style=\"height: 400px; width: 200px;\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: 0,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-start')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('s-resize');\n });\n\n it('resizes to end pos when pointer moves in [vertical] splitview', async () => {\n let pointerId = -1;\n const splitTotalHeight = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n vertical\n resizable\n primary-min=\"50\"\n style=${`height: ${splitTotalHeight}px; width: 200px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n expect(el.primaryMin).to.equal(50);\n expect(el.resizable).to.be.true;\n\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: splitTotalHeight + 10,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(\n splitTotalHeight - el.splitterSize\n );\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('n-resize');\n });\n\n it('resizes and collapses when pointer moves in horizontal splitview', async () => {\n let pointerId = -1;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n collapsible\n primary-min=\"50\"\n secondary-min=\"50\"\n style=\"height: 200px; width: 400px;\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.collapsible).to.be.true;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 40,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(50);\n expect(splitter.classList.contains('is-collapsed-start')).to.be.false;\n expect(getComputedStyle(splitter).cursor).to.equal('ew-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: -10,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n expect(splitter.classList.contains('is-collapsed-start')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('e-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: el.getBoundingClientRect().right - 10,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(350);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.false;\n expect(getComputedStyle(splitter).cursor).to.equal('ew-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: el.getBoundingClientRect().right,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(400 - el.splitterSize);\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('w-resize');\n });\n\n it('resizes and collapses when pointer moves in [vertical] splitview', async () => {\n let pointerId = -1;\n const splitTotalHeight = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n vertical\n resizable\n collapsible\n primary-min=\"50\"\n secondary-min=\"50\"\n style=${`height: ${splitTotalHeight}px; width: 200px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: 40,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(50);\n expect(splitter.classList.contains('is-collapsed-start')).to.be.false;\n expect(getComputedStyle(splitter).cursor).to.equal('ns-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: -10,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n expect(splitter.classList.contains('is-collapsed-start')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('s-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: splitTotalHeight - 40,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalHeight - 50);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.false;\n expect(getComputedStyle(splitter).cursor).to.equal('ns-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: splitTotalHeight + 50,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(\n splitTotalHeight - el.splitterSize\n );\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('n-resize');\n });\n\n it('handles focus and keyboard inputs and resizes accordingly for horizontal splitviews [ltr]', async () => {\n const splitTotalWidth = 500;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-min=\"50\"\n secondary-min=\"50\"\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n\n const pos = el.splitterPos || 0;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos - 10);\n\n splitter.dispatchEvent(arrowRightEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos + 10);\n\n splitter.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(pageUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos + 50);\n\n splitter.dispatchEvent(pageDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(homeEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(50);\n\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(50);\n\n splitter.dispatchEvent(endEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - 50);\n\n splitter.dispatchEvent(arrowRightEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - 50);\n\n splitter.dispatchEvent(shiftTabEvent());\n await elementUpdated(el);\n const outsideFocused = document.activeElement as HTMLElement;\n expect(typeof outsideFocused).not.to.equal(splitter);\n });\n\n it('handles focus and keyboard inputs and resizes accordingly for horizontal splitviews [rtl]', async () => {\n const splitTotalWidth = 500;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n dir=\"rtl\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n\n const pos = el.splitterPos || 0;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos + 10);\n\n splitter.dispatchEvent(arrowRightEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos + 10);\n\n splitter.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(pageUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos + 50);\n\n splitter.dispatchEvent(pageDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(homeEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n splitter.dispatchEvent(endEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.splitterSize);\n\n splitter.dispatchEvent(shiftTabEvent());\n await elementUpdated(el);\n const outsideFocused = document.activeElement as HTMLElement;\n expect(typeof outsideFocused).not.to.equal(splitter);\n });\n\n it('handles keyboard inputs and resizes accordingly for [vertical] splitviews', async () => {\n const splitTotalHeight = 500;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n vertical\n resizable\n style=${`width: 200px; height: ${splitTotalHeight}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n\n const pos = el.splitterPos || 0;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos - 10);\n\n splitter.dispatchEvent(arrowRightEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos - 10);\n\n splitter.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(pageUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos - 50);\n\n splitter.dispatchEvent(pageDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(homeEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n splitter.dispatchEvent(endEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(\n splitTotalHeight - el.splitterSize\n );\n\n splitter.dispatchEvent(shiftTabEvent());\n await elementUpdated(el);\n const outsideFocused = document.activeElement as HTMLElement;\n expect(typeof outsideFocused).not.to.equal(splitter);\n });\n\n it('handles focus and keyboard inputs and resizes accordingly for collapsible horizontal splitviews', async () => {\n const splitTotalWidth = 500;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n collapsible\n primary-min=\"50\"\n secondary-min=\"50\"\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n\n splitter.dispatchEvent(homeEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n splitter.dispatchEvent(endEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.splitterSize);\n });\n\n it('does not resize when not resizable', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view>\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n expect(el.resizable).to.be.false;\n\n const pos = el.splitterPos || 0;\n const splitter = el.shadowRoot\n ? (el.shadowRoot.querySelector('#splitter') as HTMLDivElement)\n : (el as SplitView);\n splitter.dispatchEvent(new PointerEvent('pointerdown'));\n await elementUpdated(el);\n //Send keyboard events to resize\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n });\n\n it('renders no splitter if only one panel is provided', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view style=\"width: 400px\">\n <div id=\"primary\" style=\"width: 200px\">First panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.false;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n expect(splitter).to.be.null;\n\n const slot = el.shadowRoot.querySelector('slot') as HTMLSlotElement;\n expect(slot).to.exist;\n\n expect(slot.assignedElements().length).to.equal(1);\n\n const elPrim = slot.assignedElements()[0] as HTMLDivElement;\n expect(getComputedStyle(elPrim).width).to.equal('200px');\n });\n\n it('renders only 2 out of 3 panels', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view>\n <div>First panel</div>\n <div>Second panel</div>\n <div id=\"testPanel\">Third (invisible) panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n const testPanel = el.shadowRoot.querySelector(\n '#testPanel'\n ) as HTMLDivElement;\n expect(testPanel).to.be.null;\n });\n\n it('keeps the splitter pos when removing and re-adding a panel', async () => {\n let pointerId = -1;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view resizable style=\"width: 400px\">\n <div id=\"primary\">First panel</div>\n <div id=\"secondary\">Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n let splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n let pos = el.splitterPos || 0;\n expect(pos).to.equal(200);\n\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n pos -= 10;\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: pos,\n })\n );\n await elementUpdated(el);\n expect(Math.round(el.splitterPos || 0)).to.equal(\n pos - el.getBoundingClientRect().left\n );\n\n // Remove second panel\n const secPanel = el.lastElementChild?.cloneNode(true);\n expect(secPanel).not.to.be.null;\n\n el.lastElementChild?.remove();\n await elementUpdated(el);\n let slot = el.shadowRoot.querySelector('slot') as HTMLSlotElement;\n expect(slot).to.exist;\n expect(slot.assignedElements().length).to.equal(1);\n\n splitter = el.shadowRoot.querySelector('#splitter') as HTMLDivElement;\n expect(splitter).to.be.null;\n\n if (secPanel) {\n // Re-add second panel\n el.appendChild(secPanel);\n await elementUpdated(el);\n expect(Math.round(el.splitterPos || 0)).to.equal(\n pos - el.getBoundingClientRect().left\n );\n slot = el.shadowRoot.querySelector('slot') as HTMLSlotElement;\n expect(slot).to.exist;\n\n expect(slot.assignedElements().length).to.equal(2);\n\n splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n await expect(splitter).to.be.accessible();\n }\n });\n\n it('announces when splitterPos moves', async () => {\n const changeSpy = spy();\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n style=${`height: 200px; width: 500px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n el.addEventListener('change', changeSpy);\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n\n const pos = el.splitterPos || 0;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos - 10);\n expect(changeSpy.callCount).to.equal(1);\n });\n\n it('resizes when primarySize changes', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-size=\"100\"\n style=${`height: 200px; width: 500px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(100);\n el.primarySize = '300';\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(300);\n });\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n} from '@open-wc/testing';\n\nimport '@spectrum-web-components/split-view/sp-split-view.js';\nimport { SplitView } from '@spectrum-web-components/split-view';\nimport {\n arrowDownEvent,\n arrowLeftEvent,\n arrowRightEvent,\n arrowUpEvent,\n endEvent,\n homeEvent,\n pageDownEvent,\n pageUpEvent,\n shiftTabEvent,\n testForLitDevWarnings,\n} from '../../../test/testing-helpers.js';\nimport { spy } from 'sinon';\n\ndescribe('SplitView', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<SplitView>(\n html`\n <sp-split-view primary-size=\"100\">\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n )\n );\n it('loads default (horizontal) split-view accessibly', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view primary-size=\"100\">\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n await expect(el).to.be.accessible();\n expect(el.splitterPos || 0).to.equal(100);\n expect(el.resizable).to.be.false;\n expect(el.collapsible).to.be.false;\n const gripper = el.shadowRoot.querySelector(\n '#gripper'\n ) as HTMLDivElement;\n expect(gripper).to.be.null;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n expect(getComputedStyle(splitter).cursor).to.equal('auto');\n });\n\n it('loads horizontal [resizable] split-view accessibly', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view resizable primary-size=\"100px\">\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n await expect(el).to.be.accessible();\n expect(el.splitterPos || 0).to.equal(100);\n\n const gripper = el.shadowRoot.querySelector(\n '#gripper'\n ) as HTMLDivElement;\n await expect(gripper).to.be.accessible();\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n expect(getComputedStyle(splitter).cursor).to.equal('ew-resize');\n });\n\n it('loads [vertical] split-view accessibly', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n vertical\n primary-size=\"75%\"\n style=\"height: 400px\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n await expect(el).to.be.accessible();\n expect(el.splitterPos || 0).to.equal(300);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n expect(getComputedStyle(splitter).cursor).to.equal('auto');\n });\n\n it('loads [vertical] [resizable] split-view accessibly', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view vertical resizable style=\"height: 400px\">\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n await expect(el).to.be.accessible();\n expect(el.splitterPos || 0).to.equal(200);\n\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n expect(getComputedStyle(splitter).cursor).to.equal('ns-resize');\n });\n\n it('set all panel values', async () => {\n const splitTotalWidth = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-min=\"50\"\n primary-max=\"300\"\n secondary-min=\"50\"\n style=${`height: 500px; width: ${splitTotalWidth}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n expect(el.primaryMin).to.equal(50);\n expect(el.primaryMax).to.equal(300);\n expect(el.secondaryMin).to.equal(50);\n expect(el.secondaryMax).to.equal(3840);\n });\n\n it('use auto height in primary pane', async () => {\n const splitTotalWidth = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-size=\"auto\"\n style=${`height: 500px; width: ${splitTotalWidth}px;`}\n >\n <div>\n First panel Lorem Ipsum is simply dummy text of the\n printing and typesetting industry. Lorem Ipsum has been\n the industry's standard dummy text ever since the 1500s,\n when an unknown printer took a galley of type and\n scrambled it to make a type specimen book. It has\n survived not only five centuries, but also the leap into\n electronic typesetting, remaining essentially unchanged.\n </div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n expect(el.primarySize).to.equal('auto');\n expect(el.splitterPos || 0).to.equal(398);\n });\n\n it('resizes when pointer moves and resizable is enabled [ltr]', async () => {\n let pointerId = -1;\n const splitTotalWidth = 400;\n const el = await fixture<\n SplitView & {\n splitterPos: number;\n }\n >(\n html`\n <sp-split-view\n resizable\n primary-min=\"50\"\n secondary-min=\"50\"\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n let pos = el.splitterPos;\n expect(el.splitterPos).to.equal(200);\n\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n pos -= 10;\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: pos,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n expect(Math.round(el.splitterPos)).to.equal(\n pos - el.getBoundingClientRect().left\n );\n\n // don't collapse to start\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n expect(el.splitterPos).to.equal(el.primaryMin);\n expect(getComputedStyle(splitter).cursor).to.equal('e-resize');\n\n // don't collapse to end\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: splitTotalWidth,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos, '350 first time').to.equal(\n splitTotalWidth - el.secondaryMin\n );\n expect(getComputedStyle(splitter).cursor).to.equal('w-resize');\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n // don't change anything when triggering mouseevent with right button click\n splitter.dispatchEvent(\n new MouseEvent('pointerdown', { button: 2, cancelable: true })\n );\n await elementUpdated(el);\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n })\n );\n expect(el.splitterPos, '350 second time, because right click').to.equal(\n splitTotalWidth - el.secondaryMin\n );\n });\n\n it('resizes when pointer moves and resizable is enabled [rtl]', async () => {\n let pointerId = -1;\n const splitTotalWidth = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-min=\"50\"\n secondary-min=\"40\"\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n dir=\"rtl\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n\n let pos = el.splitterPos || 0;\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n pos = el.getBoundingClientRect().right - 100;\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: pos,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n expect(Math.round(el.splitterPos || 0)).to.equal(\n el.getBoundingClientRect().right - pos\n );\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 0,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.secondaryMin);\n expect(getComputedStyle(splitter).cursor).to.equal('e-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: el.getBoundingClientRect().right,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(el.primaryMin);\n expect(getComputedStyle(splitter).cursor).to.equal('w-resize');\n });\n\n it('resizes to start pos when pointer moves in horizontal splitview', async () => {\n let pointerId = -1;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n secondary-min=\"50\"\n style=\"height: 200px; width: 400px;\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: -10,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-start')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('e-resize');\n });\n\n it('resizes to end pos when pointer moves in horizontal splitview', async () => {\n let pointerId = -1;\n const splitTotalWidth = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-min=\"50\"\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n expect(el.primaryMin).to.equal(50);\n expect(el.resizable).to.be.true;\n\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: splitTotalWidth + 10,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.splitterSize);\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('w-resize');\n });\n\n it('resizes to start pos when pointer moves in [vertical] splitview', async () => {\n let pointerId = -1;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n vertical\n resizable\n primary-min=\"0\"\n secondary-min=\"50\"\n style=\"height: 400px; width: 200px;\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: 0,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-start')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('s-resize');\n });\n\n it('resizes to end pos when pointer moves in [vertical] splitview', async () => {\n let pointerId = -1;\n const splitTotalHeight = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n vertical\n resizable\n primary-min=\"50\"\n style=${`height: ${splitTotalHeight}px; width: 200px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n expect(el.primaryMin).to.equal(50);\n expect(el.resizable).to.be.true;\n\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: splitTotalHeight + 10,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(\n splitTotalHeight - el.splitterSize\n );\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('n-resize');\n });\n\n it('resizes and collapses when pointer moves in horizontal splitview', async () => {\n let pointerId = -1;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n collapsible\n primary-min=\"50\"\n secondary-min=\"50\"\n style=\"height: 200px; width: 400px;\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.collapsible).to.be.true;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: 40,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n expect(el.splitterPos || 0).to.equal(50);\n expect(splitter.classList.contains('is-collapsed-start')).to.be.false;\n expect(getComputedStyle(splitter).cursor).to.equal('ew-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: -10,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n expect(el.splitterPos || 0).to.equal(0);\n\n expect(splitter.classList.contains('is-collapsed-start')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('e-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: el.getBoundingClientRect().right - 10,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n expect(el.splitterPos || 0).to.equal(350);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.false;\n expect(getComputedStyle(splitter).cursor).to.equal('ew-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: el.getBoundingClientRect().right,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(400 - el.splitterSize);\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('w-resize');\n });\n\n it('resizes and collapses when pointer moves in [vertical] splitview', async () => {\n let pointerId = -1;\n const splitTotalHeight = 400;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n vertical\n resizable\n collapsible\n primary-min=\"50\"\n secondary-min=\"50\"\n style=${`height: ${splitTotalHeight}px; width: 200px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: 40,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n expect(el.splitterPos || 0).to.equal(50);\n expect(splitter.classList.contains('is-collapsed-start')).to.be.false;\n expect(getComputedStyle(splitter).cursor).to.equal('ns-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: -10,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n expect(el.splitterPos || 0).to.equal(0);\n\n expect(splitter.classList.contains('is-collapsed-start')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('s-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: splitTotalHeight - 40,\n })\n );\n await elementUpdated(el);\n await nextFrame();\n expect(el.splitterPos || 0).to.equal(splitTotalHeight - 50);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.false;\n expect(getComputedStyle(splitter).cursor).to.equal('ns-resize');\n\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientY: splitTotalHeight + 50,\n })\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(\n splitTotalHeight - el.splitterSize\n );\n\n splitter.dispatchEvent(new PointerEvent('pointerup'));\n await elementUpdated(el);\n expect(splitter.classList.contains('is-collapsed-end')).to.be.true;\n expect(getComputedStyle(splitter).cursor).to.equal('n-resize');\n });\n\n it('handles focus and keyboard inputs and resizes accordingly for horizontal splitviews [ltr]', async () => {\n const splitTotalWidth = 500;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-min=\"50\"\n secondary-min=\"50\"\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n\n const pos = el.splitterPos || 0;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos - 10);\n\n splitter.dispatchEvent(arrowRightEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos + 10);\n\n splitter.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(pageUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos + 50);\n\n splitter.dispatchEvent(pageDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(homeEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(50);\n\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(50);\n\n splitter.dispatchEvent(endEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - 50);\n\n splitter.dispatchEvent(arrowRightEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - 50);\n\n splitter.dispatchEvent(shiftTabEvent());\n await elementUpdated(el);\n const outsideFocused = document.activeElement as HTMLElement;\n expect(typeof outsideFocused).not.to.equal(splitter);\n });\n\n it('handles focus and keyboard inputs and resizes accordingly for horizontal splitviews [rtl]', async () => {\n const splitTotalWidth = 500;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n dir=\"rtl\"\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n\n const pos = el.splitterPos || 0;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos + 10);\n\n splitter.dispatchEvent(arrowRightEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos + 10);\n\n splitter.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(pageUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos + 50);\n\n splitter.dispatchEvent(pageDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(homeEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n splitter.dispatchEvent(endEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.splitterSize);\n\n splitter.dispatchEvent(shiftTabEvent());\n await elementUpdated(el);\n const outsideFocused = document.activeElement as HTMLElement;\n expect(typeof outsideFocused).not.to.equal(splitter);\n });\n\n it('handles keyboard inputs and resizes accordingly for [vertical] splitviews', async () => {\n const splitTotalHeight = 500;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n vertical\n resizable\n style=${`width: 200px; height: ${splitTotalHeight}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n\n const pos = el.splitterPos || 0;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos - 10);\n\n splitter.dispatchEvent(arrowRightEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(arrowUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos - 10);\n\n splitter.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(pageUpEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos - 50);\n\n splitter.dispatchEvent(pageDownEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n\n splitter.dispatchEvent(homeEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n splitter.dispatchEvent(endEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(\n splitTotalHeight - el.splitterSize\n );\n\n splitter.dispatchEvent(shiftTabEvent());\n await elementUpdated(el);\n const outsideFocused = document.activeElement as HTMLElement;\n expect(typeof outsideFocused).not.to.equal(splitter);\n });\n\n it('handles focus and keyboard inputs and resizes accordingly for collapsible horizontal splitviews', async () => {\n const splitTotalWidth = 500;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n collapsible\n primary-min=\"50\"\n secondary-min=\"50\"\n style=${`height: 200px; width: ${splitTotalWidth}px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n\n splitter.dispatchEvent(homeEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(0);\n\n splitter.dispatchEvent(endEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(splitTotalWidth - el.splitterSize);\n });\n\n it('does not resize when not resizable', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view>\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n expect(el.resizable).to.be.false;\n\n const pos = el.splitterPos || 0;\n const splitter = el.shadowRoot\n ? (el.shadowRoot.querySelector('#splitter') as HTMLDivElement)\n : (el as SplitView);\n splitter.dispatchEvent(new PointerEvent('pointerdown'));\n await elementUpdated(el);\n //Send keyboard events to resize\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos);\n });\n\n it('renders no splitter if only one panel is provided', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view style=\"width: 400px\">\n <div id=\"primary\" style=\"width: 200px\">First panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.false;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n expect(splitter).to.be.null;\n\n const slot = el.shadowRoot.querySelector('slot') as HTMLSlotElement;\n expect(slot).to.exist;\n\n expect(slot.assignedElements().length).to.equal(1);\n\n const elPrim = slot.assignedElements()[0] as HTMLDivElement;\n expect(getComputedStyle(elPrim).width).to.equal('200px');\n });\n\n it('renders only 2 out of 3 panels', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view>\n <div>First panel</div>\n <div>Second panel</div>\n <div id=\"testPanel\">Third (invisible) panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n const testPanel = el.shadowRoot.querySelector(\n '#testPanel'\n ) as HTMLDivElement;\n expect(testPanel).to.be.null;\n });\n\n it('keeps the splitter pos when removing and re-adding a panel', async () => {\n let pointerId = -1;\n const el = await fixture<SplitView>(\n html`\n <sp-split-view resizable style=\"width: 400px\">\n <div id=\"primary\">First panel</div>\n <div id=\"secondary\">Second panel</div>\n </sp-split-view>\n `\n );\n\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n let splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n splitter.setPointerCapture = (id: number) => (pointerId = id);\n splitter.releasePointerCapture = (id: number) => (pointerId = id);\n let pos = el.splitterPos || 0;\n expect(pos).to.equal(200);\n\n splitter.dispatchEvent(\n new PointerEvent('pointerdown', { pointerId: 1 })\n );\n await elementUpdated(el);\n expect(pointerId).to.equal(1);\n\n pos -= 10;\n splitter.dispatchEvent(\n new PointerEvent('pointermove', {\n clientX: pos,\n })\n );\n await elementUpdated(el);\n expect(Math.round(el.splitterPos || 0)).to.equal(\n pos - el.getBoundingClientRect().left\n );\n\n // Remove second panel\n const secPanel = el.lastElementChild?.cloneNode(true);\n expect(secPanel).not.to.be.null;\n\n el.lastElementChild?.remove();\n await elementUpdated(el);\n let slot = el.shadowRoot.querySelector('slot') as HTMLSlotElement;\n expect(slot).to.exist;\n expect(slot.assignedElements().length).to.equal(1);\n\n splitter = el.shadowRoot.querySelector('#splitter') as HTMLDivElement;\n expect(splitter).to.be.null;\n\n if (secPanel) {\n // Re-add second panel\n el.appendChild(secPanel);\n await elementUpdated(el);\n expect(Math.round(el.splitterPos || 0)).to.equal(\n pos - el.getBoundingClientRect().left\n );\n slot = el.shadowRoot.querySelector('slot') as HTMLSlotElement;\n expect(slot).to.exist;\n\n expect(slot.assignedElements().length).to.equal(2);\n\n splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n await expect(splitter).to.be.accessible();\n }\n });\n\n it('announces when splitterPos moves', async () => {\n const changeSpy = spy();\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n style=${`height: 200px; width: 500px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n el.addEventListener('change', changeSpy);\n await elementUpdated(el);\n expect(el.resizable).to.be.true;\n\n const pos = el.splitterPos || 0;\n const splitter = el.shadowRoot.querySelector(\n '#splitter'\n ) as HTMLDivElement;\n\n splitter.dispatchEvent(arrowLeftEvent());\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(pos - 10);\n expect(changeSpy.callCount).to.equal(1);\n });\n\n it('resizes when primarySize changes', async () => {\n const el = await fixture<SplitView>(\n html`\n <sp-split-view\n resizable\n primary-size=\"100\"\n style=${`height: 200px; width: 500px;`}\n >\n <div>First panel</div>\n <div>Second panel</div>\n </sp-split-view>\n `\n );\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(100);\n el.primarySize = '300';\n await elementUpdated(el);\n expect(el.splitterPos || 0).to.equal(300);\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }