@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.
Files changed (207) hide show
  1. package/README.md +17 -53
  2. package/dist/accordion.d.ts +10 -10
  3. package/dist/accordion.js +1 -1
  4. package/dist/accordion.stories.d.ts +0 -1
  5. package/dist/accordion.styles.js +36 -38
  6. package/dist/accordion.test.basics.js +13 -95
  7. package/dist/accordion.test.events.js +21 -33
  8. package/dist/accordion.test.focus.d.ts +1 -0
  9. package/dist/accordion.test.focus.js +11 -0
  10. package/dist/accordion.test.interactions.d.ts +1 -0
  11. package/dist/accordion.test.interactions.js +75 -0
  12. package/dist/button-group.button.d.ts +2 -4
  13. package/dist/button-group.button.js +1 -1
  14. package/dist/button-group.button.styles.js +6 -14
  15. package/dist/button-group.button.test.basics.js +8 -17
  16. package/dist/button-group.button.test.interactions.js +4 -4
  17. package/dist/button-group.d.ts +0 -2
  18. package/dist/button-group.test.basics.js +10 -10
  19. package/dist/button-group.test.events.js +2 -2
  20. package/dist/button-group.test.interactions.js +1 -1
  21. package/dist/button.d.ts +7 -10
  22. package/dist/button.js +1 -1
  23. package/dist/button.styles.js +4 -7
  24. package/dist/button.test.basics.js +10 -26
  25. package/dist/button.test.events.js +9 -9
  26. package/dist/checkbox-group.d.ts +3 -4
  27. package/dist/checkbox-group.js +1 -1
  28. package/dist/checkbox-group.styles.js +13 -1
  29. package/dist/checkbox-group.test.basics.js +8 -12
  30. package/dist/checkbox-group.test.focus.js +7 -7
  31. package/dist/checkbox-group.test.interactions.d.ts +1 -0
  32. package/dist/checkbox-group.test.interactions.js +82 -0
  33. package/dist/checkbox.d.ts +5 -4
  34. package/dist/checkbox.js +1 -1
  35. package/dist/checkbox.styles.js +35 -15
  36. package/dist/checkbox.test.basics.js +6 -15
  37. package/dist/checkbox.test.focus.js +4 -2
  38. package/dist/checkbox.test.interactions.js +11 -11
  39. package/dist/drawer.d.ts +2 -5
  40. package/dist/drawer.js +1 -1
  41. package/dist/drawer.test.accessibility.js +8 -8
  42. package/dist/drawer.test.basics.js +16 -16
  43. package/dist/drawer.test.closing.js +18 -16
  44. package/dist/drawer.test.events.js +13 -24
  45. package/dist/drawer.test.methods.js +22 -22
  46. package/dist/dropdown.d.ts +7 -5
  47. package/dist/dropdown.js +1 -1
  48. package/dist/dropdown.option.d.ts +1 -3
  49. package/dist/dropdown.option.js +1 -1
  50. package/dist/dropdown.option.styles.js +31 -19
  51. package/dist/dropdown.option.test.basics.js +4 -4
  52. package/dist/dropdown.styles.js +39 -3
  53. package/dist/dropdown.test.basics.js +8 -13
  54. package/dist/dropdown.test.basics.multiple.js +63 -31
  55. package/dist/dropdown.test.basics.single.js +49 -0
  56. package/dist/dropdown.test.focus.filterable.js +12 -3
  57. package/dist/dropdown.test.focus.js +18 -2
  58. package/dist/dropdown.test.interactions.filterable.js +121 -45
  59. package/dist/dropdown.test.interactions.multiple.js +71 -30
  60. package/dist/dropdown.test.interactions.single.js +26 -4
  61. package/dist/form-controls-layout.d.ts +0 -2
  62. package/dist/icon-button.d.ts +2 -4
  63. package/dist/icon-button.js +1 -1
  64. package/dist/icon-button.test.basics.js +14 -82
  65. package/dist/icon-button.test.focus.d.ts +1 -0
  66. package/dist/icon-button.test.focus.js +13 -0
  67. package/dist/input.d.ts +4 -5
  68. package/dist/input.js +1 -1
  69. package/dist/input.styles.js +4 -4
  70. package/dist/input.test.basics.js +0 -52
  71. package/dist/input.test.events.js +27 -27
  72. package/dist/input.test.focus.js +27 -26
  73. package/dist/input.test.form.js +6 -6
  74. package/dist/input.test.validity.js +130 -130
  75. package/dist/label.d.ts +1 -3
  76. package/dist/label.js +1 -1
  77. package/dist/label.styles.js +5 -6
  78. package/dist/label.test.basics.js +4 -4
  79. package/dist/library/ow.js +1 -1
  80. package/dist/menu.button.d.ts +0 -2
  81. package/dist/menu.button.test.basics.js +3 -3
  82. package/dist/menu.d.ts +1 -4
  83. package/dist/menu.js +1 -1
  84. package/dist/menu.link.d.ts +1 -2
  85. package/dist/menu.link.js +1 -1
  86. package/dist/menu.options.d.ts +0 -2
  87. package/dist/menu.test.events.js +6 -6
  88. package/dist/menu.test.focus.js +5 -18
  89. package/dist/menu.test.interactions.js +48 -24
  90. package/dist/modal.d.ts +6 -17
  91. package/dist/modal.icon-button.d.ts +0 -2
  92. package/dist/modal.icon-button.test.basics.js +3 -3
  93. package/dist/modal.js +1 -1
  94. package/dist/modal.styles.js +13 -19
  95. package/dist/modal.tertiary-icon.d.ts +0 -3
  96. package/dist/modal.tertiary-icon.test.basics.js +3 -3
  97. package/dist/modal.test.basics.js +9 -5
  98. package/dist/modal.test.close.js +2 -2
  99. package/dist/modal.test.events.js +2 -2
  100. package/dist/radio-group.d.ts +0 -3
  101. package/dist/radio-group.js +1 -1
  102. package/dist/radio-group.test.basics.js +61 -61
  103. package/dist/radio-group.test.events.js +13 -13
  104. package/dist/radio-group.test.focus.js +1 -1
  105. package/dist/radio-group.test.form.js +2 -2
  106. package/dist/radio-group.test.validity.js +12 -12
  107. package/dist/radio.d.ts +0 -3
  108. package/dist/radio.styles.js +4 -12
  109. package/dist/split-button.d.ts +8 -11
  110. package/dist/split-button.js +1 -1
  111. package/dist/split-button.primary-button.d.ts +21 -0
  112. package/dist/split-button.primary-button.js +1 -0
  113. package/dist/split-button.primary-button.styles.js +96 -0
  114. package/dist/split-button.primary-button.test.basics.d.ts +1 -0
  115. package/dist/split-button.primary-button.test.basics.js +31 -0
  116. package/dist/split-button.primary-button.test.focus.d.ts +1 -0
  117. package/dist/split-button.primary-button.test.focus.js +14 -0
  118. package/dist/split-button.primary-link.d.ts +19 -0
  119. package/dist/split-button.primary-link.js +1 -0
  120. package/dist/split-button.primary-link.test.basics.d.ts +1 -0
  121. package/dist/split-button.primary-link.test.basics.js +30 -0
  122. package/dist/split-button.primary-link.test.focus.d.ts +1 -0
  123. package/dist/split-button.primary-link.test.focus.js +15 -0
  124. package/dist/split-button.secondary-button.d.ts +25 -0
  125. package/dist/split-button.secondary-button.js +1 -0
  126. package/dist/split-button.secondary-button.styles.js +103 -0
  127. package/dist/split-button.secondary-button.test.basics.d.ts +1 -0
  128. package/dist/split-button.secondary-button.test.basics.js +58 -0
  129. package/dist/split-button.secondary-button.test.focus.d.ts +1 -0
  130. package/dist/split-button.secondary-button.test.focus.js +14 -0
  131. package/dist/split-button.secondary-button.test.interactions.d.ts +2 -0
  132. package/dist/split-button.secondary-button.test.interactions.js +30 -0
  133. package/dist/split-button.stories.d.ts +4 -3
  134. package/dist/split-button.styles.js +1 -94
  135. package/dist/split-button.test.basics.d.ts +2 -1
  136. package/dist/split-button.test.basics.js +67 -80
  137. package/dist/split-button.test.interactions.d.ts +4 -0
  138. package/dist/split-button.test.interactions.js +51 -0
  139. package/dist/styles/opacity-and-scale-animation.js +2 -6
  140. package/dist/styles/variables.css +1 -1
  141. package/dist/tab.d.ts +2 -11
  142. package/dist/tab.group.d.ts +2 -5
  143. package/dist/tab.group.styles.js +12 -15
  144. package/dist/tab.group.test.basics.js +49 -34
  145. package/dist/tab.group.test.interactions.js +17 -14
  146. package/dist/tab.panel.d.ts +0 -3
  147. package/dist/tab.test.basics.js +6 -5
  148. package/dist/tag.d.ts +6 -4
  149. package/dist/tag.js +1 -1
  150. package/dist/tag.styles.js +36 -36
  151. package/dist/tag.test.basics.js +16 -109
  152. package/dist/tag.test.events.js +12 -8
  153. package/dist/tag.test.focus.js +2 -3
  154. package/dist/tag.test.interactions.d.ts +1 -0
  155. package/dist/tag.test.interactions.js +34 -0
  156. package/dist/textarea.d.ts +2 -3
  157. package/dist/textarea.js +2 -2
  158. package/dist/textarea.test.basics.js +8 -8
  159. package/dist/textarea.test.events.js +55 -55
  160. package/dist/textarea.test.form.js +9 -9
  161. package/dist/textarea.test.validity.js +167 -135
  162. package/dist/toasts.d.ts +1 -5
  163. package/dist/toasts.test.basics.js +2 -1
  164. package/dist/toasts.toast.d.ts +1 -4
  165. package/dist/toasts.toast.js +1 -1
  166. package/dist/toasts.toast.styles.js +12 -0
  167. package/dist/toggle.d.ts +0 -2
  168. package/dist/toggle.styles.js +1 -5
  169. package/dist/toggle.test.basics.js +2 -2
  170. package/dist/toggle.test.interactions.js +7 -7
  171. package/dist/tooltip.d.ts +2 -1
  172. package/dist/tooltip.js +1 -1
  173. package/dist/tooltip.styles.js +37 -14
  174. package/dist/tooltip.test.basics.d.ts +1 -1
  175. package/dist/tooltip.test.basics.js +19 -19
  176. package/dist/tree.d.ts +0 -2
  177. package/dist/tree.item.d.ts +5 -7
  178. package/dist/tree.item.icon-button.d.ts +1 -4
  179. package/dist/tree.item.js +1 -1
  180. package/dist/tree.item.menu.d.ts +0 -2
  181. package/dist/tree.item.menu.test.basics.js +9 -9
  182. package/dist/tree.item.styles.js +4 -3
  183. package/dist/tree.item.test.basics.js +43 -31
  184. package/dist/tree.test.basics.js +29 -29
  185. package/dist/tree.test.focus.js +77 -74
  186. package/package.json +12 -14
  187. package/dist/split-container.d.ts +0 -31
  188. package/dist/split-container.js +0 -1
  189. package/dist/split-container.styles.js +0 -132
  190. package/dist/split-container.test.basics.d.ts +0 -3
  191. package/dist/split-container.test.basics.js +0 -445
  192. package/dist/split-container.test.interactions.d.ts +0 -1
  193. package/dist/split-container.test.interactions.js +0 -20
  194. package/dist/split-link.d.ts +0 -25
  195. package/dist/split-link.js +0 -1
  196. package/dist/split-link.test.basics.d.ts +0 -1
  197. package/dist/split-link.test.basics.js +0 -93
  198. package/dist/split-link.test.interactions.d.ts +0 -1
  199. package/dist/split-link.test.interactions.js +0 -20
  200. package/dist/status-indicator.d.ts +0 -30
  201. package/dist/status-indicator.js +0 -1
  202. package/dist/status-indicator.stories.d.ts +0 -5
  203. package/dist/status-indicator.styles.js +0 -58
  204. package/dist/status-indicator.test.basics.d.ts +0 -1
  205. package/dist/status-indicator.test.basics.js +0 -102
  206. /package/dist/{split-container.styles.d.ts → split-button.primary-button.styles.d.ts} +0 -0
  207. /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 { assert, elementUpdated, expect, fixture, html, } from '@open-wc/testing';
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>Button</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 disabled>Button</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
- const button = component?.shadowRoot?.querySelector('[data-test="split-button"]');
66
- expect(button).to.have.attribute('disabled');
47
+ expect(component.size).to.equal('large');
48
+ expect(component.variant).to.equal('primary');
67
49
  });
