@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 { Form, FormService } from '../form.js'
@@ -26,7 +26,7 @@ describe('Checkbox', () => {
26
26
  jsxElement: <Checkbox />,
27
27
  })
28
28
 
29
- await sleepAsync(50)
29
+ await flushUpdates()
30
30
 
31
31
  const checkbox = document.querySelector('shade-checkbox')
32
32
  expect(checkbox).not.toBeNull()
@@ -43,7 +43,7 @@ describe('Checkbox', () => {
43
43
  jsxElement: <Checkbox name="testField" />,
44
44
  })
45
45
 
46
- await sleepAsync(50)
46
+ await flushUpdates()
47
47
 
48
48
  const input = document.querySelector('shade-checkbox input[type="checkbox"]') as HTMLInputElement
49
49
  expect(input).not.toBeNull()
@@ -61,7 +61,7 @@ describe('Checkbox', () => {
61
61
  jsxElement: <Checkbox labelTitle="Accept terms" />,
62
62
  })
63
63
 
64
- await sleepAsync(50)
64
+ await flushUpdates()
65
65
 
66
66
  const label = document.querySelector('shade-checkbox label') as HTMLLabelElement
67
67
  expect(label).not.toBeNull()
@@ -79,7 +79,7 @@ describe('Checkbox', () => {
79
79
  jsxElement: <Checkbox />,
80
80
  })
81
81
 
82
- await sleepAsync(50)
82
+ await flushUpdates()
83
83
 
84
84
  const labelSpan = document.querySelector('shade-checkbox .checkbox-label')
85
85
  expect(labelSpan).toBeNull()
@@ -97,7 +97,7 @@ describe('Checkbox', () => {
97
97
  jsxElement: <Checkbox checked />,
98
98
  })
99
99
 
100
- await sleepAsync(50)
100
+ await flushUpdates()
101
101
 
102
102
  const input = document.querySelector('shade-checkbox input[type="checkbox"]') as HTMLInputElement
103
103
  expect(input.checked).toBe(true)
@@ -114,7 +114,7 @@ describe('Checkbox', () => {
114
114
  jsxElement: <Checkbox checked={false} />,
115
115
  })
116
116
 
117
- await sleepAsync(50)
117
+ await flushUpdates()
118
118
 
119
119
  const input = document.querySelector('shade-checkbox input[type="checkbox"]') as HTMLInputElement
120
120
  expect(input.checked).toBe(false)
@@ -133,7 +133,7 @@ describe('Checkbox', () => {
133
133
  jsxElement: <Checkbox disabled />,
134
134
  })
135
135
 
136
- await sleepAsync(50)
136
+ await flushUpdates()
137
137
 
138
138
  const wrapper = document.querySelector('shade-checkbox') as HTMLElement
139
139
  expect(wrapper.hasAttribute('data-disabled')).toBe(true)
@@ -153,7 +153,7 @@ describe('Checkbox', () => {
153
153
  jsxElement: <Checkbox disabled={false} />,
154
154
  })
155
155
 
156
- await sleepAsync(50)
156
+ await flushUpdates()
157
157
 
158
158
  const wrapper = document.querySelector('shade-checkbox') as HTMLElement
159
159
  expect(wrapper.hasAttribute('data-disabled')).toBe(false)
@@ -172,7 +172,7 @@ describe('Checkbox', () => {
172
172
  jsxElement: <Checkbox indeterminate />,
173
173
  })
174
174
 
175
- await sleepAsync(50)
175
+ await flushUpdates()
176
176
 
177
177
  const wrapper = document.querySelector('shade-checkbox') as HTMLElement
178
178
  expect(wrapper.hasAttribute('data-indeterminate')).toBe(true)
@@ -189,7 +189,7 @@ describe('Checkbox', () => {
189
189
  jsxElement: <Checkbox indeterminate={false} />,
190
190
  })
191
191
 
