@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 +0,0 @@
1
- export {};
@@ -1,569 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import { ArgumentError } from 'ow';
3
- import { aTimeout, assert, elementUpdated, expect, fixture, html, oneEvent, } from '@open-wc/testing';
4
- import { sendKeys } from '@web/test-runner-commands';
5
- import GlideCoreDropdown from './dropdown.js';
6
- import GlideCoreDropdownOption from './dropdown.option.js';
7
- import sinon from 'sinon';
8
- GlideCoreDropdown.shadowRootOptions.mode = 'open';
9
- GlideCoreDropdownOption.shadowRootOptions.mode = 'open';
10
- it('opens on click', async () => {
11
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
12
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
13
- </glide-core-dropdown>`);
14
- // Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
15
- // which puts us in a guard in the event handler. `Event` has no `detail` property
16
- // and would work. `CustomEvent` is used for completeness and to get us as close as
17
- // possible to a real click. See the comment in the handler for more information.
18
- component.shadowRoot
19
- ?.querySelector('[data-test="primary-button"]')
20
- ?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
21
- // Wait for it to open.
22
- await aTimeout(0);
23
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
24
- expect(component.open).to.be.true;
25
- expect(options?.checkVisibility()).to.be.true;
26
- });
27
- it('toggles open and closed when the primary button is clicked', async () => {
28
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
29
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
30
- </glide-core-dropdown>`);
31
- // Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
32
- // which puts us in a guard in the event handler. `Event` has no `detail` property
33
- // and would work. `CustomEvent` is used for completeness and to get us as close as
34
- // possible to a real click. See the comment in the handler for more information.
35
- component.shadowRoot
36
- ?.querySelector('[data-test="primary-button"]')
37
- ?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
38
- await elementUpdated(component);
39
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
40
- expect(component.open).to.be.false;
41
- expect(options?.checkVisibility()).to.be.false;
42
- });
43
- it('does not toggle open and closed when the button overflow text is clicked', async () => {
44
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
45
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
46
- </glide-core-dropdown>`);
47
- // Calling `click()` would be sweet. The problem is it sets `event.detail` to `0`,
48
- // which puts us in a guard in the event handler. `Event` has no `detail` property
49
- // and would work. `CustomEvent` is used for completeness and to get us as close as
50
- // possible to a real click. See the comment in the handler for more information.
51
- component.shadowRoot
52
- ?.querySelector('[data-test="tag-overflow-text"]')
53
- ?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
54
- // Wait for it to open.
55
- await aTimeout(0);
56
- const options = component.shadowRoot?.querySelector('[data-test="options"]');
57
- expect(component.open).to.be.true;
58
- expect(options?.checkVisibility()).to.be.true;
59
- });
60
- it('selects an option on click', async () => {
61
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
62
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
63
- </glide-core-dropdown>`);
64
- // Wait for it to open.
65
- await aTimeout(0);
66
- const option = component.querySelector('glide-core-dropdown-option');
67
- option?.click();
68
- await elementUpdated(component);
69
- const labels = component.shadowRoot?.querySelectorAll('[data-test="selected-option-label"]');
70
- expect(option?.selected).to.be.true;
71
- expect(labels?.length).to.equal(1);
72
- expect(labels?.[0]?.textContent?.trim()).to.equal('One,');
73
- });
74
- it('selects an option on Space', async () => {
75
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
76
- <glide-core-dropdown-option
77
- label="One"
78
- value="one"
79
- ></glide-core-dropdown-option>
80
- </glide-core-dropdown>`);
81
- // Wait for it to open.
82
- await aTimeout(0);
83
- const option = component.querySelector('glide-core-dropdown-option');
84
- option?.focus();
85
- await sendKeys({ press: ' ' });
86
- expect(option?.selected).to.be.true;
87
- });
88
- it('selects an option when its icon is clicked', async () => {
89
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
90
- <glide-core-dropdown-option label="One" value="one">
91
- <svg
92
- slot="icon"
93
- fill="none"
94
- viewBox="0 0 24 24"
95
- stroke-width="1.5"
96
- stroke="currentColor"
97
- style="height: 1rem; width: 1rem;"
98
- >
99
- <path
100
- stroke-linecap="round"
101
- stroke-linejoin="round"
102
- d="M3.75 3.75v4.5m0-4.5h4.5m-4.5 0L9 9M3.75 20.25v-4.5m0 4.5h4.5m-4.5 0L9 15M20.25 3.75h-4.5m4.5 0v4.5m0-4.5L15 9m5.25 11.25h-4.5m4.5 0v-4.5m0 4.5L15 15"
103
- />
104
- </svg>
105
- </glide-core-dropdown-option>
106
- </glide-core-dropdown>`);
107
- // Wait for it to open.
108
- await aTimeout(0);
109
- const option = component.querySelector('glide-core-dropdown-option');
110
- option
111
- ?.querySelector('[slot="icon"]')
112
- ?.dispatchEvent(new Event('click', { bubbles: true }));
113
- expect(option?.selected).to.be.true;
114
- });
115
- it('does not deselect options on Space', async () => {
116
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
117
- <glide-core-dropdown-option
118
- label="One"
119
- value="one"
120
- selected
121
- ></glide-core-dropdown-option>
122
- </glide-core-dropdown>`);
123
- component?.focus();
124
- await sendKeys({ press: ' ' });
125
- const option = component.querySelector('glide-core-dropdown-option');
126
- expect(option?.selected).to.be.true;
127
- });
128
- it('selects an option on Enter', async () => {
129
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
130
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
131
- </glide-core-dropdown>`);
132
- // Wait for it to open.
133
- await aTimeout(0);
134
- const option = component.querySelector('glide-core-dropdown-option');
135
- option?.focus();
136
- await sendKeys({ press: 'Enter' });
137
- expect(option?.selected).to.be.true;
138
- });
139
- it('deactivates all other options on "mouseover"', async () => {
140
- const component = await fixture(html `<glide-core-dropdown open>
141
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
142
-
143
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
144
- </glide-core-dropdown>`);
145
- const options = component.querySelectorAll('glide-core-dropdown-option');
146
- options[0]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
147
- options[1]?.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
148
- expect(options[0]?.privateActive).to.be.false;
149
- expect(options[1]?.privateActive).to.be.true;
150
- });
151
- it('closes when an option is selected via click', async () => {
152
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
153
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
154
- </glide-core-dropdown>`);
155
- // Wait for it to open.
156
- await aTimeout(0);
157
- component.querySelector('glide-core-dropdown-option')?.click();
158
- expect(component.open).to.be.false;
159
- });
160
- it('closes when an option is selected via Space', async () => {
161
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
162
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
163
- </glide-core-dropdown>`);
164
- // Wait for it to open.
165
- await aTimeout(0);
166
- component.focus();
167
- await sendKeys({ press: ' ' });
168
- expect(component.open).to.be.false;
169
- });
170
- it('closes when an option is selected via Enter', async () => {
171
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
172
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
173
- </glide-core-dropdown>`);
174
- // Wait for it to open.
175
- await aTimeout(0);
176
- component.focus();
177
- await sendKeys({ press: 'Enter' });
178
- expect(component.open).to.be.false;
179
- });
180
- it('closes when an option is selected via Enter', async () => {
181
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
182
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
183
- </glide-core-dropdown>`);
184
- // Wait for it to open.
185
- await aTimeout(0);
186
- component.querySelector('glide-core-dropdown-option')?.focus();
187
- await sendKeys({ press: 'Enter' });
188
- expect(component.open).to.be.false;
189
- });
190
- it('closes when an option is selected via Space', async () => {
191
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
192
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
193
- </glide-core-dropdown>`);
194
- // Wait for it to open.
195
- await aTimeout(0);
196
- const option = component.querySelector('glide-core-dropdown-option');
197
- option?.focus();
198
- await sendKeys({ press: ' ' });
199
- expect(component.open).to.be.false;
200
- });
201
- it('closes when an already selected option is clicked', async () => {
202
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
203
- <glide-core-dropdown-option
204
- label="Label"
205
- selected
206
- ></glide-core-dropdown-option>
207
- </glide-core-dropdown>`);
208
- // Wait for it to open.
209
- await aTimeout(0);
210
- component.querySelector('glide-core-dropdown-option')?.click();
211
- expect(component.open).to.be.false;
212
- });
213
- it('closes on edit via click', async () => {
214
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
215
- <glide-core-dropdown-option
216
- label="Label"
217
- editable
218
- selected
219
- ></glide-core-dropdown-option>
220
- </glide-core-dropdown>`);
221
- // Wait for it to open.
222
- await aTimeout(0);
223
- component.shadowRoot
224
- ?.querySelector('[data-test="edit-button"]')
225
- ?.click();
226
- expect(component.open).to.be.false;
227
- });
228
- it('deselects all other options when one is newly selected', async () => {
229
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
230
- <glide-core-dropdown-option
231
- label="One"
232
- selected
233
- ></glide-core-dropdown-option>
234
-
235
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
236
- <glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
237
- </glide-core-dropdown>`);
238
- component.shadowRoot
239
- ?.querySelector('[data-test="primary-button"]')
240
- ?.dispatchEvent(new Event('click'));
241
- const options = component.querySelectorAll('glide-core-dropdown-option');
242
- options[1].click();
243
- expect(options[0].selected).to.be.false;
244
- expect(options[1].selected).to.be.true;
245
- expect(options[2].selected).to.be.false;
246
- });
247
- it('updates its internal label when `label` of the selected option is changed programmatically', async () => {
248
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
249
- <glide-core-dropdown-option
250
- label="One"
251
- selected
252
- ></glide-core-dropdown-option>
253
- </glide-core-dropdown>`);
254
- const option = component.querySelector('glide-core-dropdown-option');
255
- assert(option);
256
- option.label = 'Two';
257
- await elementUpdated(component);
258
- const label = component.shadowRoot?.querySelector('[data-test="internal-label"]');
259
- expect(label?.textContent?.trim()).to.equal(option?.label);
260
- });
261
- it('shows an Edit button when `editable` of the selected option is changed programmatically', async () => {
262
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
263
- <glide-core-dropdown-option
264
- label="One"
265
- selected
266
- ></glide-core-dropdown-option>
267
- </glide-core-dropdown>`);
268
- const option = component.querySelector('glide-core-dropdown-option');
269
- assert(option);
270
- option.editable = true;
271
- await elementUpdated(component);
272
- const editButton = component.shadowRoot?.querySelector('[data-test="edit-button"]');
273
- expect(editButton?.checkVisibility()).to.be.true;
274
- });
275
- it('selects and deselects options when `value` is changed programmatically', async () => {
276
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
277
- <glide-core-dropdown-option
278
- label="One"
279
- value="one"
280
- selected
281
- ></glide-core-dropdown-option>
282
-
283
- <glide-core-dropdown-option
284
- label="Two"
285
- value="two"
286
- ></glide-core-dropdown-option>
287
- </glide-core-dropdown>`);
288
- component.value = ['two'];
289
- const options = component.querySelectorAll('glide-core-dropdown-option');
290
- expect(options[0].selected).to.be.false;
291
- expect(options[1].selected).to.be.true;
292
- });
293
- it('throws when `value` is changed programmatically to include more than one value', async () => {
294
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
295
- <glide-core-dropdown-option
296
- label="One"
297
- value="one"
298
- ></glide-core-dropdown-option>
299
-
300
- <glide-core-dropdown-option
301
- label="Two"
302
- value="two"
303
- ></glide-core-dropdown-option>
304
- </glide-core-dropdown>`);
305
- const spy = sinon.spy();
306
- try {
307
- component.value = ['one', 'two'];
308
- }
309
- catch (error) {
310
- if (error instanceof ArgumentError) {
311
- spy();
312
- }
313
- }
314
- expect(spy.callCount).to.equal(1);
315
- });
316
- it('updates `value` when an option `value` is changed programmatically', async () => {
317
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
318
- <glide-core-dropdown-option
319
- label="One"
320
- value="one"
321
- selected
322
- ></glide-core-dropdown-option>
323
- </glide-core-dropdown>`);
324
- const option = component.querySelector('glide-core-dropdown-option');
325
- assert(option);
326
- option.value = 'two';
327
- expect(component.value).to.deep.equal(['two']);
328
- });
329
- it('updates `value` when an option is selected via click', async () => {
330
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
331
- <glide-core-dropdown-option
332
- label="One"
333
- value="one"
334
- ></glide-core-dropdown-option>
335
-
336
- <glide-core-dropdown-option
337
- label="Two"
338
- value="two"
339
- ></glide-core-dropdown-option>
340
-
341
- <glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
342
- </glide-core-dropdown>`);
343
- const options = component.querySelectorAll('glide-core-dropdown-option');
344
- options[1].click();
345
- expect(component.value).to.deep.equal(['two']);
346
- // Reopen it.
347
- component.shadowRoot
348
- ?.querySelector('[data-test="primary-button"]')
349
- ?.dispatchEvent(new CustomEvent('click', { detail: 1 }));
350
- // Wait for it to open.
351
- await elementUpdated(component);
352
- options[1].click();
353
- expect(component.value).to.deep.equal(['two']);
354
- // Reopen it.
355
- component.shadowRoot
356
- ?.querySelector('[data-test="primary-button"]')
357
- ?.dispatchEvent(new CustomEvent('click', { detail: 1 }));
358
- // Wait for it to open.
359
- await elementUpdated(component);
360
- options[2].click();
361
- expect(component.value).to.deep.equal([]);
362
- });
363
- it('updates `value` when an option is selected via Enter', async () => {
364
- const component = await fixture(html `<glide-core-dropdown open>
365
- <glide-core-dropdown-option
366
- label="One"
367
- value="one"
368
- ></glide-core-dropdown-option>
369
-
370
- <glide-core-dropdown-option
371
- label="Two"
372
- value="two"
373
- ></glide-core-dropdown-option>
374
-
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
- const options = component.querySelectorAll('glide-core-dropdown-option');
380
- options[0].focus();
381
- await sendKeys({ press: 'Enter' });
382
- expect(component.value).to.deep.equal(['one']);
383
- // Reopen it.
384
- component.shadowRoot
385
- ?.querySelector('[data-test="primary-button"]')
386
- ?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
387
- // Wait for it to open.
388
- await aTimeout(0);
389
- options[1].focus();
390
- await sendKeys({ press: 'Enter' });
391
- expect(component.value).to.deep.equal(['two']);
392
- // Reopen it.
393
- component.shadowRoot
394
- ?.querySelector('[data-test="primary-button"]')
395
- ?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
396
- // Wait for it to open.
397
- await aTimeout(0);
398
- options[2].focus();
399
- await sendKeys({ press: 'Enter' });
400
- expect(component.value).to.deep.equal([]);
401
- });
402
- it('updates `value` when an option is selected via Space', async () => {
403
- const component = await fixture(html `<glide-core-dropdown open>
404
- <glide-core-dropdown-option
405
- label="One"
406
- value="one"
407
- ></glide-core-dropdown-option>
408
-
409
- <glide-core-dropdown-option
410
- label="Two"
411
- value="two"
412
- ></glide-core-dropdown-option>
413
-
414
- <glide-core-dropdown-option label="Three"></glide-core-dropdown-option>
415
- </glide-core-dropdown>`);
416
- // Wait for it to open.
417
- await aTimeout(0);
418
- const options = component.querySelectorAll('glide-core-dropdown-option');
419
- options[0].focus();
420
- await sendKeys({ press: ' ' });
421
- expect(component.value).to.deep.equal(['one']);
422
- // Reopen it.
423
- component.shadowRoot
424
- ?.querySelector('[data-test="primary-button"]')
425
- ?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
426
- // Wait for it to open.
427
- await aTimeout(0);
428
- options[1].focus();
429
- await sendKeys({ press: ' ' });
430
- expect(component.value).to.deep.equal(['two']);
431
- // Reopen it.
432
- component.shadowRoot
433
- ?.querySelector('[data-test="primary-button"]')
434
- ?.dispatchEvent(new CustomEvent('click', { bubbles: true, detail: 1 }));
435
- // Wait for it to open.
436
- await aTimeout(0);
437
- options[2].focus();
438
- await sendKeys({ press: ' ' });
439
- expect(component.value).to.deep.equal([]);
440
- });
441
- it('updates `value` when `multiple` is changed to `false` programmatically', async () => {
442
- const component = await fixture(html `<glide-core-dropdown open multiple>
443
- <glide-core-dropdown-option
444
- label="One"
445
- value="one"
446
- selected
447
- ></glide-core-dropdown-option>
448
-
449
- <glide-core-dropdown-option
450
- label="Two"
451
- value="two"
452
- selected
453
- ></glide-core-dropdown-option>
454
- </glide-core-dropdown>`);
455
- component.multiple = false;
456
- const options = component.querySelectorAll('glide-core-dropdown-option');
457
- const checkbox = options[1].shadowRoot?.querySelector('[data-test="checkbox"]');
458
- expect(options[0].selected).to.be.false;
459
- expect(options[1].selected).to.be.true;
460
- expect(checkbox?.checked).to.be.true;
461
- expect(component.value).to.deep.equal(['two']);
462
- });
463
- it('updates `value` when the `value` of the selected option is changed programmatically', async () => {
464
- const component = await fixture(html `<glide-core-dropdown open>
465
- <glide-core-dropdown-option
466
- label="One"
467
- value="one"
468
- selected
469
- ></glide-core-dropdown-option>
470
-
471
- <glide-core-dropdown-option
472
- label="Two"
473
- value="two"
474
- ></glide-core-dropdown-option>
475
- </glide-core-dropdown>`);
476
- const option = component.querySelector('glide-core-dropdown-option');
477
- assert(option);
478
- option.value = 'three';
479
- expect(component.value).to.deep.equal(['three']);
480
- });
481
- it('updates `value` when the `value` of the selected option is removed programmatically', async () => {
482
- const component = await fixture(html `<glide-core-dropdown open>
483
- <glide-core-dropdown-option
484
- label="One"
485
- value="one"
486
- selected
487
- ></glide-core-dropdown-option>
488
-
489
- <glide-core-dropdown-option
490
- label="Two"
491
- value="two"
492
- ></glide-core-dropdown-option>
493
- </glide-core-dropdown>`);
494
- const option = component.querySelector('glide-core-dropdown-option');
495
- assert(option);
496
- option.value = '';
497
- expect(component.value).to.deep.equal([]);
498
- });
499
- it('updates the its internal label when an option is newly selected', async () => {
500
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" open>
501
- <glide-core-dropdown-option
502
- label="One"
503
- value="one"
504
- ></glide-core-dropdown-option>
505
-
506
- <glide-core-dropdown-option
507
- label="Two"
508
- value="two"
509
- ></glide-core-dropdown-option>
510
- </glide-core-dropdown>`);
511
- const option = component.querySelector('glide-core-dropdown-option:last-of-type');
512
- option?.click();
513
- await elementUpdated(component);
514
- const label = component.shadowRoot?.querySelector('[data-test="internal-label"]');
515
- expect(label?.textContent?.trim()).to.equal(option?.label);
516
- });
517
- it('hides Select All', async () => {
518
- const component = await fixture(html `<glide-core-dropdown
519
- label="Label"
520
- placeholder="Placeholder"
521
- select-all
522
- >
523
- <glide-core-dropdown-option
524
- label="One"
525
- selected
526
- ></glide-core-dropdown-option>
527
-
528
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
529
- </glide-core-dropdown>`);
530
- const selectAll = component.shadowRoot?.querySelector('[data-test="select-all"]');
531
- expect(selectAll?.checkVisibility()).to.not.be.ok;
532
- });
533
- it('cannot be tabbed to when `disabled`', async () => {
534
- await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder" disabled>
535
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
536
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
537
- </glide-core-dropdown>`);
538
- await sendKeys({ down: 'Tab' });
539
- expect(document.activeElement).to.equal(document.body);
540
- });
541
- it('clicks the primary button when `click()` is called', async () => {
542
- const component = await fixture(html `<glide-core-dropdown label="Label" placeholder="Placeholder">
543
- <glide-core-dropdown-option label="Label"></glide-core-dropdown-option>
544
- </glide-core-dropdown>`);
545
- const button = component.shadowRoot?.querySelector('[data-test="primary-button"]');
546
- assert(button);
547
- setTimeout(() => {
548
- component.click();
549
- });
550
- const event = await oneEvent(button, 'click');
551
- expect(event instanceof PointerEvent).to.be.true;
552
- });
553
- it('unhides its options when made unfilterable', async () => {
554
- const component = await fixture(html `<glide-core-dropdown
555
- label="Label"
556
- placeholder="Placeholder"
557
- filterable
558
- >
559
- <glide-core-dropdown-option label="One"></glide-core-dropdown-option>
560
- <glide-core-dropdown-option label="Two"></glide-core-dropdown-option>
561
- </glide-core-dropdown>`);
562
- component.focus();
563
- await sendKeys({ type: 'one' });
564
- component.filterable = false;
565
- const options = [
566
- ...component.querySelectorAll('glide-core-dropdown-option'),
567
- ].filter(({ hidden }) => !hidden);
568
- expect(options.length).to.equal(2);
569
- });
@@ -1 +0,0 @@
1
- import './dropdown.option.js';