@furystack/shades-common-components 12.4.0 → 12.6.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 (297) hide show
  1. package/CHANGELOG.md +119 -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 +47 -3
  36. package/esm/components/data-grid/data-grid.d.ts.map +1 -1
  37. package/esm/components/data-grid/data-grid.js +8 -11
  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 +1 -0
  98. package/esm/components/data-grid/footer.d.ts.map +1 -1
  99. package/esm/components/data-grid/footer.js +24 -16
  100. package/esm/components/data-grid/footer.js.map +1 -1
  101. package/esm/components/data-grid/footer.spec.js +111 -71
  102. package/esm/components/data-grid/footer.spec.js.map +1 -1
  103. package/esm/components/data-grid/header.d.ts +6 -9
  104. package/esm/components/data-grid/header.d.ts.map +1 -1
  105. package/esm/components/data-grid/header.js +51 -117
  106. package/esm/components/data-grid/header.js.map +1 -1
  107. package/esm/components/data-grid/header.spec.js +116 -187
  108. package/esm/components/data-grid/header.spec.js.map +1 -1
  109. package/esm/components/data-grid/index.d.ts +1 -0
  110. package/esm/components/data-grid/index.d.ts.map +1 -1
  111. package/esm/components/data-grid/index.js +1 -0
  112. package/esm/components/data-grid/index.js.map +1 -1
  113. package/esm/components/data-grid/selection-cell.spec.js +8 -8
  114. package/esm/components/data-grid/selection-cell.spec.js.map +1 -1
  115. package/esm/components/drawer/drawer-toggle-button.spec.js +22 -22
  116. package/esm/components/drawer/drawer-toggle-button.spec.js.map +1 -1
  117. package/esm/components/drawer/index.spec.js +36 -36
  118. package/esm/components/drawer/index.spec.js.map +1 -1
  119. package/esm/components/dropdown.spec.js +38 -30
  120. package/esm/components/dropdown.spec.js.map +1 -1
  121. package/esm/components/fab.spec.js +4 -4
  122. package/esm/components/fab.spec.js.map +1 -1
  123. package/esm/components/form.spec.js +37 -37
  124. package/esm/components/form.spec.js.map +1 -1
  125. package/esm/components/grid.d.ts +3 -0
  126. package/esm/components/grid.d.ts.map +1 -1
  127. package/esm/components/grid.js +3 -0
  128. package/esm/components/grid.js.map +1 -1
  129. package/esm/components/grid.spec.js +3 -3
  130. package/esm/components/grid.spec.js.map +1 -1
  131. package/esm/components/image.spec.js +55 -52
  132. package/esm/components/image.spec.js.map +1 -1
  133. package/esm/components/inputs/autocomplete.d.ts +3 -0
  134. package/esm/components/inputs/autocomplete.d.ts.map +1 -1
  135. package/esm/components/inputs/autocomplete.js +3 -0
  136. package/esm/components/inputs/autocomplete.js.map +1 -1
  137. package/esm/components/inputs/autocomplete.spec.js +7 -14
  138. package/esm/components/inputs/autocomplete.spec.js.map +1 -1
  139. package/esm/components/inputs/checkbox.spec.js +22 -22
  140. package/esm/components/inputs/checkbox.spec.js.map +1 -1
  141. package/esm/components/inputs/input-number.spec.js +47 -47
  142. package/esm/components/inputs/input-number.spec.js.map +1 -1
  143. package/esm/components/inputs/input.spec.js +53 -53
  144. package/esm/components/inputs/input.spec.js.map +1 -1
  145. package/esm/components/inputs/radio-group.spec.js +14 -14
  146. package/esm/components/inputs/radio-group.spec.js.map +1 -1
  147. package/esm/components/inputs/radio.spec.js +16 -16
  148. package/esm/components/inputs/radio.spec.js.map +1 -1
  149. package/esm/components/inputs/select.spec.js +74 -74
  150. package/esm/components/inputs/select.spec.js.map +1 -1
  151. package/esm/components/inputs/slider.spec.js +16 -16
  152. package/esm/components/inputs/slider.spec.js.map +1 -1
  153. package/esm/components/inputs/switch.spec.js +24 -24
  154. package/esm/components/inputs/switch.spec.js.map +1 -1
  155. package/esm/components/inputs/text-area.spec.js +17 -17
  156. package/esm/components/inputs/text-area.spec.js.map +1 -1
  157. package/esm/components/linear-progress.spec.js +2 -2
  158. package/esm/components/list/list.d.ts +10 -0
  159. package/esm/components/list/list.d.ts.map +1 -1
  160. package/esm/components/list/list.js +23 -2
  161. package/esm/components/list/list.js.map +1 -1
  162. package/esm/components/list/list.spec.js +137 -36
  163. package/esm/components/list/list.spec.js.map +1 -1
  164. package/esm/components/markdown/markdown-display.spec.js +15 -15
  165. package/esm/components/markdown/markdown-display.spec.js.map +1 -1
  166. package/esm/components/markdown/markdown-editor.spec.js +8 -8
  167. package/esm/components/markdown/markdown-editor.spec.js.map +1 -1
  168. package/esm/components/markdown/markdown-input.d.ts +14 -0
  169. package/esm/components/markdown/markdown-input.d.ts.map +1 -1
  170. package/esm/components/markdown/markdown-input.js +48 -2
  171. package/esm/components/markdown/markdown-input.js.map +1 -1
  172. package/esm/components/markdown/markdown-input.spec.js +114 -17
  173. package/esm/components/markdown/markdown-input.spec.js.map +1 -1
  174. package/esm/components/menu/menu.spec.js +28 -28
  175. package/esm/components/menu/menu.spec.js.map +1 -1
  176. package/esm/components/modal.spec.js +15 -18
  177. package/esm/components/modal.spec.js.map +1 -1
  178. package/esm/components/noty-list.spec.js +25 -23
  179. package/esm/components/noty-list.spec.js.map +1 -1
  180. package/esm/components/page-container/index.spec.js +16 -16
  181. package/esm/components/page-container/index.spec.js.map +1 -1
  182. package/esm/components/page-container/page-header.spec.js +16 -16
  183. package/esm/components/page-container/page-header.spec.js.map +1 -1
  184. package/esm/components/page-layout/index.spec.js +29 -29
  185. package/esm/components/page-layout/index.spec.js.map +1 -1
  186. package/esm/components/paper.spec.js +3 -3
  187. package/esm/components/paper.spec.js.map +1 -1
  188. package/esm/components/rating.spec.js +61 -61
  189. package/esm/components/rating.spec.js.map +1 -1
  190. package/esm/components/skeleton.spec.js +10 -6
  191. package/esm/components/skeleton.spec.js.map +1 -1
  192. package/esm/components/suggest/index.d.ts +10 -2
  193. package/esm/components/suggest/index.d.ts.map +1 -1
  194. package/esm/components/suggest/index.js +21 -1
  195. package/esm/components/suggest/index.js.map +1 -1
  196. package/esm/components/suggest/index.spec.js +50 -0
  197. package/esm/components/suggest/index.spec.js.map +1 -1
  198. package/esm/components/suggest/suggest-input.spec.js +4 -10
  199. package/esm/components/suggest/suggest-input.spec.js.map +1 -1
  200. package/esm/components/tabs.spec.js +30 -30
  201. package/esm/components/tabs.spec.js.map +1 -1
  202. package/esm/components/tree/tree.spec.js +27 -27
  203. package/esm/components/tree/tree.spec.js.map +1 -1
  204. package/esm/components/typography.spec.js +3 -3
  205. package/esm/components/typography.spec.js.map +1 -1
  206. package/esm/components/wizard/index.d.ts +8 -0
  207. package/esm/components/wizard/index.d.ts.map +1 -1
  208. package/esm/components/wizard/index.js +90 -0
  209. package/esm/components/wizard/index.js.map +1 -1
  210. package/esm/components/wizard/index.spec.js +84 -7
  211. package/esm/components/wizard/index.spec.js.map +1 -1
  212. package/esm/utils/promisify-animation.d.ts.map +1 -1
  213. package/esm/utils/promisify-animation.js +3 -0
  214. package/esm/utils/promisify-animation.js.map +1 -1
  215. package/package.json +3 -3
  216. package/src/components/app-bar-link.spec.tsx +16 -19
  217. package/src/components/app-bar.spec.tsx +6 -4
  218. package/src/components/avatar.spec.tsx +9 -9
  219. package/src/components/breadcrumb.spec.tsx +2 -2
  220. package/src/components/button-group.spec.tsx +155 -11
  221. package/src/components/button-group.tsx +49 -2
  222. package/src/components/button.spec.tsx +4 -4
  223. package/src/components/cache-view.spec.tsx +3 -3
  224. package/src/components/carousel.spec.tsx +47 -47
  225. package/src/components/circular-progress.spec.tsx +2 -2
  226. package/src/components/command-palette/command-palette-input.spec.tsx +23 -19
  227. package/src/components/command-palette/command-palette-suggestion-list.spec.tsx +27 -27
  228. package/src/components/command-palette/index.spec.tsx +64 -51
  229. package/src/components/context-menu/context-menu.spec.tsx +33 -33
  230. package/src/components/data-grid/body.spec.tsx +13 -13
  231. package/src/components/data-grid/data-grid-row.spec.tsx +8 -8
  232. package/src/components/data-grid/data-grid.spec.tsx +106 -28
  233. package/src/components/data-grid/data-grid.tsx +57 -13
  234. package/src/components/data-grid/filters/boolean-filter.spec.tsx +142 -0
  235. package/src/components/data-grid/filters/boolean-filter.tsx +45 -0
  236. package/src/components/data-grid/filters/date-filter.spec.tsx +181 -0
  237. package/src/components/data-grid/filters/date-filter.tsx +162 -0
  238. package/src/components/data-grid/filters/enum-filter.spec.tsx +168 -0
  239. package/src/components/data-grid/filters/enum-filter.tsx +119 -0
  240. package/src/components/data-grid/filters/filter-dropdown.spec.tsx +89 -0
  241. package/src/components/data-grid/filters/filter-dropdown.tsx +60 -0
  242. package/src/components/data-grid/filters/filter-styles.ts +26 -0
  243. package/src/components/data-grid/filters/index.ts +6 -0
  244. package/src/components/data-grid/filters/number-filter.spec.tsx +174 -0
  245. package/src/components/data-grid/filters/number-filter.tsx +115 -0
  246. package/src/components/data-grid/filters/string-filter.spec.tsx +157 -0
  247. package/src/components/data-grid/filters/string-filter.tsx +112 -0
  248. package/src/components/data-grid/footer.spec.tsx +130 -74
  249. package/src/components/data-grid/footer.tsx +41 -34
  250. package/src/components/data-grid/header.spec.tsx +128 -212
  251. package/src/components/data-grid/header.tsx +95 -183
  252. package/src/components/data-grid/index.tsx +1 -0
  253. package/src/components/data-grid/selection-cell.spec.tsx +8 -8
  254. package/src/components/drawer/drawer-toggle-button.spec.tsx +22 -22
  255. package/src/components/drawer/index.spec.tsx +36 -36
  256. package/src/components/dropdown.spec.tsx +38 -30
  257. package/src/components/fab.spec.tsx +4 -4
  258. package/src/components/form.spec.tsx +37 -37
  259. package/src/components/grid.spec.tsx +3 -3
  260. package/src/components/grid.tsx +3 -0
  261. package/src/components/image.spec.tsx +55 -52
  262. package/src/components/inputs/autocomplete.spec.tsx +7 -14
  263. package/src/components/inputs/autocomplete.tsx +3 -0
  264. package/src/components/inputs/checkbox.spec.tsx +22 -22
  265. package/src/components/inputs/input-number.spec.tsx +47 -47
  266. package/src/components/inputs/input.spec.tsx +53 -53
  267. package/src/components/inputs/radio-group.spec.tsx +14 -14
  268. package/src/components/inputs/radio.spec.tsx +16 -16
  269. package/src/components/inputs/select.spec.tsx +74 -74
  270. package/src/components/inputs/slider.spec.tsx +16 -16
  271. package/src/components/inputs/switch.spec.tsx +24 -24
  272. package/src/components/inputs/text-area.spec.tsx +17 -17
  273. package/src/components/linear-progress.spec.tsx +2 -2
  274. package/src/components/list/list.spec.tsx +209 -36
  275. package/src/components/list/list.tsx +56 -19
  276. package/src/components/markdown/markdown-display.spec.tsx +15 -15
  277. package/src/components/markdown/markdown-editor.spec.tsx +8 -8
  278. package/src/components/markdown/markdown-input.spec.tsx +159 -17
  279. package/src/components/markdown/markdown-input.tsx +65 -1
  280. package/src/components/menu/menu.spec.tsx +28 -28
  281. package/src/components/modal.spec.tsx +15 -18
  282. package/src/components/noty-list.spec.tsx +25 -23
  283. package/src/components/page-container/index.spec.tsx +16 -16
  284. package/src/components/page-container/page-header.spec.tsx +16 -16
  285. package/src/components/page-layout/index.spec.tsx +29 -29
  286. package/src/components/paper.spec.tsx +3 -3
  287. package/src/components/rating.spec.tsx +61 -61
  288. package/src/components/skeleton.spec.tsx +10 -6
  289. package/src/components/suggest/index.spec.tsx +83 -0
  290. package/src/components/suggest/index.tsx +36 -3
  291. package/src/components/suggest/suggest-input.spec.tsx +4 -10
  292. package/src/components/tabs.spec.tsx +30 -30
  293. package/src/components/tree/tree.spec.tsx +27 -27
  294. package/src/components/typography.spec.tsx +3 -3
  295. package/src/components/wizard/index.spec.tsx +123 -6
  296. package/src/components/wizard/index.tsx +125 -0
  297. package/src/utils/promisify-animation.ts +3 -0
