@furystack/shades-common-components 12.3.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 (268) hide show
  1. package/CHANGELOG.md +86 -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.d.ts +5 -2
  123. package/esm/components/form.d.ts.map +1 -1
  124. package/esm/components/form.js +28 -6
  125. package/esm/components/form.js.map +1 -1
  126. package/esm/components/form.spec.js +227 -20
  127. package/esm/components/form.spec.js.map +1 -1
  128. package/esm/components/grid.spec.js +3 -3
  129. package/esm/components/grid.spec.js.map +1 -1
  130. package/esm/components/image.spec.js +55 -52
  131. package/esm/components/image.spec.js.map +1 -1
  132. package/esm/components/inputs/autocomplete.spec.js +7 -14
  133. package/esm/components/inputs/autocomplete.spec.js.map +1 -1
  134. package/esm/components/inputs/checkbox.spec.js +22 -22
  135. package/esm/components/inputs/checkbox.spec.js.map +1 -1
  136. package/esm/components/inputs/input-number.spec.js +47 -47
  137. package/esm/components/inputs/input-number.spec.js.map +1 -1
  138. package/esm/components/inputs/input.spec.js +53 -53
  139. package/esm/components/inputs/input.spec.js.map +1 -1
  140. package/esm/components/inputs/radio-group.spec.js +14 -14
  141. package/esm/components/inputs/radio-group.spec.js.map +1 -1
  142. package/esm/components/inputs/radio.spec.js +16 -16
  143. package/esm/components/inputs/radio.spec.js.map +1 -1
  144. package/esm/components/inputs/select.spec.js +74 -74
  145. package/esm/components/inputs/select.spec.js.map +1 -1
  146. package/esm/components/inputs/slider.spec.js +16 -16
  147. package/esm/components/inputs/slider.spec.js.map +1 -1
  148. package/esm/components/inputs/switch.spec.js +24 -24
  149. package/esm/components/inputs/switch.spec.js.map +1 -1
  150. package/esm/components/inputs/text-area.spec.js +17 -17
  151. package/esm/components/inputs/text-area.spec.js.map +1 -1
  152. package/esm/components/linear-progress.spec.js +2 -2
  153. package/esm/components/list/list.spec.js +36 -36
  154. package/esm/components/list/list.spec.js.map +1 -1
  155. package/esm/components/markdown/markdown-display.spec.js +15 -15
  156. package/esm/components/markdown/markdown-display.spec.js.map +1 -1
  157. package/esm/components/markdown/markdown-editor.spec.js +8 -8
  158. package/esm/components/markdown/markdown-editor.spec.js.map +1 -1
  159. package/esm/components/markdown/markdown-input.spec.js +17 -17
  160. package/esm/components/markdown/markdown-input.spec.js.map +1 -1
  161. package/esm/components/menu/menu.spec.js +28 -28
  162. package/esm/components/menu/menu.spec.js.map +1 -1
  163. package/esm/components/modal.spec.js +15 -18
  164. package/esm/components/modal.spec.js.map +1 -1
  165. package/esm/components/noty-list.spec.js +25 -23
  166. package/esm/components/noty-list.spec.js.map +1 -1
  167. package/esm/components/page-container/index.spec.js +16 -16
  168. package/esm/components/page-container/index.spec.js.map +1 -1
  169. package/esm/components/page-container/page-header.spec.js +16 -16
  170. package/esm/components/page-container/page-header.spec.js.map +1 -1
  171. package/esm/components/page-layout/index.spec.js +29 -29
  172. package/esm/components/page-layout/index.spec.js.map +1 -1
  173. package/esm/components/paper.spec.js +3 -3
  174. package/esm/components/paper.spec.js.map +1 -1
  175. package/esm/components/rating.spec.js +61 -61
  176. package/esm/components/rating.spec.js.map +1 -1
  177. package/esm/components/skeleton.spec.js +10 -6
  178. package/esm/components/skeleton.spec.js.map +1 -1
  179. package/esm/components/suggest/suggest-input.spec.js +4 -10
  180. package/esm/components/suggest/suggest-input.spec.js.map +1 -1
  181. package/esm/components/tabs.spec.js +30 -30
  182. package/esm/components/tabs.spec.js.map +1 -1
  183. package/esm/components/tree/tree.spec.js +27 -27
  184. package/esm/components/tree/tree.spec.js.map +1 -1
  185. package/esm/components/typography.spec.js +3 -3
  186. package/esm/components/typography.spec.js.map +1 -1
  187. package/esm/components/wizard/index.spec.js +5 -5
  188. package/esm/components/wizard/index.spec.js.map +1 -1
  189. package/esm/utils/promisify-animation.d.ts.map +1 -1
  190. package/esm/utils/promisify-animation.js +3 -0
  191. package/esm/utils/promisify-animation.js.map +1 -1
  192. package/package.json +2 -2
  193. package/src/components/app-bar-link.spec.tsx +16 -19
  194. package/src/components/app-bar.spec.tsx +6 -4
  195. package/src/components/avatar.spec.tsx +9 -9
  196. package/src/components/breadcrumb.spec.tsx +2 -2
  197. package/src/components/button-group.spec.tsx +155 -11
  198. package/src/components/button-group.tsx +49 -2
  199. package/src/components/button.spec.tsx +4 -4
  200. package/src/components/cache-view.spec.tsx +3 -3
  201. package/src/components/carousel.spec.tsx +47 -47
  202. package/src/components/circular-progress.spec.tsx +2 -2
  203. package/src/components/command-palette/command-palette-input.spec.tsx +23 -19
  204. package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +27 -27
  205. package/src/components/command-palette/index.spec.tsx +64 -51
  206. package/src/components/context-menu/context-menu.spec.tsx +33 -33
  207. package/src/components/data-grid/body.spec.tsx +13 -13
  208. package/src/components/data-grid/data-grid-row.spec.tsx +8 -8
  209. package/src/components/data-grid/data-grid.spec.tsx +106 -28
  210. package/src/components/data-grid/data-grid.tsx +44 -11
  211. package/src/components/data-grid/filters/boolean-filter.spec.tsx +142 -0
  212. package/src/components/data-grid/filters/boolean-filter.tsx +45 -0
  213. package/src/components/data-grid/filters/date-filter.spec.tsx +181 -0
  214. package/src/components/data-grid/filters/date-filter.tsx +162 -0
  215. package/src/components/data-grid/filters/enum-filter.spec.tsx +168 -0
  216. package/src/components/data-grid/filters/enum-filter.tsx +119 -0
  217. package/src/components/data-grid/filters/filter-dropdown.spec.tsx +89 -0
  218. package/src/components/data-grid/filters/filter-dropdown.tsx +60 -0
  219. package/src/components/data-grid/filters/filter-styles.ts +26 -0
  220. package/src/components/data-grid/filters/index.ts +6 -0
  221. package/src/components/data-grid/filters/number-filter.spec.tsx +174 -0
  222. package/src/components/data-grid/filters/number-filter.tsx +115 -0
  223. package/src/components/data-grid/filters/string-filter.spec.tsx +157 -0
  224. package/src/components/data-grid/filters/string-filter.tsx +112 -0
  225. package/src/components/data-grid/footer.spec.tsx +38 -36
  226. package/src/components/data-grid/footer.tsx +21 -8
  227. package/src/components/data-grid/header.spec.tsx +128 -212
  228. package/src/components/data-grid/header.tsx +95 -183
  229. package/src/components/data-grid/index.tsx +1 -0
  230. package/src/components/data-grid/selection-cell.spec.tsx +8 -8
  231. package/src/components/drawer/drawer-toggle-button.spec.tsx +22 -22
  232. package/src/components/drawer/index.spec.tsx +36 -36
  233. package/src/components/dropdown.spec.tsx +38 -30
  234. package/src/components/fab.spec.tsx +4 -4
  235. package/src/components/form.spec.tsx +329 -20
  236. package/src/components/form.tsx +31 -8
  237. package/src/components/grid.spec.tsx +3 -3
  238. package/src/components/image.spec.tsx +55 -52
  239. package/src/components/inputs/autocomplete.spec.tsx +7 -14
  240. package/src/components/inputs/checkbox.spec.tsx +22 -22
  241. package/src/components/inputs/input-number.spec.tsx +47 -47
  242. package/src/components/inputs/input.spec.tsx +53 -53
  243. package/src/components/inputs/radio-group.spec.tsx +14 -14
  244. package/src/components/inputs/radio.spec.tsx +16 -16
  245. package/src/components/inputs/select.spec.tsx +74 -74
  246. package/src/components/inputs/slider.spec.tsx +16 -16
  247. package/src/components/inputs/switch.spec.tsx +24 -24
  248. package/src/components/inputs/text-area.spec.tsx +17 -17
  249. package/src/components/linear-progress.spec.tsx +2 -2
  250. package/src/components/list/list.spec.tsx +36 -36
  251. package/src/components/markdown/markdown-display.spec.tsx +15 -15
  252. package/src/components/markdown/markdown-editor.spec.tsx +8 -8
  253. package/src/components/markdown/markdown-input.spec.tsx +17 -17
  254. package/src/components/menu/menu.spec.tsx +28 -28
  255. package/src/components/modal.spec.tsx +15 -18
  256. package/src/components/noty-list.spec.tsx +25 -23
  257. package/src/components/page-container/index.spec.tsx +16 -16
  258. package/src/components/page-container/page-header.spec.tsx +16 -16
  259. package/src/components/page-layout/index.spec.tsx +29 -29
  260. package/src/components/paper.spec.tsx +3 -3
  261. package/src/components/rating.spec.tsx +61 -61
  262. package/src/components/skeleton.spec.tsx +10 -6
  263. package/src/components/suggest/suggest-input.spec.tsx +4 -10
  264. package/src/components/tabs.spec.tsx +30 -30
  265. package/src/components/tree/tree.spec.tsx +27 -27
  266. package/src/components/typography.spec.tsx +3 -3
  267. package/src/components/wizard/index.spec.tsx +5 -5
  268. package/src/utils/promisify-animation.ts +3 -0
