@crowdstrike/glide-core 0.13.1 → 0.14.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/dist/drawer.d.ts +2 -2
  2. package/dist/drawer.js +1 -1
  3. package/dist/drawer.styles.js +3 -14
  4. package/dist/dropdown.styles.js +3 -2
  5. package/dist/input.styles.js +1 -0
  6. package/dist/styles/variables.css +1 -1
  7. package/dist/textarea.styles.js +2 -0
  8. package/dist/toasts.d.ts +2 -2
  9. package/dist/toasts.toast.d.ts +1 -1
  10. package/dist/toasts.toast.js +1 -1
  11. package/dist/toasts.toast.styles.js +8 -0
  12. package/dist/tree.item.styles.js +2 -2
  13. package/package.json +8 -5
  14. package/dist/accordion.stories.d.ts +0 -6
  15. package/dist/accordion.test.basics.d.ts +0 -1
  16. package/dist/accordion.test.basics.js +0 -28
  17. package/dist/accordion.test.events.d.ts +0 -1
  18. package/dist/accordion.test.events.js +0 -28
  19. package/dist/accordion.test.focus.d.ts +0 -1
  20. package/dist/accordion.test.focus.js +0 -11
  21. package/dist/accordion.test.interactions.d.ts +0 -1
  22. package/dist/accordion.test.interactions.js +0 -75
  23. package/dist/button-group.button.test.basics.d.ts +0 -1
  24. package/dist/button-group.button.test.basics.js +0 -97
  25. package/dist/button-group.button.test.events.d.ts +0 -1
  26. package/dist/button-group.button.test.events.js +0 -15
  27. package/dist/button-group.button.test.focus.d.ts +0 -1
  28. package/dist/button-group.button.test.focus.js +0 -13
  29. package/dist/button-group.button.test.interactions.d.ts +0 -1
  30. package/dist/button-group.button.test.interactions.js +0 -42
  31. package/dist/button-group.stories.d.ts +0 -7
  32. package/dist/button-group.test.basics.d.ts +0 -1
  33. package/dist/button-group.test.basics.js +0 -148
  34. package/dist/button-group.test.events.d.ts +0 -1
  35. package/dist/button-group.test.events.js +0 -241
  36. package/dist/button-group.test.focus.d.ts +0 -1
  37. package/dist/button-group.test.focus.js +0 -39
  38. package/dist/button-group.test.interactions.d.ts +0 -1
  39. package/dist/button-group.test.interactions.js +0 -91
  40. package/dist/button.stories.d.ts +0 -7
  41. package/dist/button.test.basics.d.ts +0 -1
  42. package/dist/button.test.basics.js +0 -69
  43. package/dist/button.test.events.d.ts +0 -1
  44. package/dist/button.test.events.js +0 -102
  45. package/dist/checkbox-group.stories.d.ts +0 -6
  46. package/dist/checkbox-group.test.basics.d.ts +0 -1
  47. package/dist/checkbox-group.test.basics.js +0 -116
  48. package/dist/checkbox-group.test.events.d.ts +0 -1
  49. package/dist/checkbox-group.test.events.js +0 -111
  50. package/dist/checkbox-group.test.focus.d.ts +0 -1
  51. package/dist/checkbox-group.test.focus.js +0 -70
  52. package/dist/checkbox-group.test.form.d.ts +0 -1
  53. package/dist/checkbox-group.test.form.js +0 -131
  54. package/dist/checkbox-group.test.interactions.d.ts +0 -1
  55. package/dist/checkbox-group.test.interactions.js +0 -82
  56. package/dist/checkbox-group.test.validity.d.ts +0 -1
  57. package/dist/checkbox-group.test.validity.js +0 -145
  58. package/dist/checkbox.stories.d.ts +0 -5
  59. package/dist/checkbox.test.basics.d.ts +0 -1
  60. package/dist/checkbox.test.basics.js +0 -90
  61. package/dist/checkbox.test.events.d.ts +0 -1
  62. package/dist/checkbox.test.events.js +0 -105
  63. package/dist/checkbox.test.focus.d.ts +0 -1
  64. package/dist/checkbox.test.focus.js +0 -51
  65. package/dist/checkbox.test.form.d.ts +0 -1
  66. package/dist/checkbox.test.form.js +0 -133
  67. package/dist/checkbox.test.interactions.d.ts +0 -1
  68. package/dist/checkbox.test.interactions.js +0 -131
  69. package/dist/checkbox.test.validity.d.ts +0 -1
  70. package/dist/checkbox.test.validity.js +0 -128
  71. package/dist/drawer.stories.d.ts +0 -6
  72. package/dist/drawer.test.accessibility.d.ts +0 -1
  73. package/dist/drawer.test.accessibility.js +0 -22
  74. package/dist/drawer.test.basics.d.ts +0 -1
  75. package/dist/drawer.test.basics.js +0 -44
  76. package/dist/drawer.test.closing.d.ts +0 -1
  77. package/dist/drawer.test.closing.js +0 -40
  78. package/dist/drawer.test.events.d.ts +0 -1
  79. package/dist/drawer.test.events.js +0 -42
  80. package/dist/drawer.test.methods.d.ts +0 -1
  81. package/dist/drawer.test.methods.js +0 -35
  82. package/dist/dropdown.option.test.basics.d.ts +0 -1
  83. package/dist/dropdown.option.test.basics.js +0 -34
  84. package/dist/dropdown.option.test.basics.multiple.d.ts +0 -1
  85. package/dist/dropdown.option.test.basics.multiple.js +0 -36
  86. package/dist/dropdown.option.test.basics.single.d.ts +0 -1
  87. package/dist/dropdown.option.test.basics.single.js +0 -29
  88. package/dist/dropdown.option.test.events.d.ts +0 -1
  89. package/dist/dropdown.option.test.events.js +0 -36
  90. package/dist/dropdown.option.test.focus.d.ts +0 -1
  91. package/dist/dropdown.option.test.focus.js +0 -11
  92. package/dist/dropdown.option.test.interactions.multiple.d.ts +0 -1
  93. package/dist/dropdown.option.test.interactions.multiple.js +0 -42
  94. package/dist/dropdown.option.test.interactions.single.d.ts +0 -1
  95. package/dist/dropdown.option.test.interactions.single.js +0 -76
  96. package/dist/dropdown.stories.d.ts +0 -8
  97. package/dist/dropdown.test.basics.d.ts +0 -1
  98. package/dist/dropdown.test.basics.filterable.d.ts +0 -1
  99. package/dist/dropdown.test.basics.filterable.js +0 -108
  100. package/dist/dropdown.test.basics.js +0 -181
  101. package/dist/dropdown.test.basics.multiple.d.ts +0 -1
  102. package/dist/dropdown.test.basics.multiple.js +0 -259
  103. package/dist/dropdown.test.basics.single.d.ts +0 -1
  104. package/dist/dropdown.test.basics.single.js +0 -122
  105. package/dist/dropdown.test.events.d.ts +0 -1
  106. package/dist/dropdown.test.events.filterable.d.ts +0 -1
  107. package/dist/dropdown.test.events.filterable.js +0 -31
  108. package/dist/dropdown.test.events.js +0 -251
  109. package/dist/dropdown.test.events.multiple.d.ts +0 -1
  110. package/dist/dropdown.test.events.multiple.js +0 -446
  111. package/dist/dropdown.test.events.single.d.ts +0 -1
  112. package/dist/dropdown.test.events.single.js +0 -343
  113. package/dist/dropdown.test.focus.d.ts +0 -1
  114. package/dist/dropdown.test.focus.filterable.d.ts +0 -1
  115. package/dist/dropdown.test.focus.filterable.js +0 -140
  116. package/dist/dropdown.test.focus.js +0 -107
  117. package/dist/dropdown.test.focus.multiple.d.ts +0 -1
  118. package/dist/dropdown.test.focus.multiple.js +0 -170
  119. package/dist/dropdown.test.focus.single.d.ts +0 -1
  120. package/dist/dropdown.test.focus.single.js +0 -42
  121. package/dist/dropdown.test.form.d.ts +0 -1
  122. package/dist/dropdown.test.form.js +0 -74
  123. package/dist/dropdown.test.form.multiple.d.ts +0 -1
  124. package/dist/dropdown.test.form.multiple.js +0 -151
  125. package/dist/dropdown.test.form.single.d.ts +0 -1
  126. package/dist/dropdown.test.form.single.js +0 -129
  127. package/dist/dropdown.test.interactions.d.ts +0 -1
  128. package/dist/dropdown.test.interactions.filterable.d.ts +0 -1
  129. package/dist/dropdown.test.interactions.filterable.js +0 -805
  130. package/dist/dropdown.test.interactions.js +0 -696
  131. package/dist/dropdown.test.interactions.multiple.d.ts +0 -1
  132. package/dist/dropdown.test.interactions.multiple.js +0 -1026
  133. package/dist/dropdown.test.interactions.single.d.ts +0 -1
  134. package/dist/dropdown.test.interactions.single.js +0 -569
  135. package/dist/dropdown.test.validity.d.ts +0 -1
  136. package/dist/dropdown.test.validity.js +0 -181
  137. package/dist/form-controls-layout.stories.d.ts +0 -10
  138. package/dist/form-controls-layout.test.basics.d.ts +0 -2
  139. package/dist/form-controls-layout.test.basics.js +0 -75
  140. package/dist/form-controls-layout.test.interactions.d.ts +0 -2
  141. package/dist/form-controls-layout.test.interactions.js +0 -26
  142. package/dist/icon-button.stories.d.ts +0 -6
  143. package/dist/icon-button.test.basics.d.ts +0 -1
  144. package/dist/icon-button.test.basics.js +0 -43
  145. package/dist/icon-button.test.focus.d.ts +0 -1
  146. package/dist/icon-button.test.focus.js +0 -13
  147. package/dist/input.stories.d.ts +0 -8
  148. package/dist/input.test.basics.d.ts +0 -1
  149. package/dist/input.test.basics.js +0 -138
  150. package/dist/input.test.events.d.ts +0 -1
  151. package/dist/input.test.events.js +0 -98
  152. package/dist/input.test.focus.d.ts +0 -1
  153. package/dist/input.test.focus.js +0 -58
  154. package/dist/input.test.form.d.ts +0 -1
  155. package/dist/input.test.form.js +0 -74
  156. package/dist/input.test.validity.d.ts +0 -1
  157. package/dist/input.test.validity.js +0 -258
  158. package/dist/label.test.basics.d.ts +0 -1
  159. package/dist/label.test.basics.js +0 -136
  160. package/dist/menu.button.test.basics.d.ts +0 -1
  161. package/dist/menu.button.test.basics.js +0 -43
  162. package/dist/menu.link.test.basics.d.ts +0 -1
  163. package/dist/menu.link.test.basics.js +0 -47
  164. package/dist/menu.options.test.basics.d.ts +0 -2
  165. package/dist/menu.options.test.basics.js +0 -44
  166. package/dist/menu.options.test.events.d.ts +0 -1
  167. package/dist/menu.options.test.events.js +0 -19
  168. package/dist/menu.stories.d.ts +0 -11
  169. package/dist/menu.test.basics.d.ts +0 -1
  170. package/dist/menu.test.basics.js +0 -178
  171. package/dist/menu.test.events.d.ts +0 -3
  172. package/dist/menu.test.events.js +0 -125
  173. package/dist/menu.test.focus.d.ts +0 -2
  174. package/dist/menu.test.focus.js +0 -102
  175. package/dist/menu.test.interactions.d.ts +0 -3
  176. package/dist/menu.test.interactions.js +0 -1069
  177. package/dist/modal.icon-button.test.basics.d.ts +0 -1
  178. package/dist/modal.icon-button.test.basics.js +0 -46
  179. package/dist/modal.stories.d.ts +0 -13
  180. package/dist/modal.tertiary-icon.test.basics.d.ts +0 -1
  181. package/dist/modal.tertiary-icon.test.basics.js +0 -60
  182. package/dist/modal.test.accessibility.d.ts +0 -1
  183. package/dist/modal.test.accessibility.js +0 -38
  184. package/dist/modal.test.basics.d.ts +0 -3
  185. package/dist/modal.test.basics.js +0 -204
  186. package/dist/modal.test.close.d.ts +0 -1
  187. package/dist/modal.test.close.js +0 -35
  188. package/dist/modal.test.events.d.ts +0 -1
  189. package/dist/modal.test.events.js +0 -99
  190. package/dist/modal.test.lock-scroll.d.ts +0 -1
  191. package/dist/modal.test.lock-scroll.js +0 -67
  192. package/dist/modal.test.methods.d.ts +0 -1
  193. package/dist/modal.test.methods.js +0 -20
  194. package/dist/modal.test.scrollbars.d.ts +0 -1
  195. package/dist/modal.test.scrollbars.js +0 -18
  196. package/dist/radio-group.stories.d.ts +0 -6
  197. package/dist/radio-group.test.basics.d.ts +0 -2
  198. package/dist/radio-group.test.basics.js +0 -324
  199. package/dist/radio-group.test.events.d.ts +0 -2
  200. package/dist/radio-group.test.events.js +0 -278
  201. package/dist/radio-group.test.focus.d.ts +0 -2
  202. package/dist/radio-group.test.focus.js +0 -95
  203. package/dist/radio-group.test.form.d.ts +0 -1
  204. package/dist/radio-group.test.form.js +0 -124
  205. package/dist/radio-group.test.validity.d.ts +0 -1
  206. package/dist/radio-group.test.validity.js +0 -311
  207. package/dist/split-button.primary-button.test.basics.d.ts +0 -1
  208. package/dist/split-button.primary-button.test.basics.js +0 -31
  209. package/dist/split-button.primary-button.test.focus.d.ts +0 -1
  210. package/dist/split-button.primary-button.test.focus.js +0 -14
  211. package/dist/split-button.primary-link.test.basics.d.ts +0 -1
  212. package/dist/split-button.primary-link.test.basics.js +0 -30
  213. package/dist/split-button.primary-link.test.focus.d.ts +0 -1
  214. package/dist/split-button.primary-link.test.focus.js +0 -15
  215. package/dist/split-button.secondary-button.test.basics.d.ts +0 -1
  216. package/dist/split-button.secondary-button.test.basics.js +0 -58
  217. package/dist/split-button.secondary-button.test.focus.d.ts +0 -1
  218. package/dist/split-button.secondary-button.test.focus.js +0 -14
  219. package/dist/split-button.secondary-button.test.interactions.d.ts +0 -2
  220. package/dist/split-button.secondary-button.test.interactions.js +0 -30
  221. package/dist/split-button.stories.d.ts +0 -13
  222. package/dist/split-button.test.basics.d.ts +0 -2
  223. package/dist/split-button.test.basics.js +0 -87
  224. package/dist/split-button.test.interactions.d.ts +0 -4
  225. package/dist/split-button.test.interactions.js +0 -51
  226. package/dist/tab.group.test.basics.d.ts +0 -3
  227. package/dist/tab.group.test.basics.js +0 -234
  228. package/dist/tab.group.test.interactions.d.ts +0 -3
  229. package/dist/tab.group.test.interactions.js +0 -434
  230. package/dist/tab.test.basics.d.ts +0 -1
  231. package/dist/tab.test.basics.js +0 -50
  232. package/dist/tabs.stories.d.ts +0 -8
  233. package/dist/tag.stories.d.ts +0 -7
  234. package/dist/tag.test.basics.d.ts +0 -1
  235. package/dist/tag.test.basics.js +0 -28
  236. package/dist/tag.test.events.d.ts +0 -1
  237. package/dist/tag.test.events.js +0 -93
  238. package/dist/tag.test.focus.d.ts +0 -1
  239. package/dist/tag.test.focus.js +0 -10
  240. package/dist/tag.test.interactions.d.ts +0 -1
  241. package/dist/tag.test.interactions.js +0 -36
  242. package/dist/textarea.stories.d.ts +0 -5
  243. package/dist/textarea.test.basics.d.ts +0 -1
  244. package/dist/textarea.test.basics.js +0 -177
  245. package/dist/textarea.test.events.d.ts +0 -1
  246. package/dist/textarea.test.events.js +0 -106
  247. package/dist/textarea.test.form.d.ts +0 -1
  248. package/dist/textarea.test.form.js +0 -71
  249. package/dist/textarea.test.validity.d.ts +0 -1
  250. package/dist/textarea.test.validity.js +0 -204
  251. package/dist/toasts.stories.d.ts +0 -7
  252. package/dist/toasts.test.basics.d.ts +0 -1
  253. package/dist/toasts.test.basics.js +0 -115
  254. package/dist/toasts.toast.test.basics.d.ts +0 -1
  255. package/dist/toasts.toast.test.basics.js +0 -139
  256. package/dist/toggle.stories.d.ts +0 -4
  257. package/dist/toggle.test.basics.d.ts +0 -1
  258. package/dist/toggle.test.basics.js +0 -69
  259. package/dist/toggle.test.events.d.ts +0 -1
  260. package/dist/toggle.test.events.js +0 -30
  261. package/dist/toggle.test.focus.d.ts +0 -1
  262. package/dist/toggle.test.focus.js +0 -9
  263. package/dist/toggle.test.interactions.d.ts +0 -1
  264. package/dist/toggle.test.interactions.js +0 -81
  265. package/dist/tooltip.stories.d.ts +0 -7
  266. package/dist/tooltip.test.basics.d.ts +0 -1
  267. package/dist/tooltip.test.basics.js +0 -100
  268. package/dist/tooltip.test.interactions.d.ts +0 -1
  269. package/dist/tooltip.test.interactions.js +0 -203
  270. package/dist/tree.item.icon-button.test.basics.d.ts +0 -1
  271. package/dist/tree.item.icon-button.test.basics.js +0 -22
  272. package/dist/tree.item.menu.test.basics.d.ts +0 -1
  273. package/dist/tree.item.menu.test.basics.js +0 -86
  274. package/dist/tree.item.test.basics.d.ts +0 -2
  275. package/dist/tree.item.test.basics.js +0 -138
  276. package/dist/tree.stories.d.ts +0 -9
  277. package/dist/tree.test.aria.d.ts +0 -1
  278. package/dist/tree.test.aria.js +0 -86
  279. package/dist/tree.test.basics.d.ts +0 -3
  280. package/dist/tree.test.basics.js +0 -130
  281. package/dist/tree.test.events.d.ts +0 -2
  282. package/dist/tree.test.events.js +0 -19
  283. package/dist/tree.test.focus.d.ts +0 -1
  284. package/dist/tree.test.focus.js +0 -383
