@crowdstrike/glide-core 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/README.md +44 -5
  2. package/dist/accordion.test.basics.js +1 -0
  3. package/dist/accordion.test.events.js +1 -0
  4. package/dist/button-group.button.d.ts +14 -15
  5. package/dist/button-group.button.js +1 -1
  6. package/dist/button-group.button.styles.js +75 -52
  7. package/dist/button-group.button.test.basics.d.ts +1 -1
  8. package/dist/button-group.button.test.basics.js +84 -147
  9. package/dist/button-group.button.test.events.js +9 -67
  10. package/dist/button-group.button.test.focus.js +13 -0
  11. package/dist/button-group.button.test.interactions.d.ts +1 -0
  12. package/dist/button-group.button.test.interactions.js +42 -0
  13. package/dist/button-group.d.ts +7 -10
  14. package/dist/button-group.js +1 -1
  15. package/dist/button-group.stories.d.ts +1 -5
  16. package/dist/button-group.styles.js +18 -6
  17. package/dist/button-group.test.basics.js +114 -234
  18. package/dist/button-group.test.events.js +211 -263
  19. package/dist/button-group.test.focus.d.ts +1 -0
  20. package/dist/button-group.test.focus.js +39 -0
  21. package/dist/button-group.test.interactions.d.ts +1 -0
  22. package/dist/button-group.test.interactions.js +91 -0
  23. package/dist/button.test.basics.js +2 -1
  24. package/dist/button.test.events.js +1 -0
  25. package/dist/button.test.form.js +1 -0
  26. package/dist/checkbox-group.js +1 -1
  27. package/dist/checkbox-group.styles.js +1 -1
  28. package/dist/checkbox-group.test.basics.js +2 -1
  29. package/dist/checkbox-group.test.events.js +5 -4
  30. package/dist/checkbox-group.test.focus.js +5 -3
  31. package/dist/checkbox-group.test.form.js +1 -0
  32. package/dist/checkbox-group.test.validity.js +1 -0
  33. package/dist/checkbox.d.ts +7 -1
  34. package/dist/checkbox.js +1 -1
  35. package/dist/checkbox.styles.js +11 -3
  36. package/dist/checkbox.test.basics.js +1 -0
  37. package/dist/checkbox.test.events.js +5 -4
  38. package/dist/checkbox.test.focus.js +2 -2
  39. package/dist/checkbox.test.form.js +1 -0
  40. package/dist/{checkbox.test.states.js → checkbox.test.interactions.js} +25 -1
  41. package/dist/checkbox.test.validity.js +1 -0
  42. package/dist/drawer.js +1 -1
  43. package/dist/drawer.test.basics.js +1 -0
  44. package/dist/drawer.test.closing.js +1 -0
  45. package/dist/drawer.test.events.js +1 -0
  46. package/dist/drawer.test.methods.js +1 -0
  47. package/dist/dropdown.d.ts +6 -4
  48. package/dist/dropdown.js +1 -1
  49. package/dist/dropdown.option.d.ts +7 -2
  50. package/dist/dropdown.option.js +1 -1
  51. package/dist/dropdown.option.styles.js +13 -0
  52. package/dist/dropdown.option.test.basics.js +7 -3
  53. package/dist/dropdown.option.test.basics.multiple.js +1 -0
  54. package/dist/dropdown.option.test.basics.single.js +1 -0
  55. package/dist/dropdown.option.test.events.js +2 -1
  56. package/dist/dropdown.option.test.focus.js +1 -1
  57. package/dist/dropdown.option.test.interactions.multiple.js +2 -54
  58. package/dist/dropdown.option.test.interactions.single.js +52 -9
  59. package/dist/dropdown.styles.js +20 -19
  60. package/dist/dropdown.test.basics.filterable.js +1 -0
  61. package/dist/dropdown.test.basics.js +144 -2
  62. package/dist/dropdown.test.basics.multiple.js +6 -3
  63. package/dist/dropdown.test.basics.single.js +1 -1
  64. package/dist/dropdown.test.events.filterable.js +74 -0
  65. package/dist/dropdown.test.events.js +50 -160
  66. package/dist/dropdown.test.events.multiple.js +268 -10
  67. package/dist/dropdown.test.events.single.js +202 -4
  68. package/dist/dropdown.test.focus.filterable.js +9 -5
  69. package/dist/dropdown.test.focus.js +2 -1
  70. package/dist/dropdown.test.focus.multiple.js +1 -2
  71. package/dist/dropdown.test.focus.single.js +1 -1
  72. package/dist/dropdown.test.form.js +1 -0
  73. package/dist/dropdown.test.form.multiple.js +1 -0
  74. package/dist/dropdown.test.form.single.js +1 -0
  75. package/dist/dropdown.test.interactions.filterable.js +69 -11
  76. package/dist/dropdown.test.interactions.js +95 -5
  77. package/dist/dropdown.test.interactions.multiple.js +203 -6
  78. package/dist/dropdown.test.interactions.single.js +69 -6
  79. package/dist/dropdown.test.validity.js +1 -0
  80. package/dist/form-controls-layout.test.basics.js +2 -1
  81. package/dist/icon-button.test.basics.js +2 -1
  82. package/dist/icons/checked.d.ts +1 -1
  83. package/dist/icons/checked.js +1 -1
  84. package/dist/icons/magnifying-glass.js +1 -1
  85. package/dist/input.d.ts +0 -6
  86. package/dist/input.js +1 -1
  87. package/dist/input.styles.js +7 -2
  88. package/dist/input.test.basics.js +20 -5
  89. package/dist/input.test.events.js +5 -4
  90. package/dist/input.test.focus.js +5 -4
  91. package/dist/input.test.form.js +1 -0
  92. package/dist/input.test.translations.d.ts +1 -0
  93. package/dist/input.test.translations.js +38 -0
  94. package/dist/input.test.validity.js +134 -4
  95. package/dist/label.d.ts +1 -1
  96. package/dist/label.js +1 -1
  97. package/dist/label.styles.js +29 -20
  98. package/dist/label.test.basics.js +27 -24
  99. package/dist/library/expect-argument-error.js +1 -1
  100. package/dist/library/localize.d.ts +5 -1
  101. package/dist/library/ow.test.d.ts +2 -1
  102. package/dist/library/ow.test.js +8 -3
  103. package/dist/menu.button.test.basics.js +1 -0
  104. package/dist/menu.d.ts +3 -5
  105. package/dist/menu.js +1 -1
  106. package/dist/menu.link.test.basics.js +1 -0
  107. package/dist/menu.options.test.basics.js +3 -2
  108. package/dist/menu.styles.js +1 -15
  109. package/dist/menu.test.basics.d.ts +1 -2
  110. package/dist/menu.test.basics.js +23 -6
  111. package/dist/menu.test.events.d.ts +1 -0
  112. package/dist/menu.test.events.js +2 -1
  113. package/dist/menu.test.focus.d.ts +1 -0
  114. package/dist/menu.test.focus.js +14 -6
  115. package/dist/menu.test.interactions.js +213 -56
  116. package/dist/modal.icon-button.test.basics.js +2 -1
  117. package/dist/modal.js +1 -1
  118. package/dist/modal.styles.js +18 -13
  119. package/dist/modal.tertiary-icon.d.ts +0 -1
  120. package/dist/modal.tertiary-icon.js +1 -1
  121. package/dist/modal.tertiary-icon.test.basics.js +2 -1
  122. package/dist/modal.test.accessibility.js +1 -0
  123. package/dist/modal.test.basics.js +2 -1
  124. package/dist/modal.test.close.js +1 -0
  125. package/dist/modal.test.events.js +11 -10
  126. package/dist/modal.test.lock-scroll.js +1 -0
  127. package/dist/modal.test.methods.js +1 -0
  128. package/dist/modal.test.scrollbars.js +1 -0
  129. package/dist/radio-group.js +1 -1
  130. package/dist/radio-group.styles.js +1 -1
  131. package/dist/radio-group.test.basics.js +1 -0
  132. package/dist/radio-group.test.events.js +1 -0
  133. package/dist/radio-group.test.focus.js +4 -3
  134. package/dist/radio-group.test.form.js +1 -0
  135. package/dist/radio-group.test.validity.js +1 -0
  136. package/dist/radio.d.ts +1 -0
  137. package/dist/radio.js +1 -1
  138. package/dist/radio.styles.js +33 -0
  139. package/dist/split-button.test.basics.js +1 -0
  140. package/dist/split-container.test.basics.js +5 -0
  141. package/dist/split-link.test.basics.js +1 -0
  142. package/dist/split-link.test.interactions.js +2 -1
  143. package/dist/styles/variables.css +1 -1
  144. package/dist/tab.d.ts +1 -3
  145. package/dist/tab.group.d.ts +3 -5
  146. package/dist/tab.group.js +1 -1
  147. package/dist/tab.group.styles.js +27 -13
  148. package/dist/tab.group.test.basics.js +8 -57
  149. package/dist/tab.group.test.interactions.d.ts +3 -0
  150. package/dist/tab.group.test.interactions.js +454 -0
  151. package/dist/tab.js +1 -1
  152. package/dist/tab.panel.d.ts +1 -0
  153. package/dist/tab.panel.js +1 -1
  154. package/dist/tab.panel.styles.js +11 -1
  155. package/dist/tab.styles.js +7 -68
  156. package/dist/tab.test.basics.js +0 -20
  157. package/dist/tabs.stories.d.ts +1 -2
  158. package/dist/tag.test.basics.js +3 -2
  159. package/dist/textarea.d.ts +0 -1
  160. package/dist/textarea.js +2 -2
  161. package/dist/textarea.stories.d.ts +3 -4
  162. package/dist/textarea.styles.js +14 -3
  163. package/dist/textarea.test.basics.js +81 -44
  164. package/dist/textarea.test.events.js +57 -41
  165. package/dist/textarea.test.form.js +1 -0
  166. package/dist/textarea.test.translations.d.ts +1 -0
  167. package/dist/textarea.test.translations.js +34 -0
  168. package/dist/textarea.test.validity.js +105 -20
  169. package/dist/toasts.js +1 -1
  170. package/dist/toasts.styles.js +8 -1
  171. package/dist/toasts.test.basics.js +20 -0
  172. package/dist/toggle.js +1 -1
  173. package/dist/toggle.test.basics.js +1 -0
  174. package/dist/toggle.test.events.js +1 -0
  175. package/dist/toggle.test.focus.js +1 -1
  176. package/dist/toggle.test.interactions.d.ts +1 -0
  177. package/dist/{toggle.test.states.js → toggle.test.interactions.js} +1 -0
  178. package/dist/tooltip.d.ts +7 -5
  179. package/dist/tooltip.js +1 -1
  180. package/dist/tooltip.styles.js +90 -25
  181. package/dist/tooltip.test.basics.js +39 -3
  182. package/dist/tooltip.test.interactions.js +137 -34
  183. package/dist/translations/en.js +1 -1
  184. package/dist/translations/fr.js +1 -1
  185. package/dist/translations/ja.js +1 -1
  186. package/dist/tree.d.ts +0 -1
  187. package/dist/tree.item.d.ts +2 -3
  188. package/dist/tree.item.js +1 -1
  189. package/dist/tree.item.menu.d.ts +0 -1
  190. package/dist/tree.item.menu.js +1 -1
  191. package/dist/tree.item.test.basics.js +1 -0
  192. package/dist/tree.js +1 -1
  193. package/dist/tree.test.basics.js +2 -1
  194. package/dist/tree.test.events.js +1 -1
  195. package/package.json +40 -29
  196. package/dist/drawer.test.floating-components.d.ts +0 -1
  197. package/dist/drawer.test.floating-components.js +0 -51
  198. package/dist/library/set-containing-block.d.ts +0 -15
  199. package/dist/library/set-containing-block.js +0 -1
  200. package/dist/modal.test.floating-components.js +0 -62
  201. /package/dist/{checkbox.test.states.d.ts → button-group.button.test.focus.d.ts} +0 -0
  202. /package/dist/{modal.test.floating-components.d.ts → checkbox.test.interactions.d.ts} +0 -0
  203. /package/dist/{toggle.test.states.d.ts → dropdown.test.events.filterable.d.ts} +0 -0
