@furystack/shades-common-components 12.4.0 → 12.5.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 (263) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/esm/components/app-bar-link.spec.js +16 -19
  3. package/esm/components/app-bar-link.spec.js.map +1 -1
  4. package/esm/components/app-bar.spec.js +6 -4
  5. package/esm/components/app-bar.spec.js.map +1 -1
  6. package/esm/components/avatar.spec.js +9 -9
  7. package/esm/components/avatar.spec.js.map +1 -1
  8. package/esm/components/breadcrumb.spec.js +2 -2
  9. package/esm/components/breadcrumb.spec.js.map +1 -1
  10. package/esm/components/button-group.d.ts +32 -0
  11. package/esm/components/button-group.d.ts.map +1 -1
  12. package/esm/components/button-group.js +26 -2
  13. package/esm/components/button-group.js.map +1 -1
  14. package/esm/components/button-group.spec.js +127 -11
  15. package/esm/components/button-group.spec.js.map +1 -1
  16. package/esm/components/button.spec.js +4 -4
  17. package/esm/components/button.spec.js.map +1 -1
  18. package/esm/components/cache-view.spec.js +2 -3
  19. package/esm/components/cache-view.spec.js.map +1 -1
  20. package/esm/components/carousel.spec.js +47 -47
  21. package/esm/components/carousel.spec.js.map +1 -1
  22. package/esm/components/circular-progress.spec.js +2 -2
  23. package/esm/components/command-palette/command-palette-input.spec.js +23 -19
  24. package/esm/components/command-palette/command-palette-input.spec.js.map +1 -1
  25. package/esm/components/command-palette/command-palette-suggestion-list.spec.js +27 -27
  26. package/esm/components/command-palette/command-palette-suggestion-list.spec.js.map +1 -1
  27. package/esm/components/command-palette/index.spec.js +64 -51
  28. package/esm/components/command-palette/index.spec.js.map +1 -1
  29. package/esm/components/context-menu/context-menu.spec.js +33 -33
  30. package/esm/components/context-menu/context-menu.spec.js.map +1 -1
  31. package/esm/components/data-grid/body.spec.js +13 -13
  32. package/esm/components/data-grid/body.spec.js.map +1 -1
  33. package/esm/components/data-grid/data-grid-row.spec.js +8 -8
  34. package/esm/components/data-grid/data-grid-row.spec.js.map +1 -1
  35. package/esm/components/data-grid/data-grid.d.ts +40 -2
  36. package/esm/components/data-grid/data-grid.d.ts.map +1 -1
  37. package/esm/components/data-grid/data-grid.js +7 -10
  38. package/esm/components/data-grid/data-grid.js.map +1 -1
  39. package/esm/components/data-grid/data-grid.spec.js +71 -28
  40. package/esm/components/data-grid/data-grid.spec.js.map +1 -1
  41. package/esm/components/data-grid/filters/boolean-filter.d.ts +12 -0
  42. package/esm/components/data-grid/filters/boolean-filter.d.ts.map +1 -0
  43. package/esm/components/data-grid/filters/boolean-filter.js +27 -0
  44. package/esm/components/data-grid/filters/boolean-filter.js.map +1 -0
  45. package/esm/components/data-grid/filters/boolean-filter.spec.d.ts +2 -0
  46. package/esm/components/data-grid/filters/boolean-filter.spec.d.ts.map +1 -0
  47. package/esm/components/data-grid/filters/boolean-filter.spec.js +114 -0
  48. package/esm/components/data-grid/filters/boolean-filter.spec.js.map +1 -0
  49. package/esm/components/data-grid/filters/date-filter.d.ts +12 -0
  50. package/esm/components/data-grid/filters/date-filter.d.ts.map +1 -0
  51. package/esm/components/data-grid/filters/date-filter.js +109 -0
  52. package/esm/components/data-grid/filters/date-filter.js.map +1 -0
  53. package/esm/components/data-grid/filters/date-filter.spec.d.ts +2 -0
  54. package/esm/components/data-grid/filters/date-filter.spec.d.ts.map +1 -0
  55. package/esm/components/data-grid/filters/date-filter.spec.js +145 -0
  56. package/esm/components/data-grid/filters/date-filter.spec.js.map +1 -0
  57. package/esm/components/data-grid/filters/enum-filter.d.ts +16 -0
  58. package/esm/components/data-grid/filters/enum-filter.d.ts.map +1 -0
  59. package/esm/components/data-grid/filters/enum-filter.js +72 -0
  60. package/esm/components/data-grid/filters/enum-filter.js.map +1 -0
  61. package/esm/components/data-grid/filters/enum-filter.spec.d.ts +2 -0
  62. package/esm/components/data-grid/filters/enum-filter.spec.d.ts.map +1 -0
  63. package/esm/components/data-grid/filters/enum-filter.spec.js +136 -0
  64. package/esm/components/data-grid/filters/enum-filter.spec.js.map +1 -0
  65. package/esm/components/data-grid/filters/filter-dropdown.d.ts +6 -0
  66. package/esm/components/data-grid/filters/filter-dropdown.d.ts.map +1 -0
  67. package/esm/components/data-grid/filters/filter-dropdown.js +41 -0
  68. package/esm/components/data-grid/filters/filter-dropdown.js.map +1 -0
  69. package/esm/components/data-grid/filters/filter-dropdown.spec.d.ts +2 -0
  70. package/esm/components/data-grid/filters/filter-dropdown.spec.d.ts.map +1 -0
  71. package/esm/components/data-grid/filters/filter-dropdown.spec.js +69 -0
  72. package/esm/components/data-grid/filters/filter-dropdown.spec.js.map +1 -0
  73. package/esm/components/data-grid/filters/filter-styles.d.ts +24 -0
  74. package/esm/components/data-grid/filters/filter-styles.d.ts.map +1 -0
  75. package/esm/components/data-grid/filters/filter-styles.js +25 -0
  76. package/esm/components/data-grid/filters/filter-styles.js.map +1 -0
  77. package/esm/components/data-grid/filters/index.d.ts +7 -0
  78. package/esm/components/data-grid/filters/index.d.ts.map +1 -0
  79. package/esm/components/data-grid/filters/index.js +7 -0
  80. package/esm/components/data-grid/filters/index.js.map +1 -0
  81. package/esm/components/data-grid/filters/number-filter.d.ts +12 -0
  82. package/esm/components/data-grid/filters/number-filter.d.ts.map +1 -0
  83. package/esm/components/data-grid/filters/number-filter.js +65 -0
  84. package/esm/components/data-grid/filters/number-filter.js.map +1 -0
  85. package/esm/components/data-grid/filters/number-filter.spec.d.ts +2 -0
  86. package/esm/components/data-grid/filters/number-filter.spec.d.ts.map +1 -0
  87. package/esm/components/data-grid/filters/number-filter.spec.js +142 -0
  88. package/esm/components/data-grid/filters/number-filter.spec.js.map +1 -0
  89. package/esm/components/data-grid/filters/string-filter.d.ts +12 -0
  90. package/esm/components/data-grid/filters/string-filter.d.ts.map +1 -0
  91. package/esm/components/data-grid/filters/string-filter.js +63 -0
  92. package/esm/components/data-grid/filters/string-filter.js.map +1 -0
  93. package/esm/components/data-grid/filters/string-filter.spec.d.ts +2 -0
  94. package/esm/components/data-grid/filters/string-filter.spec.d.ts.map +1 -0
  95. package/esm/components/data-grid/filters/string-filter.spec.js +128 -0
  96. package/esm/components/data-grid/filters/string-filter.spec.js.map +1 -0
  97. package/esm/components/data-grid/footer.d.ts.map +1 -1
  98. package/esm/components/data-grid/footer.js +24 -9
  99. package/esm/components/data-grid/footer.js.map +1 -1
  100. package/esm/components/data-grid/footer.spec.js +38 -36
  101. package/esm/components/data-grid/footer.spec.js.map +1 -1
  102. package/esm/components/data-grid/header.d.ts +6 -9
  103. package/esm/components/data-grid/header.d.ts.map +1 -1
  104. package/esm/components/data-grid/header.js +51 -117
  105. package/esm/components/data-grid/header.js.map +1 -1
  106. package/esm/components/data-grid/header.spec.js +116 -187
  107. package/esm/components/data-grid/header.spec.js.map +1 -1
  108. package/esm/components/data-grid/index.d.ts +1 -0
  109. package/esm/components/data-grid/index.d.ts.map +1 -1
  110. package/esm/components/data-grid/index.js +1 -0
  111. package/esm/components/data-grid/index.js.map +1 -1
  112. package/esm/components/data-grid/selection-cell.spec.js +8 -8
  113. package/esm/components/data-grid/selection-cell.spec.js.map +1 -1
  114. package/esm/components/drawer/drawer-toggle-button.spec.js +22 -22
  115. package/esm/components/drawer/drawer-toggle-button.spec.js.map +1 -1
  116. package/esm/components/drawer/index.spec.js +36 -36
  117. package/esm/components/drawer/index.spec.js.map +1 -1
  118. package/esm/components/dropdown.spec.js +38 -30
  119. package/esm/components/dropdown.spec.js.map +1 -1
  120. package/esm/components/fab.spec.js +4 -4
  121. package/esm/components/fab.spec.js.map +1 -1
  122. package/esm/components/form.spec.js +37 -37
  123. package/esm/components/form.spec.js.map +1 -1
  124. package/esm/components/grid.spec.js +3 -3
  125. package/esm/components/grid.spec.js.map +1 -1
  126. package/esm/components/image.spec.js +55 -52
  127. package/esm/components/image.spec.js.map +1 -1
  128. package/esm/components/inputs/autocomplete.spec.js +7 -14
  129. package/esm/components/inputs/autocomplete.spec.js.map +1 -1
  130. package/esm/components/inputs/checkbox.spec.js +22 -22
  131. package/esm/components/inputs/checkbox.spec.js.map +1 -1
  132. package/esm/components/inputs/input-number.spec.js +47 -47
  133. package/esm/components/inputs/input-number.spec.js.map +1 -1
  134. package/esm/components/inputs/input.spec.js +53 -53
  135. package/esm/components/inputs/input.spec.js.map +1 -1
  136. package/esm/components/inputs/radio-group.spec.js +14 -14
  137. package/esm/components/inputs/radio-group.spec.js.map +1 -1
  138. package/esm/components/inputs/radio.spec.js +16 -16
  139. package/esm/components/inputs/radio.spec.js.map +1 -1
  140. package/esm/components/inputs/select.spec.js +74 -74
  141. package/esm/components/inputs/select.spec.js.map +1 -1
  142. package/esm/components/inputs/slider.spec.js +16 -16
  143. package/esm/components/inputs/slider.spec.js.map +1 -1
  144. package/esm/components/inputs/switch.spec.js +24 -24
  145. package/esm/components/inputs/switch.spec.js.map +1 -1
  146. package/esm/components/inputs/text-area.spec.js +17 -17
  147. package/esm/components/inputs/text-area.spec.js.map +1 -1
  148. package/esm/components/linear-progress.spec.js +2 -2
  149. package/esm/components/list/list.spec.js +36 -36
  150. package/esm/components/list/list.spec.js.map +1 -1
  151. package/esm/components/markdown/markdown-display.spec.js +15 -15
  152. package/esm/components/markdown/markdown-display.spec.js.map +1 -1
  153. package/esm/components/markdown/markdown-editor.spec.js +8 -8
  154. package/esm/components/markdown/markdown-editor.spec.js.map +1 -1
  155. package/esm/components/markdown/markdown-input.spec.js +17 -17
  156. package/esm/components/markdown/markdown-input.spec.js.map +1 -1
  157. package/esm/components/menu/menu.spec.js +28 -28
  158. package/esm/components/menu/menu.spec.js.map +1 -1
  159. package/esm/components/modal.spec.js +15 -18
  160. package/esm/components/modal.spec.js.map +1 -1
  161. package/esm/components/noty-list.spec.js +25 -23
  162. package/esm/components/noty-list.spec.js.map +1 -1
  163. package/esm/components/page-container/index.spec.js +16 -16
  164. package/esm/components/page-container/index.spec.js.map +1 -1
  165. package/esm/components/page-container/page-header.spec.js +16 -16
  166. package/esm/components/page-container/page-header.spec.js.map +1 -1
  167. package/esm/components/page-layout/index.spec.js +29 -29
  168. package/esm/components/page-layout/index.spec.js.map +1 -1
  169. package/esm/components/paper.spec.js +3 -3
  170. package/esm/components/paper.spec.js.map +1 -1
  171. package/esm/components/rating.spec.js +61 -61
  172. package/esm/components/rating.spec.js.map +1 -1
  173. package/esm/components/skeleton.spec.js +10 -6
  174. package/esm/components/skeleton.spec.js.map +1 -1
  175. package/esm/components/suggest/suggest-input.spec.js +4 -10
  176. package/esm/components/suggest/suggest-input.spec.js.map +1 -1
  177. package/esm/components/tabs.spec.js +30 -30
  178. package/esm/components/tabs.spec.js.map +1 -1
  179. package/esm/components/tree/tree.spec.js +27 -27
  180. package/esm/components/tree/tree.spec.js.map +1 -1
  181. package/esm/components/typography.spec.js +3 -3
  182. package/esm/components/typography.spec.js.map +1 -1
  183. package/esm/components/wizard/index.spec.js +5 -5
  184. package/esm/components/wizard/index.spec.js.map +1 -1
  185. package/esm/utils/promisify-animation.d.ts.map +1 -1
  186. package/esm/utils/promisify-animation.js +3 -0
  187. package/esm/utils/promisify-animation.js.map +1 -1
  188. package/package.json +2 -2
  189. package/src/components/app-bar-link.spec.tsx +16 -19
  190. package/src/components/app-bar.spec.tsx +6 -4
  191. package/src/components/avatar.spec.tsx +9 -9
  192. package/src/components/breadcrumb.spec.tsx +2 -2
  193. package/src/components/button-group.spec.tsx +155 -11
  194. package/src/components/button-group.tsx +49 -2
  195. package/src/components/button.spec.tsx +4 -4
  196. package/src/components/cache-view.spec.tsx +3 -3
  197. package/src/components/carousel.spec.tsx +47 -47
  198. package/src/components/circular-progress.spec.tsx +2 -2
  199. package/src/components/command-palette/command-palette-input.spec.tsx +23 -19
  200. package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +27 -27
  201. package/src/components/command-palette/index.spec.tsx +64 -51
  202. package/src/components/context-menu/context-menu.spec.tsx +33 -33
  203. package/src/components/data-grid/body.spec.tsx +13 -13
  204. package/src/components/data-grid/data-grid-row.spec.tsx +8 -8
  205. package/src/components/data-grid/data-grid.spec.tsx +106 -28
  206. package/src/components/data-grid/data-grid.tsx +44 -11
  207. package/src/components/data-grid/filters/boolean-filter.spec.tsx +142 -0
  208. package/src/components/data-grid/filters/boolean-filter.tsx +45 -0
  209. package/src/components/data-grid/filters/date-filter.spec.tsx +181 -0
  210. package/src/components/data-grid/filters/date-filter.tsx +162 -0
  211. package/src/components/data-grid/filters/enum-filter.spec.tsx +168 -0
  212. package/src/components/data-grid/filters/enum-filter.tsx +119 -0
  213. package/src/components/data-grid/filters/filter-dropdown.spec.tsx +89 -0
  214. package/src/components/data-grid/filters/filter-dropdown.tsx +60 -0
  215. package/src/components/data-grid/filters/filter-styles.ts +26 -0
  216. package/src/components/data-grid/filters/index.ts +6 -0
  217. package/src/components/data-grid/filters/number-filter.spec.tsx +174 -0
  218. package/src/components/data-grid/filters/number-filter.tsx +115 -0
  219. package/src/components/data-grid/filters/string-filter.spec.tsx +157 -0
  220. package/src/components/data-grid/filters/string-filter.tsx +112 -0
  221. package/src/components/data-grid/footer.spec.tsx +38 -36
  222. package/src/components/data-grid/footer.tsx +21 -8
  223. package/src/components/data-grid/header.spec.tsx +128 -212
  224. package/src/components/data-grid/header.tsx +95 -183
  225. package/src/components/data-grid/index.tsx +1 -0
  226. package/src/components/data-grid/selection-cell.spec.tsx +8 -8
  227. package/src/components/drawer/drawer-toggle-button.spec.tsx +22 -22
  228. package/src/components/drawer/index.spec.tsx +36 -36
  229. package/src/components/dropdown.spec.tsx +38 -30
  230. package/src/components/fab.spec.tsx +4 -4
  231. package/src/components/form.spec.tsx +37 -37
  232. package/src/components/grid.spec.tsx +3 -3
  233. package/src/components/image.spec.tsx +55 -52
  234. package/src/components/inputs/autocomplete.spec.tsx +7 -14
  235. package/src/components/inputs/checkbox.spec.tsx +22 -22
  236. package/src/components/inputs/input-number.spec.tsx +47 -47
  237. package/src/components/inputs/input.spec.tsx +53 -53
  238. package/src/components/inputs/radio-group.spec.tsx +14 -14
  239. package/src/components/inputs/radio.spec.tsx +16 -16
  240. package/src/components/inputs/select.spec.tsx +74 -74
  241. package/src/components/inputs/slider.spec.tsx +16 -16
  242. package/src/components/inputs/switch.spec.tsx +24 -24
  243. package/src/components/inputs/text-area.spec.tsx +17 -17
  244. package/src/components/linear-progress.spec.tsx +2 -2
  245. package/src/components/list/list.spec.tsx +36 -36
  246. package/src/components/markdown/markdown-display.spec.tsx +15 -15
  247. package/src/components/markdown/markdown-editor.spec.tsx +8 -8
  248. package/src/components/markdown/markdown-input.spec.tsx +17 -17
  249. package/src/components/menu/menu.spec.tsx +28 -28
  250. package/src/components/modal.spec.tsx +15 -18
  251. package/src/components/noty-list.spec.tsx +25 -23
  252. package/src/components/page-container/index.spec.tsx +16 -16
  253. package/src/components/page-container/page-header.spec.tsx +16 -16
  254. package/src/components/page-layout/index.spec.tsx +29 -29
  255. package/src/components/paper.spec.tsx +3 -3
  256. package/src/components/rating.spec.tsx +61 -61
  257. package/src/components/skeleton.spec.tsx +10 -6
  258. package/src/components/suggest/suggest-input.spec.tsx +4 -10
  259. package/src/components/tabs.spec.tsx +30 -30
  260. package/src/components/tree/tree.spec.tsx +27 -27
  261. package/src/components/typography.spec.tsx +3 -3
  262. package/src/components/wizard/index.spec.tsx +5 -5
  263. package/src/utils/promisify-animation.ts +3 -0
