@crowdstrike/glide-core 0.13.0 → 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 (287) 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.js +11 -11
  5. package/dist/dropdown.option.d.ts +1 -1
  6. package/dist/dropdown.option.js +1 -1
  7. package/dist/dropdown.styles.js +11 -16
  8. package/dist/input.styles.js +6 -1
  9. package/dist/styles/variables.css +1 -1
  10. package/dist/textarea.styles.js +6 -0
  11. package/dist/toasts.d.ts +2 -2
  12. package/dist/toasts.toast.d.ts +1 -1
  13. package/dist/toasts.toast.js +1 -1
  14. package/dist/toasts.toast.styles.js +8 -0
  15. package/dist/tree.item.styles.js +2 -2
  16. package/package.json +9 -6
  17. package/dist/accordion.stories.d.ts +0 -6
  18. package/dist/accordion.test.basics.d.ts +0 -1
  19. package/dist/accordion.test.basics.js +0 -28
  20. package/dist/accordion.test.events.d.ts +0 -1
  21. package/dist/accordion.test.events.js +0 -28
  22. package/dist/accordion.test.focus.d.ts +0 -1
  23. package/dist/accordion.test.focus.js +0 -11
  24. package/dist/accordion.test.interactions.d.ts +0 -1
  25. package/dist/accordion.test.interactions.js +0 -75
  26. package/dist/button-group.button.test.basics.d.ts +0 -1
  27. package/dist/button-group.button.test.basics.js +0 -97
  28. package/dist/button-group.button.test.events.d.ts +0 -1
  29. package/dist/button-group.button.test.events.js +0 -15
  30. package/dist/button-group.button.test.focus.d.ts +0 -1
  31. package/dist/button-group.button.test.focus.js +0 -13
  32. package/dist/button-group.button.test.interactions.d.ts +0 -1
  33. package/dist/button-group.button.test.interactions.js +0 -42
  34. package/dist/button-group.stories.d.ts +0 -7
  35. package/dist/button-group.test.basics.d.ts +0 -1
  36. package/dist/button-group.test.basics.js +0 -148
  37. package/dist/button-group.test.events.d.ts +0 -1
  38. package/dist/button-group.test.events.js +0 -241
  39. package/dist/button-group.test.focus.d.ts +0 -1
  40. package/dist/button-group.test.focus.js +0 -39
  41. package/dist/button-group.test.interactions.d.ts +0 -1
  42. package/dist/button-group.test.interactions.js +0 -91
  43. package/dist/button.stories.d.ts +0 -7
  44. package/dist/button.test.basics.d.ts +0 -1
  45. package/dist/button.test.basics.js +0 -69
  46. package/dist/button.test.events.d.ts +0 -1
  47. package/dist/button.test.events.js +0 -102
  48. package/dist/checkbox-group.stories.d.ts +0 -6
  49. package/dist/checkbox-group.test.basics.d.ts +0 -1
  50. package/dist/checkbox-group.test.basics.js +0 -116
  51. package/dist/checkbox-group.test.events.d.ts +0 -1
  52. package/dist/checkbox-group.test.events.js +0 -111
  53. package/dist/checkbox-group.test.focus.d.ts +0 -1
  54. package/dist/checkbox-group.test.focus.js +0 -70
  55. package/dist/checkbox-group.test.form.d.ts +0 -1
  56. package/dist/checkbox-group.test.form.js +0 -131
  57. package/dist/checkbox-group.test.interactions.d.ts +0 -1
  58. package/dist/checkbox-group.test.interactions.js +0 -82
  59. package/dist/checkbox-group.test.validity.d.ts +0 -1
  60. package/dist/checkbox-group.test.validity.js +0 -145
  61. package/dist/checkbox.stories.d.ts +0 -5
  62. package/dist/checkbox.test.basics.d.ts +0 -1
  63. package/dist/checkbox.test.basics.js +0 -90
  64. package/dist/checkbox.test.events.d.ts +0 -1
  65. package/dist/checkbox.test.events.js +0 -105
  66. package/dist/checkbox.test.focus.d.ts +0 -1
  67. package/dist/checkbox.test.focus.js +0 -51
  68. package/dist/checkbox.test.form.d.ts +0 -1
  69. package/dist/checkbox.test.form.js +0 -133
  70. package/dist/checkbox.test.interactions.d.ts +0 -1
  71. package/dist/checkbox.test.interactions.js +0 -131
  72. package/dist/checkbox.test.validity.d.ts +0 -1
  73. package/dist/checkbox.test.validity.js +0 -128
  74. package/dist/drawer.stories.d.ts +0 -6
  75. package/dist/drawer.test.accessibility.d.ts +0 -1
  76. package/dist/drawer.test.accessibility.js +0 -22
  77. package/dist/drawer.test.basics.d.ts +0 -1
  78. package/dist/drawer.test.basics.js +0 -44
  79. package/dist/drawer.test.closing.d.ts +0 -1
  80. package/dist/drawer.test.closing.js +0 -40
  81. package/dist/drawer.test.events.d.ts +0 -1
  82. package/dist/drawer.test.events.js +0 -42
  83. package/dist/drawer.test.methods.d.ts +0 -1
  84. package/dist/drawer.test.methods.js +0 -35
  85. package/dist/dropdown.option.test.basics.d.ts +0 -1
  86. package/dist/dropdown.option.test.basics.js +0 -34
  87. package/dist/dropdown.option.test.basics.multiple.d.ts +0 -1
  88. package/dist/dropdown.option.test.basics.multiple.js +0 -36
  89. package/dist/dropdown.option.test.basics.single.d.ts +0 -1
  90. package/dist/dropdown.option.test.basics.single.js +0 -29
  91. package/dist/dropdown.option.test.events.d.ts +0 -1
  92. package/dist/dropdown.option.test.events.js +0 -36
  93. package/dist/dropdown.option.test.focus.d.ts +0 -1
  94. package/dist/dropdown.option.test.focus.js +0 -11
  95. package/dist/dropdown.option.test.interactions.multiple.d.ts +0 -1
  96. package/dist/dropdown.option.test.interactions.multiple.js +0 -42
  97. package/dist/dropdown.option.test.interactions.single.d.ts +0 -1
  98. package/dist/dropdown.option.test.interactions.single.js +0 -76
  99. package/dist/dropdown.stories.d.ts +0 -8
  100. package/dist/dropdown.test.basics.d.ts +0 -1
  101. package/dist/dropdown.test.basics.filterable.d.ts +0 -1
  102. package/dist/dropdown.test.basics.filterable.js +0 -108
  103. package/dist/dropdown.test.basics.js +0 -181
  104. package/dist/dropdown.test.basics.multiple.d.ts +0 -1
  105. package/dist/dropdown.test.basics.multiple.js +0 -259
  106. package/dist/dropdown.test.basics.single.d.ts +0 -1
  107. package/dist/dropdown.test.basics.single.js +0 -122
  108. package/dist/dropdown.test.events.d.ts +0 -1
  109. package/dist/dropdown.test.events.filterable.d.ts +0 -1
  110. package/dist/dropdown.test.events.filterable.js +0 -31
  111. package/dist/dropdown.test.events.js +0 -251
  112. package/dist/dropdown.test.events.multiple.d.ts +0 -1
  113. package/dist/dropdown.test.events.multiple.js +0 -446
  114. package/dist/dropdown.test.events.single.d.ts +0 -1
  115. package/dist/dropdown.test.events.single.js +0 -343
  116. package/dist/dropdown.test.focus.d.ts +0 -1
  117. package/dist/dropdown.test.focus.filterable.d.ts +0 -1
  118. package/dist/dropdown.test.focus.filterable.js +0 -140
  119. package/dist/dropdown.test.focus.js +0 -107
  120. package/dist/dropdown.test.focus.multiple.d.ts +0 -1
  121. package/dist/dropdown.test.focus.multiple.js +0 -170
  122. package/dist/dropdown.test.focus.single.d.ts +0 -1
  123. package/dist/dropdown.test.focus.single.js +0 -42
  124. package/dist/dropdown.test.form.d.ts +0 -1
  125. package/dist/dropdown.test.form.js +0 -74
  126. package/dist/dropdown.test.form.multiple.d.ts +0 -1
  127. package/dist/dropdown.test.form.multiple.js +0 -151
  128. package/dist/dropdown.test.form.single.d.ts +0 -1
  129. package/dist/dropdown.test.form.single.js +0 -129
  130. package/dist/dropdown.test.interactions.d.ts +0 -1
  131. package/dist/dropdown.test.interactions.filterable.d.ts +0 -1
  132. package/dist/dropdown.test.interactions.filterable.js +0 -805
  133. package/dist/dropdown.test.interactions.js +0 -696
  134. package/dist/dropdown.test.interactions.multiple.d.ts +0 -1
  135. package/dist/dropdown.test.interactions.multiple.js +0 -1026
  136. package/dist/dropdown.test.interactions.single.d.ts +0 -1
  137. package/dist/dropdown.test.interactions.single.js +0 -569
  138. package/dist/dropdown.test.validity.d.ts +0 -1
  139. package/dist/dropdown.test.validity.js +0 -181
  140. package/dist/form-controls-layout.stories.d.ts +0 -10
  141. package/dist/form-controls-layout.test.basics.d.ts +0 -2
  142. package/dist/form-controls-layout.test.basics.js +0 -75
  143. package/dist/form-controls-layout.test.interactions.d.ts +0 -2
  144. package/dist/form-controls-layout.test.interactions.js +0 -26
  145. package/dist/icon-button.stories.d.ts +0 -6
  146. package/dist/icon-button.test.basics.d.ts +0 -1
  147. package/dist/icon-button.test.basics.js +0 -43
  148. package/dist/icon-button.test.focus.d.ts +0 -1
  149. package/dist/icon-button.test.focus.js +0 -13
  150. package/dist/input.stories.d.ts +0 -8
  151. package/dist/input.test.basics.d.ts +0 -1
  152. package/dist/input.test.basics.js +0 -138
  153. package/dist/input.test.events.d.ts +0 -1
  154. package/dist/input.test.events.js +0 -98
  155. package/dist/input.test.focus.d.ts +0 -1
  156. package/dist/input.test.focus.js +0 -58
  157. package/dist/input.test.form.d.ts +0 -1
  158. package/dist/input.test.form.js +0 -74
  159. package/dist/input.test.validity.d.ts +0 -1
  160. package/dist/input.test.validity.js +0 -258
  161. package/dist/label.test.basics.d.ts +0 -1
  162. package/dist/label.test.basics.js +0 -136
  163. package/dist/menu.button.test.basics.d.ts +0 -1
  164. package/dist/menu.button.test.basics.js +0 -43
  165. package/dist/menu.link.test.basics.d.ts +0 -1
  166. package/dist/menu.link.test.basics.js +0 -47
  167. package/dist/menu.options.test.basics.d.ts +0 -2
  168. package/dist/menu.options.test.basics.js +0 -44
  169. package/dist/menu.options.test.events.d.ts +0 -1
  170. package/dist/menu.options.test.events.js +0 -19
  171. package/dist/menu.stories.d.ts +0 -11
  172. package/dist/menu.test.basics.d.ts +0 -1
  173. package/dist/menu.test.basics.js +0 -178
  174. package/dist/menu.test.events.d.ts +0 -3
  175. package/dist/menu.test.events.js +0 -125
  176. package/dist/menu.test.focus.d.ts +0 -2
  177. package/dist/menu.test.focus.js +0 -102
  178. package/dist/menu.test.interactions.d.ts +0 -3
  179. package/dist/menu.test.interactions.js +0 -1069
  180. package/dist/modal.icon-button.test.basics.d.ts +0 -1
  181. package/dist/modal.icon-button.test.basics.js +0 -46
  182. package/dist/modal.stories.d.ts +0 -13
  183. package/dist/modal.tertiary-icon.test.basics.d.ts +0 -1
  184. package/dist/modal.tertiary-icon.test.basics.js +0 -60
  185. package/dist/modal.test.accessibility.d.ts +0 -1
  186. package/dist/modal.test.accessibility.js +0 -38
  187. package/dist/modal.test.basics.d.ts +0 -3
  188. package/dist/modal.test.basics.js +0 -204
  189. package/dist/modal.test.close.d.ts +0 -1
  190. package/dist/modal.test.close.js +0 -35
  191. package/dist/modal.test.events.d.ts +0 -1
  192. package/dist/modal.test.events.js +0 -99
  193. package/dist/modal.test.lock-scroll.d.ts +0 -1
  194. package/dist/modal.test.lock-scroll.js +0 -67
  195. package/dist/modal.test.methods.d.ts +0 -1
  196. package/dist/modal.test.methods.js +0 -20
  197. package/dist/modal.test.scrollbars.d.ts +0 -1
  198. package/dist/modal.test.scrollbars.js +0 -18
  199. package/dist/radio-group.stories.d.ts +0 -6
  200. package/dist/radio-group.test.basics.d.ts +0 -2
  201. package/dist/radio-group.test.basics.js +0 -324
  202. package/dist/radio-group.test.events.d.ts +0 -2
  203. package/dist/radio-group.test.events.js +0 -278
  204. package/dist/radio-group.test.focus.d.ts +0 -2
  205. package/dist/radio-group.test.focus.js +0 -95
  206. package/dist/radio-group.test.form.d.ts +0 -1
  207. package/dist/radio-group.test.form.js +0 -124
  208. package/dist/radio-group.test.validity.d.ts +0 -1
  209. package/dist/radio-group.test.validity.js +0 -311
  210. package/dist/split-button.primary-button.test.basics.d.ts +0 -1
  211. package/dist/split-button.primary-button.test.basics.js +0 -31
  212. package/dist/split-button.primary-button.test.focus.d.ts +0 -1
  213. package/dist/split-button.primary-button.test.focus.js +0 -14
  214. package/dist/split-button.primary-link.test.basics.d.ts +0 -1
  215. package/dist/split-button.primary-link.test.basics.js +0 -30
  216. package/dist/split-button.primary-link.test.focus.d.ts +0 -1
  217. package/dist/split-button.primary-link.test.focus.js +0 -15
  218. package/dist/split-button.secondary-button.test.basics.d.ts +0 -1
  219. package/dist/split-button.secondary-button.test.basics.js +0 -58
  220. package/dist/split-button.secondary-button.test.focus.d.ts +0 -1
  221. package/dist/split-button.secondary-button.test.focus.js +0 -14
  222. package/dist/split-button.secondary-button.test.interactions.d.ts +0 -2
  223. package/dist/split-button.secondary-button.test.interactions.js +0 -30
  224. package/dist/split-button.stories.d.ts +0 -13
  225. package/dist/split-button.test.basics.d.ts +0 -2
  226. package/dist/split-button.test.basics.js +0 -87
  227. package/dist/split-button.test.interactions.d.ts +0 -4
  228. package/dist/split-button.test.interactions.js +0 -51
  229. package/dist/tab.group.test.basics.d.ts +0 -3
  230. package/dist/tab.group.test.basics.js +0 -234
  231. package/dist/tab.group.test.interactions.d.ts +0 -3
  232. package/dist/tab.group.test.interactions.js +0 -434
  233. package/dist/tab.test.basics.d.ts +0 -1
  234. package/dist/tab.test.basics.js +0 -50
  235. package/dist/tabs.stories.d.ts +0 -8
  236. package/dist/tag.stories.d.ts +0 -7
  237. package/dist/tag.test.basics.d.ts +0 -1
  238. package/dist/tag.test.basics.js +0 -28
  239. package/dist/tag.test.events.d.ts +0 -1
  240. package/dist/tag.test.events.js +0 -93
  241. package/dist/tag.test.focus.d.ts +0 -1
  242. package/dist/tag.test.focus.js +0 -10
  243. package/dist/tag.test.interactions.d.ts +0 -1
  244. package/dist/tag.test.interactions.js +0 -36
  245. package/dist/textarea.stories.d.ts +0 -5
  246. package/dist/textarea.test.basics.d.ts +0 -1
  247. package/dist/textarea.test.basics.js +0 -177
  248. package/dist/textarea.test.events.d.ts +0 -1
  249. package/dist/textarea.test.events.js +0 -106
  250. package/dist/textarea.test.form.d.ts +0 -1
  251. package/dist/textarea.test.form.js +0 -71
  252. package/dist/textarea.test.validity.d.ts +0 -1
  253. package/dist/textarea.test.validity.js +0 -204
  254. package/dist/toasts.stories.d.ts +0 -7
  255. package/dist/toasts.test.basics.d.ts +0 -1
  256. package/dist/toasts.test.basics.js +0 -115
  257. package/dist/toasts.toast.test.basics.d.ts +0 -1
  258. package/dist/toasts.toast.test.basics.js +0 -139
  259. package/dist/toggle.stories.d.ts +0 -4
  260. package/dist/toggle.test.basics.d.ts +0 -1
  261. package/dist/toggle.test.basics.js +0 -69
  262. package/dist/toggle.test.events.d.ts +0 -1
  263. package/dist/toggle.test.events.js +0 -30
  264. package/dist/toggle.test.focus.d.ts +0 -1
  265. package/dist/toggle.test.focus.js +0 -9
  266. package/dist/toggle.test.interactions.d.ts +0 -1
  267. package/dist/toggle.test.interactions.js +0 -81
  268. package/dist/tooltip.stories.d.ts +0 -7
  269. package/dist/tooltip.test.basics.d.ts +0 -1
  270. package/dist/tooltip.test.basics.js +0 -100
  271. package/dist/tooltip.test.interactions.d.ts +0 -1
  272. package/dist/tooltip.test.interactions.js +0 -203
  273. package/dist/tree.item.icon-button.test.basics.d.ts +0 -1
  274. package/dist/tree.item.icon-button.test.basics.js +0 -22
  275. package/dist/tree.item.menu.test.basics.d.ts +0 -1
  276. package/dist/tree.item.menu.test.basics.js +0 -86
  277. package/dist/tree.item.test.basics.d.ts +0 -2
  278. package/dist/tree.item.test.basics.js +0 -138
  279. package/dist/tree.stories.d.ts +0 -9
  280. package/dist/tree.test.aria.d.ts +0 -1
  281. package/dist/tree.test.aria.js +0 -86
  282. package/dist/tree.test.basics.d.ts +0 -3
  283. package/dist/tree.test.basics.js +0 -130
  284. package/dist/tree.test.events.d.ts +0 -2
  285. package/dist/tree.test.events.js +0 -19
  286. package/dist/tree.test.focus.d.ts +0 -1
  287. 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';