@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, vi } from 'vitest'
5
5
  import { CommandPaletteManager } from './command-palette-manager.js'
6
6
  import { CommandPaletteSuggestionList } from './command-palette-suggestion-list.js'
@@ -65,7 +65,7 @@ describe('CommandPaletteSuggestionList', () => {
65
65
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
66
66
  })
67
67
 
68
- await sleepAsync(50)
68
+ await flushUpdates()
69
69
 
70
70
  const component = document.querySelector('shade-command-palette-suggestion-list')
71
71
  expect(component).not.toBeNull()
@@ -84,7 +84,7 @@ describe('CommandPaletteSuggestionList', () => {
84
84
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
85
85
  })
86
86
 
87
- await sleepAsync(50)
87
+ await flushUpdates()
88
88
 
89
89
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
90
90
  const container = component?.querySelector('.suggestion-items-container')
@@ -105,7 +105,7 @@ describe('CommandPaletteSuggestionList', () => {
105
105
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
106
106
  })
107
107
 
108
- await sleepAsync(50)
108
+ await flushUpdates()
109
109
 
110
110
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
111
111
  const items = component?.querySelectorAll('.suggestion-item')
@@ -126,7 +126,7 @@ describe('CommandPaletteSuggestionList', () => {
126
126
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
127
127
  })
128
128
 
129
- await sleepAsync(50)
129
+ await flushUpdates()
130
130
 
131
131
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
132
132
  const item = component?.querySelector('.suggestion-item')
@@ -148,7 +148,7 @@ describe('CommandPaletteSuggestionList', () => {
148
148
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
149
149
  })
150
150
 
151
- await sleepAsync(50)
151
+ await flushUpdates()
152
152
 
153
153
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
154
154
  const items = component?.querySelectorAll('.suggestion-item')
@@ -171,10 +171,10 @@ describe('CommandPaletteSuggestionList', () => {
171
171
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
172
172
  })
173
173
 
174
- await sleepAsync(50)
174
+ await flushUpdates()
175
175
 
176
176
  manager.selectedIndex.setValue(1)
177
- await sleepAsync(50)
177
+ await flushUpdates()
178
178
 
179
179
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
180
180
  const items = component?.querySelectorAll('.suggestion-item')
@@ -198,7 +198,7 @@ describe('CommandPaletteSuggestionList', () => {
198
198
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
199
199
  })
200
200
 
201
- await sleepAsync(50)
201
+ await flushUpdates()
202
202
 
203
203
  const selectSpy = vi.spyOn(manager, 'selectSuggestion')
204
204
 
@@ -225,7 +225,7 @@ describe('CommandPaletteSuggestionList', () => {
225
225
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
226
226
  })
227
227
 
228
- await sleepAsync(50)
228
+ await flushUpdates()
229
229
 
230
230
  const selectSpy = vi.spyOn(manager, 'selectSuggestion')
231
231
 
@@ -250,11 +250,11 @@ describe('CommandPaletteSuggestionList', () => {
250
250
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
251
251
  })
252
252
 
253
- await sleepAsync(50)
253
+ await flushUpdates()
254
254
  animateCalls = []
255
255
 
256
256
  manager.isOpened.setValue(true)
257
- await sleepAsync(50)
257
+ await flushUpdates()
258
258
 
