@furystack/shades-common-components 10.0.35 → 11.0.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 (295) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/esm/components/animations.spec.d.ts +2 -0
  3. package/esm/components/animations.spec.d.ts.map +1 -0
  4. package/esm/components/animations.spec.js +201 -0
  5. package/esm/components/animations.spec.js.map +1 -0
  6. package/esm/components/app-bar-link.js +21 -20
  7. package/esm/components/app-bar-link.js.map +1 -1
  8. package/esm/components/app-bar-link.spec.d.ts +2 -0
  9. package/esm/components/app-bar-link.spec.d.ts.map +1 -0
  10. package/esm/components/app-bar-link.spec.js +252 -0
  11. package/esm/components/app-bar-link.spec.js.map +1 -0
  12. package/esm/components/app-bar.js +21 -21
  13. package/esm/components/app-bar.js.map +1 -1
  14. package/esm/components/app-bar.spec.d.ts +2 -0
  15. package/esm/components/app-bar.spec.d.ts.map +1 -0
  16. package/esm/components/app-bar.spec.js +117 -0
  17. package/esm/components/app-bar.spec.js.map +1 -0
  18. package/esm/components/avatar.d.ts.map +1 -1
  19. package/esm/components/avatar.js +15 -19
  20. package/esm/components/avatar.js.map +1 -1
  21. package/esm/components/avatar.spec.d.ts +2 -0
  22. package/esm/components/avatar.spec.d.ts.map +1 -0
  23. package/esm/components/avatar.spec.js +114 -0
  24. package/esm/components/avatar.spec.js.map +1 -0
  25. package/esm/components/button.d.ts.map +1 -1
  26. package/esm/components/button.js +145 -156
  27. package/esm/components/button.js.map +1 -1
  28. package/esm/components/button.spec.d.ts +2 -0
  29. package/esm/components/button.spec.d.ts.map +1 -0
  30. package/esm/components/button.spec.js +155 -0
  31. package/esm/components/button.spec.js.map +1 -0
  32. package/esm/components/command-palette/command-palette-input.d.ts.map +1 -1
  33. package/esm/components/command-palette/command-palette-input.js +18 -16
  34. package/esm/components/command-palette/command-palette-input.js.map +1 -1
  35. package/esm/components/command-palette/command-palette-input.spec.d.ts +2 -0
  36. package/esm/components/command-palette/command-palette-input.spec.d.ts.map +1 -0
  37. package/esm/components/command-palette/command-palette-input.spec.js +233 -0
  38. package/esm/components/command-palette/command-palette-input.spec.js.map +1 -0
  39. package/esm/components/command-palette/command-palette-manager.spec.d.ts +2 -0
  40. package/esm/components/command-palette/command-palette-manager.spec.d.ts.map +1 -0
  41. package/esm/components/command-palette/command-palette-manager.spec.js +362 -0
  42. package/esm/components/command-palette/command-palette-manager.spec.js.map +1 -0
  43. package/esm/components/command-palette/command-palette-suggestion-list.d.ts.map +1 -1
  44. package/esm/components/command-palette/command-palette-suggestion-list.js +42 -46
  45. package/esm/components/command-palette/command-palette-suggestion-list.js.map +1 -1
  46. package/esm/components/command-palette/command-palette-suggestion-list.spec.d.ts +2 -0
  47. package/esm/components/command-palette/command-palette-suggestion-list.spec.d.ts.map +1 -0
  48. package/esm/components/command-palette/command-palette-suggestion-list.spec.js +376 -0
  49. package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -0
  50. package/esm/components/command-palette/index.d.ts.map +1 -1
  51. package/esm/components/command-palette/index.js +100 -110
  52. package/esm/components/command-palette/index.js.map +1 -1
  53. package/esm/components/command-palette/index.spec.d.ts +2 -0
  54. package/esm/components/command-palette/index.spec.d.ts.map +1 -0
  55. package/esm/components/command-palette/index.spec.js +509 -0
  56. package/esm/components/command-palette/index.spec.js.map +1 -0
  57. package/esm/components/data-grid/body.js +1 -1
  58. package/esm/components/data-grid/body.js.map +1 -1
  59. package/esm/components/data-grid/body.spec.d.ts +2 -0
  60. package/esm/components/data-grid/body.spec.d.ts.map +1 -0
  61. package/esm/components/data-grid/body.spec.js +228 -0
  62. package/esm/components/data-grid/body.spec.js.map +1 -0
  63. package/esm/components/data-grid/data-grid-row.d.ts.map +1 -1
  64. package/esm/components/data-grid/data-grid-row.js +49 -73
  65. package/esm/components/data-grid/data-grid-row.js.map +1 -1
  66. package/esm/components/data-grid/data-grid-row.spec.d.ts +2 -0
  67. package/esm/components/data-grid/data-grid-row.spec.d.ts.map +1 -0
  68. package/esm/components/data-grid/data-grid-row.spec.js +296 -0
  69. package/esm/components/data-grid/data-grid-row.spec.js.map +1 -0
  70. package/esm/components/data-grid/data-grid.d.ts.map +1 -1
  71. package/esm/components/data-grid/data-grid.js +35 -28
  72. package/esm/components/data-grid/data-grid.js.map +1 -1
  73. package/esm/components/data-grid/data-grid.spec.d.ts +2 -0
  74. package/esm/components/data-grid/data-grid.spec.d.ts.map +1 -0
  75. package/esm/components/data-grid/data-grid.spec.js +544 -0
  76. package/esm/components/data-grid/data-grid.spec.js.map +1 -0
  77. package/esm/components/data-grid/footer.js +21 -15
  78. package/esm/components/data-grid/footer.js.map +1 -1
  79. package/esm/components/data-grid/footer.spec.d.ts +2 -0
  80. package/esm/components/data-grid/footer.spec.d.ts.map +1 -0
  81. package/esm/components/data-grid/footer.spec.js +264 -0
  82. package/esm/components/data-grid/footer.spec.js.map +1 -0
  83. package/esm/components/data-grid/header.d.ts.map +1 -1
  84. package/esm/components/data-grid/header.js +55 -33
  85. package/esm/components/data-grid/header.js.map +1 -1
  86. package/esm/components/data-grid/header.spec.d.ts +2 -0
  87. package/esm/components/data-grid/header.spec.d.ts.map +1 -0
  88. package/esm/components/data-grid/header.spec.js +421 -0
  89. package/esm/components/data-grid/header.spec.js.map +1 -0
  90. package/esm/components/data-grid/selection-cell.d.ts.map +1 -1
  91. package/esm/components/data-grid/selection-cell.js +13 -6
  92. package/esm/components/data-grid/selection-cell.js.map +1 -1
  93. package/esm/components/data-grid/selection-cell.spec.d.ts +2 -0
  94. package/esm/components/data-grid/selection-cell.spec.d.ts.map +1 -0
  95. package/esm/components/data-grid/selection-cell.spec.js +118 -0
  96. package/esm/components/data-grid/selection-cell.spec.js.map +1 -0
  97. package/esm/components/fab.d.ts.map +1 -1
  98. package/esm/components/fab.js +10 -1
  99. package/esm/components/fab.js.map +1 -1
  100. package/esm/components/fab.spec.d.ts +2 -0
  101. package/esm/components/fab.spec.d.ts.map +1 -0
  102. package/esm/components/fab.spec.js +95 -0
  103. package/esm/components/fab.spec.js.map +1 -0
  104. package/esm/components/form.spec.d.ts +2 -0
  105. package/esm/components/form.spec.d.ts.map +1 -0
  106. package/esm/components/form.spec.js +314 -0
  107. package/esm/components/form.spec.js.map +1 -0
  108. package/esm/components/grid.d.ts.map +1 -1
  109. package/esm/components/grid.js +40 -37
  110. package/esm/components/grid.js.map +1 -1
  111. package/esm/components/grid.spec.d.ts +2 -0
  112. package/esm/components/grid.spec.d.ts.map +1 -0
  113. package/esm/components/grid.spec.js +316 -0
  114. package/esm/components/grid.spec.js.map +1 -0
  115. package/esm/components/inputs/autocomplete.spec.d.ts +2 -0
  116. package/esm/components/inputs/autocomplete.spec.d.ts.map +1 -0
  117. package/esm/components/inputs/autocomplete.spec.js +194 -0
  118. package/esm/components/inputs/autocomplete.spec.js.map +1 -0
  119. package/esm/components/inputs/input.d.ts.map +1 -1
  120. package/esm/components/inputs/input.js +141 -109
  121. package/esm/components/inputs/input.js.map +1 -1
  122. package/esm/components/inputs/input.spec.d.ts +2 -0
  123. package/esm/components/inputs/input.spec.d.ts.map +1 -0
  124. package/esm/components/inputs/input.spec.js +577 -0
  125. package/esm/components/inputs/input.spec.js.map +1 -0
  126. package/esm/components/inputs/text-area.d.ts.map +1 -1
  127. package/esm/components/inputs/text-area.js +54 -58
  128. package/esm/components/inputs/text-area.js.map +1 -1
  129. package/esm/components/inputs/text-area.spec.d.ts +2 -0
  130. package/esm/components/inputs/text-area.spec.d.ts.map +1 -0
  131. package/esm/components/inputs/text-area.spec.js +214 -0
  132. package/esm/components/inputs/text-area.spec.js.map +1 -0
  133. package/esm/components/loader.js +1 -1
  134. package/esm/components/loader.js.map +1 -1
  135. package/esm/components/loader.spec.d.ts +2 -0
  136. package/esm/components/loader.spec.d.ts.map +1 -0
  137. package/esm/components/loader.spec.js +251 -0
  138. package/esm/components/loader.spec.js.map +1 -0
  139. package/esm/components/modal.d.ts.map +1 -1
  140. package/esm/components/modal.js +11 -9
  141. package/esm/components/modal.js.map +1 -1
  142. package/esm/components/modal.spec.d.ts +2 -0
  143. package/esm/components/modal.spec.d.ts.map +1 -0
  144. package/esm/components/modal.spec.js +227 -0
  145. package/esm/components/modal.spec.js.map +1 -0
  146. package/esm/components/noty-list.d.ts.map +1 -1
  147. package/esm/components/noty-list.js +39 -40
  148. package/esm/components/noty-list.js.map +1 -1
  149. package/esm/components/noty-list.spec.d.ts +2 -0
  150. package/esm/components/noty-list.spec.d.ts.map +1 -0
  151. package/esm/components/noty-list.spec.js +486 -0
  152. package/esm/components/noty-list.spec.js.map +1 -0
  153. package/esm/components/paper.d.ts.map +1 -1
  154. package/esm/components/paper.js +15 -12
  155. package/esm/components/paper.js.map +1 -1
  156. package/esm/components/paper.spec.d.ts +2 -0
  157. package/esm/components/paper.spec.d.ts.map +1 -0
  158. package/esm/components/paper.spec.js +63 -0
  159. package/esm/components/paper.spec.js.map +1 -0
  160. package/esm/components/skeleton.js +1 -1
  161. package/esm/components/skeleton.js.map +1 -1
  162. package/esm/components/skeleton.spec.d.ts +2 -0
  163. package/esm/components/skeleton.spec.d.ts.map +1 -0
  164. package/esm/components/skeleton.spec.js +159 -0
  165. package/esm/components/skeleton.spec.js.map +1 -0
  166. package/esm/components/styles.spec.d.ts +2 -0
  167. package/esm/components/styles.spec.d.ts.map +1 -0
  168. package/esm/components/styles.spec.js +56 -0
  169. package/esm/components/styles.spec.js.map +1 -0
  170. package/esm/components/suggest/index.d.ts.map +1 -1
  171. package/esm/components/suggest/index.js +74 -83
  172. package/esm/components/suggest/index.js.map +1 -1
  173. package/esm/components/suggest/index.spec.d.ts +2 -0
  174. package/esm/components/suggest/index.spec.d.ts.map +1 -0
  175. package/esm/components/suggest/index.spec.js +515 -0
  176. package/esm/components/suggest/index.spec.js.map +1 -0
  177. package/esm/components/suggest/suggest-input.d.ts.map +1 -1
  178. package/esm/components/suggest/suggest-input.js +16 -17
  179. package/esm/components/suggest/suggest-input.js.map +1 -1
  180. package/esm/components/suggest/suggest-input.spec.d.ts +2 -0
  181. package/esm/components/suggest/suggest-input.spec.d.ts.map +1 -0
  182. package/esm/components/suggest/suggest-input.spec.js +138 -0
  183. package/esm/components/suggest/suggest-input.spec.js.map +1 -0
  184. package/esm/components/suggest/suggest-manager.spec.d.ts +2 -0
  185. package/esm/components/suggest/suggest-manager.spec.d.ts.map +1 -0
  186. package/esm/components/suggest/suggest-manager.spec.js +308 -0
  187. package/esm/components/suggest/suggest-manager.spec.js.map +1 -0
  188. package/esm/components/suggest/suggestion-list.d.ts.map +1 -1
  189. package/esm/components/suggest/suggestion-list.js +43 -48
  190. package/esm/components/suggest/suggestion-list.js.map +1 -1
  191. package/esm/components/suggest/suggestion-list.spec.d.ts +2 -0
  192. package/esm/components/suggest/suggestion-list.spec.d.ts.map +1 -0
  193. package/esm/components/suggest/suggestion-list.spec.js +252 -0
  194. package/esm/components/suggest/suggestion-list.spec.js.map +1 -0
  195. package/esm/components/tabs.d.ts.map +1 -1
  196. package/esm/components/tabs.js +32 -18
  197. package/esm/components/tabs.js.map +1 -1
  198. package/esm/components/tabs.spec.d.ts +2 -0
  199. package/esm/components/tabs.spec.d.ts.map +1 -0
  200. package/esm/components/tabs.spec.js +187 -0
  201. package/esm/components/tabs.spec.js.map +1 -0
  202. package/esm/components/wizard/index.d.ts.map +1 -1
  203. package/esm/components/wizard/index.js +10 -7
  204. package/esm/components/wizard/index.js.map +1 -1
  205. package/esm/components/wizard/index.spec.d.ts +2 -0
  206. package/esm/components/wizard/index.spec.d.ts.map +1 -0
  207. package/esm/components/wizard/index.spec.js +171 -0
  208. package/esm/components/wizard/index.spec.js.map +1 -0
  209. package/esm/services/collection-service.spec.js +391 -2
  210. package/esm/services/collection-service.spec.js.map +1 -1
  211. package/esm/services/css-variable-theme.d.ts.map +1 -1
  212. package/esm/services/css-variable-theme.js +21 -1
  213. package/esm/services/css-variable-theme.js.map +1 -1
  214. package/esm/services/css-variable-theme.spec.d.ts +2 -0
  215. package/esm/services/css-variable-theme.spec.d.ts.map +1 -0
  216. package/esm/services/css-variable-theme.spec.js +169 -0
  217. package/esm/services/css-variable-theme.spec.js.map +1 -0
  218. package/esm/services/default-palette.d.ts +4 -0
  219. package/esm/services/default-palette.d.ts.map +1 -1
  220. package/esm/services/default-palette.js +22 -0
  221. package/esm/services/default-palette.js.map +1 -1
  222. package/esm/services/theme-provider-service.d.ts +59 -1
  223. package/esm/services/theme-provider-service.d.ts.map +1 -1
  224. package/esm/services/theme-provider-service.js.map +1 -1
  225. package/esm/services/theme-provider-service.spec.d.ts +2 -0
  226. package/esm/services/theme-provider-service.spec.d.ts.map +1 -0
  227. package/esm/services/theme-provider-service.spec.js +166 -0
  228. package/esm/services/theme-provider-service.spec.js.map +1 -0
  229. package/package.json +2 -2
  230. package/src/components/animations.spec.ts +299 -0
  231. package/src/components/app-bar-link.spec.tsx +341 -0
  232. package/src/components/app-bar-link.tsx +21 -21
  233. package/src/components/app-bar.spec.tsx +142 -0
  234. package/src/components/app-bar.tsx +22 -22
  235. package/src/components/avatar.spec.tsx +146 -0
  236. package/src/components/avatar.tsx +17 -20
  237. package/src/components/button.spec.tsx +193 -0
  238. package/src/components/button.tsx +162 -197
  239. package/src/components/command-palette/command-palette-input.spec.tsx +320 -0
  240. package/src/components/command-palette/command-palette-input.tsx +19 -22
  241. package/src/components/command-palette/command-palette-manager.spec.ts +470 -0
  242. package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +499 -0
  243. package/src/components/command-palette/command-palette-suggestion-list.tsx +42 -46
  244. package/src/components/command-palette/index.spec.tsx +684 -0
  245. package/src/components/command-palette/index.tsx +107 -136
  246. package/src/components/data-grid/body.spec.tsx +340 -0
  247. package/src/components/data-grid/body.tsx +1 -1
  248. package/src/components/data-grid/data-grid-row.spec.tsx +382 -0
  249. package/src/components/data-grid/data-grid-row.tsx +50 -82
  250. package/src/components/data-grid/data-grid.spec.tsx +939 -0
  251. package/src/components/data-grid/data-grid.tsx +38 -35
  252. package/src/components/data-grid/footer.spec.tsx +344 -0
  253. package/src/components/data-grid/footer.tsx +19 -19
  254. package/src/components/data-grid/header.spec.tsx +563 -0
  255. package/src/components/data-grid/header.tsx +53 -44
  256. package/src/components/data-grid/selection-cell.spec.tsx +150 -0
  257. package/src/components/data-grid/selection-cell.tsx +12 -6
  258. package/src/components/fab.spec.tsx +108 -0
  259. package/src/components/fab.tsx +10 -1
  260. package/src/components/form.spec.tsx +481 -0
  261. package/src/components/grid.spec.tsx +334 -0
  262. package/src/components/grid.tsx +57 -63
  263. package/src/components/inputs/autocomplete.spec.tsx +258 -0
  264. package/src/components/inputs/input.spec.tsx +808 -0
  265. package/src/components/inputs/input.tsx +153 -139
  266. package/src/components/inputs/text-area.spec.tsx +285 -0
  267. package/src/components/inputs/text-area.tsx +53 -79
  268. package/src/components/loader.spec.tsx +346 -0
  269. package/src/components/loader.tsx +1 -1
  270. package/src/components/modal.spec.tsx +304 -0
  271. package/src/components/modal.tsx +11 -9
  272. package/src/components/noty-list.spec.tsx +631 -0
  273. package/src/components/noty-list.tsx +39 -50
  274. package/src/components/paper.spec.tsx +72 -0
  275. package/src/components/paper.tsx +15 -13
  276. package/src/components/skeleton.spec.tsx +219 -0
  277. package/src/components/skeleton.tsx +1 -1
  278. package/src/components/styles.spec.ts +70 -0
  279. package/src/components/suggest/index.spec.tsx +861 -0
  280. package/src/components/suggest/index.tsx +74 -101
  281. package/src/components/suggest/suggest-input.spec.tsx +181 -0
  282. package/src/components/suggest/suggest-input.tsx +16 -24
  283. package/src/components/suggest/suggest-manager.spec.ts +409 -0
  284. package/src/components/suggest/suggestion-list.spec.tsx +334 -0
  285. package/src/components/suggest/suggestion-list.tsx +43 -48
  286. package/src/components/tabs.spec.tsx +236 -0
  287. package/src/components/tabs.tsx +33 -21
  288. package/src/components/wizard/index.spec.tsx +224 -0
  289. package/src/components/wizard/index.tsx +10 -9
  290. package/src/services/collection-service.spec.ts +492 -3
  291. package/src/services/css-variable-theme.spec.ts +204 -0
  292. package/src/services/css-variable-theme.ts +21 -1
  293. package/src/services/default-palette.ts +22 -0
  294. package/src/services/theme-provider-service.spec.ts +195 -0
  295. package/src/services/theme-provider-service.ts +60 -2
