@crowdstrike/glide-core 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/button-group.button.d.ts +14 -15
- package/dist/button-group.button.js +1 -1
- package/dist/button-group.button.styles.js +75 -52
- package/dist/button-group.button.test.basics.d.ts +1 -1
- package/dist/button-group.button.test.basics.js +83 -147
- package/dist/button-group.button.test.events.js +8 -67
- package/dist/button-group.button.test.focus.js +13 -0
- package/dist/button-group.button.test.interactions.d.ts +1 -0
- package/dist/button-group.button.test.interactions.js +42 -0
- package/dist/button-group.d.ts +7 -10
- package/dist/button-group.js +1 -1
- package/dist/button-group.stories.d.ts +1 -5
- package/dist/button-group.styles.js +18 -6
- package/dist/button-group.test.basics.js +113 -234
- package/dist/button-group.test.events.js +210 -263
- package/dist/button-group.test.focus.d.ts +1 -0
- package/dist/button-group.test.focus.js +39 -0
- package/dist/button-group.test.interactions.d.ts +1 -0
- package/dist/button-group.test.interactions.js +91 -0
- package/dist/button.test.basics.js +1 -1
- package/dist/checkbox-group.js +1 -1
- package/dist/checkbox-group.styles.js +1 -1
- package/dist/checkbox-group.test.basics.js +1 -1
- package/dist/checkbox-group.test.events.js +4 -4
- package/dist/checkbox-group.test.focus.js +4 -3
- package/dist/checkbox.d.ts +7 -1
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.styles.js +10 -0
- package/dist/checkbox.test.events.js +4 -4
- package/dist/checkbox.test.focus.js +2 -2
- package/dist/{checkbox.test.states.js → checkbox.test.interactions.js} +24 -1
- package/dist/drawer.js +1 -1
- package/dist/dropdown.d.ts +6 -4
- package/dist/dropdown.js +1 -1
- package/dist/dropdown.option.d.ts +6 -2
- package/dist/dropdown.option.js +1 -1
- package/dist/dropdown.option.styles.js +13 -0
- package/dist/dropdown.option.test.basics.js +6 -3
- package/dist/dropdown.option.test.events.js +1 -1
- package/dist/dropdown.option.test.focus.js +1 -1
- package/dist/dropdown.option.test.interactions.multiple.js +1 -54
- package/dist/dropdown.option.test.interactions.single.js +51 -9
- package/dist/dropdown.styles.js +20 -19
- package/dist/dropdown.test.basics.js +143 -2
- package/dist/dropdown.test.basics.multiple.js +5 -2
- package/dist/dropdown.test.events.filterable.js +74 -0
- package/dist/dropdown.test.events.js +49 -160
- package/dist/dropdown.test.events.multiple.js +265 -8
- package/dist/dropdown.test.events.single.js +199 -2
- package/dist/dropdown.test.focus.filterable.js +9 -5
- package/dist/dropdown.test.focus.js +1 -1
- package/dist/dropdown.test.focus.multiple.js +1 -1
- package/dist/dropdown.test.focus.single.js +1 -1
- package/dist/dropdown.test.interactions.filterable.js +68 -11
- package/dist/dropdown.test.interactions.js +94 -5
- package/dist/dropdown.test.interactions.multiple.js +202 -5
- package/dist/dropdown.test.interactions.single.js +68 -6
- package/dist/form-controls-layout.test.basics.js +1 -1
- package/dist/icon-button.test.basics.js +1 -1
- package/dist/icons/checked.d.ts +1 -1
- package/dist/icons/checked.js +1 -1
- package/dist/icons/magnifying-glass.js +1 -1
- package/dist/input.d.ts +0 -6
- package/dist/input.js +1 -1
- package/dist/input.styles.js +7 -2
- package/dist/input.test.basics.js +19 -5
- package/dist/input.test.events.js +4 -4
- package/dist/input.test.focus.js +4 -4
- package/dist/input.test.translations.d.ts +1 -0
- package/dist/input.test.translations.js +38 -0
- package/dist/input.test.validity.js +133 -4
- package/dist/label.d.ts +1 -1
- package/dist/label.js +1 -1
- package/dist/label.styles.js +22 -13
- package/dist/label.test.basics.js +26 -24
- package/dist/library/expect-argument-error.js +1 -1
- package/dist/library/localize.d.ts +3 -1
- package/dist/menu.d.ts +3 -5
- package/dist/menu.js +1 -1
- package/dist/menu.options.test.basics.js +2 -2
- package/dist/menu.styles.js +1 -15
- package/dist/menu.test.basics.d.ts +1 -2
- package/dist/menu.test.basics.js +22 -6
- package/dist/menu.test.focus.d.ts +1 -0
- package/dist/menu.test.focus.js +13 -6
- package/dist/menu.test.interactions.js +212 -56
- package/dist/modal.icon-button.test.basics.js +1 -1
- package/dist/modal.js +1 -1
- package/dist/modal.styles.js +18 -13
- package/dist/modal.tertiary-icon.d.ts +0 -1
- package/dist/modal.tertiary-icon.js +1 -1
- package/dist/modal.tertiary-icon.test.basics.js +1 -1
- package/dist/modal.test.basics.js +1 -1
- package/dist/modal.test.events.js +10 -10
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.styles.js +1 -1
- package/dist/radio-group.test.focus.js +3 -3
- package/dist/radio.d.ts +1 -0
- package/dist/radio.js +1 -1
- package/dist/radio.styles.js +33 -0
- package/dist/split-container.test.basics.js +4 -0
- package/dist/split-link.test.interactions.js +1 -1
- package/dist/styles/variables.css +1 -1
- package/dist/tab.d.ts +1 -1
- package/dist/tab.group.js +1 -1
- package/dist/tab.group.test.basics.js +1 -1
- package/dist/tab.group.test.interactions.js +198 -2
- package/dist/tab.js +1 -1
- package/dist/tab.panel.d.ts +1 -0
- package/dist/tab.panel.js +1 -1
- package/dist/tab.panel.styles.js +11 -1
- package/dist/tag.test.basics.js +2 -2
- package/dist/textarea.d.ts +0 -1
- package/dist/textarea.js +2 -2
- package/dist/textarea.stories.d.ts +3 -4
- package/dist/textarea.styles.js +14 -3
- package/dist/textarea.test.basics.js +80 -44
- package/dist/textarea.test.events.js +56 -41
- package/dist/textarea.test.translations.d.ts +1 -0
- package/dist/textarea.test.translations.js +34 -0
- package/dist/textarea.test.validity.js +104 -20
- package/dist/toasts.js +1 -1
- package/dist/toasts.styles.js +8 -1
- package/dist/toasts.test.basics.js +20 -0
- package/dist/toggle.js +1 -1
- package/dist/toggle.test.focus.js +1 -1
- package/dist/toggle.test.interactions.d.ts +1 -0
- package/dist/tooltip.d.ts +7 -5
- package/dist/tooltip.js +1 -1
- package/dist/tooltip.styles.js +90 -25
- package/dist/tooltip.test.basics.js +38 -3
- package/dist/tooltip.test.interactions.js +136 -34
- package/dist/translations/en.js +1 -1
- package/dist/translations/fr.js +1 -1
- package/dist/translations/ja.js +1 -1
- package/dist/tree.d.ts +0 -1
- package/dist/tree.item.d.ts +1 -2
- package/dist/tree.item.js +1 -1
- package/dist/tree.item.menu.d.ts +0 -1
- package/dist/tree.item.menu.js +1 -1
- package/dist/tree.js +1 -1
- package/dist/tree.test.basics.js +1 -1
- package/package.json +2 -4
- package/dist/drawer.test.floating-components.d.ts +0 -1
- package/dist/drawer.test.floating-components.js +0 -52
- package/dist/library/set-containing-block.d.ts +0 -15
- package/dist/library/set-containing-block.js +0 -1
- package/dist/modal.test.floating-components.js +0 -63
- /package/dist/{checkbox.test.states.d.ts → button-group.button.test.focus.d.ts} +0 -0
- /package/dist/{modal.test.floating-components.d.ts → checkbox.test.interactions.d.ts} +0 -0
- /package/dist/{toggle.test.states.d.ts → dropdown.test.events.filterable.d.ts} +0 -0
- /package/dist/{toggle.test.states.js → toggle.test.interactions.js} +0 -0
@@ -1,59 +1,7 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import { elementUpdated, expect, fixture, html
|
3
|
-
import GlideCoreCheckbox from './checkbox.js';
|
2
|
+
import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
|
4
3
|
import GlideCoreDropdownOption from './dropdown.option.js';
|
5
4
|
GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
|
6
|
-
it('is selected on click', async () => {
|
7
|
-
const component = await fixture(html `<glide-core-dropdown-option
|
8
|
-
label="Label"
|
9
|
-
private-multiple
|
10
|
-
></glide-core-dropdown-option>`);
|
11
|
-
component.click();
|
12
|
-
await elementUpdated(component);
|
13
|
-
expect(component.selected).to.be.true;
|
14
|
-
expect(component.ariaSelected).to.equal('true');
|
15
|
-
});
|
16
|
-
it('is deselected on click', async () => {
|
17
|
-
const component = await fixture(html `<glide-core-dropdown-option
|
18
|
-
label="Label"
|
19
|
-
private-multiple
|
20
|
-
selected
|
21
|
-
></glide-core-dropdown-option>`);
|
22
|
-
component.click();
|
23
|
-
await elementUpdated(component);
|
24
|
-
expect(component.selected).to.be.false;
|
25
|
-
expect(component.ariaSelected).to.equal('false');
|
26
|
-
});
|
27
|
-
it('is selected on click when the checkbox itself is clicked', async () => {
|
28
|
-
const component = await fixture(html `<glide-core-dropdown-option
|
29
|
-
label="Label"
|
30
|
-
private-multiple
|
31
|
-
></glide-core-dropdown-option>`);
|
32
|
-
const checkbox = component.shadowRoot?.querySelector('[data-test="checkbox"]');
|
33
|
-
checkbox?.click();
|
34
|
-
await elementUpdated(component);
|
35
|
-
expect(component.selected).to.be.true;
|
36
|
-
expect(component.ariaSelected).to.equal('true');
|
37
|
-
expect(checkbox?.checked).to.be.true;
|
38
|
-
});
|
39
|
-
it('is deselected on click when the checkbox itself is clicked', async () => {
|
40
|
-
const component = await fixture(html `<glide-core-dropdown-option
|
41
|
-
label="Label"
|
42
|
-
private-multiple
|
43
|
-
selected
|
44
|
-
></glide-core-dropdown-option>`);
|
45
|
-
// Checkbox has its own lifecycle. Wait until it's ready.
|
46
|
-
await waitUntil(() => {
|
47
|
-
return (component.shadowRoot?.querySelector('[data-test="checkbox"]') instanceof
|
48
|
-
GlideCoreCheckbox);
|
49
|
-
});
|
50
|
-
const checkbox = component.shadowRoot?.querySelector('[data-test="checkbox"]');
|
51
|
-
checkbox?.click();
|
52
|
-
await elementUpdated(component);
|
53
|
-
expect(component.selected).to.be.false;
|
54
|
-
expect(component.ariaSelected).to.equal('false');
|
55
|
-
expect(checkbox?.checked).to.be.false;
|
56
|
-
});
|
57
5
|
it('is selected when programmatically selected', async () => {
|
58
6
|
const component = await fixture(html `<glide-core-dropdown-option
|
59
7
|
label="Label"
|
@@ -63,7 +11,6 @@ it('is selected when programmatically selected', async () => {
|
|
63
11
|
component.selected = true;
|
64
12
|
await elementUpdated(component);
|
65
13
|
const checkbox = component.shadowRoot?.querySelector('[data-test="checkbox"]');
|
66
|
-
expect(component.selected).to.be.true;
|
67
14
|
expect(component.ariaSelected).to.equal('true');
|
68
15
|
expect(checkbox?.checked).to.be.true;
|
69
16
|
});
|
@@ -1,23 +1,65 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import { elementUpdated, expect, fixture, html } from '@open-wc/testing';
|
2
|
+
import { aTimeout, elementUpdated, expect, fixture, html, } from '@open-wc/testing';
|
3
3
|
import GlideCoreDropdownOption from './dropdown.option.js';
|
4
4
|
GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
|
5
|
-
it('is selected
|
5
|
+
it('is selected when programmatically selected', async () => {
|
6
6
|
const component = await fixture(html `<glide-core-dropdown-option
|
7
7
|
label="Label"
|
8
|
+
value="value"
|
8
9
|
></glide-core-dropdown-option>`);
|
9
|
-
component.
|
10
|
+
component.selected = true;
|
10
11
|
await elementUpdated(component);
|
11
|
-
expect(component.selected).to.be.true;
|
12
12
|
expect(component.ariaSelected).to.equal('true');
|
13
13
|
});
|
14
|
-
it('
|
14
|
+
it('has a tooltip when active and with a long label', async () => {
|
15
|
+
// The period is arbitrary. 500 of them ensures we exceed the maximum
|
16
|
+
// width even if it's increased.
|
17
|
+
const component = await fixture(html `<glide-core-dropdown-option
|
18
|
+
label=${'.'.repeat(500)}
|
19
|
+
value="value"
|
20
|
+
></glide-core-dropdown-option>`);
|
21
|
+
component.privateActive = true;
|
22
|
+
// Wait for the tooltip.
|
23
|
+
await aTimeout(0);
|
24
|
+
const tooltip = component.shadowRoot?.querySelector('[data-test="tooltip"]');
|
25
|
+
expect(tooltip?.checkVisibility()).to.be.true;
|
26
|
+
});
|
27
|
+
it('has no tooltip when active and with a short label', async () => {
|
15
28
|
const component = await fixture(html `<glide-core-dropdown-option
|
16
29
|
label="Label"
|
17
30
|
value="value"
|
18
31
|
></glide-core-dropdown-option>`);
|
19
|
-
component.
|
20
|
-
|
21
|
-
|
22
|
-
|
32
|
+
component.privateActive = true;
|
33
|
+
// Wait for the tooltip.
|
34
|
+
await aTimeout(0);
|
35
|
+
const tooltip = component.shadowRoot?.querySelector('[data-test="tooltip"]');
|
36
|
+
expect(tooltip?.checkVisibility()).to.be.false;
|
37
|
+
});
|
38
|
+
it('has a tooltip when active and with a long label set programmatically', async () => {
|
39
|
+
const component = await fixture(html `<glide-core-dropdown-option
|
40
|
+
label="Label"
|
41
|
+
value="value"
|
42
|
+
></glide-core-dropdown-option>`);
|
43
|
+
component.privateActive = true;
|
44
|
+
// The period is arbitrary. 500 of them ensures we exceed the maximum
|
45
|
+
// width even if it's increased.
|
46
|
+
component.label = '.'.repeat(500);
|
47
|
+
// Wait for the tooltip.
|
48
|
+
await aTimeout(0);
|
49
|
+
const tooltip = component.shadowRoot?.querySelector('[data-test="tooltip"]');
|
50
|
+
expect(tooltip?.checkVisibility()).to.be.true;
|
51
|
+
});
|
52
|
+
it('has no tooltip when active and with a short label set programmatically', async () => {
|
53
|
+
// The period is arbitrary. 500 of them ensures we exceed the maximum
|
54
|
+
// width even if it's increased.
|
55
|
+
const component = await fixture(html `<glide-core-dropdown-option
|
56
|
+
label=${'.'.repeat(500)}
|
57
|
+
value="value"
|
58
|
+
></glide-core-dropdown-option>`);
|
59
|
+
component.privateActive = true;
|
60
|
+
component.label = 'Label';
|
61
|
+
// Wait for the tooltip.
|
62
|
+
await aTimeout(0);
|
63
|
+
const tooltip = component.shadowRoot?.querySelector('[data-test="tooltip"]');
|
64
|
+
expect(tooltip?.checkVisibility()).to.be.false;
|
23
65
|
});
|
package/dist/dropdown.styles.js
CHANGED
@@ -31,7 +31,6 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";import
|
|
31
31
|
font-style: var(--glide-core-body-sm-font-style);
|
32
32
|
font-weight: var(--glide-core-body-sm-font-weight);
|
33
33
|
gap: var(--glide-core-spacing-xs);
|
34
|
-
justify-content: space-between;
|
35
34
|
min-inline-size: var(--min-inline-size);
|
36
35
|
padding-inline: var(--glide-core-spacing-sm);
|
37
36
|
text-align: start;
|
@@ -79,29 +78,25 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";import
|
|
79
78
|
}
|
80
79
|
|
81
80
|
.options {
|
81
|
+
--border-width: 1px;
|
82
|
+
--padding: var(--glide-core-spacing-xxxs);
|
83
|
+
--private-option-height: 1.75rem;
|
84
|
+
|
82
85
|
background-color: var(--glide-core-surface-modal);
|
83
|
-
border:
|
86
|
+
border: var(--border-width) solid var(--glide-core-surface-modal);
|
84
87
|
border-radius: var(--glide-core-spacing-xs);
|
85
88
|
box-shadow: var(--glide-core-shadow-lg);
|
86
89
|
box-sizing: border-box;
|
87
|
-
inset
|
88
|
-
|
89
|
-
|
90
|
+
inset: unset;
|
91
|
+
max-block-size: calc(
|
92
|
+
var(--private-option-height) * 9 + var(--padding) * 2 +
|
93
|
+
var(--border-width) * 2
|
94
|
+
);
|
90
95
|
min-inline-size: var(--min-inline-size);
|
91
|
-
|
96
|
+
overflow: auto;
|
97
|
+
padding: var(--padding);
|
92
98
|
position: absolute;
|
93
|
-
|
94
|
-
|
95
|
-
/*
|
96
|
-
".dropdown-and-options" is relative and many Dropdowns may be stacked in a column.
|
97
|
-
This ensures the ".options" of Dropdowns earlier in the column aren't obscured by
|
98
|
-
the ".dropdown-and-options" that come later.
|
99
|
-
*/
|
100
|
-
z-index: 1;
|
101
|
-
|
102
|
-
&.visible {
|
103
|
-
visibility: visible;
|
104
|
-
}
|
99
|
+
scroll-behavior: smooth;
|
105
100
|
}
|
106
101
|
|
107
102
|
.select-all {
|
@@ -134,9 +129,14 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";import
|
|
134
129
|
}
|
135
130
|
}
|
136
131
|
|
132
|
+
.tag-overflow-text-and-button {
|
133
|
+
column-gap: var(--glide-core-spacing-md);
|
134
|
+
display: flex;
|
135
|
+
margin-inline-start: auto;
|
136
|
+
}
|
137
|
+
|
137
138
|
.tag-overflow-text {
|
138
139
|
color: var(--glide-core-text-link);
|
139
|
-
margin-inline-end: var(--glide-core-spacing-md);
|
140
140
|
}
|
141
141
|
|
142
142
|
.button {
|
@@ -158,6 +158,7 @@ import{css}from"lit";import focusOutline from"./styles/focus-outline.js";import
|
|
158
158
|
block-size: var(--button-and-input-height);
|
159
159
|
border: none;
|
160
160
|
cursor: inherit;
|
161
|
+
flex-grow: 1;
|
161
162
|
font-size: inherit;
|
162
163
|
min-inline-size: var(--min-inline-size);
|
163
164
|
padding: 0;
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
2
|
import './dropdown.option.js';
|
3
3
|
import { ArgumentError } from 'ow';
|
4
|
-
import { expect, fixture, html } from '@open-wc/testing';
|
4
|
+
import { aTimeout, assert, expect, fixture, html } from '@open-wc/testing';
|
5
5
|
import { repeat } from 'lit/directives/repeat.js';
|
6
6
|
import GlideCoreDropdown from './dropdown.js';
|
7
7
|
import expectArgumentError from './library/expect-argument-error.js';
|
@@ -42,6 +42,36 @@ it('has defaults', async () => {
|
|
42
42
|
// Not reflected, so no attribute assertion is necessary.
|
43
43
|
expect(component.value).to.deep.equal([]);
|
44
44
|
});
|
45
|
+
it('can be open', async () => {
|
46
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
|
47
|
+
<glide-core-dropdown-option
|
48
|
+
label="Label"
|
49
|
+
value="value"
|
50
|
+
selected
|
51
|
+
></glide-core-dropdown-option>
|
52
|
+
</glide-core-dropdown>`);
|
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(component.hasAttribute('open')).to.be.true;
|
58
|
+
expect(options?.checkVisibility()).to.be.true;
|
59
|
+
});
|
60
|
+
it('cannot be open when disabled', async () => {
|
61
|
+
const component = await fixture(html `<glide-core-dropdown
|
62
|
+
label="Label"
|
63
|
+
placeholder="Placeholder"
|
64
|
+
open
|
65
|
+
disabled
|
66
|
+
>
|
67
|
+
<glide-core-dropdown-option
|
68
|
+
label="Label"
|
69
|
+
value="value"
|
70
|
+
></glide-core-dropdown-option>
|
71
|
+
</glide-core-dropdown>`);
|
72
|
+
const options = component?.shadowRoot?.querySelector('[data-test="options"]');
|
73
|
+
expect(options?.checkVisibility()).to.be.false;
|
74
|
+
});
|
45
75
|
it('can have a label', async () => {
|
46
76
|
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
47
77
|
<glide-core-dropdown-option
|
@@ -208,6 +238,117 @@ it('activates the last selected option when options are initially selected', asy
|
|
208
238
|
expect(options[1]?.privateActive).to.be.false;
|
209
239
|
expect(options[2]?.privateActive).to.be.true;
|
210
240
|
});
|
241
|
+
it('is scrollable', async () => {
|
242
|
+
const component = await fixture(html `<glide-core-dropdown open>
|
243
|
+
<glide-core-dropdown-option
|
244
|
+
label="One"
|
245
|
+
value="one"
|
246
|
+
></glide-core-dropdown-option>
|
247
|
+
|
248
|
+
<glide-core-dropdown-option
|
249
|
+
label="Two"
|
250
|
+
value="two"
|
251
|
+
></glide-core-dropdown-option>
|
252
|
+
|
253
|
+
<glide-core-dropdown-option
|
254
|
+
label="Three"
|
255
|
+
value="three"
|
256
|
+
></glide-core-dropdown-option>
|
257
|
+
|
258
|
+
<glide-core-dropdown-option
|
259
|
+
label="Four"
|
260
|
+
value="four"
|
261
|
+
></glide-core-dropdown-option>
|
262
|
+
|
263
|
+
<glide-core-dropdown-option
|
264
|
+
label="Five"
|
265
|
+
value="five"
|
266
|
+
></glide-core-dropdown-option>
|
267
|
+
|
268
|
+
<glide-core-dropdown-option
|
269
|
+
label="Six"
|
270
|
+
value="six"
|
271
|
+
></glide-core-dropdown-option>
|
272
|
+
|
273
|
+
<glide-core-dropdown-option
|
274
|
+
label="Seven"
|
275
|
+
value="seven"
|
276
|
+
></glide-core-dropdown-option>
|
277
|
+
|
278
|
+
<glide-core-dropdown-option
|
279
|
+
label="Eight"
|
280
|
+
value="eight"
|
281
|
+
></glide-core-dropdown-option>
|
282
|
+
|
283
|
+
<glide-core-dropdown-option
|
284
|
+
label="Nine"
|
285
|
+
value="nine"
|
286
|
+
></glide-core-dropdown-option>
|
287
|
+
|
288
|
+
<glide-core-dropdown-option
|
289
|
+
label="Ten"
|
290
|
+
value="ten"
|
291
|
+
></glide-core-dropdown-option>
|
292
|
+
</glide-core-dropdown>`);
|
293
|
+
// Wait for it to open.
|
294
|
+
await aTimeout(0);
|
295
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
296
|
+
assert(options);
|
297
|
+
expect(options.scrollHeight).to.be.greaterThan(options.clientHeight);
|
298
|
+
});
|
299
|
+
it('is not scrollable', async () => {
|
300
|
+
const component = await fixture(html `<glide-core-dropdown open>
|
301
|
+
<glide-core-dropdown-option
|
302
|
+
label="One"
|
303
|
+
value="one"
|
304
|
+
></glide-core-dropdown-option>
|
305
|
+
|
306
|
+
<glide-core-dropdown-option
|
307
|
+
label="Two"
|
308
|
+
value="two"
|
309
|
+
></glide-core-dropdown-option>
|
310
|
+
|
311
|
+
<glide-core-dropdown-option
|
312
|
+
label="Three"
|
313
|
+
value="three"
|
314
|
+
></glide-core-dropdown-option>
|
315
|
+
|
316
|
+
<glide-core-dropdown-option
|
317
|
+
label="Four"
|
318
|
+
value="four"
|
319
|
+
></glide-core-dropdown-option>
|
320
|
+
|
321
|
+
<glide-core-dropdown-option
|
322
|
+
label="Five"
|
323
|
+
value="five"
|
324
|
+
></glide-core-dropdown-option>
|
325
|
+
|
326
|
+
<glide-core-dropdown-option
|
327
|
+
label="Six"
|
328
|
+
value="six"
|
329
|
+
></glide-core-dropdown-option>
|
330
|
+
|
331
|
+
<glide-core-dropdown-option
|
332
|
+
label="Seven"
|
333
|
+
value="seven"
|
334
|
+
></glide-core-dropdown-option>
|
335
|
+
|
336
|
+
<glide-core-dropdown-option
|
337
|
+
label="Eight"
|
338
|
+
value="eight"
|
339
|
+
></glide-core-dropdown-option>
|
340
|
+
|
341
|
+
<glide-core-dropdown-option
|
342
|
+
label="Nine"
|
343
|
+
value="nine"
|
344
|
+
></glide-core-dropdown-option>
|
345
|
+
</glide-core-dropdown>`);
|
346
|
+
// Wait for it to open.
|
347
|
+
await aTimeout(0);
|
348
|
+
const options = component.shadowRoot?.querySelector('[data-test="options"]');
|
349
|
+
assert(options);
|
350
|
+
expect(options.scrollHeight).to.equal(options.clientHeight);
|
351
|
+
});
|
211
352
|
it('throws if the default slot is the incorrect type', async () => {
|
212
353
|
await expectArgumentError(() => {
|
213
354
|
return fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
@@ -230,5 +371,5 @@ it('does not throw if the default slot only contains whitespace', async () => {
|
|
230
371
|
spy();
|
231
372
|
}
|
232
373
|
}
|
233
|
-
expect(spy.
|
374
|
+
expect(spy.callCount).to.equal(0);
|
234
375
|
});
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
2
|
import './dropdown.option.js';
|
3
|
-
import { expect, fixture, html } from '@open-wc/testing';
|
3
|
+
import { aTimeout, expect, fixture, html } from '@open-wc/testing';
|
4
4
|
import GlideCoreDropdown from './dropdown.js';
|
5
5
|
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
6
6
|
it('is accessible', async () => {
|
@@ -112,6 +112,7 @@ it('shows Select All', async () => {
|
|
112
112
|
placeholder="Placeholder"
|
113
113
|
multiple
|
114
114
|
select-all
|
115
|
+
open
|
115
116
|
>
|
116
117
|
<glide-core-dropdown-option
|
117
118
|
label="One"
|
@@ -124,8 +125,10 @@ it('shows Select All', async () => {
|
|
124
125
|
value="two"
|
125
126
|
></glide-core-dropdown-option>
|
126
127
|
</glide-core-dropdown>`);
|
128
|
+
// Wait for it to open.
|
129
|
+
await aTimeout(0);
|
127
130
|
const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
|
128
|
-
expect(selectAll?.checkVisibility()).to.be.
|
131
|
+
expect(selectAll?.checkVisibility()).to.be.true;
|
129
132
|
});
|
130
133
|
it('sets Select All as selected when all options are initially selected', async () => {
|
131
134
|
const component = await fixture(html `<glide-core-dropdown
|
@@ -0,0 +1,74 @@
|
|
1
|
+
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
+
import * as sinon from 'sinon';
|
3
|
+
import { expect, fixture, html } 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
|
+
GlideCoreDropdown.shadowRootOptions.mode = 'open';
|
8
|
+
GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
|
9
|
+
const defaultSlot = html `
|
10
|
+
<glide-core-dropdown-option
|
11
|
+
label="One"
|
12
|
+
value="one"
|
13
|
+
></glide-core-dropdown-option>
|
14
|
+
|
15
|
+
<glide-core-dropdown-option
|
16
|
+
label="Two"
|
17
|
+
value="two"
|
18
|
+
></glide-core-dropdown-option>
|
19
|
+
|
20
|
+
<glide-core-dropdown-option
|
21
|
+
label="Three"
|
22
|
+
value="three"
|
23
|
+
></glide-core-dropdown-option>
|
24
|
+
|
25
|
+
<glide-core-dropdown-option
|
26
|
+
label="Four"
|
27
|
+
value="four"
|
28
|
+
></glide-core-dropdown-option>
|
29
|
+
|
30
|
+
<glide-core-dropdown-option
|
31
|
+
label="Five"
|
32
|
+
value="five"
|
33
|
+
></glide-core-dropdown-option>
|
34
|
+
|
35
|
+
<glide-core-dropdown-option
|
36
|
+
label="Six"
|
37
|
+
value="six"
|
38
|
+
></glide-core-dropdown-option>
|
39
|
+
|
40
|
+
<glide-core-dropdown-option
|
41
|
+
label="Seven"
|
42
|
+
value="seven"
|
43
|
+
></glide-core-dropdown-option>
|
44
|
+
|
45
|
+
<glide-core-dropdown-option
|
46
|
+
label="Eight"
|
47
|
+
value="eight"
|
48
|
+
></glide-core-dropdown-option>
|
49
|
+
|
50
|
+
<glide-core-dropdown-option
|
51
|
+
label="Nine"
|
52
|
+
value="nine"
|
53
|
+
></glide-core-dropdown-option>
|
54
|
+
|
55
|
+
<glide-core-dropdown-option
|
56
|
+
label="Ten"
|
57
|
+
value="ten"
|
58
|
+
></glide-core-dropdown-option>
|
59
|
+
|
60
|
+
<glide-core-dropdown-option
|
61
|
+
label="Eleven"
|
62
|
+
value="eleven"
|
63
|
+
></glide-core-dropdown-option>
|
64
|
+
`;
|
65
|
+
it('does not dispatch "input" events on input', async () => {
|
66
|
+
const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
|
67
|
+
${defaultSlot}
|
68
|
+
</glide-core-dropdown>`);
|
69
|
+
const spy = sinon.spy();
|
70
|
+
component.addEventListener('input', spy);
|
71
|
+
component.focus();
|
72
|
+
await sendKeys({ type: ' one ' });
|
73
|
+
expect(spy.callCount).to.equal(0);
|
74
|
+
});
|