259
259
  const slideAnimation = animateCalls.find(
260
260
  (call) =>
@@ -282,11 +282,11 @@ describe('CommandPaletteSuggestionList', () => {
282
282
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
283
283
  })
284
284
 
285
- await sleepAsync(50)
285
+ await flushUpdates()
286
286
  animateCalls = []
287
287
 
288
288
  manager.isOpened.setValue(false)
289
- await sleepAsync(50)
289
+ await flushUpdates()
290
290
 
291
291
  const slideAnimation = animateCalls.find(
292
292
  (call) =>
@@ -313,10 +313,10 @@ describe('CommandPaletteSuggestionList', () => {
313
313
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
314
314
  })
315
315
 
316
- await sleepAsync(50)
316
+ await flushUpdates()
317
317
 
318
318
  manager.isOpened.setValue(true)
319
- await sleepAsync(50)
319
+ await flushUpdates()
320
320
 
321
321
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
322
322
  const container = component?.querySelector('.suggestion-items-container') as HTMLElement
@@ -337,10 +337,10 @@ describe('CommandPaletteSuggestionList', () => {
337
337
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
338
338
  })
339
339
 
340
- await sleepAsync(50)
340
+ await flushUpdates()
341
341
 
342
342
  manager.isOpened.setValue(false)
343
- await sleepAsync(50)
343
+ await flushUpdates()
344
344
 
345
345
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
346
346
  const container = component?.querySelector('.suggestion-items-container') as HTMLElement
@@ -361,7 +361,7 @@ describe('CommandPaletteSuggestionList', () => {
361
361
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
362
362
  })
363
363
 
364
- await sleepAsync(50)
364
+ await flushUpdates()
365
365
 
366
366
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
367
367
  const items = component?.querySelectorAll('.suggestion-item')
@@ -382,7 +382,7 @@ describe('CommandPaletteSuggestionList', () => {
382
382
  jsxElement: <CommandPaletteSuggestionList manager={manager} fullScreenSuggestions />,
383
383
  })
384
384
 
385
- await sleepAsync(50)
385
+ await flushUpdates()
386
386
 
387
387
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
388
388
  const container = component?.querySelector('.suggestion-items-container') as HTMLElement
@@ -404,7 +404,7 @@ describe('CommandPaletteSuggestionList', () => {
404
404
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
405
405
  })
406
406
 
407
- await sleepAsync(50)
407
+ await flushUpdates()
408
408
 
409
409
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
410
410
  const container = component?.querySelector('.suggestion-items-container') as HTMLElement
@@ -425,7 +425,7 @@ describe('CommandPaletteSuggestionList', () => {
425
425
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
426
426
  })
427
427
 
428
- await sleepAsync(50)
428
+ await flushUpdates()
429
429
 
430
430
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
431
431
  const container = component?.querySelector('.suggestion-items-container') as HTMLElement
@@ -455,7 +455,7 @@ describe('CommandPaletteSuggestionList', () => {
455
455
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
456
456
  })
457
457
 
458
- await sleepAsync(50)
458
+ await flushUpdates()
459
459
 
460
460
  const selectSpy = vi.spyOn(manager, 'selectSuggestion')
461
461
 
@@ -480,17 +480,17 @@ describe('CommandPaletteSuggestionList', () => {
480
480
  jsxElement: <CommandPaletteSuggestionList manager={manager} />,
481
481
  })
482
482
 
483
- await sleepAsync(50)
483
+ await flushUpdates()
484
484
 
485
485
  manager.isOpened.setValue(true)
486
- await sleepAsync(50)
486
+ await flushUpdates()
487
487
 
488
488
  const component = document.querySelector('shade-command-palette-suggestion-list') as HTMLElement
489
489
  const container = component?.querySelector('.suggestion-items-container') as HTMLElement
490
490
  expect(container?.style.zIndex).toBe('1')
491
491
 
492
492
  manager.isOpened.setValue(false)
493
- await sleepAsync(50)
493
+ await flushUpdates()
494
494
 
495
495
  expect(container?.style.zIndex).toBe('-1')
496
496
  })
@@ -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 { CommandPaletteSuggestionResult, CommandProvider } from './command-provider.js'
6
6
  import { CommandPalette } from './index.js'
