@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 type { ContextMenuItem } from './context-menu-manager.js'
6
6
  import { ContextMenuManager } from './context-menu-manager.js'
@@ -35,7 +35,7 @@ describe('ContextMenu', () => {
35
35
  jsxElement: <ContextMenu<TestData> manager={manager} onItemSelect={options?.onItemSelect} />,
36
36
  })
37
37
 
38
- await sleepAsync(50)
38
+ await flushUpdates()
39
39
 
40
40
  return {
41
41
  injector,
@@ -71,7 +71,7 @@ describe('ContextMenu', () => {
71
71
  it('should render the menu container when opened', async () => {
72
72
  await usingAsync(await renderContextMenu(), async ({ manager, getMenu }) => {
73
73
  manager.open({ items: createTestItems(), position: { x: 100, y: 200 } })
74
- await sleepAsync(50)
74
+ await flushUpdates()
75
75
 
76
76
  expect(getMenu()).not.toBeNull()
77
77
  expect(getMenu().getAttribute('role')).toBe('menu')
@@ -81,7 +81,7 @@ describe('ContextMenu', () => {
81
81
  it('should render menu items', async () => {
82
82
  await usingAsync(await renderContextMenu(), async ({ manager, getMenuItems }) => {
83
83
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
84
- await sleepAsync(50)
84
+ await flushUpdates()
85
85
 
86
86
  expect(getMenuItems().length).toBe(3)
87
87
  })
@@ -90,7 +90,7 @@ describe('ContextMenu', () => {
90
90
  it('should render separators', async () => {
91
91
  await usingAsync(await renderContextMenu(), async ({ manager, getSeparators }) => {
92
92
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
93
- await sleepAsync(50)
93
+ await flushUpdates()
94
94
 
95
95
  expect(getSeparators().length).toBe(1)
96
96
  })
@@ -99,7 +99,7 @@ describe('ContextMenu', () => {
99
99
  it('should render items with menuitem role', async () => {
100
100
  await usingAsync(await renderContextMenu(), async ({ manager, getMenuItems }) => {
101
101
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
102
- await sleepAsync(50)
102
+ await flushUpdates()
103
103
 
104
104
  const items = getMenuItems()
105
105
  items.forEach((item) => {
@@ -111,7 +111,7 @@ describe('ContextMenu', () => {
111
111
  it('should render a backdrop element', async () => {
112
112
  await usingAsync(await renderContextMenu(), async ({ manager, getBackdrop }) => {
113
113
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
114
- await sleepAsync(50)
114
+ await flushUpdates()
115
115
 
116
116
  expect(getBackdrop()).not.toBeNull()
117
117
  })
@@ -120,7 +120,7 @@ describe('ContextMenu', () => {
120
120
  it('should position the menu at the specified coordinates', async () => {
121
121
  await usingAsync(await renderContextMenu(), async ({ manager, getMenu }) => {
122
122
  manager.open({ items: createTestItems(), position: { x: 150, y: 250 } })
123
- await sleepAsync(50)
123
+ await flushUpdates()
124
124
 
125
125
  const menu = getMenu()
126
126
  expect(menu.style.left).toBe('150px')
@@ -133,12 +133,12 @@ describe('ContextMenu', () => {
133
133
  it('should close when backdrop is clicked', async () => {
134
134
  await usingAsync(await renderContextMenu(), async ({ manager, getBackdrop, getMenu }) => {
135
135
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
136
- await sleepAsync(50)
136
+ await flushUpdates()
137
137
 
138
138
  expect(getMenu()).not.toBeNull()
139
139
 
140
140
  getBackdrop().click()
141
- await sleepAsync(50)
141
+ await flushUpdates()
142
142
 
143
143
  expect(manager.isOpened.getValue()).toBe(false)
144
144
  expect(getMenu()).toBeNull()
@@ -148,12 +148,12 @@ describe('ContextMenu', () => {
148
148
  it('should close when Escape is pressed', async () => {
149
149
  await usingAsync(await renderContextMenu(), async ({ manager, getMenu }) => {
150
150
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
151
- await sleepAsync(50)
151
+ await flushUpdates()
152
152
 
153
153
  expect(getMenu()).not.toBeNull()
154
154
 
155
155
  window.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', bubbles: true }))
156
- await sleepAsync(50)
156
+ await flushUpdates()
157
157
 
158
158
  expect(manager.isOpened.getValue()).toBe(false)
159
159
  expect(getMenu()).toBeNull()
@@ -163,11 +163,11 @@ describe('ContextMenu', () => {
163
163
  it('should not close when clicking inside the menu container', async () => {
164
164
  await usingAsync(await renderContextMenu(), async ({ manager, getMenu }) => {
165
165
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
166
- await sleepAsync(50)
166
+ await flushUpdates()
167
167
 
168
168
  const menu = getMenu()
169
169
  menu.click()
170
- await sleepAsync(50)
170
+ await flushUpdates()
171
171
 
172
172
  expect(manager.isOpened.getValue()).toBe(true)
173
173
  })
@@ -179,11 +179,11 @@ describe('ContextMenu', () => {
179
179
  const onItemSelect = vi.fn()
180
180
  await usingAsync(await renderContextMenu({ onItemSelect }), async ({ manager, getMenuItems }) => {
181
181
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
182
- await sleepAsync(50)
182
+ await flushUpdates()
183
183
 
184
184
  const items = getMenuItems()
185
185
  ;(items[1] as HTMLElement).click()
186
- await sleepAsync(10)
186
+ await flushUpdates()
187
187
 
188
188
  expect(onItemSelect).toHaveBeenCalledWith({ id: 2, name: 'Copy' })
189
189
  })
@@ -192,11 +192,11 @@ describe('ContextMenu', () => {
192
192
  it('should close the menu after item selection', async () => {
193
193
  await usingAsync(await renderContextMenu(), async ({ manager, getMenuItems, getMenu }) => {
194
194
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
195
- await sleepAsync(50)
195
+ await flushUpdates()
196
196
 
197
197
  const items = getMenuItems()
198
198
  ;(items[0] as HTMLElement).click()
199
- await sleepAsync(50)
199
+ await flushUpdates()
200
200
 
201
201
  expect(manager.isOpened.getValue()).toBe(false)
202
202
  expect(getMenu()).toBeNull()
@@ -207,11 +207,11 @@ describe('ContextMenu', () => {
207
207
  const onItemSelect = vi.fn()
208
208
  await usingAsync(await renderContextMenu({ onItemSelect }), async ({ manager }) => {
209
209
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
210
- await sleepAsync(50)
210
+ await flushUpdates()
211
211
 
212
212
  manager.focusedIndex.setValue(1)
213
213
  window.dispatchEvent(new KeyboardEvent('keydown', { key: 'Enter', bubbles: true }))
214
- await sleepAsync(10)
214
+ await flushUpdates()
215
215
 
216
216
  expect(onItemSelect).toHaveBeenCalledWith({ id: 2, name: 'Copy' })
217
217
  })
@@ -222,7 +222,7 @@ describe('ContextMenu', () => {
222
222
  it('should move focus down with ArrowDown', async () => {
223
223
  await usingAsync(await renderContextMenu(), async ({ manager }) => {
224
224
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
225
- await sleepAsync(50)
225
+ await flushUpdates()
226
226
 
227
227
  window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }))
228
228
 
@@ -233,7 +233,7 @@ describe('ContextMenu', () => {
233
233
  it('should move focus up with ArrowUp', async () => {
234
234
  await usingAsync(await renderContextMenu(), async ({ manager }) => {
235
235
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
236
- await sleepAsync(50)
236
+ await flushUpdates()
237
237
 
238
238
  manager.focusedIndex.setValue(1)
239
239
  window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowUp', bubbles: true }))
@@ -245,7 +245,7 @@ describe('ContextMenu', () => {
245
245
  it('should skip separators during navigation', async () => {
246
246
  await usingAsync(await renderContextMenu(), async ({ manager }) => {
247
247
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
248
- await sleepAsync(50)
248
+ await flushUpdates()
249
249
 
250
250
  manager.focusedIndex.setValue(1)
251
251
  window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }))
@@ -257,10 +257,10 @@ describe('ContextMenu', () => {
257
257
  it('should add focused class to the focused item', async () => {
258
258
  await usingAsync(await renderContextMenu(), async ({ manager, getMenuItems }) => {
259
259
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
260
- await sleepAsync(50)
260
+ await flushUpdates()
261
261
 
262
262
  manager.focusedIndex.setValue(1)
263
- await sleepAsync(10)
263
+ await flushUpdates()
264
264
 
265
265
  const items = getMenuItems()
266
266
  expect(items[0].hasAttribute('data-focused')).toBe(false)
@@ -272,7 +272,7 @@ describe('ContextMenu', () => {
272
272
  it('should move focus to Home', async () => {
273
273
  await usingAsync(await renderContextMenu(), async ({ manager }) => {
274
274
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
275
- await sleepAsync(50)
275
+ await flushUpdates()
276
276
 
277
277
  manager.focusedIndex.setValue(3)
278
278
  window.dispatchEvent(new KeyboardEvent('keydown', { key: 'Home', bubbles: true }))
@@ -284,7 +284,7 @@ describe('ContextMenu', () => {
284
284
  it('should move focus to End', async () => {
285
285
  await usingAsync(await renderContextMenu(), async ({ manager }) => {
286
286
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
287
- await sleepAsync(50)
287
+ await flushUpdates()
288
288
 
289
289
  window.dispatchEvent(new KeyboardEvent('keydown', { key: 'End', bubbles: true }))
290
290
 
@@ -304,11 +304,11 @@ describe('ContextMenu', () => {
304
304
  ],
305
305
  position: { x: 0, y: 0 },
306
306
  })
307
- await sleepAsync(50)
307
+ await flushUpdates()
308
308
 
309
309
  const items = getMenuItems()
310
310
  ;(items[1] as HTMLElement).click()
311
- await sleepAsync(10)
311
+ await flushUpdates()
312
312
 
313
313
  expect(onItemSelect).not.toHaveBeenCalled()
314
314
  })
@@ -323,7 +323,7 @@ describe('ContextMenu', () => {
323
323
  ],
324
324
  position: { x: 0, y: 0 },
325
325
  })
326
- await sleepAsync(50)
326
+ await flushUpdates()
327
327
 
328
328
  const items = getMenuItems()
329
329
  expect(items[0].getAttribute('aria-disabled')).toBeNull()
@@ -336,11 +336,11 @@ describe('ContextMenu', () => {
336
336
  it('should remove keyboard listener when component is disconnected', async () => {
337
337
  await usingAsync(await renderContextMenu(), async ({ manager, getContextMenu }) => {
338
338
  manager.open({ items: createTestItems(), position: { x: 0, y: 0 } })
339
- await sleepAsync(50)
339
+ await flushUpdates()
340
340
 
341
341
  const contextMenu = getContextMenu()
342
342
  contextMenu.remove()
343
- await sleepAsync(10)
343
+ await flushUpdates()
344
344
 
345
345
  manager.focusedIndex.setValue(0)
346
346
  window.dispatchEvent(new KeyboardEvent('keydown', { key: 'ArrowDown', bubbles: true }))
@@ -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 { CollectionService } from '../../services/collection-service.js'
6
6
  import { DataGridBody } from './body.js'
@@ -31,7 +31,7 @@ describe('DataGridBody', () => {
31
31
  ),
32
32
  })
33
33
 
34
- await sleepAsync(50)
34
+ await flushUpdates()
35
35
 
36
36
  const body = document.querySelector('tbody[is="shade-data-grid-body"]')
37
37
  expect(body).not.toBeNull()
@@ -59,7 +59,7 @@ describe('DataGridBody', () => {
59
59
  ),
60
60
  })
61
61
 
62
- await sleepAsync(50)
62
+ await flushUpdates()
63
63
 
64
64
  const body = document.querySelector('tbody[is="shade-data-grid-body"]')
65
65
  expect(body).not.toBeNull()
@@ -92,7 +92,7 @@ describe('DataGridBody', () => {
92
92
  ),
93
93
  })
94
94
 
95
- await sleepAsync(50)
95
+ await flushUpdates()
96
96
 
97
97
  const body = document.querySelector('tbody[is="shade-data-grid-body"]')
98
98
  expect(body).not.toBeNull()
@@ -123,7 +123,7 @@ describe('DataGridBody', () => {
123
123
  ),
124
124
  })
125
125
 
126
- await sleepAsync(50)
126
+ await flushUpdates()
127
127
 
128
128
  const body = document.querySelector('tbody[is="shade-data-grid-body"]')
129
129
  const cells = body?.querySelectorAll('td')
@@ -150,7 +150,7 @@ describe('DataGridBody', () => {
150
150
  ),
151
151
  })
152
152
 
153
- await sleepAsync(50)
153
+ await flushUpdates()
154
154
 
155
155
  let body = document.querySelector('tbody[is="shade-data-grid-body"]')
156
156
  expect(body?.textContent).toContain('- No Data -')
@@ -160,7 +160,7 @@ describe('DataGridBody', () => {
160
160
  entries: [{ id: 1, name: 'New Entry' }],
161
161
  })
162
162
 
163
- await sleepAsync(50)
163
+ await flushUpdates()
164
164
 
165
165
  body = document.querySelector('tbody[is="shade-data-grid-body"]')
166
166
  const rows = body?.querySelectorAll('shades-data-grid-row')
@@ -195,7 +195,7 @@ describe('DataGridBody', () => {
195
195
  ),
196
196
  })
197
197
 
198
- await sleepAsync(50)
198
+ await flushUpdates()
199
199
 
200
200
  const cell = document.querySelector('td') as HTMLTableCellElement
201
201
  cell.click()
@@ -231,7 +231,7 @@ describe('DataGridBody', () => {
231
231
  ),
232
232
  })
233
233
 
234
- await sleepAsync(50)
234
+ await flushUpdates()
235
235
 
236
236
  const cell = document.querySelector('td') as HTMLTableCellElement
237
237
  const dblClickEvent = new MouseEvent('dblclick', { bubbles: true })
@@ -269,7 +269,7 @@ describe('DataGridBody', () => {
269
269
  ),
270
270
  })
271
271
 
272
- await sleepAsync(50)
272
+ await flushUpdates()
273
273
 
274
274
  const customId = document.querySelector('[data-testid="custom-id"]')
275
275
  const customName = document.querySelector('[data-testid="custom-name"]')
@@ -306,7 +306,7 @@ describe('DataGridBody', () => {
306
306
  ),
307
307
  })
308
308
 
309
- await sleepAsync(50)
309
+ await flushUpdates()
310
310
 
311
311
  const defaultCells = document.querySelectorAll('[data-testid="default-cell"]')
312
312
  expect(defaultCells.length).toBe(2)
@@ -334,7 +334,7 @@ describe('DataGridBody', () => {
334
334
  ),
335
335
  })
336
336
 
337
- await sleepAsync(50)
337
+ await flushUpdates()
338
338
 
339
339
  const body = document.querySelector('tbody[is="shade-data-grid-body"]')
340
340
  expect(body?.textContent).toContain('- No Data -')
@@ -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 { CollectionService } from '../../services/collection-service.js'
6
6
  import { DataGridRow } from './data-grid-row.js'
@@ -71,7 +71,7 @@ describe('DataGridRow', () => {
71
71
  </div>
72
72
  ),
73
73
  })
74
- await sleepAsync(50)
74
+ await flushUpdates()
75
75
 
76
76
  return {
77
77
  injector,
@@ -166,11 +166,11 @@ describe('DataGridRow', () => {
166
166
  expect(row?.hasAttribute('data-selected')).toBe(false)
167
167
 
168
168
  service.selection.setValue([entry])
169
- await sleepAsync(50)
169
+ await flushUpdates()
170
170
  expect(row?.hasAttribute('data-selected')).toBe(true)
171
171
 
172
172
  service.selection.setValue([])
173
- await sleepAsync(50)
173
+ await flushUpdates()
174
174
  expect(row?.hasAttribute('data-selected')).toBe(false)
175
175
  })
176
176
  })
@@ -184,7 +184,7 @@ describe('DataGridRow', () => {
184
184
  expect(row?.getAttribute('aria-selected')).toBe('false')
185
185
 
186
186
  service.selection.setValue([entry])
187
- await sleepAsync(50)
187
+ await flushUpdates()
188
188
  expect(row?.getAttribute('aria-selected')).toBe('true')
189
189
  })
190
190
  })
@@ -256,11 +256,11 @@ describe('DataGridRow', () => {
256
256
  expect(row?.hasAttribute('data-focused')).toBe(false)
257
257
 
258
258
  service.focusedEntry.setValue(entry)
259
- await sleepAsync(50)
259
+ await flushUpdates()
260
260
  expect(row?.hasAttribute('data-focused')).toBe(true)
261
261
 
262
262
  service.focusedEntry.setValue(undefined)
263
- await sleepAsync(50)
263
+ await flushUpdates()
264
264
  expect(row?.hasAttribute('data-focused')).toBe(false)
265
265
  })
266
266
  })