@@ -1,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]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).false;
363
- expect(options[1]?.privateActive).to.be.false;
364
- expect(options[1]?.privateIsEditActive).to.be.false;
365
- expect(options[1]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).to.be.false;
387
- expect(options[1]?.privateActive).to.be.true;
388
- expect(options[1]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).to.be.false;
416
- expect(options[1]?.privateActive).to.be.true;
417
- expect(options[1]?.privateIsEditActive).to.be.true;
418
- expect(options[1]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).to.be.true;
434
- expect(options[1]?.privateActive).to.be.false;
435
- expect(options[1]?.privateIsEditActive).to.be.false;
436
- expect(options[1]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).to.be.true;
452
- expect(options[1]?.privateActive).to.be.false;
453
- expect(options[1]?.privateIsEditActive).to.be.false;
454
- expect(options[1]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).to.be.true;
472
- expect(options[1]?.privateActive).to.be.false;
473
- expect(options[1]?.privateIsEditActive).to.be.false;
474
- expect(options[1]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).to.be.false;
489
- expect(options[1]?.privateActive).to.be.true;
490
- expect(options[1]?.privateIsEditActive).to.be.false;
491
- expect(options[1]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).to.be.false;
506
- expect(options[1]?.privateActive).to.be.true;
507
- expect(options[1]?.privateIsEditActive).to.be.false;
508
- expect(options[1]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).to.be.false;
525
- expect(options[1]?.privateActive).to.be.true;
526
- expect(options[1]?.privateIsEditActive).to.be.false;
527
- expect(options[1]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).to.be.false;
552
- expect(options[1]?.privateActive).to.be.true;
553
- expect(options[1]?.privateIsEditActive).to.be.false;
554
- expect(options[1]?.privateIsTooltipOpen).to.be.true;
555
- expect(options[2]?.privateActive).to.be.false;
556
- expect(options[2]?.privateIsEditActive).to.be.false;
557
- expect(options[2]?.privateIsTooltipOpen).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]?.privateIsTooltipOpen).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
- });