@@ -1,6 +1,6 @@
1
1
  import { Injector } from '@furystack/inject'
2
- import { createComponent, initializeShadeRoot } from '@furystack/shades'
3
- import { sleepAsync, usingAsync } from '@furystack/utils'
2
+ import { createComponent, flushUpdates, initializeShadeRoot } from '@furystack/shades'
3
+ import { usingAsync } from '@furystack/utils'
4
4
  import { afterEach, beforeEach, describe, expect, it } from 'vitest'
5
5
  import { PageHeader } from './page-header.js'
6
6
 
@@ -24,7 +24,7 @@ describe('PageHeader component', () => {
24
24
  jsxElement: <PageHeader title="Test Title" />,
25
25
  })
26
26
 
27
- await sleepAsync(50)
27
+ await flushUpdates()
28
28
  const element = document.querySelector('shade-page-header')
29
29
  expect(element).not.toBeNull()
30
30
  expect(element?.tagName.toLowerCase()).toBe('shade-page-header')
@@ -41,7 +41,7 @@ describe('PageHeader component', () => {
41
41
  jsxElement: <PageHeader title="Users" />,
42
42
  })
43
43
 
44
- await sleepAsync(50)
44
+ await flushUpdates()
45
45
  const title = document.querySelector('[data-testid="page-header-title"]')
46
46
  expect(title).not.toBeNull()
47
47
  expect(title?.textContent).toBe('Users')
@@ -58,7 +58,7 @@ describe('PageHeader component', () => {
58
58
  jsxElement: <PageHeader title="Dashboard" />,
59
59
  })
60
60
 
61
- await sleepAsync(50)
61
+ await flushUpdates()
62
62
  const title = document.querySelector('[data-testid="page-header-title"]')
63
63
  expect(title?.tagName.toLowerCase()).toBe('h2')
64
64
  })
@@ -76,7 +76,7 @@ describe('PageHeader component', () => {
76
76
  jsxElement: <PageHeader icon="👥" title="Users" />,
77
77
  })
78
78
 
79
- await sleepAsync(50)
79
+ await flushUpdates()
80
80
  const icon = document.querySelector('.page-header-icon')
81
81
  expect(icon).not.toBeNull()
82
82
  expect(icon?.textContent).toBe('👥')
@@ -93,7 +93,7 @@ describe('PageHeader component', () => {
93
93
  jsxElement: <PageHeader title="Users" />,
94
94
  })
95
95
 
96
- await sleepAsync(50)
96
+ await flushUpdates()
97
97
  const icon = document.querySelector('.page-header-icon')
98
98
  expect(icon).toBeNull()
99
99
  })
@@ -109,7 +109,7 @@ describe('PageHeader component', () => {
109
109
  jsxElement: <PageHeader icon="📁" title="Projects" />,
110
110
  })
111
111
 
112
- await sleepAsync(50)
112
+ await flushUpdates()
113
113
  const title = document.querySelector('[data-testid="page-header-title"]')
114
114
  expect(title?.textContent).toContain('📁')
115
115
  expect(title?.textContent).toContain('Projects')
@@ -128,7 +128,7 @@ describe('PageHeader component', () => {
128
128
  jsxElement: <PageHeader title="Users" description="Manage user accounts." />,
129
129
  })
130
130
 
131
- await sleepAsync(50)
131
+ await flushUpdates()
132
132
  const description = document.querySelector('[data-testid="page-header-description"]')
133
133
  expect(description).not.toBeNull()
134
134
  expect(description?.textContent).toBe('Manage user accounts.')
@@ -145,7 +145,7 @@ describe('PageHeader component', () => {
145
145
  jsxElement: <PageHeader title="Users" />,
146
146
  })
147
147
 
148
- await sleepAsync(50)
148
+ await flushUpdates()
149
149
  const description = document.querySelector('[data-testid="page-header-description"]')
150
150
  expect(description).toBeNull()
151
151
  })
@@ -161,7 +161,7 @@ describe('PageHeader component', () => {
161
161
  jsxElement: <PageHeader title="Dashboard" description="Overview of your data." />,
162
162
  })
163
163
 
164
- await sleepAsync(50)
164
+ await flushUpdates()
165
165
  const description = document.querySelector('[data-testid="page-header-description"]')
166
166
  expect(description?.tagName.toLowerCase()).toBe('p')
167
167
  })
@@ -188,7 +188,7 @@ describe('PageHeader component', () => {
188
188
  ),
189
189
  })
190
190
 
191
- await sleepAsync(50)
191
+ await flushUpdates()
192
192
  const actionsContainer = document.querySelector('[data-testid="page-header-actions"]')
193
193
  expect(actionsContainer).not.toBeNull()
194
194
 
@@ -208,7 +208,7 @@ describe('PageHeader component', () => {
208
208
  jsxElement: <PageHeader title="Users" />,
209
209
  })
210
210
 
211
- await sleepAsync(50)
211
+ await flushUpdates()
212
212
  const actionsContainer = document.querySelector('[data-testid="page-header-actions"]')
213
213
  expect(actionsContainer).toBeNull()
214
214
  })
@@ -234,7 +234,7 @@ describe('PageHeader component', () => {
234
234
  ),
235
235
  })
236
236
 
237
- await sleepAsync(50)
237
+ await flushUpdates()
238
238
  const actionsContainer = document.querySelector('[data-testid="page-header-actions"]')
239
239
  const buttons = actionsContainer?.querySelectorAll('button')
240
240
  expect(buttons?.length).toBe(2)
@@ -260,7 +260,7 @@ describe('PageHeader component', () => {
260
260
  ),
261
261
  })
262
262
 
263
- await sleepAsync(50)
263
+ await flushUpdates()
264
264
 
265
265
  const icon = document.querySelector('.page-header-icon')
266
266
  expect(icon?.textContent).toBe('👥')
@@ -292,7 +292,7 @@ describe('PageHeader component', () => {
292
292
  ),
293
293
  })
294
294
 
295
- await sleepAsync(50)
295
+ await flushUpdates()
296
296
 
297
297
  const container = document.querySelector('div[is="shade-page-container"]')
298
298
  expect(container).not.toBeNull()
@@ -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 { LayoutService } from '../../services/layout-service.js'
6
6
  import { PageLayout, type AppBarConfig, type DrawerConfig } from './index.js'
@@ -37,7 +37,7 @@ describe('PageLayout component', () => {
37
37
  ),
38
38
  })
39
39
 
40
- await sleepAsync(50)
40
+ await flushUpdates()
41
41
 
42
42
  const pageLayout = document.querySelector('shade-page-layout') as HTMLElement & { injector: Injector }
43
43
 
@@ -71,7 +71,7 @@ describe('PageLayout component', () => {
71
71
  ),
72
72
  })
73
73
 
74
- await sleepAsync(50)
74
+ await flushUpdates()
75
75
  expect(document.body.innerHTML).toContain('page-layout-content')
76
76
  })
77
77
  })
@@ -120,7 +120,7 @@ describe('PageLayout component', () => {
120
120
  ),
121
121
  })
122
122
 
123
- await sleepAsync(50)
123
+ await flushUpdates()
124
124
  expect(document.body.innerHTML).toContain('page-layout-appbar')
125
125
  expect(document.body.innerHTML).toContain('my-appbar')
126
126
  })
@@ -140,7 +140,7 @@ describe('PageLayout component', () => {
140
140
  ),
141
141
  })
142
142
 
143
- await sleepAsync(50)
143
+ await flushUpdates()
144
144
  expect(document.body.innerHTML).not.toContain('page-layout-appbar')
145
145
  })
146
146
  })
@@ -193,7 +193,7 @@ describe('PageLayout component', () => {
193
193
  ),
194
194
  })
195
195
 
196
- await sleepAsync(50)
196
+ await flushUpdates()
197
197
  const pageLayout = document.querySelector('shade-page-layout')
198
198
  expect(pageLayout?.hasAttribute('data-appbar-auto-hide')).toBe(true)
199
199
  })
@@ -218,7 +218,7 @@ describe('PageLayout component', () => {
218
218
  ),
219
219
  })
220
220
 
221
- await sleepAsync(50)
221
+ await flushUpdates()
222
222
  const pageLayout = document.querySelector('shade-page-layout')
223
223
  expect(pageLayout?.hasAttribute('data-appbar-auto-hide')).toBe(false)
224
224
  })
@@ -243,7 +243,7 @@ describe('PageLayout component', () => {
243
243
  ),
244
244
  })
245
245
 
246
- await sleepAsync(50)
246
+ await flushUpdates()
247
247
  // Auto-hide appbars should start hidden (no data-appbar-visible attribute)
248
248
  const pageLayout = document.querySelector('shade-page-layout')
249
249
  expect(pageLayout?.hasAttribute('data-appbar-visible')).toBe(false)
@@ -273,7 +273,7 @@ describe('PageLayout component', () => {
273
273
  ),
274
274
  })
275
275
 
276
- await sleepAsync(50)
276
+ await flushUpdates()
277
277
  expect(document.body.innerHTML).toContain('page-layout-drawer-left')
278
278
  expect(document.body.innerHTML).toContain('left-drawer')
279
279
  })
@@ -293,7 +293,7 @@ describe('PageLayout component', () => {
293
293
  ),
294
294
  })