@@ -1,6 +1,6 @@
1
1
  import { Injector } from '@furystack/inject'
2
- import { createComponent, initializeShadeRoot } from '@furystack/shades'
3
- import { sleepAsync, usingAsync } from '@furystack/utils'
2
+ import { createComponent, flushUpdates, initializeShadeRoot } from '@furystack/shades'
3
+ import { usingAsync } from '@furystack/utils'
4
4
  import { afterEach, beforeEach, describe, expect, it } from 'vitest'
5
5
  import { Image, ImageGroup } from './image.js'
6
6
 
@@ -25,7 +25,7 @@ describe('Image component', () => {
25
25
  jsxElement: <Image src={testSrc} alt={testAlt} />,
26
26
  })
27
27
 
28
- await sleepAsync(50)
28
+ await flushUpdates()
29
29
 
30
30
  const imageComponent = document.querySelector('shade-image')
31
31
  expect(imageComponent).not.toBeNull()
@@ -47,7 +47,7 @@ describe('Image component', () => {
47
47
  jsxElement: <Image src="https://example.com/photo.jpg" />,
48
48
  })
49
49
 
50
- await sleepAsync(50)
50
+ await flushUpdates()
51
51
 
52
52
  const img = document.querySelector('shade-image img')
53
53
  expect(img).not.toBeNull()
