@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, vi } from 'vitest'
5
5
  import { ThemeProviderService } from '../services/theme-provider-service.js'
6
6
  import { Rating } from './rating.js'
@@ -25,7 +25,7 @@ describe('Rating', () => {
25
25
  jsxElement: <Rating />,
26
26
  })
27
27
 
28
- await sleepAsync(50)
28
+ await flushUpdates()
29
29
 
30
30
  const rating = document.querySelector('shade-rating')
31
31
  expect(rating).not.toBeNull()
@@ -42,7 +42,7 @@ describe('Rating', () => {
42
42
  jsxElement: <Rating />,
43
43
  })
44
44
 
45
- await sleepAsync(50)
45
+ await flushUpdates()
46
46
 
47
47
  const stars = document.querySelectorAll('shade-rating .rating-star')
48
48
  expect(stars.length).toBe(5)
@@ -59,7 +59,7 @@ describe('Rating', () => {
59
59
  jsxElement: <Rating max={10} />,
60
60
  })
61
61
 
62
- await sleepAsync(50)
62
+ await flushUpdates()
63
63
 
64
64
  const stars = document.querySelectorAll('shade-rating .rating-star')
65
65
  expect(stars.length).toBe(10)
@@ -77,7 +77,7 @@ describe('Rating', () => {
77
77
  jsxElement: <Rating value={3} />,
78
78
  })
79
79
 
80
- await sleepAsync(50)
80
+ await flushUpdates()
81
81
 
82
82
  const filledSpans = document.querySelectorAll('shade-rating .star-filled')
83
83
  expect((filledSpans[0] as HTMLElement).style.width).toBe('100%')
@@ -98,7 +98,7 @@ describe('Rating', () => {
98
98
  jsxElement: <Rating value={2.5} precision={0.5} />,
99
99
  })
100
100
 
101
- await sleepAsync(50)
101
+ await flushUpdates()
102
102
 
103
103
  const filledSpans = document.querySelectorAll('shade-rating .star-filled')
104
104
  expect((filledSpans[0] as HTMLElement).style.width).toBe('100%')
@@ -119,7 +119,7 @@ describe('Rating', () => {
119
119
  jsxElement: <Rating value={0} />,
120
120
  })
121
121
 
122
- await sleepAsync(50)
122
+ await flushUpdates()
123
123
 
124
124
  const filledSpans = document.querySelectorAll('shade-rating .star-filled')
125
125
  expect(filledSpans.length).toBe(5)
@@ -142,12 +142,12 @@ describe('Rating', () => {
142
142
  jsxElement: <Rating value={0} onValueChange={onchange} />,
143
143
  })
144
144
 
145
- await sleepAsync(50)
145
+ await flushUpdates()
146
146
 
147
147
  const stars = document.querySelectorAll('shade-rating .rating-star')
148
148
  ;(stars[2] as HTMLElement).dispatchEvent(new MouseEvent('click', { bubbles: true }))
149
149
 
150
- await sleepAsync(50)
150
+ await flushUpdates()
151
151
 
152
152
  expect(onchange).toHaveBeenCalledWith(3)
153
153
  })
@@ -164,12 +164,12 @@ describe('Rating', () => {
164
164
  jsxElement: <Rating value={0} onValueChange={onchange} disabled />,
165
165
  })
166
166
 
167
- await sleepAsync(50)
167
+ await flushUpdates()
168
168
 
169
169
  const stars = document.querySelectorAll('shade-rating .rating-star')
170
170
  ;(stars[2] as HTMLElement).dispatchEvent(new MouseEvent('click', { bubbles: true }))
171
171
 
172
- await sleepAsync(50)
172
+ await flushUpdates()
173
173
 
174
174
  expect(onchange).not.toHaveBeenCalled()
175
175
  })
@@ -186,12 +186,12 @@ describe('Rating', () => {
186
186
  jsxElement: <Rating value={3} onValueChange={onchange} readOnly />,
187
187
  })
188
188
 