295
295
 
296
- await sleepAsync(50)
296
+ await flushUpdates()
297
297
  expect(document.body.innerHTML).not.toContain('page-layout-drawer-left')
298
298
  })
299
299
  })
@@ -402,7 +402,7 @@ describe('PageLayout component', () => {
402
402
  ),
403
403
  })
404
404
 
405
- await sleepAsync(50)
405
+ await flushUpdates()
406
406
  const pageLayout = document.querySelector('shade-page-layout')
407
407
  expect(pageLayout?.hasAttribute('data-drawer-left-closed')).toBe(true)
408
408
  })
@@ -431,7 +431,7 @@ describe('PageLayout component', () => {
431
431
  ),
432
432
  })
433
433
 
434
- await sleepAsync(50)
434
+ await flushUpdates()
435
435
  expect(document.body.innerHTML).toContain('page-layout-drawer-right')
436
436
  expect(document.body.innerHTML).toContain('right-drawer')
437
437
  })
@@ -451,7 +451,7 @@ describe('PageLayout component', () => {
451
451
  ),
452
452
  })
453
453
 
454
- await sleepAsync(50)
454
+ await flushUpdates()
455
455
  expect(document.body.innerHTML).not.toContain('page-layout-drawer-right')
456
456
  })
457
457
  })
@@ -504,7 +504,7 @@ describe('PageLayout component', () => {
504
504
  ),
505
505
  })
506
506
 
507
- await sleepAsync(50)
507
+ await flushUpdates()
508
508
  expect(document.body.innerHTML).toContain('page-layout-drawer-left')
509
509
  expect(document.body.innerHTML).toContain('page-layout-drawer-right')
510
510
  })
@@ -559,7 +559,7 @@ describe('PageLayout component', () => {
559
559
  ),
560
560
  })
561
561
 
562
- await sleepAsync(50)
562
+ await flushUpdates()
563
563
  expect(document.body.innerHTML).toContain('page-layout-drawer-backdrop')
564
564
  })
565
565
  })
@@ -586,7 +586,7 @@ describe('PageLayout component', () => {
586
586
  ),
587
587
  })
588
588
 
589
- await sleepAsync(50)
589
+ await flushUpdates()
590
590
  const pageLayout = document.querySelector('shade-page-layout')
591
591
  expect(pageLayout?.hasAttribute('data-backdrop-visible')).toBe(true)
592
592
  })
@@ -614,13 +614,13 @@ describe('PageLayout component', () => {
614
614
  ),
615
615
  })
616
616
 
617
- await sleepAsync(50)
617
+ await flushUpdates()
618
618
  const pageLayout = document.querySelector('shade-page-layout')
619
619
  expect(pageLayout?.hasAttribute('data-drawer-left-closed')).toBe(false)
620
620
 
621
621
  const backdrop = document.querySelector('.page-layout-drawer-backdrop') as HTMLElement
622
622
  backdrop.click()
623
- await sleepAsync(50)
623
+ await flushUpdates()
624
624
 
625
625
  expect(pageLayout?.hasAttribute('data-drawer-left-closed')).toBe(true)
626
626
  })
@@ -642,7 +642,7 @@ describe('PageLayout component', () => {
642
642
  ),
643
643
  })
644
644
 
645
- await sleepAsync(50)
645
+ await flushUpdates()
646
646
  expect(document.body.innerHTML).toContain('page-layout-content')
647
647
  })
648
648
  })
@@ -661,7 +661,7 @@ describe('PageLayout component', () => {
661
661
  ),
662
662
  })
663
663
 
664
- await sleepAsync(50)
664
+ await flushUpdates()
665
665
  const pageLayout = document.querySelector('shade-page-layout') as HTMLElement
666
666
  // AppBar height is 0 when not configured, so contentPaddingTop = calc(0px + 0px)
667
667
  expect(pageLayout.style.getPropertyValue('--layout-appbar-height')).toBe('0px')