@@ -65,7 +65,7 @@ describe('Image component', () => {
65
65
  jsxElement: <Image src="https://example.com/photo.jpg" width="300px" height="200px" />,
66
66
  })
67
67
 
68
- await sleepAsync(50)
68
+ await flushUpdates()
69
69
 
70
70
  const img = document.querySelector('shade-image img') as HTMLImageElement
71
71
  expect(img).not.toBeNull()
@@ -84,7 +84,7 @@ describe('Image component', () => {
84
84
  jsxElement: <Image src="https://example.com/photo.jpg" objectFit="contain" />,
85
85
  })
86
86
 
87
- await sleepAsync(50)
87
+ await flushUpdates()
88
88
 
89
89
  const img = document.querySelector('shade-image img') as HTMLImageElement
90
90
  expect(img).not.toBeNull()
@@ -102,7 +102,7 @@ describe('Image component', () => {
102
102
  jsxElement: <Image src="https://example.com/photo.jpg" lazy />,
103
103
  })
104
104
 
105
- await sleepAsync(50)
105
+ await flushUpdates()
106
106
 
107
107
  const img = document.querySelector('shade-image img') as HTMLImageElement
108
108
  expect(img).not.toBeNull()
@@ -120,7 +120,7 @@ describe('Image component', () => {
120
120
  jsxElement: <Image src="https://example.com/photo.jpg" />,
121
121
  })