@@ -1,6 +1,6 @@
1
1
  import { Injector } from '@furystack/inject'
2
2
  import { initializeShadeRoot, createComponent, Shade, flushUpdates } from '@furystack/shades'
3
- import { sleepAsync, usingAsync } from '@furystack/utils'
3
+ import { usingAsync } from '@furystack/utils'
4
4
  import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
5
5
  import { Modal } from './modal.js'
6
6
 
@@ -28,7 +28,7 @@ describe('Modal', () => {
28
28
  ),
29
29
  })
30
30
 
31
- await sleepAsync(50)
31
+ await flushUpdates()
32
32
  expect(document.body.innerHTML).toContain('shade-backdrop')
33
33
  expect(document.body.innerHTML).toContain('modal-content')
34
34
  })
@@ -48,7 +48,7 @@ describe('Modal', () => {
48
48
  ),
49
49
  })
50
50
 
51
- await sleepAsync(50)
51
+ await flushUpdates()
52
52
  expect(document.body.innerHTML).not.toContain('shade-backdrop')
53
53
  expect(document.body.innerHTML).not.toContain('modal-content')
54
54
  })
@@ -74,12 +74,11 @@ describe('Modal', () => {
74
74
  const rootElement = document.getElementById('root') as HTMLDivElement
75
75
 
76
76
  initializeShadeRoot({ injector, rootElement, jsxElement: <Wrapper /> })
77
- await sleepAsync(50)
77
+ await flushUpdates()
78
78
  expect(document.body.innerHTML).not.toContain('modal-content')
79
79
 
80
80
  setVisible(true)
81
81
  await flushUpdates()
82
- await sleepAsync(50)
83
82
 
84
83
  expect(document.body.innerHTML).toContain('shade-backdrop')
85
84
  expect(document.body.innerHTML).toContain('modal-content')
@@ -106,12 +105,11 @@ describe('Modal', () => {
106
105
  const rootElement = document.getElementById('root') as HTMLDivElement
107
106
 
108
107
  initializeShadeRoot({ injector, rootElement, jsxElement: <Wrapper /> })
109
- await sleepAsync(50)
108
+ await flushUpdates()
110
109
  expect(document.body.innerHTML).toContain('modal-content')
111
110
 
112
111
  setVisible(false)
113
112
  await flushUpdates()
114
- await sleepAsync(50)
115
113
 
116
114
  expect(document.body.innerHTML).not.toContain('shade-backdrop')
117
115
  expect(document.body.innerHTML).not.toContain('modal-content')
@@ -135,12 +133,12 @@ describe('Modal', () => {
135
133
  ),
136
134
  })
137
135
 
138
- await sleepAsync(50)
136
+ await flushUpdates()
139
137
  const backdrop = document.querySelector('.shade-backdrop') as HTMLDivElement
140
138
  expect(backdrop).not.toBeNull()
141
139
 
142
140
  backdrop.click()
143
- await sleepAsync(50)
141
+ await flushUpdates()
144
142
 
145
143
  expect(onClose).toHaveBeenCalledTimes(1)
146
144
  })
@@ -167,10 +165,10 @@ describe('Modal', () => {
167
165
  ),
168
166
  })