@@ -1,27 +1,41 @@
1
1
  import{css}from"lit";export default[css`
2
2
  .component {
3
+ background-color: transparent;
3
4
  display: flex;
4
5
  flex-direction: column;
5
6
 
6
- &.vertical {
7
- flex-direction: row;
7
+ & .tab-container {
8
+ border-block-end: 1px solid var(--glide-core-border-base-lighter);
9
+ display: flex;
10
+
11
+ & .overflow-button-container {
12
+ flex-shrink: 0;
13
+ inline-size: 1.875rem;
14
+ }
8
15
  }
9
- }
10
16
 
11
- .tab-group {
12
- display: flex;
17
+ & .tab-group {
18
+ display: flex;
19
+ overflow: auto hidden;
20
+ scrollbar-width: none;
21
+ white-space: nowrap;
13
22
 
14
- &.primary {
15
- border-block-end: 1px solid var(--glide-core-border-primary);
16
- }
23
+ /* "-webkit-scrollbar" is needed for Safari */
17
24
 
18
- &.secondary {
19
- border-block-end: 1px solid var(--glide-core-border-base-lighter);
25
+ &::-webkit-scrollbar {
26
+ block-size: 0;
27
+ inline-size: 0;
28
+ }
20
29
  }
21
30
 
22
- &.vertical {
23
- border: 1px solid var(--glide-core-border-base-darker);
24
- flex-direction: column;
31
+ & .overflow {
32
+ background-color: transparent;
33
+ border: none;
34
+ cursor: pointer;
35
+ inline-size: 1.875rem;
36
+ margin: 0;
37
+ outline: none;
38
+ padding: 0;
25
39
  }
26
40
  }
27
41
  `];
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-expressions */
1
2
  import './tab.group.js';
