@crowdstrike/glide-core 0.9.5 → 0.10.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/README.md +17 -53
- package/dist/accordion.d.ts +10 -10
- package/dist/accordion.js +1 -1
- package/dist/accordion.stories.d.ts +0 -1
- package/dist/accordion.styles.js +36 -38
- package/dist/accordion.test.basics.js +13 -95
- package/dist/accordion.test.events.js +21 -33
- package/dist/accordion.test.focus.d.ts +1 -0
- package/dist/accordion.test.focus.js +11 -0
- package/dist/accordion.test.interactions.d.ts +1 -0
- package/dist/accordion.test.interactions.js +75 -0
- package/dist/button-group.button.d.ts +2 -4
- package/dist/button-group.button.js +1 -1
- package/dist/button-group.button.styles.js +6 -14
- package/dist/button-group.button.test.basics.js +8 -17
- package/dist/button-group.button.test.interactions.js +4 -4
- package/dist/button-group.d.ts +0 -2
- package/dist/button-group.test.basics.js +10 -10
- package/dist/button-group.test.events.js +2 -2
- package/dist/button-group.test.interactions.js +1 -1
- package/dist/button.d.ts +7 -10
- package/dist/button.js +1 -1
- package/dist/button.styles.js +4 -7
- package/dist/button.test.basics.js +10 -26
- package/dist/button.test.events.js +9 -9
- package/dist/checkbox-group.d.ts +3 -4
- package/dist/checkbox-group.js +1 -1
- package/dist/checkbox-group.styles.js +13 -1
- package/dist/checkbox-group.test.basics.js +8 -12
- package/dist/checkbox-group.test.focus.js +7 -7
- package/dist/checkbox-group.test.interactions.d.ts +1 -0
- package/dist/checkbox-group.test.interactions.js +82 -0
- package/dist/checkbox.d.ts +5 -4
- package/dist/checkbox.js +1 -1
- package/dist/checkbox.styles.js +35 -15
- package/dist/checkbox.test.basics.js +6 -15
- package/dist/checkbox.test.focus.js +4 -2
- package/dist/checkbox.test.interactions.js +11 -11
- package/dist/drawer.d.ts +2 -5
- package/dist/drawer.js +1 -1
- package/dist/drawer.test.accessibility.js +8 -8
- package/dist/drawer.test.basics.js +16 -16
- package/dist/drawer.test.closing.js +18 -16
- package/dist/drawer.test.events.js +13 -24
- package/dist/drawer.test.methods.js +22 -22
- package/dist/dropdown.d.ts +7 -5
- package/dist/dropdown.js +1 -1
- package/dist/dropdown.option.d.ts +1 -3
- package/dist/dropdown.option.js +1 -1
- package/dist/dropdown.option.styles.js +31 -19
- package/dist/dropdown.option.test.basics.js +4 -4
- package/dist/dropdown.styles.js +39 -3
- package/dist/dropdown.test.basics.js +8 -13
- package/dist/dropdown.test.basics.multiple.js +63 -31
- package/dist/dropdown.test.basics.single.js +49 -0
- package/dist/dropdown.test.focus.filterable.js +12 -3
- package/dist/dropdown.test.focus.js +18 -2
- package/dist/dropdown.test.interactions.filterable.js +121 -45
- package/dist/dropdown.test.interactions.multiple.js +71 -30
- package/dist/dropdown.test.interactions.single.js +26 -4
- package/dist/form-controls-layout.d.ts +0 -2
- package/dist/icon-button.d.ts +2 -4
- package/dist/icon-button.js +1 -1
- package/dist/icon-button.test.basics.js +14 -82
- package/dist/icon-button.test.focus.d.ts +1 -0
- package/dist/icon-button.test.focus.js +13 -0
- package/dist/input.d.ts +4 -5
- package/dist/input.js +1 -1
- package/dist/input.styles.js +4 -4
- package/dist/input.test.basics.js +0 -52
- package/dist/input.test.events.js +27 -27
- package/dist/input.test.focus.js +27 -26
- package/dist/input.test.form.js +6 -6
- package/dist/input.test.validity.js +130 -130
- package/dist/label.d.ts +1 -3
- package/dist/label.js +1 -1
- package/dist/label.styles.js +5 -6
- package/dist/label.test.basics.js +4 -4
- package/dist/library/ow.js +1 -1
- package/dist/menu.button.d.ts +0 -2
- package/dist/menu.button.test.basics.js +3 -3
- package/dist/menu.d.ts +1 -4
- package/dist/menu.js +1 -1
- package/dist/menu.link.d.ts +1 -2
- package/dist/menu.link.js +1 -1
- package/dist/menu.options.d.ts +0 -2
- package/dist/menu.test.events.js +6 -6
- package/dist/menu.test.focus.js +5 -18
- package/dist/menu.test.interactions.js +48 -24
- package/dist/modal.d.ts +6 -17
- package/dist/modal.icon-button.d.ts +0 -2
- package/dist/modal.icon-button.test.basics.js +3 -3
- package/dist/modal.js +1 -1
- package/dist/modal.styles.js +13 -19
- package/dist/modal.tertiary-icon.d.ts +0 -3
- package/dist/modal.tertiary-icon.test.basics.js +3 -3
- package/dist/modal.test.basics.js +9 -5
- package/dist/modal.test.close.js +2 -2
- package/dist/modal.test.events.js +2 -2
- package/dist/radio-group.d.ts +0 -3
- package/dist/radio-group.js +1 -1
- package/dist/radio-group.test.basics.js +61 -61
- package/dist/radio-group.test.events.js +13 -13
- package/dist/radio-group.test.focus.js +1 -1
- package/dist/radio-group.test.form.js +2 -2
- package/dist/radio-group.test.validity.js +12 -12
- package/dist/radio.d.ts +0 -3
- package/dist/radio.styles.js +4 -12
- package/dist/split-button.d.ts +8 -11
- package/dist/split-button.js +1 -1
- package/dist/split-button.primary-button.d.ts +21 -0
- package/dist/split-button.primary-button.js +1 -0
- package/dist/split-button.primary-button.styles.js +96 -0
- package/dist/split-button.primary-button.test.basics.d.ts +1 -0
- package/dist/split-button.primary-button.test.basics.js +31 -0
- package/dist/split-button.primary-button.test.focus.d.ts +1 -0
- package/dist/split-button.primary-button.test.focus.js +14 -0
- package/dist/split-button.primary-link.d.ts +19 -0
- package/dist/split-button.primary-link.js +1 -0
- package/dist/split-button.primary-link.test.basics.d.ts +1 -0
- package/dist/split-button.primary-link.test.basics.js +30 -0
- package/dist/split-button.primary-link.test.focus.d.ts +1 -0
- package/dist/split-button.primary-link.test.focus.js +15 -0
- package/dist/split-button.secondary-button.d.ts +25 -0
- package/dist/split-button.secondary-button.js +1 -0
- package/dist/split-button.secondary-button.styles.js +103 -0
- package/dist/split-button.secondary-button.test.basics.d.ts +1 -0
- package/dist/split-button.secondary-button.test.basics.js +58 -0
- package/dist/split-button.secondary-button.test.focus.d.ts +1 -0
- package/dist/split-button.secondary-button.test.focus.js +14 -0
- package/dist/split-button.secondary-button.test.interactions.d.ts +2 -0
- package/dist/split-button.secondary-button.test.interactions.js +30 -0
- package/dist/split-button.stories.d.ts +4 -3
- package/dist/split-button.styles.js +1 -94
- package/dist/split-button.test.basics.d.ts +2 -1
- package/dist/split-button.test.basics.js +67 -80
- package/dist/split-button.test.interactions.d.ts +4 -0
- package/dist/split-button.test.interactions.js +51 -0
- package/dist/styles/opacity-and-scale-animation.js +2 -6
- package/dist/styles/variables.css +1 -1
- package/dist/tab.d.ts +2 -11
- package/dist/tab.group.d.ts +2 -5
- package/dist/tab.group.styles.js +12 -15
- package/dist/tab.group.test.basics.js +49 -34
- package/dist/tab.group.test.interactions.js +17 -14
- package/dist/tab.panel.d.ts +0 -3
- package/dist/tab.test.basics.js +6 -5
- package/dist/tag.d.ts +6 -4
- package/dist/tag.js +1 -1
- package/dist/tag.styles.js +36 -36
- package/dist/tag.test.basics.js +16 -109
- package/dist/tag.test.events.js +12 -8
- package/dist/tag.test.focus.js +2 -3
- package/dist/tag.test.interactions.d.ts +1 -0
- package/dist/tag.test.interactions.js +34 -0
- package/dist/textarea.d.ts +2 -3
- package/dist/textarea.js +2 -2
- package/dist/textarea.test.basics.js +8 -8
- package/dist/textarea.test.events.js +55 -55
- package/dist/textarea.test.form.js +9 -9
- package/dist/textarea.test.validity.js +167 -135
- package/dist/toasts.d.ts +1 -5
- package/dist/toasts.test.basics.js +2 -1
- package/dist/toasts.toast.d.ts +1 -4
- package/dist/toasts.toast.js +1 -1
- package/dist/toasts.toast.styles.js +12 -0
- package/dist/toggle.d.ts +0 -2
- package/dist/toggle.styles.js +1 -5
- package/dist/toggle.test.basics.js +2 -2
- package/dist/toggle.test.interactions.js +7 -7
- package/dist/tooltip.d.ts +2 -1
- package/dist/tooltip.js +1 -1
- package/dist/tooltip.styles.js +37 -14
- package/dist/tooltip.test.basics.d.ts +1 -1
- package/dist/tooltip.test.basics.js +19 -19
- package/dist/tree.d.ts +0 -2
- package/dist/tree.item.d.ts +5 -7
- package/dist/tree.item.icon-button.d.ts +1 -4
- package/dist/tree.item.js +1 -1
- package/dist/tree.item.menu.d.ts +0 -2
- package/dist/tree.item.menu.test.basics.js +9 -9
- package/dist/tree.item.styles.js +4 -3
- package/dist/tree.item.test.basics.js +43 -31
- package/dist/tree.test.basics.js +29 -29
- package/dist/tree.test.focus.js +77 -74
- package/package.json +12 -14
- package/dist/split-container.d.ts +0 -31
- package/dist/split-container.js +0 -1
- package/dist/split-container.styles.js +0 -132
- package/dist/split-container.test.basics.d.ts +0 -3
- package/dist/split-container.test.basics.js +0 -445
- package/dist/split-container.test.interactions.d.ts +0 -1
- package/dist/split-container.test.interactions.js +0 -20
- package/dist/split-link.d.ts +0 -25
- package/dist/split-link.js +0 -1
- package/dist/split-link.test.basics.d.ts +0 -1
- package/dist/split-link.test.basics.js +0 -93
- package/dist/split-link.test.interactions.d.ts +0 -1
- package/dist/split-link.test.interactions.js +0 -20
- package/dist/status-indicator.d.ts +0 -30
- package/dist/status-indicator.js +0 -1
- package/dist/status-indicator.stories.d.ts +0 -5
- package/dist/status-indicator.styles.js +0 -58
- package/dist/status-indicator.test.basics.d.ts +0 -1
- package/dist/status-indicator.test.basics.js +0 -102
- /package/dist/{split-container.styles.d.ts → split-button.primary-button.styles.d.ts} +0 -0
- /package/dist/{status-indicator.styles.d.ts → split-button.secondary-button.styles.d.ts} +0 -0
@@ -1,100 +1,87 @@
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-unused-expressions */
|
2
|
-
import './split-button.js';
|
3
|
-
import
|
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';
|
4
6
|
import GlideCoreSplitButton from './split-button.js';
|
7
|
+
import GlideCoreSplitButtonSecondaryButton from './split-button.secondary-button.js';
|
5
8
|
import expectArgumentError from './library/expect-argument-error.js';
|
6
9
|
GlideCoreSplitButton.shadowRootOptions.mode = 'open';
|
10
|
+
GlideCoreSplitButtonSecondaryButton.shadowRootOptions.mode = 'open';
|
11
|
+
GlideCoreMenuButton.shadowRootOptions.mode = 'open';
|
7
12
|
it('registers', async () => {
|
8
13
|
expect(window.customElements.get('glide-core-split-button')).to.equal(GlideCoreSplitButton);
|
9
14
|
});
|
10
15
|
it('is accessible', async () => {
|
11
16
|
const component = await fixture(html `
|
12
|
-
<glide-core-split-button>
|
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>
|
13
29
|
`);
|
14
30
|
await expect(component).to.be.accessible();
|
15
31
|
});
|
16
32
|
it('has defaults', async () => {
|
17
|
-
const component = await fixture(html `<glide-core-split-button>Button</glide-core-split-button>`);
|
18
|
-
const button = component.shadowRoot?.querySelector('button');
|
19
|
-
assert(button);
|
20
|
-
expect(component.ariaExpanded).to.equal(null);
|
21
|
-
expect(component.ariaControls).to.equal(null);
|
22
|
-
expect(component.ariaHasPopup).to.equal(null);
|
23
|
-
expect(component.disabled).to.equal(false);
|
24
|
-
expect(component.size).to.equal('large');
|
25
|
-
expect(component.variant).to.equal('primary');
|
26
|
-
expect(button.getAttribute('aria-controls')).to.equal(null);
|
27
|
-
expect(button.ariaExpanded).to.equal(null);
|
28
|
-
expect(button.ariaHasPopup).to.equal(null);
|
29
|
-
expect(button.disabled).to.equal(false);
|
30
|
-
});
|
31
|
-
it('renders a button with a label by default', async () => {
|
32
|
-
const component = await fixture(html `
|
33
|
-
<glide-core-split-button>Button</glide-core-split-button>
|
34
|
-
`);
|
35
|
-
expect(component.textContent).to.equal('Button');
|
36
|
-
});
|
37
|
-
it('renders with size "large" and variant "primary" by default', async () => {
|
38
|
-
const component = await fixture(html `
|
39
|
-
<glide-core-split-button>Button</glide-core-split-button>
|
40
|
-
`);
|
41
|
-
const button = component?.shadowRoot?.querySelector('[data-test="split-button"]');
|
42
|
-
expect(button?.classList.contains('large')).to.be.true;
|
43
|
-
expect(button?.classList.contains('primary')).to.be.true;
|
44
|
-
});
|
45
|
-
it('adds "small" styling when "size" attribute is "small"', async () => {
|
46
|
-
const component = await fixture(html `
|
47
|
-
<glide-core-split-button size="small">Button</glide-core-split-button>
|
48
|
-
`);
|
49
|
-
const button = component?.shadowRoot?.querySelector('[data-test="split-button"]');
|
50
|
-
expect(button?.classList.contains('small')).to.be.true;
|
51
|
-
});
|
52
|
-
it('adds "secondary" styling when "variant" attribute is "secondary"', async () => {
|
53
|
-
const component = await fixture(html `
|
54
|
-
<glide-core-split-button variant="secondary"
|
55
|
-
>Button</glide-core-split-button
|
56
|
-
>
|
57
|
-
`);
|
58
|
-
const button = component?.shadowRoot?.querySelector('[data-test="split-button"]');
|
59
|
-
expect(button?.classList.contains('secondary')).to.be.true;
|
60
|
-
});
|
61
|
-
it('sets the button as "disabled" when the attribute exists', async () => {
|
62
33
|
const component = await fixture(html `
|
63
|
-
<glide-core-split-button
|
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>
|
64
46
|
`);
|
65
|
-
|
66
|
-
expect(
|
47
|
+
expect(component.size).to.equal('large');
|
48
|
+
expect(component.variant).to.equal('primary');
|
67
49
|
});
|
68
|
-
it('
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
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>`));
|
76
59
|
});
|
77
|
-
it('
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
component.querySelector('[slot="prefix"]')?.remove();
|
89
|
-
await elementUpdated(component);
|
90
|
-
expect([
|
91
|
-
...component.shadowRoot.querySelector('[data-test="split-button"]')
|
92
|
-
.classList,
|
93
|
-
]).to.not.include('has-prefix');
|
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>`));
|
94
71
|
});
|
95
|
-
it('throws
|
96
|
-
await expectArgumentError(() => fixture(html `<glide-core-split-button
|
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>`));
|
97
78
|
});
|
98
|
-
it('throws
|
99
|
-
await expectArgumentError(() => fixture(html `<glide-core-split-button
|
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>`));
|
100
87
|
});
|
@@ -0,0 +1,51 @@
|
|
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
|
+
});
|
@@ -13,12 +13,8 @@ import{css,unsafeCSS}from"lit";export default e=>css`
|
|
13
13
|
}
|
14
14
|
|
15
15
|
${unsafeCSS(e)} {
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
@media (prefers-reduced-motion: reduce) {
|
20
|
-
${unsafeCSS(e)} {
|
21
|
-
animation: none !important;
|
16
|
+
@media (prefers-reduced-motion: no-preference) {
|
17
|
+
animation: opacity-and-scale 250ms cubic-bezier(0.25, 0, 0.3, 1);
|
22
18
|
}
|
23
19
|
}
|
24
20
|
`;
|
@@ -1 +1 @@
|
|
1
|
-
:root,:host{color-scheme:normal;--glide-core-border-radius-lg: .75rem;--glide-core-border-radius-md: .5rem;--glide-core-border-radius-none: 0rem;--glide-core-border-radius-round: 7.5rem;--glide-core-border-radius-sm: .25rem;--glide-core-border-radius-xs: .125rem;--glide-core-border-width-lg: .25rem;--glide-core-border-width-md: .125rem;--glide-core-border-width-none: 0rem;--glide-core-border-width-sm: .0625rem;--glide-core-spacing-lg: 1.5rem;--glide-core-spacing-md: 1rem;--glide-core-spacing-sm: .75rem;--glide-core-spacing-xl: 2rem;--glide-core-spacing-xs: .5rem;--glide-core-spacing-xxl: 3rem;--glide-core-spacing-xxs: .25rem;--glide-core-spacing-xxxl: 4rem;--glide-core-spacing-xxxs: .125rem;--glide-core-spacing-zero: 0rem}:root,:host,.theme-light{color-scheme:light;--glide-core-border-action: #0073e6;--glide-core-border-action-disabled: #d7e7ff;--glide-core-border-action-hover: #eef5ff;--glide-core-border-base: #c9c9c9;--glide-core-border-base-dark: #6d6d6d;--glide-core-border-base-darker: #424242;--glide-core-border-base-light: #e3e3e3;--glide-core-border-base-lighter: #f0f0f0;--glide-core-border-base-lightest: #ffffff;--glide-core-border-disabled: #8a8a8a;--glide-core-border-focus: #0073e6;--glide-core-border-focus-light: #eef5ff;--glide-core-border-primary: #054fb9;--glide-core-border-primary-hover: #0461cf;--glide-core-icon-active: #0073e6;--glide-core-icon-default: #212121;--glide-core-icon-default2: #212121;--glide-core-icon-display: #212121;--glide-core-icon-display-light: #6d6d6d;--glide-core-icon-hover: #8babf1;--glide-core-icon-primary: #054fb9;--glide-core-icon-primary-hover: #0461cf;--glide-core-icon-secondary-disabled: #d7e7ff;--glide-core-icon-selected: #ffffff;--glide-core-icon-selected-disabled: #eef5ff;--glide-core-icon-selected2: #ffffff;--glide-core-icon-tertiary-disabled: #8a8a8a;--glide-core-status-error: #db2d24;--glide-core-status-expired: #ff3b30;--glide-core-status-failed: #ff3b30;--glide-core-status-in-progress: #ffcc00;--glide-core-status-queued: #5ac8fa;--glide-core-status-scheduled: #af52de;--glide-core-status-success: #34c759;--glide-core-status-unknown: #6d6d6d;--glide-core-status-warning-critical: #ff3b30;--glide-core-status-warning-high: #ff9500;--glide-core-status-warning-informational: #0073e6;--glide-core-status-warning-low: #607d8b;--glide-core-status-warning-medium: #ffcc00;--glide-core-surface-active: #ffffff;--glide-core-surface-attention: #fffbeb;--glide-core-surface-base: #f0f0f0;--glide-core-surface-base-dark: #212121;--glide-core-surface-base-gray: #0000001a;--glide-core-surface-base-gray-dark: #00000066;--glide-core-surface-base-gray-light: #00000012;--glide-core-surface-base-gray-lighter: #00000008;--glide-core-surface-base-light: #ffffff8c;--glide-core-surface-base-lighter: #ffffffbf;--glide-core-surface-base-lightest: #ffffffcc;--glide-core-surface-base-xlightest: #ffffffe5;--glide-core-surface-disabled: #f0f0f0;--glide-core-surface-dot-step: #8babf1;--glide-core-surface-error: #fff0ef;--glide-core-surface-focus: #0073e6;--glide-core-surface-hover: #d7e7ff;--glide-core-surface-informational: #eef5ff;--glide-core-surface-modal: #ffffff;--glide-core-surface-page: #ffffff;--glide-core-surface-primary: #0073e6;--glide-core-surface-primary-disabled: #1d7afc26;--glide-core-surface-secondary: #eef5ff;--glide-core-surface-secondary-disabled: #eef5ff;--glide-core-surface-selected: #0073e6;--glide-core-surface-selected-disabled: #8a8a8a;--glide-core-surface-selected-hover: #054fb9;--glide-core-surface-success: #f1fdf4;--glide-core-surface-unselected-disabled: #e3e3e3;--glide-core-surface-warning: #fff6e9;--glide-core-surface-white-1percent: #ffffff03;--glide-core-text-body-1: #212121;--glide-core-text-body-2: #212121;--glide-core-text-body-light: #424242;--glide-core-text-body-lighter: #c9c9c9;--glide-core-text-disabled: #f0f0f0;--glide-core-text-header-1: #424242;--glide-core-text-header-2: #6d6d6d;--glide-core-text-link: #0461cf;--glide-core-text-link-dark-surface: #8babf1;--glide-core-text-link-table: #0461cf;--glide-core-text-placeholder: #6d6d6d;--glide-core-text-primary: #054fb9;--glide-core-text-primary-hover: #0461cf;--glide-core-text-secondary: #0073e6;--glide-core-text-secondary-disabled: #d7e7ff;--glide-core-text-selected: #ffffff;--glide-core-text-selected-2: #ffffff;--glide-core-text-syntax-blue: #0000ff;--glide-core-text-syntax-dark: #151515;--glide-core-text-syntax-green: #116644;--glide-core-text-syntax-purple: #770088;--glide-core-text-syntax-red-dark: #95150e;--glide-core-text-syntax-red-light: #ee4400;--glide-core-text-tertiary: #212121;--glide-core-text-tertiary-disabled: #8a8a8a}:host,.theme-dark{color-scheme:dark;--glide-core-border-action: #0073e6;--glide-core-border-action-disabled: #eef5ff;--glide-core-border-action-hover: #eef5ff;--glide-core-border-base: #6d6d6d;--glide-core-border-base-dark: #c9c9c9;--glide-core-border-base-darker: #e3e3e3;--glide-core-border-base-light: #212121;--glide-core-border-base-lighter: #212121;--glide-core-border-base-lightest: #424242;--glide-core-border-disabled: #8a8a8a;--glide-core-border-focus: #0073e6;--glide-core-border-focus-light: #eef5ff;--glide-core-border-primary: #ffffff;--glide-core-border-primary-hover: #0461cf;--glide-core-icon-active: #0073e6;--glide-core-icon-default: #ffffff;--glide-core-icon-default2: #212121;--glide-core-icon-display: #ffffff;--glide-core-icon-display-light: #d7e7ff;--glide-core-icon-hover: #eef5ff;--glide-core-icon-primary: #ffffff;--glide-core-icon-primary-hover: #d7e7ff;--glide-core-icon-secondary-disabled: #d7e7ff;--glide-core-icon-selected: #ffffff;--glide-core-icon-selected-disabled: #eef5ff;--glide-core-icon-selected2: #424242;--glide-core-icon-tertiary-disabled: #6d6d6d;--glide-core-status-error: #ff3b30;--glide-core-status-expired: #ff3b30;--glide-core-status-failed: #ff3b30;--glide-core-status-in-progress: #ffcc00;--glide-core-status-queued: #5ac8fa;--glide-core-status-scheduled: #af52de;--glide-core-status-success: #34c759;--glide-core-status-unknown: #6d6d6d;--glide-core-status-warning-critical: #ff3b30;--glide-core-status-warning-high: #ff9500;--glide-core-status-warning-informational: #0073e6;--glide-core-status-warning-low: #607d8b;--glide-core-status-warning-medium: #ffcc00;--glide-core-surface-active: #ffffff;--glide-core-surface-attention: #fffbeb;--glide-core-surface-base: #424242;--glide-core-surface-base-dark: #212121;--glide-core-surface-base-gray: #00000066;--glide-core-surface-base-gray-dark: #ffffff8c;--glide-core-surface-base-gray-light: #00000066;--glide-core-surface-base-gray-lighter: #ffffff1a;--glide-core-surface-base-light: #0000008c;--glide-core-surface-base-lighter: #000000bf;--glide-core-surface-base-lightest: #000000cc;--glide-core-surface-base-xlightest: #000000e5;--glide-core-surface-disabled: #424242;--glide-core-surface-dot-step: #8babf1;--glide-core-surface-error: #fff0ef;--glide-core-surface-focus: #0073e6;--glide-core-surface-hover: #0461cf;--glide-core-surface-informational: #eef5ff;--glide-core-surface-modal: #151515;--glide-core-surface-page: #212121;--glide-core-surface-primary: #0073e6;--glide-core-surface-primary-disabled: #6d6d6d;--glide-core-surface-secondary: #f0f0f0;--glide-core-surface-secondary-disabled: #f0f0f0;--glide-core-surface-selected: #0073e6;--glide-core-surface-selected-disabled: #8a8a8a;--glide-core-surface-selected-hover: #054fb9;--glide-core-surface-success: #f1fdf4;--glide-core-surface-unselected-disabled: #e3e3e3;--glide-core-surface-warning: #fff6e9;--glide-core-surface-white-1percent: #000000e5;--glide-core-text-body-1: #ffffff;--glide-core-text-body-2: #212121;--glide-core-text-body-light: #ffffff;--glide-core-text-body-lighter: #c9c9c9;--glide-core-text-disabled: #f0f0f0;--glide-core-text-header-1: #ffffff;--glide-core-text-header-2: #d7e7ff;--glide-core-text-link: #8babf1;--glide-core-text-link-dark-surface: #8babf1;--glide-core-text-link-table: #d0e8f2;--glide-core-text-placeholder: #d7e7ff;--glide-core-text-primary: #ffffff;--glide-core-text-primary-hover: #d7e7ff;--glide-core-text-secondary: #8babf1;--glide-core-text-secondary-disabled: #d7e7ff;--glide-core-text-selected: #ffffff;--glide-core-text-selected-2: #424242;--glide-core-text-syntax-blue: #0000ff;--glide-core-text-syntax-dark: #ffffff;--glide-core-text-syntax-green: #116644;--glide-core-text-syntax-purple: #770088;--glide-core-text-syntax-red-dark: #95150e;--glide-core-text-syntax-red-light: #ee4400;--glide-core-text-tertiary: #ffffff;--glide-core-text-tertiary-disabled: #6d6d6d}:root{--glide-core-body-md-font-family: var(--glide-core-font-sans);--glide-core-body-md-font-size: 1rem;--glide-core-body-md-font-style: normal;--glide-core-body-md-font-weight: 400;--glide-core-body-md-line-height: normal;--glide-core-body-sm-font-family: var(--glide-core-font-sans);--glide-core-body-sm-font-size: .875rem;--glide-core-body-sm-font-variant: normal;--glide-core-body-sm-font-weight: 400;--glide-core-body-sm-line-height: 1.3;--glide-core-body-xs-font-family: var(--glide-core-font-sans);--glide-core-body-xs-font-size: .75rem;--glide-core-body-xs-font-variant: normal;--glide-core-body-xs-font-weight: 400;--glide-core-body-xs-line-height: 1.3;--glide-core-color-dark-blue: #054fb9;--glide-core-color-white: #ffffff;--glide-core-font-sans: "Nunito";--glide-core-font-weight-bold: 700;--glide-core-font-weight-semi-bold: 600;--glide-core-glow-sm: 0px 0px 2px 0px #2c97eee5;--glide-core-heading-xs-font-size: 1.25rem;--glide-core-heading-xs-font-weight: var(--glide-core-font-weight-semi-bold);--glide-core-heading-xxs-font-family: var(--glide-core-font-sans);--glide-core-heading-xxs-font-size: 1rem;--glide-core-heading-xxs-font-style: normal;--glide-core-heading-xxs-font-variant: normal;--glide-core-heading-xxs-font-weight: var(--glide-core-font-weight-bold);--glide-core-heading-xxxs-font-family: var(--glide-core-font-sans);--glide-core-heading-xxxs-font-size: .875rem;--glide-core-heading-xxxs-font-style: normal;--glide-core-heading-xxxs-font-variant: normal;--glide-core-heading-xxxs-font-weight: var(--glide-core-font-weight-bold);--glide-core-heading-xxxs-line-height: 1.7;--glide-core-shadow-lg: 0px 4px 14px 0px #00000040;--glide-core-shadow-sm: 0px 2.275px 8.342px 0px rgba(181, 181, 181, .25);--glide-core-shadow-xl: 0px 4px 60px 0px #adadad}
|
1
|
+
:root,:host{color-scheme:normal;--glide-core-border-radius-lg: .75rem;--glide-core-border-radius-md: .5rem;--glide-core-border-radius-none: 0rem;--glide-core-border-radius-round: 7.5rem;--glide-core-border-radius-sm: .25rem;--glide-core-border-radius-xs: .125rem;--glide-core-border-width-lg: .25rem;--glide-core-border-width-md: .125rem;--glide-core-border-width-none: 0rem;--glide-core-border-width-sm: .0625rem;--glide-core-spacing-lg: 1.5rem;--glide-core-spacing-md: 1rem;--glide-core-spacing-sm: .75rem;--glide-core-spacing-xl: 2rem;--glide-core-spacing-xs: .5rem;--glide-core-spacing-xxl: 3rem;--glide-core-spacing-xxs: .25rem;--glide-core-spacing-xxxl: 4rem;--glide-core-spacing-xxxs: .125rem;--glide-core-spacing-zero: 0rem}:root,:host,.theme-light{color-scheme:light;--glide-core-border-action: #0073e6;--glide-core-border-action-disabled: #d7e7ff;--glide-core-border-action-hover: #eef5ff;--glide-core-border-base: #c9c9c9;--glide-core-border-base-dark: #6d6d6d;--glide-core-border-base-darker: #424242;--glide-core-border-base-light: #e3e3e3;--glide-core-border-base-lighter: #f0f0f0;--glide-core-border-base-lightest: #ffffff;--glide-core-border-base-transparent: #0000001a;--glide-core-border-disabled: #8a8a8a;--glide-core-border-focus: #0073e6;--glide-core-border-focus-light: #eef5ff;--glide-core-border-primary: #054fb9;--glide-core-border-primary-hover: #0461cf;--glide-core-icon-active: #0073e6;--glide-core-icon-default: #212121;--glide-core-icon-default2: #212121;--glide-core-icon-display: #212121;--glide-core-icon-display-light: #6d6d6d;--glide-core-icon-hover: #8babf1;--glide-core-icon-primary: #054fb9;--glide-core-icon-primary-hover: #0461cf;--glide-core-icon-secondary-disabled: #d7e7ff;--glide-core-icon-selected: #ffffff;--glide-core-icon-selected-disabled: #eef5ff;--glide-core-icon-selected2: #ffffff;--glide-core-icon-tertiary-disabled: #8a8a8a;--glide-core-status-error: #db2d24;--glide-core-status-expired: #ff3b30;--glide-core-status-failed: #ff3b30;--glide-core-status-in-progress: #ffcc00;--glide-core-status-queued: #5ac8fa;--glide-core-status-scheduled: #af52de;--glide-core-status-success: #34c759;--glide-core-status-unknown: #6d6d6d;--glide-core-status-warning-critical: #ff3b30;--glide-core-status-warning-high: #ff9500;--glide-core-status-warning-informational: #0073e6;--glide-core-status-warning-low: #607d8b;--glide-core-status-warning-medium: #ffcc00;--glide-core-surface-active: #ffffff;--glide-core-surface-attention: #fffbeb;--glide-core-surface-base: #f0f0f0;--glide-core-surface-base-dark: #212121;--glide-core-surface-base-gray: #0000001a;--glide-core-surface-base-gray-dark: #00000066;--glide-core-surface-base-gray-light: #00000012;--glide-core-surface-base-gray-lighter: #00000008;--glide-core-surface-base-light: #ffffff8c;--glide-core-surface-base-lighter: #ffffffbf;--glide-core-surface-base-lightest: #ffffffcc;--glide-core-surface-base-xlightest: #ffffffe5;--glide-core-surface-disabled: #f0f0f0;--glide-core-surface-dot-step: #8babf1;--glide-core-surface-error: #fff0ef;--glide-core-surface-focus: #0073e6;--glide-core-surface-hover: #d7e7ff;--glide-core-surface-informational: #eef5ff;--glide-core-surface-modal: #ffffff;--glide-core-surface-page: #ffffff;--glide-core-surface-primary: #0073e6;--glide-core-surface-primary-disabled: #1d7afc26;--glide-core-surface-secondary: #eef5ff;--glide-core-surface-secondary-disabled: #eef5ff;--glide-core-surface-selected: #0073e6;--glide-core-surface-selected-disabled: #8a8a8a;--glide-core-surface-selected-hover: #054fb9;--glide-core-surface-success: #f1fdf4;--glide-core-surface-table-row-hover: #1d7afc26;--glide-core-surface-unselected-disabled: #e3e3e3;--glide-core-surface-warning: #fff6e9;--glide-core-surface-white-1percent: #ffffff03;--glide-core-text-body-1: #212121;--glide-core-text-body-2: #212121;--glide-core-text-body-light: #424242;--glide-core-text-body-lighter: #8a8a8a;--glide-core-text-disabled: #f0f0f0;--glide-core-text-header-1: #424242;--glide-core-text-header-2: #6d6d6d;--glide-core-text-link: #0461cf;--glide-core-text-link-dark-surface: #8babf1;--glide-core-text-link-table: #0461cf;--glide-core-text-placeholder: #6d6d6d;--glide-core-text-primary: #054fb9;--glide-core-text-primary-hover: #0461cf;--glide-core-text-secondary: #0073e6;--glide-core-text-secondary-disabled: #d7e7ff;--glide-core-text-selected: #ffffff;--glide-core-text-selected-2: #ffffff;--glide-core-text-tertiary: #212121;--glide-core-text-tertiary-disabled: #8a8a8a}:host,.theme-dark{color-scheme:dark;--glide-core-border-action: #0073e6;--glide-core-border-action-disabled: #eef5ff;--glide-core-border-action-hover: #eef5ff;--glide-core-border-base: #6d6d6d;--glide-core-border-base-dark: #c9c9c9;--glide-core-border-base-darker: #e3e3e3;--glide-core-border-base-light: #212121;--glide-core-border-base-lighter: #212121;--glide-core-border-base-lightest: #424242;--glide-core-border-base-transparent: #0000001a;--glide-core-border-disabled: #8a8a8a;--glide-core-border-focus: #0073e6;--glide-core-border-focus-light: #eef5ff;--glide-core-border-primary: #ffffff;--glide-core-border-primary-hover: #0461cf;--glide-core-icon-active: #0073e6;--glide-core-icon-default: #ffffff;--glide-core-icon-default2: #212121;--glide-core-icon-display: #ffffff;--glide-core-icon-display-light: #d7e7ff;--glide-core-icon-hover: #eef5ff;--glide-core-icon-primary: #ffffff;--glide-core-icon-primary-hover: #d7e7ff;--glide-core-icon-secondary-disabled: #d7e7ff;--glide-core-icon-selected: #ffffff;--glide-core-icon-selected-disabled: #eef5ff;--glide-core-icon-selected2: #424242;--glide-core-icon-tertiary-disabled: #6d6d6d;--glide-core-status-error: #ff3b30;--glide-core-status-expired: #ff3b30;--glide-core-status-failed: #ff3b30;--glide-core-status-in-progress: #ffcc00;--glide-core-status-queued: #5ac8fa;--glide-core-status-scheduled: #af52de;--glide-core-status-success: #34c759;--glide-core-status-unknown: #6d6d6d;--glide-core-status-warning-critical: #ff3b30;--glide-core-status-warning-high: #ff9500;--glide-core-status-warning-informational: #0073e6;--glide-core-status-warning-low: #607d8b;--glide-core-status-warning-medium: #ffcc00;--glide-core-surface-active: #ffffff;--glide-core-surface-attention: #fffbeb;--glide-core-surface-base: #424242;--glide-core-surface-base-dark: #212121;--glide-core-surface-base-gray: #00000066;--glide-core-surface-base-gray-dark: #ffffff8c;--glide-core-surface-base-gray-light: #00000066;--glide-core-surface-base-gray-lighter: #ffffff1a;--glide-core-surface-base-light: #0000008c;--glide-core-surface-base-lighter: #000000bf;--glide-core-surface-base-lightest: #000000cc;--glide-core-surface-base-xlightest: #000000e5;--glide-core-surface-disabled: #424242;--glide-core-surface-dot-step: #8babf1;--glide-core-surface-error: #fff0ef;--glide-core-surface-focus: #0073e6;--glide-core-surface-hover: #0461cf;--glide-core-surface-informational: #eef5ff;--glide-core-surface-modal: #151515;--glide-core-surface-page: #212121;--glide-core-surface-primary: #0073e6;--glide-core-surface-primary-disabled: #6d6d6d;--glide-core-surface-secondary: #f0f0f0;--glide-core-surface-secondary-disabled: #f0f0f0;--glide-core-surface-selected: #0073e6;--glide-core-surface-selected-disabled: #8a8a8a;--glide-core-surface-selected-hover: #054fb9;--glide-core-surface-success: #f1fdf4;--glide-core-surface-table-row-hover: #1d7afc26;--glide-core-surface-unselected-disabled: #e3e3e3;--glide-core-surface-warning: #fff6e9;--glide-core-surface-white-1percent: #000000e5;--glide-core-text-body-1: #ffffff;--glide-core-text-body-2: #212121;--glide-core-text-body-light: #ffffff;--glide-core-text-body-lighter: #8a8a8a;--glide-core-text-disabled: #f0f0f0;--glide-core-text-header-1: #ffffff;--glide-core-text-header-2: #d7e7ff;--glide-core-text-link: #8babf1;--glide-core-text-link-dark-surface: #8babf1;--glide-core-text-link-table: #d0e8f2;--glide-core-text-placeholder: #c9c9c9;--glide-core-text-primary: #ffffff;--glide-core-text-primary-hover: #d7e7ff;--glide-core-text-secondary: #8babf1;--glide-core-text-secondary-disabled: #d7e7ff;--glide-core-text-selected: #ffffff;--glide-core-text-selected-2: #424242;--glide-core-text-tertiary: #ffffff;--glide-core-text-tertiary-disabled: #6d6d6d}:root{--glide-core-body-md-font-family: var(--glide-core-font-sans);--glide-core-body-md-font-size: 1rem;--glide-core-body-md-font-style: normal;--glide-core-body-md-font-weight: 400;--glide-core-body-md-line-height: normal;--glide-core-body-sm-font-family: var(--glide-core-font-sans);--glide-core-body-sm-font-size: .875rem;--glide-core-body-sm-font-variant: normal;--glide-core-body-sm-font-weight: 400;--glide-core-body-sm-line-height: 1.3;--glide-core-body-xs-font-family: var(--glide-core-font-sans);--glide-core-body-xs-font-size: .75rem;--glide-core-body-xs-font-variant: normal;--glide-core-body-xs-font-weight: 400;--glide-core-body-xs-line-height: 1.3;--glide-core-color-dark-blue: #054fb9;--glide-core-color-white: #ffffff;--glide-core-font-sans: "Nunito";--glide-core-font-weight-bold: 700;--glide-core-font-weight-semi-bold: 600;--glide-core-glow-sm: 0px 0px 2px 0px #2c97eee5;--glide-core-heading-xs-font-size: 1.25rem;--glide-core-heading-xs-font-weight: var(--glide-core-font-weight-semi-bold);--glide-core-heading-xxs-font-family: var(--glide-core-font-sans);--glide-core-heading-xxs-font-size: 1rem;--glide-core-heading-xxs-font-style: normal;--glide-core-heading-xxs-font-variant: normal;--glide-core-heading-xxs-font-weight: var(--glide-core-font-weight-bold);--glide-core-heading-xxxs-font-family: var(--glide-core-font-sans);--glide-core-heading-xxxs-font-size: .875rem;--glide-core-heading-xxxs-font-style: normal;--glide-core-heading-xxxs-font-variant: normal;--glide-core-heading-xxxs-font-weight: var(--glide-core-font-weight-bold);--glide-core-heading-xxxs-line-height: 1.7;--glide-core-shadow-lg: 0px 4px 14px 0px #00000040;--glide-core-shadow-sm: 0px 2.275px 8.342px 0px rgba(181, 181, 181, .25);--glide-core-shadow-xl: 0px 4px 60px 0px #adadad}
|
package/dist/tab.d.ts
CHANGED
@@ -5,24 +5,15 @@ declare global {
|
|
5
5
|
}
|
6
6
|
}
|
7
7
|
/**
|
8
|
-
* @
|
9
|
-
*
|
10
|
-
* @slot - Main content (label) for the tab
|
11
|
-
*
|
12
|
-
* @slot icon - A slot for placing an optional icon for the tab
|
13
|
-
*
|
8
|
+
* @slot - A label.
|
9
|
+
* @slot icon - An optional icon.
|
14
10
|
*/
|
15
11
|
export default class GlideCoreTab extends LitElement {
|
16
12
|
#private;
|
17
13
|
static shadowRootOptions: ShadowRootInit;
|
18
14
|
static styles: import("lit").CSSResult[];
|
19
|
-
/**
|
20
|
-
* The name of the panel corresponding to this tab
|
21
|
-
*/
|
22
15
|
panel: string;
|
23
|
-
/** Sets the active attribute on the tab. */
|
24
16
|
active: boolean;
|
25
|
-
/** Disables the tab. */
|
26
17
|
disabled: boolean;
|
27
18
|
protected firstUpdated(): void;
|
28
19
|
render(): import("lit").TemplateResult<1>;
|
package/dist/tab.group.d.ts
CHANGED
@@ -8,11 +8,8 @@ declare global {
|
|
8
8
|
}
|
9
9
|
}
|
10
10
|
/**
|
11
|
-
* @
|
12
|
-
*
|
13
|
-
* @slot nav - The slot where you place the <glide-core-tab> components
|
14
|
-
*
|
15
|
-
* @slot - The default slot. Put the <glide-core-tab-panel> components here
|
11
|
+
* @slot - One ore more of `<glide-core-tab-panel>`.
|
12
|
+
* @slot nav - One or more of `<glide-core-tab>`.
|
16
13
|
*/
|
17
14
|
export default class GlideCoreTabGroup extends LitElement {
|
18
15
|
#private;
|
package/dist/tab.group.styles.js
CHANGED
@@ -15,10 +15,13 @@ import{css}from"lit";export default[css`
|
|
15
15
|
gap: var(--glide-core-spacing-xl);
|
16
16
|
overflow: auto hidden;
|
17
17
|
position: relative;
|
18
|
-
scroll-behavior: smooth;
|
19
18
|
scrollbar-width: none;
|
20
19
|
white-space: nowrap;
|
21
20
|
|
21
|
+
@media (prefers-reduced-motion: no-preference) {
|
22
|
+
scroll-behavior: smooth;
|
23
|
+
}
|
24
|
+
|
22
25
|
/* "-webkit-scrollbar" is needed for Safari */
|
23
26
|
|
24
27
|
&::-webkit-scrollbar {
|
@@ -38,10 +41,14 @@ import{css}from"lit";export default[css`
|
|
38
41
|
translate: var(--active-tab-indicator-translate, 0) 0;
|
39
42
|
}
|
40
43
|
|
41
|
-
&.animated
|
42
|
-
|
43
|
-
|
44
|
-
|
44
|
+
&.animated {
|
45
|
+
@media (prefers-reduced-motion: no-preference) {
|
46
|
+
&::after {
|
47
|
+
transition:
|
48
|
+
inline-size 250ms,
|
49
|
+
translate 250ms;
|
50
|
+
}
|
51
|
+
}
|
45
52
|
}
|
46
53
|
}
|
47
54
|
|
@@ -69,14 +76,4 @@ import{css}from"lit";export default[css`
|
|
69
76
|
::slotted([slot='nav']:last-of-type) {
|
70
77
|
padding-inline-end: 0.1875rem;
|
71
78
|
}
|
72
|
-
|
73
|
-
@media (prefers-reduced-motion: reduce) {
|
74
|
-
.component .tab-group {
|
75
|
-
scroll-behavior: auto;
|
76
|
-
|
77
|
-
&.animated::after {
|
78
|
-
transition: none;
|
79
|
-
}
|
80
|
-
}
|
81
|
-
}
|
82
79
|
`];
|
@@ -18,27 +18,25 @@ it('registers', async () => {
|
|
18
18
|
expect(window.customElements.get('glide-core-tab-panel')).to.equal(GlideCoreTabPanel);
|
19
19
|
});
|
20
20
|
it('renders correct markup and sets correct attributes for the default case', async () => {
|
21
|
-
const
|
21
|
+
const component = await fixture(html `
|
22
22
|
<glide-core-tab-group>
|
23
23
|
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
24
24
|
<glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
|
25
25
|
</glide-core-tab-group>
|
26
26
|
`);
|
27
|
-
await expect(
|
28
|
-
const [firstTab] =
|
29
|
-
expect(
|
30
|
-
expect([...
|
31
|
-
'component',
|
32
|
-
]);
|
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']);
|
33
31
|
expect([
|
34
|
-
...
|
32
|
+
...component.shadowRoot.querySelector('.tab-group').classList,
|
35
33
|
]).to.deep.equal(['tab-group', 'animated']);
|
36
|
-
const slot =
|
34
|
+
const slot = component.shadowRoot.querySelector('slot:not([name="nav"])');
|
37
35
|
expect(slot).to.exist;
|
38
36
|
expect(slot.assignedElements.length).to.equal(0);
|
39
37
|
});
|
40
38
|
it('can switch tabs', async () => {
|
41
|
-
const
|
39
|
+
const component = await fixture(html `
|
42
40
|
<glide-core-tab-group>
|
43
41
|
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
44
42
|
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
@@ -51,19 +49,27 @@ it('can switch tabs', async () => {
|
|
51
49
|
<glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
|
52
50
|
</glide-core-tab-group>
|
53
51
|
`);
|
54
|
-
const listener = oneEvent(
|
55
|
-
const [firstTab, secondTab, thirdTab, disabledTab] =
|
56
|
-
const [firstPanel, secondPanel, thirdPanel] =
|
57
|
-
|
58
|
-
expect(
|
59
|
-
|
60
|
-
expect(
|
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;
|
61
63
|
secondTab.click();
|
62
64
|
const triggeredEvent = await listener;
|
63
|
-
|
64
|
-
expect(
|
65
|
-
|
66
|
-
expect(
|
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;
|
67
73
|
expect(triggeredEvent.type).to.equal('tab-show', 'correct tab event fires');
|
68
74
|
expect(triggeredEvent.bubbles).to.be.true;
|
69
75
|
expect(triggeredEvent.detail.panel).to.equal('2', 'Can get the panel name from the tab click event');
|
@@ -72,18 +78,23 @@ it('can switch tabs', async () => {
|
|
72
78
|
// Should be focused on third tab. Press Enter on it
|
73
79
|
await sendKeys({ press: 'Enter' });
|
74
80
|
const secondTriggeredEvent = await listener;
|
75
|
-
|
76
|
-
expect(
|
77
|
-
|
78
|
-
expect(
|
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;
|
79
89
|
expect(secondTriggeredEvent.type).to.equal('tab-show', 'correct tab event fires for keydown');
|
80
90
|
expect(secondTriggeredEvent.bubbles).to.be.true;
|
81
91
|
expect(secondTriggeredEvent.detail.panel).to.equal('2', 'Can get the panel name from the tab show event');
|
82
92
|
disabledTab.click();
|
83
|
-
|
93
|
+
// clicking on a disabled tab does not make it active
|
94
|
+
expect(disabledTab.active).to.be.false;
|
84
95
|
});
|
85
96
|
it('can use left/right, home and end keys to focus on tabs', async () => {
|
86
|
-
const
|
97
|
+
const component = await fixture(html `
|
87
98
|
<glide-core-tab-group>
|
88
99
|
<glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
|
89
100
|
<glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
|
@@ -94,26 +105,30 @@ it('can use left/right, home and end keys to focus on tabs', async () => {
|
|
94
105
|
<glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
|
95
106
|
</glide-core-tab-group>
|
96
107
|
`);
|
97
|
-
const [firstTab, secondTab, thirdTab] =
|
108
|
+
const [firstTab, secondTab, thirdTab] = component.tabElements;
|
98
109
|
firstTab.focus();
|
99
110
|
await sendKeys({ press: 'ArrowRight' });
|
100
111
|
await sendKeys({ press: 'Enter' });
|
101
|
-
|
112
|
+
// right works
|
113
|
+
expect(secondTab.active).to.be.true;
|
102
114
|
await sendKeys({ press: 'ArrowLeft' });
|
103
115
|
await sendKeys({ press: 'Enter' });
|
104
|
-
|
116
|
+
// left works
|
117
|
+
expect(firstTab.active).to.be.true;
|
105
118
|
await sendKeys({ press: 'ArrowLeft' });
|
106
119
|
await sendKeys({ press: 'Enter' });
|
107
|
-
|
120
|
+
// left from first goes to last
|
121
|
+
expect(thirdTab.active).to.be.true;
|
108
122
|
await sendKeys({ press: 'ArrowRight' });
|
109
123
|
await sendKeys({ press: 'Enter' });
|
110
|
-
|
124
|
+
// right from last goes to first
|
125
|
+
expect(firstTab.active).to.be.true;
|
111
126
|
await sendKeys({ press: 'Home' });
|
112
127
|
await sendKeys({ press: 'Enter' });
|
113
|
-
expect(firstTab.active).to.
|
128
|
+
expect(firstTab.active).to.be.true;
|
114
129
|
await sendKeys({ press: 'End' });
|
115
130
|
await sendKeys({ press: 'Enter' });
|
116
|
-
expect(thirdTab.active).to.
|
131
|
+
expect(thirdTab.active).to.be.true;
|
117
132
|
});
|
118
133
|
it('throws an error when an element other than `glide-core-tab` is a child of the `nav` slot', async () => {
|
119
134
|
await expectArgumentError(() => {
|