@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 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,569 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import { ArgumentError } from 'ow';
|
3
|
-
import { aTimeout, assert, elementUpdated, expect, fixture, html, oneEvent, } from '@open-wc/testing';
|
4
|
-
import { sendKeys } from '@web/test-runner-commands';
|
5
|
-
import GlideCoreDropdown from './dropdown.js';
|
6
|
-
import GlideCoreDropdownOption from './dropdown.option.js';
|
7
|
-
import sinon from 'sinon';
|
8
|
-
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
9
|
-
GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
|
10
|
-
it('opens on click', async () => {
|
11
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
12
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
13
|
-
</glide-core-dropdown>`);
|
14
|
-
// Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
|
15
|
-
// which puts us in a guard in the event handler. `Event` has no `detail` property
|
16
|
-
// and would work. `CustomEvent` is used for completeness and to get us as close as
|
17
|
-
// possible to a real click. See the comment in the handler for more information.
|
18
|
-
component.shadowRoot
|
19
|
-
?.querySelector('[data-test="primary-button"]')
|
20
|
-
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
21
|
-
// Wait for it to open.
|
22
|
-
await aTimeout(0);
|
23
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
24
|
-
expect(component.open).to.be.true;
|
25
|
-
expect(options?.checkVisibility()).to.be.true;
|
26
|
-
});
|
27
|
-
it('toggles open and closed when the primary button is clicked', async () => {
|
28
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
29
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
30
|
-
</glide-core-dropdown>`);
|
31
|
-
// Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
|
32
|
-
// which puts us in a guard in the event handler. `Event` has no `detail` property
|
33
|
-
// and would work. `CustomEvent` is used for completeness and to get us as close as
|
34
|
-
// possible to a real click. See the comment in the handler for more information.
|
35
|
-
component.shadowRoot
|
36
|
-
?.querySelector('[data-test="primary-button"]')
|
37
|
-
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
38
|
-
await elementUpdated(component);
|
39
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
40
|
-
expect(component.open).to.be.false;
|
41
|
-
expect(options?.checkVisibility()).to.be.false;
|
42
|
-
});
|
43
|
-
it('does not toggle open and closed when the button overflow text is clicked', async () => {
|
44
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
45
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
46
|
-
</glide-core-dropdown>`);
|
47
|
-
// Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
|
48
|
-
// which puts us in a guard in the event handler. `Event` has no `detail` property
|
49
|
-
// and would work. `CustomEvent` is used for completeness and to get us as close as
|
50
|
-
// possible to a real click. See the comment in the handler for more information.
|
51
|
-
component.shadowRoot
|
52
|
-
?.querySelector('[data-test="tag-overflow-text"]')
|
53
|
-
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
54
|
-
// Wait for it to open.
|
55
|
-
await aTimeout(0);
|
56
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
57
|
-
expect(component.open).to.be.true;
|
58
|
-
expect(options?.checkVisibility()).to.be.true;
|
59
|
-
});
|
60
|
-
it('selects an option on click', async () => {
|
61
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
62
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
63
|
-
</glide-core-dropdown>`);
|
64
|
-
// Wait for it to open.
|
65
|
-
await aTimeout(0);
|
66
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
67
|
-
option?.click();
|
68
|
-
await elementUpdated(component);
|
69
|
-
const labels = component.shadowRoot?.querySelectorAll('[data-test="selected-option-label"]');
|
70
|
-
expect(option?.selected).to.be.true;
|
71
|
-
expect(labels?.length).to.equal(1);
|
72
|
-
expect(labels?.[0]?.textContent?.trim()).to.equal('One,');
|
73
|
-
});
|
74
|
-
it('selects an option on Space', async () => {
|
75
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
76
|
-
<glide-core-dropdown-option
|
77
|
-
label="One"
|
78
|
-
value="one"
|
79
|
-
></glide-core-dropdown-option>
|
80
|
-
</glide-core-dropdown>`);
|
81
|
-
// Wait for it to open.
|
82
|
-
await aTimeout(0);
|
83
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
84
|
-
option?.focus();
|
85
|
-
await sendKeys({ press: ' ' });
|
86
|
-
expect(option?.selected).to.be.true;
|
87
|
-
});
|
88
|
-
it('selects an option when its icon is clicked', async () => {
|
89
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
90
|
-
<glide-core-dropdown-option label="One" value="one">
|
91
|
-
<svg
|
92
|
-
slot="icon"
|
93
|
-
fill="none"
|
94
|
-
viewBox="0 0 24 24"
|
95
|
-
stroke-width="1.5"
|
96
|
-
stroke="currentColor"
|
97
|
-
style="height: 1rem; width: 1rem;"
|
98
|
-
>
|
99
|
-
<path
|
100
|
-
stroke-linecap="round"
|
101
|
-
stroke-linejoin="round"
|
102
|
-
d="M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15"
|
103
|
-
/>
|
104
|
-
</svg>
|
105
|
-
</glide-core-dropdown-option>
|
106
|
-
</glide-core-dropdown>`);
|
107
|
-
// Wait for it to open.
|
108
|
-
await aTimeout(0);
|
109
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
110
|
-
option
|
111
|
-
?.querySelector('[slot="icon"]')
|
112
|
-
?.dispatchEvent(new Event('click', { bubbles: true }));
|
113
|
-
expect(option?.selected).to.be.true;
|
114
|
-
});
|
115
|
-
it('does not deselect options on Space', async () => {
|
116
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
117
|
-
<glide-core-dropdown-option
|
118
|
-
label="One"
|
119
|
-
value="one"
|
120
|
-
selected
|
121
|
-
></glide-core-dropdown-option>
|
122
|
-
</glide-core-dropdown>`);
|
123
|
-
component?.focus();
|
124
|
-
await sendKeys({ press: ' ' });
|
125
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
126
|
-
expect(option?.selected).to.be.true;
|
127
|
-
});
|
128
|
-
it('selects an option on Enter', async () => {
|
129
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
130
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
131
|
-
</glide-core-dropdown>`);
|
132
|
-
// Wait for it to open.
|
133
|
-
await aTimeout(0);
|
134
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
135
|
-
option?.focus();
|
136
|
-
await sendKeys({ press: 'Enter' });
|
137
|
-
expect(option?.selected).to.be.true;
|
138
|
-
});
|
139
|
-
it('deactivates all other options on "mouseover"', async () => {
|
140
|
-
const component = await fixture(html `<glide-core-dropdown open>
|
141
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
142
|
-
|
143
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
144
|
-
</glide-core-dropdown>`);
|
145
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
146
|
-
options[0]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
147
|
-
options[1]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
148
|
-
expect(options[0]?.privateActive).to.be.false;
|
149
|
-
expect(options[1]?.privateActive).to.be.true;
|
150
|
-
});
|
151
|
-
it('closes when an option is selected via click', async () => {
|
152
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
153
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
154
|
-
</glide-core-dropdown>`);
|
155
|
-
// Wait for it to open.
|
156
|
-
await aTimeout(0);
|
157
|
-
component.querySelector('glide-core-dropdown-option')?.click();
|
158
|
-
expect(component.open).to.be.false;
|
159
|
-
});
|
160
|
-
it('closes when an option is selected via Space', async () => {
|
161
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
162
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
163
|
-
</glide-core-dropdown>`);
|
164
|
-
// Wait for it to open.
|
165
|
-
await aTimeout(0);
|
166
|
-
component.focus();
|
167
|
-
await sendKeys({ press: ' ' });
|
168
|
-
expect(component.open).to.be.false;
|
169
|
-
});
|
170
|
-
it('closes when an option is selected via Enter', async () => {
|
171
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
172
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
173
|
-
</glide-core-dropdown>`);
|
174
|
-
// Wait for it to open.
|
175
|
-
await aTimeout(0);
|
176
|
-
component.focus();
|
177
|
-
await sendKeys({ press: 'Enter' });
|
178
|
-
expect(component.open).to.be.false;
|
179
|
-
});
|
180
|
-
it('closes when an option is selected via Enter', async () => {
|
181
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
182
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
183
|
-
</glide-core-dropdown>`);
|
184
|
-
// Wait for it to open.
|
185
|
-
await aTimeout(0);
|
186
|
-
component.querySelector('glide-core-dropdown-option')?.focus();
|
187
|
-
await sendKeys({ press: 'Enter' });
|
188
|
-
expect(component.open).to.be.false;
|
189
|
-
});
|
190
|
-
it('closes when an option is selected via Space', async () => {
|
191
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
192
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
193
|
-
</glide-core-dropdown>`);
|
194
|
-
// Wait for it to open.
|
195
|
-
await aTimeout(0);
|
196
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
197
|
-
option?.focus();
|
198
|
-
await sendKeys({ press: ' ' });
|
199
|
-
expect(component.open).to.be.false;
|
200
|
-
});
|
201
|
-
it('closes when an already selected option is clicked', async () => {
|
202
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
203
|
-
<glide-core-dropdown-option
|
204
|
-
label="Label"
|
205
|
-
selected
|
206
|
-
></glide-core-dropdown-option>
|
207
|
-
</glide-core-dropdown>`);
|
208
|
-
// Wait for it to open.
|
209
|
-
await aTimeout(0);
|
210
|
-
component.querySelector('glide-core-dropdown-option')?.click();
|
211
|
-
expect(component.open).to.be.false;
|
212
|
-
});
|
213
|
-
it('closes on edit via click', async () => {
|
214
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
215
|
-
<glide-core-dropdown-option
|
216
|
-
label="Label"
|
217
|
-
editable
|
218
|
-
selected
|
219
|
-
></glide-core-dropdown-option>
|
220
|
-
</glide-core-dropdown>`);
|
221
|
-
// Wait for it to open.
|
222
|
-
await aTimeout(0);
|
223
|
-
component.shadowRoot
|
224
|
-
?.querySelector('[data-test="edit-button"]')
|
225
|
-
?.click();
|
226
|
-
expect(component.open).to.be.false;
|
227
|
-
});
|
228
|
-
it('deselects all other options when one is newly selected', async () => {
|
229
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
230
|
-
<glide-core-dropdown-option
|
231
|
-
label="One"
|
232
|
-
selected
|
233
|
-
></glide-core-dropdown-option>
|
234
|
-
|
235
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
236
|
-
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
237
|
-
</glide-core-dropdown>`);
|
238
|
-
component.shadowRoot
|
239
|
-
?.querySelector('[data-test="primary-button"]')
|
240
|
-
?.dispatchEvent(new Event('click'));
|
241
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
242
|
-
options[1].click();
|
243
|
-
expect(options[0].selected).to.be.false;
|
244
|
-
expect(options[1].selected).to.be.true;
|
245
|
-
expect(options[2].selected).to.be.false;
|
246
|
-
});
|
247
|
-
it('updates its internal label when `label` of the selected option is changed programmatically', async () => {
|
248
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
249
|
-
<glide-core-dropdown-option
|
250
|
-
label="One"
|
251
|
-
selected
|
252
|
-
></glide-core-dropdown-option>
|
253
|
-
</glide-core-dropdown>`);
|
254
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
255
|
-
assert(option);
|
256
|
-
option.label = 'Two';
|
257
|
-
await elementUpdated(component);
|
258
|
-
const label = component.shadowRoot?.querySelector('[data-test="internal-label"]');
|
259
|
-
expect(label?.textContent?.trim()).to.equal(option?.label);
|
260
|
-
});
|
261
|
-
it('shows an Edit button when `editable` of the selected option is changed programmatically', async () => {
|
262
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
263
|
-
<glide-core-dropdown-option
|
264
|
-
label="One"
|
265
|
-
selected
|
266
|
-
></glide-core-dropdown-option>
|
267
|
-
</glide-core-dropdown>`);
|
268
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
269
|
-
assert(option);
|
270
|
-
option.editable = true;
|
271
|
-
await elementUpdated(component);
|
272
|
-
const editButton = component.shadowRoot?.querySelector('[data-test="edit-button"]');
|
273
|
-
expect(editButton?.checkVisibility()).to.be.true;
|
274
|
-
});
|
275
|
-
it('selects and deselects options when `value` is changed programmatically', async () => {
|
276
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
277
|
-
<glide-core-dropdown-option
|
278
|
-
label="One"
|
279
|
-
value="one"
|
280
|
-
selected
|
281
|
-
></glide-core-dropdown-option>
|
282
|
-
|
283
|
-
<glide-core-dropdown-option
|
284
|
-
label="Two"
|
285
|
-
value="two"
|
286
|
-
></glide-core-dropdown-option>
|
287
|
-
</glide-core-dropdown>`);
|
288
|
-
component.value = ['two'];
|
289
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
290
|
-
expect(options[0].selected).to.be.false;
|
291
|
-
expect(options[1].selected).to.be.true;
|
292
|
-
});
|
293
|
-
it('throws when `value` is changed programmatically to include more than one value', async () => {
|
294
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
295
|
-
<glide-core-dropdown-option
|
296
|
-
label="One"
|
297
|
-
value="one"
|
298
|
-
></glide-core-dropdown-option>
|
299
|
-
|
300
|
-
<glide-core-dropdown-option
|
301
|
-
label="Two"
|
302
|
-
value="two"
|
303
|
-
></glide-core-dropdown-option>
|
304
|
-
</glide-core-dropdown>`);
|
305
|
-
const spy = sinon.spy();
|
306
|
-
try {
|
307
|
-
component.value = ['one', 'two'];
|
308
|
-
}
|
309
|
-
catch (error) {
|
310
|
-
if (error instanceof ArgumentError) {
|
311
|
-
spy();
|
312
|
-
}
|
313
|
-
}
|
314
|
-
expect(spy.callCount).to.equal(1);
|
315
|
-
});
|
316
|
-
it('updates `value` when an option `value` is changed programmatically', async () => {
|
317
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
318
|
-
<glide-core-dropdown-option
|
319
|
-
label="One"
|
320
|
-
value="one"
|
321
|
-
selected
|
322
|
-
></glide-core-dropdown-option>
|
323
|
-
</glide-core-dropdown>`);
|
324
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
325
|
-
assert(option);
|
326
|
-
option.value = 'two';
|
327
|
-
expect(component.value).to.deep.equal(['two']);
|
328
|
-
});
|
329
|
-
it('updates `value` when an option is selected via click', async () => {
|
330
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
331
|
-
<glide-core-dropdown-option
|
332
|
-
label="One"
|
333
|
-
value="one"
|
334
|
-
></glide-core-dropdown-option>
|
335
|
-
|
336
|
-
<glide-core-dropdown-option
|
337
|
-
label="Two"
|
338
|
-
value="two"
|
339
|
-
></glide-core-dropdown-option>
|
340
|
-
|
341
|
-
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
342
|
-
</glide-core-dropdown>`);
|
343
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
344
|
-
options[1].click();
|
345
|
-
expect(component.value).to.deep.equal(['two']);
|
346
|
-
// Reopen it.
|
347
|
-
component.shadowRoot
|
348
|
-
?.querySelector('[data-test="primary-button"]')
|
349
|
-
?.dispatchEvent(new CustomEvent('click', { detail: 1 }));
|
350
|
-
// Wait for it to open.
|
351
|
-
await elementUpdated(component);
|
352
|
-
options[1].click();
|
353
|
-
expect(component.value).to.deep.equal(['two']);
|
354
|
-
// Reopen it.
|
355
|
-
component.shadowRoot
|
356
|
-
?.querySelector('[data-test="primary-button"]')
|
357
|
-
?.dispatchEvent(new CustomEvent('click', { detail: 1 }));
|
358
|
-
// Wait for it to open.
|
359
|
-
await elementUpdated(component);
|
360
|
-
options[2].click();
|
361
|
-
expect(component.value).to.deep.equal([]);
|
362
|
-
});
|
363
|
-
it('updates `value` when an option is selected via Enter', async () => {
|
364
|
-
const component = await fixture(html `<glide-core-dropdown open>
|
365
|
-
<glide-core-dropdown-option
|
366
|
-
label="One"
|
367
|
-
value="one"
|
368
|
-
></glide-core-dropdown-option>
|
369
|
-
|
370
|
-
<glide-core-dropdown-option
|
371
|
-
label="Two"
|
372
|
-
value="two"
|
373
|
-
></glide-core-dropdown-option>
|
374
|
-
|
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
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
380
|
-
options[0].focus();
|
381
|
-
await sendKeys({ press: 'Enter' });
|
382
|
-
expect(component.value).to.deep.equal(['one']);
|
383
|
-
// Reopen it.
|
384
|
-
component.shadowRoot
|
385
|
-
?.querySelector('[data-test="primary-button"]')
|
386
|
-
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
387
|
-
// Wait for it to open.
|
388
|
-
await aTimeout(0);
|
389
|
-
options[1].focus();
|
390
|
-
await sendKeys({ press: 'Enter' });
|
391
|
-
expect(component.value).to.deep.equal(['two']);
|
392
|
-
// Reopen it.
|
393
|
-
component.shadowRoot
|
394
|
-
?.querySelector('[data-test="primary-button"]')
|
395
|
-
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
396
|
-
// Wait for it to open.
|
397
|
-
await aTimeout(0);
|
398
|
-
options[2].focus();
|
399
|
-
await sendKeys({ press: 'Enter' });
|
400
|
-
expect(component.value).to.deep.equal([]);
|
401
|
-
});
|
402
|
-
it('updates `value` when an option is selected via Space', async () => {
|
403
|
-
const component = await fixture(html `<glide-core-dropdown open>
|
404
|
-
<glide-core-dropdown-option
|
405
|
-
label="One"
|
406
|
-
value="one"
|
407
|
-
></glide-core-dropdown-option>
|
408
|
-
|
409
|
-
<glide-core-dropdown-option
|
410
|
-
label="Two"
|
411
|
-
value="two"
|
412
|
-
></glide-core-dropdown-option>
|
413
|
-
|
414
|
-
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
415
|
-
</glide-core-dropdown>`);
|
416
|
-
// Wait for it to open.
|
417
|
-
await aTimeout(0);
|
418
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
419
|
-
options[0].focus();
|
420
|
-
await sendKeys({ press: ' ' });
|
421
|
-
expect(component.value).to.deep.equal(['one']);
|
422
|
-
// Reopen it.
|
423
|
-
component.shadowRoot
|
424
|
-
?.querySelector('[data-test="primary-button"]')
|
425
|
-
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
426
|
-
// Wait for it to open.
|
427
|
-
await aTimeout(0);
|
428
|
-
options[1].focus();
|
429
|
-
await sendKeys({ press: ' ' });
|
430
|
-
expect(component.value).to.deep.equal(['two']);
|
431
|
-
// Reopen it.
|
432
|
-
component.shadowRoot
|
433
|
-
?.querySelector('[data-test="primary-button"]')
|
434
|
-
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
435
|
-
// Wait for it to open.
|
436
|
-
await aTimeout(0);
|
437
|
-
options[2].focus();
|
438
|
-
await sendKeys({ press: ' ' });
|
439
|
-
expect(component.value).to.deep.equal([]);
|
440
|
-
});
|
441
|
-
it('updates `value` when `multiple` is changed to `false` programmatically', async () => {
|
442
|
-
const component = await fixture(html `<glide-core-dropdown open multiple>
|
443
|
-
<glide-core-dropdown-option
|
444
|
-
label="One"
|
445
|
-
value="one"
|
446
|
-
selected
|
447
|
-
></glide-core-dropdown-option>
|
448
|
-
|
449
|
-
<glide-core-dropdown-option
|
450
|
-
label="Two"
|
451
|
-
value="two"
|
452
|
-
selected
|
453
|
-
></glide-core-dropdown-option>
|
454
|
-
</glide-core-dropdown>`);
|
455
|
-
component.multiple = false;
|
456
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
457
|
-
const checkbox = options[1].shadowRoot?.querySelector('[data-test="checkbox"]');
|
458
|
-
expect(options[0].selected).to.be.false;
|
459
|
-
expect(options[1].selected).to.be.true;
|
460
|
-
expect(checkbox?.checked).to.be.true;
|
461
|
-
expect(component.value).to.deep.equal(['two']);
|
462
|
-
});
|
463
|
-
it('updates `value` when the `value` of the selected option is changed programmatically', async () => {
|
464
|
-
const component = await fixture(html `<glide-core-dropdown open>
|
465
|
-
<glide-core-dropdown-option
|
466
|
-
label="One"
|
467
|
-
value="one"
|
468
|
-
selected
|
469
|
-
></glide-core-dropdown-option>
|
470
|
-
|
471
|
-
<glide-core-dropdown-option
|
472
|
-
label="Two"
|
473
|
-
value="two"
|
474
|
-
></glide-core-dropdown-option>
|
475
|
-
</glide-core-dropdown>`);
|
476
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
477
|
-
assert(option);
|
478
|
-
option.value = 'three';
|
479
|
-
expect(component.value).to.deep.equal(['three']);
|
480
|
-
});
|
481
|
-
it('updates `value` when the `value` of the selected option is removed programmatically', async () => {
|
482
|
-
const component = await fixture(html `<glide-core-dropdown open>
|
483
|
-
<glide-core-dropdown-option
|
484
|
-
label="One"
|
485
|
-
value="one"
|
486
|
-
selected
|
487
|
-
></glide-core-dropdown-option>
|
488
|
-
|
489
|
-
<glide-core-dropdown-option
|
490
|
-
label="Two"
|
491
|
-
value="two"
|
492
|
-
></glide-core-dropdown-option>
|
493
|
-
</glide-core-dropdown>`);
|
494
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
495
|
-
assert(option);
|
496
|
-
option.value = '';
|
497
|
-
expect(component.value).to.deep.equal([]);
|
498
|
-
});
|
499
|
-
it('updates the its internal label when an option is newly selected', async () => {
|
500
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
501
|
-
<glide-core-dropdown-option
|
502
|
-
label="One"
|
503
|
-
value="one"
|
504
|
-
></glide-core-dropdown-option>
|
505
|
-
|
506
|
-
<glide-core-dropdown-option
|
507
|
-
label="Two"
|
508
|
-
value="two"
|
509
|
-
></glide-core-dropdown-option>
|
510
|
-
</glide-core-dropdown>`);
|
511
|
-
const option = component.querySelector('glide-core-dropdown-option:last-of-type');
|
512
|
-
option?.click();
|
513
|
-
await elementUpdated(component);
|
514
|
-
const label = component.shadowRoot?.querySelector('[data-test="internal-label"]');
|
515
|
-
expect(label?.textContent?.trim()).to.equal(option?.label);
|
516
|
-
});
|
517
|
-
it('hides Select All', async () => {
|
518
|
-
const component = await fixture(html `<glide-core-dropdown
|
519
|
-
label="Label"
|
520
|
-
placeholder="Placeholder"
|
521
|
-
select-all
|
522
|
-
>
|
523
|
-
<glide-core-dropdown-option
|
524
|
-
label="One"
|
525
|
-
selected
|
526
|
-
></glide-core-dropdown-option>
|
527
|
-
|
528
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
529
|
-
</glide-core-dropdown>`);
|
530
|
-
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
531
|
-
expect(selectAll?.checkVisibility()).to.not.be.ok;
|
532
|
-
});
|
533
|
-
it('cannot be tabbed to when `disabled`', async () => {
|
534
|
-
await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
|
535
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
536
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
537
|
-
</glide-core-dropdown>`);
|
538
|
-
await sendKeys({ down: 'Tab' });
|
539
|
-
expect(document.activeElement).to.equal(document.body);
|
540
|
-
});
|
541
|
-
it('clicks the primary button when `click()` is called', async () => {
|
542
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
543
|
-
<glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
|
544
|
-
</glide-core-dropdown>`);
|
545
|
-
const button = component.shadowRoot?.querySelector('[data-test="primary-button"]');
|
546
|
-
assert(button);
|
547
|
-
setTimeout(() => {
|
548
|
-
component.click();
|
549
|
-
});
|
550
|
-
const event = await oneEvent(button, 'click');
|
551
|
-
expect(event instanceof PointerEvent).to.be.true;
|
552
|
-
});
|
553
|
-
it('unhides its options when made unfilterable', async () => {
|
554
|
-
const component = await fixture(html `<glide-core-dropdown
|
555
|
-
label="Label"
|
556
|
-
placeholder="Placeholder"
|
557
|
-
filterable
|
558
|
-
>
|
559
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
560
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
561
|
-
</glide-core-dropdown>`);
|
562
|
-
component.focus();
|
563
|
-
await sendKeys({ type: 'one' });
|
564
|
-
component.filterable = false;
|
565
|
-
const options = [
|
566
|
-
...component.querySelectorAll('glide-core-dropdown-option'),
|
567
|
-
].filter(({ hidden }) => !hidden);
|
568
|
-
expect(options.length).to.equal(2);
|
569
|
-
});
|
@@ -1 +0,0 @@
|
|
1
|
-
import './dropdown.option.js';
|