189
- await sleepAsync(50)
189
+ await flushUpdates()
190
190
 
191
191
  const stars = document.querySelectorAll('shade-rating .rating-star')
192
192
  ;(stars[0] as HTMLElement).dispatchEvent(new MouseEvent('click', { bubbles: true }))
193
193
 
194
- await sleepAsync(50)
194
+ await flushUpdates()
195
195
 
196
196
  expect(onchange).not.toHaveBeenCalled()
197
197
  })
@@ -210,12 +210,12 @@ describe('Rating', () => {
210
210
  jsxElement: <Rating value={3} onValueChange={onchange} />,
211
211
  })
212
212
 
213
- await sleepAsync(50)
213
+ await flushUpdates()
214
214
 
215
215
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
216
216
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }))
217
217
 
218
- await sleepAsync(50)
218
+ await flushUpdates()
219
219
 
220
220
  expect(onchange).toHaveBeenCalledWith(4)
221
221
  })
@@ -232,12 +232,12 @@ describe('Rating', () => {
232
232
  jsxElement: <Rating value={3} onValueChange={onchange} />,
233
233
  })
234
234
 
235
- await sleepAsync(50)
235
+ await flushUpdates()
236
236
 
237
237
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
238
238
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }))
239
239
 
240
- await sleepAsync(50)
240
+ await flushUpdates()
241
241
 
242
242
  expect(onchange).toHaveBeenCalledWith(2)
243
243
  })
@@ -254,12 +254,12 @@ describe('Rating', () => {
254
254
  jsxElement: <Rating value={3} precision={0.5} onValueChange={onchange} />,
255
255
  })
256
256
 
257
- await sleepAsync(50)
257
+ await flushUpdates()
258
258
 
259
259
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
260
260
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }))
261
261
 
262
- await sleepAsync(50)
262
+ await flushUpdates()
263
263
 
264
264
  expect(onchange).toHaveBeenCalledWith(3.5)
265
265
  })
@@ -276,12 +276,12 @@ describe('Rating', () => {
276
276
  jsxElement: <Rating value={5} onValueChange={onchange} />,
277
277
  })
278
278
 
279
- await sleepAsync(50)
279
+ await flushUpdates()
280
280
 
281
281
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
282
282
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }))
283
283
 
284
- await sleepAsync(50)
284
+ await flushUpdates()
285
285
 
286
286
  expect(onchange).not.toHaveBeenCalled()
287
287
  })
@@ -298,12 +298,12 @@ describe('Rating', () => {
298
298
  jsxElement: <Rating value={0} onValueChange={onchange} />,
299
299
  })
300
300
 
301
- await sleepAsync(50)
301
+ await flushUpdates()
302
302
 
303
303
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
304
304
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }))
305
305
 
306
- await sleepAsync(50)
306
+ await flushUpdates()
307
307
 
308
308
  expect(onchange).not.toHaveBeenCalled()
309
309
  })
@@ -321,7 +321,7 @@ describe('Rating', () => {
321
321
  jsxElement: <Rating disabled />,
322
322
  })
323
323
 
324
- await sleepAsync(50)
324
+ await flushUpdates()
325
325
 
326
326
  const wrapper = document.querySelector('shade-rating') as HTMLElement
327
327
  expect(wrapper.hasAttribute('data-disabled')).toBe(true)
@@ -339,7 +339,7 @@ describe('Rating', () => {
339
339
  jsxElement: <Rating />,
340
340
  })
341
341
 
342
- await sleepAsync(50)
342
+ await flushUpdates()
343
343
 
344
344
  const wrapper = document.querySelector('shade-rating') as HTMLElement
345
345
  expect(wrapper.hasAttribute('data-disabled')).toBe(false)
@@ -358,7 +358,7 @@ describe('Rating', () => {
358
358
  jsxElement: <Rating readOnly />,
359
359
  })
360
360
 
361
- await sleepAsync(50)
361
+ await flushUpdates()
362
362
 
363
363
  const wrapper = document.querySelector('shade-rating') as HTMLElement