169
167
 
170
- await sleepAsync(50)
168
+ await flushUpdates()
171
169
  const backdrop = document.querySelector('.shade-backdrop') as HTMLDivElement
172
170
  backdrop.click()
173
- await sleepAsync(50)
171
+ await flushUpdates()
174
172
 
175
173
  expect(hideAnimation).toHaveBeenCalledTimes(1)
176
174
  expect(onClose).toHaveBeenCalledTimes(1)
@@ -195,7 +193,7 @@ describe('Modal', () => {
195
193
  ),
196
194
  })
197
195
 
198
- await sleepAsync(50)
196
+ await flushUpdates()
199
197
  expect(showAnimation).toHaveBeenCalled()
200
198
  })
201
199
  })
@@ -221,12 +219,11 @@ describe('Modal', () => {
221
219
  const rootElement = document.getElementById('root') as HTMLDivElement
222
220
 
223
221
  initializeShadeRoot({ injector, rootElement, jsxElement: <Wrapper /> })
224
- await sleepAsync(50)
222
+ await flushUpdates()
225
223
  expect(showAnimation).not.toHaveBeenCalled()
226
224
 
227
225
  setVisible(true)
228
226
  await flushUpdates()
229
- await sleepAsync(50)
230
227
 
231
228
  expect(showAnimation).toHaveBeenCalled()
232
229
  expect(showAnimation.mock.calls[0][0]).toBeInstanceOf(Element)
@@ -248,10 +245,10 @@ describe('Modal', () => {
248
245
  ),
249
246
  })
250
247
 
251
- await sleepAsync(50)
248
+ await flushUpdates()
252
249
  const backdrop = document.querySelector('.shade-backdrop') as HTMLDivElement
253
250
  backdrop.click()
254
- await sleepAsync(50)
251
+ await flushUpdates()
255
252
 
256
253
  expect(hideAnimation).toHaveBeenCalled()
257
254
  expect(hideAnimation.mock.calls[0][0]).toBeInstanceOf(Element)
@@ -278,7 +275,7 @@ describe('Modal', () => {
278
275
  ),
279
276
  })
