@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,58 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import { elementUpdated, expect, fixture, html, waitUntil, } from '@open-wc/testing';
|
3
|
-
import GlideCoreMenuButton from './menu.button.js';
|
4
|
-
import GlideCoreSplitButtonSecondaryButton from './split-button.secondary-button.js';
|
5
|
-
import expectArgumentError from './library/expect-argument-error.js';
|
6
|
-
import sinon from 'sinon';
|
7
|
-
GlideCoreSplitButtonSecondaryButton.shadowRootOptions.mode = 'open';
|
8
|
-
GlideCoreMenuButton.shadowRootOptions.mode = 'open';
|
9
|
-
it('registers', async () => {
|
10
|
-
expect(window.customElements.get('glide-core-split-button-secondary-button')).to.equal(GlideCoreSplitButtonSecondaryButton);
|
11
|
-
});
|
12
|
-
it('is accessible', async () => {
|
13
|
-
const component = await fixture(html `
|
14
|
-
<glide-core-split-button-secondary-button label="Label">
|
15
|
-
<glide-core-menu-button label="Label"></glide-core-menu-button>
|
16
|
-
</glide-core-split-button-secondary-button>
|
17
|
-
`);
|
18
|
-
await expect(component).to.be.accessible();
|
19
|
-
component.disabled = true;
|
20
|
-
await elementUpdated(component);
|
21
|
-
await expect(component).to.be.accessible();
|
22
|
-
});
|
23
|
-
it('has defaults', async () => {
|
24
|
-
const component = await fixture(html `
|
25
|
-
<glide-core-split-button-secondary-button label="Label">
|
26
|
-
<glide-core-menu-button label="Label"></glide-core-menu-button>
|
27
|
-
</glide-core-split-button-secondary-button>
|
28
|
-
`);
|
29
|
-
expect(component.disabled).to.be.false;
|
30
|
-
expect(component.menuOpen).to.be.false;
|
31
|
-
expect(component.menuPlacement).to.be.equal('bottom-end');
|
32
|
-
expect(component.privateSize).to.be.equal('large');
|
33
|
-
expect(component.privateVariant).to.be.equal('primary');
|
34
|
-
});
|
35
|
-
it('throws when its default slot is empty', async () => {
|
36
|
-
await expectArgumentError(() => fixture(html `
|
37
|
-
<glide-core-split-button-secondary-button
|
38
|
-
label="Label"
|
39
|
-
></glide-core-split-button-secondary-button>
|
40
|
-
`));
|
41
|
-
});
|
42
|
-
it('throws when its default slot is the incorrect type', async () => {
|
43
|
-
await expectArgumentError(() => fixture(html `
|
44
|
-
<glide-core-split-button-secondary-button label="Label">
|
45
|
-
<div></div>
|
46
|
-
</glide-core-split-button-secondary-button>
|
47
|
-
`));
|
48
|
-
// Menu is rendered asynchronously outside of this component's lifecycle
|
49
|
-
// and asserts against its default slot. That assertion, which is expected
|
50
|
-
// to fail in this case, results in an unhandled rejection that gets logged.
|
51
|
-
// `console.error` is stubbed so the logs aren't muddied.
|
52
|
-
const stub = sinon.stub(console, 'error');
|
53
|
-
// Menu asserts against its default slot once on `firstUpdated` and again
|
54
|
-
// on "slotchange". So we wait until the stub is called twice before restoring
|
55
|
-
// it.
|
56
|
-
await waitUntil(() => stub.calledTwice);
|
57
|
-
stub.restore();
|
58
|
-
});
|
@@ -1 +0,0 @@
|
|
1
|
-
export {};
|
@@ -1,14 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import { expect, fixture, html } from '@open-wc/testing';
|
3
|
-
import GlideCoreSplitButtonSecondaryButton from './split-button.secondary-button.js';
|
4
|
-
GlideCoreSplitButtonSecondaryButton.shadowRootOptions.mode = 'open';
|
5
|
-
it('focuses itself when `focus()` is called', async () => {
|
6
|
-
const component = await fixture(html `
|
7
|
-
<glide-core-split-button-secondary-button label="Label">
|
8
|
-
<glide-core-menu-button label="Label"></glide-core-menu-button>
|
9
|
-
</glide-core-split-button-secondary-button>
|
10
|
-
`);
|
11
|
-
component.focus();
|
12
|
-
const button = component.shadowRoot?.querySelector('[data-test="button"]');
|
13
|
-
expect(component.shadowRoot?.activeElement).to.equal(button);
|
14
|
-
});
|
@@ -1,30 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import './menu.button.js';
|
3
|
-
import './menu.options.js';
|
4
|
-
import { aTimeout, expect, fixture, html } from '@open-wc/testing';
|
5
|
-
import GlideCoreSplitButtonSecondaryButton from './split-button.secondary-button.js';
|
6
|
-
GlideCoreSplitButtonSecondaryButton.shadowRootOptions.mode = 'open';
|
7
|
-
it('sets `menuOpen` when its menu is opened', async () => {
|
8
|
-
const component = await fixture(html `
|
9
|
-
<glide-core-split-button-secondary-button label="Label">
|
10
|
-
<glide-core-menu-button label="Label"></glide-core-menu-button>
|
11
|
-
</glide-core-split-button-secondary-button>
|
12
|
-
`);
|
13
|
-
component.click();
|
14
|
-
// Wait for the Mutation Observer to pick up the attribute change.
|
15
|
-
await aTimeout(0);
|
16
|
-
expect(component.menuOpen).to.be.true;
|
17
|
-
});
|
18
|
-
it('sets `menuOpen` when its menu is closed', async () => {
|
19
|
-
const component = await fixture(html `
|
20
|
-
<glide-core-split-button-secondary-button label="Label" menu-open>
|
21
|
-
<glide-core-menu-button label="Label"></glide-core-menu-button>
|
22
|
-
</glide-core-split-button-secondary-button>
|
23
|
-
`);
|
24
|
-
// Wait for Menu to open.
|
25
|
-
await aTimeout(0);
|
26
|
-
document.body.click();
|
27
|
-
// Wait for the Mutation Observer to pick up the attribute change.
|
28
|
-
await aTimeout(0);
|
29
|
-
expect(component.menuOpen).to.be.false;
|
30
|
-
});
|
@@ -1,13 +0,0 @@
|
|
1
|
-
import './icons/storybook.js';
|
2
|
-
import './menu.button.js';
|
3
|
-
import './menu.link.js';
|
4
|
-
import './split-button.js';
|
5
|
-
import './split-button.primary-button.js';
|
6
|
-
import './split-button.primary-link.js';
|
7
|
-
import './split-button.secondary-button.js';
|
8
|
-
import type { Meta, StoryObj } from '@storybook/web-components';
|
9
|
-
declare const meta: Meta;
|
10
|
-
export default meta;
|
11
|
-
export declare const SplitButton: StoryObj;
|
12
|
-
export declare const WithIcon: StoryObj;
|
13
|
-
export declare const WithPrimaryLink: StoryObj;
|
@@ -1,87 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import './split-button.primary-button.js';
|
3
|
-
import './split-button.primary-link.js';
|
4
|
-
import { expect, fixture, html } from '@open-wc/testing';
|
5
|
-
import GlideCoreMenuButton from './menu.button.js';
|
6
|
-
import GlideCoreSplitButton from './split-button.js';
|
7
|
-
import GlideCoreSplitButtonSecondaryButton from './split-button.secondary-button.js';
|
8
|
-
import expectArgumentError from './library/expect-argument-error.js';
|
9
|
-
GlideCoreSplitButton.shadowRootOptions.mode = 'open';
|
10
|
-
GlideCoreSplitButtonSecondaryButton.shadowRootOptions.mode = 'open';
|
11
|
-
GlideCoreMenuButton.shadowRootOptions.mode = 'open';
|
12
|
-
it('registers', async () => {
|
13
|
-
expect(window.customElements.get('glide-core-split-button')).to.equal(GlideCoreSplitButton);
|
14
|
-
});
|
15
|
-
it('is accessible', async () => {
|
16
|
-
const component = await fixture(html `
|
17
|
-
<glide-core-split-button>
|
18
|
-
<glide-core-split-button-primary-button
|
19
|
-
label="Label"
|
20
|
-
></glide-core-split-button-primary-button>
|
21
|
-
|
22
|
-
<glide-core-split-button-secondary-button
|
23
|
-
label="Label"
|
24
|
-
slot="secondary-button"
|
25
|
-
>
|
26
|
-
<glide-core-menu-button label="Label"></glide-core-menu-button>
|
27
|
-
</glide-core-split-button-secondary-button>
|
28
|
-
</glide-core-split-button>
|
29
|
-
`);
|
30
|
-
await expect(component).to.be.accessible();
|
31
|
-
});
|
32
|
-
it('has defaults', async () => {
|
33
|
-
const component = await fixture(html `
|
34
|
-
<glide-core-split-button>
|
35
|
-
<glide-core-split-button-primary-link
|
36
|
-
label="Label"
|
37
|
-
></glide-core-split-button-primary-link>
|
38
|
-
|
39
|
-
<glide-core-split-button-secondary-button
|
40
|
-
label="Label"
|
41
|
-
slot="secondary-button"
|
42
|
-
>
|
43
|
-
<glide-core-menu-button label="Label"></glide-core-menu-button>
|
44
|
-
</glide-core-split-button-secondary-button>
|
45
|
-
</glide-core-split-button>
|
46
|
-
`);
|
47
|
-
expect(component.size).to.equal('large');
|
48
|
-
expect(component.variant).to.equal('primary');
|
49
|
-
});
|
50
|
-
it('throws when its default slot is empty', async () => {
|
51
|
-
await expectArgumentError(() => fixture(html `<glide-core-split-button>
|
52
|
-
<glide-core-split-button-secondary-button
|
53
|
-
label="Label"
|
54
|
-
slot="secondary-button"
|
55
|
-
>
|
56
|
-
<glide-core-menu-button label="Label"></glide-core-menu-button>
|
57
|
-
</glide-core-split-button-secondary-button>
|
58
|
-
</glide-core-split-button>`));
|
59
|
-
});
|
60
|
-
it('throws when its default slot is the incorrect type', async () => {
|
61
|
-
await expectArgumentError(() => fixture(html `<glide-core-split-button>
|
62
|
-
<div></div>
|
63
|
-
|
64
|
-
<glide-core-split-button-secondary-button
|
65
|
-
label="Label"
|
66
|
-
slot="secondary-button"
|
67
|
-
>
|
68
|
-
<glide-core-menu-button label="Label"></glide-core-menu-button>
|
69
|
-
</glide-core-split-button-secondary-button>
|
70
|
-
</glide-core-split-button>`));
|
71
|
-
});
|
72
|
-
it('throws when its "secondary-button" slot is empty', async () => {
|
73
|
-
await expectArgumentError(() => fixture(html `<glide-core-split-button>
|
74
|
-
<glide-core-split-button-primary-button
|
75
|
-
label="Label"
|
76
|
-
></glide-core-split-button-primary-button>
|
77
|
-
</glide-core-split-button>`));
|
78
|
-
});
|
79
|
-
it('throws when its "secondary-button" slot is the incorrect type', async () => {
|
80
|
-
await expectArgumentError(() => fixture(html `<glide-core-split-button>
|
81
|
-
<glide-core-split-button-primary-button
|
82
|
-
label="Label"
|
83
|
-
></glide-core-split-button-primary-button>
|
84
|
-
|
85
|
-
<div slot="secondary-button"></div>
|
86
|
-
</glide-core-split-button>`));
|
87
|
-
});
|
@@ -1,51 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import './menu.button.js';
|
3
|
-
import './split-button.primary-button.js';
|
4
|
-
import './split-button.primary-link.js';
|
5
|
-
import './split-button.secondary-button.js';
|
6
|
-
import { expect, fixture, html } from '@open-wc/testing';
|
7
|
-
import GlideCoreSplitButton from './split-button.js';
|
8
|
-
import GlideCoreSplitButtonContainer from './split-button.js';
|
9
|
-
GlideCoreSplitButtonContainer.shadowRootOptions.mode = 'open';
|
10
|
-
it('sets `privateSize` on its buttons when `size` is set programmatically', async () => {
|
11
|
-
const component = await fixture(html `
|
12
|
-
<glide-core-split-button>
|
13
|
-
<glide-core-split-button-primary-button
|
14
|
-
label="Label"
|
15
|
-
></glide-core-split-button-primary-button>
|
16
|
-
|
17
|
-
<glide-core-split-button-secondary-button
|
18
|
-
label="Label"
|
19
|
-
slot="secondary-button"
|
20
|
-
>
|
21
|
-
<glide-core-menu-link label="Label" url="/"></glide-core-menu-link
|
22
|
-
></glide-core-split-button-secondary-button>
|
23
|
-
</glide-core-split-button>
|
24
|
-
`);
|
25
|
-
component.size = 'small';
|
26
|
-
const primaryButton = component.querySelector('glide-core-split-button-primary-button');
|
27
|
-
const secondaryButton = component.querySelector('glide-core-split-button-secondary-button');
|
28
|
-
expect(primaryButton?.privateSize).to.equal('small');
|
29
|
-
expect(secondaryButton?.privateSize).to.equal('small');
|
30
|
-
});
|
31
|
-
it('sets `privateVariant` on its buttons when `variant` is set programmatically', async () => {
|
32
|
-
const component = await fixture(html `
|
33
|
-
<glide-core-split-button>
|
34
|
-
<glide-core-split-button-primary-button
|
35
|
-
label="Label"
|
36
|
-
></glide-core-split-button-primary-button>
|
37
|
-
|
38
|
-
<glide-core-split-button-secondary-button
|
39
|
-
label="Label"
|
40
|
-
slot="secondary-button"
|
41
|
-
>
|
42
|
-
<glide-core-menu-link label="Label" url="/"></glide-core-menu-link>
|
43
|
-
</glide-core-split-button-secondary-button>
|
44
|
-
</glide-core-split-button>
|
45
|
-
`);
|
46
|
-
component.variant = 'secondary';
|
47
|
-
const primaryButton = component.querySelector('glide-core-split-button-primary-button');
|
48
|
-
const secondaryButton = component.querySelector('glide-core-split-button-secondary-button');
|
49
|
-
expect(primaryButton?.privateVariant).to.equal('secondary');
|
50
|
-
expect(secondaryButton?.privateVariant).to.equal('secondary');
|
51
|
-
});
|
@@ -1,234 +0,0 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import './tab.group.js';
|
3
|
-
import './tab.js';
|
4
|
-
import './tab.panel.js';
|
5
|
-
import { assert, expect, fixture, html, oneEvent, waitUntil, } from '@open-wc/testing';
|
6
|
-
import { sendKeys } from '@web/test-runner-commands';
|
7
|
-
import GlideCoreTabGroup from './tab.group.js';
|
8
|
-
import GlideCoreTabPanel from './tab.panel.js';
|
9
|
-
import expectArgumentError from './library/expect-argument-error.js';
|
10
|
-
import sinon from 'sinon';
|
11
|
-
GlideCoreTabGroup.shadowRootOptions.mode = 'open';
|
12
|
-
GlideCoreTabPanel.shadowRootOptions.mode = 'open';
|
13
|
-
function isPanelHidden(panel) {
|
14
|
-
return panel.shadowRoot?.firstElementChild?.classList.contains('hidden');
|
15
|
-
}
|
16
|
-
it('registers', async () => {
|
17
|
-
expect(window.customElements.get('glide-core-tab-group')).to.equal(GlideCoreTabGroup);
|
18
|
-
expect(window.customElements.get('glide-core-tab-panel')).to.equal(GlideCoreTabPanel);
|
19
|
-
});
|
20
|
-
it('renders correct markup and sets correct attributes for the default case', async () => {
|
21
|
-
const component = await fixture(html `
|
22
|
-
<glide-core-tab-group>
|
23
|
-
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
24
|
-
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
25
|
-
</glide-core-tab-group>
|
26
|
-
`);
|
27
|
-
await expect(component).to.be.accessible();
|
28
|
-
const [firstTab] = component.tabElements;
|
29
|
-
expect(component.activeTab).to.equal(firstTab, 'activeTab defaults to first tab');
|
30
|
-
expect([...component.shadowRoot.firstElementChild.classList]).to.deep.equal(['component']);
|
31
|
-
expect([
|
32
|
-
...component.shadowRoot.querySelector('.tab-group').classList,
|
33
|
-
]).to.deep.equal(['tab-group', 'animated']);
|
34
|
-
const slot = component.shadowRoot.querySelector('slot:not([name="nav"])');
|
35
|
-
expect(slot).to.exist;
|
36
|
-
expect(slot.assignedElements.length).to.equal(0);
|
37
|
-
});
|
38
|
-
it('can switch tabs', async () => {
|
39
|
-
const component = await fixture(html `
|
40
|
-
<glide-core-tab-group>
|
41
|
-
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
42
|
-
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
43
|
-
<glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
|
44
|
-
<glide-core-tab slot="nav" panel="4" disabled>Disabled</glide-core-tab>
|
45
|
-
|
46
|
-
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
47
|
-
<glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
|
48
|
-
<glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
|
49
|
-
<glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
|
50
|
-
</glide-core-tab-group>
|
51
|
-
`);
|
52
|
-
const listener = oneEvent(component, 'tab-show');
|
53
|
-
const [firstTab, secondTab, thirdTab, disabledTab] = component.tabElements;
|
54
|
-
const [firstPanel, secondPanel, thirdPanel] = component.panelElements;
|
55
|
-
// first tab defaults to active
|
56
|
-
expect(firstTab.active).to.be.true;
|
57
|
-
// other tabs default to not active
|
58
|
-
expect(secondTab.active).to.be.false;
|
59
|
-
// first panel is not hidden by default
|
60
|
-
expect(isPanelHidden(firstPanel)).to.be.false;
|
61
|
-
// nonactive panel is hidden by default
|
62
|
-
expect(isPanelHidden(secondPanel)).to.be.true;
|
63
|
-
secondTab.click();
|
64
|
-
const triggeredEvent = await listener;
|
65
|
-
// after clicking a different tab, previous tab is no longer active
|
66
|
-
expect(firstTab.active).to.be.false;
|
67
|
-
// clicked tab becomes active
|
68
|
-
expect(secondTab.active).to.be.true;
|
69
|
-
// after clicking a different tab, previous panel is hidden
|
70
|
-
expect(isPanelHidden(firstPanel)).to.be.true;
|
71
|
-
// clicked tab's panel is no longer hidden
|
72
|
-
expect(isPanelHidden(secondPanel)).to.be.false;
|
73
|
-
expect(triggeredEvent.type).to.equal('tab-show', 'correct tab event fires');
|
74
|
-
expect(triggeredEvent.bubbles).to.be.true;
|
75
|
-
expect(triggeredEvent.detail.panel).to.equal('2', 'Can get the panel name from the tab click event');
|
76
|
-
secondTab.focus();
|
77
|
-
await sendKeys({ press: 'ArrowRight' });
|
78
|
-
// Should be focused on third tab. Press Enter on it
|
79
|
-
await sendKeys({ press: 'Enter' });
|
80
|
-
const secondTriggeredEvent = await listener;
|
81
|
-
// after pressing Enter on a different tab, previous tab is no longer active
|
82
|
-
expect(secondTab.active).to.be.false;
|
83
|
-
// new tab becomes active
|
84
|
-
expect(thirdTab.active).to.be.true;
|
85
|
-
// after pressing Enter on a different tab, previous panel is hidden
|
86
|
-
expect(isPanelHidden(secondPanel)).to.be.true;
|
87
|
-
// new tab's panel is no longer hidden
|
88
|
-
expect(isPanelHidden(thirdPanel)).to.be.false;
|
89
|
-
expect(secondTriggeredEvent.type).to.equal('tab-show', 'correct tab event fires for keydown');
|
90
|
-
expect(secondTriggeredEvent.bubbles).to.be.true;
|
91
|
-
expect(secondTriggeredEvent.detail.panel).to.equal('2', 'Can get the panel name from the tab show event');
|
92
|
-
disabledTab.click();
|
93
|
-
// clicking on a disabled tab does not make it active
|
94
|
-
expect(disabledTab.active).to.be.false;
|
95
|
-
});
|
96
|
-
it('can use left/right, home and end keys to focus on tabs', async () => {
|
97
|
-
const component = await fixture(html `
|
98
|
-
<glide-core-tab-group>
|
99
|
-
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
100
|
-
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
101
|
-
<glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
|
102
|
-
|
103
|
-
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
104
|
-
<glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
|
105
|
-
<glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
|
106
|
-
</glide-core-tab-group>
|
107
|
-
`);
|
108
|
-
const [firstTab, secondTab, thirdTab] = component.tabElements;
|
109
|
-
firstTab.focus();
|
110
|
-
await sendKeys({ press: 'ArrowRight' });
|
111
|
-
await sendKeys({ press: 'Enter' });
|
112
|
-
// right works
|
113
|
-
expect(secondTab.active).to.be.true;
|
114
|
-
await sendKeys({ press: 'ArrowLeft' });
|
115
|
-
await sendKeys({ press: 'Enter' });
|
116
|
-
// left works
|
117
|
-
expect(firstTab.active).to.be.true;
|
118
|
-
await sendKeys({ press: 'ArrowLeft' });
|
119
|
-
await sendKeys({ press: 'Enter' });
|
120
|
-
// left from first goes to last
|
121
|
-
expect(thirdTab.active).to.be.true;
|
122
|
-
await sendKeys({ press: 'ArrowRight' });
|
123
|
-
await sendKeys({ press: 'Enter' });
|
124
|
-
// right from last goes to first
|
125
|
-
expect(firstTab.active).to.be.true;
|
126
|
-
await sendKeys({ press: 'Home' });
|
127
|
-
await sendKeys({ press: 'Enter' });
|
128
|
-
expect(firstTab.active).to.be.true;
|
129
|
-
await sendKeys({ press: 'End' });
|
130
|
-
await sendKeys({ press: 'Enter' });
|
131
|
-
expect(thirdTab.active).to.be.true;
|
132
|
-
});
|
133
|
-
it('sets padding-inline-start of the Tab Group via `--tabs-padding-inline-start`', async () => {
|
134
|
-
const component = await fixture(html `
|
135
|
-
<glide-core-tab-group style="--tabs-padding-inline-start: 100px;">
|
136
|
-
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
137
|
-
|
138
|
-
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
139
|
-
</glide-core-tab-group>
|
140
|
-
`);
|
141
|
-
const tabContainer = component?.shadowRoot?.querySelector('[data-test="tab-container"]');
|
142
|
-
assert(tabContainer);
|
143
|
-
expect(window.getComputedStyle(tabContainer).paddingInline).to.equal('100px 0px');
|
144
|
-
});
|
145
|
-
it('sets padding-inline-end of the Tab Group via `--tabs-padding-inline-end`', async () => {
|
146
|
-
const component = await fixture(html `
|
147
|
-
<glide-core-tab-group style="--tabs-padding-inline-end: 100px;">
|
148
|
-
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
149
|
-
|
150
|
-
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
151
|
-
</glide-core-tab-group>
|
152
|
-
`);
|
153
|
-
const tabContainer = component?.shadowRoot?.querySelector('[data-test="tab-container"]');
|
154
|
-
assert(tabContainer);
|
155
|
-
expect(window.getComputedStyle(tabContainer).paddingInline).to.equal('0px 100px');
|
156
|
-
});
|
157
|
-
it('sets padding-block-start of the Tab Group via `--tabs-padding-block-start`', async () => {
|
158
|
-
const component = await fixture(html `
|
159
|
-
<glide-core-tab-group style="--tabs-padding-block-start: 100px;">
|
160
|
-
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
161
|
-
|
162
|
-
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
163
|
-
</glide-core-tab-group>
|
164
|
-
`);
|
165
|
-
const tabContainer = component?.shadowRoot?.querySelector('[data-test="tab-container"]');
|
166
|
-
assert(tabContainer);
|
167
|
-
expect(window.getComputedStyle(tabContainer).paddingBlock).to.equal('100px 0px');
|
168
|
-
});
|
169
|
-
it('sets padding-block-end of the Tab Group via `--tabs-padding-block-end`', async () => {
|
170
|
-
const component = await fixture(html `
|
171
|
-
<glide-core-tab-group style="--tabs-padding-block-end: 100px;">
|
172
|
-
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
173
|
-
|
174
|
-
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
175
|
-
</glide-core-tab-group>
|
176
|
-
`);
|
177
|
-
const tabContainer = component?.shadowRoot?.querySelector('[data-test="tab-container"]');
|
178
|
-
assert(tabContainer);
|
179
|
-
expect(window.getComputedStyle(tabContainer).paddingBlock).to.equal('0px 100px');
|
180
|
-
});
|
181
|
-
it('sets padding-inline-start of the Tab Panel via `--panel-padding-inline-start`', async () => {
|
182
|
-
const component = await fixture(html `
|
183
|
-
<glide-core-tab-group style="--panel-padding-inline-start: 100px;">
|
184
|
-
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
185
|
-
|
186
|
-
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
187
|
-
</glide-core-tab-group>
|
188
|
-
`);
|
189
|
-
const tabPanel = component
|
190
|
-
?.querySelector('glide-core-tab-panel')
|
191
|
-
?.shadowRoot?.querySelector('[data-test="tab-panel"]');
|
192
|
-
assert(tabPanel);
|
193
|
-
expect(window.getComputedStyle(tabPanel).paddingInline).to.equal('100px 0px');
|
194
|
-
});
|
195
|
-
it('sets padding-inline-end of the Tab Panel via `--panel-padding-inline-end`', async () => {
|
196
|
-
const component = await fixture(html `
|
197
|
-
<glide-core-tab-group style="--panel-padding-inline-end: 100px;">
|
198
|
-
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
199
|
-
|
200
|
-
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
201
|
-
</glide-core-tab-group>
|
202
|
-
`);
|
203
|
-
const tabPanel = component
|
204
|
-
?.querySelector('glide-core-tab-panel')
|
205
|
-
?.shadowRoot?.querySelector('[data-test="tab-panel"]');
|
206
|
-
assert(tabPanel);
|
207
|
-
expect(window.getComputedStyle(tabPanel).paddingInline).to.equal('0px 100px');
|
208
|
-
});
|
209
|
-
it('throws an error when an element other than `glide-core-tab` is a child of the `nav` slot', async () => {
|
210
|
-
await expectArgumentError(() => {
|
211
|
-
return fixture(html `
|
212
|
-
<glide-core-tab-group>
|
213
|
-
<div slot="nav">Tab 1</div>
|
214
|
-
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
215
|
-
</glide-core-tab-group>
|
216
|
-
`);
|
217
|
-
});
|
218
|
-
});
|
219
|
-
it('throws an error when an element other than `glide-core-tab-panel` is a child of the default slot', async () => {
|
220
|
-
const spy = sinon.spy();
|
221
|
-
window.addEventListener('unhandledrejection', spy);
|
222
|
-
// https://github.com/CrowdStrike/glide-core/pull/335#issuecomment-2327451869
|
223
|
-
const stub = sinon.stub(console, 'error');
|
224
|
-
await expectArgumentError(() => {
|
225
|
-
return fixture(html `
|
226
|
-
<glide-core-tab-group>
|
227
|
-
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
228
|
-
<div>Default Content</div>
|
229
|
-
</glide-core-tab-group>
|
230
|
-
`);
|
231
|
-
});
|
232
|
-
await waitUntil(() => spy.callCount === 1);
|
233
|
-
stub.restore();
|
234
|
-
});
|