@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,44 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import './menu.button.js';
3
- import './menu.link.js';
4
- import { ArgumentError } from 'ow';
5
- import { expect, fixture, html } from '@open-wc/testing';
6
- import { repeat } from 'lit/directives/repeat.js';
7
- import GlideCoreMenu from './menu.js';
8
- import GlideCoreMenuOptions from './menu.options.js';
9
- import expectArgumentError from './library/expect-argument-error.js';
10
- import sinon from 'sinon';
11
- GlideCoreMenu.shadowRootOptions.mode = 'open';
12
- it('throws if it does not have a default slot', async () => {
13
- const spy = sinon.spy();
14
- try {
15
- await fixture(html `<glide-core-menu-options></glide-core-menu-options>`);
16
- }
17
- catch (error) {
18
- if (error instanceof ArgumentError) {
19
- spy();
20
- }
21
- }
22
- expect(spy.callCount).to.equal(1);
23
- });
24
- it('throws if the default slot is the incorrect type', async () => {
25
- await expectArgumentError(() => {
26
- return fixture(html `<glide-core-menu-options>
27
- <option>Option</option>
28
- </glide-core-menu-options>`);
29
- });
30
- });
31
- it('does not throw if the default slot only contains whitespace', async () => {
32
- const spy = sinon.spy();
33
- try {
34
- await fixture(html `<glide-core-menu-options>
35
- ${repeat([], () => html `<glide-core-menu-link label="Link"></glide-core-menu-link>`)}
36
- </glide-core-menu-options>`);
37
- }
38
- catch (error) {
39
- if (error instanceof ArgumentError) {
40
- spy();
41
- }
42
- }
43
- expect(spy.callCount).to.equal(0);
44
- });
@@ -1 +0,0 @@
1
- import './menu.button.js';
@@ -1,19 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import './menu.button.js';
3
- import { expect, fixture, html, oneEvent } from '@open-wc/testing';
4
- import GlideCoreMenu from './menu.js';
5
- import GlideCoreMenuOptions from './menu.options.js';
6
- GlideCoreMenu.shadowRootOptions.mode = 'open';
7
- it('dispatches a "private-slot-change" event', async () => {
8
- const component = await fixture(html `<glide-core-menu-options>
9
- <glide-core-menu-button label="One"></glide-core-menu-button>
10
- </glide-core-menu-options>`);
11
- setTimeout(() => {
12
- const option = document.createElement('glide-core-menu-button');
13
- option.label = 'Label';
14
- component.append(option);
15
- });
16
- const event = await oneEvent(component, 'private-slot-change');
17
- expect(event instanceof Event).to.be.true;
18
- expect(event.bubbles).to.be.true;
19
- });
@@ -1,11 +0,0 @@
1
- import './button.js';
2
- import './icons/storybook.js';
3
- import './menu.button.js';
4
- import './menu.js';
5
- import './menu.link.js';
6
- import './menu.options.js';
7
- import type { Meta, StoryObj } from '@storybook/web-components';
8
- declare const meta: Meta;
9
- export default meta;
10
- export declare const Menu: StoryObj;
11
- export declare const WithIcons: StoryObj;
@@ -1 +0,0 @@
1
- import './menu.options.js';
@@ -1,178 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import './menu.options.js';
3
- import { ArgumentError } from 'ow';
4
- import { aTimeout, expect, fixture, html } from '@open-wc/testing';
5
- import GlideCoreMenu from './menu.js';
6
- import GlideCoreMenuButton from './menu.button.js';
7
- import GlideCoreMenuLink from './menu.link.js';
8
- import expectArgumentError from './library/expect-argument-error.js';
9
- import sinon from 'sinon';
10
- GlideCoreMenu.shadowRootOptions.mode = 'open';
11
- GlideCoreMenuButton.shadowRootOptions.mode = 'open';
12
- GlideCoreMenuLink.shadowRootOptions.mode = 'open';
13
- it('registers', async () => {
14
- expect(window.customElements.get('glide-core-menu')).to.equal(GlideCoreMenu);
15
- });
16
- it('has defaults', async () => {
17
- // Required attributes are supplied here and thus left unasserted below. The
18
- // idea is that this test shouldn't fail to typecheck if these templates are
19
- // eventually typechecked, which means supplying all required attributes and slots.
20
- const component = await fixture(html `<glide-core-menu>
21
- <button slot="target">Target</button>
22
-
23
- <glide-core-menu-options>
24
- <glide-core-menu-link label="Link"></glide-core-menu-link>
25
- </glide-core-menu-options>
26
- </glide-core-menu>`);
27
- const options = component.querySelector('glide-core-menu-options');
28
- expect(component.getAttribute('size')).to.equal('large');
29
- expect(component.size).to.equal('large');
30
- expect(options?.privateSize).to.equal('large');
31
- });
32
- it('is accessible', async () => {
33
- const component = await fixture(html `<glide-core-menu>
34
- <button slot="target">Target</button>
35
-
36
- <glide-core-menu-options>
37
- <glide-core-menu-link label="Link"></glide-core-menu-link>
38
- </glide-core-menu-options>
39
- </glide-core-menu>`);
40
- const target = component.querySelector('button');
41
- const options = component.querySelector('glide-core-menu-options');
42
- expect(target?.getAttribute('aria-controls')).to.equal(options?.id);
43
- expect(target?.getAttribute('aria-haspopup')).to.equal('true');
44
- expect(options?.ariaLabelledby).to.equal(target?.id);
45
- await expect(component).to.be.accessible();
46
- });
47
- it('can be opened', async () => {
48
- const component = await fixture(html `<glide-core-menu open>
49
- <button slot="target">Target</button>
50
-
51
- <glide-core-menu-options>
52
- <glide-core-menu-link label="Link"></glide-core-menu-link>
53
- </glide-core-menu-options>
54
- </glide-core-menu>`);
55
- // Wait for Floating UI.
56
- await aTimeout(0);
57
- const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
58
- const options = component.querySelector('glide-core-menu-options');
59
- const target = component.querySelector('button');
60
- const link = component.querySelector('glide-core-menu-link');
61
- expect(component.open).to.be.true;
62
- expect(defaultSlot?.checkVisibility()).to.be.true;
63
- expect(target?.ariaExpanded).to.equal('true');
64
- expect(options?.getAttribute('aria-activedescendant')).to.equal(link?.id);
65
- });
66
- it('activates the first menu link by default', async () => {
67
- const component = await fixture(html `
68
- <glide-core-menu open>
69
- <button slot="target">Target</button>
70
-
71
- <glide-core-menu-options>
72
- <glide-core-menu-link label="One"></glide-core-menu-link>
73
- <glide-core-menu-link label="Two"></glide-core-menu-link>
74
- </glide-core-menu-options>
75
- </glide-core-menu>
76
- `);
77
- // Wait for Floating UI.
78
- await aTimeout(0);
79
- const links = component.querySelectorAll('glide-core-menu-link');
80
- const options = component.querySelector('glide-core-menu-options');
81
- expect(links[0].privateActive).to.be.true;
82
- expect(links[1].privateActive).to.be.false;
83
- expect(options?.getAttribute('aria-activedescendant')).to.equal(links[0].id);
84
- });
85
- it('activates the first menu button by default', async () => {
86
- const component = await fixture(html `
87
- <glide-core-menu open>
88
- <button slot="target">Target</button>
89
-
90
- <glide-core-menu-options>
91
- <glide-core-menu-button label="One"></glide-core-menu-button>
92
- <glide-core-menu-button label="Two"></glide-core-menu-button>
93
- </glide-core-menu-options>
94
- </glide-core-menu>
95
- `);
96
- // Wait for Floating UI.
97
- await aTimeout(0);
98
- const buttons = component.querySelectorAll('glide-core-menu-button');
99
- const options = component.querySelector('glide-core-menu-options');
100
- expect(buttons[0].privateActive).to.be.true;
101
- expect(buttons[1].privateActive).to.be.false;
102
- expect(options?.getAttribute('aria-activedescendant')).to.equal(buttons[0].id);
103
- });
104
- it('is not opened when initially `open` and its target is `disabled`', async () => {
105
- const component = await fixture(html `<glide-core-menu open>
106
- <button slot="target" disabled>Target</button>
107
-
108
- <glide-core-menu-options>
109
- <glide-core-menu-link label="Link"></glide-core-menu-link>
110
- </glide-core-menu-options>
111
- </glide-core-menu>`);
112
- // Wait for Floating UI.
113
- await aTimeout(0);
114
- const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
115
- const target = component.querySelector('button');
116
- const options = component.querySelector('glide-core-menu-options');
117
- expect(defaultSlot?.checkVisibility()).to.be.false;
118
- expect(target?.ariaExpanded).to.equal('false');
119
- expect(options?.getAttribute('aria-activedescendant')).to.equal('');
120
- });
121
- it('adds `tabIndex` to its target when it is a `<span>`', async () => {
122
- const component = await fixture(html `<glide-core-menu>
123
- <span slot="target">Target</span>
124
-
125
- <glide-core-menu-options>
126
- <glide-core-menu-link label="Link"></glide-core-menu-link>
127
- </glide-core-menu-options>
128
- </glide-core-menu>`);
129
- const target = component.querySelector('span');
130
- expect(target?.tabIndex).to.equal(0);
131
- });
132
- it('throws if it does not have a default slot', async () => {
133
- await expectArgumentError(() => {
134
- return fixture(html `<glide-core-menu
135
- ><button slot="target">Target</button></glide-core-menu
136
- >`);
137
- });
138
- });
139
- it('throws if the default slot is the incorrect type', async () => {
140
- await expectArgumentError(() => {
141
- return fixture(html `<glide-core-menu>
142
- <option>Option</option>
143
- <button slot="target">Target</button>
144
- </glide-core-menu>`);
145
- });
146
- });
147
- it('throws if it does not have a "target" slot', async () => {
148
- const spy = sinon.spy();
149
- try {
150
- await fixture(html `<glide-core-menu>
151
- <glide-core-menu-options>
152
- <glide-core-menu-link label="Link"></glide-core-menu-link>
153
- </glide-core-menu-options>
154
- </glide-core-menu>`);
155
- }
156
- catch (error) {
157
- if (error instanceof ArgumentError) {
158
- spy();
159
- }
160
- }
161
- expect(spy.callCount).to.equal(1);
162
- });
163
- it('sets accessibility attributes', async () => {
164
- const component = await fixture(html `<glide-core-menu>
165
- <button slot="target">Target</button>
166
-
167
- <glide-core-menu-options>
168
- <glide-core-menu-link label="Link"></glide-core-menu-link>
169
- </glide-core-menu-options>
170
- </glide-core-menu>`);
171
- const target = component.querySelector('button');
172
- const options = component.querySelector('glide-core-menu-options');
173
- expect(target?.getAttribute('aria-expanded')).to.equal('false');
174
- expect(target?.getAttribute('aria-haspopup')).to.equal('true');
175
- expect(target?.ariaExpanded).to.equal('false');
176
- expect(target?.ariaHasPopup).to.equal('true');
177
- expect(options?.ariaLabelledby).to.equal(target?.id);
178
- });
@@ -1,3 +0,0 @@
1
- import './menu.js';
2
- import './menu.link.js';
3
- import './menu.options.js';
@@ -1,125 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import './menu.js';
3
- import './menu.link.js';
4
- import './menu.options.js';
5
- import { assert, expect, fixture, html, oneEvent } from '@open-wc/testing';
6
- import { sendKeys } from '@web/test-runner-commands';
7
- import sinon from 'sinon';
8
- it('dispatches one link "click" event when a link is selected via click', async () => {
9
- const component = await fixture(html `<glide-core-menu open>
10
- <button slot="target">Target</button>
11
-
12
- <glide-core-menu-options>
13
- <glide-core-menu-link label="Link"></glide-core-menu-link>
14
- </glide-core-menu-options>
15
- </glide-core-menu>`);
16
- const spy = sinon.spy();
17
- const link = component.querySelector('glide-core-menu-link');
18
- assert(link);
19
- link.addEventListener('click', spy);
20
- setTimeout(() => link.click());
21
- const event = await oneEvent(component, 'click');
22
- expect(event instanceof PointerEvent).to.be.true;
23
- expect(event.bubbles).to.be.true;
24
- expect(event.target).to.equal(link);
25
- expect(spy.callCount).to.equal(1);
26
- });
27
- it('dispatches one button "click" event when a button is selected via click', async () => {
28
- const component = await fixture(html `<glide-core-menu open>
29
- <button slot="target">Target</button>
30
-
31
- <glide-core-menu-options>
32
- <glide-core-menu-button label="Button"></glide-core-menu-button>
33
- </glide-core-menu-options>
34
- </glide-core-menu>`);
35
- const spy = sinon.spy();
36
- const button = component.querySelector('glide-core-menu-button');
37
- assert(button);
38
- button.addEventListener('click', spy);
39
- setTimeout(() => button.click());
40
- const event = await oneEvent(button, 'click');
41
- expect(event instanceof PointerEvent).to.be.true;
42
- expect(event.bubbles).to.be.true;
43
- expect(event.target).to.equal(button);
44
- expect(spy.callCount).to.equal(1);
45
- });
46
- it('dispatches one link "click" event when a link is selected via Space', async () => {
47
- const component = await fixture(html `<glide-core-menu open>
48
- <button slot="target">Target</button>
49
-
50
- <glide-core-menu-options>
51
- <glide-core-menu-link label="Link"></glide-core-menu-link>
52
- </glide-core-menu-options>
53
- </glide-core-menu>`);
54
- const spy = sinon.spy();
55
- const link = component.querySelector('glide-core-menu-link');
56
- assert(link);
57
- link.addEventListener('click', spy);
58
- component.querySelector('button')?.focus();
59
- sendKeys({ press: ' ' });
60
- const event = await oneEvent(link, 'click');
61
- expect(event instanceof PointerEvent).to.be.true;
62
- expect(event.bubbles).to.be.true;
63
- expect(event.target).to.equal(link);
64
- expect(spy.callCount).to.equal(1);
65
- });
66
- it('dispatches one button "click" event when a button is selected via Space', async () => {
67
- const component = await fixture(html `<glide-core-menu open>
68
- <button slot="target">Target</button>
69
-
70
- <glide-core-menu-options>
71
- <glide-core-menu-button label="Button"></glide-core-menu-button>
72
- </glide-core-menu-options>
73
- </glide-core-menu>`);
74
- const spy = sinon.spy();
75
- const button = component.querySelector('glide-core-menu-button');
76
- assert(button);
77
- button.addEventListener('click', spy);
78
- component.querySelector('button')?.focus();
79
- sendKeys({ press: ' ' });
80
- const event = await oneEvent(button, 'click');
81
- expect(event instanceof PointerEvent).to.be.true;
82
- expect(event.bubbles).to.be.true;
83
- expect(event.target).to.equal(button);
84
- expect(spy.callCount).to.equal(1);
85
- });
86
- it('dispatches one link "click" event when a link is selected via Enter', async () => {
87
- const component = await fixture(html `<glide-core-menu open>
88
- <button slot="target">Target</button>
89
-
90
- <glide-core-menu-options>
91
- <glide-core-menu-link label="Link"></glide-core-menu-link>
92
- </glide-core-menu-options>
93
- </glide-core-menu>`);
94
- const spy = sinon.spy();
95
- const link = component.querySelector('glide-core-menu-link');
96
- assert(link);
97
- link.addEventListener('click', spy);
98
- component.querySelector('button')?.focus();
99
- sendKeys({ press: 'Enter' });
100
- const event = await oneEvent(link, 'click');
101
- expect(event instanceof PointerEvent).to.be.true;
102
- expect(event.bubbles).to.be.true;
103
- expect(event.target).to.equal(link);
104
- expect(spy.callCount).to.equal(1);
105
- });
106
- it('dispatches one button "click" event when a button is selected via Enter', async () => {
107
- const component = await fixture(html `<glide-core-menu open>
108
- <button slot="target">Target</button>
109
-
110
- <glide-core-menu-options>
111
- <glide-core-menu-button label="Button"></glide-core-menu-button>
112
- </glide-core-menu-options>
113
- </glide-core-menu>`);
114
- const spy = sinon.spy();
115
- const button = component.querySelector('glide-core-menu-button');
116
- assert(button);
117
- button.addEventListener('click', spy);
118
- component.querySelector('button')?.focus();
119
- sendKeys({ press: 'Enter' });
120
- const event = await oneEvent(button, 'click');
121
- expect(event instanceof PointerEvent).to.be.true;
122
- expect(event.bubbles).to.be.true;
123
- expect(event.target).to.equal(button);
124
- expect(spy.callCount).to.equal(1);
125
- });
@@ -1,2 +0,0 @@
1
- import './menu.link.js';
2
- import './menu.options.js';
@@ -1,102 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import './menu.link.js';
3
- import './menu.options.js';
4
- import { aTimeout, assert, elementUpdated, expect, fixture, html, } from '@open-wc/testing';
5
- import { sendKeys } from '@web/test-runner-commands';
6
- import GlideCoreMenu from './menu.js';
7
- GlideCoreMenu.shadowRootOptions.mode = 'open';
8
- it('closes when it loses focus', async () => {
9
- const component = await fixture(html `<glide-core-menu open>
10
- <button slot="target">Target</button>
11
-
12
- <glide-core-menu-options>
13
- <glide-core-menu-link label="Link"></glide-core-menu-link>
14
- </glide-core-menu-options>
15
- </glide-core-menu>`);
16
- component.querySelector('button')?.focus();
17
- await sendKeys({ press: 'Tab' });
18
- const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
19
- const options = component.querySelector('glide-core-menu-options');
20
- expect(component.open).to.be.false;
21
- expect(defaultSlot?.checkVisibility()).be.false;
22
- expect(options?.getAttribute('aria-activedescendant')).to.equal('');
23
- });
24
- it('remains open when the options component is focused', async () => {
25
- const component = await fixture(html `<glide-core-menu open>
26
- <button slot="target">Target</button>
27
-
28
- <glide-core-menu-options>
29
- <glide-core-menu-link label="Link"></glide-core-menu-link>
30
- </glide-core-menu-options>
31
- </glide-core-menu>`);
32
- // Wait for Floating UI.
33
- await aTimeout(0);
34
- component.querySelector('button')?.focus();
35
- const options = component.querySelector('glide-core-menu-options');
36
- const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
37
- options?.focus();
38
- expect(component.open).to.be.true;
39
- expect(defaultSlot?.checkVisibility()).to.be.true;
40
- });
41
- it('remains open when an option is focused', async () => {
42
- const component = await fixture(html `<glide-core-menu open>
43
- <button slot="target">Target</button>
44
-
45
- <glide-core-menu-options>
46
- <glide-core-menu-link label="Link"></glide-core-menu-link>
47
- </glide-core-menu-options>
48
- </glide-core-menu>`);
49
- // Wait for Floating UI.
50
- await aTimeout(0);
51
- component.querySelector('button')?.focus();
52
- const defaultSlot = component?.shadowRoot?.querySelector('slot:not([name])');
53
- const option = component.querySelector('glide-core-menu-link');
54
- assert(option);
55
- option?.focus();
56
- expect(component.open).to.be.true;
57
- expect(defaultSlot?.checkVisibility()).to.be.true;
58
- });
59
- it('sets an inactive option as active when focused', async () => {
60
- const component = await fixture(html `<glide-core-menu open>
61
- <button slot="target">Target</button>
62
-
63
- <glide-core-menu-options>
64
- <glide-core-menu-button label="Button"></glide-core-menu-button>
65
- <glide-core-menu-link label="Link"></glide-core-menu-link>
66
- </glide-core-menu-options>
67
- </glide-core-menu>`);
68
- // Wait for Floating UI.
69
- await aTimeout(0);
70
- component.querySelector('button')?.focus();
71
- const button = component.querySelector('glide-core-menu-button');
72
- const link = component.querySelector('glide-core-menu-link');
73
- const options = component.querySelector('glide-core-menu-options');
74
- link?.focus();
75
- await elementUpdated(component);
76
- expect(link?.privateActive).to.be.true;
77
- expect(button?.privateActive).to.be.false;
78
- expect(options?.getAttribute('aria-activedescendant')).to.equal(link?.id);
79
- });
80
- // Kind of an odd test. There's a comment in `#onDefaultSlotFocusin` that
81
- // explains it.
82
- it('sets an already active option as active when focused', async () => {
83
- const component = await fixture(html `<glide-core-menu open>
84
- <button slot="target">Target</button>
85
-
86
- <glide-core-menu-options>
87
- <glide-core-menu-button label="Button"></glide-core-menu-button>
88
- <glide-core-menu-link label="Link"></glide-core-menu-link>
89
- </glide-core-menu-options>
90
- </glide-core-menu>`);
91
- // Wait for Floating UI.
92
- await aTimeout(0);
93
- component.querySelector('button')?.focus();
94
- const button = component.querySelector('glide-core-menu-button');
95
- const link = component.querySelector('glide-core-menu-link');
96
- const options = component.querySelector('glide-core-menu-options');
97
- button?.focus();
98
- await elementUpdated(component);
99
- expect(button?.privateActive).to.be.true;
100
- expect(link?.privateActive).to.be.false;
101
- expect(options?.getAttribute('aria-activedescendant')).to.equal(button?.id);
102
- });
@@ -1,3 +0,0 @@
1
- import './menu.button.js';
2
- import './menu.link.js';
3
- import './menu.options.js';