280
277
 
281
- await sleepAsync(50)
278
+ await flushUpdates()
282
279
  const backdrop = document.querySelector('.shade-backdrop') as HTMLDivElement
283
280
  expect(backdrop).not.toBeNull()
284
281
  expect(backdrop.style.backgroundColor).toBe('rgba(0, 0, 0, 0.5)')
@@ -303,7 +300,7 @@ describe('Modal', () => {
303
300
  ),
304
301
  })
305
302
 
306
- await sleepAsync(50)
303
+ await flushUpdates()
307
304
  const backdrop = document.querySelector('.shade-backdrop') as HTMLDivElement
308
305
  expect(backdrop).not.toBeNull()
309
306
  expect(backdrop.innerHTML).toContain('child-1')
@@ -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 { defaultDarkTheme } from '../services/default-dark-theme.js'
6
6
  import type { NotyModel } from '../services/noty-service.js'
@@ -80,7 +80,7 @@ describe('NotyComponent', () => {
80
80
  jsxElement: <NotyComponent model={model} onDismiss={() => {}} />,
81
81
  })
82
82
 
83
- await sleepAsync(50)
83
+ await flushUpdates()
84
84
 
85
85
  const noty = document.querySelector('shade-noty')
86
86
  expect(noty).not.toBeNull()
