@crowdstrike/glide-core 0.13.1 → 0.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/drawer.d.ts +2 -2
- package/dist/drawer.js +1 -1
- package/dist/drawer.styles.js +3 -14
- package/dist/dropdown.styles.js +3 -2
- package/dist/input.styles.js +1 -0
- package/dist/styles/variables.css +1 -1
- package/dist/textarea.styles.js +2 -0
- package/dist/toasts.d.ts +2 -2
- package/dist/toasts.toast.d.ts +1 -1
- package/dist/toasts.toast.js +1 -1
- package/dist/toasts.toast.styles.js +8 -0
- package/dist/tree.item.styles.js +2 -2
- package/package.json +8 -5
- package/dist/accordion.stories.d.ts +0 -6
- package/dist/accordion.test.basics.d.ts +0 -1
- package/dist/accordion.test.basics.js +0 -28
- package/dist/accordion.test.events.d.ts +0 -1
- package/dist/accordion.test.events.js +0 -28
- package/dist/accordion.test.focus.d.ts +0 -1
- package/dist/accordion.test.focus.js +0 -11
- package/dist/accordion.test.interactions.d.ts +0 -1
- package/dist/accordion.test.interactions.js +0 -75
- package/dist/button-group.button.test.basics.d.ts +0 -1
- package/dist/button-group.button.test.basics.js +0 -97
- package/dist/button-group.button.test.events.d.ts +0 -1
- package/dist/button-group.button.test.events.js +0 -15
- package/dist/button-group.button.test.focus.d.ts +0 -1
- package/dist/button-group.button.test.focus.js +0 -13
- package/dist/button-group.button.test.interactions.d.ts +0 -1
- package/dist/button-group.button.test.interactions.js +0 -42
- package/dist/button-group.stories.d.ts +0 -7
- package/dist/button-group.test.basics.d.ts +0 -1
- package/dist/button-group.test.basics.js +0 -148
- package/dist/button-group.test.events.d.ts +0 -1
- package/dist/button-group.test.events.js +0 -241
- package/dist/button-group.test.focus.d.ts +0 -1
- package/dist/button-group.test.focus.js +0 -39
- package/dist/button-group.test.interactions.d.ts +0 -1
- package/dist/button-group.test.interactions.js +0 -91
- package/dist/button.stories.d.ts +0 -7
- package/dist/button.test.basics.d.ts +0 -1
- package/dist/button.test.basics.js +0 -69
- package/dist/button.test.events.d.ts +0 -1
- package/dist/button.test.events.js +0 -102
- package/dist/checkbox-group.stories.d.ts +0 -6
- package/dist/checkbox-group.test.basics.d.ts +0 -1
- package/dist/checkbox-group.test.basics.js +0 -116
- package/dist/checkbox-group.test.events.d.ts +0 -1
- package/dist/checkbox-group.test.events.js +0 -111
- package/dist/checkbox-group.test.focus.d.ts +0 -1
- package/dist/checkbox-group.test.focus.js +0 -70
- package/dist/checkbox-group.test.form.d.ts +0 -1
- package/dist/checkbox-group.test.form.js +0 -131
- package/dist/checkbox-group.test.interactions.d.ts +0 -1
- package/dist/checkbox-group.test.interactions.js +0 -82
- package/dist/checkbox-group.test.validity.d.ts +0 -1
- package/dist/checkbox-group.test.validity.js +0 -145
- package/dist/checkbox.stories.d.ts +0 -5
- package/dist/checkbox.test.basics.d.ts +0 -1
- package/dist/checkbox.test.basics.js +0 -90
- package/dist/checkbox.test.events.d.ts +0 -1
- package/dist/checkbox.test.events.js +0 -105
- package/dist/checkbox.test.focus.d.ts +0 -1
- package/dist/checkbox.test.focus.js +0 -51
- package/dist/checkbox.test.form.d.ts +0 -1
- package/dist/checkbox.test.form.js +0 -133
- package/dist/checkbox.test.interactions.d.ts +0 -1
- package/dist/checkbox.test.interactions.js +0 -131
- package/dist/checkbox.test.validity.d.ts +0 -1
- package/dist/checkbox.test.validity.js +0 -128
- package/dist/drawer.stories.d.ts +0 -6
- package/dist/drawer.test.accessibility.d.ts +0 -1
- package/dist/drawer.test.accessibility.js +0 -22
- package/dist/drawer.test.basics.d.ts +0 -1
- package/dist/drawer.test.basics.js +0 -44
- package/dist/drawer.test.closing.d.ts +0 -1
- package/dist/drawer.test.closing.js +0 -40
- package/dist/drawer.test.events.d.ts +0 -1
- package/dist/drawer.test.events.js +0 -42
- package/dist/drawer.test.methods.d.ts +0 -1
- package/dist/drawer.test.methods.js +0 -35
- package/dist/dropdown.option.test.basics.d.ts +0 -1
- package/dist/dropdown.option.test.basics.js +0 -34
- package/dist/dropdown.option.test.basics.multiple.d.ts +0 -1
- package/dist/dropdown.option.test.basics.multiple.js +0 -36
- package/dist/dropdown.option.test.basics.single.d.ts +0 -1
- package/dist/dropdown.option.test.basics.single.js +0 -29
- package/dist/dropdown.option.test.events.d.ts +0 -1
- package/dist/dropdown.option.test.events.js +0 -36
- package/dist/dropdown.option.test.focus.d.ts +0 -1
- package/dist/dropdown.option.test.focus.js +0 -11
- package/dist/dropdown.option.test.interactions.multiple.d.ts +0 -1
- package/dist/dropdown.option.test.interactions.multiple.js +0 -42
- package/dist/dropdown.option.test.interactions.single.d.ts +0 -1
- package/dist/dropdown.option.test.interactions.single.js +0 -76
- package/dist/dropdown.stories.d.ts +0 -8
- package/dist/dropdown.test.basics.d.ts +0 -1
- package/dist/dropdown.test.basics.filterable.d.ts +0 -1
- package/dist/dropdown.test.basics.filterable.js +0 -108
- package/dist/dropdown.test.basics.js +0 -181
- package/dist/dropdown.test.basics.multiple.d.ts +0 -1
- package/dist/dropdown.test.basics.multiple.js +0 -259
- package/dist/dropdown.test.basics.single.d.ts +0 -1
- package/dist/dropdown.test.basics.single.js +0 -122
- package/dist/dropdown.test.events.d.ts +0 -1
- package/dist/dropdown.test.events.filterable.d.ts +0 -1
- package/dist/dropdown.test.events.filterable.js +0 -31
- package/dist/dropdown.test.events.js +0 -251
- package/dist/dropdown.test.events.multiple.d.ts +0 -1
- package/dist/dropdown.test.events.multiple.js +0 -446
- package/dist/dropdown.test.events.single.d.ts +0 -1
- package/dist/dropdown.test.events.single.js +0 -343
- package/dist/dropdown.test.focus.d.ts +0 -1
- package/dist/dropdown.test.focus.filterable.d.ts +0 -1
- package/dist/dropdown.test.focus.filterable.js +0 -140
- package/dist/dropdown.test.focus.js +0 -107
- package/dist/dropdown.test.focus.multiple.d.ts +0 -1
- package/dist/dropdown.test.focus.multiple.js +0 -170
- package/dist/dropdown.test.focus.single.d.ts +0 -1
- package/dist/dropdown.test.focus.single.js +0 -42
- package/dist/dropdown.test.form.d.ts +0 -1
- package/dist/dropdown.test.form.js +0 -74
- package/dist/dropdown.test.form.multiple.d.ts +0 -1
- package/dist/dropdown.test.form.multiple.js +0 -151
- package/dist/dropdown.test.form.single.d.ts +0 -1
- package/dist/dropdown.test.form.single.js +0 -129
- package/dist/dropdown.test.interactions.d.ts +0 -1
- package/dist/dropdown.test.interactions.filterable.d.ts +0 -1
- package/dist/dropdown.test.interactions.filterable.js +0 -805
- package/dist/dropdown.test.interactions.js +0 -696
- package/dist/dropdown.test.interactions.multiple.d.ts +0 -1
- package/dist/dropdown.test.interactions.multiple.js +0 -1026
- package/dist/dropdown.test.interactions.single.d.ts +0 -1
- package/dist/dropdown.test.interactions.single.js +0 -569
- package/dist/dropdown.test.validity.d.ts +0 -1
- package/dist/dropdown.test.validity.js +0 -181
- package/dist/form-controls-layout.stories.d.ts +0 -10
- package/dist/form-controls-layout.test.basics.d.ts +0 -2
- package/dist/form-controls-layout.test.basics.js +0 -75
- package/dist/form-controls-layout.test.interactions.d.ts +0 -2
- package/dist/form-controls-layout.test.interactions.js +0 -26
- package/dist/icon-button.stories.d.ts +0 -6
- package/dist/icon-button.test.basics.d.ts +0 -1
- package/dist/icon-button.test.basics.js +0 -43
- package/dist/icon-button.test.focus.d.ts +0 -1
- package/dist/icon-button.test.focus.js +0 -13
- package/dist/input.stories.d.ts +0 -8
- package/dist/input.test.basics.d.ts +0 -1
- package/dist/input.test.basics.js +0 -138
- package/dist/input.test.events.d.ts +0 -1
- package/dist/input.test.events.js +0 -98
- package/dist/input.test.focus.d.ts +0 -1
- package/dist/input.test.focus.js +0 -58
- package/dist/input.test.form.d.ts +0 -1
- package/dist/input.test.form.js +0 -74
- package/dist/input.test.validity.d.ts +0 -1
- package/dist/input.test.validity.js +0 -258
- package/dist/label.test.basics.d.ts +0 -1
- package/dist/label.test.basics.js +0 -136
- package/dist/menu.button.test.basics.d.ts +0 -1
- package/dist/menu.button.test.basics.js +0 -43
- package/dist/menu.link.test.basics.d.ts +0 -1
- package/dist/menu.link.test.basics.js +0 -47
- package/dist/menu.options.test.basics.d.ts +0 -2
- package/dist/menu.options.test.basics.js +0 -44
- package/dist/menu.options.test.events.d.ts +0 -1
- package/dist/menu.options.test.events.js +0 -19
- package/dist/menu.stories.d.ts +0 -11
- package/dist/menu.test.basics.d.ts +0 -1
- package/dist/menu.test.basics.js +0 -178
- package/dist/menu.test.events.d.ts +0 -3
- package/dist/menu.test.events.js +0 -125
- package/dist/menu.test.focus.d.ts +0 -2
- package/dist/menu.test.focus.js +0 -102
- package/dist/menu.test.interactions.d.ts +0 -3
- package/dist/menu.test.interactions.js +0 -1069
- package/dist/modal.icon-button.test.basics.d.ts +0 -1
- package/dist/modal.icon-button.test.basics.js +0 -46
- package/dist/modal.stories.d.ts +0 -13
- package/dist/modal.tertiary-icon.test.basics.d.ts +0 -1
- package/dist/modal.tertiary-icon.test.basics.js +0 -60
- package/dist/modal.test.accessibility.d.ts +0 -1
- package/dist/modal.test.accessibility.js +0 -38
- package/dist/modal.test.basics.d.ts +0 -3
- package/dist/modal.test.basics.js +0 -204
- package/dist/modal.test.close.d.ts +0 -1
- package/dist/modal.test.close.js +0 -35
- package/dist/modal.test.events.d.ts +0 -1
- package/dist/modal.test.events.js +0 -99
- package/dist/modal.test.lock-scroll.d.ts +0 -1
- package/dist/modal.test.lock-scroll.js +0 -67
- package/dist/modal.test.methods.d.ts +0 -1
- package/dist/modal.test.methods.js +0 -20
- package/dist/modal.test.scrollbars.d.ts +0 -1
- package/dist/modal.test.scrollbars.js +0 -18
- package/dist/radio-group.stories.d.ts +0 -6
- package/dist/radio-group.test.basics.d.ts +0 -2
- package/dist/radio-group.test.basics.js +0 -324
- package/dist/radio-group.test.events.d.ts +0 -2
- package/dist/radio-group.test.events.js +0 -278
- package/dist/radio-group.test.focus.d.ts +0 -2
- package/dist/radio-group.test.focus.js +0 -95
- package/dist/radio-group.test.form.d.ts +0 -1
- package/dist/radio-group.test.form.js +0 -124
- package/dist/radio-group.test.validity.d.ts +0 -1
- package/dist/radio-group.test.validity.js +0 -311
- package/dist/split-button.primary-button.test.basics.d.ts +0 -1
- package/dist/split-button.primary-button.test.basics.js +0 -31
- package/dist/split-button.primary-button.test.focus.d.ts +0 -1
- package/dist/split-button.primary-button.test.focus.js +0 -14
- package/dist/split-button.primary-link.test.basics.d.ts +0 -1
- package/dist/split-button.primary-link.test.basics.js +0 -30
- package/dist/split-button.primary-link.test.focus.d.ts +0 -1
- package/dist/split-button.primary-link.test.focus.js +0 -15
- package/dist/split-button.secondary-button.test.basics.d.ts +0 -1
- package/dist/split-button.secondary-button.test.basics.js +0 -58
- package/dist/split-button.secondary-button.test.focus.d.ts +0 -1
- package/dist/split-button.secondary-button.test.focus.js +0 -14
- package/dist/split-button.secondary-button.test.interactions.d.ts +0 -2
- package/dist/split-button.secondary-button.test.interactions.js +0 -30
- package/dist/split-button.stories.d.ts +0 -13
- package/dist/split-button.test.basics.d.ts +0 -2
- package/dist/split-button.test.basics.js +0 -87
- package/dist/split-button.test.interactions.d.ts +0 -4
- package/dist/split-button.test.interactions.js +0 -51
- package/dist/tab.group.test.basics.d.ts +0 -3
- package/dist/tab.group.test.basics.js +0 -234
- package/dist/tab.group.test.interactions.d.ts +0 -3
- package/dist/tab.group.test.interactions.js +0 -434
- package/dist/tab.test.basics.d.ts +0 -1
- package/dist/tab.test.basics.js +0 -50
- package/dist/tabs.stories.d.ts +0 -8
- package/dist/tag.stories.d.ts +0 -7
- package/dist/tag.test.basics.d.ts +0 -1
- package/dist/tag.test.basics.js +0 -28
- package/dist/tag.test.events.d.ts +0 -1
- package/dist/tag.test.events.js +0 -93
- package/dist/tag.test.focus.d.ts +0 -1
- package/dist/tag.test.focus.js +0 -10
- package/dist/tag.test.interactions.d.ts +0 -1
- package/dist/tag.test.interactions.js +0 -36
- package/dist/textarea.stories.d.ts +0 -5
- package/dist/textarea.test.basics.d.ts +0 -1
- package/dist/textarea.test.basics.js +0 -177
- package/dist/textarea.test.events.d.ts +0 -1
- package/dist/textarea.test.events.js +0 -106
- package/dist/textarea.test.form.d.ts +0 -1
- package/dist/textarea.test.form.js +0 -71
- package/dist/textarea.test.validity.d.ts +0 -1
- package/dist/textarea.test.validity.js +0 -204
- package/dist/toasts.stories.d.ts +0 -7
- package/dist/toasts.test.basics.d.ts +0 -1
- package/dist/toasts.test.basics.js +0 -115
- package/dist/toasts.toast.test.basics.d.ts +0 -1
- package/dist/toasts.toast.test.basics.js +0 -139
- package/dist/toggle.stories.d.ts +0 -4
- package/dist/toggle.test.basics.d.ts +0 -1
- package/dist/toggle.test.basics.js +0 -69
- package/dist/toggle.test.events.d.ts +0 -1
- package/dist/toggle.test.events.js +0 -30
- package/dist/toggle.test.focus.d.ts +0 -1
- package/dist/toggle.test.focus.js +0 -9
- package/dist/toggle.test.interactions.d.ts +0 -1
- package/dist/toggle.test.interactions.js +0 -81
- package/dist/tooltip.stories.d.ts +0 -7
- package/dist/tooltip.test.basics.d.ts +0 -1
- package/dist/tooltip.test.basics.js +0 -100
- package/dist/tooltip.test.interactions.d.ts +0 -1
- package/dist/tooltip.test.interactions.js +0 -203
- package/dist/tree.item.icon-button.test.basics.d.ts +0 -1
- package/dist/tree.item.icon-button.test.basics.js +0 -22
- package/dist/tree.item.menu.test.basics.d.ts +0 -1
- package/dist/tree.item.menu.test.basics.js +0 -86
- package/dist/tree.item.test.basics.d.ts +0 -2
- package/dist/tree.item.test.basics.js +0 -138
- package/dist/tree.stories.d.ts +0 -9
- package/dist/tree.test.aria.d.ts +0 -1
- package/dist/tree.test.aria.js +0 -86
- package/dist/tree.test.basics.d.ts +0 -3
- package/dist/tree.test.basics.js +0 -130
- package/dist/tree.test.events.d.ts +0 -2
- package/dist/tree.test.events.js +0 -19
- package/dist/tree.test.focus.d.ts +0 -1
- package/dist/tree.test.focus.js +0 -383
@@ -1,696 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import { aTimeout, assert, elementUpdated, expect, fixture, html, } from '@open-wc/testing';
|
3
|
-
import { sendKeys, sendMouse } from '@web/test-runner-commands';
|
4
|
-
import GlideCoreDropdown from './dropdown.js';
|
5
|
-
import GlideCoreDropdownOption from './dropdown.option.js';
|
6
|
-
import sinon from 'sinon';
|
7
|
-
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
8
|
-
GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
|
9
|
-
it('opens when opened programmatically', async () => {
|
10
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
11
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
12
|
-
</glide-core-dropdown>`);
|
13
|
-
component.open = true;
|
14
|
-
await aTimeout(0);
|
15
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
16
|
-
expect(options?.checkVisibility()).to.be.true;
|
17
|
-
});
|
18
|
-
it('opens on ArrowUp', async () => {
|
19
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
20
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
21
|
-
</glide-core-dropdown>`);
|
22
|
-
component.focus();
|
23
|
-
await sendKeys({ press: 'ArrowUp' });
|
24
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
25
|
-
expect(component.open).to.be.true;
|
26
|
-
expect(options?.checkVisibility()).to.be.true;
|
27
|
-
});
|
28
|
-
it('does not open on ArrowUp when `disabled`', async () => {
|
29
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
|
30
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
31
|
-
</glide-core-dropdown>`);
|
32
|
-
component.focus();
|
33
|
-
await sendKeys({ press: 'ArrowUp' });
|
34
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
35
|
-
expect(component.open).to.be.false;
|
36
|
-
expect(options?.checkVisibility()).to.be.false;
|
37
|
-
});
|
38
|
-
it('does not open on ArrowUp when `readonly`', async () => {
|
39
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" readonly>
|
40
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
41
|
-
</glide-core-dropdown>`);
|
42
|
-
component.focus();
|
43
|
-
await sendKeys({ press: 'ArrowUp' });
|
44
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
45
|
-
expect(component.open).to.be.false;
|
46
|
-
expect(options?.checkVisibility()).to.be.false;
|
47
|
-
});
|
48
|
-
it('opens on ArrowDown', async () => {
|
49
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
50
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
51
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
52
|
-
</glide-core-dropdown>`);
|
53
|
-
component.focus();
|
54
|
-
await sendKeys({ press: 'ArrowDown' });
|
55
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
56
|
-
expect(component.open).to.be.true;
|
57
|
-
expect(options?.checkVisibility()).to.be.true;
|
58
|
-
});
|
59
|
-
it('does not open on ArrowDown when `disabled`', async () => {
|
60
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
|
61
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
62
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
63
|
-
</glide-core-dropdown>`);
|
64
|
-
component.focus();
|
65
|
-
await sendKeys({ press: 'ArrowDown' });
|
66
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
67
|
-
expect(component.open).to.be.false;
|
68
|
-
expect(options?.checkVisibility()).to.be.false;
|
69
|
-
});
|
70
|
-
it('does not open on ArrowDown when `readonly`', async () => {
|
71
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" readonly>
|
72
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
73
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
74
|
-
</glide-core-dropdown>`);
|
75
|
-
component.focus();
|
76
|
-
await sendKeys({ press: 'ArrowDown' });
|
77
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
78
|
-
expect(component.open).to.be.false;
|
79
|
-
expect(options?.checkVisibility()).to.be.false;
|
80
|
-
});
|
81
|
-
it('does not scroll the page on ArrowDown when the Add button has focus', async () => {
|
82
|
-
document.body.style.height = '200vh';
|
83
|
-
document.body.style.scrollBehavior = 'auto';
|
84
|
-
const component = await fixture(html `<glide-core-dropdown
|
85
|
-
add-button-label="Add"
|
86
|
-
label="Label"
|
87
|
-
placeholder="Placeholder"
|
88
|
-
open
|
89
|
-
>
|
90
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
91
|
-
</glide-core-dropdown>`);
|
92
|
-
// Wait for it to open.
|
93
|
-
await aTimeout(0);
|
94
|
-
component.focus();
|
95
|
-
await sendKeys({ press: 'ArrowDown' }); // Add button
|
96
|
-
const spy = sinon.spy();
|
97
|
-
document.addEventListener('scroll', spy);
|
98
|
-
await sendKeys({ press: 'ArrowDown' }); // Still Add button
|
99
|
-
// The browser apparently inserts a slight delay after arrowing before scrolling,
|
100
|
-
// even when smooth scrolling is disabled. `100` is a round number that comfortably
|
101
|
-
// gets us past that delay.
|
102
|
-
await aTimeout(100);
|
103
|
-
expect(spy.callCount).to.equal(0);
|
104
|
-
});
|
105
|
-
it('opens on Space', async () => {
|
106
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
107
|
-
<glide-core-dropdown-option
|
108
|
-
label="Label"
|
109
|
-
value="value"
|
110
|
-
></glide-core-dropdown-option>
|
111
|
-
</glide-core-dropdown>`);
|
112
|
-
component.focus();
|
113
|
-
await sendKeys({ press: ' ' });
|
114
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
115
|
-
expect(component.open).to.be.true;
|
116
|
-
expect(options?.checkVisibility()).to.be.true;
|
117
|
-
});
|
118
|
-
it('does not open on Space when `disabled`', async () => {
|
119
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
|
120
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
121
|
-
</glide-core-dropdown>`);
|
122
|
-
component.focus();
|
123
|
-
await sendKeys({ press: ' ' });
|
124
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
125
|
-
expect(component.open).to.be.false;
|
126
|
-
expect(options?.checkVisibility()).to.be.false;
|
127
|
-
});
|
128
|
-
it('does not open on Space when `readonly`', async () => {
|
129
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" readonly>
|
130
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
131
|
-
</glide-core-dropdown>`);
|
132
|
-
component.focus();
|
133
|
-
await sendKeys({ press: ' ' });
|
134
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
135
|
-
expect(component.open).to.be.false;
|
136
|
-
expect(options?.checkVisibility()).to.be.false;
|
137
|
-
});
|
138
|
-
// See the `document` click handler comment in `dropdown.ts` for an explanation.
|
139
|
-
it('opens when opened programmatically via the click handler of another element', async () => {
|
140
|
-
const div = document.createElement('div');
|
141
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
142
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
143
|
-
</glide-core-dropdown>`, { parentNode: div });
|
144
|
-
const button = document.createElement('button');
|
145
|
-
button.addEventListener('click', () => (component.open = true));
|
146
|
-
div.append(button);
|
147
|
-
button.click();
|
148
|
-
// Wait for it to open.
|
149
|
-
await aTimeout(0);
|
150
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
151
|
-
expect(component.open).to.be.true;
|
152
|
-
expect(options?.checkVisibility()).to.be.true;
|
153
|
-
});
|
154
|
-
it('closes when something outside of it is clicked', async () => {
|
155
|
-
const component = await fixture(html `<glide-core-dropdown
|
156
|
-
label="Label"
|
157
|
-
placeholder="Placeholder"
|
158
|
-
open
|
159
|
-
multiple
|
160
|
-
>
|
161
|
-
<glide-core-dropdown-option
|
162
|
-
label="One"
|
163
|
-
selected
|
164
|
-
></glide-core-dropdown-option>
|
165
|
-
|
166
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
167
|
-
</glide-core-dropdown>`);
|
168
|
-
// Wait for it to open.
|
169
|
-
await aTimeout(0);
|
170
|
-
document.body.click();
|
171
|
-
expect(component.open).to.be.false;
|
172
|
-
});
|
173
|
-
it('closes on Escape', async () => {
|
174
|
-
const component = await fixture(html `<glide-core-dropdown
|
175
|
-
label="Label"
|
176
|
-
placeholder="Placeholder"
|
177
|
-
open
|
178
|
-
multiple
|
179
|
-
>
|
180
|
-
<glide-core-dropdown-option
|
181
|
-
label="One"
|
182
|
-
selected
|
183
|
-
></glide-core-dropdown-option>
|
184
|
-
|
185
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
186
|
-
</glide-core-dropdown>`);
|
187
|
-
// Wait for it to open.
|
188
|
-
await aTimeout(0);
|
189
|
-
component.focus();
|
190
|
-
await sendKeys({ press: 'Escape' });
|
191
|
-
expect(component.open).to.be.false;
|
192
|
-
});
|
193
|
-
it('closes on edit via click', async () => {
|
194
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
195
|
-
<glide-core-dropdown-option
|
196
|
-
label="One"
|
197
|
-
editable
|
198
|
-
selected
|
199
|
-
></glide-core-dropdown-option>
|
200
|
-
|
201
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
202
|
-
</glide-core-dropdown>`);
|
203
|
-
component
|
204
|
-
.querySelector('glide-core-dropdown-option')
|
205
|
-
?.shadowRoot?.querySelector('[data-test="edit-button"]')
|
206
|
-
?.click();
|
207
|
-
expect(component.open).to.be.false;
|
208
|
-
});
|
209
|
-
it('closes when the Add button is clicked', async () => {
|
210
|
-
const component = await fixture(html `<glide-core-dropdown
|
211
|
-
add-button-label="Add"
|
212
|
-
label="Label"
|
213
|
-
placeholder="Placeholder"
|
214
|
-
open
|
215
|
-
>
|
216
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
217
|
-
</glide-core-dropdown>`);
|
218
|
-
// Wait for it to open.
|
219
|
-
await aTimeout(0);
|
220
|
-
component.shadowRoot
|
221
|
-
?.querySelector('[data-test="add-button"]')
|
222
|
-
?.click();
|
223
|
-
expect(component.open).to.be.false;
|
224
|
-
});
|
225
|
-
it('opens when open and enabled programmatically', async () => {
|
226
|
-
const component = await fixture(html `<glide-core-dropdown
|
227
|
-
label="Label"
|
228
|
-
placeholder="Placeholder"
|
229
|
-
open
|
230
|
-
disabled
|
231
|
-
>
|
232
|
-
<glide-core-dropdown-option
|
233
|
-
label="One"
|
234
|
-
selected
|
235
|
-
></glide-core-dropdown-option>
|
236
|
-
|
237
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
238
|
-
</glide-core-dropdown>`);
|
239
|
-
component.disabled = false;
|
240
|
-
// Wait for it to open.
|
241
|
-
await aTimeout(0);
|
242
|
-
const options = component?.shadowRoot?.querySelector('[data-test="options"]');
|
243
|
-
expect(options?.checkVisibility()).to.be.true;
|
244
|
-
});
|
245
|
-
it('closes when open and disabled programmatically', async () => {
|
246
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
247
|
-
<glide-core-dropdown-option
|
248
|
-
label="One"
|
249
|
-
selected
|
250
|
-
></glide-core-dropdown-option>
|
251
|
-
|
252
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
253
|
-
</glide-core-dropdown>`);
|
254
|
-
// Wait for it to open.
|
255
|
-
await aTimeout(0);
|
256
|
-
component.disabled = true;
|
257
|
-
const options = component?.shadowRoot?.querySelector('[data-test="options"]');
|
258
|
-
expect(options?.checkVisibility()).to.be.false;
|
259
|
-
});
|
260
|
-
it('activates an option on "mouseover"', async () => {
|
261
|
-
const component = await fixture(html `<glide-core-dropdown open>
|
262
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
263
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
264
|
-
</glide-core-dropdown>`);
|
265
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
266
|
-
options[1]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
267
|
-
await elementUpdated(component);
|
268
|
-
expect(options[0]?.privateActive).to.be.false;
|
269
|
-
expect(options[1]?.privateActive).to.be.true;
|
270
|
-
});
|
271
|
-
it('activates the next option on ArrowDown', async () => {
|
272
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
273
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
274
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
275
|
-
</glide-core-dropdown>`);
|
276
|
-
// Wait for it to open.
|
277
|
-
await aTimeout(0);
|
278
|
-
component.focus();
|
279
|
-
await sendKeys({ press: 'ArrowDown' }); // Two
|
280
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
281
|
-
expect(options[0]?.privateActive).to.be.false;
|
282
|
-
expect(options[1]?.privateActive).to.be.true;
|
283
|
-
});
|
284
|
-
it('activates the Edit button on ArrowDown', async () => {
|
285
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
286
|
-
<glide-core-dropdown-option
|
287
|
-
label="Label"
|
288
|
-
editable
|
289
|
-
></glide-core-dropdown-option>
|
290
|
-
|
291
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
292
|
-
</glide-core-dropdown>`);
|
293
|
-
// Wait for it to open.
|
294
|
-
await aTimeout(0);
|
295
|
-
component.focus();
|
296
|
-
await sendKeys({ press: 'ArrowDown' }); // One's edit button
|
297
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
298
|
-
expect(options[0]?.privateActive).to.be.true;
|
299
|
-
expect(options[0]?.privateIsEditActive).true;
|
300
|
-
expect(options[0]?.privateIsTooltipOpen).false;
|
301
|
-
expect(options[1]?.privateActive).to.be.false;
|
302
|
-
expect(options[1]?.privateIsEditActive).to.be.false;
|
303
|
-
});
|
304
|
-
it('activates the next option on ArrowDown when the Edit button is active', async () => {
|
305
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
306
|
-
<glide-core-dropdown-option
|
307
|
-
label="Label"
|
308
|
-
editable
|
309
|
-
></glide-core-dropdown-option>
|
310
|
-
|
311
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
312
|
-
</glide-core-dropdown>`);
|
313
|
-
// Wait for it to open.
|
314
|
-
await aTimeout(0);
|
315
|
-
component.focus();
|
316
|
-
await sendKeys({ press: 'ArrowDown' }); // One's edit button
|
317
|
-
await sendKeys({ press: 'ArrowDown' }); // Two
|
318
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
319
|
-
expect(options[0]?.privateActive).to.be.false;
|
320
|
-
expect(options[0]?.privateIsEditActive).false;
|
321
|
-
expect(options[1]?.privateActive).to.be.true;
|
322
|
-
expect(options[1]?.privateIsEditActive).to.be.false;
|
323
|
-
expect(options[1]?.privateIsTooltipOpen).true;
|
324
|
-
});
|
325
|
-
it('activates the previous option on ArrowUp', async () => {
|
326
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
327
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
328
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
329
|
-
</glide-core-dropdown>`);
|
330
|
-
// Wait for it to open.
|
331
|
-
await aTimeout(0);
|
332
|
-
component.focus();
|
333
|
-
await sendKeys({ press: 'ArrowDown' }); // Two
|
334
|
-
await sendKeys({ press: 'ArrowUp' }); // One
|
335
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
336
|
-
expect(options[0]?.privateActive).to.be.true;
|
337
|
-
expect(options[1]?.privateActive).to.be.false;
|
338
|
-
});
|
339
|
-
it('activates the Edit button on on ArrowUp', async () => {
|
340
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
341
|
-
<glide-core-dropdown-option
|
342
|
-
label="Label"
|
343
|
-
editable
|
344
|
-
></glide-core-dropdown-option>
|
345
|
-
|
346
|
-
<glide-core-dropdown-option
|
347
|
-
label="Two"
|
348
|
-
editable
|
349
|
-
></glide-core-dropdown-option>
|
350
|
-
</glide-core-dropdown>`);
|
351
|
-
// Wait for it to open.
|
352
|
-
await aTimeout(0);
|
353
|
-
component.focus();
|
354
|
-
await sendKeys({ press: 'ArrowDown' }); // One's Edit button
|
355
|
-
await sendKeys({ press: 'ArrowDown' }); // Two
|
356
|
-
await sendKeys({ press: 'ArrowDown' }); // Two's Edit button
|
357
|
-
await sendKeys({ press: 'ArrowUp' }); // Two
|
358
|
-
await sendKeys({ press: 'ArrowUp' }); // One's Edit button
|
359
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
360
|
-
expect(options[0]?.privateActive).to.be.true;
|
361
|
-
expect(options[0]?.privateIsEditActive).to.be.true;
|
362
|
-
expect(options[0]?.privateIsTooltipOpen).false;
|
363
|
-
expect(options[1]?.privateActive).to.be.false;
|
364
|
-
expect(options[1]?.privateIsEditActive).to.be.false;
|
365
|
-
expect(options[1]?.privateIsTooltipOpen).to.be.false;
|
366
|
-
});
|
367
|
-
it('activates previously active option on ArrowUp', async () => {
|
368
|
-
const component = await fixture(html `<glide-core-dropdown
|
369
|
-
add-button-label="Add"
|
370
|
-
label="Label"
|
371
|
-
placeholder="Placeholder"
|
372
|
-
open
|
373
|
-
>
|
374
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
375
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
376
|
-
</glide-core-dropdown>`);
|
377
|
-
// Wait for it to open.
|
378
|
-
await aTimeout(0);
|
379
|
-
component.focus();
|
380
|
-
await sendKeys({ press: 'ArrowDown' }); // Two
|
381
|
-
await sendKeys({ press: 'ArrowDown' }); // Add button
|
382
|
-
await sendKeys({ press: 'ArrowUp' }); // Two
|
383
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
384
|
-
expect(options[0]?.privateActive).to.be.false;
|
385
|
-
expect(options[0]?.privateIsEditActive).to.be.false;
|
386
|
-
expect(options[0]?.privateIsTooltipOpen).to.be.false;
|
387
|
-
expect(options[1]?.privateActive).to.be.true;
|
388
|
-
expect(options[1]?.privateIsTooltipOpen).to.be.true;
|
389
|
-
expect(options[1]?.privateIsEditActive).to.be.false;
|
390
|
-
});
|
391
|
-
it('activates the Edit button on ArrowUp', async () => {
|
392
|
-
const component = await fixture(html `<glide-core-dropdown
|
393
|
-
add-button-label="Add"
|
394
|
-
label="Label"
|
395
|
-
placeholder="Placeholder"
|
396
|
-
open
|
397
|
-
>
|
398
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
399
|
-
|
400
|
-
<glide-core-dropdown-option
|
401
|
-
label="Two"
|
402
|
-
editable
|
403
|
-
></glide-core-dropdown-option>
|
404
|
-
</glide-core-dropdown>`);
|
405
|
-
// Wait for it to open.
|
406
|
-
await aTimeout(0);
|
407
|
-
component.focus();
|
408
|
-
await sendKeys({ press: 'ArrowDown' }); // Two
|
409
|
-
await sendKeys({ press: 'ArrowDown' }); // Two's Edit button
|
410
|
-
await sendKeys({ press: 'ArrowDown' }); // Add button
|
411
|
-
await sendKeys({ press: 'ArrowUp' }); // Two's Edit button
|
412
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
413
|
-
expect(options[0]?.privateActive).to.be.false;
|
414
|
-
expect(options[0]?.privateIsEditActive).to.be.false;
|
415
|
-
expect(options[0]?.privateIsTooltipOpen).to.be.false;
|
416
|
-
expect(options[1]?.privateActive).to.be.true;
|
417
|
-
expect(options[1]?.privateIsEditActive).to.be.true;
|
418
|
-
expect(options[1]?.privateIsTooltipOpen).to.be.false;
|
419
|
-
});
|
420
|
-
it('activates the first option on Home', async () => {
|
421
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
422
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
423
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
424
|
-
</glide-core-dropdown>`);
|
425
|
-
// Wait for it to open.
|
426
|
-
await aTimeout(0);
|
427
|
-
component.focus();
|
428
|
-
await sendKeys({ press: 'End' });
|
429
|
-
await sendKeys({ press: 'Home' });
|
430
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
431
|
-
expect(options[0]?.privateActive).to.be.true;
|
432
|
-
expect(options[0]?.privateIsEditActive).to.be.false;
|
433
|
-
expect(options[0]?.privateIsTooltipOpen).to.be.true;
|
434
|
-
expect(options[1]?.privateActive).to.be.false;
|
435
|
-
expect(options[1]?.privateIsEditActive).to.be.false;
|
436
|
-
expect(options[1]?.privateIsTooltipOpen).to.be.false;
|
437
|
-
});
|
438
|
-
it('activates the first option on PageUp', async () => {
|
439
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
440
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
441
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
442
|
-
</glide-core-dropdown>`);
|
443
|
-
// Wait for it to open.
|
444
|
-
await aTimeout(0);
|
445
|
-
component.focus();
|
446
|
-
await sendKeys({ press: 'PageDown' });
|
447
|
-
await sendKeys({ press: 'PageUp' });
|
448
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
449
|
-
expect(options[0]?.privateActive).to.be.true;
|
450
|
-
expect(options[0]?.privateIsEditActive).to.be.false;
|
451
|
-
expect(options[0]?.privateIsTooltipOpen).to.be.true;
|
452
|
-
expect(options[1]?.privateActive).to.be.false;
|
453
|
-
expect(options[1]?.privateIsEditActive).to.be.false;
|
454
|
-
expect(options[1]?.privateIsTooltipOpen).to.be.false;
|
455
|
-
});
|
456
|
-
it('activates the first option on ArrowUp + Meta', async () => {
|
457
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
458
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
459
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
460
|
-
</glide-core-dropdown>`);
|
461
|
-
// Wait for it to open.
|
462
|
-
await aTimeout(0);
|
463
|
-
component.focus();
|
464
|
-
await sendKeys({ press: 'End' });
|
465
|
-
await sendKeys({ down: 'Meta' });
|
466
|
-
await sendKeys({ press: 'ArrowUp' });
|
467
|
-
await sendKeys({ up: 'Meta' });
|
468
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
469
|
-
expect(options[0]?.privateActive).to.be.true;
|
470
|
-
expect(options[0]?.privateIsEditActive).to.be.false;
|
471
|
-
expect(options[0]?.privateIsTooltipOpen).to.be.true;
|
472
|
-
expect(options[1]?.privateActive).to.be.false;
|
473
|
-
expect(options[1]?.privateIsEditActive).to.be.false;
|
474
|
-
expect(options[1]?.privateIsTooltipOpen).to.be.false;
|
475
|
-
});
|
476
|
-
it('activates the last option on End', async () => {
|
477
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
478
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
479
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
480
|
-
</glide-core-dropdown>`);
|
481
|
-
// Wait for it to open.
|
482
|
-
await aTimeout(0);
|
483
|
-
component.focus();
|
484
|
-
await sendKeys({ press: 'End' });
|
485
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
486
|
-
expect(options[0]?.privateActive).to.be.false;
|
487
|
-
expect(options[0]?.privateIsEditActive).to.be.false;
|
488
|
-
expect(options[0]?.privateIsTooltipOpen).to.be.false;
|
489
|
-
expect(options[1]?.privateActive).to.be.true;
|
490
|
-
expect(options[1]?.privateIsEditActive).to.be.false;
|
491
|
-
expect(options[1]?.privateIsTooltipOpen).to.be.true;
|
492
|
-
});
|
493
|
-
it('activates the last option on PageDown', async () => {
|
494
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
495
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
496
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
497
|
-
</glide-core-dropdown>`);
|
498
|
-
// Wait for it to open.
|
499
|
-
await aTimeout(0);
|
500
|
-
component.focus();
|
501
|
-
await sendKeys({ press: 'PageDown' });
|
502
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
503
|
-
expect(options[0]?.privateActive).to.be.false;
|
504
|
-
expect(options[0]?.privateIsEditActive).to.be.false;
|
505
|
-
expect(options[0]?.privateIsTooltipOpen).to.be.false;
|
506
|
-
expect(options[1]?.privateActive).to.be.true;
|
507
|
-
expect(options[1]?.privateIsEditActive).to.be.false;
|
508
|
-
expect(options[1]?.privateIsTooltipOpen).to.be.true;
|
509
|
-
});
|
510
|
-
it('activates the last option on Meta + ArrowDown', async () => {
|
511
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
512
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
513
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
514
|
-
</glide-core-dropdown>`);
|
515
|
-
// Wait for it to open.
|
516
|
-
await aTimeout(0);
|
517
|
-
component.focus();
|
518
|
-
await sendKeys({ down: 'Meta' });
|
519
|
-
await sendKeys({ press: 'ArrowDown' });
|
520
|
-
await sendKeys({ up: 'Meta' });
|
521
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
522
|
-
expect(options[0]?.privateActive).to.be.false;
|
523
|
-
expect(options[0]?.privateIsEditActive).to.be.false;
|
524
|
-
expect(options[0]?.privateIsTooltipOpen).to.be.false;
|
525
|
-
expect(options[1]?.privateActive).to.be.true;
|
526
|
-
expect(options[1]?.privateIsEditActive).to.be.false;
|
527
|
-
expect(options[1]?.privateIsTooltipOpen).to.be.true;
|
528
|
-
});
|
529
|
-
it('activates the previously active option when tabbing back from the Add button', async () => {
|
530
|
-
const component = await fixture(html `<glide-core-dropdown
|
531
|
-
add-button-label="Add"
|
532
|
-
label="Label"
|
533
|
-
placeholder="Placeholder"
|
534
|
-
open
|
535
|
-
>
|
536
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
537
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
538
|
-
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
539
|
-
</glide-core-dropdown>`);
|
540
|
-
// Wait for it to open.
|
541
|
-
await aTimeout(0);
|
542
|
-
component.focus();
|
543
|
-
await sendKeys({ press: 'ArrowDown' }); // Two
|
544
|
-
await sendKeys({ press: 'Tab' });
|
545
|
-
await sendKeys({ down: 'Shift' });
|
546
|
-
await sendKeys({ press: 'Tab' });
|
547
|
-
await sendKeys({ up: 'Shift' });
|
548
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
549
|
-
expect(options[0]?.privateActive).to.be.false;
|
550
|
-
expect(options[0]?.privateIsEditActive).to.be.false;
|
551
|
-
expect(options[0]?.privateIsTooltipOpen).to.be.false;
|
552
|
-
expect(options[1]?.privateActive).to.be.true;
|
553
|
-
expect(options[1]?.privateIsEditActive).to.be.false;
|
554
|
-
expect(options[1]?.privateIsTooltipOpen).to.be.true;
|
555
|
-
expect(options[2]?.privateActive).to.be.false;
|
556
|
-
expect(options[2]?.privateIsEditActive).to.be.false;
|
557
|
-
expect(options[2]?.privateIsTooltipOpen).to.be.false;
|
558
|
-
});
|
559
|
-
it('deactivates the active option when the Add button is tabbed to', async () => {
|
560
|
-
const component = await fixture(html `<glide-core-dropdown
|
561
|
-
add-button-label="Add"
|
562
|
-
label="Label"
|
563
|
-
placeholder="Placeholder"
|
564
|
-
open
|
565
|
-
>
|
566
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
567
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
568
|
-
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
569
|
-
</glide-core-dropdown>`);
|
570
|
-
// Wait for it to open.
|
571
|
-
await aTimeout(0);
|
572
|
-
component.focus();
|
573
|
-
await sendKeys({ press: 'Tab' });
|
574
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
575
|
-
expect(options[0]?.privateActive).to.be.false;
|
576
|
-
expect(options[0]?.privateIsEditActive).to.be.false;
|
577
|
-
expect(options[0]?.privateIsTooltipOpen).to.be.false;
|
578
|
-
expect(options[1]?.privateActive).to.be.false;
|
579
|
-
});
|
580
|
-
it('does not wrap on ArrowUp', async () => {
|
581
|
-
const component = await fixture(html `<glide-core-dropdown open>
|
582
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
583
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
584
|
-
</glide-core-dropdown>`);
|
585
|
-
// Wait for it to open.
|
586
|
-
await aTimeout(0);
|
587
|
-
component.focus();
|
588
|
-
await sendKeys({ press: 'ArrowUp' });
|
589
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
590
|
-
expect(options[0]?.privateActive).to.be.true;
|
591
|
-
expect(options[1]?.privateActive).to.be.false;
|
592
|
-
});
|
593
|
-
it('does not wrap on ArrowDown', async () => {
|
594
|
-
const component = await fixture(html `<glide-core-dropdown open>
|
595
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
596
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
597
|
-
</glide-core-dropdown>`);
|
598
|
-
// Wait for it to open.
|
599
|
-
await aTimeout(0);
|
600
|
-
component.focus();
|
601
|
-
await sendKeys({ press: 'ArrowDown' }); // Two
|
602
|
-
await sendKeys({ press: 'ArrowDown' }); // Two
|
603
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
604
|
-
expect(options[0]?.privateActive).to.be.false;
|
605
|
-
expect(options[1]?.privateActive).to.be.true;
|
606
|
-
});
|
607
|
-
it('updates `privateSize` on every option when `size` is changed programmatically', async () => {
|
608
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
609
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
610
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
611
|
-
</glide-core-dropdown>`);
|
612
|
-
component.size = 'small';
|
613
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
614
|
-
expect(options[0].privateSize).to.equal('small');
|
615
|
-
expect(options[1].privateSize).to.equal('small');
|
616
|
-
});
|
617
|
-
it('opens when something other than the primary button is clicked', async () => {
|
618
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
619
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
620
|
-
</glide-core-dropdown>`);
|
621
|
-
const internalLabel = component.shadowRoot?.querySelector('[data-test="internal-label"]');
|
622
|
-
assert(internalLabel);
|
623
|
-
const { x, y } = internalLabel.getBoundingClientRect();
|
624
|
-
// A simple `option.click()` won't do because we need a "mousedown" so that
|
625
|
-
// `#onDropdownMousedown` gets covered.
|
626
|
-
await sendMouse({
|
627
|
-
type: 'click',
|
628
|
-
position: [Math.ceil(x), Math.ceil(y)],
|
629
|
-
});
|
630
|
-
expect(component.open).to.be.true;
|
631
|
-
});
|
632
|
-
it('does not open on edit via click', async () => {
|
633
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
634
|
-
<glide-core-dropdown-option
|
635
|
-
label="Label"
|
636
|
-
editable
|
637
|
-
selected
|
638
|
-
></glide-core-dropdown-option>
|
639
|
-
</glide-core-dropdown>`);
|
640
|
-
component.shadowRoot
|
641
|
-
?.querySelector('[data-test="edit-button"]')
|
642
|
-
?.click();
|
643
|
-
expect(component.open).to.be.false;
|
644
|
-
});
|
645
|
-
it('does not open on edit via Enter', async () => {
|
646
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
647
|
-
<glide-core-dropdown-option
|
648
|
-
label="Label"
|
649
|
-
editable
|
650
|
-
selected
|
651
|
-
></glide-core-dropdown-option>
|
652
|
-
</glide-core-dropdown>`);
|
653
|
-
component.shadowRoot
|
654
|
-
?.querySelector('[data-test="edit-button"]')
|
655
|
-
?.focus();
|
656
|
-
await sendKeys({ press: 'Enter' });
|
657
|
-
expect(component.open).to.be.false;
|
658
|
-
});
|
659
|
-
it('does not open on edit via Space', async () => {
|
660
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
661
|
-
<glide-core-dropdown-option
|
662
|
-
label="Label"
|
663
|
-
editable
|
664
|
-
selected
|
665
|
-
></glide-core-dropdown-option>
|
666
|
-
</glide-core-dropdown>`);
|
667
|
-
component.shadowRoot
|
668
|
-
?.querySelector('[data-test="edit-button"]')
|
669
|
-
?.focus();
|
670
|
-
await sendKeys({ press: ' ' });
|
671
|
-
expect(component.open).to.be.false;
|
672
|
-
});
|
673
|
-
it('hides the tooltip of the active option when opened via click', async () => {
|
674
|
-
// The period is arbitrary. 500 of them ensures we exceed the maximum
|
675
|
-
// width even if it's increased.
|
676
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
677
|
-
<glide-core-dropdown-option
|
678
|
-
label=${'.'.repeat(500)}
|
679
|
-
></glide-core-dropdown-option>
|
680
|
-
|
681
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
682
|
-
</glide-core-dropdown>`);
|
683
|
-
// Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
|
684
|
-
// which puts us in a guard in the event handler. `Event` has no `detail` property
|
685
|
-
// and would work. `CustomEvent` is used for completeness and to get us as close as
|
686
|
-
// possible to a real click. See the comment in the handler for more information.
|
687
|
-
component.shadowRoot
|
688
|
-
?.querySelector('[data-test="primary-button"]')
|
689
|
-
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
690
|
-
// Wait for it to open.
|
691
|
-
await aTimeout(0);
|
692
|
-
const tooltip = component
|
693
|
-
.querySelector('glide-core-dropdown-option')
|
694
|
-
?.shadowRoot?.querySelector('[data-test="tooltip"]');
|
695
|
-
expect(tooltip?.checkVisibility()).to.be.false;
|
696
|
-
});
|