@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 { Slider } from './slider.js'
@@ -23,7 +23,7 @@ describe('Slider', () => {
23
23
  rootElement: root,
24
24
  jsxElement: <Slider {...props} />,
25
25
  })
26
- await sleepAsync(100)
26
+ await flushUpdates()
27
27
  return {
28
28
  injector,
29
29
  slider: document.querySelector('shade-slider') as HTMLElement,
@@ -675,7 +675,7 @@ describe('Slider', () => {
675
675
 
676
676
  root.dispatchEvent(new MouseEvent('mousedown', { clientX: 150, clientY: 2, bubbles: true }))
677
677
  document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
678
- await sleepAsync(50)
678
+ await flushUpdates()
679
679
 
680
680
  expect(onValueChange).toHaveBeenCalled()
681
681
  const calledWith = onValueChange.mock.calls[0][0] as number
@@ -691,7 +691,7 @@ describe('Slider', () => {
691
691
 
692
692
  slider.dispatchEvent(new MouseEvent('mousedown', { clientX: 100, clientY: 2, bubbles: true }))
693
693
  document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
694
- await sleepAsync(50)
694
+ await flushUpdates()
695
695
 
696
696
  expect(onValueChange).not.toHaveBeenCalled()
697
697
  })
@@ -709,7 +709,7 @@ describe('Slider', () => {
709
709
  expect(root.hasAttribute('data-dragging')).toBe(true)
710
710
 
711
711
  document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
712
- await sleepAsync(50)
712
+ await flushUpdates()
713
713
 
714
714
  expect(root.hasAttribute('data-dragging')).toBe(false)
715
715
  },
@@ -728,7 +728,7 @@ describe('Slider', () => {
728
728
 
729
729
  document.dispatchEvent(new MouseEvent('mousemove', { clientX: 100, clientY: 2, bubbles: true }))
730
730
  document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
731
- await sleepAsync(50)
731
+ await flushUpdates()
732
732
 
733
733
  expect(onValueChange).toHaveBeenCalled()
734
734
  const calledWith = onValueChange.mock.calls[0][0] as number
@@ -754,7 +754,7 @@ describe('Slider', () => {
754
754
  // Click at 90% (180px) → closer to thumb at 80%
755
755
  root.dispatchEvent(new MouseEvent('mousedown', { clientX: 180, clientY: 2, bubbles: true }))
756
756
  document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
757
- await sleepAsync(50)
757
+ await flushUpdates()
758
758
 
759
759
  expect(onValueChange).toHaveBeenCalled()
760
760
  const val = onValueChange.mock.calls[0][0] as [number, number]
@@ -782,7 +782,7 @@ describe('Slider', () => {
782
782
  // New val for thumb[0]=20. 20 < 60, no swap.
783
783
  root.dispatchEvent(new MouseEvent('mousedown', { clientX: 40, clientY: 2, bubbles: true }))
784
784
  document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
785
- await sleepAsync(50)
785
+ await flushUpdates()
786
786
 
787
787
  expect(onValueChange).toHaveBeenCalled()
788
788
  const val = onValueChange.mock.calls[0][0] as [number, number]
@@ -814,7 +814,7 @@ describe('Slider', () => {
814
814
  // Move to 60px (30%)
815
815
  document.dispatchEvent(new MouseEvent('mousemove', { clientX: 60, clientY: 2, bubbles: true }))
816
816
  document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
817
- await sleepAsync(50)
817
+ await flushUpdates()
818
818
 
819
819
  expect(onValueChange).toHaveBeenCalled()
820
820
  const val = onValueChange.mock.calls[0][0] as [number, number]
@@ -835,7 +835,7 @@ describe('Slider', () => {
835
835
  // Click at bottom-50px (bottom=200, clientY=150 → (200-150)/200=25%)
836
836
  root.dispatchEvent(new MouseEvent('mousedown', { clientX: 2, clientY: 150, bubbles: true }))
837
837
  document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
838
- await sleepAsync(50)
838
+ await flushUpdates()
839
839
 
840
840
  expect(onValueChange).toHaveBeenCalled()
841
841
  const calledWith = onValueChange.mock.calls[0][0] as number
@@ -855,7 +855,7 @@ describe('Slider', () => {
855
855
  // Click far to the right beyond the track
856
856
  root.dispatchEvent(new MouseEvent('mousedown', { clientX: 400, clientY: 2, bubbles: true }))
857
857
  document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
858
- await sleepAsync(50)
858
+ await flushUpdates()
859
859
 
860
860
  expect(onValueChange).toHaveBeenCalled()
861
861
  const calledWith = onValueChange.mock.calls[0][0] as number
@@ -895,7 +895,7 @@ describe('Slider', () => {
895
895
  const touch = { clientX: 100, clientY: 2, identifier: 0, target: root }
896
896
  root.dispatchEvent(new TouchEvent('touchstart', { touches: [touch as unknown as Touch] }))
897
897
  document.dispatchEvent(new TouchEvent('touchend', { changedTouches: [touch as unknown as Touch] }))
898
- await sleepAsync(50)
898
+ await flushUpdates()
899
899
 
900
900
  expect(onValueChange).toHaveBeenCalled()
901
901
  const calledWith = onValueChange.mock.calls[0][0] as number
@@ -922,7 +922,7 @@ describe('Slider', () => {
922
922
 
923
923
  const endTouch = { clientX: 150, clientY: 2, identifier: 0, target: slider }
924
924
  document.dispatchEvent(new TouchEvent('touchend', { changedTouches: [endTouch as unknown as Touch] }))
925
- await sleepAsync(50)
925
+ await flushUpdates()
926
926
 
927
927
  expect(onValueChange).toHaveBeenCalled()
928
928
  const calledWith = onValueChange.mock.calls[0][0] as number
@@ -974,7 +974,7 @@ describe('Slider', () => {
974
974
  expect(root!.hasAttribute('data-dragging')).toBe(true)
975
975
 
976
976
  document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
977
- await sleepAsync(50)
977
+ await flushUpdates()
978
978
 
979
979
  expect(onValueChange).toHaveBeenCalled()
980
980
  },
@@ -1003,7 +1003,7 @@ describe('Slider', () => {
1003
1003
 
1004
1004
  slider.dispatchEvent(new MouseEvent('mousedown', { clientX: 100, clientY: 2, bubbles: true }))
1005
1005
  document.dispatchEvent(new MouseEvent('mouseup', { bubbles: true }))
1006
- await sleepAsync(50)
1006
+ await flushUpdates()
1007
1007
 
1008
1008
  // Should not have fired because getValueFromPointer returned null
1009
1009
  expect(onValueChange).not.toHaveBeenCalled()
@@ -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 { Form, FormService } from '../form.js'
@@ -26,7 +26,7 @@ describe('Switch', () => {
26
26
  jsxElement: <Switch />,
27
27
  })
28
28
 
29
- await sleepAsync(50)
29
+ await flushUpdates()
30
30
 
31
31
  const switchEl = document.querySelector('shade-switch')
32
32
  expect(switchEl).not.toBeNull()
@@ -43,7 +43,7 @@ describe('Switch', () => {
43
43
  jsxElement: <Switch name="testSwitch" />,
44
44
  })
45
45
 
46
- await sleepAsync(50)
46
+ await flushUpdates()
47
47
 
48
48
  const input = document.querySelector('shade-switch input[type="checkbox"]') as HTMLInputElement
49
49
  expect(input).not.toBeNull()
@@ -62,7 +62,7 @@ describe('Switch', () => {
62
62
  jsxElement: <Switch />,
63
63
  })
64
64
 
65
- await sleepAsync(50)
65
+ await flushUpdates()
66
66
 
67
67
  const track = document.querySelector('shade-switch .switch-track')
68
68
  const thumb = document.querySelector('shade-switch .switch-thumb')
@@ -81,7 +81,7 @@ describe('Switch', () => {
81
81
  jsxElement: <Switch labelTitle="Enable notifications" />,
82
82
  })
83
83
 
84
- await sleepAsync(50)
84
+ await flushUpdates()
85
85
 
86
86
  const label = document.querySelector('shade-switch label') as HTMLLabelElement
87
87
  expect(label).not.toBeNull()
@@ -99,7 +99,7 @@ describe('Switch', () => {
99
99
  jsxElement: <Switch />,
100
100
  })
101
101
 
102
- await sleepAsync(50)
102
+ await flushUpdates()
103
103
 
104
104
  const labelSpan = document.querySelector('shade-switch .switch-label')
105
105
  expect(labelSpan).toBeNull()
@@ -117,7 +117,7 @@ describe('Switch', () => {
117
117
  jsxElement: <Switch checked />,
118
118
  })
119
119
 
120
- await sleepAsync(50)
120
+ await flushUpdates()
121
121
 
122
122
  const input = document.querySelector('shade-switch input[type="checkbox"]') as HTMLInputElement
123
123
  expect(input.checked).toBe(true)
@@ -134,7 +134,7 @@ describe('Switch', () => {
134
134
  jsxElement: <Switch checked={false} />,
135
135
  })
136
136
 
137
- await sleepAsync(50)
137
+ await flushUpdates()
138
138
 
139
139
  const input = document.querySelector('shade-switch input[type="checkbox"]') as HTMLInputElement
140
140
  expect(input.checked).toBe(false)
@@ -153,7 +153,7 @@ describe('Switch', () => {
153
153
  jsxElement: <Switch disabled />,
154
154
  })
155
155
 
156
- await sleepAsync(50)
156
+ await flushUpdates()
157
157
 
158
158
  const switchEl = document.querySelector('shade-switch') as HTMLElement
159
159
  expect(switchEl.hasAttribute('data-disabled')).toBe(true)
@@ -170,7 +170,7 @@ describe('Switch', () => {
170
170
  jsxElement: <Switch disabled={false} />,
171
171
  })
172
172
 
173
- await sleepAsync(50)
173
+ await flushUpdates()
174
174
 
175
175
  const switchEl = document.querySelector('shade-switch') as HTMLElement
176
176
  expect(switchEl.hasAttribute('data-disabled')).toBe(false)
@@ -187,7 +187,7 @@ describe('Switch', () => {
187
187
  jsxElement: <Switch disabled />,
188
188
  })
189
189
 
190
- await sleepAsync(50)
190
+ await flushUpdates()
191
191
 
192
192
  const input = document.querySelector('shade-switch input[type="checkbox"]') as HTMLInputElement
193
193
  expect(input.disabled).toBe(true)
@@ -206,7 +206,7 @@ describe('Switch', () => {
206
206
  jsxElement: <Switch size="small" />,
207
207
  })
208
208
 
209
- await sleepAsync(50)
209
+ await flushUpdates()
210
210
 
211
211
  const switchEl = document.querySelector('shade-switch') as HTMLElement
212
212
  expect(switchEl.getAttribute('data-size')).toBe('small')
@@ -223,7 +223,7 @@ describe('Switch', () => {
223
223
  jsxElement: <Switch size="medium" />,
224
224
  })
225
225
 
226
- await sleepAsync(50)
226
+ await flushUpdates()
227
227
 
228
228
  const switchEl = document.querySelector('shade-switch') as HTMLElement
229
229
  expect(switchEl.hasAttribute('data-size')).toBe(false)
@@ -243,12 +243,12 @@ describe('Switch', () => {
243
243
  jsxElement: <Switch name="toggle" onchange={onchange} />,
244
244
  })
245
245
 
246
- await sleepAsync(50)
246
+ await flushUpdates()
247
247
 
248
248
  const input = document.querySelector('shade-switch input[type="checkbox"]') as HTMLInputElement
249
249
  input.dispatchEvent(new Event('change', { bubbles: true }))
250
250
 
251
- await sleepAsync(50)
251
+ await flushUpdates()
252
252
 
253
253
  expect(onchange).toHaveBeenCalled()
254
254
  })
@@ -266,7 +266,7 @@ describe('Switch', () => {
266
266
  jsxElement: <Switch />,
267
267
  })
268
268
 
269
- await sleepAsync(50)
269
+ await flushUpdates()
270
270
 
271
271
  const switchEl = document.querySelector('shade-switch') as HTMLElement
272
272
  const themeService = injector.getInstance(ThemeProviderService)
@@ -284,7 +284,7 @@ describe('Switch', () => {
284
284
  jsxElement: <Switch color="secondary" />,
285
285
  })
286
286
 
287
- await sleepAsync(50)
287
+ await flushUpdates()
288
288
 
289
289
  const switchEl = document.querySelector('shade-switch') as HTMLElement
290
290
  const themeService = injector.getInstance(ThemeProviderService)
@@ -310,7 +310,7 @@ describe('Switch', () => {
310
310
  ),
311
311
  })
312
312
 
313
- await sleepAsync(50)
313
+ await flushUpdates()
314
314
 
315
315
  const form = document.querySelector('form[is="shade-form"]') as HTMLFormElement
316
316
  const formInjector = (form as unknown as { injector: Injector }).injector
@@ -336,7 +336,7 @@ describe('Switch', () => {
336
336
  ),
337
337
  })
338
338
 
339
- await sleepAsync(50)
339
+ await flushUpdates()
340
340
 
341
341
  const form = document.querySelector('form[is="shade-form"]') as HTMLFormElement
342
342
  const formInjector = (form as unknown as { injector: Injector }).injector
@@ -346,7 +346,7 @@ describe('Switch', () => {
346
346
 
347
347
  rootElement.innerHTML = ''
348
348
 
349
- await sleepAsync(50)
349
+ await flushUpdates()
350
350
  })
351
351
  })
352
352
  })
@@ -362,7 +362,7 @@ describe('Switch', () => {
362
362
  jsxElement: <Switch labelProps={{ className: 'custom-label' }} />,
363
363
  })
364
364
 
365
- await sleepAsync(50)
365
+ await flushUpdates()
366
366
 
367
367
  const label = document.querySelector('shade-switch label') as HTMLLabelElement
368
368
  expect(label.className).toContain('custom-label')
@@ -381,7 +381,7 @@ describe('Switch', () => {
381
381
  jsxElement: <Switch required />,
382
382
  })
383
383
 
384
- await sleepAsync(50)
384
+ await flushUpdates()
385
385
 
386
386
  const input = document.querySelector('shade-switch input[type="checkbox"]') as HTMLInputElement
387
387
  expect(input.required).toBe(true)
@@ -400,7 +400,7 @@ describe('Switch', () => {
400
400
  jsxElement: <Switch value="yes" />,
401
401
  })
402
402
 
403
- await sleepAsync(50)
403
+ await flushUpdates()
404
404
 
405
405
  const input = document.querySelector('shade-switch input[type="checkbox"]') as HTMLInputElement
406
406
  expect(input.value).toBe('yes')
@@ -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 { TextArea } from './text-area.js'
6
6
 
@@ -23,7 +23,7 @@ describe('TextArea', () => {
23
23
  jsxElement: <TextArea />,
24
24
  })
25
25
 
26
- await sleepAsync(50)
26
+ await flushUpdates()
27
27
 
28
28
  const textArea = document.querySelector('shade-text-area')
29
29
  expect(textArea).not.toBeNull()
@@ -40,7 +40,7 @@ describe('TextArea', () => {
40
40
  jsxElement: <TextArea labelTitle="Test Label" />,
41
41
  })
42
42
 
43
- await sleepAsync(50)
43
+ await flushUpdates()
44
44
 
45
45
  const textArea = document.querySelector('shade-text-area')
46
46
  expect(textArea).not.toBeNull()
@@ -63,7 +63,7 @@ describe('TextArea', () => {
63
63
  jsxElement: <TextArea labelTitle="Test" labelProps={{ className: 'custom-label-class' }} />,
64
64
  })
65
65
 
66
- await sleepAsync(50)
66
+ await flushUpdates()
67
67
 
68
68
  const textArea = document.querySelector('shade-text-area')
69
69
  const label = textArea?.querySelector('label')
@@ -82,7 +82,7 @@ describe('TextArea', () => {
82
82
  jsxElement: <TextArea variant="outlined" />,
83
83
  })
84
84
 
85
- await sleepAsync(50)
85
+ await flushUpdates()
86
86
 
87
87
  const textArea = document.querySelector('shade-text-area') as HTMLElement
88
88
  expect(textArea).not.toBeNull()
@@ -100,7 +100,7 @@ describe('TextArea', () => {
100
100
  jsxElement: <TextArea variant="contained" />,
101
101
  })
102
102
 
103
- await sleepAsync(50)
103
+ await flushUpdates()
104
104
 
105
105
  const textArea = document.querySelector('shade-text-area') as HTMLElement
106
106
  expect(textArea).not.toBeNull()
@@ -118,7 +118,7 @@ describe('TextArea', () => {
118
118
  jsxElement: <TextArea />,
119
119
  })
120
120
 
121
- await sleepAsync(50)
121
+ await flushUpdates()
122
122
 
123
123
  const textArea = document.querySelector('shade-text-area') as HTMLElement
124
124
  expect(textArea).not.toBeNull()
@@ -136,7 +136,7 @@ describe('TextArea', () => {
136
136
  jsxElement: <TextArea disabled />,
137
137
  })
138
138
 
139
- await sleepAsync(50)
139
+ await flushUpdates()
140
140
 
141
141
  const textArea = document.querySelector('shade-text-area') as HTMLElement
142
142
  expect(textArea).not.toBeNull()
@@ -154,7 +154,7 @@ describe('TextArea', () => {
154
154
  jsxElement: <TextArea disabled={false} />,
155
155
  })
156
156
 
157
- await sleepAsync(50)
157
+ await flushUpdates()
158
158
 
159
159
  const textArea = document.querySelector('shade-text-area') as HTMLElement
160
160
  expect(textArea).not.toBeNull()
@@ -172,7 +172,7 @@ describe('TextArea', () => {
172
172
  jsxElement: <TextArea value="Test content" />,
173
173
  })
174
174
 
175
- await sleepAsync(50)
175
+ await flushUpdates()
176
176
 
177
177
  const textArea = document.querySelector('shade-text-area')
178
178
  const contentDiv = textArea?.querySelector('.textarea-content')
@@ -192,7 +192,7 @@ describe('TextArea', () => {
192
192
  jsxElement: <TextArea />,
193
193
  })
194
194
 
195
- await sleepAsync(50)
195
+ await flushUpdates()
196
196
 
197
197
  const textArea = document.querySelector('shade-text-area')
198
198
  const contentDiv = textArea?.querySelector('.textarea-content') as HTMLElement
@@ -211,7 +211,7 @@ describe('TextArea', () => {
211
211
  jsxElement: <TextArea readOnly />,
212
212
  })
213
213
 
214
- await sleepAsync(50)
214
+ await flushUpdates()
215
215
 
216
216
  const textArea = document.querySelector('shade-text-area')
217
217
  const contentDiv = textArea?.querySelector('.textarea-content') as HTMLElement
@@ -230,7 +230,7 @@ describe('TextArea', () => {
230
230
  jsxElement: <TextArea disabled />,
231
231
  })
232
232
 
233
- await sleepAsync(50)
233
+ await flushUpdates()
234
234
 
235
235
  const textArea = document.querySelector('shade-text-area')
236
236
  const contentDiv = textArea?.querySelector('.textarea-content') as HTMLElement
@@ -249,7 +249,7 @@ describe('TextArea', () => {
249
249
  jsxElement: <TextArea style={{ color: 'red' }} />,
250
250
  })
251
251
 
252
- await sleepAsync(50)
252
+ await flushUpdates()
253
253
 
254
254
  const textArea = document.querySelector('shade-text-area')
255
255
  const contentDiv = textArea?.querySelector('.textarea-content') as HTMLElement
@@ -268,7 +268,7 @@ describe('TextArea', () => {
268
268
  jsxElement: <TextArea labelProps={{ style: { backgroundColor: 'blue' } }} />,
269
269
  })
270
270
 
271
- await sleepAsync(50)
271
+ await flushUpdates()
272
272
 
273
273
  const textArea = document.querySelector('shade-text-area')
274
274
  const label = textArea?.querySelector('label') as HTMLElement
@@ -287,7 +287,7 @@ describe('TextArea', () => {
287
287
  jsxElement: <TextArea />,
288
288
  })
289
289
 
290
- await sleepAsync(50)
290
+ await flushUpdates()
291
291
 
292
292
  const textArea = document.querySelector('shade-text-area') as HTMLElement
293
293
  expect(textArea).not.toBeNull()
@@ -178,7 +178,7 @@ describe('LinearProgress', () => {
178
178
  expect(bar.style.width).toBe('20%')
179
179
 
180
180
  value.setValue(80)
181
- await sleepAsync(10)
181
+ await sleepAsync(50)
182
182
 
183
183
  expect(bar.style.width).toBe('80%')
184
184
  })
@@ -201,7 +201,7 @@ describe('LinearProgress', () => {
201
201
  expect(el.getAttribute('aria-valuenow')).toBe('30')
202
202
 
203
203
  value.setValue(90)
204
- await sleepAsync(10)
204
+ await sleepAsync(50)
205
205
 
206
206
  expect(el.getAttribute('aria-valuenow')).toBe('90')
207
207
  })