@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,5 +1,5 @@
1
1
  import { Injector } from '@furystack/inject'
2
- import { createComponent, initializeShadeRoot } from '@furystack/shades'
2
+ import { createComponent, flushUpdates, initializeShadeRoot } from '@furystack/shades'
3
3
  import { sleepAsync, usingAsync } from '@furystack/utils'
4
4
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
5
5
  import { Carousel } from './carousel.js'
@@ -29,7 +29,7 @@ describe('Carousel', () => {
29
29
  jsxElement: <Carousel slides={createSlides()} />,
30
30
  })
31
31
 
32
- await sleepAsync(100)
32
+ await flushUpdates()
33
33
 
34
34
  expect(document.getElementById('slide-1')).toBeTruthy()
35
35
  expect(document.getElementById('slide-2')).toBeTruthy()
@@ -47,7 +47,7 @@ describe('Carousel', () => {
47
47
  jsxElement: <Carousel slides={createSlides()} />,
48
48
  })
49
49
 
50
- await sleepAsync(100)
50
+ await flushUpdates()
51
51
 
52
52
  const dots = document.querySelectorAll('.carousel-dot')
53
53
  expect(dots.length).toBe(3)
@@ -64,7 +64,7 @@ describe('Carousel', () => {
64
64
  jsxElement: <Carousel slides={createSlides()} dots={false} />,
65
65
  })
66
66
 
67
- await sleepAsync(100)
67
+ await flushUpdates()
68
68
 
69
69
  const dots = document.querySelectorAll('.carousel-dot')
70
70
  expect(dots.length).toBe(0)
@@ -81,7 +81,7 @@ describe('Carousel', () => {
81
81
  jsxElement: <Carousel slides={createSlides()} />,
82
82
  })
83
83
 
84
- await sleepAsync(100)
84
+ await flushUpdates()
85
85
 
86
86
  const prevButton = document.querySelector('.carousel-arrow-prev')
87
87
  const nextButton = document.querySelector('.carousel-arrow-next')
@@ -100,7 +100,7 @@ describe('Carousel', () => {
100
100
  jsxElement: <Carousel slides={[<div>Only slide</div>]} />,
101
101
  })
102
102
 
103
- await sleepAsync(100)
103
+ await flushUpdates()
104
104
 
105
105
  const arrows = document.querySelectorAll('.carousel-arrow')
106
106
  const dots = document.querySelectorAll('.carousel-dot')
@@ -119,7 +119,7 @@ describe('Carousel', () => {
119
119
  jsxElement: <Carousel slides={createSlides()} />,
120
120
  })
121
121
 
122
- await sleepAsync(100)
122
+ await flushUpdates()
123
123
 
124
124
  const activeDots = document.querySelectorAll('.carousel-dot[data-active]')
125
125
  expect(activeDots.length).toBe(1)
@@ -139,7 +139,7 @@ describe('Carousel', () => {
139
139
  jsxElement: <Carousel slides={createSlides()} defaultActiveIndex={2} />,
140
140
  })
141
141
 
142
- await sleepAsync(100)
142
+ await flushUpdates()
143
143
 
144
144
  const dots = document.querySelectorAll('.carousel-dot')
145
145
  expect(dots[2].hasAttribute('data-active')).toBe(true)
@@ -157,7 +157,7 @@ describe('Carousel', () => {
157
157
  jsxElement: <Carousel slides={createSlides()} vertical />,
158
158
  })
159
159
 
160
- await sleepAsync(100)
160
+ await flushUpdates()
161
161
 
162
162
  const carousel = document.querySelector('shade-carousel') as HTMLElement
163
163
  expect(carousel.hasAttribute('data-vertical')).toBe(true)
@@ -174,7 +174,7 @@ describe('Carousel', () => {
174
174
  jsxElement: <Carousel slides={createSlides()} />,
175
175
  })
176
176
 
177
- await sleepAsync(100)
177
+ await flushUpdates()
178
178
 
179
179
  const track = document.querySelector('.carousel-track')
180
180
  expect(track).toBeTruthy()
@@ -192,7 +192,7 @@ describe('Carousel', () => {
192
192
  jsxElement: <Carousel slides={createSlides()} effect="fade" />,
193
193
  })
194
194
 