@@ -100,7 +100,7 @@ describe('NotyComponent', () => {
100
100
  jsxElement: <NotyComponent model={model} onDismiss={() => {}} />,
101
101
  })
102
102
 
103
- await sleepAsync(50)
103
+ await flushUpdates()
104
104
 
105
105
  expect(document.body.innerHTML).toContain('Success Title')
106
106
  expect(document.body.innerHTML).toContain('Success message body')
@@ -119,7 +119,7 @@ describe('NotyComponent', () => {
119
119
  jsxElement: <NotyComponent model={model} onDismiss={() => {}} />,
120
120
  })
121
121
 
122
- await sleepAsync(50)
122
+ await flushUpdates()
123
123
 
124
124
  const noty = document.querySelector('shade-noty') as HTMLElement
125
125
  expect(noty).not.toBeNull()
@@ -139,7 +139,7 @@ describe('NotyComponent', () => {
139
139
  jsxElement: <NotyComponent model={model} onDismiss={() => {}} />,
140
140
  })
141
141
 
142
- await sleepAsync(50)
142
+ await flushUpdates()
143
143
 
144
144
  const dismissButton = document.querySelector('.dismiss-button')
145
145
  expect(dismissButton).not.toBeNull()
@@ -148,6 +148,7 @@ describe('NotyComponent', () => {
148
148
  })
