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