195
- await sleepAsync(100)
195
+ await flushUpdates()
196
196
 
197
197
  const fadeContainer = document.querySelector('.carousel-fade-container')
198
198
  expect(fadeContainer).toBeTruthy()
@@ -210,7 +210,7 @@ describe('Carousel', () => {
210
210
  jsxElement: <Carousel slides={createSlides()} effect="fade" />,
211
211
  })
212
212
 
213
- await sleepAsync(100)
213
+ await flushUpdates()
214
214
 
215
215
  const fadeSlides = document.querySelectorAll('.carousel-fade-slide')
216
216
  expect(fadeSlides[0].hasAttribute('data-active')).toBe(true)
@@ -228,7 +228,7 @@ describe('Carousel', () => {
228
228
  jsxElement: <Carousel slides={createSlides()} />,
229
229
  })
230
230
 
231
- await sleepAsync(100)
231
+ await flushUpdates()
232
232
 
233
233
  const carousel = document.querySelector('shade-carousel') as HTMLElement
234
234
  expect(carousel.getAttribute('role')).toBe('region')
@@ -247,7 +247,7 @@ describe('Carousel', () => {
247
247
  jsxElement: <Carousel slides={createSlides()} />,
248
248
  })
249
249
 
250
- await sleepAsync(100)
250
+ await flushUpdates()
251
251
 
252
252
  const carousel = document.querySelector('shade-carousel') as HTMLElement
253
253
  const slideGroups = carousel.querySelectorAll('[role="group"]')
@@ -267,7 +267,7 @@ describe('Carousel', () => {
267
267
  jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
268
268
  })
269
269
 
270
- await sleepAsync(100)
270
+ await flushUpdates()
271
271
 
272
272
  const dots = document.querySelectorAll('.carousel-dot')
273
273
  ;(dots[2] as HTMLButtonElement).click()
@@ -288,7 +288,7 @@ describe('Carousel', () => {
288
288
  jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
289
289
  })
290
290
 
291
- await sleepAsync(100)
291
+ await flushUpdates()
292
292
 
293
293
  const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
294
294
  nextButton.click()
@@ -309,7 +309,7 @@ describe('Carousel', () => {
309
309
  jsxElement: <Carousel slides={createSlides()} defaultActiveIndex={2} onChange={handleChange} />,
310
310
  })
311
311
 
312
- await sleepAsync(100)
312
+ await flushUpdates()
313
313
 
314
314
  const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
315
315
  nextButton.click()
@@ -330,7 +330,7 @@ describe('Carousel', () => {
330
330
  jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
331
331
  })
332
332
 
333
- await sleepAsync(100)
333
+ await flushUpdates()
334
334
 
335
335
  const prevButton = document.querySelector('.carousel-arrow-prev') as HTMLButtonElement
336
336
  prevButton.click()
@@ -349,7 +349,7 @@ describe('Carousel', () => {
349
349
  jsxElement: <Carousel slides={createSlides()} />,
350
350
  })
351
351
 
352
- await sleepAsync(100)
352
+ await flushUpdates()
353
353
 
354
354
  const prevButton = document.querySelector('.carousel-arrow-prev') as HTMLButtonElement
355
355
  const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
@@ -368,7 +368,7 @@ describe('Carousel', () => {
368
368
  jsxElement: <Carousel slides={createSlides()} vertical />,
369
369
  })
370
370
 
371
- await sleepAsync(100)
371
+ await flushUpdates()
372
372
 
373
373
  const prevButton = document.querySelector('.carousel-arrow-prev') as HTMLButtonElement
374
374
  const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
@@ -387,7 +387,7 @@ describe('Carousel', () => {
387
387
  jsxElement: <Carousel slides={createSlides()} defaultActiveIndex={99} />,
388
388
  })
389
389
 
390
- await sleepAsync(100)
390
+ await flushUpdates()
391
391
 
392
392
  const dots = document.querySelectorAll('.carousel-dot')
393
393
  // Should clamp to last slide (index 2)
@@ -405,7 +405,7 @@ describe('Carousel', () => {
405
405
  jsxElement: <Carousel slides={createSlides()} style={{ height: '300px' }} />,
406
406
  })
407
407
 
408
- await sleepAsync(100)
408
+ await flushUpdates()
409
409
 
