@crowdstrike/glide-core 0.13.1 → 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 (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 -3
  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 +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';