@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,696 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import { aTimeout, assert, elementUpdated, expect, fixture, html, } from '@open-wc/testing';
3
- import { sendKeys, sendMouse } from '@web/test-runner-commands';
4
- import GlideCoreDropdown from './dropdown.js';
5
- import GlideCoreDropdownOption from './dropdown.option.js';
6
- import sinon from 'sinon';
7
- GlideCoreDropdown.shadowRootOptions.mode = 'open';
8
- GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
9
- it('opens when opened programmatically', async () => {
10
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
11
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
12
- </glide-core-dropdown>`);
13
- component.open = true;
14
- await aTimeout(0);
15
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
16
- expect(options?.checkVisibility()).to.be.true;
17
- });
18
- it('opens on ArrowUp', async () => {
19
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
20
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
21
- </glide-core-dropdown>`);
22
- component.focus();
23
- await sendKeys({ press: 'ArrowUp' });
24
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
25
- expect(component.open).to.be.true;
26
- expect(options?.checkVisibility()).to.be.true;
27
- });
28
- it('does not open on ArrowUp when `disabled`', async () => {
29
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
30
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
31
- </glide-core-dropdown>`);
32
- component.focus();
33
- await sendKeys({ press: 'ArrowUp' });
34
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
35
- expect(component.open).to.be.false;
36
- expect(options?.checkVisibility()).to.be.false;
37
- });
38
- it('does not open on ArrowUp when `readonly`', async () => {
39
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" readonly>
40
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
41
- </glide-core-dropdown>`);
42
- component.focus();
43
- await sendKeys({ press: 'ArrowUp' });
44
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
45
- expect(component.open).to.be.false;
46
- expect(options?.checkVisibility()).to.be.false;
47
- });
48
- it('opens on ArrowDown', async () => {
49
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
50
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
51
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
52
- </glide-core-dropdown>`);
53
- component.focus();
54
- await sendKeys({ press: 'ArrowDown' });
55
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
56
- expect(component.open).to.be.true;
57
- expect(options?.checkVisibility()).to.be.true;
58
- });
59
- it('does not open on ArrowDown when `disabled`', async () => {
60
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
61
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
62
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
63
- </glide-core-dropdown>`);
64
- component.focus();
65
- await sendKeys({ press: 'ArrowDown' });
66
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
67
- expect(component.open).to.be.false;
68
- expect(options?.checkVisibility()).to.be.false;
69
- });
70
- it('does not open on ArrowDown when `readonly`', async () => {
71
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" readonly>
72
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
73
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
74
- </glide-core-dropdown>`);
75
- component.focus();
76
- await sendKeys({ press: 'ArrowDown' });
77
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
78
- expect(component.open).to.be.false;
79
- expect(options?.checkVisibility()).to.be.false;
80
- });
81
- it('does not scroll the page on ArrowDown when the Add button has focus', async () => {
82
- document.body.style.height = '200vh';
83
- document.body.style.scrollBehavior = 'auto';
84
- const component = await fixture(html `<glide-core-dropdown
85
- add-button-label="Add"
86
- label="Label"
87
- placeholder="Placeholder"
88
- open
89
- >
90
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
91
- </glide-core-dropdown>`);
92
- // Wait for it to open.
93
- await aTimeout(0);
94
- component.focus();
95
- await sendKeys({ press: 'ArrowDown' }); // Add button
96
- const spy = sinon.spy();
97
- document.addEventListener('scroll', spy);
98
- await sendKeys({ press: 'ArrowDown' }); // Still Add button
99
- // The browser apparently inserts a slight delay after arrowing before scrolling,
100
- // even when smooth scrolling is disabled. `100` is a round number that comfortably
101
- // gets us past that delay.
102
- await aTimeout(100);
103
- expect(spy.callCount).to.equal(0);
104
- });
105
- it('opens on Space', async () => {
106
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
107
- <glide-core-dropdown-option
108
- label="Label"
109
- value="value"
110
- ></glide-core-dropdown-option>
111
- </glide-core-dropdown>`);
112
- component.focus();
113
- await sendKeys({ press: ' ' });
114
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
115
- expect(component.open).to.be.true;
116
- expect(options?.checkVisibility()).to.be.true;
117
- });
118
- it('does not open on Space when `disabled`', async () => {
119
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
120
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
121
- </glide-core-dropdown>`);
122
- component.focus();
123
- await sendKeys({ press: ' ' });
124
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
125
- expect(component.open).to.be.false;
126
- expect(options?.checkVisibility()).to.be.false;
127
- });
128
- it('does not open on Space when `readonly`', async () => {
129
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" readonly>
130
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
131
- </glide-core-dropdown>`);
132
- component.focus();
133
- await sendKeys({ press: ' ' });
134
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
135
- expect(component.open).to.be.false;
136
- expect(options?.checkVisibility()).to.be.false;
137
- });
138
- // See the `document` click handler comment in `dropdown.ts` for an explanation.
139
- it('opens when opened programmatically via the click handler of another element', async () => {
140
- const div = document.createElement('div');
141
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
142
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
143
- </glide-core-dropdown>`, { parentNode: div });
144
- const button = document.createElement('button');
145
- button.addEventListener('click', () => (component.open = true));
146
- div.append(button);
147
- button.click();
148
- // Wait for it to open.
149
- await aTimeout(0);
150
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
151
- expect(component.open).to.be.true;
152
- expect(options?.checkVisibility()).to.be.true;
153
- });
154
- it('closes when something outside of it is clicked', async () => {
155
- const component = await fixture(html `<glide-core-dropdown
156
- label="Label"
157
- placeholder="Placeholder"
158
- open
159
- multiple
160
- >
161
- <glide-core-dropdown-option
162
- label="One"
163
- selected
164
- ></glide-core-dropdown-option>
165
-
166
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
167
- </glide-core-dropdown>`);
168
- // Wait for it to open.
169
- await aTimeout(0);
170
- document.body.click();
171
- expect(component.open).to.be.false;
172
- });
173
- it('closes on Escape', async () => {
174
- const component = await fixture(html `<glide-core-dropdown
175
- label="Label"
176
- placeholder="Placeholder"
177
- open
178
- multiple
179
- >
180
- <glide-core-dropdown-option
181
- label="One"
182
- selected
183
- ></glide-core-dropdown-option>
184
-
185
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
186
- </glide-core-dropdown>`);
187
- // Wait for it to open.
188
- await aTimeout(0);
189
- component.focus();
190
- await sendKeys({ press: 'Escape' });
191
- expect(component.open).to.be.false;
192
- });
193
- it('closes on edit via click', async () => {
194
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
195
- <glide-core-dropdown-option
196
- label="One"
197
- editable
198
- selected
199
- ></glide-core-dropdown-option>
200
-
201
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
202
- </glide-core-dropdown>`);
203
- component
204
- .querySelector('glide-core-dropdown-option')
205
- ?.shadowRoot?.querySelector('[data-test="edit-button"]')
206
- ?.click();
207
- expect(component.open).to.be.false;
208
- });
209
- it('closes when the Add button is clicked', async () => {
210
- const component = await fixture(html `<glide-core-dropdown
211
- add-button-label="Add"
212
- label="Label"
213
- placeholder="Placeholder"
214
- open
215
- >
216
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
217
- </glide-core-dropdown>`);
218
- // Wait for it to open.
219
- await aTimeout(0);
220
- component.shadowRoot
221
- ?.querySelector('[data-test="add-button"]')
222
- ?.click();
223
- expect(component.open).to.be.false;
224
- });
225
- it('opens when open and enabled programmatically', async () => {
226
- const component = await fixture(html `<glide-core-dropdown
227
- label="Label"
228
- placeholder="Placeholder"
229
- open
230
- disabled
231
- >
232
- <glide-core-dropdown-option
233
- label="One"
234
- selected
235
- ></glide-core-dropdown-option>
236
-
237
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
238
- </glide-core-dropdown>`);
239
- component.disabled = false;
240
- // Wait for it to open.
241
- await aTimeout(0);
242
- const options = component?.shadowRoot?.querySelector('[data-test="options"]');
243
- expect(options?.checkVisibility()).to.be.true;
244
- });
245
- it('closes when open and disabled programmatically', async () => {
246
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
247
- <glide-core-dropdown-option
248
- label="One"
249
- selected
250
- ></glide-core-dropdown-option>
251
-
252
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
253
- </glide-core-dropdown>`);
254
- // Wait for it to open.
255
- await aTimeout(0);
256
- component.disabled = true;
257
- const options = component?.shadowRoot?.querySelector('[data-test="options"]');
258
- expect(options?.checkVisibility()).to.be.false;
259
- });
260
- it('activates an option on "mouseover"', async () => {
261
- const component = await fixture(html `<glide-core-dropdown open>
262
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
263
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
264
- </glide-core-dropdown>`);
265
- const options = component.querySelectorAll('glide-core-dropdown-option');
266
- options[1]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
267
- await elementUpdated(component);
268
- expect(options[0]?.privateActive).to.be.false;
269
- expect(options[1]?.privateActive).to.be.true;
270
- });
271
- it('activates the next option on ArrowDown', async () => {
272
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
273
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
274
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
275
- </glide-core-dropdown>`);
276
- // Wait for it to open.
277
- await aTimeout(0);
278
- component.focus();
279
- await sendKeys({ press: 'ArrowDown' }); // Two
280
- const options = component.querySelectorAll('glide-core-dropdown-option');
281
- expect(options[0]?.privateActive).to.be.false;
282
- expect(options[1]?.privateActive).to.be.true;
283
- });
284
- it('activates the Edit button on ArrowDown', async () => {
285
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
286
- <glide-core-dropdown-option
287
- label="Label"
288
- editable
289
- ></glide-core-dropdown-option>
290
-
291
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
292
- </glide-core-dropdown>`);
293
- // Wait for it to open.
294
- await aTimeout(0);
295
- component.focus();
296
- await sendKeys({ press: 'ArrowDown' }); // One's edit button
297
- const options = component.querySelectorAll('glide-core-dropdown-option');
298
- expect(options[0]?.privateActive).to.be.true;
299
- expect(options[0]?.privateIsEditActive).true;
300
- expect(options[0]?.privateIsOpenTooltip).false;
301
- expect(options[1]?.privateActive).to.be.false;
302
- expect(options[1]?.privateIsEditActive).to.be.false;
303
- });
304
- it('activates the next option on ArrowDown when the Edit button is active', async () => {
305
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
306
- <glide-core-dropdown-option
307
- label="Label"
308
- editable
309
- ></glide-core-dropdown-option>
310
-
311
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
312
- </glide-core-dropdown>`);
313
- // Wait for it to open.
314
- await aTimeout(0);
315
- component.focus();
316
- await sendKeys({ press: 'ArrowDown' }); // One's edit button
317
- await sendKeys({ press: 'ArrowDown' }); // Two
318
- const options = component.querySelectorAll('glide-core-dropdown-option');
319
- expect(options[0]?.privateActive).to.be.false;
320
- expect(options[0]?.privateIsEditActive).false;
321
- expect(options[1]?.privateActive).to.be.true;
322
- expect(options[1]?.privateIsEditActive).to.be.false;
323
- expect(options[1]?.privateIsOpenTooltip).true;
324
- });
325
- it('activates the previous option on ArrowUp', async () => {
326
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
327
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
328
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
329
- </glide-core-dropdown>`);
330
- // Wait for it to open.
331
- await aTimeout(0);
332
- component.focus();
333
- await sendKeys({ press: 'ArrowDown' }); // Two
334
- await sendKeys({ press: 'ArrowUp' }); // One
335
- const options = component.querySelectorAll('glide-core-dropdown-option');
336
- expect(options[0]?.privateActive).to.be.true;
337
- expect(options[1]?.privateActive).to.be.false;
338
- });
339
- it('activates the Edit button on on ArrowUp', async () => {
340
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
341
- <glide-core-dropdown-option
342
- label="Label"
343
- editable
344
- ></glide-core-dropdown-option>
345
-
346
- <glide-core-dropdown-option
347
- label="Two"
348
- editable
349
- ></glide-core-dropdown-option>
350
- </glide-core-dropdown>`);
351
- // Wait for it to open.
352
- await aTimeout(0);
353
- component.focus();
354
- await sendKeys({ press: 'ArrowDown' }); // One's Edit button
355
- await sendKeys({ press: 'ArrowDown' }); // Two
356
- await sendKeys({ press: 'ArrowDown' }); // Two's Edit button
357
- await sendKeys({ press: 'ArrowUp' }); // Two
358
- await sendKeys({ press: 'ArrowUp' }); // One's Edit button
359
- const options = component.querySelectorAll('glide-core-dropdown-option');
360
- expect(options[0]?.privateActive).to.be.true;
361
- expect(options[0]?.privateIsEditActive).to.be.true;
362
- expect(options[0]?.privateIsOpenTooltip).false;
363
- expect(options[1]?.privateActive).to.be.false;
364
- expect(options[1]?.privateIsEditActive).to.be.false;
365
- expect(options[1]?.privateIsOpenTooltip).to.be.false;
366
- });
367
- it('activates previously active option on ArrowUp', async () => {
368
- const component = await fixture(html `<glide-core-dropdown
369
- add-button-label="Add"
370
- label="Label"
371
- placeholder="Placeholder"
372
- open
373
- >
374
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
375
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
376
- </glide-core-dropdown>`);
377
- // Wait for it to open.
378
- await aTimeout(0);
379
- component.focus();
380
- await sendKeys({ press: 'ArrowDown' }); // Two
381
- await sendKeys({ press: 'ArrowDown' }); // Add button
382
- await sendKeys({ press: 'ArrowUp' }); // Two
383
- const options = component.querySelectorAll('glide-core-dropdown-option');
384
- expect(options[0]?.privateActive).to.be.false;
385
- expect(options[0]?.privateIsEditActive).to.be.false;
386
- expect(options[0]?.privateIsOpenTooltip).to.be.false;
387
- expect(options[1]?.privateActive).to.be.true;
388
- expect(options[1]?.privateIsOpenTooltip).to.be.true;
389
- expect(options[1]?.privateIsEditActive).to.be.false;
390
- });
391
- it('activates the Edit button on ArrowUp', async () => {
392
- const component = await fixture(html `<glide-core-dropdown
393
- add-button-label="Add"
394
- label="Label"
395
- placeholder="Placeholder"
396
- open
397
- >
398
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
399
-
400
- <glide-core-dropdown-option
401
- label="Two"
402
- editable
403
- ></glide-core-dropdown-option>
404
- </glide-core-dropdown>`);
405
- // Wait for it to open.
406
- await aTimeout(0);
407
- component.focus();
408
- await sendKeys({ press: 'ArrowDown' }); // Two
409
- await sendKeys({ press: 'ArrowDown' }); // Two's Edit button
410
- await sendKeys({ press: 'ArrowDown' }); // Add button
411
- await sendKeys({ press: 'ArrowUp' }); // Two's Edit button
412
- const options = component.querySelectorAll('glide-core-dropdown-option');
413
- expect(options[0]?.privateActive).to.be.false;
414
- expect(options[0]?.privateIsEditActive).to.be.false;
415
- expect(options[0]?.privateIsOpenTooltip).to.be.false;
416
- expect(options[1]?.privateActive).to.be.true;
417
- expect(options[1]?.privateIsEditActive).to.be.true;
418
- expect(options[1]?.privateIsOpenTooltip).to.be.false;
419
- });
420
- it('activates the first option on Home', async () => {
421
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
422
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
423
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
424
- </glide-core-dropdown>`);
425
- // Wait for it to open.
426
- await aTimeout(0);
427
- component.focus();
428
- await sendKeys({ press: 'End' });
429
- await sendKeys({ press: 'Home' });
430
- const options = component.querySelectorAll('glide-core-dropdown-option');
431
- expect(options[0]?.privateActive).to.be.true;
432
- expect(options[0]?.privateIsEditActive).to.be.false;
433
- expect(options[0]?.privateIsOpenTooltip).to.be.true;
434
- expect(options[1]?.privateActive).to.be.false;
435
- expect(options[1]?.privateIsEditActive).to.be.false;
436
- expect(options[1]?.privateIsOpenTooltip).to.be.false;
437
- });
438
- it('activates the first option on PageUp', async () => {
439
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
440
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
441
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
442
- </glide-core-dropdown>`);
443
- // Wait for it to open.
444
- await aTimeout(0);
445
- component.focus();
446
- await sendKeys({ press: 'PageDown' });
447
- await sendKeys({ press: 'PageUp' });
448
- const options = component.querySelectorAll('glide-core-dropdown-option');
449
- expect(options[0]?.privateActive).to.be.true;
450
- expect(options[0]?.privateIsEditActive).to.be.false;
451
- expect(options[0]?.privateIsOpenTooltip).to.be.true;
452
- expect(options[1]?.privateActive).to.be.false;
453
- expect(options[1]?.privateIsEditActive).to.be.false;
454
- expect(options[1]?.privateIsOpenTooltip).to.be.false;
455
- });
456
- it('activates the first option on ArrowUp + Meta', async () => {
457
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
458
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
459
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
460
- </glide-core-dropdown>`);
461
- // Wait for it to open.
462
- await aTimeout(0);
463
- component.focus();
464
- await sendKeys({ press: 'End' });
465
- await sendKeys({ down: 'Meta' });
466
- await sendKeys({ press: 'ArrowUp' });
467
- await sendKeys({ up: 'Meta' });
468
- const options = component.querySelectorAll('glide-core-dropdown-option');
469
- expect(options[0]?.privateActive).to.be.true;
470
- expect(options[0]?.privateIsEditActive).to.be.false;
471
- expect(options[0]?.privateIsOpenTooltip).to.be.true;
472
- expect(options[1]?.privateActive).to.be.false;
473
- expect(options[1]?.privateIsEditActive).to.be.false;
474
- expect(options[1]?.privateIsOpenTooltip).to.be.false;
475
- });
476
- it('activates the last option on End', async () => {
477
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
478
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
479
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
480
- </glide-core-dropdown>`);
481
- // Wait for it to open.
482
- await aTimeout(0);
483
- component.focus();
484
- await sendKeys({ press: 'End' });
485
- const options = component.querySelectorAll('glide-core-dropdown-option');
486
- expect(options[0]?.privateActive).to.be.false;
487
- expect(options[0]?.privateIsEditActive).to.be.false;
488
- expect(options[0]?.privateIsOpenTooltip).to.be.false;
489
- expect(options[1]?.privateActive).to.be.true;
490
- expect(options[1]?.privateIsEditActive).to.be.false;
491
- expect(options[1]?.privateIsOpenTooltip).to.be.true;
492
- });
493
- it('activates the last option on PageDown', async () => {
494
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
495
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
496
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
497
- </glide-core-dropdown>`);
498
- // Wait for it to open.
499
- await aTimeout(0);
500
- component.focus();
501
- await sendKeys({ press: 'PageDown' });
502
- const options = component.querySelectorAll('glide-core-dropdown-option');
503
- expect(options[0]?.privateActive).to.be.false;
504
- expect(options[0]?.privateIsEditActive).to.be.false;
505
- expect(options[0]?.privateIsOpenTooltip).to.be.false;
506
- expect(options[1]?.privateActive).to.be.true;
507
- expect(options[1]?.privateIsEditActive).to.be.false;
508
- expect(options[1]?.privateIsOpenTooltip).to.be.true;
509
- });
510
- it('activates the last option on Meta + ArrowDown', async () => {
511
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
512
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
513
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
514
- </glide-core-dropdown>`);
515
- // Wait for it to open.
516
- await aTimeout(0);
517
- component.focus();
518
- await sendKeys({ down: 'Meta' });
519
- await sendKeys({ press: 'ArrowDown' });
520
- await sendKeys({ up: 'Meta' });
521
- const options = component.querySelectorAll('glide-core-dropdown-option');
522
- expect(options[0]?.privateActive).to.be.false;
523
- expect(options[0]?.privateIsEditActive).to.be.false;
524
- expect(options[0]?.privateIsOpenTooltip).to.be.false;
525
- expect(options[1]?.privateActive).to.be.true;
526
- expect(options[1]?.privateIsEditActive).to.be.false;
527
- expect(options[1]?.privateIsOpenTooltip).to.be.true;
528
- });
529
- it('activates the previously active option when tabbing back from the Add button', async () => {
530
- const component = await fixture(html `<glide-core-dropdown
531
- add-button-label="Add"
532
- label="Label"
533
- placeholder="Placeholder"
534
- open
535
- >
536
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
537
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
538
- <glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
539
- </glide-core-dropdown>`);
540
- // Wait for it to open.
541
- await aTimeout(0);
542
- component.focus();
543
- await sendKeys({ press: 'ArrowDown' }); // Two
544
- await sendKeys({ press: 'Tab' });
545
- await sendKeys({ down: 'Shift' });
546
- await sendKeys({ press: 'Tab' });
547
- await sendKeys({ up: 'Shift' });
548
- const options = component.querySelectorAll('glide-core-dropdown-option');
549
- expect(options[0]?.privateActive).to.be.false;
550
- expect(options[0]?.privateIsEditActive).to.be.false;
551
- expect(options[0]?.privateIsOpenTooltip).to.be.false;
552
- expect(options[1]?.privateActive).to.be.true;
553
- expect(options[1]?.privateIsEditActive).to.be.false;
554
- expect(options[1]?.privateIsOpenTooltip).to.be.true;
555
- expect(options[2]?.privateActive).to.be.false;
556
- expect(options[2]?.privateIsEditActive).to.be.false;
557
- expect(options[2]?.privateIsOpenTooltip).to.be.false;
558
- });
559
- it('deactivates the active option when the Add button is tabbed to', async () => {
560
- const component = await fixture(html `<glide-core-dropdown
561
- add-button-label="Add"
562
- label="Label"
563
- placeholder="Placeholder"
564
- open
565
- >
566
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
567
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
568
- <glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
569
- </glide-core-dropdown>`);
570
- // Wait for it to open.
571
- await aTimeout(0);
572
- component.focus();
573
- await sendKeys({ press: 'Tab' });
574
- const options = component.querySelectorAll('glide-core-dropdown-option');
575
- expect(options[0]?.privateActive).to.be.false;
576
- expect(options[0]?.privateIsEditActive).to.be.false;
577
- expect(options[0]?.privateIsOpenTooltip).to.be.false;
578
- expect(options[1]?.privateActive).to.be.false;
579
- });
580
- it('does not wrap on ArrowUp', async () => {
581
- const component = await fixture(html `<glide-core-dropdown open>
582
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
583
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
584
- </glide-core-dropdown>`);
585
- // Wait for it to open.
586
- await aTimeout(0);
587
- component.focus();
588
- await sendKeys({ press: 'ArrowUp' });
589
- const options = component.querySelectorAll('glide-core-dropdown-option');
590
- expect(options[0]?.privateActive).to.be.true;
591
- expect(options[1]?.privateActive).to.be.false;
592
- });
593
- it('does not wrap on ArrowDown', async () => {
594
- const component = await fixture(html `<glide-core-dropdown open>
595
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
596
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
597
- </glide-core-dropdown>`);
598
- // Wait for it to open.
599
- await aTimeout(0);
600
- component.focus();
601
- await sendKeys({ press: 'ArrowDown' }); // Two
602
- await sendKeys({ press: 'ArrowDown' }); // Two
603
- const options = component.querySelectorAll('glide-core-dropdown-option');
604
- expect(options[0]?.privateActive).to.be.false;
605
- expect(options[1]?.privateActive).to.be.true;
606
- });
607
- it('updates `privateSize` on every option when `size` is changed programmatically', async () => {
608
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
609
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
610
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
611
- </glide-core-dropdown>`);
612
- component.size = 'small';
613
- const options = component.querySelectorAll('glide-core-dropdown-option');
614
- expect(options[0].privateSize).to.equal('small');
615
- expect(options[1].privateSize).to.equal('small');
616
- });
617
- it('opens when something other than the primary button is clicked', async () => {
618
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
619
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
620
- </glide-core-dropdown>`);
621
- const internalLabel = component.shadowRoot?.querySelector('[data-test="internal-label"]');
622
- assert(internalLabel);
623
- const { x, y } = internalLabel.getBoundingClientRect();
624
- // A simple `option.click()` won't do because we need a "mousedown" so that
625
- // `#onDropdownMousedown` gets covered.
626
- await sendMouse({
627
- type: 'click',
628
- position: [Math.ceil(x), Math.ceil(y)],
629
- });
630
- expect(component.open).to.be.true;
631
- });
632
- it('does not open on edit via click', async () => {
633
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
634
- <glide-core-dropdown-option
635
- label="Label"
636
- editable
637
- selected
638
- ></glide-core-dropdown-option>
639
- </glide-core-dropdown>`);
640
- component.shadowRoot
641
- ?.querySelector('[data-test="edit-button"]')
642
- ?.click();
643
- expect(component.open).to.be.false;
644
- });
645
- it('does not open on edit via Enter', async () => {
646
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
647
- <glide-core-dropdown-option
648
- label="Label"
649
- editable
650
- selected
651
- ></glide-core-dropdown-option>
652
- </glide-core-dropdown>`);
653
- component.shadowRoot
654
- ?.querySelector('[data-test="edit-button"]')
655
- ?.focus();
656
- await sendKeys({ press: 'Enter' });
657
- expect(component.open).to.be.false;
658
- });
659
- it('does not open on edit via Space', async () => {
660
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
661
- <glide-core-dropdown-option
662
- label="Label"
663
- editable
664
- selected
665
- ></glide-core-dropdown-option>
666
- </glide-core-dropdown>`);
667
- component.shadowRoot
668
- ?.querySelector('[data-test="edit-button"]')
669
- ?.focus();
670
- await sendKeys({ press: ' ' });
671
- expect(component.open).to.be.false;
672
- });
673
- it('hides the tooltip of the active option when opened via click', async () => {
674
- // The period is arbitrary. 500 of them ensures we exceed the maximum
675
- // width even if it's increased.
676
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
677
- <glide-core-dropdown-option
678
- label=${'.'.repeat(500)}
679
- ></glide-core-dropdown-option>
680
-
681
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
682
- </glide-core-dropdown>`);
683
- // Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
684
- // which puts us in a guard in the event handler. `Event` has no `detail` property
685
- // and would work. `CustomEvent` is used for completeness and to get us as close as
686
- // possible to a real click. See the comment in the handler for more information.
687
- component.shadowRoot
688
- ?.querySelector('[data-test="primary-button"]')
689
- ?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
690
- // Wait for it to open.
691
- await aTimeout(0);
692
- const tooltip = component
693
- .querySelector('glide-core-dropdown-option')
694
- ?.shadowRoot?.querySelector('[data-test="tooltip"]');
695
- expect(tooltip?.checkVisibility()).to.be.false;
696
- });