192
- await sleepAsync(50)
192
+ await flushUpdates()
193
193
 
194
194
  const wrapper = document.querySelector('shade-checkbox') as HTMLElement
195
195
  expect(wrapper.hasAttribute('data-indeterminate')).toBe(false)
@@ -208,7 +208,7 @@ describe('Checkbox', () => {
208
208
  jsxElement: <Checkbox />,
209
209
  })
210
210
 
211
- await sleepAsync(50)
211
+ await flushUpdates()
212
212
 
213
213
  const wrapper = document.querySelector('shade-checkbox') as HTMLElement
214
214
  const themeService = injector.getInstance(ThemeProviderService)
@@ -226,7 +226,7 @@ describe('Checkbox', () => {
226
226
  jsxElement: <Checkbox color="secondary" />,
227
227
  })
228
228
 
229
- await sleepAsync(50)
229
+ await flushUpdates()
230
230
 
231
231
  const wrapper = document.querySelector('shade-checkbox') as HTMLElement
232
232
  const themeService = injector.getInstance(ThemeProviderService)
@@ -247,12 +247,12 @@ describe('Checkbox', () => {
247
247
  jsxElement: <Checkbox onchange={onchange} />,
248
248
  })
249
249
 
250
- await sleepAsync(50)
250
+ await flushUpdates()
251
251
 
252
252
  const input = document.querySelector('shade-checkbox input[type="checkbox"]') as HTMLInputElement
253
253
  input.dispatchEvent(new Event('change', { bubbles: true }))
254
254
 
255
- await sleepAsync(50)
255
+ await flushUpdates()
256
256
 
257
257
  expect(onchange).toHaveBeenCalled()
258
258
  })
@@ -270,7 +270,7 @@ describe('Checkbox', () => {
270
270
  jsxElement: <Checkbox name="terms" value="accepted" />,
271
271
  })
272
272
 
273
- await sleepAsync(50)
273
+ await flushUpdates()
274
274
 
275
275
  const input = document.querySelector('shade-checkbox input[type="checkbox"]') as HTMLInputElement
276
276
  expect(input.value).toBe('accepted')
@@ -290,7 +290,7 @@ describe('Checkbox', () => {
290
290
  jsxElement: <Checkbox required />,
291
291
  })
292
292
 
293
- await sleepAsync(50)
293
+ await flushUpdates()
294
294
 
295
295
  const input = document.querySelector('shade-checkbox input[type="checkbox"]') as HTMLInputElement
296
296
  expect(input.required).toBe(true)
@@ -309,7 +309,7 @@ describe('Checkbox', () => {
309
309
  jsxElement: <Checkbox labelProps={{ className: 'custom-label' }} />,
310
310
  })
311
311
 
312
- await sleepAsync(50)
312
+ await flushUpdates()
313
313
 
314
314
  const label = document.querySelector('shade-checkbox label') as HTMLLabelElement
315
315
  expect(label.className).toContain('custom-label')
@@ -334,7 +334,7 @@ describe('Checkbox', () => {
334
334
  ),
335
335
  })
336
336
 
337
- await sleepAsync(50)
337
+ await flushUpdates()
338
338
 
339
339
  const form = document.querySelector('form[is="shade-form"]') as HTMLFormElement
340
340
  const formInjector = (form as unknown as { injector: Injector }).injector
@@ -360,7 +360,7 @@ describe('Checkbox', () => {
360
360
  ),
361
361
  })
362
362
 
363
- await sleepAsync(50)
363
+ await flushUpdates()
364
364
 
365
365
  const form = document.querySelector('form[is="shade-form"]') as HTMLFormElement
366
366
  const formInjector = (form as unknown as { injector: Injector }).injector
@@ -370,7 +370,7 @@ describe('Checkbox', () => {
370
370
 
371
371
  rootElement.innerHTML = ''
372
372
 
373
- await sleepAsync(50)
373
+ await flushUpdates()
374
374
  })
