@spectrum-web-components/action-group 0.8.3 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/custom-elements.json +36 -7
- package/package.json +6 -6
- package/src/ActionGroup.d.ts +4 -1
- package/src/ActionGroup.js +36 -13
- package/src/ActionGroup.js.map +1 -1
- package/test/action-group.test.js +53 -0
- package/test/action-group.test.js.map +1 -1
package/custom-elements.json
CHANGED
|
@@ -137,14 +137,21 @@
|
|
|
137
137
|
"attribute": "vertical",
|
|
138
138
|
"reflects": true
|
|
139
139
|
},
|
|
140
|
+
{
|
|
141
|
+
"kind": "field",
|
|
142
|
+
"name": "_selected",
|
|
143
|
+
"type": {
|
|
144
|
+
"text": "string[]"
|
|
145
|
+
},
|
|
146
|
+
"privacy": "private",
|
|
147
|
+
"default": "[]"
|
|
148
|
+
},
|
|
140
149
|
{
|
|
141
150
|
"kind": "field",
|
|
142
151
|
"name": "selected",
|
|
143
152
|
"type": {
|
|
144
153
|
"text": "string[]"
|
|
145
154
|
},
|
|
146
|
-
"privacy": "public",
|
|
147
|
-
"default": "[]",
|
|
148
155
|
"attribute": "selected"
|
|
149
156
|
},
|
|
150
157
|
{
|
|
@@ -180,6 +187,13 @@
|
|
|
180
187
|
"type": {
|
|
181
188
|
"text": "string[]"
|
|
182
189
|
}
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
"name": "announce",
|
|
193
|
+
"optional": true,
|
|
194
|
+
"type": {
|
|
195
|
+
"text": "boolean"
|
|
196
|
+
}
|
|
183
197
|
}
|
|
184
198
|
]
|
|
185
199
|
},
|
|
@@ -232,7 +246,7 @@
|
|
|
232
246
|
},
|
|
233
247
|
{
|
|
234
248
|
"kind": "method",
|
|
235
|
-
"name": "
|
|
249
|
+
"name": "applySelects",
|
|
236
250
|
"privacy": "private",
|
|
237
251
|
"return": {
|
|
238
252
|
"type": {
|
|
@@ -240,6 +254,25 @@
|
|
|
240
254
|
}
|
|
241
255
|
}
|
|
242
256
|
},
|
|
257
|
+
{
|
|
258
|
+
"kind": "method",
|
|
259
|
+
"name": "manageSelects",
|
|
260
|
+
"privacy": "private",
|
|
261
|
+
"return": {
|
|
262
|
+
"type": {
|
|
263
|
+
"text": "Promise<void>"
|
|
264
|
+
}
|
|
265
|
+
},
|
|
266
|
+
"parameters": [
|
|
267
|
+
{
|
|
268
|
+
"name": "applied",
|
|
269
|
+
"optional": true,
|
|
270
|
+
"type": {
|
|
271
|
+
"text": "boolean"
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
]
|
|
275
|
+
},
|
|
243
276
|
{
|
|
244
277
|
"kind": "method",
|
|
245
278
|
"name": "manageChildren",
|
|
@@ -334,10 +367,6 @@
|
|
|
334
367
|
"type": {
|
|
335
368
|
"text": "string[]"
|
|
336
369
|
},
|
|
337
|
-
"default": "EMPTY_SELECTION",
|
|
338
|
-
"resolveInitializer": {
|
|
339
|
-
"module": "src/ActionGroup.ts"
|
|
340
|
-
},
|
|
341
370
|
"fieldName": "selected"
|
|
342
371
|
}
|
|
343
372
|
],
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/action-group",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.4",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -44,18 +44,18 @@
|
|
|
44
44
|
"lit-html"
|
|
45
45
|
],
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@spectrum-web-components/action-button": "^0.8.
|
|
48
|
-
"@spectrum-web-components/base": "^0.5.
|
|
49
|
-
"@spectrum-web-components/reactive-controllers": "^0.2.
|
|
47
|
+
"@spectrum-web-components/action-button": "^0.8.4",
|
|
48
|
+
"@spectrum-web-components/base": "^0.5.6",
|
|
49
|
+
"@spectrum-web-components/reactive-controllers": "^0.2.3",
|
|
50
50
|
"tslib": "^2.0.0"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@spectrum-css/actiongroup": "^1.0.
|
|
53
|
+
"@spectrum-css/actiongroup": "^1.0.24"
|
|
54
54
|
},
|
|
55
55
|
"types": "./src/index.d.ts",
|
|
56
56
|
"customElements": "custom-elements.json",
|
|
57
57
|
"sideEffects": [
|
|
58
58
|
"./sp-*.js"
|
|
59
59
|
],
|
|
60
|
-
"gitHead": "
|
|
60
|
+
"gitHead": "32e049a0da090ffc1a54cfe3234be4d5efc73339"
|
|
61
61
|
}
|
package/src/ActionGroup.d.ts
CHANGED
|
@@ -21,12 +21,15 @@ export declare class ActionGroup extends SpectrumElement {
|
|
|
21
21
|
quiet: boolean;
|
|
22
22
|
selects: undefined | 'single' | 'multiple';
|
|
23
23
|
vertical: boolean;
|
|
24
|
-
|
|
24
|
+
private _selected;
|
|
25
|
+
set selected(selected: string[]);
|
|
26
|
+
get selected(): string[];
|
|
25
27
|
private dispatchChange;
|
|
26
28
|
private setSelected;
|
|
27
29
|
focus(options?: FocusOptions): void;
|
|
28
30
|
private deselectSelectedButtons;
|
|
29
31
|
private handleClick;
|
|
32
|
+
private applySelects;
|
|
30
33
|
private manageSelects;
|
|
31
34
|
protected render(): TemplateResult;
|
|
32
35
|
protected firstUpdated(changes: PropertyValues): void;
|
package/src/ActionGroup.js
CHANGED
|
@@ -48,7 +48,7 @@ export class ActionGroup extends SpectrumElement {
|
|
|
48
48
|
this.label = '';
|
|
49
49
|
this.quiet = false;
|
|
50
50
|
this.vertical = false;
|
|
51
|
-
this.
|
|
51
|
+
this._selected = EMPTY_SELECTION;
|
|
52
52
|
this.manageButtons = () => {
|
|
53
53
|
const slot = this.shadowRoot.querySelector('slot');
|
|
54
54
|
if (!slot)
|
|
@@ -72,7 +72,7 @@ export class ActionGroup extends SpectrumElement {
|
|
|
72
72
|
currentlySelectedButtons.push(button.value);
|
|
73
73
|
}
|
|
74
74
|
});
|
|
75
|
-
this.
|
|
75
|
+
this.setSelected(this.selected.concat(currentlySelectedButtons));
|
|
76
76
|
this.manageChildren();
|
|
77
77
|
this.manageSelects();
|
|
78
78
|
};
|
|
@@ -89,6 +89,17 @@ export class ActionGroup extends SpectrumElement {
|
|
|
89
89
|
get buttons() {
|
|
90
90
|
return this._buttons;
|
|
91
91
|
}
|
|
92
|
+
set selected(selected) {
|
|
93
|
+
this.requestUpdate('selected', this._selected);
|
|
94
|
+
this._selected = selected;
|
|
95
|
+
this.updateComplete.then(() => {
|
|
96
|
+
this.applySelects();
|
|
97
|
+
this.manageChildren();
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
get selected() {
|
|
101
|
+
return this._selected;
|
|
102
|
+
}
|
|
92
103
|
dispatchChange(old) {
|
|
93
104
|
const applyDefault = this.dispatchEvent(new Event('change', {
|
|
94
105
|
bubbles: true,
|
|
@@ -96,17 +107,20 @@ export class ActionGroup extends SpectrumElement {
|
|
|
96
107
|
cancelable: true,
|
|
97
108
|
}));
|
|
98
109
|
if (!applyDefault) {
|
|
99
|
-
this.
|
|
110
|
+
this.setSelected(old);
|
|
100
111
|
this.buttons.map((button) => {
|
|
101
112
|
button.selected = this.selected.includes(button.value);
|
|
102
113
|
});
|
|
103
114
|
}
|
|
104
115
|
}
|
|
105
|
-
setSelected(selected) {
|
|
116
|
+
setSelected(selected, announce) {
|
|
106
117
|
if (selected === this.selected)
|
|
107
118
|
return;
|
|
108
119
|
const old = this.selected;
|
|
109
|
-
this.selected
|
|
120
|
+
this.requestUpdate('selected', old);
|
|
121
|
+
this._selected = selected;
|
|
122
|
+
if (!announce)
|
|
123
|
+
return;
|
|
110
124
|
this.dispatchChange(old);
|
|
111
125
|
}
|
|
112
126
|
focus(options) {
|
|
@@ -133,7 +147,7 @@ export class ActionGroup extends SpectrumElement {
|
|
|
133
147
|
target.selected = true;
|
|
134
148
|
target.tabIndex = 0;
|
|
135
149
|
target.setAttribute('aria-checked', 'true');
|
|
136
|
-
this.setSelected([target.value]);
|
|
150
|
+
this.setSelected([target.value], true);
|
|
137
151
|
target.focus();
|
|
138
152
|
break;
|
|
139
153
|
}
|
|
@@ -147,7 +161,7 @@ export class ActionGroup extends SpectrumElement {
|
|
|
147
161
|
else {
|
|
148
162
|
selected.splice(this.selected.indexOf(target.value), 1);
|
|
149
163
|
}
|
|
150
|
-
this.setSelected(selected);
|
|
164
|
+
this.setSelected(selected, true);
|
|
151
165
|
this.buttons.forEach((button) => {
|
|
152
166
|
button.tabIndex = -1;
|
|
153
167
|
});
|
|
@@ -158,7 +172,10 @@ export class ActionGroup extends SpectrumElement {
|
|
|
158
172
|
break;
|
|
159
173
|
}
|
|
160
174
|
}
|
|
161
|
-
async
|
|
175
|
+
async applySelects() {
|
|
176
|
+
await this.manageSelects(true);
|
|
177
|
+
}
|
|
178
|
+
async manageSelects(applied) {
|
|
162
179
|
if (!this.buttons.length) {
|
|
163
180
|
return;
|
|
164
181
|
}
|
|
@@ -175,11 +192,13 @@ export class ActionGroup extends SpectrumElement {
|
|
|
175
192
|
selections.push(option);
|
|
176
193
|
}
|
|
177
194
|
});
|
|
195
|
+
if (applied)
|
|
196
|
+
break;
|
|
178
197
|
await Promise.all(updates);
|
|
179
198
|
const selected = selections.map((button) => {
|
|
180
199
|
return button.value;
|
|
181
200
|
});
|
|
182
|
-
this.selected
|
|
201
|
+
this.setSelected(selected || EMPTY_SELECTION);
|
|
183
202
|
break;
|
|
184
203
|
}
|
|
185
204
|
case 'multiple': {
|
|
@@ -195,11 +214,13 @@ export class ActionGroup extends SpectrumElement {
|
|
|
195
214
|
selections.push(option);
|
|
196
215
|
}
|
|
197
216
|
});
|
|
217
|
+
if (applied)
|
|
218
|
+
break;
|
|
198
219
|
await Promise.all(updates);
|
|
199
220
|
const selected = !!selection.length
|
|
200
221
|
? selection
|
|
201
222
|
: EMPTY_SELECTION;
|
|
202
|
-
this.selected
|
|
223
|
+
this.setSelected(selected);
|
|
203
224
|
break;
|
|
204
225
|
}
|
|
205
226
|
default:
|
|
@@ -214,10 +235,12 @@ export class ActionGroup extends SpectrumElement {
|
|
|
214
235
|
selections.push(option);
|
|
215
236
|
}
|
|
216
237
|
});
|
|
238
|
+
if (applied)
|
|
239
|
+
break;
|
|
217
240
|
await Promise.all(updates);
|
|
218
|
-
this.
|
|
241
|
+
this.setSelected(selections.map((button) => {
|
|
219
242
|
return button.value;
|
|
220
|
-
});
|
|
243
|
+
}));
|
|
221
244
|
}
|
|
222
245
|
else {
|
|
223
246
|
this.buttons.forEach((option) => {
|
|
@@ -301,5 +324,5 @@ __decorate([
|
|
|
301
324
|
], ActionGroup.prototype, "vertical", void 0);
|
|
302
325
|
__decorate([
|
|
303
326
|
property({ type: Array })
|
|
304
|
-
], ActionGroup.prototype, "selected",
|
|
327
|
+
], ActionGroup.prototype, "selected", null);
|
|
305
328
|
//# sourceMappingURL=ActionGroup.js.map
|
package/src/ActionGroup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActionGroup.js","sourceRoot":"","sources":["ActionGroup.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 CSSResultArray,\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport type { ActionButton } from '@spectrum-web-components/action-button';\nimport { RovingTabindexController } from '@spectrum-web-components/reactive-controllers/src/RovingTabindex.js';\n\nimport styles from './action-group.css.js';\n\nconst EMPTY_SELECTION: string[] = [];\n\n/**\n * @element sp-action-group\n * @slot - the sp-action-button elements that make up the group\n *\n * @fires change - Announces that selection state has been changed by user\n */\nexport class ActionGroup extends SpectrumElement {\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n public set buttons(tabs: ActionButton[]) {\n if (tabs === this.buttons) return;\n this._buttons = tabs;\n this.rovingTabindexController.clearElementCache();\n }\n\n public get buttons(): ActionButton[] {\n return this._buttons;\n }\n\n public _buttons: ActionButton[] = [];\n\n protected _buttonSelector = 'sp-action-button';\n\n rovingTabindexController = new RovingTabindexController<ActionButton>(\n this,\n {\n focusInIndex: (elements: ActionButton[]) => {\n let firstEnabledIndex = -1;\n const firstSelectedIndex = elements.findIndex((el, index) => {\n if (!elements[firstEnabledIndex] && !el.disabled) {\n firstEnabledIndex = index;\n }\n return el.selected && !el.disabled;\n });\n return elements[firstSelectedIndex]\n ? firstSelectedIndex\n : firstEnabledIndex;\n },\n elements: () => this.buttons,\n isFocusableElement: (el: ActionButton) => !el.disabled,\n }\n );\n\n @property({ type: Boolean, reflect: true })\n public compact = false;\n\n @property({ type: Boolean, reflect: true })\n public emphasized = false;\n\n @property({ type: Boolean, reflect: true })\n public justified = false;\n\n @property({ type: String })\n public label = '';\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ type: String })\n public selects: undefined | 'single' | 'multiple';\n\n @property({ type: Boolean, reflect: true })\n public vertical = false;\n\n @property({ type: Array })\n public selected: string[] = EMPTY_SELECTION;\n\n private dispatchChange(old: string[]): void {\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n composed: true,\n cancelable: true,\n })\n );\n\n if (!applyDefault) {\n this.selected = old;\n this.buttons.map((button) => {\n button.selected = this.selected.includes(button.value);\n });\n }\n }\n\n private setSelected(selected: string[]): void {\n if (selected === this.selected) return;\n\n const old = this.selected;\n this.selected = selected;\n this.dispatchChange(old);\n }\n\n public focus(options?: FocusOptions): void {\n this.rovingTabindexController.focus(options);\n }\n\n private deselectSelectedButtons(): void {\n const selected = [\n ...this.querySelectorAll('[selected]'),\n ] as ActionButton[];\n selected.forEach((el) => {\n el.selected = false;\n el.tabIndex = -1;\n el.setAttribute('aria-checked', 'false');\n });\n }\n\n private handleClick(event: Event): void {\n const target = event.target as ActionButton;\n if (typeof target.value === 'undefined') {\n return;\n }\n switch (this.selects) {\n case 'single': {\n this.deselectSelectedButtons();\n target.selected = true;\n target.tabIndex = 0;\n target.setAttribute('aria-checked', 'true');\n this.setSelected([target.value]);\n target.focus();\n break;\n }\n case 'multiple': {\n const selected = [...this.selected];\n target.selected = !target.selected;\n target.setAttribute(\n 'aria-checked',\n target.selected ? 'true' : 'false'\n );\n if (target.selected) {\n selected.push(target.value);\n } else {\n selected.splice(this.selected.indexOf(target.value), 1);\n }\n this.setSelected(selected);\n\n this.buttons.forEach((button) => {\n button.tabIndex = -1;\n });\n\n target.tabIndex = 0;\n\n break;\n }\n default:\n break;\n }\n }\n\n private async manageSelects(): Promise<void> {\n if (!this.buttons.length) {\n return;\n }\n\n const options = this.buttons;\n switch (this.selects) {\n case 'single': {\n this.setAttribute('role', 'radiogroup');\n const selections: ActionButton[] = [];\n const updates = options.map(async (option) => {\n await option.updateComplete;\n option.setAttribute('role', 'radio');\n option.setAttribute(\n 'aria-checked',\n option.selected ? 'true' : 'false'\n );\n if (option.selected) {\n selections.push(option);\n }\n });\n await Promise.all(updates);\n\n const selected = selections.map((button) => {\n return button.value;\n });\n\n this.selected = selected || EMPTY_SELECTION;\n break;\n }\n case 'multiple': {\n this.setAttribute('role', 'group');\n const selection: string[] = [];\n const selections: ActionButton[] = [];\n const updates = options.map(async (option) => {\n await option.updateComplete;\n option.setAttribute('role', 'checkbox');\n option.setAttribute(\n 'aria-checked',\n option.selected ? 'true' : 'false'\n );\n if (option.selected) {\n selection.push(option.value);\n selections.push(option);\n }\n });\n await Promise.all(updates);\n const selected = !!selection.length\n ? selection\n : EMPTY_SELECTION;\n this.selected = selected;\n break;\n }\n default:\n // if user defines .selected\n if (this.selected.length) {\n const selections: ActionButton[] = [];\n const updates = options.map(async (option) => {\n await option.updateComplete;\n option.setAttribute(\n 'aria-checked',\n option.selected ? 'true' : 'false'\n );\n option.setAttribute('role', 'button');\n if (option.selected) {\n selections.push(option);\n }\n });\n await Promise.all(updates);\n\n this.selected = selections.map((button) => {\n return button.value;\n });\n } else {\n this.buttons.forEach((option) => {\n option.setAttribute('role', 'button');\n });\n this.removeAttribute('role');\n break;\n }\n }\n }\n\n protected render(): TemplateResult {\n return html`\n <slot role=\"presentation\" @slotchange=${this.manageButtons}></slot>\n `;\n }\n\n protected firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('click', this.handleClick);\n }\n\n protected updated(changes: PropertyValues): void {\n super.updated(changes);\n if (changes.has('selects')) {\n this.manageSelects();\n this.manageChildren();\n }\n if (\n (changes.has('quiet') && this.quiet) ||\n (changes.has('emphasized') && this.emphasized)\n ) {\n this.manageChildren();\n }\n // Update `aria-label` when `label` available or not first `updated`\n if (\n changes.has('label') &&\n (this.label || typeof changes.get('label') !== 'undefined')\n ) {\n if (this.label.length) {\n this.setAttribute('aria-label', this.label);\n } else {\n this.removeAttribute('aria-label');\n }\n }\n }\n\n private manageChildren(): void {\n this.buttons.forEach((button) => {\n button.quiet = this.quiet;\n button.emphasized = this.emphasized;\n button.selected = this.selected.includes(button.value);\n });\n }\n\n private manageButtons = (): void => {\n const slot = this.shadowRoot.querySelector('slot');\n if (!slot) return;\n const assignedElements = slot.assignedElements({ flatten: true });\n const buttons = assignedElements.reduce((acc: unknown[], el) => {\n if (el.matches(this._buttonSelector)) {\n acc.push(el);\n } else {\n const buttonDescendents = Array.from(\n el.querySelectorAll(`:scope > ${this._buttonSelector}`)\n );\n acc.push(...buttonDescendents);\n }\n return acc;\n }, []);\n this.buttons = buttons as ActionButton[];\n // <selected> element merges selected so following paradigm here\n const currentlySelectedButtons: string[] = [];\n this.buttons.forEach((button: ActionButton) => {\n if (button.selected) {\n currentlySelectedButtons.push(button.value);\n }\n });\n this.selected = this.selected.concat(currentlySelectedButtons);\n this.manageChildren();\n this.manageSelects();\n };\n\n public connectedCallback(): void {\n super.connectedCallback();\n if (!this.observer) {\n this.observer = new MutationObserver(this.manageButtons);\n this.manageButtons();\n }\n this.observer.observe(this, { childList: true, subtree: true });\n }\n\n public disconnectedCallback(): void {\n this.observer.disconnect();\n super.disconnectedCallback();\n }\n\n private observer!: MutationObserver;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ActionGroup.js","sourceRoot":"","sources":["ActionGroup.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 CSSResultArray,\n html,\n PropertyValues,\n SpectrumElement,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { property } from '@spectrum-web-components/base/src/decorators.js';\nimport type { ActionButton } from '@spectrum-web-components/action-button';\nimport { RovingTabindexController } from '@spectrum-web-components/reactive-controllers/src/RovingTabindex.js';\n\nimport styles from './action-group.css.js';\n\nconst EMPTY_SELECTION: string[] = [];\n\n/**\n * @element sp-action-group\n * @slot - the sp-action-button elements that make up the group\n *\n * @fires change - Announces that selection state has been changed by user\n */\nexport class ActionGroup extends SpectrumElement {\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n public set buttons(tabs: ActionButton[]) {\n if (tabs === this.buttons) return;\n this._buttons = tabs;\n this.rovingTabindexController.clearElementCache();\n }\n\n public get buttons(): ActionButton[] {\n return this._buttons;\n }\n\n public _buttons: ActionButton[] = [];\n\n protected _buttonSelector = 'sp-action-button';\n\n rovingTabindexController = new RovingTabindexController<ActionButton>(\n this,\n {\n focusInIndex: (elements: ActionButton[]) => {\n let firstEnabledIndex = -1;\n const firstSelectedIndex = elements.findIndex((el, index) => {\n if (!elements[firstEnabledIndex] && !el.disabled) {\n firstEnabledIndex = index;\n }\n return el.selected && !el.disabled;\n });\n return elements[firstSelectedIndex]\n ? firstSelectedIndex\n : firstEnabledIndex;\n },\n elements: () => this.buttons,\n isFocusableElement: (el: ActionButton) => !el.disabled,\n }\n );\n\n @property({ type: Boolean, reflect: true })\n public compact = false;\n\n @property({ type: Boolean, reflect: true })\n public emphasized = false;\n\n @property({ type: Boolean, reflect: true })\n public justified = false;\n\n @property({ type: String })\n public label = '';\n\n @property({ type: Boolean, reflect: true })\n public quiet = false;\n\n @property({ type: String })\n public selects: undefined | 'single' | 'multiple';\n\n @property({ type: Boolean, reflect: true })\n public vertical = false;\n\n private _selected: string[] = EMPTY_SELECTION;\n\n set selected(selected: string[]) {\n this.requestUpdate('selected', this._selected);\n this._selected = selected;\n this.updateComplete.then(() => {\n this.applySelects();\n this.manageChildren();\n });\n }\n\n @property({ type: Array })\n get selected(): string[] {\n return this._selected;\n }\n\n private dispatchChange(old: string[]): void {\n const applyDefault = this.dispatchEvent(\n new Event('change', {\n bubbles: true,\n composed: true,\n cancelable: true,\n })\n );\n\n if (!applyDefault) {\n this.setSelected(old);\n this.buttons.map((button) => {\n button.selected = this.selected.includes(button.value);\n });\n }\n }\n\n private setSelected(selected: string[], announce?: boolean): void {\n if (selected === this.selected) return;\n\n const old = this.selected;\n this.requestUpdate('selected', old);\n this._selected = selected;\n if (!announce) return;\n this.dispatchChange(old);\n }\n\n public focus(options?: FocusOptions): void {\n this.rovingTabindexController.focus(options);\n }\n\n private deselectSelectedButtons(): void {\n const selected = [\n ...this.querySelectorAll('[selected]'),\n ] as ActionButton[];\n selected.forEach((el) => {\n el.selected = false;\n el.tabIndex = -1;\n el.setAttribute('aria-checked', 'false');\n });\n }\n\n private handleClick(event: Event): void {\n const target = event.target as ActionButton;\n if (typeof target.value === 'undefined') {\n return;\n }\n switch (this.selects) {\n case 'single': {\n this.deselectSelectedButtons();\n target.selected = true;\n target.tabIndex = 0;\n target.setAttribute('aria-checked', 'true');\n this.setSelected([target.value], true);\n target.focus();\n break;\n }\n case 'multiple': {\n const selected = [...this.selected];\n target.selected = !target.selected;\n target.setAttribute(\n 'aria-checked',\n target.selected ? 'true' : 'false'\n );\n if (target.selected) {\n selected.push(target.value);\n } else {\n selected.splice(this.selected.indexOf(target.value), 1);\n }\n this.setSelected(selected, true);\n\n this.buttons.forEach((button) => {\n button.tabIndex = -1;\n });\n\n target.tabIndex = 0;\n\n break;\n }\n default:\n break;\n }\n }\n\n private async applySelects(): Promise<void> {\n await this.manageSelects(true);\n }\n\n private async manageSelects(applied?: boolean): Promise<void> {\n if (!this.buttons.length) {\n return;\n }\n\n const options = this.buttons;\n switch (this.selects) {\n case 'single': {\n this.setAttribute('role', 'radiogroup');\n const selections: ActionButton[] = [];\n const updates = options.map(async (option) => {\n await option.updateComplete;\n option.setAttribute('role', 'radio');\n option.setAttribute(\n 'aria-checked',\n option.selected ? 'true' : 'false'\n );\n if (option.selected) {\n selections.push(option);\n }\n });\n if (applied) break;\n await Promise.all(updates);\n\n const selected = selections.map((button) => {\n return button.value;\n });\n\n this.setSelected(selected || EMPTY_SELECTION);\n break;\n }\n case 'multiple': {\n this.setAttribute('role', 'group');\n const selection: string[] = [];\n const selections: ActionButton[] = [];\n const updates = options.map(async (option) => {\n await option.updateComplete;\n option.setAttribute('role', 'checkbox');\n option.setAttribute(\n 'aria-checked',\n option.selected ? 'true' : 'false'\n );\n if (option.selected) {\n selection.push(option.value);\n selections.push(option);\n }\n });\n if (applied) break;\n await Promise.all(updates);\n const selected = !!selection.length\n ? selection\n : EMPTY_SELECTION;\n this.setSelected(selected);\n break;\n }\n default:\n // if user defines .selected\n if (this.selected.length) {\n const selections: ActionButton[] = [];\n const updates = options.map(async (option) => {\n await option.updateComplete;\n option.setAttribute(\n 'aria-checked',\n option.selected ? 'true' : 'false'\n );\n option.setAttribute('role', 'button');\n if (option.selected) {\n selections.push(option);\n }\n });\n if (applied) break;\n await Promise.all(updates);\n\n this.setSelected(\n selections.map((button) => {\n return button.value;\n })\n );\n } else {\n this.buttons.forEach((option) => {\n option.setAttribute('role', 'button');\n });\n this.removeAttribute('role');\n break;\n }\n }\n }\n\n protected render(): TemplateResult {\n return html`\n <slot role=\"presentation\" @slotchange=${this.manageButtons}></slot>\n `;\n }\n\n protected firstUpdated(changes: PropertyValues): void {\n super.firstUpdated(changes);\n this.addEventListener('click', this.handleClick);\n }\n\n protected updated(changes: PropertyValues): void {\n super.updated(changes);\n if (changes.has('selects')) {\n this.manageSelects();\n this.manageChildren();\n }\n if (\n (changes.has('quiet') && this.quiet) ||\n (changes.has('emphasized') && this.emphasized)\n ) {\n this.manageChildren();\n }\n // Update `aria-label` when `label` available or not first `updated`\n if (\n changes.has('label') &&\n (this.label || typeof changes.get('label') !== 'undefined')\n ) {\n if (this.label.length) {\n this.setAttribute('aria-label', this.label);\n } else {\n this.removeAttribute('aria-label');\n }\n }\n }\n\n private manageChildren(): void {\n this.buttons.forEach((button) => {\n button.quiet = this.quiet;\n button.emphasized = this.emphasized;\n button.selected = this.selected.includes(button.value);\n });\n }\n\n private manageButtons = (): void => {\n const slot = this.shadowRoot.querySelector('slot');\n if (!slot) return;\n const assignedElements = slot.assignedElements({ flatten: true });\n const buttons = assignedElements.reduce((acc: unknown[], el) => {\n if (el.matches(this._buttonSelector)) {\n acc.push(el);\n } else {\n const buttonDescendents = Array.from(\n el.querySelectorAll(`:scope > ${this._buttonSelector}`)\n );\n acc.push(...buttonDescendents);\n }\n return acc;\n }, []);\n this.buttons = buttons as ActionButton[];\n // <selected> element merges selected so following paradigm here\n const currentlySelectedButtons: string[] = [];\n this.buttons.forEach((button: ActionButton) => {\n if (button.selected) {\n currentlySelectedButtons.push(button.value);\n }\n });\n this.setSelected(this.selected.concat(currentlySelectedButtons));\n this.manageChildren();\n this.manageSelects();\n };\n\n public connectedCallback(): void {\n super.connectedCallback();\n if (!this.observer) {\n this.observer = new MutationObserver(this.manageButtons);\n this.manageButtons();\n }\n this.observer.observe(this, { childList: true, subtree: true });\n }\n\n public disconnectedCallback(): void {\n this.observer.disconnect();\n super.disconnectedCallback();\n }\n\n private observer!: MutationObserver;\n}\n"]}
|
|
@@ -406,6 +406,20 @@ describe('ActionGroup', () => {
|
|
|
406
406
|
expect(firstButton.selected, 'first button not selected').to.be.false;
|
|
407
407
|
expect(secondButton.selected, 'second button selected').to.be.true;
|
|
408
408
|
});
|
|
409
|
+
it('selects can be updated while [selects="single"]', async () => {
|
|
410
|
+
const el = await singleSelectedActionGroup(['first']);
|
|
411
|
+
await elementUpdated(el);
|
|
412
|
+
expect(el.selected.length).to.equal(1);
|
|
413
|
+
const firstButton = el.querySelector('.first');
|
|
414
|
+
const secondButton = el.querySelector('.second');
|
|
415
|
+
expect(firstButton.selected, 'first button selected').to.be.true;
|
|
416
|
+
expect(secondButton.selected, 'second button not selected').to.be.false;
|
|
417
|
+
el.selected = ['second'];
|
|
418
|
+
await elementUpdated(el);
|
|
419
|
+
expect(el.selected.length).to.equal(1);
|
|
420
|
+
expect(firstButton.selected, 'first button not selected').to.be.false;
|
|
421
|
+
expect(secondButton.selected, 'second button selected').to.be.true;
|
|
422
|
+
});
|
|
409
423
|
it('selects user-passed value while [selects="multiple"]', async () => {
|
|
410
424
|
const el = await fixture(html `
|
|
411
425
|
<sp-action-group
|
|
@@ -445,6 +459,45 @@ describe('ActionGroup', () => {
|
|
|
445
459
|
expect(secondButton.selected, 'second button selected').to.be.true;
|
|
446
460
|
expect(thirdButton.selected, 'third button selected').to.be.true;
|
|
447
461
|
});
|
|
462
|
+
it('selects can be updated while [selects="multiple"]', async () => {
|
|
463
|
+
const el = await fixture(html `
|
|
464
|
+
<sp-action-group
|
|
465
|
+
label="Selects Multiple Group"
|
|
466
|
+
selects="multiple"
|
|
467
|
+
.selected=${['first', 'second']}
|
|
468
|
+
>
|
|
469
|
+
<sp-action-button class="first" value="first">
|
|
470
|
+
First
|
|
471
|
+
</sp-action-button>
|
|
472
|
+
<sp-action-button class="second" value="second">
|
|
473
|
+
Second
|
|
474
|
+
</sp-action-button>
|
|
475
|
+
<sp-action-button class="third " value="third">
|
|
476
|
+
Third
|
|
477
|
+
</sp-action-button>
|
|
478
|
+
</sp-action-group>
|
|
479
|
+
`);
|
|
480
|
+
await elementUpdated(el);
|
|
481
|
+
const firstButton = el.querySelector('.first');
|
|
482
|
+
const secondButton = el.querySelector('.second');
|
|
483
|
+
const thirdButton = el.querySelector('.third');
|
|
484
|
+
expect(el.selected.length).to.equal(2);
|
|
485
|
+
expect(firstButton.selected, 'first button selected').to.be.true;
|
|
486
|
+
expect(secondButton.selected, 'second button selected').to.be.true;
|
|
487
|
+
expect(thirdButton.selected, 'third button not selected').to.be.false;
|
|
488
|
+
el.selected = ['first', 'second', 'third'];
|
|
489
|
+
await elementUpdated(el);
|
|
490
|
+
expect(el.selected.length).to.equal(3);
|
|
491
|
+
expect(firstButton.selected, 'first button selected').to.be.true;
|
|
492
|
+
expect(secondButton.selected, 'second button selected').to.be.true;
|
|
493
|
+
expect(thirdButton.selected, 'third button selected').to.be.true;
|
|
494
|
+
el.selected = ['second', 'third'];
|
|
495
|
+
await elementUpdated(el);
|
|
496
|
+
expect(el.selected.length, JSON.stringify(el.selected)).to.equal(2);
|
|
497
|
+
expect(firstButton.selected, 'first button not selected').to.be.false;
|
|
498
|
+
expect(secondButton.selected, 'second button selected').to.be.true;
|
|
499
|
+
expect(thirdButton.selected, 'third button selected').to.be.true;
|
|
500
|
+
});
|
|
448
501
|
it('selects multiple user-passed values while [selects="single"], but then proceeds with radio-button style functionality', async () => {
|
|
449
502
|
const el = await singleSelectedActionGroup(['first', 'second']);
|
|
450
503
|
await elementUpdated(el);
|
|
@@ -1 +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"]}
|
|
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 can be updated 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 el.selected = ['second'];\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 can be updated 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 el.selected = ['first', 'second', 'third'];\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 el.selected = ['second', 'third'];\n await elementUpdated(el);\n\n expect(el.selected.length, JSON.stringify(el.selected)).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"]}
|