149
149
 
150
150
  it('should call onDismiss when dismiss button is clicked', async () => {
151
+ vi.useFakeTimers()
151
152
  const onDismiss = vi.fn()
152
153
 
153
154
  Element.prototype.animate = vi.fn(
@@ -181,16 +182,17 @@ describe('NotyComponent', () => {
181
182
  jsxElement: <NotyComponent model={model} onDismiss={onDismiss} />,
182
183
  })
183
184
 
184
- await sleepAsync(50)
185
+ await vi.advanceTimersByTimeAsync(50)
185
186
 
186
187
  const dismissButton = document.querySelector('.dismiss-button') as HTMLButtonElement
187
188
  expect(dismissButton).not.toBeNull()
188
189
  dismissButton.click()
189
190
 
190
- await sleepAsync(50)
191
+ await vi.advanceTimersByTimeAsync(50)
191
192
 
192
193
  expect(onDismiss).toHaveBeenCalled()
193
194
  })
195
+ vi.useRealTimers()
194
196
  })
195
197
 
196
198
  it('should start fade-in animation on mount', async () => {
@@ -363,7 +365,7 @@ describe('NotyComponent', () => {
363
365
  jsxElement: <NotyComponent model={model} onDismiss={() => {}} />,
364
366
  })
365
367
 
366
- await sleepAsync(50)
368
+ await flushUpdates()
367
369
 
368
370
  const noty = document.querySelector('shade-noty') as HTMLElement
369
371
  expect(noty).not.toBeNull()
@@ -384,7 +386,7 @@ describe('NotyComponent', () => {
384
386
  jsxElement: <NotyComponent model={model} onDismiss={() => {}} />,
385
387
  })
386
388
 
387
- await sleepAsync(50)
389
+ await flushUpdates()
388
390
 
389
391
  const noty = document.querySelector('shade-noty') as HTMLElement
390
392
  expect(noty).not.toBeNull()
@@ -443,7 +445,7 @@ describe('NotyList', () => {
443
445
  jsxElement: <NotyList />,
444
446
  })
445
447
 
446
- await sleepAsync(50)
448
+ await flushUpdates()
447
449
 
448
450
  const notyList = document.querySelector('shade-noty-list')
449
451
  expect(notyList).not.toBeNull()
@@ -461,7 +463,7 @@ describe('NotyList', () => {
461
463
  jsxElement: <NotyList />,
462
464
  })
463
465
 
464
- await sleepAsync(50)
466
+ await flushUpdates()
465
467
 
466
468
  const notyList = document.querySelector('shade-noty-list') as HTMLElement
467
469
  expect(notyList).not.toBeNull()
@@ -491,7 +493,7 @@ describe('NotyList', () => {
491
493
  jsxElement: <NotyList />,
492
494
  })
493
495
 
494
- await sleepAsync(50)
496
+ await flushUpdates()
495
497
 
496
498
  const notys = document.querySelectorAll('shade-noty')
497
499
  expect(notys.length).toBe(2)
@@ -510,7 +512,7 @@ describe('NotyList', () => {
510
512
  jsxElement: <NotyList />,
511
513
  })
512
514
 
513
- await sleepAsync(50)
515
+ await flushUpdates()
514
516
 
515
517
  let notys = document.querySelectorAll('shade-noty')
516
518
  expect(notys.length).toBe(0)
@@ -518,7 +520,7 @@ describe('NotyList', () => {
518
520
  const newNoty: NotyModel = { type: 'warning', title: 'Warning', body: 'Warning message' }
519
521
  notyService.emit('onNotyAdded', newNoty)
520
522
 
521
- await sleepAsync(50)
523
+ await flushUpdates()
522
524
 
523
525
  notys = document.querySelectorAll('shade-noty')
524
526
  expect(notys.length).toBe(1)
@@ -541,14 +543,14 @@ describe('NotyList', () => {
541
543
  jsxElement: <NotyList />,
542
544
  })
543
545
 
544
- await sleepAsync(50)
546
+ await flushUpdates()
545
547
 
546
548
  let notys = document.querySelectorAll('shade-noty')
547
549
  expect(notys.length).toBe(1)
548
550
 
549
551
  notyService.emit('onNotyRemoved', noty)
550
552
 
551
- await sleepAsync(50)
553
+ await flushUpdates()
552
554
 
553
555
  notys = document.querySelectorAll('shade-noty')
554
556
  expect(notys.length).toBe(0)
@@ -567,7 +569,7 @@ describe('NotyList', () => {
567
569
  jsxElement: <NotyList />,
568
570
  })
569
571
 
570
- await sleepAsync(50)
572
+ await flushUpdates()
571
573
 
572
574
  const noty1: NotyModel = { type: 'info', title: 'Info 1', body: 'Body 1' }
573
575
  const noty2: NotyModel = { type: 'success', title: 'Success 1', body: 'Body 2' }
@@ -577,14 +579,14 @@ describe('NotyList', () => {
577
579
  notyService.emit('onNotyAdded', noty2)
578
580
  notyService.emit('onNotyAdded', noty3)
579
581
 
580
- await sleepAsync(50)
582
+ await flushUpdates()
581
583
 
582
584
  let notys = document.querySelectorAll('shade-noty')
583
585
  expect(notys.length).toBe(3)
584
586
 
585
587
  notyService.emit('onNotyRemoved', noty2)
586
588
 
587
- await sleepAsync(50)
589
+ await flushUpdates()
588
590
 
589
591
  notys = document.querySelectorAll('shade-noty')
590
592
  expect(notys.length).toBe(2)
@@ -592,7 +594,7 @@ describe('NotyList', () => {
592
594
  notyService.emit('onNotyRemoved', noty1)
593
595
  notyService.emit('onNotyRemoved', noty3)
594
596
 
595
- await sleepAsync(50)
597
+ await flushUpdates()
596
598
 
597
599
  notys = document.querySelectorAll('shade-noty')
598
600
  expect(notys.length).toBe(0)
@@ -617,11 +619,11 @@ describe('NotyList', () => {
617
619
  jsxElement: <NotyList />,
618
620
  })
619
621
 
620
- await sleepAsync(50)
622
+ await flushUpdates()
621
623
 
622
624
  notyService.emit('onNotyRemoved', noty2)
623
625
 
624
- await sleepAsync(50)
626
+ await flushUpdates()
625
627
 
626
628
  const notys = document.querySelectorAll('shade-noty')
627
629
  expect(notys.length).toBe(1)
@@ -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 { PageContainer } from './index.js'
6
6
 
@@ -24,7 +24,7 @@ describe('PageContainer component', () => {
24
24
  jsxElement: <PageContainer>Content</PageContainer>,
25
25
  })
26
26
 
27
- await sleepAsync(50)
27
+ await flushUpdates()
28
28
  const element = document.querySelector('div[is="shade-page-container"]')
29
29
  expect(element).not.toBeNull()
30
30
  expect(element?.tagName.toLowerCase()).toBe('div')
@@ -46,7 +46,7 @@ describe('PageContainer component', () => {
46
46
  ),
47
47
  })
48
48
 
49
- await sleepAsync(50)
49
+ await flushUpdates()
50
50
  const element = document.querySelector('div[is="shade-page-container"]')
51
51
  expect(element?.textContent).toContain('Child content')
52
52
  })
@@ -67,7 +67,7 @@ describe('PageContainer component', () => {
67
67
  ),
68
68
  })
69
69
 
70
- await sleepAsync(50)
70
+ await flushUpdates()
71
71
  const element = document.querySelector('div[is="shade-page-container"]')
72
72
  expect(element?.textContent).toContain('First')
73
73
  expect(element?.textContent).toContain('Second')
@@ -86,7 +86,7 @@ describe('PageContainer component', () => {
86
86
  jsxElement: <PageContainer>Content</PageContainer>,
87
87
  })
88
88
 
89
- await sleepAsync(50)
89
+ await flushUpdates()
90
90
  const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
91
91
  expect(element.style.padding).toBe('24px')
92
92
  })
@@ -102,7 +102,7 @@ describe('PageContainer component', () => {
102
102
  jsxElement: <PageContainer>Content</PageContainer>,
103
103
  })
104
104
 
105
- await sleepAsync(50)
105
+ await flushUpdates()
106
106
  const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
107
107
  expect(element.style.gap).toBe('16px')
108
108
  })
