@spectrum-web-components/sidenav 0.46.0 → 0.47.1

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/sidenav",
3
- "version": "0.46.0",
3
+ "version": "0.47.1",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -75,9 +75,9 @@
75
75
  "lit-html"
76
76
  ],
77
77
  "dependencies": {
78
- "@spectrum-web-components/base": "^0.46.0",
79
- "@spectrum-web-components/reactive-controllers": "^0.46.0",
80
- "@spectrum-web-components/shared": "^0.46.0"
78
+ "@spectrum-web-components/base": "^0.47.1",
79
+ "@spectrum-web-components/reactive-controllers": "^0.47.1",
80
+ "@spectrum-web-components/shared": "^0.47.1"
81
81
  },
82
82
  "devDependencies": {
83
83
  "@spectrum-css/sidenav": "^5.1.0"
@@ -88,5 +88,5 @@
88
88
  "./sp-*.js",
89
89
  "./**/*.dev.js"
90
90
  ],
91
- "gitHead": "ab84b447210de593649b086a1605abf1be1d64f2"
91
+ "gitHead": "151a3e21c39150dbc3f3a884b660be0bd352bda1"
92
92
  }
@@ -23,26 +23,7 @@ import { sendMouse } from "../../../test/plugins/browser.js";
23
23
  import { testForLitDevWarnings } from "../../../test/testing-helpers.js";