375
375
  })
376
376
  })
@@ -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 { InputNumber } from './input-number.js'
6
6
 
@@ -24,7 +24,7 @@ describe('InputNumber', () => {
24
24
  jsxElement: <InputNumber />,
25
25
  })
26
26
 
27
- await sleepAsync(50)
27
+ await flushUpdates()
28
28
 
29
29
  const el = document.querySelector('shade-input-number')
30
30
  expect(el).not.toBeNull()
@@ -41,7 +41,7 @@ describe('InputNumber', () => {
41
41
  jsxElement: <InputNumber value={5} />,
42
42
  })
43
43
 
44
- await sleepAsync(50)
44
+ await flushUpdates()
45
45
 
46
46
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
47
47
  const input = wrapper.querySelector('input') as HTMLInputElement
@@ -63,7 +63,7 @@ describe('InputNumber', () => {
63
63
  jsxElement: <InputNumber labelTitle="Quantity" />,
64
64
  })
65
65
 
66
- await sleepAsync(50)
66
+ await flushUpdates()
67
67
 
68
68
  const label = document.querySelector('shade-input-number label') as HTMLLabelElement
69
69
  expect(label).not.toBeNull()
@@ -83,13 +83,13 @@ describe('InputNumber', () => {
83
83
  jsxElement: <InputNumber value={5} onValueChange={onValueChange} />,
84
84
  })
85
85
 
86
- await sleepAsync(50)
86
+ await flushUpdates()
87
87
 
88
88
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
89
89
  const incrementBtn = wrapper.querySelectorAll('.step-button')[1] as HTMLButtonElement
90
90
  incrementBtn.click()
91
91
 
92
- await sleepAsync(50)
92
+ await flushUpdates()
93
93
 
94
94
  expect(onValueChange).toHaveBeenCalledWith(6)
95
95
  })
@@ -106,13 +106,13 @@ describe('InputNumber', () => {
106
106
  jsxElement: <InputNumber value={5} onValueChange={onValueChange} />,
107
107
  })
108
108
 
109
- await sleepAsync(50)
109
+ await flushUpdates()
110
110
 
111
111
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
112
112
  const decrementBtn = wrapper.querySelectorAll('.step-button')[0] as HTMLButtonElement
113
113
  decrementBtn.click()
114
114
 
115
- await sleepAsync(50)
115
+ await flushUpdates()
116
116
 
117
117
  expect(onValueChange).toHaveBeenCalledWith(4)
118
118
  })
@@ -129,13 +129,13 @@ describe('InputNumber', () => {
129
129
  jsxElement: <InputNumber value={10} step={5} onValueChange={onValueChange} />,
130
130
  })
131
131
 
132
- await sleepAsync(50)
132
+ await flushUpdates()
133
133
 
134
134
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
135
135
  const incrementBtn = wrapper.querySelectorAll('.step-button')[1] as HTMLButtonElement
136
136
  incrementBtn.click()
137
137
 
138
- await sleepAsync(50)
138
+ await flushUpdates()
139
139
 
140
140
  expect(onValueChange).toHaveBeenCalledWith(15)
141
141
  })
@@ -154,13 +154,13 @@ describe('InputNumber', () => {
154
154
  jsxElement: <InputNumber value={9} max={10} onValueChange={onValueChange} />,
155
155
  })
156
156
 
157
- await sleepAsync(50)
157
+ await flushUpdates()
158
158
 
159
159
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
160
160
  const incrementBtn = wrapper.querySelectorAll('.step-button')[1] as HTMLButtonElement
161
161
  incrementBtn.click()
162
162
 
163
- await sleepAsync(50)
163
+ await flushUpdates()
164
164
 
165
165
  expect(onValueChange).toHaveBeenCalledWith(10)
166
166
  })
@@ -177,13 +177,13 @@ describe('InputNumber', () => {
177
177
  jsxElement: <InputNumber value={1} min={0} onValueChange={onValueChange} />,
178
178
  })
179
179
 
180
- await sleepAsync(50)
180
+ await flushUpdates()
181
181
 
182
182
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
183
183
  const decrementBtn = wrapper.querySelectorAll('.step-button')[0] as HTMLButtonElement
184
184
  decrementBtn.click()
185
185
 
186
- await sleepAsync(50)
186
+ await flushUpdates()
187
187
 
188
188
  expect(onValueChange).toHaveBeenCalledWith(0)
189
189
  })
@@ -199,7 +199,7 @@ describe('InputNumber', () => {
199
199
  jsxElement: <InputNumber value={0} min={0} />,
200
200
  })
201
201
 
202
- await sleepAsync(50)
202
+ await flushUpdates()
203
203
 
204
204
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
205
205
  const decrementBtn = wrapper.querySelectorAll('.step-button')[0] as HTMLButtonElement
@@ -218,7 +218,7 @@ describe('InputNumber', () => {
218
218
  jsxElement: <InputNumber value={100} max={100} />,
219
219
  })
220
220
 
221
- await sleepAsync(50)
221
+ await flushUpdates()
222
222
 
223
223
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
224
224
  const incrementBtn = wrapper.querySelectorAll('.step-button')[1] as HTMLButtonElement
@@ -239,7 +239,7 @@ describe('InputNumber', () => {
239
239
  jsxElement: <InputNumber value={3.1} precision={2} />,
240
240
  })
241
241
 
242
- await sleepAsync(50)
242
+ await flushUpdates()
243
243
 
244
244
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
245
245
  const input = wrapper.querySelector('input') as HTMLInputElement
@@ -259,13 +259,13 @@ describe('InputNumber', () => {
259
259
  jsxElement: <InputNumber value={1} step={0.01} precision={2} onValueChange={onValueChange} />,
260
260
  })
261
261
 
262
- await sleepAsync(50)
262
+ await flushUpdates()
263
263
 
264
264
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
265
265
  const incrementBtn = wrapper.querySelectorAll('.step-button')[1] as HTMLButtonElement
266
266
  incrementBtn.click()
267
267
 
268
- await sleepAsync(50)
268
+ await flushUpdates()
269
269
 
270
270
  expect(onValueChange).toHaveBeenCalledWith(1.01)
271
271
  })
@@ -284,13 +284,13 @@ describe('InputNumber', () => {
284
284
  jsxElement: <InputNumber value={5} onValueChange={onValueChange} />,
285
285
  })
286
286
 
287
- await sleepAsync(50)
287
+ await flushUpdates()
288
288
 
289
289
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
290
290
  const input = wrapper.querySelector('input') as HTMLInputElement
291
291
  input.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }))
292
292
 
293
- await sleepAsync(50)
293
+ await flushUpdates()
294
294
 
295
295
  expect(onValueChange).toHaveBeenCalledWith(6)
296
296
  })
@@ -307,13 +307,13 @@ describe('InputNumber', () => {
307
307
  jsxElement: <InputNumber value={5} onValueChange={onValueChange} />,
308
308
  })
309
309
 
310
- await sleepAsync(50)
310
+ await flushUpdates()
311
311
 
312
312
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
313
313
  const input = wrapper.querySelector('input') as HTMLInputElement
314
314
  input.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }))
315
315
 
316
- await sleepAsync(50)
316
+ await flushUpdates()
317
317
 
318
318
  expect(onValueChange).toHaveBeenCalledWith(4)
319
319
  })
@@ -330,13 +330,13 @@ describe('InputNumber', () => {
330
330
  jsxElement: <InputNumber value={5} disabled onValueChange={onValueChange} />,
331
331
  })
332
332
 
333
- await sleepAsync(50)
333
+ await flushUpdates()
334
334
 
335
335
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
336
336
  const input = wrapper.querySelector('input') as HTMLInputElement
337
337
  input.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }))
338
338
 
339
- await sleepAsync(50)
339
+ await flushUpdates()
340
340
 
341
341
  expect(onValueChange).not.toHaveBeenCalled()
342
342
  })
@@ -354,7 +354,7 @@ describe('InputNumber', () => {
354
354
  jsxElement: <InputNumber value={1000} formatter={(v) => (v !== undefined ? `$${v.toLocaleString()}` : '')} />,
355
355
  })
356
356
 
357
- await sleepAsync(50)
357
+ await flushUpdates()
358
358
 
359
359
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
360
360
  const input = wrapper.querySelector('input') as HTMLInputElement
@@ -384,7 +384,7 @@ describe('InputNumber', () => {
384
384
  ),
385
385
  })
386
386
 
387
- await sleepAsync(50)
387
+ await flushUpdates()
388
388
 
389
389
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
390
390
  const input = wrapper.querySelector('input') as HTMLInputElement
@@ -392,7 +392,7 @@ describe('InputNumber', () => {
392
392
  input.value = '$500'
393
393
  input.dispatchEvent(new Event('change', { bubbles: true }))
394
394
 
395
- await sleepAsync(50)
395
+ await flushUpdates()
396
396
 
397
397
  expect(onValueChange).toHaveBeenCalledWith(500)
398
398
  })
@@ -411,7 +411,7 @@ describe('InputNumber', () => {
411
411
  jsxElement: <InputNumber value={0} onValueChange={onValueChange} />,
412
412
  })
413
413
 
414
- await sleepAsync(50)
414
+ await flushUpdates()
415
415
 
416
416
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
417
417
  const input = wrapper.querySelector('input') as HTMLInputElement
@@ -419,7 +419,7 @@ describe('InputNumber', () => {
419
419
  input.value = '42'
420
420
  input.dispatchEvent(new Event('blur', { bubbles: true }))
421
421
 
422
- await sleepAsync(50)
422
+ await flushUpdates()
423
423
 
424
424
  expect(onValueChange).toHaveBeenCalledWith(42)
425
425
  })
@@ -436,7 +436,7 @@ describe('InputNumber', () => {
436
436
  jsxElement: <InputNumber value={5} onValueChange={onValueChange} />,
437
437
  })
438
438
 
439
- await sleepAsync(50)
439
+ await flushUpdates()
440
440
 
441
441
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
442
442
  const input = wrapper.querySelector('input') as HTMLInputElement
@@ -444,7 +444,7 @@ describe('InputNumber', () => {
444
444
  input.value = ''
445
445
  input.dispatchEvent(new Event('blur', { bubbles: true }))
446
446
 
447
- await sleepAsync(50)
447
+ await flushUpdates()
448
448
 
449
449
  expect(onValueChange).toHaveBeenCalledWith(undefined)
450
450
  })
@@ -462,7 +462,7 @@ describe('InputNumber', () => {
462
462
  jsxElement: <InputNumber disabled />,
463
463
  })
464
464
 
465
- await sleepAsync(50)
465
+ await flushUpdates()
466
466
 
467
467
  const el = document.querySelector('shade-input-number') as HTMLElement
468
468
  expect(el.hasAttribute('data-disabled')).toBe(true)
@@ -479,7 +479,7 @@ describe('InputNumber', () => {
479
479
  jsxElement: <InputNumber value={5} disabled />,
480
480
  })
481
481
 
482
- await sleepAsync(50)
482
+ await flushUpdates()
483
483
 
484
484
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
485
485
  const buttons = wrapper.querySelectorAll('.step-button')
@@ -500,13 +500,13 @@ describe('InputNumber', () => {
500
500
  jsxElement: <InputNumber value={5} disabled onValueChange={onValueChange} />,
501
501
  })
502
502
 
503
- await sleepAsync(50)
503
+ await flushUpdates()
504
504
 
505
505
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
506
506
  const incrementBtn = wrapper.querySelectorAll('.step-button')[1] as HTMLButtonElement
507
507
  incrementBtn.click()
508
508
 
509
- await sleepAsync(50)
509
+ await flushUpdates()
510
510
 
511
511
  expect(onValueChange).not.toHaveBeenCalled()
512
512
  })
@@ -524,7 +524,7 @@ describe('InputNumber', () => {
524
524
  jsxElement: <InputNumber variant="outlined" />,
525
525
  })
526
526
 
527
- await sleepAsync(50)
527
+ await flushUpdates()
528
528
 
529
529
  const el = document.querySelector('shade-input-number') as HTMLElement
530
530
  expect(el.getAttribute('data-variant')).toBe('outlined')
@@ -541,7 +541,7 @@ describe('InputNumber', () => {
541
541
  jsxElement: <InputNumber variant="contained" />,
542
542
  })
543
543
 
544
- await sleepAsync(50)
544
+ await flushUpdates()
545
545
 
546
546
  const el = document.querySelector('shade-input-number') as HTMLElement
547
547
  expect(el.getAttribute('data-variant')).toBe('contained')
@@ -560,7 +560,7 @@ describe('InputNumber', () => {
560
560
  jsxElement: <InputNumber helperText="Enter a quantity" />,
561
561
  })
562
562
 
563
- await sleepAsync(50)
563
+ await flushUpdates()
564
564
 
565
565
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
566
566
  const helperText = wrapper.querySelector('.helperText') as HTMLElement
@@ -580,7 +580,7 @@ describe('InputNumber', () => {
580
580
  jsxElement: <InputNumber />,
581
581
  })
582
582
 
583
- await sleepAsync(50)
583
+ await flushUpdates()
584
584
 
585
585
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
586
586
  const helperText = wrapper.querySelector('.helperText')
@@ -602,7 +602,7 @@ describe('InputNumber', () => {
602
602
  })
603
603
 
604
604
  // Wait for render + requestAnimationFrame
605
- await sleepAsync(100)
605
+ await flushUpdates()
606
606
 
607
607
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
608
608
  const input = wrapper.querySelector('input') as HTMLInputElement
@@ -625,7 +625,7 @@ describe('InputNumber', () => {
625
625
  })
626
626
 
627
627
  // Wait for render + requestAnimationFrame
628
- await sleepAsync(100)
628
+ await flushUpdates()
629
629
 
630
630
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
631
631
  const buttons = wrapper.querySelectorAll('.step-button')
@@ -648,13 +648,13 @@ describe('InputNumber', () => {
648
648
  jsxElement: <InputNumber min={1} onValueChange={onValueChange} />,
649
649
  })
650
650
 
651
- await sleepAsync(50)
651
+ await flushUpdates()
652
652
 
653
653
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
654
654
  const incrementBtn = wrapper.querySelectorAll('.step-button')[1] as HTMLButtonElement
655
655
  incrementBtn.click()
656
656
 
657
- await sleepAsync(50)
657
+ await flushUpdates()
658
658
 
659
659
  expect(onValueChange).toHaveBeenCalledWith(2)
660
660
  })
@@ -671,13 +671,13 @@ describe('InputNumber', () => {
671
671
  jsxElement: <InputNumber onValueChange={onValueChange} />,
672
672
  })
673
673
 
674
- await sleepAsync(50)
674
+ await flushUpdates()
675
675
 
676
676
  const wrapper = document.querySelector('shade-input-number') as HTMLElement
677
677
  const incrementBtn = wrapper.querySelectorAll('.step-button')[1] as HTMLButtonElement
678
678
  incrementBtn.click()
679
679
 
680
- await sleepAsync(50)
680
+ await flushUpdates()
681
681
 
682
682
  expect(onValueChange).toHaveBeenCalledWith(1)
683
683
  })