2
3
  import './tab.js';
3
4
  import './tab.panel.js';
@@ -8,6 +9,9 @@ import GlideCoreTabPanel from './tab.panel.js';
8
9
  import expectArgumentError from './library/expect-argument-error.js';
9
10
  GlideCoreTabGroup.shadowRootOptions.mode = 'open';
10
11
  GlideCoreTabPanel.shadowRootOptions.mode = 'open';
12
+ function isPanelHidden(panel) {
13
+ return panel.shadowRoot?.firstElementChild?.classList.contains('hidden');
14
+ }
11
15
  it('registers', async () => {
12
16
  expect(window.customElements.get('glide-core-tab-group')).to.equal(GlideCoreTabGroup);
13
17
  expect(window.customElements.get('glide-core-tab-panel')).to.equal(GlideCoreTabPanel);
@@ -22,39 +26,16 @@ it('renders correct markup and sets correct attributes for the default case', as
22
26
  await expect(tabGroup).to.be.accessible();
23
27
  const [firstTab] = tabGroup.tabElements;
24
28
  expect(tabGroup.activeTab).to.equal(firstTab, 'activeTab defaults to first tab');
25
- expect(tabGroup.variant).to.equal('primary');
26
29
  expect([...tabGroup.shadowRoot.firstElementChild.classList]).to.deep.equal([
27
30
  'component',
28
31
  ]);
29
32
  expect([
30
33
  ...tabGroup.shadowRoot.querySelector('.tab-group').classList,
31
- ]).to.deep.equal(['tab-group', 'primary']);
34
+ ]).to.deep.equal(['tab-group']);
32
35
  const slot = tabGroup.shadowRoot.querySelector('slot:not([name="nav"])');
33
36
  expect(slot).to.exist;
34
37
  expect(slot.assignedElements.length).to.equal(0);
35
38
  });