@@ -118,7 +118,7 @@ describe('PageContainer component', () => {
118
118
  jsxElement: <PageContainer>Content</PageContainer>,
119
119
  })
120
120
 
121
- await sleepAsync(50)
121
+ await flushUpdates()
122
122
  const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
123
123
  expect(element.style.maxWidth).toBe('100%')
124
124
  })
@@ -134,7 +134,7 @@ describe('PageContainer component', () => {
134
134
  jsxElement: <PageContainer>Content</PageContainer>,
135
135
  })
136
136
 
137
- await sleepAsync(50)
137
+ await flushUpdates()
138
138
  const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
139
139
  expect(element.style.height).toBe('100%')
140
140
  })
@@ -150,7 +150,7 @@ describe('PageContainer component', () => {
150
150
  jsxElement: <PageContainer>Content</PageContainer>,
151
151
  })
152
152
 
153
- await sleepAsync(50)
153
+ await flushUpdates()
154
154
  const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
155
155
  expect(element.style.marginLeft).toBe('')
156
156
  expect(element.style.marginRight).toBe('')
@@ -169,7 +169,7 @@ describe('PageContainer component', () => {
169
169
  jsxElement: <PageContainer maxWidth="800px">Content</PageContainer>,
170
170
  })
171
171
 
172
- await sleepAsync(50)
172
+ await flushUpdates()
173
173
  const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