410
410
  const carousel = document.querySelector('shade-carousel') as HTMLElement
411
411
  expect(carousel.style.height).toBe('300px')
@@ -422,7 +422,7 @@ describe('Carousel', () => {
422
422
  jsxElement: <Carousel slides={[]} />,
423
423
  })
424
424
 
425
- await sleepAsync(100)
425
+ await flushUpdates()
426
426
 
427
427
  const carousel = document.querySelector('shade-carousel') as HTMLElement
428
428
  expect(carousel).toBeTruthy()
@@ -444,7 +444,7 @@ describe('Carousel', () => {
444
444
  jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
445
445
  })
446
446
 
447
- await sleepAsync(100)
447
+ await flushUpdates()
448
448
 
449
449
  const carousel = document.querySelector('shade-carousel') as HTMLElement
450
450
  carousel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowRight', bubbles: true }))
@@ -465,7 +465,7 @@ describe('Carousel', () => {
465
465
  jsxElement: <Carousel slides={createSlides()} defaultActiveIndex={2} onChange={handleChange} />,
466
466
  })
467
467
 
468
- await sleepAsync(100)
468
+ await flushUpdates()
469
469
 
470
470
  const carousel = document.querySelector('shade-carousel') as HTMLElement
471
471
  carousel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowLeft', bubbles: true }))
@@ -486,7 +486,7 @@ describe('Carousel', () => {
486
486
  jsxElement: <Carousel slides={createSlides()} vertical onChange={handleChange} />,
487
487
  })
488
488
 
489
- await sleepAsync(100)
489
+ await flushUpdates()
490
490
 
491
491
  const carousel = document.querySelector('shade-carousel') as HTMLElement
492
492
  carousel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }))
@@ -507,7 +507,7 @@ describe('Carousel', () => {
507
507
  jsxElement: <Carousel slides={createSlides()} vertical defaultActiveIndex={2} onChange={handleChange} />,
508
508
  })
509
509
 
510
- await sleepAsync(100)
510
+ await flushUpdates()
511
511
 
512
512
  const carousel = document.querySelector('shade-carousel') as HTMLElement
513
513
  carousel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }))
@@ -528,7 +528,7 @@ describe('Carousel', () => {
528
528
  jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
529
529
  })
530
530
 
531
- await sleepAsync(100)
531
+ await flushUpdates()
532
532
 
533
533
  const carousel = document.querySelector('shade-carousel') as HTMLElement
534
534
  carousel.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }))
@@ -560,7 +560,7 @@ describe('Carousel', () => {
560
560
  jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
561
561
  })
562
562
 
563
- await sleepAsync(100)
563
+ await flushUpdates()
564
564
 
565
565
  const carousel = document.querySelector('shade-carousel') as HTMLElement
566
566
  carousel.dispatchEvent(createTouchEvent('touchstart', 200, 100))
@@ -582,7 +582,7 @@ describe('Carousel', () => {
582
582
  jsxElement: <Carousel slides={createSlides()} defaultActiveIndex={2} onChange={handleChange} />,
583
583
  })
584
584
 
585
- await sleepAsync(100)
585
+ await flushUpdates()
586
586
 
587
587
  const carousel = document.querySelector('shade-carousel') as HTMLElement
588
588
  carousel.dispatchEvent(createTouchEvent('touchstart', 100, 100))
@@ -604,7 +604,7 @@ describe('Carousel', () => {
604
604
  jsxElement: <Carousel slides={createSlides()} onChange={handleChange} />,
605
605
  })
606
606
 
607
- await sleepAsync(100)
607
+ await flushUpdates()
608
608
 
609
609
  const carousel = document.querySelector('shade-carousel') as HTMLElement
610
610
  carousel.dispatchEvent(createTouchEvent('touchstart', 100, 100))
@@ -626,7 +626,7 @@ describe('Carousel', () => {
626
626
  jsxElement: <Carousel slides={createSlides()} vertical onChange={handleChange} />,
627
627
  })
628
628
 
629
- await sleepAsync(100)
629
+ await flushUpdates()
630
630
 
631
631
  const carousel = document.querySelector('shade-carousel') as HTMLElement
632
632
  carousel.dispatchEvent(createTouchEvent('touchstart', 100, 200))