36
- it('renders a secondary variant', async () => {
37
- const element = await fixture(html `
38
- <glide-core-tab-group variant="secondary">
39
- <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
40
- <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
41
- </glide-core-tab-group>
42
- `);
43
- expect([
44
- ...element.shadowRoot.querySelector('.tab-group').classList,
45
- ]).to.deep.equal(['tab-group', 'secondary']);
46
- });
47
- it('renders a vertical variant', async () => {
48
- const element = await fixture(html `
49
- <glide-core-tab-group variant="vertical">
50
- <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
51
- <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
52
- </glide-core-tab-group>
53
- `);
54
- expect([
55
- ...element.shadowRoot.querySelector('.tab-group').classList,
56
- ]).to.deep.equal(['tab-group', 'vertical']);
57
- });
58
39
  it('can switch tabs', async () => {
59
40
  const tabGroup = await fixture(html `
60
41
  <glide-core-tab-group>
@@ -86,7 +67,7 @@ it('can switch tabs', async () => {
86
67
  expect(triggeredEvent.bubbles).to.be.true;
87
68
  expect(triggeredEvent.detail.panel).to.equal('2', 'Can get the panel name from the tab click event');
88
69
  secondTab.focus();
89
- await sendKeys({ press: 'Tab' });
70
+ await sendKeys({ press: 'ArrowRight' });
90
71
  // Should be focused on third tab. Press Enter on it
91
72
  await sendKeys({ press: 'Enter' });
92
73
  const secondTriggeredEvent = await listener;
@@ -133,37 +114,10 @@ it('can use left/right, home and end keys to focus on tabs', async () => {
133
114
  await sendKeys({ press: 'Enter' });
134
115
  expect(thirdTab.active).to.equal(true);
135
116
  });
136
- it('can use up/down keys to focus on vertical tabs', async () => {
137
- const tabGroup = await fixture(html `
138
- <glide-core-tab-group variant="vertical">
139
- <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
140
- <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
141
- <glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
142
-
143
- <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
144
- <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
145
- <glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
146
- </glide-core-tab-group>
147
- `);
148
- const [firstTab, secondTab, thirdTab] = tabGroup.tabElements;
149
- firstTab.focus();
150
- await sendKeys({ press: 'ArrowDown' });
151
- await sendKeys({ press: 'Enter' });
152
- expect(secondTab.active).to.equal(true, 'down works');
153
- await sendKeys({ press: 'ArrowUp' });
154
- await sendKeys({ press: 'Enter' });
155
- expect(firstTab.active).to.equal(true, 'up works');
156
- await sendKeys({ press: 'ArrowUp' });
157
- await sendKeys({ press: 'Enter' });
158
- expect(thirdTab.active).to.equal(true, 'up from first goes to last');
159
- await sendKeys({ press: 'ArrowDown' });
160
- await sendKeys({ press: 'Enter' });
161
- expect(firstTab.active).to.equal(true, 'down from last goes to first');
162
- });
163
117
  it('throws an error when an element other than `glide-core-tab` is a child of the `nav` slot', async () => {
164
118
  await expectArgumentError(() => {
165
119
  return fixture(html `
166
- <glide-core-tab-group variant="vertical">
120
+ <glide-core-tab-group>
167
121
  <div slot="nav">Tab 1</div>
168
122
  <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
169
123
  </glide-core-tab-group>
@@ -173,13 +127,10 @@ it('throws an error when an element other than `glide-core-tab` is a child of th
173
127
  it('throws an error when an element other than `glide-core-tab-panel` is a child of the default slot', async () => {
174
128
  await expectArgumentError(() => {
175
129
  return fixture(html `
176
- <glide-core-tab-group variant="vertical">
130
+ <glide-core-tab-group>
177
131
  <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
178
132
  <div>Default Content</div>
179
133
  </glide-core-tab-group>
180
134
  `);
181
135
  });
182
136
  });
183
- function isPanelHidden(panel) {
184
- return panel.shadowRoot?.firstElementChild?.classList.contains('hidden');
185
- }
@@ -0,0 +1,3 @@
1
+ import './tab.group.js';
2
+ import './tab.js';
3
+ import './tab.panel.js';
@@ -0,0 +1,454 @@
1
+ /* eslint-disable @typescript-eslint/no-unused-expressions */
2
+ import './tab.group.js';
3
+ import './tab.js';
4
+ import './tab.panel.js';
5
+ import { expect, fixture, html, waitUntil } from '@open-wc/testing';
6
+ import { sendKeys } from '@web/test-runner-commands';
7
+ import GlideCoreTabGroup from './tab.group.js';
8
+ import GlideCoreTabPanel from './tab.panel.js';
9
+ import sinon from 'sinon';
10
+ GlideCoreTabGroup.shadowRootOptions.mode = 'open';
11
+ GlideCoreTabPanel.shadowRootOptions.mode = 'open';
12
+ it('renders an end overflow button on end overflow', async () => {
13
+ const element = await fixture(html `
14
+ <div style="width:25rem">
15
+ <glide-core-tab-group>
16
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
17
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
18
+ <glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
19
+ <glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
20
+ <glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
21
+ <glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
22
+
23
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
24
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
25
+ <glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
26
+ <glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
27
+ <glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
28
+ <glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
29
+ </glide-core-tab-group>
30
+ </div>
31
+ `);
32
+ const tabGroup = element.querySelector('glide-core-tab-group');
33
+ const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
34
+ expect(endOverflowButton).to.be.not.null;
35
+ });
36
+ it('does not render an end overflow button when there is no end overflow', async () => {
37
+ const element = await fixture(html `
38
+ <div style="width:25rem">
39
+ <glide-core-tab-group>
40
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
41
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
42
+ <glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
43
+ <glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
44
+ <glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
45
+ <glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
46
+
47
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
48
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
49
+ <glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
50
+ <glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
51
+ <glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
52
+ <glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
53
+ </glide-core-tab-group>
54
+ </div>
55
+ `);
56
+ const tabGroup = element.querySelector('glide-core-tab-group');
57
+ const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
58
+ expect(endOverflowButton).to.be.not.null;
59
+ endOverflowButton?.click();
60
+ await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]') === null);
61
+ });
62
+ it('renders a start overflow button on start overflow', async () => {
63
+ const element = await fixture(html `
64
+ <div style="width:25rem">
65
+ <glide-core-tab-group>
66
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
67
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
68
+ <glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
69
+ <glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
70
+ <glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
71
+ <glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
72
+
73
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
74
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
75
+ <glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
76
+ <glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
77
+ <glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
78
+ <glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
79
+ </glide-core-tab-group>
80
+ </div>
81
+ `);
82
+ const tabGroup = element.querySelector('glide-core-tab-group');
83
+ // Need to get the tab group into a state where there
84
+ // is overflow on the right -- do this by first scrolling to the right
85
+ const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
86
+ expect(endOverflowButton).to.be.not.null;
87
+ endOverflowButton?.click();
88
+ await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]'));
89
+ });
90
+ it('does not render a start overflow button when there is no start overflow', async () => {
91
+ const element = await fixture(html `
92
+ <div style="width:25rem">
93
+ <glide-core-tab-group>
94
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
95
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
96
+ <glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
97
+ <glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
98
+ <glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
99
+ <glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
100
+
101
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
102
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
103
+ <glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
104
+ <glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
105
+ <glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
106
+ <glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
107
+ </glide-core-tab-group>
108
+ </div>
109
+ `);
110
+ const tabGroup = element.querySelector('glide-core-tab-group');
111
+ const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
112
+ let startOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]');
113
+ expect(endOverflowButton).to.be.not.null;
114
+ expect(startOverflowButton).to.be.null;
115
+ endOverflowButton?.click();
116
+ await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]'));
117
+ startOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]');
118
+ startOverflowButton?.click();
119
+ await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]') === null);
120
+ });
121
+ it('scrolls tabs when overflow buttons are clicked', async () => {
122
+ const spy = sinon.spy();
123
+ const element = await fixture(html `
124
+ <div style="width:25rem">
125
+ <glide-core-tab-group>
126
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
127
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
128
+ <glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
129
+ <glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
130
+ <glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
131
+ <glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
132
+
133
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
134
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
135
+ <glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
136
+ <glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
137
+ <glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
138
+ <glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
139
+ </glide-core-tab-group>
140
+ </div>
141
+ `);
142
+ const tabGroup = element.querySelector('glide-core-tab-group');
143
+ tabGroup?.shadowRoot
144
+ ?.querySelector('[role="tablist"]')
145
+ ?.addEventListener('scroll', spy);
146
+ const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
147
+ expect(endOverflowButton).to.be.not.null;
148
+ endOverflowButton?.click();
149
+ await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]') === null);
150
+ expect(spy.called).to.be.true;
151
+ spy.resetHistory();
152
+ const startOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]');
153
+ expect(startOverflowButton).to.be.not.null;
154
+ startOverflowButton?.click();
155
+ await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]') === null);
156
+ expect(spy.called).to.be.true;
157
+ });
158
+ it('removes overflow buttons when the component is resized and there is no overflow', async () => {
159
+ const element = await fixture(html `
160
+ <div style="width:25rem" data-test="test-parent">
161
+ <glide-core-tab-group>
162
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
163
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
164
+ <glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
165
+ <glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
166
+ <glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
167
+ <glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
168
+
169
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
170
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
171
+ <glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
172
+ <glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
173
+ <glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
174
+ <glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
175
+ </glide-core-tab-group>
176
+ </div>
177
+ `);
178
+ const tabGroup = element.querySelector('glide-core-tab-group');
179
+ const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
180
+ expect(endOverflowButton).to.be.not.null;
181
+ const container = document?.querySelector('[data-test="test-parent"]');
182
+ expect(container).to.be.not.null;
183
+ container.style.width = 'auto';
184
+ await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]') === null &&
185
+ tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]') === null);
186
+ });
187
+ it('renders overflow buttons when the component is resized and there is overflow', async () => {
188
+ const element = await fixture(html `
189
+ <div data-test="test-parent">
190
+ <glide-core-tab-group>
191
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
192
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
193
+ <glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
194
+ <glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
195
+ <glide-core-tab slot="nav" panel="5">Tab 5</glide-core-tab>
196
+ <glide-core-tab slot="nav" panel="6">Tab 6</glide-core-tab>
197
+
198
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
199
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
200
+ <glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
201
+ <glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
202
+ <glide-core-tab-panel name="5">Content for Tab 5</glide-core-tab-panel>
203
+ <glide-core-tab-panel name="6">Content for Tab 6</glide-core-tab-panel>
204
+ </glide-core-tab-group>
205
+ </div>
206
+ `);
207
+ const tabGroup = element.querySelector('glide-core-tab-group');
208
+ const endOverflowButton = tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]');
209
+ expect(endOverflowButton).to.be.null;
210
+ const container = document?.querySelector('[data-test="test-parent"]');
211
+ expect(container).to.be.not.null;
212
+ container.style.width = '25rem';
213
+ await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]') === null &&
214
+ tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]'));
215
+ });
216
+ it('scrolls using keyboard when there is overflow and only a few pixels of overflowed tabs are on-screen', async () => {
217
+ const spy = sinon.spy();
218
+ const element = await fixture(html `
219
+ <div style="width: 17rem;">
220
+ <glide-core-tab-group>
221
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
222
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
223
+ <glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
224
+ <glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
225
+
226
+ <glide-core-tab-panel name="1">Content for tab 1 </glide-core-tab-panel>
227
+ <glide-core-tab-panel name="2">
228
+ Content for tab 2
229
+ </glide-core-tab-panel>
230
+ <glide-core-tab-panel name="3">
231
+ Content for tab 3
232
+ </glide-core-tab-panel>
233
+ <glide-core-tab-panel name="4">
234
+ Content for tab 4
235
+ </glide-core-tab-panel>
236
+ </glide-core-tab-group>
237
+ </div>
238
+ `);
239
+ const tabGroup = element.querySelector('glide-core-tab-group');
240
+ expect(tabGroup).to.be.not.null;
241
+ tabGroup?.shadowRoot
242
+ ?.querySelector('[role="tablist"]')
243
+ ?.addEventListener('scroll', spy);
244
+ tabGroup?.tabElements[0].focus();
245
+ await sendKeys({ press: 'ArrowRight' });
246
+ await sendKeys({ press: 'ArrowRight' });
247
+ await sendKeys({ press: 'ArrowRight' });
248
+ await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-end-button"]') === null);
249
+ expect(tabGroup?.tabElements[3]).to.have.focus;
250
+ expect(spy.callCount).to.equal(1);
251
+ spy.resetHistory();
252
+ await sendKeys({ press: 'ArrowLeft' });
253
+ await sendKeys({ press: 'ArrowLeft' });
254
+ await sendKeys({ press: 'ArrowLeft' });
255
+ await waitUntil(() => tabGroup?.shadowRoot?.querySelector('[data-test="overflow-start-button"]') === null);
256
+ expect(tabGroup?.tabElements[0]).to.have.focus;
257
+ expect(spy.callCount).to.equal(1);
258
+ });
259
+ it('has only one active tab that is tabbable after pressing the Enter key', async () => {
260
+ const tabGroup = await fixture(html `
261
+ <glide-core-tab-group>
262
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
263
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
264
+ <glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
265
+ <glide-core-tab slot="nav" panel="4">Tab 4</glide-core-tab>
266
+
267
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
268
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
269
+ <glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
270
+ <glide-core-tab-panel name="4">Content for Tab 4</glide-core-tab-panel>
271
+ </glide-core-tab-group>
272
+ `);
273
+ const [firstTab, secondTab, thirdTab, fourthTab] = tabGroup.tabElements;
274
+ expect(firstTab.active).to.be.true;
275
+ expect(secondTab.active).to.be.false;
276
+ expect(thirdTab.active).to.be.false;
277
+ expect(fourthTab.active).to.be.false;
278
+ expect(firstTab.tabIndex).to.equal(0);
279
+ expect(secondTab.tabIndex).to.equal(-1);
280
+ expect(thirdTab.tabIndex).to.equal(-1);
281
+ expect(fourthTab.tabIndex).to.equal(-1);
282
+ firstTab.focus();
283
+ await sendKeys({ press: 'ArrowRight' });
284
+ await sendKeys({ press: 'Enter' });
285
+ expect(firstTab.active).to.be.false;
286
+ expect(secondTab.active).to.be.true;
287
+ expect(thirdTab.active).to.be.false;
288
+ expect(fourthTab.active).to.be.false;
289
+ expect(firstTab.tabIndex).to.equal(-1);
290
+ expect(secondTab.tabIndex).to.equal(0);
291
+ expect(thirdTab.tabIndex).to.equal(-1);
292
+ expect(fourthTab.tabIndex).to.equal(-1);
293
+ await sendKeys({ press: 'End' });
294
+ await sendKeys({ press: 'Enter' });
295
+ expect(firstTab.active).to.be.false;
296
+ expect(secondTab.active).to.be.false;
297
+ expect(thirdTab.active).to.be.false;
298
+ expect(fourthTab.active).to.be.true;
299
+ expect(firstTab.tabIndex).to.equal(-1);
300
+ expect(secondTab.tabIndex).to.equal(-1);
301
+ expect(thirdTab.tabIndex).to.equal(-1);
302
+ expect(fourthTab.tabIndex).to.equal(0);
303
+ await sendKeys({ press: 'ArrowLeft' });
304
+ await sendKeys({ press: 'Enter' });
305
+ expect(firstTab.active).to.be.false;
306
+ expect(secondTab.active).to.be.false;
307
+ expect(thirdTab.active).to.be.true;
308
+ expect(fourthTab.active).to.be.false;
309
+ expect(firstTab.tabIndex).to.equal(-1);
310
+ expect(secondTab.tabIndex).to.equal(-1);
311
+ expect(thirdTab.tabIndex).to.equal(0);
312
+ expect(fourthTab.tabIndex).to.equal(-1);
313
+ await sendKeys({ press: 'Home' });
314
+ await sendKeys({ press: 'Enter' });
315
+ expect(firstTab.active).to.be.true;
316
+ expect(secondTab.active).to.be.false;
317
+ expect(thirdTab.active).to.be.false;
318
+ expect(fourthTab.active).to.be.false;
319
+ expect(firstTab.tabIndex).to.equal(0);
320
+ expect(secondTab.tabIndex).to.equal(-1);
321
+ expect(thirdTab.tabIndex).to.equal(-1);
322
+ expect(fourthTab.tabIndex).to.equal(-1);
323
+ });
324
+ it('has only one active tab that is tabbable when clicked', async () => {
325
+ const tabGroup = await fixture(html `
326
+ <glide-core-tab-group>
327
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
328
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
329
+ <glide-core-tab slot="nav" panel="3">Tab 3</glide-core-tab>
330
+
331
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
332
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
333
+ <glide-core-tab-panel name="3">Content for Tab 3</glide-core-tab-panel>
334
+ </glide-core-tab-group>
335
+ `);
336
+ const [firstTab, secondTab, thirdTab] = tabGroup.tabElements;
337
+ expect(firstTab.active).to.be.true;
338
+ expect(secondTab.active).to.be.false;
339
+ expect(thirdTab.active).to.be.false;
340
+ expect(firstTab.tabIndex).to.equal(0);
341
+ expect(secondTab.tabIndex).to.equal(-1);
342
+ expect(thirdTab.tabIndex).to.equal(-1);
343
+ secondTab.click();
344
+ expect(firstTab.active).to.be.false;
345
+ expect(secondTab.active).to.be.true;
346
+ expect(thirdTab.active).to.be.false;
347
+ expect(firstTab.tabIndex).to.equal(-1);
348
+ expect(secondTab.tabIndex).to.equal(0);
349
+ expect(thirdTab.tabIndex).to.equal(-1);
350
+ thirdTab.click();
351
+ expect(firstTab.active).to.be.false;
352
+ expect(secondTab.active).to.be.false;
353
+ expect(thirdTab.active).to.be.true;
354
+ expect(firstTab.tabIndex).to.equal(-1);
355
+ expect(secondTab.tabIndex).to.equal(-1);
356
+ expect(thirdTab.tabIndex).to.equal(0);
357
+ });
358
+ it('has only one tab panel that is active and tabbable when a tab is clicked', async () => {
359
+ const tabGroup = await fixture(html `
360
+ <glide-core-tab-group>
361
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
362
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
363
+
364
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
365
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
366
+ </glide-core-tab-group>
367
+ `);
368
+ const [, secondTab] = tabGroup.tabElements;
369
+ const [firstPanel, secondPanel] = tabGroup.panelElements;
370
+ expect(firstPanel.isActive).to.be.true;
371
+ expect(secondPanel.isActive).to.be.false;
372
+ expect(firstPanel.tabIndex).to.equal(0);
373
+ expect(secondPanel.tabIndex).to.equal(-1);
374
+ secondTab.click();
375
+ expect(firstPanel.isActive).to.be.false;
376
+ expect(secondPanel.isActive).to.be.true;
377
+ expect(firstPanel.tabIndex).to.equal(-1);
378
+ expect(secondPanel.tabIndex).to.equal(0);
379
+ });
380
+ it('has only one tab panel that is active and tabbable when using the keyboard to make selections', async () => {
381
+ const tabGroup = await fixture(html `
382
+ <glide-core-tab-group>
383
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
384
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
385
+
386
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
387
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
388
+ </glide-core-tab-group>
389
+ `);
390
+ const [firstTab] = tabGroup.tabElements;
391
+ const [firstPanel, secondPanel] = tabGroup.panelElements;
392
+ expect(firstPanel.isActive).to.be.true;
393
+ expect(secondPanel.isActive).to.be.false;
394
+ expect(firstPanel.tabIndex).to.equal(0);
395
+ expect(secondPanel.tabIndex).to.equal(-1);
396
+ firstTab.focus();
397
+ await sendKeys({ press: 'ArrowRight' });
398
+ await sendKeys({ press: 'Enter' });
399
+ expect(firstPanel.isActive).to.be.false;
400
+ expect(secondPanel.isActive).to.be.true;
401
+ expect(firstPanel.tabIndex).to.equal(-1);
402
+ expect(secondPanel.tabIndex).to.equal(0);
403
+ });
404
+ it('sets the last keyboard focused tab as tabbable ', async () => {
405
+ const tabGroup = await fixture(html `
406
+ <glide-core-tab-group>
407
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
408
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
409
+
410
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
411
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
412
+ </glide-core-tab-group>
413
+ `);
414
+ const [firstTab, secondTab] = tabGroup.tabElements;
415
+ expect(firstTab.active).to.be.true;
416
+ expect(secondTab.active).to.be.false;
417
+ expect(firstTab.tabIndex).to.equal(0);
418
+ expect(secondTab.tabIndex).to.equal(-1);
419
+ firstTab.focus();
420
+ await sendKeys({ press: 'ArrowRight' });
421
+ expect(firstTab.active).to.be.true;
422
+ expect(secondTab.active).to.be.false;
423
+ expect(firstTab.tabIndex).to.equal(-1);
424
+ expect(secondTab.tabIndex).to.equal(0);
425
+ });
426
+ it('sets the active tab as tabbable on tab blur', async () => {
427
+ // This behavior is to ensure that the last active tab is the first tabbable
428
+ // element in the component.
429
+ const tabGroup = await fixture(html `
430
+ <glide-core-tab-group>
431
+ <glide-core-tab slot="nav" panel="1">Tab 1</glide-core-tab>
432
+ <glide-core-tab slot="nav" panel="2">Tab 2</glide-core-tab>
433
+
434
+ <glide-core-tab-panel name="1">Content for Tab 1</glide-core-tab-panel>
435
+ <glide-core-tab-panel name="2">Content for Tab 2</glide-core-tab-panel>
436
+ </glide-core-tab-group>
437
+ `);
438
+ const [firstTab, secondTab] = tabGroup.tabElements;
439
+ expect(firstTab.active).to.be.true;
440
+ expect(secondTab.active).to.be.false;
441
+ expect(firstTab.tabIndex).to.equal(0);
442
+ expect(secondTab.tabIndex).to.equal(-1);
443
+ firstTab.focus();
444
+ await sendKeys({ press: 'ArrowRight' });
445
+ expect(firstTab.active).to.be.true;
446
+ expect(secondTab.active).to.be.false;
447
+ expect(firstTab.tabIndex).to.equal(-1);
448
+ expect(secondTab.tabIndex).to.equal(0);
449
+ secondTab.blur();
450
+ expect(firstTab.active).to.be.true;
451
+ expect(secondTab.active).to.be.false;
452
+ expect(firstTab.tabIndex).to.equal(0);
453
+ expect(secondTab.tabIndex).to.equal(-1);
454
+ });
package/dist/tab.js CHANGED
@@ -1 +1 @@
1
- var GlideCoreTab_1,__decorate=this&&this.__decorate||function(t,e,i,r){var a,s=arguments.length,o=s<3?e:null===r?r=Object.getOwnPropertyDescriptor(e,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)o=Reflect.decorate(t,e,i,r);else for(var l=t.length-1;l>=0;l--)(a=t[l])&&(o=(s<3?a(o):s>3?a(e,i,o):a(e,i))||o);return s>3&&o&&Object.defineProperty(e,i,o),o};import{LitElement,html}from"lit";import{classMap}from"lit/directives/class-map.js";import{customElement,property}from"lit/decorators.js";import styles from"./tab.styles.js";let GlideCoreTab=class GlideCoreTab extends LitElement{constructor(){super(...arguments),this.panel="",this.active=!1,this.variant="primary",this.disabled=!1}static{GlideCoreTab_1=this}static{this.instanceCount=0}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed"}}static{this.styles=styles}firstUpdated(){this.setAttribute("role","tab"),this.hasAttribute("id")||(this.id="glide-core-tab-"+GlideCoreTab_1.instanceCount++)}render(){return html`<div class="${classMap({component:!0,primary:"primary"===this.variant,secondary:"secondary"===this.variant,vertical:"vertical"===this.variant,active:this.active,disabled:this.disabled})}"><span class="container"><slot name="icon"></slot><div class="default-slot"><slot></slot></div></span></div>`}updated(t){t.has("active")&&this.setAttribute("aria-selected",this.active?"true":"false"),t.has("disabled")&&(this.disabled?(this.setAttribute("aria-disabled","true"),this.setAttribute("tabindex","-1")):(this.removeAttribute("aria-disabled"),this.setAttribute("tabindex","0")))}};__decorate([property({reflect:!0})],GlideCoreTab.prototype,"panel",void 0),__decorate([property({type:Boolean,reflect:!0})],GlideCoreTab.prototype,"active",void 0),__decorate([property({reflect:!0})],GlideCoreTab.prototype,"variant",void 0),__decorate([property({type:Boolean,reflect:!0})],GlideCoreTab.prototype,"disabled",void 0),GlideCoreTab=GlideCoreTab_1=__decorate([customElement("glide-core-tab")],GlideCoreTab);export default GlideCoreTab;
1
+ var __decorate=this&&this.__decorate||function(t,e,i,o){var s,r=arguments.length,a=r<3?e:null===o?o=Object.getOwnPropertyDescriptor(e,i):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(t,e,i,o);else for(var l=t.length-1;l>=0;l--)(s=t[l])&&(a=(r<3?s(a):r>3?s(e,i,a):s(e,i))||a);return r>3&&a&&Object.defineProperty(e,i,a),a};import{LitElement,html}from"lit";import{classMap}from"lit/directives/class-map.js";import{customElement,property}from"lit/decorators.js";import{nanoid}from"nanoid";import styles from"./tab.styles.js";let GlideCoreTab=class GlideCoreTab extends LitElement{constructor(){super(...arguments),this.panel="",this.active=!1,this.disabled=!1,this.#t=nanoid()}static{this.shadowRootOptions={...LitElement.shadowRootOptions,mode:"closed"}}static{this.styles=styles}firstUpdated(){this.setAttribute("role","tab"),this.id=this.#t}render(){return html`<div class="${classMap({component:!0,active:this.active,disabled:this.disabled})}"><span class="container"><slot name="icon"></slot><div class="default-slot"><slot></slot></div></span></div>`}updated(t){t.has("active")&&this.setAttribute("aria-selected",this.active?"true":"false"),t.has("disabled")&&(this.disabled?(this.setAttribute("aria-disabled","true"),this.setAttribute("tabindex","-1")):this.removeAttribute("aria-disabled"))}#t};__decorate([property({reflect:!0})],GlideCoreTab.prototype,"panel",void 0),__decorate([property({type:Boolean,reflect:!0})],GlideCoreTab.prototype,"active",void 0),__decorate([property({type:Boolean,reflect:!0})],GlideCoreTab.prototype,"disabled",void 0),GlideCoreTab=__decorate([customElement("glide-core-tab")],GlideCoreTab);export default GlideCoreTab;
@@ -11,6 +11,7 @@ declare global {
11
11
  *
12
12
  */
13
13
  export default class GlideCoreTabPanel extends LitElement {
14
+ #private;
14
15
  static instanceCount: number;
15
16
  static shadowRootOptions: ShadowRootInit;
16
17
  static styles: import("lit").CSSResult[];