@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,130 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import './tree.item.icon-button.js';
3
- import './tree.item.js';
4
- import './tree.js';
5
- import { ArgumentError } from 'ow';
6
- import { assert, expect, fixture, html } from '@open-wc/testing';
7
- import GlideCoreTree from './tree.js';
8
- import expectArgumentError from './library/expect-argument-error.js';
9
- import sinon from 'sinon';
10
- GlideCoreTree.shadowRootOptions.mode = 'open';
11
- it('registers', async () => {
12
- expect(window.customElements.get('glide-core-tree')).to.equal(GlideCoreTree);
13
- });
14
- it('renders and sets default attributes', async () => {
15
- const component = await fixture(html `
16
- <glide-core-tree>
17
- <glide-core-tree-item label="Child Item"></glide-core-tree-item>
18
- </glide-core-tree>
19
- `);
20
- expect(component.selectedItem).to.equal(undefined);
21
- });
22
- it('can select child and grandchild items', async () => {
23
- const component = await fixture(html `
24
- <glide-core-tree>
25
- <glide-core-tree-item label="Child Item 1"></glide-core-tree-item>
26
- <glide-core-tree-item label="Child Item 2">
27
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
28
- </glide-core-tree-item>
29
- </glide-core-tree>
30
- `);
31
- const childItems = component.slotElements;
32
- const grandchildItems = childItems?.[1].slotElements;
33
- component.selectItem(childItems[0]);
34
- expect(childItems[0].selected).to.be.true;
35
- expect(component.selectedItem).to.equal(childItems[0]);
36
- expect(childItems[1].selected).to.be.false;
37
- expect(grandchildItems[0].selected).to.be.false;
38
- component.selectItem(grandchildItems[0]);
39
- expect(childItems[0].selected).to.be.false;
40
- expect(childItems[1].selected).to.be.false;
41
- expect(grandchildItems[0].selected).to.be.true;
42
- expect(component.selectedItem).to.equal(grandchildItems[0]);
43
- });
44
- it('can click child and grandchild items to expand or select them', async () => {
45
- const component = await fixture(html `
46
- <glide-core-tree>
47
- <glide-core-tree-item label="Child Item 1"></glide-core-tree-item>
48
- <glide-core-tree-item label="Child Item 2">
49
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
50
- </glide-core-tree-item>
51
- <glide-core-tree-item label="Child Item 3" expanded non-collapsible>
52
- <glide-core-tree-item label="Grandchild Item 2"></glide-core-tree-item>
53
- </glide-core-tree-item>
54
- </glide-core-tree>
55
- `);
56
- const childItems = component.slotElements;
57
- const grandchildItems = childItems?.[1].slotElements;
58
- // Clicking an item that doesn't have children selects it
59
- childItems[0].click();
60
- expect(childItems[0].selected).to.be.true;
61
- expect(childItems[1].selected).to.be.false;
62
- expect(grandchildItems[0].selected).to.be.false;
63
- expect(childItems[1].expanded).to.be.false;
64
- // Clicking an item that has children expands it
65
- childItems[1].click();
66
- expect(childItems[1].expanded).to.be.true;
67
- // Can click and select a grandchild item
68
- grandchildItems[0].click();
69
- expect(grandchildItems[0].selected).to.be.true;
70
- // Can click and select a non-collapsible parent item
71
- childItems[2].click();
72
- expect(childItems[2].selected).to.be.true;
73
- });
74
- it('does not select an item if a tree-item-icon-button is clicked', async () => {
75
- const component = await fixture(html `
76
- <glide-core-tree>
77
- <glide-core-tree-item label="Child Item 1">
78
- <glide-core-tree-item-icon-button slot="suffix" data-test-icon-button>
79
- <svg viewBox="0 0 24 24">
80
- <path d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
81
- </svg>
82
- </glide-core-tree-item-icon-button>
83
- </glide-core-tree-item>
84
- </glide-core-tree>
85
- `);
86
- const childItems = component.slotElements;
87
- const iconButton = childItems[0].querySelector('[data-test-icon-button]');
88
- assert(iconButton);
89
- iconButton.click();
90
- await iconButton.updateComplete;
91
- expect(childItems[0].selected).to.be.false;
92
- });
93
- it('does not select an item if its menu slot is clicked', async () => {
94
- const component = await fixture(html `
95
- <glide-core-tree>
96
- <glide-core-tree-item label="Child Item 1">
97
- <glide-core-tree-item-menu slot="menu" data-test-menu>
98
- <glide-core-menu-link label="Edit" url="/edit"></glide-core-menu-link>
99
- </glide-core-tree-item-menu>
100
- </glide-core-tree-item>
101
- </glide-core-tree>
102
- `);
103
- const childItems = component.slotElements;
104
- const menu = childItems[0].querySelector('[data-test-menu]');
105
- assert(menu);
106
- menu.click();
107
- await menu.updateComplete;
108
- expect(childItems[0].selected).to.be.false;
109
- });
110
- it('throws if it does not have a default slot', async () => {
111
- const spy = sinon.spy();
112
- try {
113
- await fixture(html `<glide-core-tree></glide-core-tree>`);
114
- }
115
- catch (error) {
116
- if (error instanceof ArgumentError) {
117
- spy();
118
- }
119
- }
120
- expect(spy.callCount).to.equal(1);
121
- });
122
- it('throws if the default slot is the incorrect type', async () => {
123
- await expectArgumentError(() => {
124
- return fixture(html `
125
- <glide-core-tree>
126
- <button>Button</button>
127
- </glide-core-tree>
128
- `);
129
- });
130
- });
@@ -1,2 +0,0 @@
1
- import './tree.item.menu.js';
2
- import './tree.js';
@@ -1,19 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import './tree.item.menu.js';
3
- import './tree.js';
4
- import { expect, fixture, html, oneEvent } from '@open-wc/testing';
5
- import GlideCoreTreeItem from './tree.item.js';
6
- it('dispatches an "item-selected" event when an item is clicked', async () => {
7
- const component = await fixture(html `
8
- <glide-core-tree>
9
- <glide-core-tree-item label="Child Item"></glide-core-tree-item>
10
- </glide-core-tree>
11
- `);
12
- setTimeout(() => {
13
- component.querySelector('glide-core-tree-item')?.click();
14
- });
15
- const event = await oneEvent(component, 'item-selected');
16
- expect(event instanceof CustomEvent).to.be.true;
17
- expect(event.bubbles).to.be.true;
18
- expect(event.detail instanceof GlideCoreTreeItem).to.be.true;
19
- });
@@ -1 +0,0 @@
1
- import './tree.js';
@@ -1,383 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-unused-expressions */
2
- import './tree.js';
3
- import { assert, expect, fixture, html } from '@open-wc/testing';
4
- import { sendKeys } from '@web/test-runner-commands';
5
- import GlideCoreTree from './tree.js';
6
- import GlideCoreTreeItem from './tree.item.js';
7
- import GlideCoreTreeItemIconButton from './tree.item.icon-button.js';
8
- import GlideCoreTreeItemMenu from './tree.item.menu.js';
9
- GlideCoreTree.shadowRootOptions.mode = 'open';
10
- it('focuses the first tree item when tree is focused, if there are no selected items', async () => {
11
- const component = await fixture(html `
12
- <glide-core-tree>
13
- <glide-core-tree-item label="Child Item 1">
14
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
15
- </glide-core-tree-item>
16
- <glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
17
- </glide-core-tree>
18
- `);
19
- component.dispatchEvent(new Event('focusin'));
20
- const childItems = component.slotElements;
21
- assert(document.activeElement instanceof GlideCoreTreeItem);
22
- expect(document.activeElement?.label).to.equal(childItems[0].label);
23
- });
24
- it('focuses the selected tree item on `focus()`, if there is one', async () => {
25
- const component = await fixture(html `
26
- <glide-core-tree>
27
- <glide-core-tree-item label="Child Item 1"></glide-core-tree-item>
28
- <glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
29
- </glide-core-tree>
30
- `);
31
- const childItems = component.slotElements;
32
- component.selectItem(childItems[1]);
33
- component.dispatchEvent(new Event('focusin'));
34
- await component.updateComplete;
35
- assert(document.activeElement instanceof GlideCoreTreeItem);
36
- expect(document.activeElement?.label).to.equal(childItems[1].label);
37
- });
38
- it('does not focus the selected tree item on `focus()` if collapsed', async () => {
39
- const component = await fixture(html `
40
- <glide-core-tree>
41
- <glide-core-tree-item label="Child Item 1"> </glide-core-tree-item>
42
- <glide-core-tree-item label="Child Item 2">
43
- <glide-core-tree-item
44
- label="Grandchild Item 1"
45
- selected
46
- ></glide-core-tree-item>
47
- </glide-core-tree-item>
48
- </glide-core-tree>
49
- `);
50
- const childItems = component.slotElements;
51
- component.dispatchEvent(new Event('focusin'));
52
- await component.updateComplete;
53
- expect(document.activeElement === childItems[0]).to.be.true;
54
- });
55
- it('expands a tree item if right arrow is pressed', async () => {
56
- const component = await fixture(html `
57
- <glide-core-tree>
58
- <glide-core-tree-item label="Child Item 1">
59
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
60
- </glide-core-tree-item>
61
- <glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
62
- </glide-core-tree>
63
- `);
64
- const childItems = component.slotElements;
65
- component.dispatchEvent(new Event('focusin'));
66
- await sendKeys({ press: 'ArrowRight' });
67
- expect(childItems[0].expanded).to.be.true;
68
- assert(document.activeElement instanceof GlideCoreTreeItem);
69
- expect(document.activeElement?.label).to.equal(childItems[0].label, 'focus does not move');
70
- });
71
- it(`focuses on an expanded tree item's child if right arrow is pressed`, async () => {
72
- const component = await fixture(html `
73
- <glide-core-tree>
74
- <glide-core-tree-item label="Child Item 1" expanded>
75
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
76
- </glide-core-tree-item>
77
- <glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
78
- </glide-core-tree>
79
- `);
80
- const childItems = component.slotElements;
81
- component.dispatchEvent(new Event('focusin'));
82
- await sendKeys({ press: 'ArrowRight' });
83
- assert(document.activeElement instanceof GlideCoreTreeItem);
84
- expect(document.activeElement?.label).to.equal(childItems[0].slotElements[0].label);
85
- });
86
- it('collapses an expanded tree item if left arrow is pressed', async () => {
87
- const component = await fixture(html `
88
- <glide-core-tree>
89
- <glide-core-tree-item label="Child Item 1" expanded>
90
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
91
- </glide-core-tree-item>
92
- <glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
93
- </glide-core-tree>
94
- `);
95
- const childItems = component.slotElements;
96
- component.dispatchEvent(new Event('focusin'));
97
- await sendKeys({ press: 'ArrowLeft' });
98
- expect(childItems[0].expanded).to.be.false;
99
- assert(document.activeElement instanceof GlideCoreTreeItem);
100
- expect(document.activeElement?.label).to.equal(childItems[0].label, 'focus does not move');
101
- });
102
- it(`focuses on a non-collapsible tree item's parent if left arrow is pressed`, async () => {
103
- const component = await fixture(html `
104
- <glide-core-tree>
105
- <glide-core-tree-item label="Child Item 1" expanded non-collapsible>
106
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
107
- </glide-core-tree-item>
108
- <glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
109
- </glide-core-tree>
110
- `);
111
- const childItems = component.slotElements;
112
- const grandchildItems = childItems[0].slotElements;
113
- grandchildItems[0].focus();
114
- await sendKeys({ press: 'ArrowLeft' });
115
- assert(document.activeElement instanceof GlideCoreTreeItem);
116
- expect(document.activeElement?.label).to.equal(childItems[0].label);
117
- });
118
- it(`focuses on a collapsed tree item's parent if left arrow is pressed`, async () => {
119
- const component = await fixture(html `
120
- <glide-core-tree>
121
- <glide-core-tree-item expanded label="Child Item 1">
122
- <glide-core-tree-item label="Grandchild Item 1">
123
- <glide-core-tree-item
124
- label="Great Grandchild Item 1"
125
- ></glide-core-tree-item>
126
- </glide-core-tree-item>
127
- </glide-core-tree-item>
128
- <glide-core-tree-item label="Child Item 2"></glide-core-tree-item>
129
- </glide-core-tree>
130
- `);
131
- const childItems = component.slotElements;
132
- const grandchildItems = childItems[0].slotElements;
133
- grandchildItems[0].focus();
134
- await sendKeys({ press: 'ArrowLeft' });
135
- expect(document.activeElement === childItems[0]).to.be.true;
136
- });
137
- it('moves down the non-expanded tree items with down arrow', async () => {
138
- const component = await fixture(html `
139
- <glide-core-tree>
140
- <glide-core-tree-item label="Child Item 1" expanded>
141
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
142
- </glide-core-tree-item>
143
- <glide-core-tree-item label="Child Item 2">
144
- <glide-core-tree-item label="Grandchild Item 2"></glide-core-tree-item>
145
- </glide-core-tree-item>
146
- <glide-core-tree-item label="Child Item 3"></glide-core-tree-item>
147
- </glide-core-tree>
148
- `);
149
- const childItems = component.slotElements;
150
- component.dispatchEvent(new Event('focusin'));
151
- await sendKeys({ press: 'ArrowDown' });
152
- assert(document.activeElement instanceof GlideCoreTreeItem);
153
- expect(document.activeElement?.label).to.equal(childItems[0].slotElements[0].label, 'moves to child item if expanded');
154
- await sendKeys({ press: 'ArrowDown' });
155
- expect(document.activeElement?.label).to.equal(childItems[1].label, 'moves from last child for next parent');
156
- await sendKeys({ press: 'ArrowDown' });
157
- expect(document.activeElement?.label).to.equal(childItems[2].label, 'Does not navigate to collapsed tree items');
158
- await sendKeys({ press: 'ArrowDown' });
159
- expect(document.activeElement?.label).to.equal(childItems[2].label, 'Does not move if at the last item');
160
- });
161
- it('moves up the non-expanded tree items with up arrow', async () => {
162
- const component = await fixture(html `
163
- <glide-core-tree>
164
- <glide-core-tree-item label="Child Item 1">
165
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
166
- </glide-core-tree-item>
167
- <glide-core-tree-item label="Child Item 2" expanded>
168
- <glide-core-tree-item label="Grandchild Item 2"></glide-core-tree-item>
169
- </glide-core-tree-item>
170
- </glide-core-tree>
171
- `);
172
- const childItems = component.slotElements;
173
- // Start at the last item
174
- childItems[1].slotElements[0].focus();
175
- await sendKeys({ press: 'ArrowUp' });
176
- assert(document.activeElement instanceof GlideCoreTreeItem);
177
- expect(document.activeElement?.label).to.equal(childItems[1].label);
178
- await sendKeys({ press: 'ArrowUp' });
179
- expect(document.activeElement?.label).to.equal(childItems[0].label, 'Does not navigate to collapsed tree items');
180
- await sendKeys({ press: 'ArrowUp' });
181
- expect(document.activeElement?.label).to.equal(childItems[0].label, 'Does not move if at the first item');
182
- });
183
- it('moves to the first item when Home is pressed', async () => {
184
- const component = await fixture(html `
185
- <glide-core-tree>
186
- <glide-core-tree-item label="Child Item 1">
187
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
188
- </glide-core-tree-item>
189
- <glide-core-tree-item label="Child Item 2" expanded>
190
- <glide-core-tree-item label="Grandchild Item 2"></glide-core-tree-item>
191
- </glide-core-tree-item>
192
- </glide-core-tree>
193
- `);
194
- const childItems = component.slotElements;
195
- // Start at the last item
196
- childItems[1].slotElements[0].focus();
197
- await sendKeys({ press: 'Home' });
198
- assert(document.activeElement instanceof GlideCoreTreeItem);
199
- expect(document.activeElement?.label).to.equal(childItems[0].label);
200
- });
201
- it('moves to the last item when End is pressed', async () => {
202
- const component = await fixture(html `
203
- <glide-core-tree>
204
- <glide-core-tree-item label="Child Item 1">
205
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
206
- </glide-core-tree-item>
207
- <glide-core-tree-item label="Child Item 2" expanded>
208
- <glide-core-tree-item label="Grandchild Item 2"></glide-core-tree-item>
209
- </glide-core-tree-item>
210
- </glide-core-tree>
211
- `);
212
- const childItems = component.slotElements;
213
- // Start at the first item
214
- childItems[0].focus();
215
- await sendKeys({ press: 'End' });
216
- assert(document.activeElement instanceof GlideCoreTreeItem);
217
- expect(document.activeElement?.label).to.equal(childItems[1].slotElements[0].label);
218
- });
219
- it('selects or expands/collapses node when Enter is pressed', async () => {
220
- const component = await fixture(html `
221
- <glide-core-tree>
222
- <glide-core-tree-item label="Child Item 1"></glide-core-tree-item>
223
- <glide-core-tree-item label="Child Item 2">
224
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
225
- </glide-core-tree-item>
226
- </glide-core-tree>
227
- `);
228
- const childItems = component.slotElements;
229
- const grandchildItems = childItems?.[1].slotElements;
230
- // For an item that doesn't have children, selects it
231
- childItems[0].focus();
232
- await sendKeys({ press: 'Enter' });
233
- expect(childItems[0].selected).to.be.true;
234
- expect(childItems[1].selected).to.be.false;
235
- expect(grandchildItems[0].selected).to.be.false;
236
- expect(childItems[1].expanded).to.be.false;
237
- // For an item that has children, expands it
238
- childItems[1].focus();
239
- await sendKeys({ press: 'Enter' });
240
- expect(childItems[1].expanded).to.be.true;
241
- // Can select a grandchild item
242
- grandchildItems[0].focus();
243
- await sendKeys({ press: 'Enter' });
244
- expect(grandchildItems[0].selected).to.be.true;
245
- });
246
- it('selects a non-collapsible parent node when Enter is pressed', async () => {
247
- const component = await fixture(html `
248
- <glide-core-tree>
249
- <glide-core-tree-item label="Child Item 1" expanded non-collapsible>
250
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
251
- </glide-core-tree-item>
252
- </glide-core-tree>
253
- `);
254
- const childItems = component.slotElements;
255
- const grandchildItems = childItems?.[0].slotElements;
256
- grandchildItems[0].focus();
257
- childItems[0].focus();
258
- await sendKeys({ press: 'Enter' });
259
- expect(grandchildItems[0].selected).to.be.false;
260
- expect(childItems[0].selected).to.be.true;
261
- });
262
- it('does nothing if some other key is pressed', async () => {
263
- const component = await fixture(html `
264
- <glide-core-tree>
265
- <glide-core-tree-item label="Child Item 1">
266
- <glide-core-tree-item label="Grandchild Item 1"></glide-core-tree-item>
267
- </glide-core-tree-item>
268
- <glide-core-tree-item label="Child Item 2" expanded>
269
- <glide-core-tree-item label="Grandchild Item 2"></glide-core-tree-item>
270
- </glide-core-tree-item>
271
- </glide-core-tree>
272
- `);
273
- const childItems = component.slotElements;
274
- // Start at the first item
275
- childItems[0].focus();
276
- await sendKeys({ press: 'a' });
277
- assert(document.activeElement instanceof GlideCoreTreeItem);
278
- expect(document.activeElement?.label).to.equal(childItems[0].label);
279
- });
280
- it('can use the keyboard to navigate to a tree item icon button', async () => {
281
- const component = await fixture(html `
282
- <glide-core-tree>
283
- <glide-core-tree-item label="Child Item 1">
284
- <glide-core-tree-item-icon-button slot="suffix">
285
- <svg viewBox="0 0 24 24">
286
- <path d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
287
- </svg>
288
- </glide-core-tree-item-icon-button>
289
- </glide-core-tree-item>
290
- </glide-core-tree>
291
- `);
292
- component.dispatchEvent(new Event('focusin'));
293
- const childItems = component.slotElements;
294
- childItems[0].focus();
295
- await sendKeys({ press: 'Tab' });
296
- assert(document.activeElement instanceof GlideCoreTreeItemIconButton);
297
- });
298
- it('can use the keyboard to navigate to a tree item menu', async () => {
299
- const component = await fixture(html `
300
- <glide-core-tree>
301
- <glide-core-tree-item label="Child Item 1">
302
- <glide-core-tree-item-menu slot="menu">
303
- <glide-core-menu-link label="Edit" url="/edit">
304
- </glide-core-menu-link>
305
- </glide-core-tree-item-menu>
306
- </glide-core-tree-item>
307
- </glide-core-tree>
308
- `);
309
- component.dispatchEvent(new Event('focusin'));
310
- const childItems = component.slotElements;
311
- childItems[0].focus();
312
- await sendKeys({ press: 'Tab' });
313
- assert(document.activeElement instanceof GlideCoreTreeItemMenu);
314
- });
315
- it('does not focus on a tree item icon button unless that tree item is focused', async () => {
316
- const component = await fixture(html `
317
- <glide-core-tree>
318
- <glide-core-tree-item label="Child Item 1"> </glide-core-tree-item>
319
- <glide-core-tree-item label="Child Item 2">
320
- <glide-core-tree-item-icon-button slot="suffix">
321
- <svg viewBox="0 0 24 24">
322
- <path d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
323
- </svg>
324
- </glide-core-tree-item-icon-button>
325
- </glide-core-tree-item>
326
- </glide-core-tree>
327
- `);
328
- component.dispatchEvent(new Event('focusin'));
329
- const childItems = component.slotElements;
330
- childItems[0].focus();
331
- await sendKeys({ press: 'Tab' });
332
- expect(document.activeElement === document.body).to.be.true;
333
- childItems[1].focus();
334
- await sendKeys({ press: 'Tab' });
335
- expect(document.activeElement instanceof GlideCoreTreeItemIconButton).to.be
336
- .true;
337
- await sendKeys({ down: 'Shift' });
338
- await sendKeys({ press: 'Tab' });
339
- await sendKeys({ up: 'Shift' });
340
- expect(document.activeElement === childItems[1]).to.be.true;
341
- });
342
- it('does not focus on a tree item menu unless that tree item is focused', async () => {
343
- const component = await fixture(html `
344
- <glide-core-tree>
345
- <glide-core-tree-item label="Child Item 1"> </glide-core-tree-item>
346
- <glide-core-tree-item label="Child Item 2">
347
- <glide-core-tree-item-menu slot="menu">
348
- <glide-core-menu-link label="Edit" url="/edit">
349
- </glide-core-menu-link>
350
- </glide-core-tree-item-menu>
351
- </glide-core-tree-item>
352
- </glide-core-tree>
353
- `);
354
- component.dispatchEvent(new Event('focusin'));
355
- const childItems = component.slotElements;
356
- childItems[0].focus();
357
- await sendKeys({ press: 'Tab' });
358
- expect(document.activeElement === document.body).to.be.true;
359
- childItems[1].focus();
360
- await sendKeys({ press: 'Tab' });
361
- expect(document.activeElement instanceof GlideCoreTreeItemMenu).to.be.true;
362
- });
363
- it('does not select a tree item if Enter is pressed while its tree item icon button is focused', async () => {
364
- const component = await fixture(html `
365
- <glide-core-tree>
366
- <glide-core-tree-item label="Child Item 1">
367
- <glide-core-tree-item-icon-button slot="suffix">
368
- <svg viewBox="0 0 24 24">
369
- <path d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
370
- </svg>
371
- </glide-core-tree-item-icon-button>
372
- </glide-core-tree-item>
373
- </glide-core-tree>
374
- `);
375
- component.dispatchEvent(new Event('focusin'));
376
- const childItems = component.slotElements;
377
- childItems[0].focus();
378
- await sendKeys({ press: 'Tab' });
379
- expect(document.activeElement instanceof GlideCoreTreeItemIconButton).to.be
380
- .true;
381
- await sendKeys({ press: 'Enter' });
382
- expect(childItems[0].hasAttribute('selected')).to.be.false;
383
- });