122
122
 
123
- await sleepAsync(50)
123
+ await flushUpdates()
124
124
 
125
125
  const img = document.querySelector('shade-image img') as HTMLImageElement
126
126
  expect(img).not.toBeNull()
@@ -138,7 +138,7 @@ describe('Image component', () => {
138
138
  jsxElement: <Image src="invalid-url" />,
139
139
  })
140
140
 
141
- await sleepAsync(50)
141
+ await flushUpdates()
142
142
 
143
143
  const imageComponent = document.querySelector('shade-image')
144
144
  expect(imageComponent).not.toBeNull()
@@ -149,7 +149,7 @@ describe('Image component', () => {
149
149
  const errorEvent = new Event('error')
150
150
  img.dispatchEvent(errorEvent)
151
151
 
152
- await sleepAsync(50)
152
+ await flushUpdates()
153
153
 
154
154
  expect(img.style.display).toBe('none')
155
155
 
@@ -170,7 +170,7 @@ describe('Image component', () => {
170
170
  jsxElement: <Image src="invalid-url" fallback={<span data-testid="custom-fallback">Image not found</span>} />,
171
171
  })
172
172
 
173
- await sleepAsync(50)
173
+ await flushUpdates()
174
174
 
175
175
  const imageComponent = document.querySelector('shade-image')
176
176
  const img = imageComponent?.querySelector('img') as HTMLImageElement
@@ -178,7 +178,7 @@ describe('Image component', () => {
178
178
  const errorEvent = new Event('error')
179
179
  img.dispatchEvent(errorEvent)
180
180
 
181
- await sleepAsync(50)
181
+ await flushUpdates()
182
182
 
183
183
  const customFallback = imageComponent?.querySelector('[data-testid="custom-fallback"]')
184
184
  expect(customFallback).not.toBeNull()
@@ -196,7 +196,7 @@ describe('Image component', () => {
196
196
  jsxElement: <Image src="https://example.com/photo.jpg" preview />,
197
197
  })
198
198
 
199
- await sleepAsync(50)
199
+ await flushUpdates()
200
200
 
201
201
  const imageComponent = document.querySelector('shade-image') as HTMLElement
202
202
  expect(imageComponent).not.toBeNull()
@@ -217,7 +217,7 @@ describe('Image component', () => {
217
217
  jsxElement: <Image src="https://example.com/photo.jpg" />,
218
218
  })
219
219
 
220
- await sleepAsync(50)
220
+ await flushUpdates()
221
221
 
222
222
  const imageComponent = document.querySelector('shade-image') as HTMLElement
223
223
  expect(imageComponent.hasAttribute('data-preview')).toBe(false)
@@ -237,12 +237,12 @@ describe('Image component', () => {
237
237
  jsxElement: <Image src="https://example.com/photo.jpg" alt="My photo" preview />,
238
238
  })
239
239
 
240
- await sleepAsync(50)
240
+ await flushUpdates()
241
241
 
242
242
  const img = document.querySelector('shade-image img') as HTMLImageElement
243
243
  img.click()
244
244
 
245
- await sleepAsync(50)
245
+ await flushUpdates()
246
246
 
247
247
  const lightbox = document.querySelector('.lightbox-backdrop')
248
248
  expect(lightbox).not.toBeNull()
@@ -271,12 +271,12 @@ describe('Image component', () => {
271
271
  jsxElement: <Image src="https://example.com/photo.jpg" />,
272
272
  })
273
273
 
274
- await sleepAsync(50)
274
+ await flushUpdates()
275
275
 
276
276
  const img = document.querySelector('shade-image img') as HTMLImageElement
277
277
  img.click()
278
278
 
279
- await sleepAsync(50)
279
+ await flushUpdates()
280
280
 
281
281
  const lightbox = document.querySelector('.lightbox-backdrop')
282
282
  expect(lightbox).toBeNull()
@@ -293,19 +293,20 @@ describe('Image component', () => {
293
293
  jsxElement: <Image src="https://example.com/photo.jpg" preview />,
294
294
  })
295
295
 
296
- await sleepAsync(50)
296
+ await flushUpdates()
297
297
 
298
298
  const img = document.querySelector('shade-image img') as HTMLImageElement
299
299
  img.click()
300
300
 
301
- await sleepAsync(50)
301
+ await flushUpdates()
302
302
 
303
303
  let lightbox = document.querySelector('.lightbox-backdrop')
304
304
  expect(lightbox).not.toBeNull()
305
305
 
306
306
  document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape' }))
307
307
 
308
- await sleepAsync(200)
308
+ await flushUpdates()
309
+ await flushUpdates()
309
310
 
310
311
  lightbox = document.querySelector('.lightbox-backdrop')
311
312
  expect(lightbox).toBeNull()
@@ -322,12 +323,12 @@ describe('Image component', () => {
322
323
  jsxElement: <Image src="https://example.com/photo.jpg" preview />,
323
324
  })
324
325
 
325
- await sleepAsync(50)
326
+ await flushUpdates()
326
327
 
327
328
  const img = document.querySelector('shade-image img') as HTMLImageElement
328
329
  img.click()
329
330
 
330
- await sleepAsync(50)
331
+ await flushUpdates()
331
332
 
332
333
  const lightbox = document.querySelector('.lightbox-backdrop')
333
334
  expect(lightbox).not.toBeNull()
@@ -354,7 +355,7 @@ describe('Image component', () => {
354
355
  jsxElement: <Image src="https://example.com/photo.jpg" alt="Test" />,
355
356
  })
356
357
 
357
- await sleepAsync(50)
358
+ await flushUpdates()
358
359
 
359
360
  const imageComponent = document.querySelector('shade-image') as HTMLElement
360
361
  expect(imageComponent.getAttribute('data-src')).toBe('https://example.com/photo.jpg')
@@ -388,7 +389,7 @@ describe('ImageGroup component', () => {
388
389
  ),
389
390
  })
390
391
 
391
- await sleepAsync(50)
392
+ await flushUpdates()
392
393
 
393
394
  const group = document.querySelector('shade-image-group')
394
395
  expect(group).not.toBeNull()
@@ -413,7 +414,7 @@ describe('ImageGroup component', () => {
413
414
  ),
414
415
  })
415
416
 
416
- await sleepAsync(50)
417
+ await flushUpdates()
417
418
 
418
419
  const group = document.querySelector('shade-image-group') as HTMLElement
419
420
  expect(group).not.toBeNull()
@@ -437,7 +438,7 @@ describe('ImageGroup component', () => {
437
438
  ),
438
439
  })
439
440
 
440
- await sleepAsync(50)
441
+ await flushUpdates()
441
442
 
442
443
  const images = document.querySelectorAll('shade-image img')
443
444
  expect(images.length).toBe(3)
@@ -445,7 +446,7 @@ describe('ImageGroup component', () => {
445
446
  // Click the second image
446
447
  ;(images[1] as HTMLImageElement).click()
447
448
 
448
- await sleepAsync(50)
449
+ await flushUpdates()
449
450
 
450
451
  const lightbox = document.querySelector('.lightbox-backdrop')
451
452
  expect(lightbox).not.toBeNull()
@@ -482,12 +483,12 @@ describe('ImageGroup component', () => {
482
483
  ),
483
484
  })
484
485
 
485
- await sleepAsync(50)
486
+ await flushUpdates()
486
487
 
487
488
  const images = document.querySelectorAll('shade-image img')
488
489
  ;(images[0] as HTMLImageElement).click()
489
490
 
490
- await sleepAsync(50)
491
+ await flushUpdates()
491
492
 
492
493
  const lightbox = document.querySelector('.lightbox-backdrop')
493
494
  expect(lightbox).not.toBeNull()
@@ -499,7 +500,7 @@ describe('ImageGroup component', () => {
499
500
  const nextBtn = lightbox?.querySelector('.lightbox-next') as HTMLButtonElement
500
501
  nextBtn.click()
501
502
 
502
- await sleepAsync(50)
503
+ await flushUpdates()
503
504
 
504
505
  expect(lightboxImg.src).toBe('https://example.com/2.jpg')
505
506
 
@@ -527,12 +528,12 @@ describe('ImageGroup component', () => {
527
528
  ),
528
529
  })
529
530
 
530
- await sleepAsync(50)
531
+ await flushUpdates()
531
532
 
532
533
  const images = document.querySelectorAll('shade-image img')
533
534
  ;(images[0] as HTMLImageElement).click()
534
535
 
535
- await sleepAsync(50)
536
+ await flushUpdates()
536
537
 
537
538
  const lightbox = document.querySelector('.lightbox-backdrop')
538
539
  const lightboxImg = lightbox?.querySelector('.lightbox-image') as HTMLImageElement
@@ -541,7 +542,7 @@ describe('ImageGroup component', () => {
541
542
  const prevBtn = lightbox?.querySelector('.lightbox-prev') as HTMLButtonElement
542
543
  prevBtn.click()
543
544
 
544
- await sleepAsync(50)
545
+ await flushUpdates()
545
546
 
546
547
  expect(lightboxImg.src).toBe('https://example.com/3.jpg')
547
548
 
@@ -568,12 +569,12 @@ describe('ImageGroup component', () => {
568
569
  ),
569
570
  })
570
571
 
571
- await sleepAsync(50)
572
+ await flushUpdates()
572
573
 
573
574
  const images = document.querySelectorAll('shade-image img')
574
575
  ;(images[0] as HTMLImageElement).click()
575
576
 
576
- await sleepAsync(50)
577
+ await flushUpdates()
577
578
 
578
579
  const lightbox = document.querySelector('.lightbox-backdrop')
579
580
  expect(lightbox).not.toBeNull()
@@ -583,13 +584,13 @@ describe('ImageGroup component', () => {
583
584
 
584
585
  // Navigate with ArrowRight
585
586
  document.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight' }))
586
- await sleepAsync(50)
587
+ await flushUpdates()
587
588
 
588
589
  expect(lightboxImg.src).toBe('https://example.com/2.jpg')
589
590
 
590
591
  // Navigate with ArrowLeft
591
592
  document.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft' }))
592
- await sleepAsync(50)
593
+ await flushUpdates()
593
594
 
594
595
  expect(lightboxImg.src).toBe('https://example.com/1.jpg')
595
596
 
@@ -608,12 +609,12 @@ describe('ImageGroup component', () => {
608
609
  jsxElement: <Image src="https://example.com/photo.jpg" preview />,
609
610
  })
610
611
 
611
- await sleepAsync(50)
612
+ await flushUpdates()
612
613
 
613
614
  const img = document.querySelector('shade-image img') as HTMLImageElement
614
615
  img.click()
615
616
 
616
- await sleepAsync(50)
617
+ await flushUpdates()
617
618
 
618
619
  const lightbox = document.querySelector('.lightbox-backdrop')
619
620
  expect(lightbox).not.toBeNull()
@@ -623,14 +624,14 @@ describe('ImageGroup component', () => {
623
624
  // Zoom in
624
625
  const zoomInBtn = lightbox?.querySelector('.lightbox-zoom-in') as HTMLButtonElement
625
626
  zoomInBtn.click()
626
- await sleepAsync(50)
627
+ await flushUpdates()
627
628
 
628
629
  expect(lightboxImg.style.transform).toContain('scale(1.25)')
629
630
 
630
631
  // Zoom out
631
632
  const zoomOutBtn = lightbox?.querySelector('.lightbox-zoom-out') as HTMLButtonElement
632
633
  zoomOutBtn.click()
633
- await sleepAsync(50)
634
+ await flushUpdates()
634
635
 
635
636
  expect(lightboxImg.style.transform).toContain('scale(1)')
636
637
 
@@ -649,19 +650,19 @@ describe('ImageGroup component', () => {
649
650
  jsxElement: <Image src="https://example.com/photo.jpg" preview />,
650
651
  })
651
652
 
652
- await sleepAsync(50)
653
+ await flushUpdates()
653
654
 
654
655
  const img = document.querySelector('shade-image img') as HTMLImageElement
655
656
  img.click()
656
657
 
657
- await sleepAsync(50)
658
+ await flushUpdates()
658
659
 
659
660
  const lightbox = document.querySelector('.lightbox-backdrop')
660
661
  const lightboxImg = lightbox?.querySelector('.lightbox-image') as HTMLImageElement
661
662
 
662
663
  const rotateBtn = lightbox?.querySelector('.lightbox-rotate') as HTMLButtonElement
663
664
  rotateBtn.click()
664
- await sleepAsync(50)
665
+ await flushUpdates()
665
666
 
666
667
  expect(lightboxImg.style.transform).toContain('rotate(90deg)')
667
668
 
@@ -680,12 +681,12 @@ describe('ImageGroup component', () => {
680
681
  jsxElement: <Image src="https://example.com/photo.jpg" preview />,
681
682
  })
682
683
 
683
- await sleepAsync(50)
684
+ await flushUpdates()
684
685
 
685
686
  const img = document.querySelector('shade-image img') as HTMLImageElement
686
687
  img.click()
687
688
 
688
- await sleepAsync(50)
689
+ await flushUpdates()
689
690
 
690
691
  let lightbox = document.querySelector('.lightbox-backdrop')
691
692
  expect(lightbox).not.toBeNull()
@@ -693,7 +694,8 @@ describe('ImageGroup component', () => {
693
694
  const closeBtn = lightbox?.querySelector('.lightbox-close') as HTMLButtonElement
694
695
  closeBtn.click()
695
696
 
696
- await sleepAsync(200)
697
+ await flushUpdates()
698
+ await flushUpdates()
697
699
 
698
700
  lightbox = document.querySelector('.lightbox-backdrop')
699
701
  expect(lightbox).toBeNull()
@@ -710,12 +712,12 @@ describe('ImageGroup component', () => {
710
712
  jsxElement: <Image src="https://example.com/photo.jpg" preview />,
711
713
  })
712
714
 
713
- await sleepAsync(50)
715
+ await flushUpdates()
714
716
 
715
717
  const img = document.querySelector('shade-image img') as HTMLImageElement
716
718
  img.click()
717
719
 
718
- await sleepAsync(50)
720
+ await flushUpdates()
719
721
 
720
722
  const lightbox = document.querySelector('.lightbox-backdrop') as HTMLElement
721
723
  expect(lightbox).not.toBeNull()
@@ -723,7 +725,8 @@ describe('ImageGroup component', () => {
723
725
  // Click on the backdrop itself (not child elements)
724
726
  lightbox.dispatchEvent(new MouseEvent('click', { bubbles: true }))
725
727
 
726
- await sleepAsync(200)
728
+ await flushUpdates()
729
+ await flushUpdates()
727
730
 
728
731
  expect(document.querySelector('.lightbox-backdrop')).toBeNull()
729
732
  })
@@ -739,7 +742,7 @@ describe('ImageGroup component', () => {
739
742
  jsxElement: <Image src="https://example.com/photo.jpg" style={{ margin: '10px' }} />,
740
743
  })
741
744
 
742
- await sleepAsync(50)
745
+ await flushUpdates()
743
746
 
744
747
  const imageComponent = document.querySelector('shade-image') as HTMLElement
745
748
  expect(imageComponent.style.margin).toBe('10px')
@@ -1,6 +1,6 @@
1
1
  import { Injector } from '@furystack/inject'
2
2
  import { createComponent, flushUpdates, initializeShadeRoot } from '@furystack/shades'
3
- import { sleepAsync, usingAsync } from '@furystack/utils'
3
+ import { usingAsync } from '@furystack/utils'
4
4
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
5
5
  import { Autocomplete } from './autocomplete.js'
6
6
 
@@ -25,7 +25,6 @@ describe('Autocomplete component', () => {
25
25
  })
26
26
 
27
27
  await flushUpdates()
28
- await sleepAsync(50)
29
28
 
30
29
  const autocomplete = document.querySelector('shade-autocomplete')
31
30
  expect(autocomplete).not.toBeNull()
@@ -55,7 +54,8 @@ describe('Autocomplete component', () => {
55
54
  })
56
55
 
57
56
  await flushUpdates()
58
- await sleepAsync(50)
57
+ await new Promise((resolve) => setTimeout(resolve, 0))
58
+ await flushUpdates()
59
59
 
60
60
  const autocomplete = document.querySelector('shade-autocomplete')
61
61
  const input = autocomplete?.querySelector('input')
@@ -80,7 +80,6 @@ describe('Autocomplete component', () => {
80
80
  })
81
81
 
82
82
  await flushUpdates()
83
- await sleepAsync(50)
84
83
 
85
84
  const autocomplete = document.querySelector('shade-autocomplete')
86
85
  const input = autocomplete?.querySelector('input') as HTMLInputElement
@@ -90,7 +89,7 @@ describe('Autocomplete component', () => {
90
89
  const changeEvent = new Event('change', { bubbles: true })
91
90
  input.dispatchEvent(changeEvent)
92
91
 
93
- await sleepAsync(50)
92
+ await flushUpdates()
94
93
 
95
94
  expect(onchange).toHaveBeenCalledWith('foo')
96
95
  })
@@ -109,7 +108,6 @@ describe('Autocomplete component', () => {
109
108
  })
110
109
 
111
110
  await flushUpdates()
112
- await sleepAsync(50)
113
111
 
114
112
  const autocomplete = document.querySelector('shade-autocomplete')
115
113
  const input = autocomplete?.querySelector('input') as HTMLInputElement
@@ -118,7 +116,7 @@ describe('Autocomplete component', () => {
118
116
  const changeEvent = new Event('change', { bubbles: true })
119
117
  input.dispatchEvent(changeEvent)
120
118
 
121
- await sleepAsync(50)
119
+ await flushUpdates()
122
120
 
123
121
  expect(onchange).toHaveBeenCalledWith('custom-value')
124
122
  })
@@ -137,7 +135,6 @@ describe('Autocomplete component', () => {
137
135
  })
138
136
 
139
137
  await flushUpdates()
140
- await sleepAsync(50)
141
138
 
142
139
  const autocomplete = document.querySelector('shade-autocomplete')
143
140
  const input = autocomplete?.querySelector('input') as HTMLInputElement
@@ -148,7 +145,7 @@ describe('Autocomplete component', () => {
148
145
  const changeEvent = new Event('change', { bubbles: true })
149
146
  input.dispatchEvent(changeEvent)
150
147
 
151
- await sleepAsync(50)
148
+ await flushUpdates()
152
149
 
153
150
  expect(setCustomValiditySpy).toHaveBeenCalledWith('Please select a valid entry!')
154
151
  // Verify that onchange was not called with the invalid string value
@@ -171,7 +168,6 @@ describe('Autocomplete component', () => {
171
168
  })
172
169
 
173
170
  await flushUpdates()
174
- await sleepAsync(50)
175
171
 
176
172
  const autocomplete = document.querySelector('shade-autocomplete')
177
173
  const input = autocomplete?.querySelector('input') as HTMLInputElement
@@ -180,7 +176,7 @@ describe('Autocomplete component', () => {
180
176
  const changeEvent = new Event('change', { bubbles: true })
181
177
  input.dispatchEvent(changeEvent)
182
178
 
183
- await sleepAsync(50)
179
+ await flushUpdates()
184
180
 
185
181
  expect(onchange).toHaveBeenCalledWith('valid1')
186
182
  })
@@ -206,7 +202,6 @@ describe('Autocomplete component', () => {
206
202
  })
207
203
 
208
204
  await flushUpdates()
209
- await sleepAsync(50)
210
205
 
211
206
  const autocomplete = document.querySelector('shade-autocomplete')
212
207
  const input = autocomplete?.querySelector('input') as HTMLInputElement
@@ -228,7 +223,6 @@ describe('Autocomplete component', () => {
228
223
  })
229
224
 
230
225
  await flushUpdates()
231
- await sleepAsync(50)
232
226
 
233
227
  const autocomplete = document.querySelector('shade-autocomplete')
234
228
  expect(autocomplete).not.toBeNull()
@@ -252,7 +246,6 @@ describe('Autocomplete component', () => {
252
246
  })
253
247
 
254
248
  await flushUpdates()
255
- await sleepAsync(50)
256
249
 
257
250
  const autocomplete = document.querySelector('shade-autocomplete')
258
251
  const input = autocomplete?.querySelector('input') as HTMLInputElement