@@ -0,0 +1,544 @@
1
+ import { Injector } from '@furystack/inject';
2
+ import { createComponent, initializeShadeRoot } from '@furystack/shades';
3
+ import { ObservableValue, sleepAsync } from '@furystack/utils';
4
+ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
+ import { CollectionService } from '../../services/collection-service.js';
6
+ import { DataGrid } from './data-grid.js';
7
+ describe('DataGrid', () => {
8
+ beforeEach(() => {
9
+ document.body.innerHTML = '<div id="root"></div>';
10
+ });
11
+ afterEach(() => {
12
+ document.body.innerHTML = '';
13
+ });
14
+ const createTestService = () => {
15
+ const service = new CollectionService();
16
+ service.data.setValue({
17
+ count: 3,
18
+ entries: [
19
+ { id: 1, name: 'First' },
20
+ { id: 2, name: 'Second' },
21
+ { id: 3, name: 'Third' },
22
+ ],
23
+ });
24
+ return service;
25
+ };
26
+ describe('rendering', () => {
27
+ it('should render with columns', async () => {
28
+ const injector = new Injector();
29
+ const rootElement = document.getElementById('root');
30
+ const service = createTestService();
31
+ const findOptions = new ObservableValue({});
32
+ initializeShadeRoot({
33
+ injector,
34
+ rootElement,
35
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
36
+ });
37
+ await sleepAsync(50);
38
+ const grid = document.querySelector('shade-data-grid');
39
+ expect(grid).not.toBeNull();
40
+ const headers = grid?.querySelectorAll('th');
41
+ expect(headers?.length).toBe(2);
42
+ service[Symbol.dispose]();
43
+ findOptions[Symbol.dispose]();
44
+ });
45
+ it('should render table structure', async () => {
46
+ const injector = new Injector();
47
+ const rootElement = document.getElementById('root');
48
+ const service = createTestService();
49
+ const findOptions = new ObservableValue({});
50
+ initializeShadeRoot({
51
+ injector,
52
+ rootElement,
53
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
54
+ });
55
+ await sleepAsync(50);
56
+ const grid = document.querySelector('shade-data-grid');
57
+ const table = grid?.querySelector('table');
58
+ const thead = grid?.querySelector('thead');
59
+ const tbody = grid?.querySelector('tbody');
60
+ expect(table).not.toBeNull();
61
+ expect(thead).not.toBeNull();
62
+ expect(tbody).not.toBeNull();
63
+ service[Symbol.dispose]();
64
+ findOptions[Symbol.dispose]();
65
+ });
66
+ it('should render custom header components when provided', async () => {
67
+ const injector = new Injector();
68
+ const rootElement = document.getElementById('root');
69
+ const service = createTestService();
70
+ const findOptions = new ObservableValue({});
71
+ initializeShadeRoot({
72
+ injector,
73
+ rootElement,
74
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {
75
+ id: () => createComponent("span", { "data-testid": "custom-header-id" }, "Custom ID Header"),
76
+ }, rowComponents: {} })),
77
+ });
78
+ await sleepAsync(50);
79
+ const grid = document.querySelector('shade-data-grid');
80
+ const customHeader = grid?.querySelector('[data-testid="custom-header-id"]');
81
+ expect(customHeader).not.toBeNull();
82
+ expect(customHeader?.textContent).toBe('Custom ID Header');
83
+ service[Symbol.dispose]();
84
+ findOptions[Symbol.dispose]();
85
+ });
86
+ it('should render default header components from headerComponents.default', async () => {
87
+ const injector = new Injector();
88
+ const rootElement = document.getElementById('root');
89
+ const service = createTestService();
90
+ const findOptions = new ObservableValue({});
91
+ initializeShadeRoot({
92
+ injector,
93
+ rootElement,
94
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {
95
+ default: (name) => createComponent("span", { "data-testid": `default-header-${name}` },
96
+ "Default: ",
97
+ name),
98
+ }, rowComponents: {} })),
99
+ });
100
+ await sleepAsync(50);
101
+ const grid = document.querySelector('shade-data-grid');
102
+ const defaultHeaderId = grid?.querySelector('[data-testid="default-header-id"]');
103
+ const defaultHeaderName = grid?.querySelector('[data-testid="default-header-name"]');
104
+ expect(defaultHeaderId?.textContent).toBe('Default: id');
105
+ expect(defaultHeaderName?.textContent).toBe('Default: name');
106
+ service[Symbol.dispose]();
107
+ findOptions[Symbol.dispose]();
108
+ });
109
+ it('should render DataGridHeader when no custom header is provided', async () => {
110
+ const injector = new Injector();
111
+ const rootElement = document.getElementById('root');
112
+ const service = createTestService();
113
+ const findOptions = new ObservableValue({});
114
+ initializeShadeRoot({
115
+ injector,
116
+ rootElement,
117
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
118
+ });
119
+ await sleepAsync(50);
120
+ const grid = document.querySelector('shade-data-grid');
121
+ const defaultHeaders = grid?.querySelectorAll('data-grid-header');
122
+ expect(defaultHeaders?.length).toBe(2);
123
+ service[Symbol.dispose]();
124
+ findOptions[Symbol.dispose]();
125
+ });
126
+ });
127
+ describe('focus management', () => {
128
+ it('should set focus on click', async () => {
129
+ const injector = new Injector();
130
+ const rootElement = document.getElementById('root');
131
+ const service = createTestService();
132
+ const findOptions = new ObservableValue({});
133
+ expect(service.hasFocus.getValue()).toBe(false);
134
+ initializeShadeRoot({
135
+ injector,
136
+ rootElement,
137
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
138
+ });
139
+ await sleepAsync(50);
140
+ const grid = document.querySelector('shade-data-grid');
141
+ const wrapper = grid?.querySelector('.shade-grid-wrapper');
142
+ wrapper?.click();
143
+ expect(service.hasFocus.getValue()).toBe(true);
144
+ service[Symbol.dispose]();
145
+ findOptions[Symbol.dispose]();
146
+ });
147
+ it('should lose focus on click outside', async () => {
148
+ const injector = new Injector();
149
+ const rootElement = document.getElementById('root');
150
+ const service = createTestService();
151
+ const findOptions = new ObservableValue({});
152
+ initializeShadeRoot({
153
+ injector,
154
+ rootElement,
155
+ jsxElement: (createComponent(createComponent, null,
156
+ createComponent("div", { "data-testid": "outside" }, "Outside"),
157
+ createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} }))),
158
+ });
159
+ await sleepAsync(50);
160
+ const grid = document.querySelector('shade-data-grid');
161
+ const wrapper = grid?.querySelector('.shade-grid-wrapper');
162
+ wrapper?.click();
163
+ expect(service.hasFocus.getValue()).toBe(true);
164
+ const outside = document.querySelector('[data-testid="outside"]');
165
+ outside?.dispatchEvent(new MouseEvent('click', { bubbles: true }));
166
+ expect(service.hasFocus.getValue()).toBe(false);
167
+ service[Symbol.dispose]();
168
+ findOptions[Symbol.dispose]();
169
+ });
170
+ });
171
+ describe('keyboard navigation', () => {
172
+ it('should handle ArrowDown to move focus to next entry', async () => {
173
+ const injector = new Injector();
174
+ const rootElement = document.getElementById('root');
175
+ const service = createTestService();
176
+ const findOptions = new ObservableValue({});
177
+ service.hasFocus.setValue(true);
178
+ service.focusedEntry.setValue(service.data.getValue().entries[0]);
179
+ initializeShadeRoot({
180
+ injector,
181
+ rootElement,
182
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
183
+ });
184
+ await sleepAsync(50);
185
+ const keydownEvent = new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true });
186
+ window.dispatchEvent(keydownEvent);
187
+ expect(service.focusedEntry.getValue()).toEqual({ id: 2, name: 'Second' });
188
+ service[Symbol.dispose]();
189
+ findOptions[Symbol.dispose]();
190
+ });
191
+ it('should handle ArrowUp to move focus to previous entry', async () => {
192
+ const injector = new Injector();
193
+ const rootElement = document.getElementById('root');
194
+ const service = createTestService();
195
+ const findOptions = new ObservableValue({});
196
+ service.hasFocus.setValue(true);
197
+ service.focusedEntry.setValue(service.data.getValue().entries[1]);
198
+ initializeShadeRoot({
199
+ injector,
200
+ rootElement,
201
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
202
+ });
203
+ await sleepAsync(50);
204
+ const keydownEvent = new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true });
205
+ window.dispatchEvent(keydownEvent);
206
+ expect(service.focusedEntry.getValue()).toEqual({ id: 1, name: 'First' });
207
+ service[Symbol.dispose]();
208
+ findOptions[Symbol.dispose]();
209
+ });
210
+ it('should handle Home to move focus to first entry', async () => {
211
+ const injector = new Injector();
212
+ const rootElement = document.getElementById('root');
213
+ const service = createTestService();
214
+ const findOptions = new ObservableValue({});
215
+ service.hasFocus.setValue(true);
216
+ service.focusedEntry.setValue(service.data.getValue().entries[2]);
217
+ initializeShadeRoot({
218
+ injector,
219
+ rootElement,
220
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
221
+ });
222
+ await sleepAsync(50);
223
+ const keydownEvent = new KeyboardEvent('keydown', { key: 'Home', bubbles: true });
224
+ window.dispatchEvent(keydownEvent);
225
+ expect(service.focusedEntry.getValue()).toEqual({ id: 1, name: 'First' });
226
+ service[Symbol.dispose]();
227
+ findOptions[Symbol.dispose]();
228
+ });
229
+ it('should handle End to move focus to last entry', async () => {
230
+ const injector = new Injector();
231
+ const rootElement = document.getElementById('root');
232
+ const service = createTestService();
233
+ const findOptions = new ObservableValue({});
234
+ service.hasFocus.setValue(true);
235
+ service.focusedEntry.setValue(service.data.getValue().entries[0]);
236
+ initializeShadeRoot({
237
+ injector,
238
+ rootElement,
239
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
240
+ });
241
+ await sleepAsync(50);
242
+ const keydownEvent = new KeyboardEvent('keydown', { key: 'End', bubbles: true });
243
+ window.dispatchEvent(keydownEvent);
244
+ expect(service.focusedEntry.getValue()).toEqual({ id: 3, name: 'Third' });
245
+ service[Symbol.dispose]();
246
+ findOptions[Symbol.dispose]();
247
+ });
248
+ it('should handle Tab to toggle focus', async () => {
249
+ const injector = new Injector();
250
+ const rootElement = document.getElementById('root');
251
+ const service = createTestService();
252
+ const findOptions = new ObservableValue({});
253
+ service.hasFocus.setValue(true);
254
+ initializeShadeRoot({
255
+ injector,
256
+ rootElement,
257
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
258
+ });
259
+ await sleepAsync(50);
260
+ const keydownEvent = new KeyboardEvent('keydown', { key: 'Tab', bubbles: true });
261
+ window.dispatchEvent(keydownEvent);
262
+ expect(service.hasFocus.getValue()).toBe(false);
263
+ service[Symbol.dispose]();
264
+ findOptions[Symbol.dispose]();
265
+ });
266
+ it('should handle Escape to clear selection and search', async () => {
267
+ const injector = new Injector();
268
+ const rootElement = document.getElementById('root');
269
+ const service = createTestService();
270
+ const findOptions = new ObservableValue({});
271
+ const { entries } = service.data.getValue();
272
+ service.hasFocus.setValue(true);
273
+ service.selection.setValue([entries[0], entries[1]]);
274
+ service.searchTerm.setValue('test');
275
+ initializeShadeRoot({
276
+ injector,
277
+ rootElement,
278
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
279
+ });
280
+ await sleepAsync(50);
281
+ const keydownEvent = new KeyboardEvent('keydown', { key: 'Escape', bubbles: true });
282
+ window.dispatchEvent(keydownEvent);
283
+ expect(service.selection.getValue()).toEqual([]);
284
+ expect(service.searchTerm.getValue()).toBe('');
285
+ service[Symbol.dispose]();
286
+ findOptions[Symbol.dispose]();
287
+ });
288
+ it('should handle Space to toggle selection of focused entry', async () => {
289
+ const injector = new Injector();
290
+ const rootElement = document.getElementById('root');
291
+ const service = createTestService();
292
+ const findOptions = new ObservableValue({});
293
+ const { entries } = service.data.getValue();
294
+ service.hasFocus.setValue(true);
295
+ service.focusedEntry.setValue(entries[0]);
296
+ initializeShadeRoot({
297
+ injector,
298
+ rootElement,
299
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
300
+ });
301
+ await sleepAsync(50);
302
+ const keydownEvent = new KeyboardEvent('keydown', { key: ' ', bubbles: true });
303
+ window.dispatchEvent(keydownEvent);
304
+ expect(service.selection.getValue()).toContain(entries[0]);
305
+ window.dispatchEvent(new KeyboardEvent('keydown', { key: ' ', bubbles: true }));
306
+ expect(service.selection.getValue()).not.toContain(entries[0]);
307
+ service[Symbol.dispose]();
308
+ findOptions[Symbol.dispose]();
309
+ });
310
+ it('should handle + to select all entries', async () => {
311
+ const injector = new Injector();
312
+ const rootElement = document.getElementById('root');
313
+ const service = createTestService();
314
+ const findOptions = new ObservableValue({});
315
+ service.hasFocus.setValue(true);
316
+ initializeShadeRoot({
317
+ injector,
318
+ rootElement,
319
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
320
+ });
321
+ await sleepAsync(50);
322
+ const keydownEvent = new KeyboardEvent('keydown', { key: '+', bubbles: true });
323
+ window.dispatchEvent(keydownEvent);
324
+ expect(service.selection.getValue().length).toBe(3);
325
+ service[Symbol.dispose]();
326
+ findOptions[Symbol.dispose]();
327
+ });
328
+ it('should handle - to deselect all entries', async () => {
329
+ const injector = new Injector();
330
+ const rootElement = document.getElementById('root');
331
+ const service = createTestService();
332
+ const findOptions = new ObservableValue({});
333
+ const { entries } = service.data.getValue();
334
+ service.hasFocus.setValue(true);
335
+ service.selection.setValue([...entries]);
336
+ initializeShadeRoot({
337
+ injector,
338
+ rootElement,
339
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
340
+ });
341
+ await sleepAsync(50);
342
+ const keydownEvent = new KeyboardEvent('keydown', { key: '-', bubbles: true });
343
+ window.dispatchEvent(keydownEvent);
344
+ expect(service.selection.getValue().length).toBe(0);
345
+ service[Symbol.dispose]();
346
+ findOptions[Symbol.dispose]();
347
+ });
348
+ it('should handle * to invert selection', async () => {
349
+ const injector = new Injector();
350
+ const rootElement = document.getElementById('root');
351
+ const service = createTestService();
352
+ const findOptions = new ObservableValue({});
353
+ const { entries } = service.data.getValue();
354
+ service.hasFocus.setValue(true);
355
+ service.selection.setValue([entries[0]]);
356
+ initializeShadeRoot({
357
+ injector,
358
+ rootElement,
359
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
360
+ });
361
+ await sleepAsync(50);
362
+ const keydownEvent = new KeyboardEvent('keydown', { key: '*', bubbles: true });
363
+ window.dispatchEvent(keydownEvent);
364
+ const selection = service.selection.getValue();
365
+ expect(selection).not.toContain(entries[0]);
366
+ expect(selection).toContain(entries[1]);
367
+ expect(selection).toContain(entries[2]);
368
+ service[Symbol.dispose]();
369
+ findOptions[Symbol.dispose]();
370
+ });
371
+ it('should not handle keyboard when not focused', async () => {
372
+ const injector = new Injector();
373
+ const rootElement = document.getElementById('root');
374
+ const service = createTestService();
375
+ const findOptions = new ObservableValue({});
376
+ service.hasFocus.setValue(false);
377
+ service.focusedEntry.setValue(service.data.getValue().entries[0]);
378
+ initializeShadeRoot({
379
+ injector,
380
+ rootElement,
381
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
382
+ });
383
+ await sleepAsync(50);
384
+ const keydownEvent = new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true });
385
+ window.dispatchEvent(keydownEvent);
386
+ expect(service.focusedEntry.getValue()).toEqual({ id: 1, name: 'First' });
387
+ service[Symbol.dispose]();
388
+ findOptions[Symbol.dispose]();
389
+ });
390
+ it('should handle Insert to toggle selection and move to next', async () => {
391
+ const injector = new Injector();
392
+ const rootElement = document.getElementById('root');
393
+ const service = createTestService();
394
+ const findOptions = new ObservableValue({});
395
+ const { entries } = service.data.getValue();
396
+ service.hasFocus.setValue(true);
397
+ service.focusedEntry.setValue(entries[0]);
398
+ initializeShadeRoot({
399
+ injector,
400
+ rootElement,
401
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
402
+ });
403
+ await sleepAsync(50);
404
+ const keydownEvent = new KeyboardEvent('keydown', { key: 'Insert', bubbles: true });
405
+ window.dispatchEvent(keydownEvent);
406
+ expect(service.selection.getValue()).toContain(entries[0]);
407
+ expect(service.focusedEntry.getValue()).toEqual(entries[1]);
408
+ service[Symbol.dispose]();
409
+ findOptions[Symbol.dispose]();
410
+ });
411
+ });
412
+ describe('styles', () => {
413
+ it('should apply wrapper styles when provided', async () => {
414
+ const injector = new Injector();
415
+ const rootElement = document.getElementById('root');
416
+ const service = createTestService();
417
+ const findOptions = new ObservableValue({});
418
+ initializeShadeRoot({
419
+ injector,
420
+ rootElement,
421
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {
422
+ wrapper: { backgroundColor: 'red' },
423
+ }, headerComponents: {}, rowComponents: {} })),
424
+ });
425
+ await sleepAsync(50);
426
+ const grid = document.querySelector('shade-data-grid');
427
+ expect(grid?.style.backgroundColor).toBe('red');
428
+ service[Symbol.dispose]();
429
+ findOptions[Symbol.dispose]();
430
+ });
431
+ it('should apply header styles when provided', async () => {
432
+ const injector = new Injector();
433
+ const rootElement = document.getElementById('root');
434
+ const service = createTestService();
435
+ const findOptions = new ObservableValue({});
436
+ initializeShadeRoot({
437
+ injector,
438
+ rootElement,
439
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {
440
+ header: { color: 'blue' },
441
+ }, headerComponents: {}, rowComponents: {} })),
442
+ });
443
+ await sleepAsync(50);
444
+ const grid = document.querySelector('shade-data-grid');
445
+ const headers = grid?.querySelectorAll('th');
446
+ expect(headers?.[0]?.style.color).toBe('blue');
447
+ service[Symbol.dispose]();
448
+ findOptions[Symbol.dispose]();
449
+ });
450
+ });
451
+ describe('empty and loading states', () => {
452
+ it('should show empty component when no data', async () => {
453
+ const injector = new Injector();
454
+ const rootElement = document.getElementById('root');
455
+ const service = new CollectionService();
456
+ const findOptions = new ObservableValue({});
457
+ initializeShadeRoot({
458
+ injector,
459
+ rootElement,
460
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {}, emptyComponent: createComponent("div", { "data-testid": "empty-state" }, "No data available") })),
461
+ });
462
+ await sleepAsync(50);
463
+ const grid = document.querySelector('shade-data-grid');
464
+ const emptyState = grid?.querySelector('[data-testid="empty-state"]');
465
+ expect(emptyState).not.toBeNull();
466
+ expect(emptyState?.textContent).toBe('No data available');
467
+ service[Symbol.dispose]();
468
+ findOptions[Symbol.dispose]();
469
+ });
470
+ });
471
+ describe('row interactions', () => {
472
+ it('should pass row click to collectionService', async () => {
473
+ const injector = new Injector();
474
+ const rootElement = document.getElementById('root');
475
+ const onRowClick = vi.fn();
476
+ const service = new CollectionService({ onRowClick });
477
+ const findOptions = new ObservableValue({});
478
+ service.data.setValue({
479
+ count: 1,
480
+ entries: [{ id: 1, name: 'Test' }],
481
+ });
482
+ initializeShadeRoot({
483
+ injector,
484
+ rootElement,
485
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
486
+ });
487
+ await sleepAsync(50);
488
+ const grid = document.querySelector('shade-data-grid');
489
+ const cell = grid?.querySelector('td');
490
+ cell?.click();
491
+ expect(onRowClick).toHaveBeenCalledWith({ id: 1, name: 'Test' });
492
+ service[Symbol.dispose]();
493
+ findOptions[Symbol.dispose]();
494
+ });
495
+ it('should pass row double click to collectionService', async () => {
496
+ const injector = new Injector();
497
+ const rootElement = document.getElementById('root');
498
+ const onRowDoubleClick = vi.fn();
499
+ const service = new CollectionService({ onRowDoubleClick });
500
+ const findOptions = new ObservableValue({});
501
+ service.data.setValue({
502
+ count: 1,
503
+ entries: [{ id: 1, name: 'Test' }],
504
+ });
505
+ initializeShadeRoot({
506
+ injector,
507
+ rootElement,
508
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
509
+ });
510
+ await sleepAsync(50);
511
+ const grid = document.querySelector('shade-data-grid');
512
+ const cell = grid?.querySelector('td');
513
+ const dblClickEvent = new MouseEvent('dblclick', { bubbles: true });
514
+ cell?.dispatchEvent(dblClickEvent);
515
+ expect(onRowDoubleClick).toHaveBeenCalledWith({ id: 1, name: 'Test' });
516
+ service[Symbol.dispose]();
517
+ findOptions[Symbol.dispose]();
518
+ });
519
+ });
520
+ describe('keyboard listener cleanup', () => {
521
+ it('should remove keyboard listener when component is disconnected', async () => {
522
+ const injector = new Injector();
523
+ const rootElement = document.getElementById('root');
524
+ const service = createTestService();
525
+ const findOptions = new ObservableValue({});
526
+ service.hasFocus.setValue(true);
527
+ service.focusedEntry.setValue(service.data.getValue().entries[0]);
528
+ initializeShadeRoot({
529
+ injector,
530
+ rootElement,
531
+ jsxElement: (createComponent(DataGrid, { columns: ['id', 'name'], collectionService: service, findOptions: findOptions, styles: {}, headerComponents: {}, rowComponents: {} })),
532
+ });
533
+ await sleepAsync(50);
534
+ const grid = document.querySelector('shade-data-grid');
535
+ grid.remove();
536
+ await sleepAsync(10);
537
+ window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }));
538
+ expect(service.focusedEntry.getValue()).toEqual({ id: 1, name: 'First' });
539
+ service[Symbol.dispose]();
540
+ findOptions[Symbol.dispose]();
541
+ });
542
+ });
543
+ });
544
+ //# sourceMappingURL=data-grid.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-grid.spec.js","sourceRoot":"","sources":["../../../src/components/data-grid/data-grid.spec.tsx"],"names":[],"mappings":"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"}