@@ -650,7 +650,7 @@ describe('Carousel', () => {
650
650
  jsxElement: <Carousel slides={createSlides()} autoplay autoplayInterval={100} onChange={handleChange} />,
651
651
  })
652
652
 
653
- await sleepAsync(100)
653
+ await flushUpdates()
654
654
  // Wait for at least one autoplay cycle
655
655
  await sleepAsync(200)
656
656
 
@@ -690,12 +690,12 @@ describe('Carousel', () => {
690
690
  jsxElement: <Carousel slides={createSlides()} effect="fade" onChange={handleChange} />,
691
691
  })
692
692
 
693
- await sleepAsync(100)
693
+ await flushUpdates()
694
694
 
695
695
  const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
696
696
  nextButton.click()
697
697
 
698
- await sleepAsync(100)
698
+ await flushUpdates()
699
699
 
700
700
  const fadeSlides = document.querySelectorAll('.carousel-fade-slide')
701
701
  expect(fadeSlides[0].hasAttribute('data-active')).toBe(false)
@@ -713,12 +713,12 @@ describe('Carousel', () => {
713
713
  jsxElement: <Carousel slides={createSlides()} effect="fade" />,
714
714
  })
715
715
 
716
- await sleepAsync(100)
716
+ await flushUpdates()
717
717
 
718
718
  const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
719
719
  nextButton.click()
720
720
 
721
- await sleepAsync(100)
721
+ await flushUpdates()
722
722
 
723
723
  const dots = document.querySelectorAll('.carousel-dot')
724
724
  expect(dots[0].hasAttribute('data-active')).toBe(false)
@@ -738,12 +738,12 @@ describe('Carousel', () => {
738
738
  jsxElement: <Carousel slides={createSlides()} />,
739
739
  })
740
740
 
741
- await sleepAsync(100)
741
+ await flushUpdates()
742
742
 
743
743
  const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
744
744
  nextButton.click()
745
745
 
746
- await sleepAsync(100)
746
+ await flushUpdates()
747
747
 
748
748
  const track = document.querySelector('.carousel-track') as HTMLElement
749
749
  expect(track.style.transform).toContain('-100%')
@@ -760,12 +760,12 @@ describe('Carousel', () => {
760
760
  jsxElement: <Carousel slides={createSlides()} />,
761
761
  })
762
762
 
763
- await sleepAsync(100)
763
+ await flushUpdates()
764
764
 
765
765
  const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
766
766
  nextButton.click()
767
767
 
768
- await sleepAsync(100)
768
+ await flushUpdates()
769
769
 
770
770
  const dots = document.querySelectorAll('.carousel-dot')
771
771
  expect(dots[0].hasAttribute('data-active')).toBe(false)
@@ -784,7 +784,7 @@ describe('Carousel', () => {
784
784
  jsxElement: <Carousel slides={createSlides()} vertical={false} />,
785
785
  })
786
786
 
787
- await sleepAsync(100)
787
+ await flushUpdates()
788
788
 
789
789
  const carousel = document.querySelector('shade-carousel') as HTMLElement
790
790
  expect(carousel.hasAttribute('data-vertical')).toBe(false)
@@ -804,12 +804,12 @@ describe('Carousel', () => {
804
804
  jsxElement: <Carousel slides={createSlides()} vertical style={{ height: '300px' }} onChange={handleChange} />,
805
805
  })
806
806
 
807
- await sleepAsync(100)
807
+ await flushUpdates()
808
808
 
809
809
  const nextButton = document.querySelector('.carousel-arrow-next') as HTMLButtonElement
810
810
  nextButton.click()
811
811
 
812
- await sleepAsync(100)
812
+ await flushUpdates()
813
813
 
814
814
  const track = document.querySelector('.carousel-track') as HTMLElement
815
815
  expect(track.style.transform).toContain('translateY')
@@ -838,7 +838,7 @@ describe('Carousel', () => {
838
838
  jsxElement: <Carousel slides={createSlides()} vertical defaultActiveIndex={2} onChange={handleChange} />,
839
839
  })
840
840
 
841
- await sleepAsync(100)
841
+ await flushUpdates()
842
842
 
843
843
  const carousel = document.querySelector('shade-carousel') as HTMLElement
844
844
  carousel.dispatchEvent(createTouchEvent('touchstart', 100, 100))