364
364
  expect(wrapper.hasAttribute('data-readonly')).toBe(true)
@@ -378,7 +378,7 @@ describe('Rating', () => {
378
378
  jsxElement: <Rating value={1} icon="❤️" emptyIcon="🤍" />,
379
379
  })
380
380
 
381
- await sleepAsync(50)
381
+ await flushUpdates()
382
382
 
383
383
  const emptySpans = document.querySelectorAll('shade-rating .star-empty')
384
384
  const filledSpans = document.querySelectorAll('shade-rating .star-filled')
@@ -400,7 +400,7 @@ describe('Rating', () => {
400
400
  jsxElement: <Rating size="large" />,
401
401
  })
402
402
 
403
- await sleepAsync(50)
403
+ await flushUpdates()
404
404
 
405
405
  const wrapper = document.querySelector('shade-rating') as HTMLElement
406
406
  expect(wrapper.getAttribute('data-size')).toBe('large')
@@ -417,7 +417,7 @@ describe('Rating', () => {
417
417
  jsxElement: <Rating />,
418
418
  })
419
419
 
420
- await sleepAsync(50)
420
+ await flushUpdates()
421
421
 
422
422
  const wrapper = document.querySelector('shade-rating') as HTMLElement
423
423
  expect(wrapper.getAttribute('data-size')).toBe('medium')
@@ -436,7 +436,7 @@ describe('Rating', () => {
436
436
  jsxElement: <Rating />,
437
437
  })
438
438
 
439
- await sleepAsync(50)
439
+ await flushUpdates()
440
440
 
441
441
  const wrapper = document.querySelector('shade-rating') as HTMLElement
442
442
  const themeService = injector.getInstance(ThemeProviderService)
@@ -454,7 +454,7 @@ describe('Rating', () => {
454
454
  jsxElement: <Rating color="primary" />,
455
455
  })
456
456
 
457
- await sleepAsync(50)
457
+ await flushUpdates()
458
458
 
459
459
  const wrapper = document.querySelector('shade-rating') as HTMLElement
460
460
  const themeService = injector.getInstance(ThemeProviderService)
@@ -474,7 +474,7 @@ describe('Rating', () => {
474
474
  jsxElement: <Rating value={3} max={5} />,
475
475
  })
476
476
 
477
- await sleepAsync(50)
477
+ await flushUpdates()
478
478
 
479
479
  const wrapper = document.querySelector('shade-rating') as HTMLElement
480
480
  expect(wrapper.getAttribute('role')).toBe('slider')
@@ -495,7 +495,7 @@ describe('Rating', () => {
495
495
  jsxElement: <Rating value={3} max={5} readOnly />,
496
496
  })
497
497
 
498
- await sleepAsync(50)
498
+ await flushUpdates()
499
499
 
500
500
  const wrapper = document.querySelector('shade-rating') as HTMLElement
501
501
  expect(wrapper.getAttribute('role')).toBe('img')
@@ -516,7 +516,7 @@ describe('Rating', () => {
516
516
  jsxElement: <Rating name="userRating" value={4} />,
517
517
  })
518
518
 
519
- await sleepAsync(50)
519
+ await flushUpdates()
520
520
 
521
521
  const input = document.querySelector('shade-rating input[type="hidden"]') as HTMLInputElement
522
522
  expect(input).not.toBeNull()
@@ -535,7 +535,7 @@ describe('Rating', () => {
535
535
  jsxElement: <Rating value={4} />,
536
536
  })
537
537
 
538
- await sleepAsync(50)
538
+ await flushUpdates()
539
539
 
540
540
  const input = document.querySelector('shade-rating input[type="hidden"]')
541
541
  expect(input).toBeNull()
@@ -555,12 +555,12 @@ describe('Rating', () => {
555
555
  jsxElement: <Rating value={3} max={5} onValueChange={onchange} />,
556
556
  })
557
557
 
558
- await sleepAsync(50)
558
+ await flushUpdates()
559
559
 
560
560
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
561
561
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'End', bubbles: true }))
562
562
 