@@ -689,7 +689,7 @@ describe('PageLayout component', () => {
689
689
  ),
690
690
  })
691
691
 
692
- await sleepAsync(50)
692
+ await flushUpdates()
693
693
  const pageLayout = document.querySelector('shade-page-layout') as HTMLElement
694
694
  // Content padding top CSS variable should be calculated from appBarHeight + topGap
695
695
  expect(pageLayout.style.getPropertyValue('--layout-appbar-height')).toBe('64px')
@@ -718,7 +718,7 @@ describe('PageLayout component', () => {
718
718
  ),
719
719
  })
720
720
 
721
- await sleepAsync(50)
721
+ await flushUpdates()
722
722
  const pageLayout = document.querySelector('shade-page-layout') as HTMLElement
723
723
  expect(pageLayout.style.getPropertyValue('--layout-top-gap')).toBe('16px')
724
724
  expect(pageLayout.style.getPropertyValue('--layout-content-padding-top')).toBe('calc(48px + 16px)')
@@ -739,7 +739,7 @@ describe('PageLayout component', () => {
739
739
  ),
740
740
  })
741
741
 
742
- await sleepAsync(50)
742
+ await flushUpdates()
743
743
  const pageLayout = document.querySelector('shade-page-layout') as HTMLElement
744
744
  expect(pageLayout.style.getPropertyValue('--layout-side-gap')).toBe('24px')
745
745
  })
@@ -774,7 +774,7 @@ describe('PageLayout component', () => {
774
774
  ),
775
775
  })
776
776
 
777
- await sleepAsync(50)
777
+ await flushUpdates()
778
778
 
779
779
  const pageLayout = document.querySelector('shade-page-layout') as HTMLElement & { injector: Injector }
780
780
  const layoutService = pageLayout.injector.getInstance(LayoutService)
@@ -784,7 +784,7 @@ describe('PageLayout component', () => {
784
784
 
785
785
  // Close via LayoutService
786
786
  layoutService.setDrawerOpen('left', false)
787
- await sleepAsync(50)
787
+ await flushUpdates()
788
788
 
789
789
  expect(pageLayout.hasAttribute('data-drawer-left-closed')).toBe(true)
790
790
  })
@@ -809,7 +809,7 @@ describe('PageLayout component', () => {
809
809
  ),
810
810
  })
811
811
 
812
- await sleepAsync(50)
812
+ await flushUpdates()
813
813
 
814
814
  const pageLayout = document.querySelector('shade-page-layout') as HTMLElement & { injector: Injector }
815
815
  const layoutService = pageLayout.injector.getInstance(LayoutService)
@@ -820,7 +820,7 @@ describe('PageLayout component', () => {
820
820
 
821
821
  // Setting appBarVisible to true should persist across re-renders
822
822
  layoutService.appBarVisible.setValue(true)
823
- await sleepAsync(50)
823
+ await flushUpdates()
824
824
 
825
825
  expect(layoutService.appBarVisible.getValue()).toBe(true)
826
826
  expect(pageLayout.hasAttribute('data-appbar-visible')).toBe(true)
@@ -861,7 +861,7 @@ describe('PageLayout component', () => {
861
861
  ),
862
862
  })
863
863
 
864
- await sleepAsync(50)
864
+ await flushUpdates()
865
865
 
866
866
  expect(document.body.innerHTML).toContain('page-layout-appbar')
867
867
  expect(document.body.innerHTML).toContain('page-layout-drawer-left')
@@ -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 { Paper } from './paper.js'
6
6
 
@@ -21,7 +21,7 @@ describe('Paper', () => {
21
21
  rootElement: root,
22
22
  jsxElement: <Paper {...props}>{children}</Paper>,
23
23
  })
24
- await sleepAsync(50)
24
+ await flushUpdates()
25
25
  return {
26
26
  injector,
27
27
  paper: root.querySelector('div[is="shade-paper"]') as HTMLDivElement,