68
- it('renders a prefix slot when given', async () => {
69
- const component = await fixture(html `
70
- <glide-core-split-button
71
- ><div data-prefix slot="prefix">Prefix</div>
72
- Button</glide-core-split-button
73
- >
74
- `);
75
- expect(component.querySelector('[data-prefix]')).to.be.not.null;
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('renders with prefix class when dynamically added and removed', async () => {
78
- const component = await fixture(html `
79
- <glide-core-split-button>
80
- <span slot="prefix">prefix</span>Button</glide-core-split-button
81
- >
82
- `);
83
- expect(document.querySelector('[slot="prefix"]')).to.be.not.null;
84
- expect([
85
- ...component.shadowRoot.querySelector('[data-test="split-button"]')
86
- .classList,
87
- ]).to.include('has-prefix');
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 an error when there is no button label', async () => {
96
- await expectArgumentError(() => fixture(html `<glide-core-split-button></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 an error when there is something other than text in the default slot', async () => {
99
- await expectArgumentError(() => fixture(html `<glide-core-split-button><div>test</div></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,4 @@
1
+ import './menu.button.js';
2
+ import './split-button.primary-button.js';
3
+ import './split-button.primary-link.js';
4
+ import './split-button.secondary-button.js';
@@ -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
- animation: opacity-and-scale 250ms cubic-bezier(0.25, 0, 0.3, 1);
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
- * @description A single tab. Always place inside of a <glide-core-tab-group> component.
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>;
@@ -8,11 +8,8 @@ declare global {
8
8
  }
9
9
  }
10
10
  /**
11
- * @description The parent component for a group of tabs. Handles active state changes from clicking the tabs.
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;
@@ -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::after {
42
- transition:
43
- inline-size 250ms,
44
- translate 250ms;
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 tabGroup = await fixture(html `
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(tabGroup).to.be.accessible();
28
- const [firstTab] = tabGroup.tabElements;
29
- expect(tabGroup.activeTab).to.equal(firstTab, 'activeTab defaults to first tab');
30
- expect([...tabGroup.shadowRoot.firstElementChild.classList]).to.deep.equal([
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
- ...tabGroup.shadowRoot.querySelector('.tab-group').classList,
32
+ ...component.shadowRoot.querySelector('.tab-group').classList,
35
33
  ]).to.deep.equal(['tab-group', 'animated']);
36
- const slot = tabGroup.shadowRoot.querySelector('slot:not([name="nav"])');
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 tabGroup = await fixture(html `
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(tabGroup, 'tab-show');
55
- const [firstTab, secondTab, thirdTab, disabledTab] = tabGroup.tabElements;
56
- const [firstPanel, secondPanel, thirdPanel] = tabGroup.panelElements;
57
- expect(firstTab.active).to.equal(true, 'first tab defaults to active');
58
- expect(secondTab.active).to.equal(false, 'other tabs default to not active');
59
- expect(isPanelHidden(firstPanel)).to.equal(false, 'first panel is not hidden by default');
60
- expect(isPanelHidden(secondPanel)).to.equal(true, 'nonactive panel is hidden by default');
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
- await expect(firstTab.active).to.equal(false, 'after clicking a different tab, previous tab is no longer active');
64
- expect(secondTab.active).to.equal(true, 'clicked tab becomes active');
65
- expect(isPanelHidden(firstPanel)).to.equal(true, 'after clicking a different tab, previous panel is hidden');
66
- expect(isPanelHidden(secondPanel)).to.equal(false, `clicked tab's panel is no longer hidden`);
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
- expect(secondTab.active).to.equal(false, 'after pressing Enter on a different tab, previous tab is no longer active');
76
- expect(thirdTab.active).to.equal(true, 'new tab becomes active');
77
- expect(isPanelHidden(secondPanel)).to.equal(true, 'after pressing Enter on a different tab, previous panel is hidden');
78
- expect(isPanelHidden(thirdPanel)).to.equal(false, `new tab's panel is no longer hidden`);
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
- expect(disabledTab.active).to.equal(false, 'clicking on a disabled tab does not make it active');
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 tabGroup = await fixture(html `
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] = tabGroup.tabElements;
108
+ const [firstTab, secondTab, thirdTab] = component.tabElements;
98
109
  firstTab.focus();
99
110
  await sendKeys({ press: 'ArrowRight' });
100
111
  await sendKeys({ press: 'Enter' });
101
- expect(secondTab.active).to.equal(true, 'right works');
112
+ // right works
113
+ expect(secondTab.active).to.be.true;
102
114
  await sendKeys({ press: 'ArrowLeft' });
103
115
  await sendKeys({ press: 'Enter' });
104
- expect(firstTab.active).to.equal(true, 'left works');
116
+ // left works
117
+ expect(firstTab.active).to.be.true;
105
118
  await sendKeys({ press: 'ArrowLeft' });
106
119
  await sendKeys({ press: 'Enter' });
107
- expect(thirdTab.active).to.equal(true, 'left from first goes to last');
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
- expect(firstTab.active).to.equal(true, 'right from last goes to first');
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.equal(true);
128
+ expect(firstTab.active).to.be.true;
114
129
  await sendKeys({ press: 'End' });
115
130
  await sendKeys({ press: 'Enter' });
116
- expect(thirdTab.active).to.equal(true);
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(() => {