563
- await sleepAsync(50)
563
+ await flushUpdates()
564
564
 
565
565
  expect(onchange).toHaveBeenCalledWith(5)
566
566
  })
@@ -577,12 +577,12 @@ describe('Rating', () => {
577
577
  jsxElement: <Rating value={3} onValueChange={onchange} />,
578
578
  })
579
579
 
580
- await sleepAsync(50)
580
+ await flushUpdates()
581
581
 
582
582
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
583
583
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'Home', bubbles: true }))
584
584
 
585
- await sleepAsync(50)
585
+ await flushUpdates()
586
586
 
587
587
  expect(onchange).toHaveBeenCalledWith(0)
588
588
  })
@@ -599,12 +599,12 @@ describe('Rating', () => {
599
599
  jsxElement: <Rating value={2} onValueChange={onchange} />,
600
600
  })
601
601
 
602
- await sleepAsync(50)
602
+ await flushUpdates()
603
603
 
604
604
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
605
605
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }))
606
606
 
607
- await sleepAsync(50)
607
+ await flushUpdates()
608
608
 
609
609
  expect(onchange).toHaveBeenCalledWith(3)
610
610
  })
@@ -621,12 +621,12 @@ describe('Rating', () => {
621
621
  jsxElement: <Rating value={3} onValueChange={onchange} />,
622
622
  })
623
623
 
624
- await sleepAsync(50)
624
+ await flushUpdates()
625
625
 
626
626
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
627
627
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }))
628
628
 
629
- await sleepAsync(50)
629
+ await flushUpdates()
630
630
 
631
631
  expect(onchange).toHaveBeenCalledWith(2)
632
632
  })
@@ -643,12 +643,12 @@ describe('Rating', () => {
643
643
  jsxElement: <Rating value={3} onValueChange={onchange} />,
644
644
  })
645
645
 
646
- await sleepAsync(50)
646
+ await flushUpdates()
647
647
 
648
648
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
649
649
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'a', bubbles: true }))
650
650
 
651
- await sleepAsync(50)
651
+ await flushUpdates()
652
652
 
653
653
  expect(onchange).not.toHaveBeenCalled()
654
654
  })
@@ -665,12 +665,12 @@ describe('Rating', () => {
665
665
  jsxElement: <Rating value={3} disabled onValueChange={onchange} />,
666
666
  })
667
667
 
668
- await sleepAsync(50)
668
+ await flushUpdates()
669
669
 
670
670
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
671
671
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }))
672
672
 
673
- await sleepAsync(50)
673
+ await flushUpdates()
674
674
 
675
675
  expect(onchange).not.toHaveBeenCalled()
676
676
  })
@@ -687,12 +687,12 @@ describe('Rating', () => {
687
687
  jsxElement: <Rating value={3} readOnly onValueChange={onchange} />,
688
688
  })
689
689
 
690
- await sleepAsync(50)
690
+ await flushUpdates()
691
691
 
692
692
  const ratingEl = document.querySelector('shade-rating') as HTMLElement
693
693
  ratingEl.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }))
694
694
 
695
- await sleepAsync(50)
695
+ await flushUpdates()
696
696
 
697
697
  expect(onchange).not.toHaveBeenCalled()
698
698
  })
@@ -710,12 +710,12 @@ describe('Rating', () => {
710
710
  jsxElement: <Rating value={2} />,
711
711
  })
712
712
 
713
- await sleepAsync(50)
713
+ await flushUpdates()
714
714
 
715
715
  const container = document.querySelector('shade-rating .rating-container') as HTMLElement
716
716
  container.dispatchEvent(new MouseEvent('mouseleave', { bubbles: true }))
717
717
 
718
- await sleepAsync(50)
718
+ await flushUpdates()
719
719
 
720
720
  const filledSpans = document.querySelectorAll('shade-rating .star-filled')
721
721
  expect((filledSpans[0] as HTMLElement).style.width).toBe('100%')