@@ -9,6 +9,7 @@ describe('CommandPalette', () => {
9
9
  let originalAnimate: typeof Element.prototype.animate
10
10
 
11
11
  beforeEach(() => {
12
+ vi.useFakeTimers()
12
13
  document.body.innerHTML = '<div id="root"></div>'
13
14
 
14
15
  originalAnimate = Element.prototype.animate
@@ -29,6 +30,7 @@ describe('CommandPalette', () => {
29
30
  })
30
31
 
31
32
  afterEach(() => {
33
+ vi.useRealTimers()
32
34
  document.body.innerHTML = ''
33
35
  Element.prototype.animate = originalAnimate
34
36
  vi.restoreAllMocks()
@@ -59,7 +61,7 @@ describe('CommandPalette', () => {
59
61
  jsxElement: <CommandPalette commandProviders={[]} defaultPrefix=">" />,
60
62
  })
61
63
 
62
- await sleepAsync(50)
64
+ await flushUpdates()
63
65
 
64
66
  const commandPalette = document.querySelector('shade-command-palette')
65
67
  expect(commandPalette).not.toBeNull()
@@ -77,7 +79,7 @@ describe('CommandPalette', () => {
77
79
  jsxElement: <CommandPalette commandProviders={[]} defaultPrefix=">" />,
78
80
  })
79
81
 
80
- await sleepAsync(50)
82
+ await flushUpdates()
81
83
 
82
84
  expect(document.body.innerHTML).toContain('>')
83
85
  })
@@ -93,7 +95,7 @@ describe('CommandPalette', () => {
93
95
  jsxElement: <CommandPalette commandProviders={[]} defaultPrefix=">" />,
94
96
  })
95
97
 
96
- await sleepAsync(50)
98
+ await flushUpdates()
97
99
 
98
100
  const input = document.querySelector('shades-command-palette-input')
99
101
  expect(input).not.toBeNull()
@@ -110,7 +112,7 @@ describe('CommandPalette', () => {
110
112
  jsxElement: <CommandPalette commandProviders={[]} defaultPrefix=">" />,
111
113
  })
112
114
 
113
- await sleepAsync(50)
115
+ await flushUpdates()
114
116
 
115
117
  const suggestionList = document.querySelector('shade-command-palette-suggestion-list')
116
118
  expect(suggestionList).not.toBeNull()
@@ -146,7 +148,7 @@ describe('CommandPalette', () => {
146
148
  jsxElement: <CommandPalette commandProviders={[provider]} defaultPrefix=">" />,
147
149
  })
148
150
 
149
- await sleepAsync(50)
151
+ await flushUpdates()
150
152
 
151
153
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
152
154
  const input = commandPalette.querySelector('input') as HTMLInputElement
@@ -155,11 +157,12 @@ describe('CommandPalette', () => {
155
157
  input.value = 'test'
156
158
  triggerKeyup(input, 'a')
157
159
 
158
- await sleepAsync(300)
160
+ await vi.advanceTimersByTimeAsync(300)
161
+ await flushUpdates()
159
162
 
160
163
  // Press ArrowDown
161
164
  triggerKeyup(input, 'ArrowDown')
162
- await sleepAsync(50)
165
+ await flushUpdates()
163
166
 
164
167
  const suggestionItems = getSuggestionItems(commandPalette)
165
168
  expect(suggestionItems[1]?.classList.contains('selected')).toBe(true)
@@ -182,7 +185,7 @@ describe('CommandPalette', () => {
182
185
  jsxElement: <CommandPalette commandProviders={[provider]} defaultPrefix=">" />,
183
186
  })
184
187
 
185
- await sleepAsync(50)
188
+ await flushUpdates()
186
189
 
187
190
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
188
191
  const input = commandPalette.querySelector('input') as HTMLInputElement
@@ -191,13 +194,14 @@ describe('CommandPalette', () => {
191
194
  input.value = 'test'
192
195
  triggerKeyup(input, 'a')
193
196
 
194
- await sleepAsync(300)
197
+ await vi.advanceTimersByTimeAsync(300)
198
+ await flushUpdates()
195
199
 
196
200
  // Navigate down then up
197
201
  triggerKeyup(input, 'ArrowDown')
198
- await sleepAsync(50)
202
+ await flushUpdates()
199
203
  triggerKeyup(input, 'ArrowUp')
200
- await sleepAsync(50)
204
+ await flushUpdates()
201
205
 
202
206
  const suggestionItems = getSuggestionItems(commandPalette)
203
207
  expect(suggestionItems[0]?.classList.contains('selected')).toBe(true)
@@ -216,7 +220,7 @@ describe('CommandPalette', () => {
216
220
  jsxElement: <CommandPalette commandProviders={[provider]} defaultPrefix=">" />,
217
221
  })
218
222
 
219
- await sleepAsync(50)
223
+ await flushUpdates()
220
224
 
221
225
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
222
226
  const input = commandPalette.querySelector('input') as HTMLInputElement
@@ -224,13 +228,14 @@ describe('CommandPalette', () => {
224
228
  input.value = 'test'
225
229
  triggerKeyup(input, 'a')
226
230
 
227
- await sleepAsync(300)
231
+ await vi.advanceTimersByTimeAsync(300)
232
+ await flushUpdates()
228
233
 
229
234
  // Press ArrowDown multiple times
230
235
  triggerKeyup(input, 'ArrowDown')
231
236
  triggerKeyup(input, 'ArrowDown')
232
237
  triggerKeyup(input, 'ArrowDown')
233
- await sleepAsync(50)
238
+ await flushUpdates()
234
239
 
235
240
  const suggestionItems = getSuggestionItems(commandPalette)
236
241
  expect(suggestionItems[1]?.classList.contains('selected')).toBe(true)
@@ -249,7 +254,7 @@ describe('CommandPalette', () => {
249
254
  jsxElement: <CommandPalette commandProviders={[provider]} defaultPrefix=">" />,
250
255
  })
251
256
 
252
- await sleepAsync(50)
257
+ await flushUpdates()
253
258
 
254
259
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
255
260
  const input = commandPalette.querySelector('input') as HTMLInputElement
@@ -257,11 +262,12 @@ describe('CommandPalette', () => {
257
262
  input.value = 'test'
258
263
  triggerKeyup(input, 'a')
259
264
 
260
- await sleepAsync(300)
265
+ await vi.advanceTimersByTimeAsync(300)
266
+ await flushUpdates()
261
267
 
262
268
  // Press ArrowUp when already at first item
263
269
  triggerKeyup(input, 'ArrowUp')
264
- await sleepAsync(50)
270
+ await flushUpdates()
265
271
 
266
272
  const suggestionItems = getSuggestionItems(commandPalette)
267
273
  expect(suggestionItems[0]?.classList.contains('selected')).toBe(true)
@@ -281,7 +287,7 @@ describe('CommandPalette', () => {
281
287
  jsxElement: <CommandPalette commandProviders={[provider]} defaultPrefix=">" />,
282
288
  })
283
289
 
284
- await sleepAsync(50)
290
+ await flushUpdates()
285
291
 
286
292
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
287
293
  const input = commandPalette.querySelector('input') as HTMLInputElement
@@ -289,11 +295,12 @@ describe('CommandPalette', () => {
289
295
  input.value = 'test'
290
296
  triggerKeyup(input, 'a')
291
297
 
292
- await sleepAsync(300)
298
+ await vi.advanceTimersByTimeAsync(300)
299
+ await flushUpdates()
293
300
 
294
301
  // Press Enter
295
302
  triggerKeyup(input, 'Enter')
296
- await sleepAsync(50)
303
+ await flushUpdates()
297
304
 
298
305
  expect(onSelected).toHaveBeenCalledTimes(1)
299
306
  expect(onSelected).toHaveBeenCalledWith(expect.objectContaining({ injector: expect.any(Injector) as unknown }))
@@ -325,14 +332,14 @@ describe('CommandPalette', () => {
325
332
  jsxElement: <CommandPalette commandProviders={[provider]} defaultPrefix=">" />,
326
333
  })
327
334
 
328
- await sleepAsync(50)
335
+ await flushUpdates()
329
336
 
330
337
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
331
338
 
332
339
  // Open palette by clicking prefix
333
340
  const termIcon = commandPalette.querySelector('.term-icon') as HTMLElement
334
341
  termIcon.click()
335
- await sleepAsync(100) // Wait longer for the opened state to propagate
342
+ await flushUpdates() // Wait longer for the opened state to propagate
336
343
 
337
344
  expect(commandPalette.hasAttribute('data-opened')).toBe(true)
338
345
 
@@ -340,13 +347,14 @@ describe('CommandPalette', () => {
340
347
  input.value = 'test'
341
348
  triggerKeyup(input, 'a')
342
349
 
343
- await sleepAsync(300)
350
+ await vi.advanceTimersByTimeAsync(300)
351
+ await flushUpdates()
344
352
 
345
353
  // Click on first suggestion
346
354
  const suggestionItems = getSuggestionItems(commandPalette)
347
355
  expect(suggestionItems.length).toBeGreaterThan(0)
348
356
  ;(suggestionItems[0] as HTMLElement).click()
349
- await sleepAsync(100)
357
+ await flushUpdates()
350
358
 
351
359
  // Clicking a suggestion should close the palette
352
360
  expect(commandPalette.hasAttribute('data-opened')).toBe(false)
@@ -365,14 +373,14 @@ describe('CommandPalette', () => {
365
373
  jsxElement: <CommandPalette commandProviders={[provider]} defaultPrefix=">" />,
366
374
  })
367
375
 
368
- await sleepAsync(50)
376
+ await flushUpdates()
369
377
 
370
378
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
371
379
 
372
380
  // Open palette
373
381
  const termIcon = commandPalette.querySelector('.term-icon') as HTMLElement
374
382
  termIcon.click()
375
- await sleepAsync(50)
383
+ await flushUpdates()
376
384
 
377
385
  expect(commandPalette.hasAttribute('data-opened')).toBe(true)
378
386
 
@@ -380,11 +388,11 @@ describe('CommandPalette', () => {
380
388
  input.value = 'test'
381
389
  triggerKeyup(input, 'a')
382
390
 
383
- await sleepAsync(300)
391
+ await flushUpdates()
384
392
 
385
393
  // Select via Enter
386
394
  triggerKeyup(input, 'Enter')
387
- await sleepAsync(50)
395
+ await flushUpdates()
388
396
 
389
397
  expect(commandPalette.hasAttribute('data-opened')).toBe(false)
390
398
  })
@@ -416,7 +424,7 @@ describe('CommandPalette', () => {
416
424
  jsxElement: <CommandPalette commandProviders={[provider1, provider2]} defaultPrefix=">" />,
417
425
  })
418
426
 
419
- await sleepAsync(50)
427
+ await flushUpdates()
420
428
 
421
429
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
422
430
  const input = commandPalette.querySelector('input') as HTMLInputElement
@@ -424,7 +432,8 @@ describe('CommandPalette', () => {
424
432
  input.value = 'search'
425
433
  triggerKeyup(input, 'h')
426
434
 
427
- await sleepAsync(300)
435
+ await vi.advanceTimersByTimeAsync(300)
436
+ await flushUpdates()
428
437
 
429
438
  expect(provider1).toHaveBeenCalled()
430
439
  expect(provider2).toHaveBeenCalled()
@@ -444,7 +453,7 @@ describe('CommandPalette', () => {
444
453
  jsxElement: <CommandPalette commandProviders={[provider1, provider2]} defaultPrefix=">" />,
445
454
  })
446
455
 
447
- await sleepAsync(50)
456
+ await flushUpdates()
448
457
 
449
458
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
450
459
  const input = commandPalette.querySelector('input') as HTMLInputElement
@@ -452,7 +461,8 @@ describe('CommandPalette', () => {
452
461
  input.value = 'search'
453
462
  triggerKeyup(input, 'h')
454
463
 
455
- await sleepAsync(300)
464
+ await vi.advanceTimersByTimeAsync(300)
465
+ await flushUpdates()
456
466
 
457
467
  const suggestionItems = getSuggestionItems(commandPalette)
458
468
  expect(suggestionItems.length).toBe(2)
@@ -477,7 +487,7 @@ describe('CommandPalette', () => {
477
487
  jsxElement: <CommandPalette commandProviders={[provider]} defaultPrefix=">" />,
478
488
  })
479
489
 
480
- await sleepAsync(50)
490
+ await flushUpdates()
481
491
 
482
492
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
483
493
  const input = commandPalette.querySelector('input') as HTMLInputElement
@@ -485,7 +495,8 @@ describe('CommandPalette', () => {
485
495
  input.value = 'search'
486
496
  triggerKeyup(input, 'h')
487
497
 
488
- await sleepAsync(300)
498
+ await vi.advanceTimersByTimeAsync(300)
499
+ await flushUpdates()
489
500
 
490
501
  const suggestionItems = getSuggestionItems(commandPalette)
491
502
  expect(suggestionItems.length).toBe(3)
@@ -509,14 +520,14 @@ describe('CommandPalette', () => {
509
520
  jsxElement: <CommandPalette commandProviders={[]} defaultPrefix=">" />,
510
521
  })
511
522
 
512
- await sleepAsync(50)
523
+ await flushUpdates()
513
524
 
514
525
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
515
526
  expect(commandPalette.hasAttribute('data-opened')).toBe(false)
516
527
 
517
528
  const termIcon = commandPalette.querySelector('.term-icon') as HTMLElement
518
529
  termIcon.click()
519
- await sleepAsync(50)
530
+ await flushUpdates()
520
531
 
521
532
  expect(commandPalette.hasAttribute('data-opened')).toBe(true)
522
533
  })
@@ -532,20 +543,20 @@ describe('CommandPalette', () => {
532
543
  jsxElement: <CommandPalette commandProviders={[]} defaultPrefix=">" />,
533
544
  })
534
545
 
535
- await sleepAsync(50)
546
+ await flushUpdates()
536
547
 
537
548
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
538
549
 
539
550
  // Open first
540
551
  const termIcon = commandPalette.querySelector('.term-icon') as HTMLElement
541
552
  termIcon.click()
542
- await sleepAsync(50)
553
+ await flushUpdates()
543
554
  expect(commandPalette.hasAttribute('data-opened')).toBe(true)
544
555
 
545
556
  // Close
546
557
  const closeButton = commandPalette.querySelector('.close-suggestions') as HTMLElement
547
558
  closeButton.click()
548
- await sleepAsync(50)
559
+ await flushUpdates()
549
560
 
550
561
  expect(commandPalette.hasAttribute('data-opened')).toBe(false)
551
562
  })
@@ -568,7 +579,7 @@ describe('CommandPalette', () => {
568
579
  jsxElement: <CommandPalette commandProviders={[provider]} defaultPrefix=">" />,
569
580
  })
570
581
 
571
- await sleepAsync(50)
582
+ await flushUpdates()
572
583
 
573
584
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
574
585
  const input = commandPalette.querySelector('input') as HTMLInputElement
@@ -578,11 +589,13 @@ describe('CommandPalette', () => {
578
589
  Object.defineProperty(event, 'target', { value: input, writable: false })
579
590
  input.dispatchEvent(event)
580
591
 
581
- await sleepAsync(260) // After debounce but before provider resolves
592
+ await vi.advanceTimersByTimeAsync(260)
593
+ await flushUpdates()
582
594
 
583
595
  expect(commandPalette.hasAttribute('data-loading')).toBe(true)
584
596
 
585
- await sleepAsync(200) // Wait for provider to resolve
597
+ await vi.advanceTimersByTimeAsync(200)
598
+ await flushUpdates()
586
599
 
587
600
  expect(commandPalette.hasAttribute('data-loading')).toBe(false)
588
601
  })
@@ -605,20 +618,20 @@ describe('CommandPalette', () => {
605
618
  ),
606
619
  })
607
620
 
608
- await sleepAsync(50)
621
+ await flushUpdates()
609
622
 
610
623
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
611
624
 
612
625
  // Open first
613
626
  const termIcon = commandPalette.querySelector('.term-icon') as HTMLElement
614
627
  termIcon.click()
615
- await sleepAsync(50)
628
+ await flushUpdates()
616
629
  expect(commandPalette.hasAttribute('data-opened')).toBe(true)
617
630
 
618
631
  // Click outside
619
632
  const outsideElement = document.getElementById('outside') as HTMLElement
620
633
  outsideElement.dispatchEvent(new MouseEvent('click', { bubbles: true }))
621
- await sleepAsync(50)
634
+ await flushUpdates()
622
635
 
623
636
  expect(commandPalette.hasAttribute('data-opened')).toBe(false)
624
637
  })
@@ -636,7 +649,7 @@ describe('CommandPalette', () => {
636
649
  jsxElement: <CommandPalette commandProviders={[]} defaultPrefix=">" style={{ maxWidth: '500px' }} />,
637
650
  })
638
651
 
639
- await sleepAsync(50)
652
+ await flushUpdates()
640
653
 
641
654
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
642
655
  const inputContainer = commandPalette.querySelector('.input-container') as HTMLElement
@@ -657,14 +670,14 @@ describe('CommandPalette', () => {
657
670
  jsxElement: <CommandPalette commandProviders={[provider]} defaultPrefix=">" fullScreenSuggestions />,
658
671
  })
659
672
 
660
- await sleepAsync(50)
673
+ await flushUpdates()
661
674
 
662
675
  const commandPalette = document.querySelector('shade-command-palette') as HTMLElement
663
676
 
664
677
  // Open and search
665
678
  const termIcon = commandPalette.querySelector('.term-icon') as HTMLElement
666
679
  termIcon.click()
667
- await sleepAsync(50)
680
+ await flushUpdates()
668
681
 
669
682
  const input = commandPalette.querySelector('input') as HTMLInputElement
670
683
  input.value = 'test'
@@ -672,7 +685,7 @@ describe('CommandPalette', () => {
672
685
  Object.defineProperty(event, 'target', { value: input, writable: false })
673
686
  input.dispatchEvent(event)
674
687
 
675
- await sleepAsync(300)
688
+ await flushUpdates()
676
689
 
677
690
  const suggestionList = commandPalette.querySelector('shade-command-palette-suggestion-list') as HTMLElement
678
691
  const suggestionContainer = suggestionList.querySelector('.suggestion-items-container') as HTMLElement