@crowdstrike/glide-core 0.7.0 → 0.9.0
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/README.md +44 -5
- package/dist/accordion.test.basics.js +1 -0
- package/dist/accordion.test.events.js +1 -0
- package/dist/button-group.button.d.ts +14 -15
- package/dist/button-group.button.js +1 -1
- package/dist/button-group.button.styles.js +75 -52
- package/dist/button-group.button.test.basics.d.ts +1 -1
- package/dist/button-group.button.test.basics.js +84 -147
- package/dist/button-group.button.test.events.js +9 -67
- package/dist/button-group.button.test.focus.js +13 -0
- package/dist/button-group.button.test.interactions.d.ts +1 -0
- package/dist/button-group.button.test.interactions.js +42 -0
- package/dist/button-group.d.ts +7 -10
- package/dist/button-group.js +1 -1
- package/dist/button-group.stories.d.ts +1 -5
- package/dist/button-group.styles.js +18 -6
- package/dist/button-group.test.basics.js +114 -234
- package/dist/button-group.test.events.js +211 -263
- package/dist/button-group.test.focus.d.ts +1 -0
- package/dist/button-group.test.focus.js +39 -0
- package/dist/button-group.test.interactions.d.ts +1 -0
- package/dist/button-group.test.interactions.js +91 -0
- package/dist/button.test.basics.js +2 -1
- package/dist/button.test.events.js +1 -0
- package/dist/button.test.form.js +1 -0
- package/dist/checkbox-group.js +1 -1
- package/dist/checkbox-group.styles.js +1 -1
- package/dist/checkbox-group.test.basics.js +2 -1
- package/dist/checkbox-group.test.events.js +5 -4
- package/dist/checkbox-group.test.focus.js +5 -3
- package/dist/checkbox-group.test.form.js +1 -0
- package/dist/checkbox-group.test.validity.js +1 -0
- package/dist/checkbox.d.ts +7 -1
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.styles.js +11 -3
- package/dist/checkbox.test.basics.js +1 -0
- package/dist/checkbox.test.events.js +5 -4
- package/dist/checkbox.test.focus.js +2 -2
- package/dist/checkbox.test.form.js +1 -0
- package/dist/{checkbox.test.states.js → checkbox.test.interactions.js} +25 -1
- package/dist/checkbox.test.validity.js +1 -0
- package/dist/drawer.js +1 -1
- package/dist/drawer.test.basics.js +1 -0
- package/dist/drawer.test.closing.js +1 -0
- package/dist/drawer.test.events.js +1 -0
- package/dist/drawer.test.methods.js +1 -0
- package/dist/dropdown.d.ts +6 -4
- package/dist/dropdown.js +1 -1
- package/dist/dropdown.option.d.ts +7 -2
- package/dist/dropdown.option.js +1 -1
- package/dist/dropdown.option.styles.js +13 -0
- package/dist/dropdown.option.test.basics.js +7 -3
- package/dist/dropdown.option.test.basics.multiple.js +1 -0
- package/dist/dropdown.option.test.basics.single.js +1 -0
- package/dist/dropdown.option.test.events.js +2 -1
- package/dist/dropdown.option.test.focus.js +1 -1
- package/dist/dropdown.option.test.interactions.multiple.js +2 -54
- package/dist/dropdown.option.test.interactions.single.js +52 -9
- package/dist/dropdown.styles.js +20 -19
- package/dist/dropdown.test.basics.filterable.js +1 -0
- package/dist/dropdown.test.basics.js +144 -2
- package/dist/dropdown.test.basics.multiple.js +6 -3
- package/dist/dropdown.test.basics.single.js +1 -1
- package/dist/dropdown.test.events.filterable.js +74 -0
- package/dist/dropdown.test.events.js +50 -160
- package/dist/dropdown.test.events.multiple.js +268 -10
- package/dist/dropdown.test.events.single.js +202 -4
- package/dist/dropdown.test.focus.filterable.js +9 -5
- package/dist/dropdown.test.focus.js +2 -1
- package/dist/dropdown.test.focus.multiple.js +1 -2
- package/dist/dropdown.test.focus.single.js +1 -1
- package/dist/dropdown.test.form.js +1 -0
- package/dist/dropdown.test.form.multiple.js +1 -0
- package/dist/dropdown.test.form.single.js +1 -0
- package/dist/dropdown.test.interactions.filterable.js +69 -11
- package/dist/dropdown.test.interactions.js +95 -5
- package/dist/dropdown.test.interactions.multiple.js +203 -6
- package/dist/dropdown.test.interactions.single.js +69 -6
- package/dist/dropdown.test.validity.js +1 -0
- package/dist/form-controls-layout.test.basics.js +2 -1
- package/dist/icon-button.test.basics.js +2 -1
- package/dist/icons/checked.d.ts +1 -1
- package/dist/icons/checked.js +1 -1
- package/dist/icons/magnifying-glass.js +1 -1
- package/dist/input.d.ts +0 -6
- package/dist/input.js +1 -1
- package/dist/input.styles.js +7 -2
- package/dist/input.test.basics.js +20 -5
- package/dist/input.test.events.js +5 -4
- package/dist/input.test.focus.js +5 -4
- package/dist/input.test.form.js +1 -0
- package/dist/input.test.translations.d.ts +1 -0
- package/dist/input.test.translations.js +38 -0
- package/dist/input.test.validity.js +134 -4
- package/dist/label.d.ts +1 -1
- package/dist/label.js +1 -1
- package/dist/label.styles.js +29 -20
- package/dist/label.test.basics.js +27 -24
- package/dist/library/expect-argument-error.js +1 -1
- package/dist/library/localize.d.ts +5 -1
- package/dist/library/ow.test.d.ts +2 -1
- package/dist/library/ow.test.js +8 -3
- package/dist/menu.button.test.basics.js +1 -0
- package/dist/menu.d.ts +3 -5
- package/dist/menu.js +1 -1
- package/dist/menu.link.test.basics.js +1 -0
- package/dist/menu.options.test.basics.js +3 -2
- package/dist/menu.styles.js +1 -15
- package/dist/menu.test.basics.d.ts +1 -2
- package/dist/menu.test.basics.js +23 -6
- package/dist/menu.test.events.d.ts +1 -0
- package/dist/menu.test.events.js +2 -1
- package/dist/menu.test.focus.d.ts +1 -0
- package/dist/menu.test.focus.js +14 -6
- package/dist/menu.test.interactions.js +213 -56
- package/dist/modal.icon-button.test.basics.js +2 -1
- package/dist/modal.js +1 -1
- package/dist/modal.styles.js +18 -13
- package/dist/modal.tertiary-icon.d.ts +0 -1
- package/dist/modal.tertiary-icon.js +1 -1
- package/dist/modal.tertiary-icon.test.basics.js +2 -1
- package/dist/modal.test.accessibility.js +1 -0
- package/dist/modal.test.basics.js +2 -1
- package/dist/modal.test.close.js +1 -0
- package/dist/modal.test.events.js +11 -10
- package/dist/modal.test.lock-scroll.js +1 -0
- package/dist/modal.test.methods.js +1 -0
- package/dist/modal.test.scrollbars.js +1 -0
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.styles.js +1 -1
- package/dist/radio-group.test.basics.js +1 -0
- package/dist/radio-group.test.events.js +1 -0
- package/dist/radio-group.test.focus.js +4 -3
- package/dist/radio-group.test.form.js +1 -0
- package/dist/radio-group.test.validity.js +1 -0
- package/dist/radio.d.ts +1 -0
- package/dist/radio.js +1 -1
- package/dist/radio.styles.js +33 -0
- package/dist/split-button.test.basics.js +1 -0
- package/dist/split-container.test.basics.js +5 -0
- package/dist/split-link.test.basics.js +1 -0
- package/dist/split-link.test.interactions.js +2 -1
- package/dist/styles/variables.css +1 -1
- package/dist/tab.d.ts +1 -3
- package/dist/tab.group.d.ts +3 -5
- package/dist/tab.group.js +1 -1
- package/dist/tab.group.styles.js +27 -13
- package/dist/tab.group.test.basics.js +8 -57
- package/dist/tab.group.test.interactions.d.ts +3 -0
- package/dist/tab.group.test.interactions.js +454 -0
- package/dist/tab.js +1 -1
- package/dist/tab.panel.d.ts +1 -0
- package/dist/tab.panel.js +1 -1
- package/dist/tab.panel.styles.js +11 -1
- package/dist/tab.styles.js +7 -68
- package/dist/tab.test.basics.js +0 -20
- package/dist/tabs.stories.d.ts +1 -2
- package/dist/tag.test.basics.js +3 -2
- package/dist/textarea.d.ts +0 -1
- package/dist/textarea.js +2 -2
- package/dist/textarea.stories.d.ts +3 -4
- package/dist/textarea.styles.js +14 -3
- package/dist/textarea.test.basics.js +81 -44
- package/dist/textarea.test.events.js +57 -41
- package/dist/textarea.test.form.js +1 -0
- package/dist/textarea.test.translations.d.ts +1 -0
- package/dist/textarea.test.translations.js +34 -0
- package/dist/textarea.test.validity.js +105 -20
- package/dist/toasts.js +1 -1
- package/dist/toasts.styles.js +8 -1
- package/dist/toasts.test.basics.js +20 -0
- package/dist/toggle.js +1 -1
- package/dist/toggle.test.basics.js +1 -0
- package/dist/toggle.test.events.js +1 -0
- package/dist/toggle.test.focus.js +1 -1
- package/dist/toggle.test.interactions.d.ts +1 -0
- package/dist/{toggle.test.states.js → toggle.test.interactions.js} +1 -0
- package/dist/tooltip.d.ts +7 -5
- package/dist/tooltip.js +1 -1
- package/dist/tooltip.styles.js +90 -25
- package/dist/tooltip.test.basics.js +39 -3
- package/dist/tooltip.test.interactions.js +137 -34
- package/dist/translations/en.js +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/ja.js +1 -1
- package/dist/tree.d.ts +0 -1
- package/dist/tree.item.d.ts +2 -3
- package/dist/tree.item.js +1 -1
- package/dist/tree.item.menu.d.ts +0 -1
- package/dist/tree.item.menu.js +1 -1
- package/dist/tree.item.test.basics.js +1 -0
- package/dist/tree.js +1 -1
- package/dist/tree.test.basics.js +2 -1
- package/dist/tree.test.events.js +1 -1
- package/package.json +40 -29
- package/dist/drawer.test.floating-components.d.ts +0 -1
- package/dist/drawer.test.floating-components.js +0 -51
- package/dist/library/set-containing-block.d.ts +0 -15
- package/dist/library/set-containing-block.js +0 -1
- package/dist/modal.test.floating-components.js +0 -62
- /package/dist/{checkbox.test.states.d.ts → button-group.button.test.focus.d.ts} +0 -0
- /package/dist/{modal.test.floating-components.d.ts → checkbox.test.interactions.d.ts} +0 -0
- /package/dist/{toggle.test.states.d.ts → dropdown.test.events.filterable.d.ts} +0 -0
@@ -1,291 +1,239 @@
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
1
2
|
import './button-group.button.js';
|
2
|
-
import {
|
3
|
+
import { aTimeout, expect, fixture, html, oneEvent } from '@open-wc/testing';
|
3
4
|
import { sendKeys } from '@web/test-runner-commands';
|
4
5
|
import GlideCoreButtonGroup from './button-group.js';
|
5
6
|
import GlideCoreButtonGroupButton from './button-group.button.js';
|
7
|
+
import sinon from 'sinon';
|
6
8
|
GlideCoreButtonGroup.shadowRootOptions.mode = 'open';
|
7
9
|
GlideCoreButtonGroupButton.shadowRootOptions.mode = 'open';
|
8
|
-
it('emits a change event when
|
9
|
-
await fixture(html `<glide-core-button-group>
|
10
|
-
<glide-core-button-group-button
|
11
|
-
|
12
|
-
>
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
>Button 3</glide-core-button-group-button
|
18
|
-
>
|
10
|
+
it('emits a "change" event when a button is clicked and not already selected', async () => {
|
11
|
+
const component = await fixture(html `<glide-core-button-group>
|
12
|
+
<glide-core-button-group-button
|
13
|
+
label="One"
|
14
|
+
></glide-core-button-group-button>
|
15
|
+
|
16
|
+
<glide-core-button-group-button
|
17
|
+
label="Two"
|
18
|
+
></glide-core-button-group-button>
|
19
19
|
</glide-core-button-group>`);
|
20
|
-
const
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
const changeEventLeft = await oneEvent(buttonElements[0], 'change');
|
28
|
-
expect(changeEventLeft instanceof Event).to.be.true;
|
29
|
-
expect(changeEventLeft.bubbles).to.be.true;
|
30
|
-
setTimeout(async () => await sendKeys({ press: 'ArrowRight' }));
|
31
|
-
const changeEventRight = await oneEvent(buttonElements[1], 'change');
|
32
|
-
expect(changeEventRight instanceof Event).to.be.true;
|
33
|
-
expect(changeEventRight.bubbles).to.be.true;
|
34
|
-
setTimeout(async () => await sendKeys({ press: 'ArrowUp' }));
|
35
|
-
const changeEventUp = await oneEvent(buttonElements[0], 'change');
|
36
|
-
expect(changeEventUp instanceof Event).to.be.true;
|
37
|
-
expect(changeEventUp.bubbles).to.be.true;
|
38
|
-
setTimeout(async () => await sendKeys({ press: 'ArrowDown' }));
|
39
|
-
const changeEventDown = await oneEvent(buttonElements[1], 'change');
|
40
|
-
expect(changeEventDown instanceof Event).to.be.true;
|
41
|
-
expect(changeEventDown.bubbles).to.be.true;
|
20
|
+
const button = component.querySelector('glide-core-button-group-button:last-of-type');
|
21
|
+
setTimeout(() => {
|
22
|
+
button?.click();
|
23
|
+
});
|
24
|
+
const event = await oneEvent(component, 'change');
|
25
|
+
expect(event instanceof Event).to.be.true;
|
26
|
+
expect(event.bubbles).to.be.true;
|
42
27
|
});
|
43
|
-
it('emits an input event when
|
44
|
-
await fixture(html `<glide-core-button-group>
|
45
|
-
<glide-core-button-group-button
|
46
|
-
|
47
|
-
>
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
>Button 3</glide-core-button-group-button
|
53
|
-
>
|
28
|
+
it('emits an "input" event when a button is clicked and not already selected', async () => {
|
29
|
+
const component = await fixture(html `<glide-core-button-group>
|
30
|
+
<glide-core-button-group-button
|
31
|
+
label="One"
|
32
|
+
></glide-core-button-group-button>
|
33
|
+
|
34
|
+
<glide-core-button-group-button
|
35
|
+
label="Two"
|
36
|
+
></glide-core-button-group-button>
|
54
37
|
</glide-core-button-group>`);
|
55
|
-
const
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
expect(
|
61
|
-
|
62
|
-
const inputEventRight = await oneEvent(buttonElements[1], 'input');
|
63
|
-
expect(inputEventRight instanceof Event).to.be.true;
|
64
|
-
expect(inputEventRight.bubbles).to.be.true;
|
65
|
-
setTimeout(async () => await sendKeys({ press: 'ArrowUp' }));
|
66
|
-
const inputEventUp = await oneEvent(buttonElements[0], 'input');
|
67
|
-
expect(inputEventUp instanceof Event).to.be.true;
|
68
|
-
expect(inputEventUp.bubbles).to.be.true;
|
69
|
-
setTimeout(async () => await sendKeys({ press: 'ArrowDown' }));
|
70
|
-
const inputEventDown = await oneEvent(buttonElements[1], 'input');
|
71
|
-
expect(inputEventDown instanceof Event).to.be.true;
|
72
|
-
expect(inputEventDown.bubbles).to.be.true;
|
38
|
+
const button = component.querySelector('glide-core-button-group-button:last-of-type');
|
39
|
+
setTimeout(() => {
|
40
|
+
button?.click();
|
41
|
+
});
|
42
|
+
const event = await oneEvent(component, 'input');
|
43
|
+
expect(event instanceof Event).to.be.true;
|
44
|
+
expect(event.bubbles).to.be.true;
|
73
45
|
});
|
74
|
-
it('
|
75
|
-
await fixture(html `<glide-core-button-group>
|
76
|
-
<glide-core-button-group-button
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
>
|
46
|
+
it('does not emit an "change" event when clicked button is clicked and already selected', async () => {
|
47
|
+
const component = await fixture(html `<glide-core-button-group>
|
48
|
+
<glide-core-button-group-button
|
49
|
+
label="One"
|
50
|
+
selected
|
51
|
+
></glide-core-button-group-button>
|
52
|
+
|
53
|
+
<glide-core-button-group-button
|
54
|
+
label="One"
|
55
|
+
></glide-core-button-group-button>
|
85
56
|
</glide-core-button-group>`);
|
86
|
-
const
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
57
|
+
const spy = sinon.spy();
|
58
|
+
const button = component.querySelector('glide-core-button-group-button');
|
59
|
+
component.addEventListener('change', spy);
|
60
|
+
setTimeout(() => {
|
61
|
+
button?.click();
|
62
|
+
});
|
63
|
+
await aTimeout(0);
|
64
|
+
expect(spy.callCount).to.equal(0);
|
92
65
|
});
|
93
|
-
it('
|
94
|
-
await fixture(html `<glide-core-button-group>
|
95
|
-
<glide-core-button-group-button
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
>
|
66
|
+
it('does not emit an "input" event when clicked button is clicked and already selected', async () => {
|
67
|
+
const component = await fixture(html `<glide-core-button-group>
|
68
|
+
<glide-core-button-group-button
|
69
|
+
label="One"
|
70
|
+
selected
|
71
|
+
></glide-core-button-group-button>
|
72
|
+
|
73
|
+
<glide-core-button-group-button
|
74
|
+
label="Two"
|
75
|
+
></glide-core-button-group-button>
|
104
76
|
</glide-core-button-group>`);
|
105
|
-
const
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
await
|
112
|
-
expect(
|
77
|
+
const spy = sinon.spy();
|
78
|
+
const button = component.querySelector('glide-core-button-group-button');
|
79
|
+
component.addEventListener('input', spy);
|
80
|
+
setTimeout(() => {
|
81
|
+
button?.click();
|
82
|
+
});
|
83
|
+
await aTimeout(0);
|
84
|
+
expect(spy.callCount).to.equal(0);
|
113
85
|
});
|
114
|
-
it('
|
115
|
-
await fixture(html `<glide-core-button-group>
|
116
|
-
<glide-core-button-group-button
|
117
|
-
|
118
|
-
>
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
>
|
86
|
+
it('emits a "change" event when arrowing', async () => {
|
87
|
+
const component = await fixture(html `<glide-core-button-group>
|
88
|
+
<glide-core-button-group-button
|
89
|
+
label="One"
|
90
|
+
></glide-core-button-group-button>
|
91
|
+
|
92
|
+
<glide-core-button-group-button
|
93
|
+
label="Two"
|
94
|
+
selected
|
95
|
+
></glide-core-button-group-button>
|
125
96
|
</glide-core-button-group>`);
|
126
|
-
const
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
await
|
131
|
-
expect(
|
97
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
98
|
+
buttons[0].focus();
|
99
|
+
let event;
|
100
|
+
sendKeys({ press: 'ArrowRight' });
|
101
|
+
event = await oneEvent(component, 'change');
|
102
|
+
expect(event instanceof Event).to.be.true;
|
103
|
+
expect(event.bubbles).to.be.true;
|
104
|
+
sendKeys({ press: 'ArrowLeft' });
|
105
|
+
event = await oneEvent(component, 'change');
|
106
|
+
expect(event instanceof Event).to.be.true;
|
107
|
+
expect(event.bubbles).to.be.true;
|
108
|
+
sendKeys({ press: 'ArrowDown' });
|
109
|
+
event = await oneEvent(component, 'change');
|
110
|
+
expect(event instanceof Event).to.be.true;
|
111
|
+
expect(event.bubbles).to.be.true;
|
112
|
+
sendKeys({ press: 'ArrowUp' });
|
113
|
+
event = await oneEvent(component, 'change');
|
114
|
+
expect(event instanceof Event).to.be.true;
|
115
|
+
expect(event.bubbles).to.be.true;
|
132
116
|
});
|
133
|
-
it('
|
134
|
-
await fixture(html `<glide-core-button-group>
|
135
|
-
<glide-core-button-group-button
|
136
|
-
|
137
|
-
>
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
>Button 3</glide-core-button-group-button
|
143
|
-
>
|
117
|
+
it('emits an "input" event when arrowing', async () => {
|
118
|
+
const component = await fixture(html `<glide-core-button-group>
|
119
|
+
<glide-core-button-group-button
|
120
|
+
label="One"
|
121
|
+
></glide-core-button-group-button>
|
122
|
+
|
123
|
+
<glide-core-button-group-button
|
124
|
+
label="Two"
|
125
|
+
></glide-core-button-group-button>
|
144
126
|
</glide-core-button-group>`);
|
145
|
-
const
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
expect(
|
152
|
-
|
153
|
-
|
127
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
128
|
+
buttons[0].focus();
|
129
|
+
let event;
|
130
|
+
sendKeys({ press: 'ArrowRight' });
|
131
|
+
event = await oneEvent(component, 'input');
|
132
|
+
expect(event instanceof Event).to.be.true;
|
133
|
+
expect(event.bubbles).to.be.true;
|
134
|
+
sendKeys({ press: 'ArrowLeft' });
|
135
|
+
event = await oneEvent(component, 'input');
|
136
|
+
expect(event instanceof Event).to.be.true;
|
137
|
+
expect(event.bubbles).to.be.true;
|
138
|
+
sendKeys({ press: 'ArrowDown' });
|
139
|
+
event = await oneEvent(component, 'input');
|
140
|
+
expect(event instanceof Event).to.be.true;
|
141
|
+
expect(event.bubbles).to.be.true;
|
142
|
+
sendKeys({ press: 'ArrowUp' });
|
143
|
+
event = await oneEvent(component, 'input');
|
144
|
+
expect(event instanceof Event).to.be.true;
|
145
|
+
expect(event.bubbles).to.be.true;
|
154
146
|
});
|
155
|
-
it('
|
156
|
-
await fixture(html `<glide-core-button-group>
|
157
|
-
<glide-core-button-group-button
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
>
|
147
|
+
it('emits a "change" event when a button is selected via Space', async () => {
|
148
|
+
const component = await fixture(html `<glide-core-button-group>
|
149
|
+
<glide-core-button-group-button
|
150
|
+
label="One"
|
151
|
+
selected
|
152
|
+
></glide-core-button-group-button>
|
153
|
+
|
154
|
+
<glide-core-button-group-button
|
155
|
+
label="Two"
|
156
|
+
></glide-core-button-group-button>
|
166
157
|
</glide-core-button-group>`);
|
167
|
-
const
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
expect(buttonElements[2]).to.have.focus;
|
174
|
-
await sendKeys({ press: 'ArrowUp' });
|
175
|
-
expect(buttonElements[0]).to.have.focus;
|
158
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
159
|
+
buttons[1]?.focus();
|
160
|
+
sendKeys({ press: 'Space' });
|
161
|
+
const event = await oneEvent(component, 'input');
|
162
|
+
expect(event instanceof Event).to.be.true;
|
163
|
+
expect(event.bubbles).to.be.true;
|
176
164
|
});
|
177
|
-
it('
|
178
|
-
await fixture(html `<glide-core-button-group>
|
179
|
-
<glide-core-button-group-button
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
>
|
165
|
+
it('emits a "change" event when a button is selected programmatically', async () => {
|
166
|
+
const component = await fixture(html `<glide-core-button-group>
|
167
|
+
<glide-core-button-group-button
|
168
|
+
label="One"
|
169
|
+
selected
|
170
|
+
></glide-core-button-group-button>
|
171
|
+
|
172
|
+
<glide-core-button-group-button
|
173
|
+
label="Two"
|
174
|
+
></glide-core-button-group-button>
|
188
175
|
</glide-core-button-group>`);
|
189
|
-
const
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
expect(
|
196
|
-
await sendKeys({ press: 'ArrowDown' });
|
197
|
-
expect(buttonElements[2]).to.have.focus;
|
176
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
177
|
+
setTimeout(() => {
|
178
|
+
buttons[1].selected = true;
|
179
|
+
});
|
180
|
+
const event = await oneEvent(component, 'input');
|
181
|
+
expect(event instanceof Event).to.be.true;
|
182
|
+
expect(event.bubbles).to.be.true;
|
198
183
|
});
|
199
|
-
it('does not
|
200
|
-
await fixture(html `<glide-core-button-group>
|
201
|
-
<glide-core-button-group-button
|
202
|
-
|
203
|
-
|
184
|
+
it('does not emit a "change" event when an already selected button is selected via Space', async () => {
|
185
|
+
const component = await fixture(html `<glide-core-button-group>
|
186
|
+
<glide-core-button-group-button
|
187
|
+
label="One"
|
188
|
+
selected
|
189
|
+
></glide-core-button-group-button>
|
190
|
+
|
191
|
+
<glide-core-button-group-button
|
192
|
+
label="Two"
|
193
|
+
></glide-core-button-group-button>
|
204
194
|
</glide-core-button-group>`);
|
205
|
-
const
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
expect(
|
211
|
-
await sendKeys({ press: 'ArrowUp' });
|
212
|
-
expect(buttonElement).to.have.focus;
|
213
|
-
await sendKeys({ press: 'ArrowDown' });
|
214
|
-
expect(buttonElement).to.have.focus;
|
195
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
196
|
+
buttons[0]?.focus();
|
197
|
+
const spy = sinon.spy();
|
198
|
+
component.addEventListener('change', spy);
|
199
|
+
sendKeys({ press: 'Space' });
|
200
|
+
expect(spy.callCount).to.equal(0);
|
215
201
|
});
|
216
|
-
it('
|
217
|
-
const
|
218
|
-
<glide-core-button-group-button
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
>
|
202
|
+
it('does not emit a "change" event a button is selected programmatically', async () => {
|
203
|
+
const component = await fixture(html `<glide-core-button-group>
|
204
|
+
<glide-core-button-group-button
|
205
|
+
label="One"
|
206
|
+
selected
|
207
|
+
></glide-core-button-group-button>
|
208
|
+
|
209
|
+
<glide-core-button-group-button
|
210
|
+
label="Two"
|
211
|
+
></glide-core-button-group-button>
|
227
212
|
</glide-core-button-group>`);
|
228
|
-
const
|
229
|
-
const
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
expect(
|
235
|
-
expect(buttonElements[0]).to.not.have.attribute('selected');
|
213
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
214
|
+
const spy = sinon.spy();
|
215
|
+
component.addEventListener('change', spy);
|
216
|
+
setTimeout(() => {
|
217
|
+
buttons[1].selected = true;
|
218
|
+
});
|
219
|
+
expect(spy.callCount).to.equal(0);
|
236
220
|
});
|
237
|
-
it('does not
|
238
|
-
const
|
239
|
-
<glide-core-button-group-button
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
221
|
+
it('does not emit a "input" event a button is selected programmatically', async () => {
|
222
|
+
const component = await fixture(html `<glide-core-button-group>
|
223
|
+
<glide-core-button-group-button
|
224
|
+
label="One"
|
225
|
+
selected
|
226
|
+
></glide-core-button-group-button>
|
227
|
+
|
228
|
+
<glide-core-button-group-button
|
229
|
+
label="Two"
|
230
|
+
></glide-core-button-group-button>
|
245
231
|
</glide-core-button-group>`);
|
246
|
-
const
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
expect(
|
253
|
-
expect(buttonElements[0]).to.have.attribute('selected');
|
254
|
-
expect(buttonElements[1]).to.not.have.attribute('selected');
|
255
|
-
});
|
256
|
-
it('changes the "selected" attribute when pressing arrow and space keys', async () => {
|
257
|
-
await fixture(html `<glide-core-button-group>
|
258
|
-
<glide-core-button-group-button value="value-1" selected
|
259
|
-
>Button 1</glide-core-button-group-button
|
260
|
-
>
|
261
|
-
<glide-core-button-group-button value="value-2"
|
262
|
-
>Button 2</glide-core-button-group-button
|
263
|
-
>
|
264
|
-
<glide-core-button-group-button value="value-3"
|
265
|
-
>Button 3</glide-core-button-group-button
|
266
|
-
>
|
267
|
-
</glide-core-button-group>`);
|
268
|
-
const buttonElements = document.querySelectorAll('glide-core-button-group-button');
|
269
|
-
await sendKeys({ press: 'Tab' });
|
270
|
-
await sendKeys({ press: 'ArrowRight' });
|
271
|
-
expect(buttonElements[1]).to.have.focus;
|
272
|
-
expect(buttonElements[1]).to.have.attribute('selected');
|
273
|
-
expect(buttonElements[0]).to.not.have.attribute('selected');
|
274
|
-
await sendKeys({ press: 'ArrowDown' });
|
275
|
-
expect(buttonElements[2]).to.have.focus;
|
276
|
-
expect(buttonElements[2]).to.have.attribute('selected');
|
277
|
-
expect(buttonElements[1]).to.not.have.attribute('selected');
|
278
|
-
await sendKeys({ press: 'ArrowUp' });
|
279
|
-
expect(buttonElements[1]).to.have.focus;
|
280
|
-
expect(buttonElements[1]).to.have.attribute('selected');
|
281
|
-
expect(buttonElements[2]).to.not.have.attribute('selected');
|
282
|
-
await sendKeys({ press: 'ArrowLeft' });
|
283
|
-
expect(buttonElements[0]).to.have.focus;
|
284
|
-
expect(buttonElements[0]).to.have.attribute('selected');
|
285
|
-
expect(buttonElements[1]).to.not.have.attribute('selected');
|
286
|
-
buttonElements[2].focus();
|
287
|
-
await sendKeys({ press: ' ' });
|
288
|
-
expect(buttonElements[2]).to.have.focus;
|
289
|
-
expect(buttonElements[2]).to.have.attribute('selected');
|
290
|
-
expect(buttonElements[0]).to.not.have.attribute('selected');
|
232
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
233
|
+
const spy = sinon.spy();
|
234
|
+
component.addEventListener('input', spy);
|
235
|
+
setTimeout(() => {
|
236
|
+
buttons[1].selected = true;
|
237
|
+
});
|
238
|
+
expect(spy.callCount).to.equal(0);
|
291
239
|
});
|
@@ -0,0 +1 @@
|
|
1
|
+
import './button-group.button.js';
|
@@ -0,0 +1,39 @@
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
+
import './button-group.button.js';
|
3
|
+
import { expect, fixture, html } from '@open-wc/testing';
|
4
|
+
import { sendKeys } from '@web/test-runner-commands';
|
5
|
+
import GlideCoreButtonGroup from './button-group.js';
|
6
|
+
import GlideCoreButtonGroupButton from './button-group.button.js';
|
7
|
+
GlideCoreButtonGroup.shadowRootOptions.mode = 'open';
|
8
|
+
GlideCoreButtonGroupButton.shadowRootOptions.mode = 'open';
|
9
|
+
it('moves focus', async () => {
|
10
|
+
await fixture(html `<glide-core-button-group>
|
11
|
+
<glide-core-button-group-button
|
12
|
+
label="One"
|
13
|
+
></glide-core-button-group-button>
|
14
|
+
|
15
|
+
<glide-core-button-group-button
|
16
|
+
label="Two"
|
17
|
+
disabled
|
18
|
+
></glide-core-button-group-button>
|
19
|
+
|
20
|
+
<glide-core-button-group-button
|
21
|
+
label="Three"
|
22
|
+
></glide-core-button-group-button>
|
23
|
+
|
24
|
+
<glide-core-button-group-button
|
25
|
+
label="Four"
|
26
|
+
selected
|
27
|
+
></glide-core-button-group-button>
|
28
|
+
</glide-core-button-group>`);
|
29
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
30
|
+
buttons[3]?.focus();
|
31
|
+
await sendKeys({ press: 'ArrowRight' });
|
32
|
+
expect(buttons[0]).to.have.focus;
|
33
|
+
await sendKeys({ press: 'ArrowUp' });
|
34
|
+
expect(buttons[3]).to.have.focus;
|
35
|
+
await sendKeys({ press: 'ArrowLeft' });
|
36
|
+
expect(buttons[2]).to.have.focus;
|
37
|
+
await sendKeys({ press: 'ArrowDown' });
|
38
|
+
expect(buttons[3]).to.have.focus;
|
39
|
+
});
|
@@ -0,0 +1 @@
|
|
1
|
+
import './button-group.button.js';
|
@@ -0,0 +1,91 @@
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
+
import './button-group.button.js';
|
3
|
+
import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
|
4
|
+
import { sendKeys } from '@web/test-runner-commands';
|
5
|
+
import GlideCoreButtonGroup from './button-group.js';
|
6
|
+
import GlideCoreButtonGroupButton from './button-group.button.js';
|
7
|
+
GlideCoreButtonGroup.shadowRootOptions.mode = 'open';
|
8
|
+
GlideCoreButtonGroupButton.shadowRootOptions.mode = 'open';
|
9
|
+
it('selects a button when clicked', async () => {
|
10
|
+
const component = await fixture(html `<glide-core-button-group>
|
11
|
+
<glide-core-button-group-button
|
12
|
+
label="One"
|
13
|
+
selected
|
14
|
+
></glide-core-button-group-button>
|
15
|
+
|
16
|
+
<glide-core-button-group-button
|
17
|
+
label="Two"
|
18
|
+
></glide-core-button-group-button>
|
19
|
+
</glide-core-button-group>`);
|
20
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
21
|
+
buttons[1]?.click();
|
22
|
+
await elementUpdated(component);
|
23
|
+
expect(buttons[0].selected).to.be.false;
|
24
|
+
expect(buttons[1].selected).to.be.true;
|
25
|
+
});
|
26
|
+
it('selects buttons when arrowing', async () => {
|
27
|
+
await fixture(html `<glide-core-button-group>
|
28
|
+
<glide-core-button-group-button
|
29
|
+
label="One"
|
30
|
+
disabled
|
31
|
+
></glide-core-button-group-button>
|
32
|
+
|
33
|
+
<glide-core-button-group-button
|
34
|
+
label="Two"
|
35
|
+
selected
|
36
|
+
></glide-core-button-group-button>
|
37
|
+
|
38
|
+
<glide-core-button-group-button
|
39
|
+
label="Three"
|
40
|
+
></glide-core-button-group-button>
|
41
|
+
|
42
|
+
<glide-core-button-group-button
|
43
|
+
label="Four"
|
44
|
+
disabled
|
45
|
+
></glide-core-button-group-button>
|
46
|
+
</glide-core-button-group>`);
|
47
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
48
|
+
buttons[1]?.focus();
|
49
|
+
await sendKeys({ press: 'ArrowRight' });
|
50
|
+
expect(buttons[2].selected).to.be.true;
|
51
|
+
await sendKeys({ press: 'ArrowDown' });
|
52
|
+
expect(buttons[1].selected).to.be.true;
|
53
|
+
await sendKeys({ press: 'ArrowLeft' });
|
54
|
+
expect(buttons[2].selected).to.be.true;
|
55
|
+
await sendKeys({ press: 'ArrowUp' });
|
56
|
+
expect(buttons[1].selected).to.be.true;
|
57
|
+
});
|
58
|
+
it('selects a button on Space', async () => {
|
59
|
+
await fixture(html `<glide-core-button-group>
|
60
|
+
<glide-core-button-group-button
|
61
|
+
label="One"
|
62
|
+
selected
|
63
|
+
></glide-core-button-group-button>
|
64
|
+
|
65
|
+
<glide-core-button-group-button
|
66
|
+
label="Two"
|
67
|
+
></glide-core-button-group-button>
|
68
|
+
</glide-core-button-group>`);
|
69
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
70
|
+
buttons[1]?.focus();
|
71
|
+
await sendKeys({ press: 'Space' });
|
72
|
+
expect(buttons[0].selected).to.be.false;
|
73
|
+
expect(buttons[1].selected).to.be.true;
|
74
|
+
});
|
75
|
+
it('does not select a disabled button', async () => {
|
76
|
+
await fixture(html `<glide-core-button-group>
|
77
|
+
<glide-core-button-group-button
|
78
|
+
label="One"
|
79
|
+
selected
|
80
|
+
></glide-core-button-group-button>
|
81
|
+
|
82
|
+
<glide-core-button-group-button
|
83
|
+
label="Two"
|
84
|
+
disabled
|
85
|
+
></glide-core-button-group-button>
|
86
|
+
</glide-core-button-group>`);
|
87
|
+
const buttons = document.querySelectorAll('glide-core-button-group-button');
|
88
|
+
buttons[1]?.click();
|
89
|
+
expect(buttons[0].selected).to.be.true;
|
90
|
+
expect(buttons[1].selected).to.be.false;
|
91
|
+
});
|