174
174
  expect(element.style.maxWidth).toBe('800px')
175
175
  })
@@ -185,7 +185,7 @@ describe('PageContainer component', () => {
185
185
  jsxElement: <PageContainer padding="48px">Content</PageContainer>,
186
186
  })
187
187
 
188
- await sleepAsync(50)
188
+ await flushUpdates()
189
189
  const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
190
190
  expect(element.style.padding).toBe('48px')
191
191
  })
@@ -201,7 +201,7 @@ describe('PageContainer component', () => {
201
201
  jsxElement: <PageContainer gap="32px">Content</PageContainer>,
202
202
  })
203
203
 
204
- await sleepAsync(50)
204
+ await flushUpdates()
205
205
  const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
206
206
  expect(element.style.gap).toBe('32px')
207
207
  })
@@ -221,7 +221,7 @@ describe('PageContainer component', () => {
221
221
  ),
222
222
  })
223
223
 
224
- await sleepAsync(50)
224
+ await flushUpdates()
225
225
  const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
226
226
  expect(element.style.marginLeft).toBe('auto')
227
227
  expect(element.style.marginRight).toBe('auto')
@@ -238,7 +238,7 @@ describe('PageContainer component', () => {
238
238
  jsxElement: <PageContainer fullHeight={false}>Content</PageContainer>,
239
239
  })
240
240
 
241
- await sleepAsync(50)
241
+ await flushUpdates()
242
242
  const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
243
243
  expect(element.style.height).toBe('auto')
244
244
  })
@@ -260,7 +260,7 @@ describe('PageContainer component', () => {
260
260
  ),
261
261
  })
262
262
 
263
- await sleepAsync(50)
263
+ await flushUpdates()
264
264
  const element = document.querySelector('div[is="shade-page-container"]') as HTMLDivElement
265
265
  expect(element.style.maxWidth).toBe('800px')
266
266
  expect(element.style.marginLeft).toBe('auto')
@@ -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()