@@ -860,7 +860,7 @@ describe('Carousel', () => {
860
860
  jsxElement: <Carousel slides={createSlides()} vertical onChange={handleChange} />,
861
861
  })
862
862
 
863
- await sleepAsync(100)
863
+ await flushUpdates()
864
864
 
865
865
  const carousel = document.querySelector('shade-carousel') as HTMLElement
866
866
  carousel.dispatchEvent(createTouchEvent('touchstart', 100, 100))
@@ -882,7 +882,7 @@ describe('Carousel', () => {
882
882
  jsxElement: <Carousel slides={createSlides()} effect="fade" defaultActiveIndex={1} />,
883
883
  })
884
884
 
885
- await sleepAsync(100)
885
+ await flushUpdates()
886
886
 
887
887
  const fadeSlides = document.querySelectorAll('.carousel-fade-slide')
888
888
  expect(fadeSlides[0].hasAttribute('data-active')).toBe(false)
@@ -199,7 +199,7 @@ describe('CircularProgress', () => {
199
199
  const initialOffset = circle.style.strokeDashoffset
200
200
 
201
201
  value.setValue(75)
202
- await sleepAsync(10)
202
+ await sleepAsync(50)
203
203
 
204
204
  const updatedOffset = circle.style.strokeDashoffset
205
205
  expect(updatedOffset).not.toBe(initialOffset)
@@ -223,7 +223,7 @@ describe('CircularProgress', () => {
223
223
  expect(el.getAttribute('aria-valuenow')).toBe('20')
224
224
 
225
225
  value.setValue(85)
226
- await sleepAsync(10)
226
+ await sleepAsync(50)
227
227
 
228
228
  expect(el.getAttribute('aria-valuenow')).toBe('85')
229
229
  })
@@ -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 { CommandPaletteInput } from './command-palette-input.js'
6
6
  import { CommandPaletteManager } from './command-palette-manager.js'
@@ -10,6 +10,7 @@ describe('CommandPaletteInput', () => {
10
10
  let animateCalls: Array<{ keyframes: unknown; options: unknown }>
11
11
 
12
12
  beforeEach(() => {
13
+ vi.useFakeTimers()
13
14
  document.body.innerHTML = '<div id="root"></div>'
14
15
  animateCalls = []
15
16
  originalAnimate = Element.prototype.animate
@@ -38,6 +39,7 @@ describe('CommandPaletteInput', () => {
38
39
  })
39
40
 
40
41
  afterEach(() => {
42
+ vi.useRealTimers()
41
43
  document.body.innerHTML = ''
42
44
  Element.prototype.animate = originalAnimate
43
45
  vi.restoreAllMocks()
@@ -58,7 +60,7 @@ describe('CommandPaletteInput', () => {
58
60
  jsxElement: <CommandPaletteInput manager={manager} />,
59
61
  })
60
62
 
61
- await sleepAsync(50)
63
+ await flushUpdates()
62
64
 
63
65
  const input = document.querySelector('shades-command-palette-input')
64
66
  expect(input).not.toBeNull()
@@ -77,7 +79,7 @@ describe('CommandPaletteInput', () => {
77
79
  jsxElement: <CommandPaletteInput manager={manager} />,
78
80
  })
79
81
 
80
- await sleepAsync(50)
82
+ await flushUpdates()
81
83
 
82
84
  const component = document.querySelector('shades-command-palette-input') as HTMLElement
83
85
  const inputElement = component?.querySelector('input')
@@ -99,7 +101,7 @@ describe('CommandPaletteInput', () => {
99
101
  jsxElement: <CommandPaletteInput manager={manager} />,
100
102
  })
101
103
 
102
- await sleepAsync(50)
104
+ await flushUpdates()
103
105
 
104
106
  const component = document.querySelector('shades-command-palette-input') as HTMLElement
105
107
  expect(component.hasAttribute('data-opened')).toBe(false)
@@ -119,7 +121,7 @@ describe('CommandPaletteInput', () => {
119
121
  jsxElement: <CommandPaletteInput manager={manager} />,
120
122
  })
121
123
 
122
- await sleepAsync(50)
124
+ await flushUpdates()
123
125
 
124
126
  const component = document.querySelector('shades-command-palette-input') as HTMLElement
125
127
  expect(component.hasAttribute('data-opened')).toBe(true)
@@ -139,11 +141,11 @@ describe('CommandPaletteInput', () => {
139
141
  jsxElement: <CommandPaletteInput manager={manager} />,
140
142
  })
141
143
 
142
- await sleepAsync(50)
144
+ await flushUpdates()
143
145
  animateCalls = []
144
146
 
145
147
  manager.isOpened.setValue(true)
146
- await sleepAsync(50)
148
+ await flushUpdates()
147
149
 
148
150
  const widthAnimation = animateCalls.find(
149
151
  (call) =>
@@ -170,11 +172,11 @@ describe('CommandPaletteInput', () => {
170
172
  jsxElement: <CommandPaletteInput manager={manager} />,
171
173
  })
172
174
 
173
- await sleepAsync(50)
175
+ await flushUpdates()
174
176
  animateCalls = []
175
177
 
176
178
  manager.isOpened.setValue(false)
177
- await sleepAsync(50)
179
+ await flushUpdates()
178
180
 
179
181
  const widthAnimation = animateCalls.find(
180
182
  (call) =>
@@ -200,14 +202,14 @@ describe('CommandPaletteInput', () => {
200
202
  jsxElement: <CommandPaletteInput manager={manager} />,
201
203
  })
202
204
 
203
- await sleepAsync(50)
205
+ await flushUpdates()
204
206
 
205
207
  const component = document.querySelector('shades-command-palette-input') as HTMLElement
206
208
  const inputElement = component?.querySelector('input') as HTMLInputElement
207
209
  inputElement.value = 'some text'
208
210
 
209
211
  manager.isOpened.setValue(true)
210
- await sleepAsync(50)
212
+ await flushUpdates()
211
213
 
212
214
  expect(inputElement.value).toBe('')
213
215
  })
@@ -226,14 +228,16 @@ describe('CommandPaletteInput', () => {
226
228
  jsxElement: <CommandPaletteInput manager={manager} />,
227
229
  })
228
230
 
229
- await sleepAsync(50)
231
+ await flushUpdates()
230
232
 
231
233
  const component = document.querySelector('shades-command-palette-input') as HTMLElement
232
234
  const inputElement = component?.querySelector('input') as HTMLInputElement
233
235
  inputElement.value = 'search term'
234
236
 
235
237
  manager.isOpened.setValue(false)
236
- await sleepAsync(50)
238
+ await flushUpdates()
239
+ await vi.advanceTimersByTimeAsync(20)
240
+ await flushUpdates()
237
241
 
238
242
  expect(inputElement.value).toBe('')
239
243
  })
@@ -251,7 +255,7 @@ describe('CommandPaletteInput', () => {
251
255
  jsxElement: <CommandPaletteInput manager={manager} />,
252
256
  })
253
257
 
254
- await sleepAsync(50)
258
+ await flushUpdates()
255
259
 
256
260
  const component = document.querySelector('shades-command-palette-input') as HTMLElement
257
261
  const computedStyle = window.getComputedStyle(component)
@@ -272,11 +276,11 @@ describe('CommandPaletteInput', () => {
272
276
  jsxElement: <CommandPaletteInput manager={manager} />,
273
277
  })
274
278
 
275
- await sleepAsync(50)
279
+ await flushUpdates()
276
280
  animateCalls = []
277
281
 
278
282
  manager.isOpened.setValue(true)
279
- await sleepAsync(50)
283
+ await flushUpdates()
280
284
 
281
285
  const widthAnimation = animateCalls.find(
282
286
  (call) => Array.isArray(call.keyframes) && call.keyframes.some((kf: Keyframe) => 'width' in kf),
@@ -302,11 +306,11 @@ describe('CommandPaletteInput', () => {
302
306
  jsxElement: <CommandPaletteInput manager={manager} />,
303
307
  })
304
308
 
305
- await sleepAsync(50)
309
+ await flushUpdates()
306
310
  animateCalls = []
307
311
 
308
312
  manager.isOpened.setValue(true)
309
- await sleepAsync(50)
313
+ await flushUpdates()
310
314
 
311
315
  const widthAnimation = animateCalls.find(
312
316
  (call) => Array.isArray(call.keyframes) && call.keyframes.some((kf: Keyframe) => 'width' in kf),