@@ -734,7 +734,7 @@ describe('Rating', () => {
734
734
  jsxElement: <Rating value={1} />,
735
735
  })
736
736
 
737
- await sleepAsync(50)
737
+ await flushUpdates()
738
738
 
739
739
  const stars = document.querySelectorAll('shade-rating .rating-star')
740
740
  const star4 = stars[3] as HTMLElement
@@ -748,7 +748,7 @@ describe('Rating', () => {
748
748
  }),
749
749
  )
750
750
 
751
- await sleepAsync(50)
751
+ await flushUpdates()
752
752
 
753
753
  const filledSpans = document.querySelectorAll('shade-rating .star-filled')
754
754
  // Stars 0-3 should be filled (hover value = 4)
@@ -770,12 +770,12 @@ describe('Rating', () => {
770
770
  jsxElement: <Rating value={1} disabled />,
771
771
  })
772
772
 
773
- await sleepAsync(50)
773
+ await flushUpdates()
774
774
 
775
775
  const stars = document.querySelectorAll('shade-rating .rating-star')
776
776
  ;(stars[3] as HTMLElement).dispatchEvent(new MouseEvent('mousemove', { bubbles: true, clientX: 100 }))
777
777
 
778
- await sleepAsync(50)
778
+ await flushUpdates()
779
779
 
780
780
  const filledSpans = document.querySelectorAll('shade-rating .star-filled')
781
781
  // Only first star should be filled (no hover effect)
@@ -794,12 +794,12 @@ describe('Rating', () => {
794
794
  jsxElement: <Rating value={2} disabled />,
795
795
  })
796
796
 
797
- await sleepAsync(50)
797
+ await flushUpdates()
798
798
 
799
799
  const container = document.querySelector('shade-rating .rating-container') as HTMLElement
800
800
  container.dispatchEvent(new MouseEvent('mouseleave', { bubbles: true }))
801
801
 
802
- await sleepAsync(50)
802
+ await flushUpdates()
803
803
 
804
804
  const filledSpans = document.querySelectorAll('shade-rating .star-filled')
805
805
  expect((filledSpans[0] as HTMLElement).style.width).toBe('100%')
@@ -820,7 +820,7 @@ describe('Rating', () => {
820
820
  jsxElement: <Rating size="small" />,
821
821
  })
822
822
 
823
- await sleepAsync(50)
823
+ await flushUpdates()
824
824
 
825
825
  const wrapper = document.querySelector('shade-rating') as HTMLElement
826
826
  expect(wrapper.getAttribute('data-size')).toBe('small')
@@ -839,7 +839,7 @@ describe('Rating', () => {
839
839
  jsxElement: <Rating readOnly value={3} />,
840
840
  })
841
841
 
842
- await sleepAsync(50)
842
+ await flushUpdates()
843
843
 
844
844
  const wrapper = document.querySelector('shade-rating') as HTMLElement
845
845
  expect(wrapper.getAttribute('aria-readonly')).toBe('true')
@@ -856,7 +856,7 @@ describe('Rating', () => {
856
856
  jsxElement: <Rating value={3} />,
857
857
  })
858
858
 
859
- await sleepAsync(50)
859
+ await flushUpdates()
860
860
 
861
861
  const wrapper = document.querySelector('shade-rating') as HTMLElement
862
862
  expect(wrapper.hasAttribute('aria-readonly')).toBe(false)
@@ -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, vi } from 'vitest'
5
5
  import { Skeleton } from './skeleton.js'
6
6
 
@@ -56,7 +56,8 @@ describe('Skeleton', () => {
56
56
  jsxElement: <Skeleton />,
57
57
  })
58
58
 
59
- await sleepAsync(50)
59
+ await flushUpdates()
60
+ await new Promise<void>((resolve) => setTimeout(resolve, 0))
60
61
 
61
62
  const skeleton = document.querySelector('shade-skeleton')
62
63
  expect(skeleton).not.toBeNull()
@@ -87,7 +88,8 @@ describe('Skeleton', () => {
87
88
  jsxElement: <Skeleton delay={500} />,
88
89
  })
