@crowdstrike/glide-core 0.13.0 → 0.14.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/dist/drawer.d.ts +2 -2
- package/dist/drawer.js +1 -1
- package/dist/drawer.styles.js +3 -3
- package/dist/dropdown.js +11 -11
- package/dist/dropdown.option.d.ts +1 -1
- package/dist/dropdown.option.js +1 -1
- package/dist/dropdown.styles.js +11 -16
- package/dist/input.styles.js +6 -1
- package/dist/styles/variables.css +1 -1
- package/dist/textarea.styles.js +6 -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 +9 -6
- 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,1026 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
7
|
-
};
|
8
|
-
import { LitElement } from 'lit';
|
9
|
-
import { aTimeout, assert, elementUpdated, expect, fixture, html, oneEvent, } from '@open-wc/testing';
|
10
|
-
import { customElement } from 'lit/decorators.js';
|
11
|
-
import { sendKeys } from '@web/test-runner-commands';
|
12
|
-
import { sendMouse } from '@web/test-runner-commands';
|
13
|
-
import GlideCoreDropdown from './dropdown.js';
|
14
|
-
import GlideCoreDropdownOption from './dropdown.option.js';
|
15
|
-
import GlideCoreTag from './tag.js';
|
16
|
-
let GlideCoreDropdownInAnotherComponent = class GlideCoreDropdownInAnotherComponent extends LitElement {
|
17
|
-
static { this.shadowRootOptions = {
|
18
|
-
...LitElement.shadowRootOptions,
|
19
|
-
mode: 'closed',
|
20
|
-
}; }
|
21
|
-
render() {
|
22
|
-
return html `<glide-core-dropdown
|
23
|
-
label="Label"
|
24
|
-
placeholder="Placeholder"
|
25
|
-
multiple
|
26
|
-
open
|
27
|
-
>
|
28
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
29
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
30
|
-
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
31
|
-
</glide-core-dropdown>`;
|
32
|
-
}
|
33
|
-
};
|
34
|
-
GlideCoreDropdownInAnotherComponent = __decorate([
|
35
|
-
customElement('glide-core-dropdown-in-another-component')
|
36
|
-
], GlideCoreDropdownInAnotherComponent);
|
37
|
-
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
38
|
-
GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
|
39
|
-
GlideCoreDropdownInAnotherComponent.shadowRootOptions.mode = 'open';
|
40
|
-
GlideCoreTag.shadowRootOptions.mode = 'open';
|
41
|
-
it('opens on click', async () => {
|
42
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
|
43
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
44
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
45
|
-
</glide-core-dropdown>`);
|
46
|
-
// Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
|
47
|
-
// which puts us in a guard in the event handler. `Event` has no `detail` property
|
48
|
-
// and would work. `CustomEvent` is used for completeness and to get us as close as
|
49
|
-
// possible to a real click. See the comment in the handler for more information.
|
50
|
-
component.shadowRoot
|
51
|
-
?.querySelector('[data-test="primary-button"]')
|
52
|
-
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
53
|
-
// Wait for it to open.
|
54
|
-
await aTimeout(0);
|
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('toggles open and closed when the button is clicked', async () => {
|
60
|
-
const component = await fixture(html `<glide-core-dropdown
|
61
|
-
label="Label"
|
62
|
-
placeholder="Placeholder"
|
63
|
-
open
|
64
|
-
multiple
|
65
|
-
>
|
66
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
67
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
68
|
-
</glide-core-dropdown>`);
|
69
|
-
// Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
|
70
|
-
// which puts us in a guard in the event handler. `Event` has no `detail` property
|
71
|
-
// and would work. `CustomEvent` is used for completeness and to get us as close as
|
72
|
-
// possible to a real click. See the comment in the handler for more information.
|
73
|
-
component.shadowRoot
|
74
|
-
?.querySelector('[data-test="primary-button"]')
|
75
|
-
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
76
|
-
await elementUpdated(component);
|
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 toggle open and closed when the button overflow text is clicked', async () => {
|
82
|
-
const component = await fixture(html `<glide-core-dropdown
|
83
|
-
label="Label"
|
84
|
-
placeholder="Placeholder"
|
85
|
-
open
|
86
|
-
multiple
|
87
|
-
>
|
88
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
89
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
90
|
-
</glide-core-dropdown>`);
|
91
|
-
// Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
|
92
|
-
// which puts us in a guard in the event handler. `Event` has no `detail` property
|
93
|
-
// and would work. `CustomEvent` is used for completeness and to get us as close as
|
94
|
-
// possible to a real click. See the comment in the handler for more information.
|
95
|
-
component.shadowRoot
|
96
|
-
?.querySelector('[data-test="tag-overflow-text"]')
|
97
|
-
?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
|
98
|
-
// Wait for it to open.
|
99
|
-
await aTimeout(0);
|
100
|
-
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
101
|
-
expect(component.open).to.be.true;
|
102
|
-
expect(options?.checkVisibility()).to.be.true;
|
103
|
-
});
|
104
|
-
it('selects options on click', async () => {
|
105
|
-
const component = await fixture(html `<glide-core-dropdown
|
106
|
-
label="Label"
|
107
|
-
placeholder="Placeholder"
|
108
|
-
open
|
109
|
-
multiple
|
110
|
-
>
|
111
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
112
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
113
|
-
</glide-core-dropdown>`);
|
114
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
115
|
-
options[0]?.click();
|
116
|
-
options[1]?.click();
|
117
|
-
await elementUpdated(component);
|
118
|
-
const labels = component.shadowRoot?.querySelectorAll('[data-test="selected-option-label"]');
|
119
|
-
expect(options[0]?.selected).to.be.true;
|
120
|
-
expect(labels?.length).to.equal(2);
|
121
|
-
expect(labels?.[0]?.textContent?.trim()).to.equal('One,');
|
122
|
-
expect(labels?.[1]?.textContent?.trim()).to.equal('Two,');
|
123
|
-
});
|
124
|
-
it('selects options on Space', async () => {
|
125
|
-
const component = await fixture(html `<glide-core-dropdown
|
126
|
-
label="Label"
|
127
|
-
placeholder="Placeholder"
|
128
|
-
multiple
|
129
|
-
open
|
130
|
-
>
|
131
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
132
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
133
|
-
</glide-core-dropdown>`);
|
134
|
-
// Wait for it to open.
|
135
|
-
await aTimeout(0);
|
136
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
137
|
-
options[0]?.focus();
|
138
|
-
await sendKeys({ press: ' ' });
|
139
|
-
options[1]?.focus();
|
140
|
-
await sendKeys({ press: ' ' });
|
141
|
-
await elementUpdated(component);
|
142
|
-
const labels = component.shadowRoot?.querySelectorAll('[data-test="selected-option-label"]');
|
143
|
-
expect(options[0]?.selected).to.be.true;
|
144
|
-
expect(options[1]?.selected).to.be.true;
|
145
|
-
expect(labels?.length).to.equal(2);
|
146
|
-
expect(labels?.[0]?.textContent?.trim()).to.equal('One,');
|
147
|
-
expect(labels?.[1]?.textContent?.trim()).to.equal('Two,');
|
148
|
-
});
|
149
|
-
it('selects options on Enter', async () => {
|
150
|
-
const component = await fixture(html `<glide-core-dropdown
|
151
|
-
label="Label"
|
152
|
-
placeholder="Placeholder"
|
153
|
-
multiple
|
154
|
-
open
|
155
|
-
>
|
156
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
157
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
158
|
-
</glide-core-dropdown>`);
|
159
|
-
// Wait for it to open.
|
160
|
-
await aTimeout(0);
|
161
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
162
|
-
options[0]?.focus();
|
163
|
-
await sendKeys({ press: 'Enter' });
|
164
|
-
options[1]?.focus();
|
165
|
-
await sendKeys({ press: 'Enter' });
|
166
|
-
const labels = component.shadowRoot?.querySelectorAll('[data-test="selected-option-label"]');
|
167
|
-
expect(options[0]?.selected).to.be.true;
|
168
|
-
expect(options[1]?.selected).to.be.true;
|
169
|
-
expect(labels?.length).to.equal(2);
|
170
|
-
expect(labels?.[0]?.textContent?.trim()).to.equal('One,');
|
171
|
-
expect(labels?.[1]?.textContent?.trim()).to.equal('Two,');
|
172
|
-
});
|
173
|
-
it('activates Select All by default', async () => {
|
174
|
-
const component = await fixture(html `<glide-core-dropdown open multiple select-all>
|
175
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
176
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
177
|
-
</glide-core-dropdown>`);
|
178
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
179
|
-
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
180
|
-
expect(selectAll?.privateActive).to.be.true;
|
181
|
-
expect(options[0]?.privateActive).to.be.false;
|
182
|
-
expect(options[1]?.privateActive).to.be.false;
|
183
|
-
});
|
184
|
-
it('deactivates all other options on "mouseover"', async () => {
|
185
|
-
const component = await fixture(html `<glide-core-dropdown open multiple select-all>
|
186
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
187
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
188
|
-
</glide-core-dropdown>`);
|
189
|
-
const options = [
|
190
|
-
...component.querySelectorAll('glide-core-dropdown-option'),
|
191
|
-
component.shadowRoot?.querySelector('[data-test="select-all"]'),
|
192
|
-
];
|
193
|
-
options[0]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
194
|
-
options[1]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
195
|
-
expect(options[0]?.privateActive).to.be.false;
|
196
|
-
expect(options[1]?.privateActive).to.be.true;
|
197
|
-
expect(options[2]?.privateActive).to.be.false;
|
198
|
-
});
|
199
|
-
it('remains open when an option is selected via click', async () => {
|
200
|
-
const component = await fixture(html `<glide-core-dropdown-in-another-component></glide-core-dropdown-in-another-component>`);
|
201
|
-
// Wait for it to open.
|
202
|
-
await aTimeout(0);
|
203
|
-
const option = component.shadowRoot?.querySelector('glide-core-dropdown-option');
|
204
|
-
assert(option);
|
205
|
-
const { x, y } = option.getBoundingClientRect();
|
206
|
-
// Calling `click()` won't do because Dropdown relies on a "mouseup" event to
|
207
|
-
// decide if it should close.
|
208
|
-
await sendMouse({
|
209
|
-
type: 'click',
|
210
|
-
position: [Math.ceil(x), Math.ceil(y)],
|
211
|
-
});
|
212
|
-
const dropdown = component.shadowRoot?.querySelector('glide-core-dropdown');
|
213
|
-
expect(dropdown?.open).to.be.true;
|
214
|
-
});
|
215
|
-
it('remains open when an option is selected via Enter', async () => {
|
216
|
-
const component = await fixture(html `<glide-core-dropdown
|
217
|
-
label="Label"
|
218
|
-
placeholder="Placeholder"
|
219
|
-
open
|
220
|
-
multiple
|
221
|
-
>
|
222
|
-
<glide-core-dropdown-option
|
223
|
-
label="One"
|
224
|
-
selected
|
225
|
-
></glide-core-dropdown-option>
|
226
|
-
|
227
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
228
|
-
</glide-core-dropdown>`);
|
229
|
-
component.querySelector('glide-core-dropdown-option')?.focus();
|
230
|
-
await sendKeys({ press: 'Enter' });
|
231
|
-
expect(component.open).to.be.true;
|
232
|
-
});
|
233
|
-
it('remains open when an option is selected via Space', async () => {
|
234
|
-
const component = await fixture(html `<glide-core-dropdown
|
235
|
-
label="Label"
|
236
|
-
placeholder="Placeholder"
|
237
|
-
open
|
238
|
-
multiple
|
239
|
-
>
|
240
|
-
<glide-core-dropdown-option
|
241
|
-
label="One"
|
242
|
-
selected
|
243
|
-
></glide-core-dropdown-option>
|
244
|
-
|
245
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
246
|
-
</glide-core-dropdown>`);
|
247
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
248
|
-
option?.focus();
|
249
|
-
await sendKeys({ press: ' ' });
|
250
|
-
expect(component.open).to.be.true;
|
251
|
-
});
|
252
|
-
it('activates Select All on "mouseover"', async () => {
|
253
|
-
const component = await fixture(html `<glide-core-dropdown open multiple select-all>
|
254
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
255
|
-
|
256
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
257
|
-
</glide-core-dropdown>`);
|
258
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
259
|
-
options[0]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
260
|
-
expect(options[0]?.privateActive).to.be.true;
|
261
|
-
});
|
262
|
-
it('does not activate the next option on ArrowDown when a tag is focused', async () => {
|
263
|
-
// This test only accounts for when ArrowDown is pressed. Other keys like
|
264
|
-
// ArrowUp and Home are left untested to avoid an additional seven or so
|
265
|
-
// tests. Only testing ArrowDown is hopefully sufficient.
|
266
|
-
const component = await fixture(html `<glide-core-dropdown
|
267
|
-
label="Label"
|
268
|
-
placeholder="Placeholder"
|
269
|
-
open
|
270
|
-
multiple
|
271
|
-
>
|
272
|
-
<glide-core-dropdown-option
|
273
|
-
label="One"
|
274
|
-
selected
|
275
|
-
></glide-core-dropdown-option>
|
276
|
-
|
277
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
278
|
-
</glide-core-dropdown>`);
|
279
|
-
// Wait for it to open.
|
280
|
-
await aTimeout(0);
|
281
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
282
|
-
component.shadowRoot
|
283
|
-
?.querySelector('[data-test="tag"]')
|
284
|
-
?.focus();
|
285
|
-
await sendKeys({ press: 'ArrowDown' });
|
286
|
-
expect(options[0]?.privateActive).to.be.true;
|
287
|
-
});
|
288
|
-
it('updates its tag when `label` of a selected option is changed programmatically', async () => {
|
289
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
|
290
|
-
<glide-core-dropdown-option
|
291
|
-
label="One"
|
292
|
-
selected
|
293
|
-
></glide-core-dropdown-option>
|
294
|
-
|
295
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
296
|
-
</glide-core-dropdown>`);
|
297
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
298
|
-
assert(option);
|
299
|
-
option.label = 'Three';
|
300
|
-
await elementUpdated(component);
|
301
|
-
const tag = component.shadowRoot?.querySelector('[data-test="tag"]');
|
302
|
-
expect(tag?.label).to.equal('Three');
|
303
|
-
});
|
304
|
-
it('makes its tag editable when `editable` of a selected option is changed programmatically', async () => {
|
305
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
|
306
|
-
<glide-core-dropdown-option
|
307
|
-
label="One"
|
308
|
-
selected
|
309
|
-
></glide-core-dropdown-option>
|
310
|
-
|
311
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
312
|
-
</glide-core-dropdown>`);
|
313
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
314
|
-
assert(option);
|
315
|
-
option.editable = true;
|
316
|
-
await elementUpdated(component);
|
317
|
-
const tag = component.shadowRoot?.querySelector('[data-test="tag"]');
|
318
|
-
expect(tag?.privateEditable).to.be.true;
|
319
|
-
});
|
320
|
-
it('selects and deselects options when `value` is changed programmatically', async () => {
|
321
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
|
322
|
-
<glide-core-dropdown-option
|
323
|
-
label="One"
|
324
|
-
value="one"
|
325
|
-
selected
|
326
|
-
></glide-core-dropdown-option>
|
327
|
-
|
328
|
-
<glide-core-dropdown-option
|
329
|
-
label="Two"
|
330
|
-
value="two"
|
331
|
-
></glide-core-dropdown-option>
|
332
|
-
|
333
|
-
<glide-core-dropdown-option
|
334
|
-
label="Three"
|
335
|
-
value="three"
|
336
|
-
></glide-core-dropdown-option>
|
337
|
-
</glide-core-dropdown>`);
|
338
|
-
component.value = ['two', 'three'];
|
339
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
340
|
-
expect(options[0].selected).to.be.false;
|
341
|
-
expect(options[1].selected).to.be.true;
|
342
|
-
expect(options[2].selected).to.be.true;
|
343
|
-
});
|
344
|
-
it('selects no options when `value` is changed programmatically to an empty string and some options have no `value`', async () => {
|
345
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
|
346
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
347
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
348
|
-
|
349
|
-
<glide-core-dropdown-option
|
350
|
-
label="Three"
|
351
|
-
value="three"
|
352
|
-
></glide-core-dropdown-option>
|
353
|
-
</glide-core-dropdown>`);
|
354
|
-
component.value = [''];
|
355
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
356
|
-
expect(options[0].selected).to.be.false;
|
357
|
-
expect(options[1].selected).to.be.false;
|
358
|
-
expect(options[2].selected).to.be.false;
|
359
|
-
});
|
360
|
-
it('updates `value` when an option is selected or deselected via click', async () => {
|
361
|
-
const component = await fixture(html `<glide-core-dropdown
|
362
|
-
label="Label"
|
363
|
-
placeholder="Placeholder"
|
364
|
-
open
|
365
|
-
multiple
|
366
|
-
>
|
367
|
-
<glide-core-dropdown-option
|
368
|
-
label="One"
|
369
|
-
value="one"
|
370
|
-
selected
|
371
|
-
></glide-core-dropdown-option>
|
372
|
-
|
373
|
-
<glide-core-dropdown-option
|
374
|
-
label="Two"
|
375
|
-
value="two"
|
376
|
-
></glide-core-dropdown-option>
|
377
|
-
|
378
|
-
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
379
|
-
</glide-core-dropdown>`);
|
380
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
381
|
-
options[1].click();
|
382
|
-
expect(component.value).to.deep.equal(['one', 'two']);
|
383
|
-
options[1].click();
|
384
|
-
expect(component.value).to.deep.equal(['one']);
|
385
|
-
options[2].click();
|
386
|
-
expect(component.value).to.deep.equal(['one']);
|
387
|
-
});
|
388
|
-
it('updates `value` when a option is selected or deselected via Enter', async () => {
|
389
|
-
const component = await fixture(html `<glide-core-dropdown open multiple>
|
390
|
-
<glide-core-dropdown-option
|
391
|
-
label="One"
|
392
|
-
value="one"
|
393
|
-
selected
|
394
|
-
></glide-core-dropdown-option>
|
395
|
-
|
396
|
-
<glide-core-dropdown-option
|
397
|
-
label="Two"
|
398
|
-
value="two"
|
399
|
-
></glide-core-dropdown-option>
|
400
|
-
|
401
|
-
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
402
|
-
</glide-core-dropdown>`);
|
403
|
-
// Wait for it to open.
|
404
|
-
await aTimeout(0);
|
405
|
-
component.focus();
|
406
|
-
await sendKeys({ press: 'ArrowDown' });
|
407
|
-
await sendKeys({ press: 'Enter' });
|
408
|
-
expect(component.value).to.deep.equal(['one', 'two']);
|
409
|
-
await sendKeys({ press: 'Enter' });
|
410
|
-
expect(component.value).to.deep.equal(['one']);
|
411
|
-
await sendKeys({ press: 'ArrowDown' });
|
412
|
-
await sendKeys({ press: 'Enter' });
|
413
|
-
expect(component.value).to.deep.equal(['one']);
|
414
|
-
});
|
415
|
-
it('updates `value` when an option is selected or deselected via Space', async () => {
|
416
|
-
const component = await fixture(html `<glide-core-dropdown open multiple>
|
417
|
-
<glide-core-dropdown-option
|
418
|
-
label="One"
|
419
|
-
value="one"
|
420
|
-
selected
|
421
|
-
></glide-core-dropdown-option>
|
422
|
-
|
423
|
-
<glide-core-dropdown-option
|
424
|
-
label="Two"
|
425
|
-
value="two"
|
426
|
-
></glide-core-dropdown-option>
|
427
|
-
|
428
|
-
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
429
|
-
</glide-core-dropdown>`);
|
430
|
-
// Wait for it to open.
|
431
|
-
await aTimeout(0);
|
432
|
-
component.focus();
|
433
|
-
await sendKeys({ press: 'ArrowDown' });
|
434
|
-
await sendKeys({ press: ' ' });
|
435
|
-
expect(component.value).to.deep.equal(['one', 'two']);
|
436
|
-
await sendKeys({ press: ' ' });
|
437
|
-
expect(component.value).to.deep.equal(['one']);
|
438
|
-
await sendKeys({ press: 'ArrowDown' });
|
439
|
-
await sendKeys({ press: ' ' });
|
440
|
-
expect(component.value).to.deep.equal(['one']);
|
441
|
-
});
|
442
|
-
it('updates `value` when multiselect is changed to `true` programmatically', async () => {
|
443
|
-
const component = await fixture(html `<glide-core-dropdown open>
|
444
|
-
<glide-core-dropdown-option
|
445
|
-
label="One"
|
446
|
-
value="one"
|
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 = true;
|
456
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
457
|
-
expect(component.value).to.deep.equal(['two']);
|
458
|
-
expect(options[0].selected).to.be.false;
|
459
|
-
expect(options[1].selected).to.be.true;
|
460
|
-
await elementUpdated(options[1]);
|
461
|
-
const checkbox = options[1].shadowRoot?.querySelector('[data-test="checkbox"]');
|
462
|
-
expect(checkbox?.checked).to.be.true;
|
463
|
-
});
|
464
|
-
it('updates `value` when the `value` of a selected option is changed programmatically', async () => {
|
465
|
-
const component = await fixture(html `<glide-core-dropdown open multiple>
|
466
|
-
<glide-core-dropdown-option
|
467
|
-
label="One"
|
468
|
-
value="one"
|
469
|
-
selected
|
470
|
-
></glide-core-dropdown-option>
|
471
|
-
|
472
|
-
<glide-core-dropdown-option
|
473
|
-
label="Two"
|
474
|
-
value="two"
|
475
|
-
selected
|
476
|
-
></glide-core-dropdown-option>
|
477
|
-
</glide-core-dropdown>`);
|
478
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
479
|
-
assert(option);
|
480
|
-
option.value = 'three';
|
481
|
-
expect(component.value).to.deep.equal(['three', 'two']);
|
482
|
-
});
|
483
|
-
it('updates `value` when the `value` of a selected option is emptied programmatically', async () => {
|
484
|
-
const component = await fixture(html `<glide-core-dropdown open multiple>
|
485
|
-
<glide-core-dropdown-option
|
486
|
-
label="One"
|
487
|
-
value="one"
|
488
|
-
selected
|
489
|
-
></glide-core-dropdown-option>
|
490
|
-
|
491
|
-
<glide-core-dropdown-option
|
492
|
-
label="Two"
|
493
|
-
value="two"
|
494
|
-
selected
|
495
|
-
></glide-core-dropdown-option>
|
496
|
-
</glide-core-dropdown>`);
|
497
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
498
|
-
assert(option);
|
499
|
-
option.value = '';
|
500
|
-
expect(component.value).to.deep.equal(['two']);
|
501
|
-
});
|
502
|
-
it('updates `value` a tag is removed', async () => {
|
503
|
-
const component = await fixture(html `<glide-core-dropdown open multiple>
|
504
|
-
<glide-core-dropdown-option
|
505
|
-
label="One"
|
506
|
-
value="one"
|
507
|
-
selected
|
508
|
-
></glide-core-dropdown-option>
|
509
|
-
|
510
|
-
<glide-core-dropdown-option
|
511
|
-
label="Two"
|
512
|
-
value="two"
|
513
|
-
selected
|
514
|
-
></glide-core-dropdown-option>
|
515
|
-
</glide-core-dropdown>`);
|
516
|
-
component.shadowRoot
|
517
|
-
?.querySelector('[data-test="tag"]')
|
518
|
-
?.click();
|
519
|
-
expect(component.value).to.deep.equal(['two']);
|
520
|
-
});
|
521
|
-
it('has no internal label when an option is newly selected', async () => {
|
522
|
-
const component = await fixture(html `<glide-core-dropdown
|
523
|
-
label="Label"
|
524
|
-
placeholder="Placeholder"
|
525
|
-
open
|
526
|
-
multiple
|
527
|
-
>
|
528
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
529
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
530
|
-
</glide-core-dropdown>`);
|
531
|
-
component
|
532
|
-
.querySelector('glide-core-dropdown-option:last-of-type')
|
533
|
-
?.click();
|
534
|
-
await elementUpdated(component);
|
535
|
-
const label = component.shadowRoot?.querySelector('[data-test="internal-label"]');
|
536
|
-
expect(label?.checkVisibility()).to.not.be.ok;
|
537
|
-
});
|
538
|
-
it('hides tags to prevent overflow', async () => {
|
539
|
-
const component = await fixture(html `<glide-core-dropdown
|
540
|
-
label="Label"
|
541
|
-
placeholder="Placeholder"
|
542
|
-
multiple
|
543
|
-
style="display: block; max-width: 20rem;"
|
544
|
-
>
|
545
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
546
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
547
|
-
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
548
|
-
<glide-core-dropdown-option label="Four"></glide-core-dropdown-option>
|
549
|
-
</glide-core-dropdown>`);
|
550
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
551
|
-
options[0].selected = true;
|
552
|
-
options[1].selected = true;
|
553
|
-
options[2].selected = true;
|
554
|
-
options[3].selected = true;
|
555
|
-
// Wait for the Resize Observer to do its thing.
|
556
|
-
await aTimeout(0);
|
557
|
-
const tagContainers = [
|
558
|
-
...(component.shadowRoot?.querySelectorAll('[data-test="tag-container"]') ?? []),
|
559
|
-
].filter((element) => element.checkVisibility());
|
560
|
-
expect(tagContainers?.length).to.equal(2);
|
561
|
-
});
|
562
|
-
it('has overflow text when its tags are overflowing', async () => {
|
563
|
-
const component = await fixture(html `<glide-core-dropdown
|
564
|
-
label="Label"
|
565
|
-
placeholder="Placeholder"
|
566
|
-
multiple
|
567
|
-
style="display: block; max-width: 20rem;"
|
568
|
-
>
|
569
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
570
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
571
|
-
<glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
|
572
|
-
<glide-core-dropdown-option label="Four"></glide-core-dropdown-option>
|
573
|
-
</glide-core-dropdown>`);
|
574
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
575
|
-
options[0].selected = true;
|
576
|
-
options[1].selected = true;
|
577
|
-
options[2].selected = true;
|
578
|
-
options[3].selected = true;
|
579
|
-
// Wait for the Resize Observer to do its thing.
|
580
|
-
await aTimeout(0);
|
581
|
-
const tagOverflow = component.shadowRoot?.querySelector('[data-test="tag-overflow-count"]');
|
582
|
-
expect(tagOverflow?.textContent?.trim()).to.equal('2');
|
583
|
-
});
|
584
|
-
it('deselects the option when its tag is removed', async () => {
|
585
|
-
const component = await fixture(html `<glide-core-dropdown
|
586
|
-
label="Label"
|
587
|
-
placeholder="Placeholder"
|
588
|
-
open
|
589
|
-
multiple
|
590
|
-
>
|
591
|
-
<glide-core-dropdown-option
|
592
|
-
label="One"
|
593
|
-
selected
|
594
|
-
></glide-core-dropdown-option>
|
595
|
-
|
596
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
597
|
-
</glide-core-dropdown>`);
|
598
|
-
component.shadowRoot
|
599
|
-
?.querySelector('[data-test="tag"]')
|
600
|
-
?.click();
|
601
|
-
const option = component.querySelector('glide-core-dropdown-option');
|
602
|
-
expect(option?.selected).to.be.false;
|
603
|
-
});
|
604
|
-
it('deselects all but the last selected option when `multiple` is changed to `false` programmatically', async () => {
|
605
|
-
const component = await fixture(html `<glide-core-dropdown open multiple>
|
606
|
-
<glide-core-dropdown-option
|
607
|
-
label="One"
|
608
|
-
selected
|
609
|
-
></glide-core-dropdown-option>
|
610
|
-
|
611
|
-
<glide-core-dropdown-option
|
612
|
-
label="Two"
|
613
|
-
selected
|
614
|
-
></glide-core-dropdown-option>
|
615
|
-
</glide-core-dropdown>`);
|
616
|
-
component.multiple = false;
|
617
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
618
|
-
expect(options[0].selected).be.false;
|
619
|
-
expect(options[1].selected).be.true;
|
620
|
-
});
|
621
|
-
it('selects all options when none are selected and Select All is selected via click', async () => {
|
622
|
-
const component = await fixture(html `<glide-core-dropdown
|
623
|
-
label="Label"
|
624
|
-
placeholder="Placeholder"
|
625
|
-
multiple
|
626
|
-
select-all
|
627
|
-
>
|
628
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
629
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
630
|
-
</glide-core-dropdown>`);
|
631
|
-
component.shadowRoot
|
632
|
-
?.querySelector('[data-test="select-all"]')
|
633
|
-
?.click();
|
634
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
635
|
-
expect(options[0].selected).to.be.true;
|
636
|
-
expect(options[1].selected).to.be.true;
|
637
|
-
});
|
638
|
-
it('selects all options when some are selected and Select All is selected via click', async () => {
|
639
|
-
const component = await fixture(html `<glide-core-dropdown
|
640
|
-
label="Label"
|
641
|
-
placeholder="Placeholder"
|
642
|
-
multiple
|
643
|
-
select-all
|
644
|
-
>
|
645
|
-
<glide-core-dropdown-option
|
646
|
-
label="One"
|
647
|
-
selected
|
648
|
-
></glide-core-dropdown-option>
|
649
|
-
|
650
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
651
|
-
</glide-core-dropdown>`);
|
652
|
-
component.shadowRoot
|
653
|
-
?.querySelector('[data-test="select-all"]')
|
654
|
-
?.click();
|
655
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
656
|
-
expect(options[0].selected).to.be.true;
|
657
|
-
expect(options[1].selected).to.be.true;
|
658
|
-
});
|
659
|
-
it('deselects all options when all are selected and Select All is selected via click', async () => {
|
660
|
-
const component = await fixture(html `<glide-core-dropdown
|
661
|
-
label="Label"
|
662
|
-
placeholder="Placeholder"
|
663
|
-
multiple
|
664
|
-
select-all
|
665
|
-
>
|
666
|
-
<glide-core-dropdown-option
|
667
|
-
label="One"
|
668
|
-
selected
|
669
|
-
></glide-core-dropdown-option>
|
670
|
-
|
671
|
-
<glide-core-dropdown-option
|
672
|
-
label="Two"
|
673
|
-
selected
|
674
|
-
></glide-core-dropdown-option>
|
675
|
-
</glide-core-dropdown>`);
|
676
|
-
component.shadowRoot
|
677
|
-
?.querySelector('[data-test="select-all"]')
|
678
|
-
?.click();
|
679
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
680
|
-
expect(options[0].selected).to.be.false;
|
681
|
-
expect(options[1].selected).to.be.false;
|
682
|
-
});
|
683
|
-
it('selects all options when none are selected and Select All is selected via Space', async () => {
|
684
|
-
const component = await fixture(html `<glide-core-dropdown
|
685
|
-
label="Label"
|
686
|
-
placeholder="Placeholder"
|
687
|
-
multiple
|
688
|
-
open
|
689
|
-
select-all
|
690
|
-
>
|
691
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
692
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
693
|
-
</glide-core-dropdown>`);
|
694
|
-
component?.shadowRoot
|
695
|
-
?.querySelector('[data-test="select-all"]')
|
696
|
-
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
697
|
-
component.focus();
|
698
|
-
await sendKeys({ press: ' ' });
|
699
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
700
|
-
expect(options[0].selected).to.be.true;
|
701
|
-
expect(options[1].selected).to.be.true;
|
702
|
-
});
|
703
|
-
it('selects all options when some are selected and Select All is selected via Space', async () => {
|
704
|
-
const component = await fixture(html `<glide-core-dropdown
|
705
|
-
label="Label"
|
706
|
-
placeholder="Placeholder"
|
707
|
-
multiple
|
708
|
-
open
|
709
|
-
select-all
|
710
|
-
>
|
711
|
-
<glide-core-dropdown-option
|
712
|
-
label="One"
|
713
|
-
selected
|
714
|
-
></glide-core-dropdown-option>
|
715
|
-
|
716
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
717
|
-
</glide-core-dropdown>`);
|
718
|
-
component?.shadowRoot
|
719
|
-
?.querySelector('[data-test="select-all"]')
|
720
|
-
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
721
|
-
component.focus();
|
722
|
-
await sendKeys({ press: ' ' });
|
723
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
724
|
-
expect(options[0].selected).to.be.true;
|
725
|
-
expect(options[1].selected).to.be.true;
|
726
|
-
});
|
727
|
-
it('deselects all options when all are selected and Select All is selected via Space', async () => {
|
728
|
-
const component = await fixture(html `<glide-core-dropdown
|
729
|
-
label="Label"
|
730
|
-
placeholder="Placeholder"
|
731
|
-
multiple
|
732
|
-
open
|
733
|
-
select-all
|
734
|
-
>
|
735
|
-
<glide-core-dropdown-option
|
736
|
-
label="One"
|
737
|
-
selected
|
738
|
-
></glide-core-dropdown-option>
|
739
|
-
|
740
|
-
<glide-core-dropdown-option
|
741
|
-
label="Two"
|
742
|
-
selected
|
743
|
-
></glide-core-dropdown-option>
|
744
|
-
</glide-core-dropdown>`);
|
745
|
-
component?.shadowRoot
|
746
|
-
?.querySelector('[data-test="select-all"]')
|
747
|
-
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
748
|
-
component.focus();
|
749
|
-
await sendKeys({ press: ' ' });
|
750
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
751
|
-
expect(options[0].selected).to.be.false;
|
752
|
-
expect(options[1].selected).to.be.false;
|
753
|
-
});
|
754
|
-
it('selects all options when none are selected and Select All is selected via Enter', async () => {
|
755
|
-
const component = await fixture(html `<glide-core-dropdown
|
756
|
-
label="Label"
|
757
|
-
placeholder="Placeholder"
|
758
|
-
multiple
|
759
|
-
open
|
760
|
-
select-all
|
761
|
-
>
|
762
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
763
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
764
|
-
</glide-core-dropdown>`);
|
765
|
-
component?.shadowRoot
|
766
|
-
?.querySelector('[data-test="select-all"]')
|
767
|
-
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
768
|
-
component.focus();
|
769
|
-
await sendKeys({ press: 'Enter' });
|
770
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
771
|
-
expect(options[0].selected).to.be.true;
|
772
|
-
expect(options[1].selected).to.be.true;
|
773
|
-
});
|
774
|
-
it('selects all options when some are selected and Select All is selected via Enter', async () => {
|
775
|
-
const component = await fixture(html `<glide-core-dropdown
|
776
|
-
label="Label"
|
777
|
-
placeholder="Placeholder"
|
778
|
-
multiple
|
779
|
-
open
|
780
|
-
select-all
|
781
|
-
>
|
782
|
-
<glide-core-dropdown-option
|
783
|
-
label="One"
|
784
|
-
selected
|
785
|
-
></glide-core-dropdown-option>
|
786
|
-
|
787
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
788
|
-
</glide-core-dropdown>`);
|
789
|
-
component?.shadowRoot
|
790
|
-
?.querySelector('[data-test="select-all"]')
|
791
|
-
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
792
|
-
component.focus();
|
793
|
-
await sendKeys({ press: 'Enter' });
|
794
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
795
|
-
expect(options[0].selected).to.be.true;
|
796
|
-
expect(options[1].selected).to.be.true;
|
797
|
-
});
|
798
|
-
it('deselects all options when all are selected and Select All is selected via Enter', async () => {
|
799
|
-
const component = await fixture(html `<glide-core-dropdown
|
800
|
-
label="Label"
|
801
|
-
placeholder="Placeholder"
|
802
|
-
multiple
|
803
|
-
open
|
804
|
-
select-all
|
805
|
-
>
|
806
|
-
<glide-core-dropdown-option
|
807
|
-
label="One"
|
808
|
-
selected
|
809
|
-
></glide-core-dropdown-option>
|
810
|
-
|
811
|
-
<glide-core-dropdown-option
|
812
|
-
label="Two"
|
813
|
-
selected
|
814
|
-
></glide-core-dropdown-option>
|
815
|
-
</glide-core-dropdown>`);
|
816
|
-
component?.shadowRoot
|
817
|
-
?.querySelector('[data-test="select-all"]')
|
818
|
-
?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
819
|
-
component.focus();
|
820
|
-
await sendKeys({ press: 'Enter' });
|
821
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
822
|
-
expect(options[0].selected).to.be.false;
|
823
|
-
expect(options[1].selected).to.be.false;
|
824
|
-
});
|
825
|
-
it('shows Select All', async () => {
|
826
|
-
const component = await fixture(html `<glide-core-dropdown
|
827
|
-
label="Label"
|
828
|
-
placeholder="Placeholder"
|
829
|
-
open
|
830
|
-
multiple
|
831
|
-
>
|
832
|
-
<glide-core-dropdown-option
|
833
|
-
label="One"
|
834
|
-
selected
|
835
|
-
></glide-core-dropdown-option>
|
836
|
-
|
837
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
838
|
-
</glide-core-dropdown>`);
|
839
|
-
// Wait for it to open.
|
840
|
-
await aTimeout(0);
|
841
|
-
component.selectAll = true;
|
842
|
-
await elementUpdated(component);
|
843
|
-
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
844
|
-
expect(selectAll?.checkVisibility()).to.be.true;
|
845
|
-
});
|
846
|
-
it('sets Select All as selected when all options are selected', async () => {
|
847
|
-
const component = await fixture(html `<glide-core-dropdown
|
848
|
-
label="Label"
|
849
|
-
placeholder="Placeholder"
|
850
|
-
multiple
|
851
|
-
select-all
|
852
|
-
>
|
853
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
854
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
855
|
-
</glide-core-dropdown>`);
|
856
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
857
|
-
options[0].click();
|
858
|
-
options[1].click();
|
859
|
-
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
860
|
-
expect(selectAll?.selected).to.be.true;
|
861
|
-
});
|
862
|
-
it('sets Select All as deselected when no options are selected', async () => {
|
863
|
-
const component = await fixture(html `<glide-core-dropdown
|
864
|
-
label="Label"
|
865
|
-
placeholder="Placeholder"
|
866
|
-
multiple
|
867
|
-
select-all
|
868
|
-
>
|
869
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
870
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
871
|
-
</glide-core-dropdown>`);
|
872
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
873
|
-
options[0].click();
|
874
|
-
options[1].click();
|
875
|
-
options[0].click();
|
876
|
-
options[1].click();
|
877
|
-
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
878
|
-
expect(selectAll?.selected).to.be.false;
|
879
|
-
});
|
880
|
-
it('sets Select All as indeterminate when not all options are selected', async () => {
|
881
|
-
const component = await fixture(html `<glide-core-dropdown
|
882
|
-
label="Label"
|
883
|
-
placeholder="Placeholder"
|
884
|
-
multiple
|
885
|
-
select-all
|
886
|
-
>
|
887
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
888
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
889
|
-
</glide-core-dropdown>`);
|
890
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
891
|
-
options[0].click();
|
892
|
-
await elementUpdated(component);
|
893
|
-
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
894
|
-
expect(selectAll?.privateIndeterminate).to.be.true;
|
895
|
-
});
|
896
|
-
it('does not set Select All as indeterminate when no options are selected', async () => {
|
897
|
-
const component = await fixture(html `<glide-core-dropdown
|
898
|
-
label="Label"
|
899
|
-
placeholder="Placeholder"
|
900
|
-
multiple
|
901
|
-
select-all
|
902
|
-
>
|
903
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
904
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
905
|
-
</glide-core-dropdown>`);
|
906
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
907
|
-
options[0].click();
|
908
|
-
options[0].click();
|
909
|
-
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
910
|
-
expect(selectAll?.privateIndeterminate).to.be.false;
|
911
|
-
});
|
912
|
-
it('does not set Select All as indeterminate when all options are selected', async () => {
|
913
|
-
const component = await fixture(html `<glide-core-dropdown
|
914
|
-
label="Label"
|
915
|
-
placeholder="Placeholder"
|
916
|
-
multiple
|
917
|
-
select-all
|
918
|
-
>
|
919
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
920
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
921
|
-
</glide-core-dropdown>`);
|
922
|
-
const options = component.querySelectorAll('glide-core-dropdown-option');
|
923
|
-
options[0].click();
|
924
|
-
options[1].click();
|
925
|
-
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
926
|
-
expect(selectAll?.privateIndeterminate).to.be.false;
|
927
|
-
});
|
928
|
-
it('closes when a tag is clicked', async () => {
|
929
|
-
const component = await fixture(html `<glide-core-dropdown open multiple>
|
930
|
-
<glide-core-dropdown-option
|
931
|
-
label="One"
|
932
|
-
selected
|
933
|
-
></glide-core-dropdown-option>
|
934
|
-
|
935
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
936
|
-
</glide-core-dropdown>`);
|
937
|
-
const tag = component.shadowRoot?.querySelector('[data-test="tag"]');
|
938
|
-
assert(tag);
|
939
|
-
const { x, y } = tag.getBoundingClientRect();
|
940
|
-
// A simple `tag.click()` won't do because it would remove the tag. We want to
|
941
|
-
// click elsewhere on the tag so focus is moved to `document.body`. This ensures
|
942
|
-
// Dropdown's "focusout" handler doesn't cause Dropdown to close.
|
943
|
-
await sendMouse({
|
944
|
-
type: 'click',
|
945
|
-
position: [Math.ceil(x), Math.ceil(y)],
|
946
|
-
});
|
947
|
-
await elementUpdated(component);
|
948
|
-
expect(component.open).to.be.false;
|
949
|
-
});
|
950
|
-
it('closes on edit via click', async () => {
|
951
|
-
const component = await fixture(html `<glide-core-dropdown open multiple>
|
952
|
-
<glide-core-dropdown-option
|
953
|
-
label="One"
|
954
|
-
editable
|
955
|
-
selected
|
956
|
-
></glide-core-dropdown-option>
|
957
|
-
|
958
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
959
|
-
</glide-core-dropdown>`);
|
960
|
-
component.shadowRoot
|
961
|
-
?.querySelector('glide-core-tag')
|
962
|
-
?.shadowRoot?.querySelector('[data-test="edit-button"]')
|
963
|
-
?.click();
|
964
|
-
await elementUpdated(component);
|
965
|
-
expect(component.open).to.be.false;
|
966
|
-
});
|
967
|
-
it('closes on edit via Enter', async () => {
|
968
|
-
const component = await fixture(html `<glide-core-dropdown open multiple>
|
969
|
-
<glide-core-dropdown-option
|
970
|
-
label="One"
|
971
|
-
editable
|
972
|
-
selected
|
973
|
-
></glide-core-dropdown-option>
|
974
|
-
|
975
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
976
|
-
</glide-core-dropdown>`);
|
977
|
-
component.shadowRoot
|
978
|
-
?.querySelector('glide-core-tag')
|
979
|
-
?.shadowRoot?.querySelector('[data-test="edit-button"]')
|
980
|
-
?.focus();
|
981
|
-
await sendKeys({ press: 'Enter' });
|
982
|
-
expect(component.open).to.be.false;
|
983
|
-
});
|
984
|
-
it('closes on edit via Space', async () => {
|
985
|
-
const component = await fixture(html `<glide-core-dropdown open multiple>
|
986
|
-
<glide-core-dropdown-option
|
987
|
-
label="One"
|
988
|
-
editable
|
989
|
-
selected
|
990
|
-
></glide-core-dropdown-option>
|
991
|
-
|
992
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
993
|
-
</glide-core-dropdown>`);
|
994
|
-
component.shadowRoot
|
995
|
-
?.querySelector('glide-core-tag')
|
996
|
-
?.shadowRoot?.querySelector('[data-test="edit-button"]')
|
997
|
-
?.focus();
|
998
|
-
await sendKeys({ press: ' ' });
|
999
|
-
expect(component.open).to.be.false;
|
1000
|
-
});
|
1001
|
-
it('cannot be tabbed to when `disabled`', async () => {
|
1002
|
-
await fixture(html `<glide-core-dropdown
|
1003
|
-
label="Label"
|
1004
|
-
placeholder="Placeholder"
|
1005
|
-
disabled
|
1006
|
-
multiple
|
1007
|
-
>
|
1008
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
1009
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
1010
|
-
</glide-core-dropdown>`);
|
1011
|
-
await sendKeys({ press: 'Tab' });
|
1012
|
-
expect(document.activeElement).to.equal(document.body);
|
1013
|
-
});
|
1014
|
-
it('clicks the primary button when `click()` is called', async () => {
|
1015
|
-
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" multiple>
|
1016
|
-
<glide-core-dropdown-option label="One"></glide-core-dropdown-option>
|
1017
|
-
<glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
|
1018
|
-
</glide-core-dropdown>`);
|
1019
|
-
const button = component.shadowRoot?.querySelector('[data-test="primary-button"]');
|
1020
|
-
assert(button);
|
1021
|
-
setTimeout(() => {
|
1022
|
-
component.click();
|
1023
|
-
});
|
1024
|
-
const event = await oneEvent(button, 'click');
|
1025
|
-
expect(event instanceof PointerEvent).to.be.true;
|
1026
|
-
});
|