@spectrum-web-components/action-group 0.8.1 → 0.8.2

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/action-group",
3
- "version": "0.8.1",
3
+ "version": "0.8.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -44,7 +44,7 @@
44
44
  "lit-html"
45
45
  ],
46
46
  "dependencies": {
47
- "@spectrum-web-components/action-button": "^0.8.1",
47
+ "@spectrum-web-components/action-button": "^0.8.2",
48
48
  "@spectrum-web-components/base": "^0.5.4",
49
49
  "@spectrum-web-components/reactive-controllers": "^0.2.2",
50
50
  "tslib": "^2.0.0"
@@ -57,5 +57,5 @@
57
57
  "sideEffects": [
58
58
  "./sp-*.js"
59
59
  ],
60
- "gitHead": "caf12727e7f91dcf961e1fadacc727eea9ece27b"
60
+ "gitHead": "dd76f9532fdea946880147cc7645f113b998c326"
61
61
  }
@@ -0,0 +1,15 @@
1
+ /*
2
+ Copyright 2020 Adobe. All rights reserved.
3
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License. You may obtain a copy
5
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+
7
+ Unless required by applicable law or agreed to in writing, software distributed under
8
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ OF ANY KIND, either express or implied. See the License for the specific language
10
+ governing permissions and limitations under the License.
11
+ */
12
+ import * as stories from '../stories/action-group-tooltip.stories.js';
13
+ import { regressVisuals } from '../../../test/visual/test.js';
14
+ regressVisuals('ActionGroupTooltipStories', stories);
15
+ //# sourceMappingURL=action-group-tooltip.test-vrt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-group-tooltip.test-vrt.js","sourceRoot":"","sources":["action-group-tooltip.test-vrt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAEF,OAAO,KAAK,OAAO,MAAM,4CAA4C,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,cAAc,CAAC,2BAA2B,EAAE,OAAO,CAAC,CAAC","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 * as stories from '../stories/action-group-tooltip.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\n\nregressVisuals('ActionGroupTooltipStories', stories);\n"]}
@@ -0,0 +1,15 @@
1
+ /*
2
+ Copyright 2020 Adobe. All rights reserved.
3
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License. You may obtain a copy
5
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+
7
+ Unless required by applicable law or agreed to in writing, software distributed under
8
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ OF ANY KIND, either express or implied. See the License for the specific language
10
+ governing permissions and limitations under the License.
11
+ */
12
+ import * as stories from '../stories/action-group.stories.js';
13
+ import { regressVisuals } from '../../../test/visual/test.js';
14
+ regressVisuals('ActionGroupStories', stories);
15
+ //# sourceMappingURL=action-group.test-vrt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-group.test-vrt.js","sourceRoot":"","sources":["action-group.test-vrt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAEF,OAAO,KAAK,OAAO,MAAM,oCAAoC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,cAAc,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC","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 * as stories from '../stories/action-group.stories.js';\nimport { regressVisuals } from '../../../test/visual/test.js';\n\nregressVisuals('ActionGroupStories', stories);\n"]}
@@ -0,0 +1,755 @@
1
+ /*
2
+ Copyright 2020 Adobe. All rights reserved.
3
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License. You may obtain a copy
5
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+
7
+ Unless required by applicable law or agreed to in writing, software distributed under
8
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ OF ANY KIND, either express or implied. See the License for the specific language
10
+ governing permissions and limitations under the License.
11
+ */
12
+ import { elementUpdated, expect, fixture, html, waitUntil, } from '@open-wc/testing';
13
+ import '@spectrum-web-components/action-button/sp-action-button.js';
14
+ import { LitElement } from '@spectrum-web-components/base';
15
+ import '@spectrum-web-components/overlay/overlay-trigger.js';
16
+ import '@spectrum-web-components/tooltip/sp-tooltip.js';
17
+ import { arrowDownEvent, arrowLeftEvent, arrowRightEvent, arrowUpEvent, endEvent, homeEvent, } from '../../../test/testing-helpers';
18
+ import { sendKeys } from '@web/test-runner-commands';
19
+ import '../sp-action-group.js';
20
+ class QuietActionGroup extends LitElement {
21
+ render() {
22
+ return html `
23
+ <sp-action-group quiet>
24
+ <slot name="first"></slot>
25
+ <slot name="second"></slot>
26
+ </sp-action-group>
27
+ `;
28
+ }
29
+ }
30
+ customElements.define('quiet-action-group', QuietActionGroup);
31
+ class EmphasizedActionGroup extends LitElement {
32
+ render() {
33
+ return html `
34
+ <sp-action-group emphasized>
35
+ <slot name="first"></slot>
36
+ <slot name="second"></slot>
37
+ </sp-action-group>
38
+ `;
39
+ }
40
+ }
41
+ customElements.define('emphasized-action-group', EmphasizedActionGroup);
42
+ async function singleSelectedActionGroup(selected) {
43
+ const el = await fixture(html `
44
+ <sp-action-group
45
+ label="Selects User-Chosen Buttons"
46
+ selects="single"
47
+ .selected=${selected}
48
+ >
49
+ <sp-action-button value="first" class="first">
50
+ First
51
+ </sp-action-button>
52
+ <sp-action-button value="second" class="second">
53
+ Second
54
+ </sp-action-button>
55
+ </sp-action-group>
56
+ `);
57
+ return el;
58
+ }
59
+ async function multipleSelectedActionGroup(selected) {
60
+ const el = await fixture(html `
61
+ <sp-action-group
62
+ label="Selects User-Chosen Buttons"
63
+ selects="multiple"
64
+ .selected=${selected}
65
+ >
66
+ <sp-action-button value="first" class="first">
67
+ First
68
+ </sp-action-button>
69
+ <sp-action-button value="second" class="second">
70
+ Second
71
+ </sp-action-button>
72
+ </sp-action-group>
73
+ `);
74
+ return el;
75
+ }
76
+ describe('ActionGroup', () => {
77
+ it('loads empty action-group accessibly', async () => {
78
+ const el = await fixture(html `
79
+ <sp-action-group></sp-action-group>
80
+ `);
81
+ await elementUpdated(el);
82
+ await expect(el).to.be.accessible();
83
+ });
84
+ it('loads default action-group accessibly', async () => {
85
+ const el = await fixture(html `
86
+ <sp-action-group aria-label="Default Group">
87
+ <sp-action-button>First</sp-action-button>
88
+ <sp-action-button>Second</sp-action-button>
89
+ <sp-action-button>Third</sp-action-button>
90
+ </sp-action-group>
91
+ `);
92
+ await elementUpdated(el);
93
+ await expect(el).to.be.accessible();
94
+ expect(el.getAttribute('aria-label')).to.equal('Default Group');
95
+ expect(el.hasAttribute('role')).to.be.false;
96
+ expect(el.children[0].getAttribute('role')).to.equal('button');
97
+ });
98
+ it('applies `quiet` attribute to its children', async () => {
99
+ const el = await fixture(html `
100
+ <sp-action-group quiet>
101
+ <sp-action-button id="first">First</sp-action-button>
102
+ <sp-action-button id="second">Second</sp-action-button>
103
+ </sp-action-group>
104
+ `);
105
+ const firstButton = el.querySelector('#first');
106
+ const secondButton = el.querySelector('#second');
107
+ await elementUpdated(el);
108
+ expect(firstButton.hasAttribute('quiet')).to.be.true;
109
+ expect(firstButton.quiet).to.be.true;
110
+ expect(secondButton.hasAttribute('quiet')).to.be.true;
111
+ expect(secondButton.quiet).to.be.true;
112
+ });
113
+ it('applies `quiet` attribute to its slotted children', async () => {
114
+ const el = await fixture(html `
115
+ <quiet-action-group>
116
+ <sp-action-button slot="first" id="first">
117
+ First
118
+ </sp-action-button>
119
+ <sp-action-button slot="second" id="second">
120
+ Second
121
+ </sp-action-button>
122
+ </quiet-action-group>
123
+ `);
124
+ const firstButton = el.querySelector('#first');
125
+ const secondButton = el.querySelector('#second');
126
+ await elementUpdated(el);
127
+ expect(firstButton.hasAttribute('quiet')).to.be.true;
128
+ expect(firstButton.quiet).to.be.true;
129
+ expect(secondButton.hasAttribute('quiet')).to.be.true;
130
+ expect(secondButton.quiet).to.be.true;
131
+ });
132
+ it('applies `emphasized` attribute to its slotted children', async () => {
133
+ const el = await fixture(html `
134
+ <emphasized-action-group>
135
+ <sp-action-button slot="first" id="first">
136
+ First
137
+ </sp-action-button>
138
+ <sp-action-button slot="second" id="second">
139
+ Second
140
+ </sp-action-button>
141
+ </emphasized-action-group>
142
+ `);
143
+ const firstButton = el.querySelector('#first');
144
+ const secondButton = el.querySelector('#second');
145
+ await elementUpdated(el);
146
+ expect(firstButton.hasAttribute('emphasized')).to.be.true;
147
+ expect(firstButton.emphasized).to.be.true;
148
+ expect(secondButton.hasAttribute('emphasized')).to.be.true;
149
+ expect(secondButton.emphasized).to.be.true;
150
+ });
151
+ it('applies `quiet` attribute to slotted children with overlays', async () => {
152
+ const el = await fixture(html `
153
+ <quiet-action-group>
154
+ <overlay-trigger slot="first">
155
+ <sp-action-button slot="trigger" id="first">
156
+ First
157
+ </sp-action-button>
158
+ </overlay-trigger>
159
+ <overlay-trigger slot="second">
160
+ <sp-action-button slot="trigger" id="second">
161
+ Second
162
+ </sp-action-button>
163
+ </overlay-trigger>
164
+ </quiet-action-group>
165
+ `);
166
+ const firstButton = el.querySelector('#first');
167
+ const secondButton = el.querySelector('#second');
168
+ await elementUpdated(el);
169
+ expect(firstButton.hasAttribute('quiet')).to.be.true;
170
+ expect(firstButton.quiet).to.be.true;
171
+ expect(secondButton.hasAttribute('quiet')).to.be.true;
172
+ expect(secondButton.quiet).to.be.true;
173
+ });
174
+ it('applies `emphasized` attribute to slotted children with overlays', async () => {
175
+ const el = await fixture(html `
176
+ <emphasized-action-group>
177
+ <overlay-trigger slot="first">
178
+ <sp-action-button slot="trigger" id="first">
179
+ First
180
+ </sp-action-button>
181
+ </overlay-trigger>
182
+ <overlay-trigger slot="second">
183
+ <sp-action-button slot="trigger" id="second">
184
+ Second
185
+ </sp-action-button>
186
+ </overlay-trigger>
187
+ </emphasized-action-group>
188
+ `);
189
+ const firstButton = el.querySelector('#first');
190
+ const secondButton = el.querySelector('#second');
191
+ await elementUpdated(el);
192
+ expect(firstButton.hasAttribute('emphasized')).to.be.true;
193
+ expect(firstButton.emphasized).to.be.true;
194
+ expect(secondButton.hasAttribute('emphasized')).to.be.true;
195
+ expect(secondButton.emphasized).to.be.true;
196
+ });
197
+ it('loads [selects="single"] action-group accessibly', async () => {
198
+ const el = await fixture(html `
199
+ <sp-action-group label="Selects Single Group" selects="single">
200
+ <sp-action-button>First</sp-action-button>
201
+ <sp-action-button>Second</sp-action-button>
202
+ <sp-action-button>Third</sp-action-button>
203
+ </sp-action-group>
204
+ `);
205
+ await elementUpdated(el);
206
+ await expect(el).to.be.accessible();
207
+ expect(el.getAttribute('aria-label')).to.equal('Selects Single Group');
208
+ expect(el.getAttribute('role')).to.equal('radiogroup');
209
+ expect(el.children[0].getAttribute('role')).to.equal('radio');
210
+ });
211
+ it('loads [selects="single"] action-group w/ selection accessibly', async () => {
212
+ const el = await fixture(html `
213
+ <sp-action-group label="Selects Single Group" selects="single">
214
+ <sp-action-button>First</sp-action-button>
215
+ <sp-action-button>Second</sp-action-button>
216
+ <sp-action-button selected>Third</sp-action-button>
217
+ </sp-action-group>
218
+ `);
219
+ await elementUpdated(el);
220
+ await expect(el).to.be.accessible();
221
+ });
222
+ it('loads [selects="multiple"] action-group accessibly', async () => {
223
+ const el = await fixture(html `
224
+ <sp-action-group
225
+ label="Selects Multiple Group"
226
+ selects="multiple"
227
+ >
228
+ <sp-action-button>First</sp-action-button>
229
+ <sp-action-button>Second</sp-action-button>
230
+ <sp-action-button>Third</sp-action-button>
231
+ </sp-action-group>
232
+ `);
233
+ await elementUpdated(el);
234
+ await expect(el).to.be.accessible();
235
+ expect(el.getAttribute('aria-label')).to.equal('Selects Multiple Group');
236
+ expect(el.getAttribute('role')).to.equal('group');
237
+ expect(el.children[0].getAttribute('role')).to.equal('checkbox');
238
+ });
239
+ it('loads [selects="multiple"] action-group w/ selection accessibly', async () => {
240
+ const el = await fixture(html `
241
+ <sp-action-group
242
+ label="Selects Multiple Group"
243
+ selects="multiple"
244
+ >
245
+ <sp-action-button>First</sp-action-button>
246
+ <sp-action-button selected>Second</sp-action-button>
247
+ <sp-action-button selected>Third</sp-action-button>
248
+ </sp-action-group>
249
+ `);
250
+ await elementUpdated(el);
251
+ await expect(el).to.be.accessible();
252
+ });
253
+ it('sets tab stop when [selects="single"] and the initial button is [disabled]', async () => {
254
+ const el = await fixture(html `
255
+ <sp-action-group label="Selects Single Group" selects="single">
256
+ <sp-action-button disabled>First</sp-action-button>
257
+ <sp-action-button class="second">Second</sp-action-button>
258
+ <sp-action-button>Third</sp-action-button>
259
+ </sp-action-group>
260
+ `);
261
+ const secondButton = el.querySelector('.second');
262
+ await elementUpdated(el);
263
+ expect(secondButton.hasAttribute('tabindex'));
264
+ expect(secondButton.getAttribute('tabindex')).to.equal('0');
265
+ });
266
+ it('surfaces [selects="single"] selection', async () => {
267
+ const el = await fixture(html `
268
+ <sp-action-group label="Selects Single Group" selects="single">
269
+ <sp-action-button>First</sp-action-button>
270
+ <sp-action-button>Second</sp-action-button>
271
+ <sp-action-button selected>Third</sp-action-button>
272
+ </sp-action-group>
273
+ `);
274
+ await elementUpdated(el);
275
+ expect(el.selected, '"Third" selected').to.deep.equal(['Third']);
276
+ });
277
+ it('surfaces [selects="multiple"] selection', async () => {
278
+ const el = await fixture(html `
279
+ <sp-action-group
280
+ label="Selects Multiple Group"
281
+ selects="multiple"
282
+ >
283
+ <sp-action-button>First</sp-action-button>
284
+ <sp-action-button selected>Second</sp-action-button>
285
+ <sp-action-button selected>Third</sp-action-button>
286
+ </sp-action-group>
287
+ `);
288
+ await elementUpdated(el);
289
+ expect(el.selected, '"Second" and "Third" selected').to.deep.equal([
290
+ 'Second',
291
+ 'Third',
292
+ ]);
293
+ });
294
+ it('does not select without [selects]', async () => {
295
+ const el = await fixture(html `
296
+ <sp-action-group label="No Selects Group">
297
+ <sp-action-button>First</sp-action-button>
298
+ <sp-action-button selected>Second</sp-action-button>
299
+ <sp-action-button class="third">Third</sp-action-button>
300
+ </sp-action-group>
301
+ `);
302
+ const thirdElement = el.querySelector('.third');
303
+ await elementUpdated(el);
304
+ expect(el.selected.length).to.equal(1);
305
+ thirdElement.click();
306
+ await elementUpdated(el);
307
+ expect(el.selected.length).to.equal(1);
308
+ });
309
+ it('selects via `click` while [selects="single"]', async () => {
310
+ const el = await fixture(html `
311
+ <sp-action-group label="Selects Single Group" selects="single">
312
+ <sp-action-button value="first">First</sp-action-button>
313
+ <sp-action-button value="second" selected>
314
+ Second
315
+ </sp-action-button>
316
+ <sp-action-button value="third" class="third">
317
+ Third
318
+ </sp-action-button>
319
+ </sp-action-group>
320
+ `);
321
+ const thirdElement = el.querySelector('.third');
322
+ await elementUpdated(el);
323
+ expect(el.selected.length).to.equal(1);
324
+ expect(el.selected.includes('second'));
325
+ thirdElement.click();
326
+ await elementUpdated(el);
327
+ expect(thirdElement.selected, 'third child selected').to.be.true;
328
+ await waitUntil(() => el.selected.length === 1 && el.selected.includes('third'), 'Updates value of `selected`');
329
+ });
330
+ it('selects via `click` while [selects="multiple"] selection', async () => {
331
+ const el = await fixture(html `
332
+ <sp-action-group
333
+ label="Selects Multiple Group"
334
+ selects="multiple"
335
+ >
336
+ <sp-action-button selected class="first">
337
+ First
338
+ </sp-action-button>
339
+ <sp-action-button class="second">Second</sp-action-button>
340
+ <sp-action-button class="third">Third</sp-action-button>
341
+ </sp-action-group>
342
+ `);
343
+ const firstElement = el.querySelector('.first');
344
+ const secondElement = el.querySelector('.second');
345
+ const thirdElement = el.querySelector('.third');
346
+ await elementUpdated(el);
347
+ expect(el.selected.length).to.equal(1);
348
+ expect(el.selected.includes('First'));
349
+ firstElement.click();
350
+ secondElement.click();
351
+ thirdElement.click();
352
+ await elementUpdated(el);
353
+ expect(secondElement.selected, 'second child selected').to.be.true;
354
+ expect(thirdElement.selected, 'third child selected').to.be.true;
355
+ await waitUntil(() => el.selected.length === 2 &&
356
+ el.selected.includes('Second') &&
357
+ el.selected.includes('Third'), 'Updates value of `selected`');
358
+ });
359
+ it('does not respond to clicks on itself', async () => {
360
+ const el = await fixture(html `
361
+ <sp-action-group label="Selects Single Group" selects="single">
362
+ <sp-action-button>First</sp-action-button>
363
+ <sp-action-button>Second</sp-action-button>
364
+ <sp-action-button class="third">Third</sp-action-button>
365
+ </sp-action-group>
366
+ `);
367
+ await elementUpdated(el);
368
+ expect(el.selected.length).to.equal(0);
369
+ el.click();
370
+ await elementUpdated(el);
371
+ expect(el.selected.length).to.equal(0);
372
+ });
373
+ it('selection can be prevented', async () => {
374
+ const el = await fixture(html `
375
+ <sp-action-group
376
+ label="Selects Single Group"
377
+ selects="single"
378
+ @change=${(event) => {
379
+ event.preventDefault();
380
+ }}
381
+ >
382
+ <sp-action-button>First</sp-action-button>
383
+ <sp-action-button>Second</sp-action-button>
384
+ <sp-action-button class="third">Third</sp-action-button>
385
+ </sp-action-group>
386
+ `);
387
+ const thirdElement = el.querySelector('.third');
388
+ await elementUpdated(el);
389
+ expect(el.selected.length).to.equal(0);
390
+ thirdElement.click();
391
+ await elementUpdated(el);
392
+ expect(thirdElement.selected, 'third child not selected').to.be.false;
393
+ expect(el.selected.length).to.equal(0);
394
+ });
395
+ it('selects user-passed value while [selects="single"]', async () => {
396
+ const el = await singleSelectedActionGroup(['first']);
397
+ await elementUpdated(el);
398
+ expect(el.selected.length).to.equal(1);
399
+ const firstButton = el.querySelector('.first');
400
+ const secondButton = el.querySelector('.second');
401
+ expect(firstButton.selected, 'first button selected').to.be.true;
402
+ expect(secondButton.selected, 'second button not selected').to.be.false;
403
+ secondButton.click();
404
+ await elementUpdated(el);
405
+ expect(el.selected.length).to.equal(1);
406
+ expect(firstButton.selected, 'first button not selected').to.be.false;
407
+ expect(secondButton.selected, 'second button selected').to.be.true;
408
+ });
409
+ it('selects user-passed value while [selects="multiple"]', async () => {
410
+ const el = await fixture(html `
411
+ <sp-action-group
412
+ label="Selects Multiple Group"
413
+ selects="multiple"
414
+ .selected=${['first', 'second']}
415
+ >
416
+ <sp-action-button class="first" value="first">
417
+ First
418
+ </sp-action-button>
419
+ <sp-action-button class="second" value="second">
420
+ Second
421
+ </sp-action-button>
422
+ <sp-action-button class="third " value="third">
423
+ Third
424
+ </sp-action-button>
425
+ </sp-action-group>
426
+ `);
427
+ await elementUpdated(el);
428
+ const firstButton = el.querySelector('.first');
429
+ const secondButton = el.querySelector('.second');
430
+ const thirdButton = el.querySelector('.third');
431
+ expect(el.selected.length).to.equal(2);
432
+ expect(firstButton.selected, 'first button selected').to.be.true;
433
+ expect(secondButton.selected, 'second button selected').to.be.true;
434
+ expect(thirdButton.selected, 'third button not selected').to.be.false;
435
+ thirdButton.click();
436
+ await elementUpdated(el);
437
+ expect(el.selected.length).to.equal(3);
438
+ expect(firstButton.selected, 'first button selected').to.be.true;
439
+ expect(secondButton.selected, 'second button selected').to.be.true;
440
+ expect(thirdButton.selected, 'third button selected').to.be.true;
441
+ firstButton.click();
442
+ await elementUpdated(el);
443
+ expect(el.selected.length).to.equal(2);
444
+ expect(firstButton.selected, 'first button not selected').to.be.false;
445
+ expect(secondButton.selected, 'second button selected').to.be.true;
446
+ expect(thirdButton.selected, 'third button selected').to.be.true;
447
+ });
448
+ it('selects multiple user-passed values while [selects="single"], but then proceeds with radio-button style functionality', async () => {
449
+ const el = await singleSelectedActionGroup(['first', 'second']);
450
+ await elementUpdated(el);
451
+ expect(el.selected.length).to.equal(2);
452
+ const firstButton = el.querySelector('.first');
453
+ const secondButton = el.querySelector('.second');
454
+ expect(firstButton.selected, 'first button selected').to.be.true;
455
+ expect(secondButton.selected, 'second button selected').to.be.true;
456
+ secondButton.click();
457
+ await elementUpdated(el);
458
+ expect(el.selected.length).to.equal(1);
459
+ expect(firstButton.selected, 'first button selected').to.be.false;
460
+ expect(secondButton.selected, 'second button selected').to.be.true;
461
+ });
462
+ it('only selects user-passed buttons if present in action-group while [selects="multiple"]', async () => {
463
+ const el = await multipleSelectedActionGroup(['second', 'fourth']);
464
+ await elementUpdated(el);
465
+ expect(el.selected.length).to.equal(1);
466
+ const secondButton = el.querySelector('.second');
467
+ expect(secondButton.selected, 'second button selected').to.be.true;
468
+ const firstButton = el.querySelector('.first');
469
+ expect(firstButton.selected, 'first button selected').to.be.false;
470
+ });
471
+ it('selects user-passed values with no .selects value, but does not allow interaction afterwards', async () => {
472
+ const el = await fixture(html `
473
+ <sp-action-group
474
+ label="Selects User-Chosen Buttons"
475
+ .selected=${['first']}
476
+ >
477
+ <sp-action-button value="first" class="first">
478
+ First
479
+ </sp-action-button>
480
+ <sp-action-button value="second" class="second">
481
+ Second
482
+ </sp-action-button>
483
+ </sp-action-group>
484
+ `);
485
+ await elementUpdated(el);
486
+ expect(el.selected.length).to.equal(1);
487
+ const firstButton = el.querySelector('.first');
488
+ const secondButton = el.querySelector('.second');
489
+ expect(firstButton.selected, 'first button selected').to.be.true;
490
+ expect(secondButton.selected, 'second button selected').to.be.false;
491
+ secondButton.click();
492
+ await elementUpdated(el);
493
+ expect(el.selected.length).to.equal(1);
494
+ expect(firstButton.selected, 'first button selected').to.be.true;
495
+ expect(secondButton.selected, 'second button selected').to.be.false;
496
+ });
497
+ it('selects multiple buttons if .selected is passed in, but does not allow further interaction afterwards', async () => {
498
+ const el = await fixture(html `
499
+ <sp-action-group
500
+ label="Selects User-Chosen Buttons"
501
+ .selected=${['first', 'second']}
502
+ >
503
+ <sp-action-button class="first" value="first">
504
+ First
505
+ </sp-action-button>
506
+ <sp-action-button class="second" value="second">
507
+ Second
508
+ </sp-action-button>
509
+ </sp-action-group>
510
+ `);
511
+ await elementUpdated(el);
512
+ expect(el.selected.length).to.equal(2);
513
+ const firstButton = el.querySelector('.first');
514
+ expect(firstButton.selected, 'first button selected').to.be.true;
515
+ const secondButton = el.querySelector('.second');
516
+ expect(secondButton.selected, 'second button selected').to.be.true;
517
+ firstButton.click();
518
+ await elementUpdated(el);
519
+ expect(el.selected.length).to.equal(2);
520
+ expect(firstButton.selected, 'first button selected').to.be.true;
521
+ expect(secondButton.selected, 'second button selected').to.be.true;
522
+ });
523
+ it('will not change .selected state if event is prevented while [selects="multiple"]', async () => {
524
+ const el = await fixture(html `
525
+ <sp-action-group
526
+ label="Selects Multiple Group"
527
+ selects="multiple"
528
+ .selected=${['first', 'second']}
529
+ @change=${(event) => {
530
+ event.preventDefault();
531
+ }}
532
+ >
533
+ <sp-action-button class="first" value="first">
534
+ First
535
+ </sp-action-button>
536
+ <sp-action-button class="second" value="second">
537
+ Second
538
+ </sp-action-button>
539
+ <sp-action-button class="third " value="third">
540
+ Third
541
+ </sp-action-button>
542
+ </sp-action-group>
543
+ `);
544
+ const firstElement = el.querySelector('.first');
545
+ const secondElement = el.querySelector('.second');
546
+ const thirdElement = el.querySelector('.third');
547
+ // checking if the first and second are selected
548
+ await elementUpdated(el);
549
+ expect(el.selected.length).to.equal(2);
550
+ expect(firstElement.selected, 'first child selected').to.be.true;
551
+ expect(secondElement.selected, 'second child selected').to.be.true;
552
+ // making sure third element isn't selected
553
+ thirdElement.click();
554
+ await elementUpdated(el);
555
+ expect(thirdElement.selected, 'third child not selected').to.be.false;
556
+ expect(el.selected.length).to.equal(2);
557
+ // making sure already-selected elements are not de-selected
558
+ secondElement.click();
559
+ await elementUpdated(el);
560
+ expect(secondElement.selected, 'second element still selected').to.be
561
+ .true;
562
+ });
563
+ it('will not change .selected state if event is prevented while [selects="single"]', async () => {
564
+ const el = await fixture(html `
565
+ <sp-action-group
566
+ label="Selects Single Group"
567
+ selects="single"
568
+ .selected=${['first']}
569
+ @change=${(event) => {
570
+ event.preventDefault();
571
+ }}
572
+ >
573
+ <sp-action-button class="first" value="first">
574
+ First
575
+ </sp-action-button>
576
+ <sp-action-button class="second" value="second">
577
+ Second
578
+ </sp-action-button>
579
+ </sp-action-group>
580
+ `);
581
+ const firstElement = el.querySelector('.first');
582
+ const secondElement = el.querySelector('.second');
583
+ // checking if the first element is selected
584
+ await elementUpdated(el);
585
+ expect(el.selected.length).to.equal(1);
586
+ expect(firstElement.selected, 'first child selected').to.be.true;
587
+ // making sure third element isn't selected
588
+ secondElement.click();
589
+ await elementUpdated(el);
590
+ expect(secondElement.selected, 'second child not selected').to.be.false;
591
+ expect(el.selected.length).to.equal(1);
592
+ // making sure already-selected elements are not de-selected
593
+ firstElement.click();
594
+ await elementUpdated(el);
595
+ expect(firstElement.selected, 'first element still selected').to.be
596
+ .true;
597
+ });
598
+ it('will not change .selected state if event is prevented while selects is undefined', async () => {
599
+ const el = await fixture(html `
600
+ <sp-action-group
601
+ label="Selects Single Group"
602
+ .selected=${['first']}
603
+ @change=${(event) => {
604
+ event.preventDefault();
605
+ }}
606
+ >
607
+ <sp-action-button class="first" value="first">
608
+ First
609
+ </sp-action-button>
610
+ <sp-action-button class="second" value="second">
611
+ Second
612
+ </sp-action-button>
613
+ </sp-action-group>
614
+ `);
615
+ const firstElement = el.querySelector('.first');
616
+ const secondElement = el.querySelector('.second');
617
+ // checking if the first element is selected
618
+ await elementUpdated(el);
619
+ expect(el.selected.length).to.equal(1);
620
+ expect(firstElement.selected, 'first child selected').to.be.true;
621
+ secondElement.click();
622
+ await elementUpdated(el);
623
+ // state should be exactly the same
624
+ expect(el.selected.length).to.equal(1);
625
+ expect(firstElement.selected, 'first child selected').to.be.true;
626
+ expect(secondElement.selected, 'second child not selected').to.be.false;
627
+ });
628
+ it('will accept selected as a JSON string', async () => {
629
+ const el = await fixture(html `
630
+ <sp-action-group
631
+ label="Selects Single Group"
632
+ selects="single"
633
+ selected='["first"]'
634
+ >
635
+ <sp-action-button class="first" value="first">
636
+ First
637
+ </sp-action-button>
638
+ <sp-action-button class="second" value="second">
639
+ Second
640
+ </sp-action-button>
641
+ </sp-action-group>
642
+ `);
643
+ // checking if the first element is selected
644
+ await elementUpdated(el);
645
+ const firstElement = el.querySelector('.first');
646
+ const secondElement = el.querySelector('.second');
647
+ expect(el.selected.length).to.equal(1);
648
+ expect(firstElement.selected, 'first child selected').to.be.true;
649
+ expect(secondElement.selected, 'second child selected').to.be.false;
650
+ });
651
+ const acceptKeyboardInput = async (el) => {
652
+ const thirdElement = el.querySelector('.third');
653
+ await elementUpdated(el);
654
+ expect(el.selected.length).to.equal(1);
655
+ expect(el.selected[0]).to.equal('Second');
656
+ thirdElement.click();
657
+ await elementUpdated(el);
658
+ expect(thirdElement.selected, 'third child selected').to.be.true;
659
+ expect(el.selected.length).to.equal(1);
660
+ expect(el.selected[0]).to.equal('Third');
661
+ el.dispatchEvent(arrowRightEvent());
662
+ await sendKeys({ press: 'Enter' });
663
+ await elementUpdated(el);
664
+ expect(el.selected.length).to.equal(1);
665
+ expect(el.selected[0]).to.equal('First');
666
+ el.dispatchEvent(arrowLeftEvent());
667
+ el.dispatchEvent(arrowUpEvent());
668
+ await sendKeys({ press: 'Enter' });
669
+ expect(el.selected.length).to.equal(1);
670
+ expect(el.selected[0]).to.equal('Second');
671
+ el.dispatchEvent(endEvent());
672
+ await sendKeys({ press: 'Enter' });
673
+ expect(el.selected.length).to.equal(1);
674
+ expect(el.selected[0]).to.equal('Third');
675
+ await sendKeys({ press: 'Enter' });
676
+ el.dispatchEvent(homeEvent());
677
+ await sendKeys({ press: 'Enter' });
678
+ expect(el.selected.length).to.equal(1);
679
+ expect(el.selected[0]).to.equal('First');
680
+ el.dispatchEvent(arrowDownEvent());
681
+ await sendKeys({ press: 'Enter' });
682
+ expect(el.selected.length).to.equal(1);
683
+ expect(el.selected[0]).to.equal('Second');
684
+ };
685
+ it('accepts keybord input', async () => {
686
+ const el = await fixture(html `
687
+ <sp-action-group label="Selects Single Group" selects="single">
688
+ <sp-action-button>First</sp-action-button>
689
+ <sp-action-button selected>Second</sp-action-button>
690
+ <sp-action-button class="third">Third</sp-action-button>
691
+ </sp-action-group>
692
+ `);
693
+ await acceptKeyboardInput(el);
694
+ });
695
+ it('accepts keybord input with tooltip', async () => {
696
+ const el = await fixture(html `
697
+ <sp-action-group label="Selects Single Group" selects="single">
698
+ <overlay-trigger>
699
+ <sp-action-button slot="trigger">
700
+ First
701
+ </sp-action-button>
702
+ <sp-tooltip slot="hover-content">
703
+ Definitely the first one.
704
+ </sp-tooltip>
705
+ </overlay-trigger>
706
+ <overlay-trigger>
707
+ <sp-action-button slot="trigger" selected>
708
+ Second
709
+ </sp-action-button>
710
+ <sp-tooltip slot="hover-content">
711
+ Not the first, not the last.
712
+ </sp-tooltip>
713
+ </overlay-trigger>
714
+ <overlay-trigger>
715
+ <sp-action-button slot="trigger" class="third">
716
+ Third
717
+ </sp-action-button>
718
+ <sp-tooltip slot="hover-content">Select me.</sp-tooltip>
719
+ </overlay-trigger>
720
+ </sp-action-group>
721
+ `);
722
+ await acceptKeyboardInput(el);
723
+ });
724
+ it('accepts keybord input when [dir="ltr"]', async () => {
725
+ const el = await fixture(html `
726
+ <sp-action-group
727
+ label="Selects Single Group"
728
+ selects="single"
729
+ dir="ltr"
730
+ >
731
+ <sp-action-button>First</sp-action-button>
732
+ <sp-action-button disabled>Second</sp-action-button>
733
+ <sp-action-button class="third">Third</sp-action-button>
734
+ </sp-action-group>
735
+ `);
736
+ const thirdElement = el.querySelector('.third');
737
+ await elementUpdated(el);
738
+ expect(el.selected.length).to.equal(0);
739
+ thirdElement.click();
740
+ await elementUpdated(el);
741
+ expect(thirdElement.selected, 'third child selected').to.be.true;
742
+ expect(el.selected.length).to.equal(1);
743
+ expect(el.selected[0]).to.equal('Third');
744
+ el.dispatchEvent(arrowRightEvent());
745
+ await sendKeys({ press: 'Enter' });
746
+ await elementUpdated(el);
747
+ expect(el.selected.length).to.equal(1);
748
+ expect(el.selected[0]).to.equal('First');
749
+ el.dispatchEvent(arrowUpEvent());
750
+ await sendKeys({ press: 'Enter' });
751
+ expect(el.selected.length).to.equal(1);
752
+ expect(el.selected[0]).to.equal('Third');
753
+ });
754
+ });
755
+ //# sourceMappingURL=action-group.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-group.test.js","sourceRoot":"","sources":["action-group.test.ts"],"names":[],"mappings":"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","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 waitUntil,\n} from '@open-wc/testing';\n\nimport { ActionButton } from '@spectrum-web-components/action-button';\nimport '@spectrum-web-components/action-button/sp-action-button.js';\nimport { LitElement, TemplateResult } from '@spectrum-web-components/base';\nimport '@spectrum-web-components/overlay/overlay-trigger.js';\nimport '@spectrum-web-components/tooltip/sp-tooltip.js';\nimport { ActionGroup } from '..';\nimport {\n arrowDownEvent,\n arrowLeftEvent,\n arrowRightEvent,\n arrowUpEvent,\n endEvent,\n homeEvent,\n} from '../../../test/testing-helpers';\nimport { sendKeys } from '@web/test-runner-commands';\nimport '../sp-action-group.js';\n\nclass QuietActionGroup extends LitElement {\n protected render(): TemplateResult {\n return html`\n <sp-action-group quiet>\n <slot name=\"first\"></slot>\n <slot name=\"second\"></slot>\n </sp-action-group>\n `;\n }\n}\ncustomElements.define('quiet-action-group', QuietActionGroup);\n\nclass EmphasizedActionGroup extends LitElement {\n protected render(): TemplateResult {\n return html`\n <sp-action-group emphasized>\n <slot name=\"first\"></slot>\n <slot name=\"second\"></slot>\n </sp-action-group>\n `;\n }\n}\ncustomElements.define('emphasized-action-group', EmphasizedActionGroup);\n\nasync function singleSelectedActionGroup(\n selected: string[]\n): Promise<ActionGroup> {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects User-Chosen Buttons\"\n selects=\"single\"\n .selected=${selected}\n >\n <sp-action-button value=\"first\" class=\"first\">\n First\n </sp-action-button>\n <sp-action-button value=\"second\" class=\"second\">\n Second\n </sp-action-button>\n </sp-action-group>\n `\n );\n return el;\n}\n\nasync function multipleSelectedActionGroup(\n selected: string[]\n): Promise<ActionGroup> {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects User-Chosen Buttons\"\n selects=\"multiple\"\n .selected=${selected}\n >\n <sp-action-button value=\"first\" class=\"first\">\n First\n </sp-action-button>\n <sp-action-button value=\"second\" class=\"second\">\n Second\n </sp-action-button>\n </sp-action-group>\n `\n );\n return el;\n}\n\ndescribe('ActionGroup', () => {\n it('loads empty action-group accessibly', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group></sp-action-group>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads default action-group accessibly', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group aria-label=\"Default Group\">\n <sp-action-button>First</sp-action-button>\n <sp-action-button>Second</sp-action-button>\n <sp-action-button>Third</sp-action-button>\n </sp-action-group>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n expect(el.getAttribute('aria-label')).to.equal('Default Group');\n expect(el.hasAttribute('role')).to.be.false;\n expect(el.children[0].getAttribute('role')).to.equal('button');\n });\n it('applies `quiet` attribute to its children', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group quiet>\n <sp-action-button id=\"first\">First</sp-action-button>\n <sp-action-button id=\"second\">Second</sp-action-button>\n </sp-action-group>\n `\n );\n const firstButton = el.querySelector('#first') as ActionButton;\n const secondButton = el.querySelector('#second') as ActionButton;\n\n await elementUpdated(el);\n\n expect(firstButton.hasAttribute('quiet')).to.be.true;\n expect(firstButton.quiet).to.be.true;\n expect(secondButton.hasAttribute('quiet')).to.be.true;\n expect(secondButton.quiet).to.be.true;\n });\n it('applies `quiet` attribute to its slotted children', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <quiet-action-group>\n <sp-action-button slot=\"first\" id=\"first\">\n First\n </sp-action-button>\n <sp-action-button slot=\"second\" id=\"second\">\n Second\n </sp-action-button>\n </quiet-action-group>\n `\n );\n const firstButton = el.querySelector('#first') as ActionButton;\n const secondButton = el.querySelector('#second') as ActionButton;\n\n await elementUpdated(el);\n\n expect(firstButton.hasAttribute('quiet')).to.be.true;\n expect(firstButton.quiet).to.be.true;\n expect(secondButton.hasAttribute('quiet')).to.be.true;\n expect(secondButton.quiet).to.be.true;\n });\n it('applies `emphasized` attribute to its slotted children', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <emphasized-action-group>\n <sp-action-button slot=\"first\" id=\"first\">\n First\n </sp-action-button>\n <sp-action-button slot=\"second\" id=\"second\">\n Second\n </sp-action-button>\n </emphasized-action-group>\n `\n );\n const firstButton = el.querySelector('#first') as ActionButton;\n const secondButton = el.querySelector('#second') as ActionButton;\n\n await elementUpdated(el);\n\n expect(firstButton.hasAttribute('emphasized')).to.be.true;\n expect(firstButton.emphasized).to.be.true;\n expect(secondButton.hasAttribute('emphasized')).to.be.true;\n expect(secondButton.emphasized).to.be.true;\n });\n it('applies `quiet` attribute to slotted children with overlays', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <quiet-action-group>\n <overlay-trigger slot=\"first\">\n <sp-action-button slot=\"trigger\" id=\"first\">\n First\n </sp-action-button>\n </overlay-trigger>\n <overlay-trigger slot=\"second\">\n <sp-action-button slot=\"trigger\" id=\"second\">\n Second\n </sp-action-button>\n </overlay-trigger>\n </quiet-action-group>\n `\n );\n const firstButton = el.querySelector('#first') as ActionButton;\n const secondButton = el.querySelector('#second') as ActionButton;\n\n await elementUpdated(el);\n\n expect(firstButton.hasAttribute('quiet')).to.be.true;\n expect(firstButton.quiet).to.be.true;\n expect(secondButton.hasAttribute('quiet')).to.be.true;\n expect(secondButton.quiet).to.be.true;\n });\n it('applies `emphasized` attribute to slotted children with overlays', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <emphasized-action-group>\n <overlay-trigger slot=\"first\">\n <sp-action-button slot=\"trigger\" id=\"first\">\n First\n </sp-action-button>\n </overlay-trigger>\n <overlay-trigger slot=\"second\">\n <sp-action-button slot=\"trigger\" id=\"second\">\n Second\n </sp-action-button>\n </overlay-trigger>\n </emphasized-action-group>\n `\n );\n const firstButton = el.querySelector('#first') as ActionButton;\n const secondButton = el.querySelector('#second') as ActionButton;\n\n await elementUpdated(el);\n\n expect(firstButton.hasAttribute('emphasized')).to.be.true;\n expect(firstButton.emphasized).to.be.true;\n expect(secondButton.hasAttribute('emphasized')).to.be.true;\n expect(secondButton.emphasized).to.be.true;\n });\n it('loads [selects=\"single\"] action-group accessibly', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group label=\"Selects Single Group\" selects=\"single\">\n <sp-action-button>First</sp-action-button>\n <sp-action-button>Second</sp-action-button>\n <sp-action-button>Third</sp-action-button>\n </sp-action-group>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n expect(el.getAttribute('aria-label')).to.equal('Selects Single Group');\n expect(el.getAttribute('role')).to.equal('radiogroup');\n expect(el.children[0].getAttribute('role')).to.equal('radio');\n });\n it('loads [selects=\"single\"] action-group w/ selection accessibly', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group label=\"Selects Single Group\" selects=\"single\">\n <sp-action-button>First</sp-action-button>\n <sp-action-button>Second</sp-action-button>\n <sp-action-button selected>Third</sp-action-button>\n </sp-action-group>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('loads [selects=\"multiple\"] action-group accessibly', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects Multiple Group\"\n selects=\"multiple\"\n >\n <sp-action-button>First</sp-action-button>\n <sp-action-button>Second</sp-action-button>\n <sp-action-button>Third</sp-action-button>\n </sp-action-group>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n expect(el.getAttribute('aria-label')).to.equal(\n 'Selects Multiple Group'\n );\n expect(el.getAttribute('role')).to.equal('group');\n expect(el.children[0].getAttribute('role')).to.equal('checkbox');\n });\n it('loads [selects=\"multiple\"] action-group w/ selection accessibly', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects Multiple Group\"\n selects=\"multiple\"\n >\n <sp-action-button>First</sp-action-button>\n <sp-action-button selected>Second</sp-action-button>\n <sp-action-button selected>Third</sp-action-button>\n </sp-action-group>\n `\n );\n\n await elementUpdated(el);\n\n await expect(el).to.be.accessible();\n });\n it('sets tab stop when [selects=\"single\"] and the initial button is [disabled]', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group label=\"Selects Single Group\" selects=\"single\">\n <sp-action-button disabled>First</sp-action-button>\n <sp-action-button class=\"second\">Second</sp-action-button>\n <sp-action-button>Third</sp-action-button>\n </sp-action-group>\n `\n );\n const secondButton = el.querySelector('.second') as ActionButton;\n\n await elementUpdated(el);\n\n expect(secondButton.hasAttribute('tabindex'));\n expect(secondButton.getAttribute('tabindex')).to.equal('0');\n });\n it('surfaces [selects=\"single\"] selection', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group label=\"Selects Single Group\" selects=\"single\">\n <sp-action-button>First</sp-action-button>\n <sp-action-button>Second</sp-action-button>\n <sp-action-button selected>Third</sp-action-button>\n </sp-action-group>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.selected, '\"Third\" selected').to.deep.equal(['Third']);\n });\n it('surfaces [selects=\"multiple\"] selection', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects Multiple Group\"\n selects=\"multiple\"\n >\n <sp-action-button>First</sp-action-button>\n <sp-action-button selected>Second</sp-action-button>\n <sp-action-button selected>Third</sp-action-button>\n </sp-action-group>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.selected, '\"Second\" and \"Third\" selected').to.deep.equal([\n 'Second',\n 'Third',\n ]);\n });\n it('does not select without [selects]', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group label=\"No Selects Group\">\n <sp-action-button>First</sp-action-button>\n <sp-action-button selected>Second</sp-action-button>\n <sp-action-button class=\"third\">Third</sp-action-button>\n </sp-action-group>\n `\n );\n const thirdElement = el.querySelector('.third') as ActionButton;\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(1);\n\n thirdElement.click();\n\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(1);\n });\n it('selects via `click` while [selects=\"single\"]', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group label=\"Selects Single Group\" selects=\"single\">\n <sp-action-button value=\"first\">First</sp-action-button>\n <sp-action-button value=\"second\" selected>\n Second\n </sp-action-button>\n <sp-action-button value=\"third\" class=\"third\">\n Third\n </sp-action-button>\n </sp-action-group>\n `\n );\n const thirdElement = el.querySelector('.third') as ActionButton;\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(1);\n expect(el.selected.includes('second'));\n\n thirdElement.click();\n\n await elementUpdated(el);\n\n expect(thirdElement.selected, 'third child selected').to.be.true;\n\n await waitUntil(\n () => el.selected.length === 1 && el.selected.includes('third'),\n 'Updates value of `selected`'\n );\n });\n it('selects via `click` while [selects=\"multiple\"] selection', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects Multiple Group\"\n selects=\"multiple\"\n >\n <sp-action-button selected class=\"first\">\n First\n </sp-action-button>\n <sp-action-button class=\"second\">Second</sp-action-button>\n <sp-action-button class=\"third\">Third</sp-action-button>\n </sp-action-group>\n `\n );\n const firstElement = el.querySelector('.first') as ActionButton;\n const secondElement = el.querySelector('.second') as ActionButton;\n const thirdElement = el.querySelector('.third') as ActionButton;\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(1);\n expect(el.selected.includes('First'));\n\n firstElement.click();\n secondElement.click();\n thirdElement.click();\n\n await elementUpdated(el);\n\n expect(secondElement.selected, 'second child selected').to.be.true;\n expect(thirdElement.selected, 'third child selected').to.be.true;\n\n await waitUntil(\n () =>\n el.selected.length === 2 &&\n el.selected.includes('Second') &&\n el.selected.includes('Third'),\n 'Updates value of `selected`'\n );\n });\n it('does not respond to clicks on itself', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group label=\"Selects Single Group\" selects=\"single\">\n <sp-action-button>First</sp-action-button>\n <sp-action-button>Second</sp-action-button>\n <sp-action-button class=\"third\">Third</sp-action-button>\n </sp-action-group>\n `\n );\n await elementUpdated(el);\n expect(el.selected.length).to.equal(0);\n\n el.click();\n\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(0);\n });\n it('selection can be prevented', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects Single Group\"\n selects=\"single\"\n @change=${(event: Event): void => {\n event.preventDefault();\n }}\n >\n <sp-action-button>First</sp-action-button>\n <sp-action-button>Second</sp-action-button>\n <sp-action-button class=\"third\">Third</sp-action-button>\n </sp-action-group>\n `\n );\n const thirdElement = el.querySelector('.third') as ActionButton;\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(0);\n\n thirdElement.click();\n\n await elementUpdated(el);\n\n expect(thirdElement.selected, 'third child not selected').to.be.false;\n expect(el.selected.length).to.equal(0);\n });\n\n it('selects user-passed value while [selects=\"single\"]', async () => {\n const el = await singleSelectedActionGroup(['first']);\n await elementUpdated(el);\n expect(el.selected.length).to.equal(1);\n\n const firstButton = el.querySelector('.first') as ActionButton;\n const secondButton = el.querySelector('.second') as ActionButton;\n expect(firstButton.selected, 'first button selected').to.be.true;\n expect(secondButton.selected, 'second button not selected').to.be.false;\n\n secondButton.click();\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(1);\n expect(firstButton.selected, 'first button not selected').to.be.false;\n expect(secondButton.selected, 'second button selected').to.be.true;\n });\n\n it('selects user-passed value while [selects=\"multiple\"]', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects Multiple Group\"\n selects=\"multiple\"\n .selected=${['first', 'second']}\n >\n <sp-action-button class=\"first\" value=\"first\">\n First\n </sp-action-button>\n <sp-action-button class=\"second\" value=\"second\">\n Second\n </sp-action-button>\n <sp-action-button class=\"third \" value=\"third\">\n Third\n </sp-action-button>\n </sp-action-group>\n `\n );\n\n await elementUpdated(el);\n\n const firstButton = el.querySelector('.first') as ActionButton;\n const secondButton = el.querySelector('.second') as ActionButton;\n const thirdButton = el.querySelector('.third') as ActionButton;\n\n expect(el.selected.length).to.equal(2);\n expect(firstButton.selected, 'first button selected').to.be.true;\n expect(secondButton.selected, 'second button selected').to.be.true;\n expect(thirdButton.selected, 'third button not selected').to.be.false;\n\n thirdButton.click();\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(3);\n expect(firstButton.selected, 'first button selected').to.be.true;\n expect(secondButton.selected, 'second button selected').to.be.true;\n expect(thirdButton.selected, 'third button selected').to.be.true;\n\n firstButton.click();\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(2);\n expect(firstButton.selected, 'first button not selected').to.be.false;\n expect(secondButton.selected, 'second button selected').to.be.true;\n expect(thirdButton.selected, 'third button selected').to.be.true;\n });\n\n it('selects multiple user-passed values while [selects=\"single\"], but then proceeds with radio-button style functionality', async () => {\n const el = await singleSelectedActionGroup(['first', 'second']);\n await elementUpdated(el);\n expect(el.selected.length).to.equal(2);\n\n const firstButton = el.querySelector('.first') as ActionButton;\n const secondButton = el.querySelector('.second') as ActionButton;\n expect(firstButton.selected, 'first button selected').to.be.true;\n expect(secondButton.selected, 'second button selected').to.be.true;\n\n secondButton.click();\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(1);\n expect(firstButton.selected, 'first button selected').to.be.false;\n expect(secondButton.selected, 'second button selected').to.be.true;\n });\n\n it('only selects user-passed buttons if present in action-group while [selects=\"multiple\"]', async () => {\n const el = await multipleSelectedActionGroup(['second', 'fourth']);\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(1);\n const secondButton = el.querySelector('.second') as ActionButton;\n expect(secondButton.selected, 'second button selected').to.be.true;\n\n const firstButton = el.querySelector('.first') as ActionButton;\n expect(firstButton.selected, 'first button selected').to.be.false;\n });\n\n it('selects user-passed values with no .selects value, but does not allow interaction afterwards', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects User-Chosen Buttons\"\n .selected=${['first']}\n >\n <sp-action-button value=\"first\" class=\"first\">\n First\n </sp-action-button>\n <sp-action-button value=\"second\" class=\"second\">\n Second\n </sp-action-button>\n </sp-action-group>\n `\n );\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(1);\n const firstButton = el.querySelector('.first') as ActionButton;\n const secondButton = el.querySelector('.second') as ActionButton;\n expect(firstButton.selected, 'first button selected').to.be.true;\n expect(secondButton.selected, 'second button selected').to.be.false;\n\n secondButton.click();\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(1);\n expect(firstButton.selected, 'first button selected').to.be.true;\n expect(secondButton.selected, 'second button selected').to.be.false;\n });\n\n it('selects multiple buttons if .selected is passed in, but does not allow further interaction afterwards', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects User-Chosen Buttons\"\n .selected=${['first', 'second']}\n >\n <sp-action-button class=\"first\" value=\"first\">\n First\n </sp-action-button>\n <sp-action-button class=\"second\" value=\"second\">\n Second\n </sp-action-button>\n </sp-action-group>\n `\n );\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(2);\n\n const firstButton = el.querySelector('.first') as ActionButton;\n expect(firstButton.selected, 'first button selected').to.be.true;\n\n const secondButton = el.querySelector('.second') as ActionButton;\n expect(secondButton.selected, 'second button selected').to.be.true;\n\n firstButton.click();\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(2);\n expect(firstButton.selected, 'first button selected').to.be.true;\n expect(secondButton.selected, 'second button selected').to.be.true;\n });\n\n it('will not change .selected state if event is prevented while [selects=\"multiple\"]', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects Multiple Group\"\n selects=\"multiple\"\n .selected=${['first', 'second']}\n @change=${(event: Event): void => {\n event.preventDefault();\n }}\n >\n <sp-action-button class=\"first\" value=\"first\">\n First\n </sp-action-button>\n <sp-action-button class=\"second\" value=\"second\">\n Second\n </sp-action-button>\n <sp-action-button class=\"third \" value=\"third\">\n Third\n </sp-action-button>\n </sp-action-group>\n `\n );\n const firstElement = el.querySelector('.first') as ActionButton;\n const secondElement = el.querySelector('.second') as ActionButton;\n const thirdElement = el.querySelector('.third') as ActionButton;\n\n // checking if the first and second are selected\n await elementUpdated(el);\n expect(el.selected.length).to.equal(2);\n expect(firstElement.selected, 'first child selected').to.be.true;\n expect(secondElement.selected, 'second child selected').to.be.true;\n\n // making sure third element isn't selected\n thirdElement.click();\n await elementUpdated(el);\n expect(thirdElement.selected, 'third child not selected').to.be.false;\n expect(el.selected.length).to.equal(2);\n\n // making sure already-selected elements are not de-selected\n secondElement.click();\n await elementUpdated(el);\n\n expect(secondElement.selected, 'second element still selected').to.be\n .true;\n });\n\n it('will not change .selected state if event is prevented while [selects=\"single\"]', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects Single Group\"\n selects=\"single\"\n .selected=${['first']}\n @change=${(event: Event): void => {\n event.preventDefault();\n }}\n >\n <sp-action-button class=\"first\" value=\"first\">\n First\n </sp-action-button>\n <sp-action-button class=\"second\" value=\"second\">\n Second\n </sp-action-button>\n </sp-action-group>\n `\n );\n const firstElement = el.querySelector('.first') as ActionButton;\n const secondElement = el.querySelector('.second') as ActionButton;\n\n // checking if the first element is selected\n await elementUpdated(el);\n expect(el.selected.length).to.equal(1);\n expect(firstElement.selected, 'first child selected').to.be.true;\n\n // making sure third element isn't selected\n secondElement.click();\n\n await elementUpdated(el);\n\n expect(secondElement.selected, 'second child not selected').to.be.false;\n expect(el.selected.length).to.equal(1);\n\n // making sure already-selected elements are not de-selected\n firstElement.click();\n await elementUpdated(el);\n\n expect(firstElement.selected, 'first element still selected').to.be\n .true;\n });\n\n it('will not change .selected state if event is prevented while selects is undefined', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects Single Group\"\n .selected=${['first']}\n @change=${(event: Event): void => {\n event.preventDefault();\n }}\n >\n <sp-action-button class=\"first\" value=\"first\">\n First\n </sp-action-button>\n <sp-action-button class=\"second\" value=\"second\">\n Second\n </sp-action-button>\n </sp-action-group>\n `\n );\n const firstElement = el.querySelector('.first') as ActionButton;\n const secondElement = el.querySelector('.second') as ActionButton;\n\n // checking if the first element is selected\n await elementUpdated(el);\n expect(el.selected.length).to.equal(1);\n expect(firstElement.selected, 'first child selected').to.be.true;\n\n secondElement.click();\n await elementUpdated(el);\n\n // state should be exactly the same\n expect(el.selected.length).to.equal(1);\n expect(firstElement.selected, 'first child selected').to.be.true;\n expect(secondElement.selected, 'second child not selected').to.be.false;\n });\n\n it('will accept selected as a JSON string', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects Single Group\"\n selects=\"single\"\n selected='[\"first\"]'\n >\n <sp-action-button class=\"first\" value=\"first\">\n First\n </sp-action-button>\n <sp-action-button class=\"second\" value=\"second\">\n Second\n </sp-action-button>\n </sp-action-group>\n `\n );\n // checking if the first element is selected\n await elementUpdated(el);\n const firstElement = el.querySelector('.first') as ActionButton;\n const secondElement = el.querySelector('.second') as ActionButton;\n\n expect(el.selected.length).to.equal(1);\n expect(firstElement.selected, 'first child selected').to.be.true;\n expect(secondElement.selected, 'second child selected').to.be.false;\n });\n\n const acceptKeyboardInput = async (el: ActionGroup): Promise<void> => {\n const thirdElement = el.querySelector('.third') as ActionButton;\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(1);\n expect(el.selected[0]).to.equal('Second');\n\n thirdElement.click();\n\n await elementUpdated(el);\n\n expect(thirdElement.selected, 'third child selected').to.be.true;\n expect(el.selected.length).to.equal(1);\n expect(el.selected[0]).to.equal('Third');\n\n el.dispatchEvent(arrowRightEvent());\n await sendKeys({ press: 'Enter' });\n\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(1);\n expect(el.selected[0]).to.equal('First');\n\n el.dispatchEvent(arrowLeftEvent());\n el.dispatchEvent(arrowUpEvent());\n await sendKeys({ press: 'Enter' });\n\n expect(el.selected.length).to.equal(1);\n expect(el.selected[0]).to.equal('Second');\n\n el.dispatchEvent(endEvent());\n await sendKeys({ press: 'Enter' });\n\n expect(el.selected.length).to.equal(1);\n expect(el.selected[0]).to.equal('Third');\n\n await sendKeys({ press: 'Enter' });\n\n el.dispatchEvent(homeEvent());\n await sendKeys({ press: 'Enter' });\n\n expect(el.selected.length).to.equal(1);\n expect(el.selected[0]).to.equal('First');\n\n el.dispatchEvent(arrowDownEvent());\n await sendKeys({ press: 'Enter' });\n\n expect(el.selected.length).to.equal(1);\n expect(el.selected[0]).to.equal('Second');\n };\n it('accepts keybord input', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group label=\"Selects Single Group\" selects=\"single\">\n <sp-action-button>First</sp-action-button>\n <sp-action-button selected>Second</sp-action-button>\n <sp-action-button class=\"third\">Third</sp-action-button>\n </sp-action-group>\n `\n );\n await acceptKeyboardInput(el);\n });\n it('accepts keybord input with tooltip', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group label=\"Selects Single Group\" selects=\"single\">\n <overlay-trigger>\n <sp-action-button slot=\"trigger\">\n First\n </sp-action-button>\n <sp-tooltip slot=\"hover-content\">\n Definitely the first one.\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger>\n <sp-action-button slot=\"trigger\" selected>\n Second\n </sp-action-button>\n <sp-tooltip slot=\"hover-content\">\n Not the first, not the last.\n </sp-tooltip>\n </overlay-trigger>\n <overlay-trigger>\n <sp-action-button slot=\"trigger\" class=\"third\">\n Third\n </sp-action-button>\n <sp-tooltip slot=\"hover-content\">Select me.</sp-tooltip>\n </overlay-trigger>\n </sp-action-group>\n `\n );\n await acceptKeyboardInput(el);\n });\n it('accepts keybord input when [dir=\"ltr\"]', async () => {\n const el = await fixture<ActionGroup>(\n html`\n <sp-action-group\n label=\"Selects Single Group\"\n selects=\"single\"\n dir=\"ltr\"\n >\n <sp-action-button>First</sp-action-button>\n <sp-action-button disabled>Second</sp-action-button>\n <sp-action-button class=\"third\">Third</sp-action-button>\n </sp-action-group>\n `\n );\n const thirdElement = el.querySelector('.third') as ActionButton;\n\n await elementUpdated(el);\n expect(el.selected.length).to.equal(0);\n\n thirdElement.click();\n\n await elementUpdated(el);\n\n expect(thirdElement.selected, 'third child selected').to.be.true;\n expect(el.selected.length).to.equal(1);\n expect(el.selected[0]).to.equal('Third');\n\n el.dispatchEvent(arrowRightEvent());\n await sendKeys({ press: 'Enter' });\n\n await elementUpdated(el);\n\n expect(el.selected.length).to.equal(1);\n expect(el.selected[0]).to.equal('First');\n\n el.dispatchEvent(arrowUpEvent());\n await sendKeys({ press: 'Enter' });\n\n expect(el.selected.length).to.equal(1);\n expect(el.selected[0]).to.equal('Third');\n });\n});\n"]}
@@ -0,0 +1,18 @@
1
+ /*
2
+ Copyright 2020 Adobe. All rights reserved.
3
+ This file is licensed to you under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License. You may obtain a copy
5
+ of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+
7
+ Unless required by applicable law or agreed to in writing, software distributed under
8
+ the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS
9
+ OF ANY KIND, either express or implied. See the License for the specific language
10
+ governing permissions and limitations under the License.
11
+ */
12
+ import '@spectrum-web-components/action-group/sp-action-group.js';
13
+ import { html } from 'lit';
14
+ import { measureFixtureCreation } from '../../../../test/benchmark/helpers.js';
15
+ measureFixtureCreation(html `
16
+ <sp-action-group open></sp-action-group>
17
+ `);
18
+ //# sourceMappingURL=basic-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basic-test.js","sourceRoot":"","sources":["basic-test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;EAUE;AAEF,OAAO,0DAA0D,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAE/E,sBAAsB,CAAC,IAAI,CAAA;;CAE1B,CAAC,CAAC","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/action-group/sp-action-group.js';\nimport { html } from 'lit';\nimport { measureFixtureCreation } from '../../../../test/benchmark/helpers.js';\n\nmeasureFixtureCreation(html`\n <sp-action-group open></sp-action-group>\n`);\n"]}