89
90
 
90
- await sleepAsync(50)
91
+ await flushUpdates()
92
+ await new Promise<void>((resolve) => setTimeout(resolve, 0))
91
93
 
92
94
  const fadeInCall = animateCalls.find(
93
95
  (call) => Array.isArray(call.keyframes) && call.keyframes.some((kf: Keyframe) => 'opacity' in kf),
@@ -108,7 +110,8 @@ describe('Skeleton', () => {
108
110
  jsxElement: <Skeleton delay={100} />,
109
111
  })
110
112
 
111
- await sleepAsync(50)
113
+ await flushUpdates()
114
+ await new Promise<void>((resolve) => setTimeout(resolve, 0))
112
115
 
113
116
  const fadeInCall = animateCalls.find(
114
117
  (call) =>
@@ -138,7 +141,8 @@ describe('Skeleton', () => {
138
141
  jsxElement: <Skeleton delay={0} />,
139
142
  })
140
143
 
141
- await sleepAsync(100)
144
+ await flushUpdates()
145
+ await new Promise<void>((resolve) => setTimeout(resolve, 50))
142
146
 
143
147
  const backgroundAnimation = animateCalls.find(
144
148
  (call) => Array.isArray(call.keyframes) && call.keyframes.some((kf: Keyframe) => 'backgroundPosition' in kf),
@@ -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 { SuggestInput } from './suggest-input.js'
6
6
  import { SuggestManager } from './suggest-manager.js'
@@ -59,7 +59,6 @@ describe('SuggestInput', () => {
59
59
  })
60
60
 
61
61
  await flushUpdates()
62
- await sleepAsync(50)
63
62
 
64
63
  const suggestInput = document.querySelector('shades-suggest-input')
65
64
  expect(suggestInput).not.toBeNull()
@@ -80,7 +79,6 @@ describe('SuggestInput', () => {
80
79
  })
81
80
 
82
81
  await flushUpdates()
83
- await sleepAsync(50)
84
82
 
85
83
  const input = document.querySelector('shades-suggest-input input') as HTMLInputElement
86
84
  expect(input).not.toBeNull()
@@ -103,13 +101,12 @@ describe('SuggestInput', () => {
103
101
  })
104
102
 
105
103
  await flushUpdates()
106
- await sleepAsync(50)
107
104
 
108
105
  const input = document.querySelector('shades-suggest-input input') as HTMLInputElement
109
106
  const focusSpy = vi.spyOn(input, 'focus')
110
107
 
111
108
  manager.isOpened.setValue(true)
112
- await sleepAsync(50)
109
+ await flushUpdates()
113
110
 
114
111
  expect(focusSpy).toHaveBeenCalled()
115
112
 
@@ -129,16 +126,15 @@ describe('SuggestInput', () => {
129
126
  })
130
127
 
131
128
  await flushUpdates()
132
- await sleepAsync(50)
133
129
 
134
130
  const input = document.querySelector('shades-suggest-input input') as HTMLInputElement
135
131
  input.value = 'test query'
136
132
 
137
133
  manager.isOpened.setValue(true)
138
- await sleepAsync(50)
134
+ await flushUpdates()
139
135
 
140
136
  manager.isOpened.setValue(false)
141
- await sleepAsync(50)
137
+ await flushUpdates()
142
138
 
143
139
  expect(input.value).toBe('')
144
140
 
@@ -158,7 +154,6 @@ describe('SuggestInput', () => {
158
154
  })
159
155
 
160
156
  await flushUpdates()
161
- await sleepAsync(50)
162
157
 
163
158
  const input = document.querySelector('shades-suggest-input input') as HTMLInputElement
164
159
 
@@ -181,7 +176,6 @@ describe('SuggestInput', () => {
181
176
  })
182
177
 
183
178
  await flushUpdates()
184
- await sleepAsync(50)
185
179
 
186
180
  const suggestInput = document.querySelector('shades-suggest-input') as HTMLElement
187
181
  expect(suggestInput).not.toBeNull()