24
24
  describe("Sidenav", () => {
25
25
  testForLitDevWarnings(
26
- async () => await fixture(
27
- html`
28
- <sp-sidenav>
29
- <sp-sidenav-heading label="CATEGORY 1">
30
- <sp-sidenav-item
31
- value="Section 1"
32
- label="Section 1"
33
- ></sp-sidenav-item>
34
- <sp-sidenav-item
35
- value="Section 2"
36
- label="Section 2"
37
- ></sp-sidenav-item>
38
- </sp-sidenav-heading>
39
- </sp-sidenav>
40
- `
41
- )
42
- );
43
- it("loads", async () => {
44
- const el = await fixture(
45
- html`
26
+ async () => await fixture(html`
46
27
  <sp-sidenav>
47
28
  <sp-sidenav-heading label="CATEGORY 1">
48
29
  <sp-sidenav-item
@@ -55,17 +36,30 @@ describe("Sidenav", () => {
55
36
  ></sp-sidenav-item>
56
37
  </sp-sidenav-heading>
57
38
  </sp-sidenav>
58
- `
59
- );
39
+ `)
40
+ );
41
+ it("loads", async () => {
42
+ const el = await fixture(html`
43
+ <sp-sidenav>
44
+ <sp-sidenav-heading label="CATEGORY 1">
45
+ <sp-sidenav-item
46
+ value="Section 1"
47
+ label="Section 1"
48
+ ></sp-sidenav-item>
49
+ <sp-sidenav-item
50
+ value="Section 2"
51
+ label="Section 2"
52
+ ></sp-sidenav-item>
53
+ </sp-sidenav-heading>
54
+ </sp-sidenav>
55
+ `);
60
56
  await elementUpdated(el);
61
57
  await expect(el).to.be.accessible();
62
58
  });
63
59
  it("does not accept focus/click/blur when empty", async () => {
64
- const el = await fixture(
65
- html`
66
- <sp-sidenav></sp-sidenav>
67
- `
68
- );
60
+ const el = await fixture(html`
61
+ <sp-sidenav></sp-sidenav>
62
+ `);
69
63
  await elementUpdated(el);
70
64
  expect(document.activeElement === el).to.be.false;
71
65
  el.focus();
@@ -80,16 +74,14 @@ describe("Sidenav", () => {
80
74
  });
81
75
  it("does not accept keyboard events when items are not present", async () => {
82
76
  const errorSpy = spy();
83
- const el = await fixture(
84
- html`
85
- <sp-sidenav>
86
- <sp-sidenav-item
87
- value="Section 1"
88
- label="Section 1"
89
- ></sp-sidenav-item>
90
- </sp-sidenav>
91
- `
92
- );
77
+ const el = await fixture(html`
78
+ <sp-sidenav>
79
+ <sp-sidenav-item
80
+ value="Section 1"
81
+ label="Section 1"
82
+ ></sp-sidenav-item>
83
+ </sp-sidenav>
84
+ `);
93
85
  await elementUpdated(el);
94
86
  const item = el.querySelector("sp-sidenav-item");
95
87
  window.addEventListener("error", () => errorSpy());
@@ -104,22 +96,20 @@ describe("Sidenav", () => {
104
96
  expect(errorSpy.callCount).to.equal(0);
105
97
  });
106
98
  it("does not accept focus when all children [disabled]", async () => {
107
- const el = await fixture(
108
- html`
109
- <sp-sidenav>
110
- <sp-sidenav-item
111
- disabled
112
- value="Section 1"
113
- label="Section 1"
114
- ></sp-sidenav-item>
115
- <sp-sidenav-item
116
- disabled
117
- value="Section 2"
118
- label="Section 2"
119
- ></sp-sidenav-item>
120
- </sp-sidenav>
121
- `
122
- );
99
+ const el = await fixture(html`
100
+ <sp-sidenav>
101
+ <sp-sidenav-item
102
+ disabled
103
+ value="Section 1"
104
+ label="Section 1"
105
+ ></sp-sidenav-item>
106
+ <sp-sidenav-item
107
+ disabled
108
+ value="Section 2"
109
+ label="Section 2"
110
+ ></sp-sidenav-item>
111
+ </sp-sidenav>
112
+ `);
123
113
  await elementUpdated(el);
124
114
  expect(document.activeElement === el).to.be.false;
125
115
  el.focus();
@@ -128,20 +118,18 @@ describe("Sidenav", () => {
128
118
  expect(el.matches(":focus-within")).to.be.false;
129
119
  });
130
120
  it("sets manageTabIndex on new children", async () => {
131
- const el = await fixture(
132
- html`
133
- <sp-sidenav>
134
- <sp-sidenav-item
135
- value="Section 1"
136
- label="Section 1"
137
- ></sp-sidenav-item>
138
- <sp-sidenav-item
139
- value="Section 2"
140
- label="Section 2"
141
- ></sp-sidenav-item>
142
- </sp-sidenav>
143
- `
144
- );
121
+ const el = await fixture(html`
122
+ <sp-sidenav>
123
+ <sp-sidenav-item
124
+ value="Section 1"
125
+ label="Section 1"
126
+ ></sp-sidenav-item>
127
+ <sp-sidenav-item
128
+ value="Section 2"
129
+ label="Section 2"
130
+ ></sp-sidenav-item>
131
+ </sp-sidenav>
132
+ `);
145
133
  await elementUpdated(el);
146
134
  expect(el.manageTabIndex).to.be.false;
147
135
  const item1 = el.querySelector("sp-sidenav-item");
@@ -162,24 +150,22 @@ describe("Sidenav", () => {
162
150
  });
163
151
  it("handles select", async () => {
164
152
  const changeSpy = spy();
165
- const el = await fixture(
166
- html`
167
- <sp-sidenav @change=${() => changeSpy()}>
168
- <sp-sidenav-heading label="CATEGORY 1">
153
+ const el = await fixture(html`
154
+ <sp-sidenav @change=${() => changeSpy()}>
155
+ <sp-sidenav-heading label="CATEGORY 1">
156
+ <sp-sidenav-item
157
+ value="Section 1"
158
+ label="Section 1"
159
+ ></sp-sidenav-item>
160
+ <sp-sidenav-item value="Section 2" label="Section 2">
169
161
  <sp-sidenav-item
170
- value="Section 1"
171
- label="Section 1"
162
+ value="Section 2a"
163
+ label="Section 2a"
172
164
  ></sp-sidenav-item>
173
- <sp-sidenav-item value="Section 2" label="Section 2">
174
- <sp-sidenav-item
175
- value="Section 2a"
176
- label="Section 2a"
177
- ></sp-sidenav-item>
178
- </sp-sidenav-item>
179
- </sp-sidenav-heading>
180
- </sp-sidenav>
181
- `
182
- );
165
+ </sp-sidenav-item>
166
+ </sp-sidenav-heading>
167
+ </sp-sidenav>
168
+ `);
183
169
  await elementUpdated(el);
184
170
  expect(el.value).to.be.undefined;
185
171
  const sidenavItem = el.querySelector(
@@ -208,33 +194,27 @@ describe("Sidenav", () => {
208
194
  });
209
195
  it("prevents selection", async () => {
210
196
  const changeSpy = spy();
211
- const el = await fixture(
212
- html`
213
- <sp-sidenav
214
- @change=${(event) => {
215
- event.preventDefault();
216
- changeSpy();
217
- }}
218
- >
219
- <sp-sidenav-heading label="CATEGORY 1">
197
+ const el = await fixture(html`
198
+ <sp-sidenav
199
+ @change=${(event) => {
200
+ event.preventDefault();
201
+ changeSpy();
202
+ }}
203
+ >
204
+ <sp-sidenav-heading label="CATEGORY 1">
205
+ <sp-sidenav-item
206
+ value="Section 1"
207
+ label="Section 1"
208
+ ></sp-sidenav-item>
209
+ <sp-sidenav-item value="Section 2" label="Section 2" opened>
220
210
  <sp-sidenav-item
221
- value="Section 1"
222
- label="Section 1"
211
+ value="Section 2a"
212
+ label="Section 2a"
223
213
  ></sp-sidenav-item>
224
- <sp-sidenav-item
225
- value="Section 2"
226
- label="Section 2"
227
- opened
228
- >
229
- <sp-sidenav-item
230
- value="Section 2a"
231
- label="Section 2a"
232
- ></sp-sidenav-item>
233
- </sp-sidenav-item>
234
- </sp-sidenav-heading>
235
- </sp-sidenav>
236
- `
237
- );
214
+ </sp-sidenav-item>
215
+ </sp-sidenav-heading>
216
+ </sp-sidenav>
217
+ `);
238
218
  await elementUpdated(el);
239
219
  expect(el.value).to.be.undefined;
240
220
  el.click();
@@ -256,7 +236,7 @@ describe("Sidenav", () => {
256
236
  el.focus();
257
237
  await elementUpdated(el);
258
238
  expect(el.value).to.equal("Section 1");
259
- expect(selected.tabIndex, "-1 when focusin").to.equal(-1);
239
+ expect(selected.tabIndex, "0 when focusin").to.equal(0);
260
240
  el.blur();
261
241
  await elementUpdated(el);
262
242
  expect(el.value).to.equal("Section 1");
@@ -276,7 +256,7 @@ describe("Sidenav", () => {
276
256
  await elementUpdated(el);
277
257
  expect(el.value).to.equal("Section 0");
278
258
  expect(toBeSelected.tabIndex, "will be new focusable child").to.equal(
279
- -1
259
+ 0
280
260
  );
281
261
  expect(selected.tabIndex, "no longer selected").to.equal(-1);
282
262
  });
@@ -388,20 +368,18 @@ describe("Sidenav", () => {
388
368
  expect(typeof outsideFocused).not.to.equal(SideNavItem);
389
369
  });
390
370
  it("manage tab index for late added items", async () => {
391
- const el = await fixture(
392
- html`
393
- <sp-sidenav manage-tab-index>
394
- <sp-sidenav-item
395
- value="Section 0"
396
- label="Section 0"
397
- ></sp-sidenav-item>
398
- <sp-sidenav-item
399
- value="Section 1"
400
- label="Section 1"
401
- ></sp-sidenav-item>
402
- </sp-sidenav>
403
- `
404
- );
371
+ const el = await fixture(html`
372
+ <sp-sidenav manage-tab-index>
373
+ <sp-sidenav-item
374
+ value="Section 0"
375
+ label="Section 0"
376
+ ></sp-sidenav-item>
377
+ <sp-sidenav-item
378
+ value="Section 1"
379
+ label="Section 1"
380
+ ></sp-sidenav-item>
381
+ </sp-sidenav>
382
+ `);
405
383
  await elementUpdated(el);
406
384
  expect(el.manageTabIndex).to.be.true;
407
385
  const item1 = el.querySelector("sp-sidenav-item");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["sidenav.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 '@spectrum-web-components/sidenav/sp-sidenav.js';\nimport '@spectrum-web-components/sidenav/sp-sidenav-item.js';\nimport '@spectrum-web-components/sidenav/sp-sidenav-heading.js';\nimport { SideNav, SideNavItem } from '@spectrum-web-components/sidenav';\nimport { manageTabIndex } from '../stories/sidenav.stories.js';\nimport {\n arrowDownEvent,\n arrowUpEvent,\n shiftTabEvent,\n} from '../../../test/testing-helpers.js';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n waitUntil,\n} from '@open-wc/testing';\nimport { LitElement, TemplateResult } from '@spectrum-web-components/base';\nimport { spy } from 'sinon';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\n\ndescribe('Sidenav', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<SideNav>(\n html`\n <sp-sidenav>\n <sp-sidenav-heading label=\"CATEGORY 1\">\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item\n value=\"Section 2\"\n label=\"Section 2\"\n ></sp-sidenav-item>\n </sp-sidenav-heading>\n </sp-sidenav>\n `\n )\n );\n it('loads', async () => {\n const el = await fixture<SideNav>(\n html`\n <sp-sidenav>\n <sp-sidenav-heading label=\"CATEGORY 1\">\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item\n value=\"Section 2\"\n label=\"Section 2\"\n ></sp-sidenav-item>\n </sp-sidenav-heading>\n </sp-sidenav>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('does not accept focus/click/blur when empty', async () => {\n const el = await fixture<SideNav>(\n html`\n <sp-sidenav></sp-sidenav>\n `\n );\n\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n\n el.focus();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n\n el.blur();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n\n el.click();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n });\n it('does not accept keyboard events when items are not present', async () => {\n const errorSpy = spy();\n const el = await fixture<SideNav>(\n html`\n <sp-sidenav>\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n </sp-sidenav>\n `\n );\n\n await elementUpdated(el);\n const item = el.querySelector('sp-sidenav-item') as SideNavItem;\n window.addEventListener('error', () => errorSpy());\n\n el.dispatchEvent(new FocusEvent('focusin'));\n item.remove();\n\n await elementUpdated(el);\n el.dispatchEvent(\n new KeyboardEvent('keydown', {\n code: 'ArrowDown',\n })\n );\n\n expect(errorSpy.callCount).to.equal(0);\n });\n it('does not accept focus when all children [disabled]', async () => {\n const el = await fixture<SideNav>(\n html`\n <sp-sidenav>\n <sp-sidenav-item\n disabled\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item\n disabled\n value=\"Section 2\"\n label=\"Section 2\"\n ></sp-sidenav-item>\n </sp-sidenav>\n `\n );\n\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n\n el.focus();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n expect(el.matches(':focus-within')).to.be.false;\n });\n it('sets manageTabIndex on new children', async () => {\n const el = await fixture<SideNav>(\n html`\n <sp-sidenav>\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item\n value=\"Section 2\"\n label=\"Section 2\"\n ></sp-sidenav-item>\n </sp-sidenav>\n `\n );\n\n await elementUpdated(el);\n expect(el.manageTabIndex).to.be.false;\n\n const item1 = el.querySelector('sp-sidenav-item') as SideNavItem;\n expect(item1.tabIndex).to.equal(0);\n\n const newItem = document.createElement('sp-sidenav-item');\n newItem.value = 'Section 3';\n newItem.label = 'Section 3';\n el.appendChild(newItem);\n\n await elementUpdated(newItem);\n\n expect(newItem.tabIndex).to.equal(0);\n\n el.focus();\n const focused = document.activeElement as SideNavItem;\n focused.click();\n expect(focused.selected).to.be.true;\n\n el.dispatchEvent(shiftTabEvent());\n const outsideFocused = document.activeElement as HTMLElement;\n\n expect(typeof outsideFocused).not.to.equal(SideNavItem);\n });\n it('handles select', async () => {\n const changeSpy = spy();\n const el = await fixture<SideNav>(\n html`\n <sp-sidenav @change=${() => changeSpy()}>\n <sp-sidenav-heading label=\"CATEGORY 1\">\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item value=\"Section 2\" label=\"Section 2\">\n <sp-sidenav-item\n value=\"Section 2a\"\n label=\"Section 2a\"\n ></sp-sidenav-item>\n </sp-sidenav-item>\n </sp-sidenav-heading>\n </sp-sidenav>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.be.undefined;\n\n const sidenavItem = el.querySelector(\n '[value=\"Section 2\"]'\n ) as SideNavItem;\n sidenavItem.dispatchEvent(\n new CustomEvent('sidenav-select', {\n bubbles: true,\n detail: {\n value: 'Section 2',\n },\n })\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 2');\n expect(changeSpy.callCount).to.equal(1);\n\n sidenavItem.click();\n\n await elementUpdated(sidenavItem);\n\n const sidenavItemChild = el.querySelector(\n '[value=\"Section 2a\"]'\n ) as SideNavItem;\n sidenavItemChild.click();\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 2a');\n expect(changeSpy.callCount).to.equal(2);\n });\n it('prevents selection', async () => {\n const changeSpy = spy();\n const el = await fixture<SideNav>(\n html`\n <sp-sidenav\n @change=${(event: Event) => {\n event.preventDefault();\n changeSpy();\n }}\n >\n <sp-sidenav-heading label=\"CATEGORY 1\">\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item\n value=\"Section 2\"\n label=\"Section 2\"\n opened\n >\n <sp-sidenav-item\n value=\"Section 2a\"\n label=\"Section 2a\"\n ></sp-sidenav-item>\n </sp-sidenav-item>\n </sp-sidenav-heading>\n </sp-sidenav>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.be.undefined;\n\n el.click();\n\n await elementUpdated(el);\n\n expect(el.value).to.be.undefined;\n expect(changeSpy.callCount).to.equal(1);\n });\n it('prevents [tabindex=0] while `focusin`', async () => {\n const el = await fixture<SideNav>(manageTabIndex());\n const selected = el.querySelector('[value=\"Section 1\"]') as SideNavItem;\n const toBeSelected = el.querySelector(\n '[value=\"Section 0\"]'\n ) as SideNavItem;\n\n await elementUpdated(el);\n await waitUntil(() => el.value === 'Section 1', 'wait for selection');\n\n expect(el.value).to.equal('Section 1');\n expect(selected.tabIndex, 'initially 0').to.equal(0);\n expect(toBeSelected.tabIndex, 'initially -1').to.equal(-1);\n\n el.focus();\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 1');\n expect(selected.tabIndex, '-1 when focusin').to.equal(-1);\n\n el.blur();\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 1');\n expect(selected.tabIndex, '0 when blur').to.equal(0);\n\n const bindingRect = toBeSelected.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n bindingRect.x + bindingRect.width / 2,\n bindingRect.y + bindingRect.height / 2,\n ],\n },\n ],\n });\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 0');\n expect(toBeSelected.tabIndex, 'will be new focusable child').to.equal(\n -1\n );\n expect(selected.tabIndex, 'no longer selected').to.equal(-1);\n });\n it('manage tab index', async () => {\n const el = await fixture<SideNav>(manageTabIndex());\n\n await elementUpdated(el);\n expect(el.value).to.equal('Section 1');\n\n el.focus();\n el.dispatchEvent(arrowUpEvent());\n let focused = document.activeElement as SideNavItem;\n focused.click();\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 0');\n\n el.focus();\n el.dispatchEvent(arrowDownEvent());\n el.dispatchEvent(arrowDownEvent());\n focused = document.activeElement as SideNavItem;\n expect(focused.expanded, 'not expanded').to.be.false;\n focused.click();\n\n await elementUpdated(el);\n\n expect(focused.expanded, 'expanded').to.be.true;\n\n el.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n focused = document.activeElement as SideNavItem;\n focused.click();\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 3a');\n\n document.body.focus();\n\n el.focus();\n focused = document.activeElement as SideNavItem;\n expect(focused.selected, 'selected').to.be.true;\n\n el.dispatchEvent(shiftTabEvent());\n const outsideFocused = document.activeElement as HTMLElement;\n\n expect(typeof outsideFocused).not.to.equal(SideNavItem);\n });\n it('focuses the child anchor not the root when [tabindex=-1]', async () => {\n const el = await fixture<SideNav>(manageTabIndex());\n\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n await elementUpdated(el);\n const firstItem = el.querySelector(\n '[value=\"Section 0\"]'\n ) as SideNavItem;\n const selected = el.querySelector('[selected]') as SideNavItem;\n expect(selected.tabIndex).to.equal(0);\n expect(firstItem.tabIndex).to.equal(-1);\n\n const firstRect = firstItem.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n firstRect.x + firstRect.width / 2,\n firstRect.y + firstRect.height / 2,\n ],\n },\n ],\n });\n await elementUpdated(el);\n\n expect(firstItem.matches(':focus'), 'root has focus').to.be.true;\n expect(\n firstItem.focusElement.matches(':focus'),\n 'child has more precise focus'\n ).to.be.true;\n });\n it('manage tab index through shadow DOM', async () => {\n class SideNavTestEl extends LitElement {\n protected override render(): TemplateResult {\n return manageTabIndex();\n }\n }\n customElements.define('sidenav-test-el', SideNavTestEl);\n const el = await fixture<SideNav>(html`\n <sidenav-test-el></sidenav-test-el>\n `);\n\n await elementUpdated(el);\n const rootNode = el.shadowRoot as ShadowRoot;\n const sidenavEl = rootNode.querySelector('sp-sidenav') as SideNav;\n\n await elementUpdated(sidenavEl);\n expect(sidenavEl.value).to.equal('Section 1');\n\n sidenavEl.focus();\n sidenavEl.dispatchEvent(arrowUpEvent());\n let focused = rootNode.activeElement as SideNavItem;\n focused.focusElement.click();\n\n await elementUpdated(sidenavEl);\n\n expect(sidenavEl.value).to.equal('Section 0');\n\n sidenavEl.focus();\n sidenavEl.dispatchEvent(arrowDownEvent());\n sidenavEl.dispatchEvent(arrowDownEvent());\n focused = rootNode.activeElement as SideNavItem;\n expect(focused.expanded).to.be.false;\n focused.focusElement.click();\n\n await elementUpdated(sidenavEl);\n\n expect(focused.expanded).to.be.true;\n\n sidenavEl.dispatchEvent(arrowDownEvent());\n await elementUpdated(sidenavEl);\n focused = rootNode.activeElement as SideNavItem;\n focused.focusElement.click();\n\n await elementUpdated(sidenavEl);\n\n expect(sidenavEl.value).to.equal('Section 3a');\n\n document.body.focus();\n\n sidenavEl.focus();\n focused = rootNode.activeElement as SideNavItem;\n expect(focused.selected).to.be.true;\n\n sidenavEl.dispatchEvent(shiftTabEvent());\n const outsideFocused = rootNode.activeElement as HTMLElement;\n\n expect(typeof outsideFocused).not.to.equal(SideNavItem);\n });\n it('manage tab index for late added items', async () => {\n const el = await fixture<SideNav>(\n html`\n <sp-sidenav manage-tab-index>\n <sp-sidenav-item\n value=\"Section 0\"\n label=\"Section 0\"\n ></sp-sidenav-item>\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n </sp-sidenav>\n `\n );\n\n await elementUpdated(el);\n expect(el.manageTabIndex).to.be.true;\n\n const item1 = el.querySelector('sp-sidenav-item') as SideNavItem;\n const item2 = el.querySelector(\n 'sp-sidenav-item:nth-child(2)'\n ) as SideNavItem;\n\n await elementUpdated(item1);\n await elementUpdated(item2);\n expect(item1.tabIndex, 'first item tabindex').to.equal(0);\n expect(item2.tabIndex, 'second item tabindex').to.equal(-1);\n\n const item3 = document.createElement('sp-sidenav-item');\n item3.value = 'Section 2';\n item3.label = 'Section 2';\n\n await elementUpdated(el);\n\n el.appendChild(item3);\n\n await elementUpdated(item3);\n await elementUpdated(el);\n\n await waitUntil(() => item3.tabIndex === -1, 'after');\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 '@spectrum-web-components/sidenav/sp-sidenav.js';\nimport '@spectrum-web-components/sidenav/sp-sidenav-item.js';\nimport '@spectrum-web-components/sidenav/sp-sidenav-heading.js';\nimport { SideNav, SideNavItem } from '@spectrum-web-components/sidenav';\nimport { manageTabIndex } from '../stories/sidenav.stories.js';\nimport {\n arrowDownEvent,\n arrowUpEvent,\n shiftTabEvent,\n} from '../../../test/testing-helpers.js';\nimport {\n elementUpdated,\n expect,\n fixture,\n html,\n nextFrame,\n waitUntil,\n} from '@open-wc/testing';\nimport { LitElement, TemplateResult } from '@spectrum-web-components/base';\nimport { spy } from 'sinon';\nimport { sendMouse } from '../../../test/plugins/browser.js';\nimport { testForLitDevWarnings } from '../../../test/testing-helpers.js';\n\ndescribe('Sidenav', () => {\n testForLitDevWarnings(\n async () =>\n await fixture<SideNav>(html`\n <sp-sidenav>\n <sp-sidenav-heading label=\"CATEGORY 1\">\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item\n value=\"Section 2\"\n label=\"Section 2\"\n ></sp-sidenav-item>\n </sp-sidenav-heading>\n </sp-sidenav>\n `)\n );\n it('loads', async () => {\n const el = await fixture<SideNav>(html`\n <sp-sidenav>\n <sp-sidenav-heading label=\"CATEGORY 1\">\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item\n value=\"Section 2\"\n label=\"Section 2\"\n ></sp-sidenav-item>\n </sp-sidenav-heading>\n </sp-sidenav>\n `);\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('does not accept focus/click/blur when empty', async () => {\n const el = await fixture<SideNav>(html`\n <sp-sidenav></sp-sidenav>\n `);\n\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n\n el.focus();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n\n el.blur();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n\n el.click();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n });\n it('does not accept keyboard events when items are not present', async () => {\n const errorSpy = spy();\n const el = await fixture<SideNav>(html`\n <sp-sidenav>\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n </sp-sidenav>\n `);\n\n await elementUpdated(el);\n const item = el.querySelector('sp-sidenav-item') as SideNavItem;\n window.addEventListener('error', () => errorSpy());\n\n el.dispatchEvent(new FocusEvent('focusin'));\n item.remove();\n\n await elementUpdated(el);\n el.dispatchEvent(\n new KeyboardEvent('keydown', {\n code: 'ArrowDown',\n })\n );\n\n expect(errorSpy.callCount).to.equal(0);\n });\n it('does not accept focus when all children [disabled]', async () => {\n const el = await fixture<SideNav>(html`\n <sp-sidenav>\n <sp-sidenav-item\n disabled\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item\n disabled\n value=\"Section 2\"\n label=\"Section 2\"\n ></sp-sidenav-item>\n </sp-sidenav>\n `);\n\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n\n el.focus();\n await elementUpdated(el);\n\n expect(document.activeElement === el).to.be.false;\n expect(el.matches(':focus-within')).to.be.false;\n });\n it('sets manageTabIndex on new children', async () => {\n const el = await fixture<SideNav>(html`\n <sp-sidenav>\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item\n value=\"Section 2\"\n label=\"Section 2\"\n ></sp-sidenav-item>\n </sp-sidenav>\n `);\n\n await elementUpdated(el);\n expect(el.manageTabIndex).to.be.false;\n\n const item1 = el.querySelector('sp-sidenav-item') as SideNavItem;\n expect(item1.tabIndex).to.equal(0);\n\n const newItem = document.createElement('sp-sidenav-item');\n newItem.value = 'Section 3';\n newItem.label = 'Section 3';\n el.appendChild(newItem);\n\n await elementUpdated(newItem);\n\n expect(newItem.tabIndex).to.equal(0);\n\n el.focus();\n const focused = document.activeElement as SideNavItem;\n focused.click();\n expect(focused.selected).to.be.true;\n\n el.dispatchEvent(shiftTabEvent());\n const outsideFocused = document.activeElement as HTMLElement;\n\n expect(typeof outsideFocused).not.to.equal(SideNavItem);\n });\n it('handles select', async () => {\n const changeSpy = spy();\n const el = await fixture<SideNav>(html`\n <sp-sidenav @change=${() => changeSpy()}>\n <sp-sidenav-heading label=\"CATEGORY 1\">\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item value=\"Section 2\" label=\"Section 2\">\n <sp-sidenav-item\n value=\"Section 2a\"\n label=\"Section 2a\"\n ></sp-sidenav-item>\n </sp-sidenav-item>\n </sp-sidenav-heading>\n </sp-sidenav>\n `);\n\n await elementUpdated(el);\n\n expect(el.value).to.be.undefined;\n\n const sidenavItem = el.querySelector(\n '[value=\"Section 2\"]'\n ) as SideNavItem;\n sidenavItem.dispatchEvent(\n new CustomEvent('sidenav-select', {\n bubbles: true,\n detail: {\n value: 'Section 2',\n },\n })\n );\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 2');\n expect(changeSpy.callCount).to.equal(1);\n\n sidenavItem.click();\n\n await elementUpdated(sidenavItem);\n\n const sidenavItemChild = el.querySelector(\n '[value=\"Section 2a\"]'\n ) as SideNavItem;\n sidenavItemChild.click();\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 2a');\n expect(changeSpy.callCount).to.equal(2);\n });\n it('prevents selection', async () => {\n const changeSpy = spy();\n const el = await fixture<SideNav>(html`\n <sp-sidenav\n @change=${(event: Event) => {\n event.preventDefault();\n changeSpy();\n }}\n >\n <sp-sidenav-heading label=\"CATEGORY 1\">\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n <sp-sidenav-item value=\"Section 2\" label=\"Section 2\" opened>\n <sp-sidenav-item\n value=\"Section 2a\"\n label=\"Section 2a\"\n ></sp-sidenav-item>\n </sp-sidenav-item>\n </sp-sidenav-heading>\n </sp-sidenav>\n `);\n\n await elementUpdated(el);\n\n expect(el.value).to.be.undefined;\n\n el.click();\n\n await elementUpdated(el);\n\n expect(el.value).to.be.undefined;\n expect(changeSpy.callCount).to.equal(1);\n });\n it('prevents [tabindex=0] while `focusin`', async () => {\n const el = await fixture<SideNav>(manageTabIndex());\n const selected = el.querySelector('[value=\"Section 1\"]') as SideNavItem;\n const toBeSelected = el.querySelector(\n '[value=\"Section 0\"]'\n ) as SideNavItem;\n\n await elementUpdated(el);\n await waitUntil(() => el.value === 'Section 1', 'wait for selection');\n\n expect(el.value).to.equal('Section 1');\n expect(selected.tabIndex, 'initially 0').to.equal(0);\n expect(toBeSelected.tabIndex, 'initially -1').to.equal(-1);\n\n el.focus();\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 1');\n expect(selected.tabIndex, '0 when focusin').to.equal(0);\n\n el.blur();\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 1');\n expect(selected.tabIndex, '0 when blur').to.equal(0);\n\n const bindingRect = toBeSelected.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n bindingRect.x + bindingRect.width / 2,\n bindingRect.y + bindingRect.height / 2,\n ],\n },\n ],\n });\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 0');\n expect(toBeSelected.tabIndex, 'will be new focusable child').to.equal(\n 0\n );\n expect(selected.tabIndex, 'no longer selected').to.equal(-1);\n });\n it('manage tab index', async () => {\n const el = await fixture<SideNav>(manageTabIndex());\n\n await elementUpdated(el);\n expect(el.value).to.equal('Section 1');\n\n el.focus();\n el.dispatchEvent(arrowUpEvent());\n let focused = document.activeElement as SideNavItem;\n focused.click();\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 0');\n\n el.focus();\n el.dispatchEvent(arrowDownEvent());\n el.dispatchEvent(arrowDownEvent());\n focused = document.activeElement as SideNavItem;\n expect(focused.expanded, 'not expanded').to.be.false;\n focused.click();\n\n await elementUpdated(el);\n\n expect(focused.expanded, 'expanded').to.be.true;\n\n el.dispatchEvent(arrowDownEvent());\n await elementUpdated(el);\n focused = document.activeElement as SideNavItem;\n focused.click();\n\n await elementUpdated(el);\n\n expect(el.value).to.equal('Section 3a');\n\n document.body.focus();\n\n el.focus();\n focused = document.activeElement as SideNavItem;\n expect(focused.selected, 'selected').to.be.true;\n\n el.dispatchEvent(shiftTabEvent());\n const outsideFocused = document.activeElement as HTMLElement;\n\n expect(typeof outsideFocused).not.to.equal(SideNavItem);\n });\n it('focuses the child anchor not the root when [tabindex=-1]', async () => {\n const el = await fixture<SideNav>(manageTabIndex());\n\n await nextFrame();\n await nextFrame();\n await nextFrame();\n await nextFrame();\n\n await elementUpdated(el);\n const firstItem = el.querySelector(\n '[value=\"Section 0\"]'\n ) as SideNavItem;\n const selected = el.querySelector('[selected]') as SideNavItem;\n expect(selected.tabIndex).to.equal(0);\n expect(firstItem.tabIndex).to.equal(-1);\n\n const firstRect = firstItem.getBoundingClientRect();\n await sendMouse({\n steps: [\n {\n type: 'click',\n position: [\n firstRect.x + firstRect.width / 2,\n firstRect.y + firstRect.height / 2,\n ],\n },\n ],\n });\n await elementUpdated(el);\n\n expect(firstItem.matches(':focus'), 'root has focus').to.be.true;\n expect(\n firstItem.focusElement.matches(':focus'),\n 'child has more precise focus'\n ).to.be.true;\n });\n it('manage tab index through shadow DOM', async () => {\n class SideNavTestEl extends LitElement {\n protected override render(): TemplateResult {\n return manageTabIndex();\n }\n }\n customElements.define('sidenav-test-el', SideNavTestEl);\n const el = await fixture<SideNav>(html`\n <sidenav-test-el></sidenav-test-el>\n `);\n\n await elementUpdated(el);\n const rootNode = el.shadowRoot as ShadowRoot;\n const sidenavEl = rootNode.querySelector('sp-sidenav') as SideNav;\n\n await elementUpdated(sidenavEl);\n expect(sidenavEl.value).to.equal('Section 1');\n\n sidenavEl.focus();\n sidenavEl.dispatchEvent(arrowUpEvent());\n let focused = rootNode.activeElement as SideNavItem;\n focused.focusElement.click();\n\n await elementUpdated(sidenavEl);\n\n expect(sidenavEl.value).to.equal('Section 0');\n\n sidenavEl.focus();\n sidenavEl.dispatchEvent(arrowDownEvent());\n sidenavEl.dispatchEvent(arrowDownEvent());\n focused = rootNode.activeElement as SideNavItem;\n expect(focused.expanded).to.be.false;\n focused.focusElement.click();\n\n await elementUpdated(sidenavEl);\n\n expect(focused.expanded).to.be.true;\n\n sidenavEl.dispatchEvent(arrowDownEvent());\n await elementUpdated(sidenavEl);\n focused = rootNode.activeElement as SideNavItem;\n focused.focusElement.click();\n\n await elementUpdated(sidenavEl);\n\n expect(sidenavEl.value).to.equal('Section 3a');\n\n document.body.focus();\n\n sidenavEl.focus();\n focused = rootNode.activeElement as SideNavItem;\n expect(focused.selected).to.be.true;\n\n sidenavEl.dispatchEvent(shiftTabEvent());\n const outsideFocused = rootNode.activeElement as HTMLElement;\n\n expect(typeof outsideFocused).not.to.equal(SideNavItem);\n });\n it('manage tab index for late added items', async () => {\n const el = await fixture<SideNav>(html`\n <sp-sidenav manage-tab-index>\n <sp-sidenav-item\n value=\"Section 0\"\n label=\"Section 0\"\n ></sp-sidenav-item>\n <sp-sidenav-item\n value=\"Section 1\"\n label=\"Section 1\"\n ></sp-sidenav-item>\n </sp-sidenav>\n `);\n\n await elementUpdated(el);\n expect(el.manageTabIndex).to.be.true;\n\n const item1 = el.querySelector('sp-sidenav-item') as SideNavItem;\n const item2 = el.querySelector(\n 'sp-sidenav-item:nth-child(2)'\n ) as SideNavItem;\n\n await elementUpdated(item1);\n await elementUpdated(item2);\n expect(item1.tabIndex, 'first item tabindex').to.equal(0);\n expect(item2.tabIndex, 'second item tabindex').to.equal(-1);\n\n const item3 = document.createElement('sp-sidenav-item');\n item3.value = 'Section 2';\n item3.label = 'Section 2';\n\n await elementUpdated(el);\n\n el.appendChild(item3);\n\n await elementUpdated(item3);\n await elementUpdated(el);\n\n await waitUntil(() => item3.tabIndex === -1, 'after');\n });\n});\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }