@sanity/ui 2.16.21 → 2.16.23

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 (328) hide show
  1. package/dist/_chunks-cjs/_visual-editing.js +121 -1046
  2. package/dist/_chunks-cjs/_visual-editing.js.map +1 -1
  3. package/dist/_chunks-cjs/refractor.js.map +1 -1
  4. package/dist/_chunks-es/_visual-editing.mjs +116 -1041
  5. package/dist/_chunks-es/_visual-editing.mjs.map +1 -1
  6. package/dist/_chunks-es/refractor.mjs.map +1 -1
  7. package/dist/_visual-editing.d.mts +411 -351
  8. package/dist/_visual-editing.d.ts +411 -351
  9. package/dist/index.d.mts +1107 -930
  10. package/dist/index.d.ts +1107 -930
  11. package/dist/index.js +67 -158
  12. package/dist/index.js.map +1 -1
  13. package/dist/index.mjs +65 -156
  14. package/dist/index.mjs.map +1 -1
  15. package/dist/theme.d.mts +769 -681
  16. package/dist/theme.d.ts +769 -681
  17. package/dist/theme.js +47 -0
  18. package/dist/theme.js.map +1 -1
  19. package/dist/theme.mjs +47 -0
  20. package/dist/theme.mjs.map +1 -1
  21. package/exports/_visual-editing.ts +1 -0
  22. package/package.json +50 -163
  23. package/src/core/_compat.ts +30 -0
  24. package/src/core/components/autocomplete/autocomplete.tsx +11 -4
  25. package/src/core/components/autocomplete/autocompleteOption.tsx +1 -0
  26. package/src/core/components/breadcrumbs/breadcrumbs.tsx +1 -0
  27. package/src/core/components/dialog/dialog.tsx +3 -0
  28. package/src/core/components/hotkeys/hotkeys.tsx +1 -0
  29. package/src/core/components/menu/menu.test.tsx +6 -4
  30. package/src/core/components/menu/menu.tsx +3 -2
  31. package/src/core/components/menu/menuButton.tsx +8 -0
  32. package/src/core/components/menu/menuGroup.tsx +5 -2
  33. package/src/core/components/menu/menuItem.tsx +4 -0
  34. package/src/core/components/menu/useMenuController.ts +6 -4
  35. package/src/core/components/skeleton/skeleton.tsx +2 -1
  36. package/src/core/components/tab/tab.tsx +1 -0
  37. package/src/core/components/tab/tabList.tsx +1 -0
  38. package/src/core/components/toast/toast.test.tsx +9 -4
  39. package/src/core/components/toast/toast.tsx +1 -1
  40. package/src/core/components/toast/toastProvider.tsx +1 -1
  41. package/src/core/components/tree/tree.tsx +1 -0
  42. package/src/core/components/tree/treeGroup.tsx +1 -0
  43. package/src/core/components/tree/treeItem.tsx +2 -2
  44. package/src/core/constants.ts +2 -2
  45. package/src/core/hooks/useClickOutside.test.tsx +43 -15
  46. package/src/core/hooks/useClickOutside.ts +1 -1
  47. package/src/core/hooks/useClickOutsideEvent.test.tsx +8 -4
  48. package/src/core/hooks/useDelayed.test.ts +7 -6
  49. package/src/core/hooks/useElementRect/useElementRect.ts +1 -0
  50. package/src/core/hooks/useForwardedRef.ts +1 -0
  51. package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +2 -1
  52. package/src/core/hooks/usePrefersDark.hydration.test.tsx +7 -5
  53. package/src/core/hooks/usePrefersDark.test.tsx +3 -1
  54. package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +7 -5
  55. package/src/core/hooks/usePrefersReducedMotion.test.tsx +3 -1
  56. package/src/core/lib/createGlobalScopedContext.ts +1 -0
  57. package/src/core/lib/globalScope.ts +1 -0
  58. package/src/core/observers/elementSizeObserver.ts +1 -0
  59. package/src/core/primitives/avatar/avatar.tsx +1 -2
  60. package/src/core/primitives/avatar/avatarStack.tsx +1 -0
  61. package/src/core/primitives/badge/badge.test.tsx +3 -2
  62. package/src/core/primitives/badge/badge.tsx +2 -1
  63. package/src/core/primitives/box/box.tsx +2 -1
  64. package/src/core/primitives/button/button.test.tsx +3 -2
  65. package/src/core/primitives/button/button.tsx +2 -0
  66. package/src/core/primitives/button/styles.ts +1 -0
  67. package/src/core/primitives/card/card.tsx +1 -5
  68. package/src/core/primitives/card/types.ts +1 -0
  69. package/src/core/primitives/code/refractor.tsx +2 -0
  70. package/src/core/primitives/flex/flex.tsx +1 -3
  71. package/src/core/primitives/inline/inline.tsx +1 -0
  72. package/src/core/primitives/popover/popover.tsx +13 -4
  73. package/src/core/primitives/popover/popoverCard.tsx +2 -1
  74. package/src/core/primitives/popover/types.ts +0 -1
  75. package/src/core/primitives/stack/styles.ts +1 -0
  76. package/src/core/primitives/textInput/textInput.tsx +2 -0
  77. package/src/core/primitives/tooltip/tooltip.test.tsx +82 -49
  78. package/src/core/primitives/tooltip/tooltip.tsx +6 -1
  79. package/src/core/primitives/tooltip/tooltipCard.tsx +2 -1
  80. package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +2 -0
  81. package/src/core/styles/flex/types.ts +0 -1
  82. package/src/core/styles/font/responsiveFont.ts +0 -3
  83. package/src/core/styles/font/types.ts +1 -3
  84. package/src/core/styles/grid/gridStyle.ts +1 -0
  85. package/src/core/styles/margin/marginStyle.ts +1 -0
  86. package/src/core/styles/margin/marginsStyle.test.ts +2 -1
  87. package/src/core/styles/padding/paddingStyle.test.ts +2 -1
  88. package/src/core/styles/padding/paddingStyle.ts +1 -0
  89. package/src/core/theme/theme.test.tsx +7 -3
  90. package/src/core/theme/useRootTheme.ts +1 -0
  91. package/src/core/theme/useTheme.ts +2 -0
  92. package/src/core/utils/arrow/arrow.tsx +1 -0
  93. package/src/core/utils/boundaryElement/boundaryElement.test.tsx +9 -4
  94. package/src/core/utils/conditionalWrapper/conditionalWrapper.tsx +1 -0
  95. package/src/core/utils/getElementRef.ts +5 -0
  96. package/src/core/utils/layer/getLayerContext.test.ts +2 -0
  97. package/src/core/utils/layer/layer.test.tsx +9 -4
  98. package/src/core/utils/layer/layer.tsx +1 -0
  99. package/src/core/utils/layer/useLayer.ts +2 -0
  100. package/src/core/utils/portal/portal.test.tsx +9 -4
  101. package/src/core/utils/portal/portalProvider.tsx +4 -3
  102. package/src/core/utils/virtualList/virtualList.tsx +2 -1
  103. package/src/theme/build/_deprecated/color/_selectable/createSelectableTones.ts +10 -0
  104. package/src/theme/build/_deprecated/color/_solid/createSolidTones.ts +4 -0
  105. package/src/theme/build/_deprecated/color/button/createButtonModes.ts +5 -0
  106. package/src/theme/build/_deprecated/color/button/createButtonTones.ts +5 -0
  107. package/src/theme/build/_deprecated/color/card/createCardStates.ts +6 -0
  108. package/src/theme/build/_deprecated/color/color.test.ts +5 -1
  109. package/src/theme/build/_deprecated/color/defaults.ts +1 -0
  110. package/src/theme/build/_deprecated/color/factory.ts +36 -0
  111. package/src/theme/build/_deprecated/color/input/createInputModes.ts +5 -0
  112. package/src/theme/build/_deprecated/color/muted/createMuted.ts +4 -0
  113. package/src/theme/build/_deprecated/color/spot/createSpot.ts +3 -0
  114. package/src/theme/build/buildColorTheme.test.ts +2 -0
  115. package/src/theme/build/buildColorTheme.ts +7 -0
  116. package/src/theme/build/buildTheme.test.ts +2 -0
  117. package/src/theme/build/lib/color-fns/color-fns.test.ts +3 -1
  118. package/src/theme/build/merge.ts +5 -0
  119. package/src/theme/build/mixThemeColor.test.ts +2 -0
  120. package/src/theme/build/renderColorTheme.ts +6 -0
  121. package/src/theme/build/renderColorValue.ts +0 -2
  122. package/src/theme/build/resolveColorTokens.ts +6 -0
  123. package/src/theme/build/theme.test.ts +2 -0
  124. package/src/theme/config/helpers.ts +5 -0
  125. package/src/theme/config/system.ts +2 -0
  126. package/src/theme/config/tokens/color/types.ts +6 -4
  127. package/src/theme/config/tokens/parseTokenKey.test.ts +2 -0
  128. package/src/theme/config/tokens/parseTokenValue.test.ts +2 -0
  129. package/src/theme/config/tokens/parseTokenValue.ts +1 -0
  130. package/src/theme/getScopedTheme.ts +5 -0
  131. package/src/theme/system/color/_helpers.ts +4 -0
  132. package/src/theme/system/theme.ts +4 -0
  133. package/src/theme/system/v0/color/_system.ts +1 -0
  134. package/src/theme/system/v0/color/button.ts +14 -0
  135. package/src/theme/system/v0/color/card.ts +6 -0
  136. package/src/theme/system/v0/color/color.ts +11 -0
  137. package/src/theme/system/v0/color/input.ts +6 -0
  138. package/src/theme/system/v0/color/muted.ts +11 -0
  139. package/src/theme/system/v0/color/selectable.ts +11 -0
  140. package/src/theme/system/v0/color/solid.ts +11 -0
  141. package/src/theme/system/v0/color/spot.ts +1 -0
  142. package/src/theme/versioning/getTheme_v2.ts +15 -0
  143. package/src/theme/versioning/themeColor_v0_v2.ts +7 -0
  144. package/src/theme/versioning/themeColor_v2_v2_9.ts +1 -0
  145. package/src/theme/versioning/v0_v2.ts +13 -1
  146. package/src/theme/versioning/v2_v0.ts +15 -0
  147. package/src/core/__workshop__/constants.ts +0 -293
  148. package/src/core/components/autocomplete/__mocks__/apiStore.ts +0 -49
  149. package/src/core/components/autocomplete/__mocks__/countries.ts +0 -245
  150. package/src/core/components/autocomplete/__workshop__/async.tsx +0 -156
  151. package/src/core/components/autocomplete/__workshop__/constrainedHeight.tsx +0 -137
  152. package/src/core/components/autocomplete/__workshop__/custom.tsx +0 -89
  153. package/src/core/components/autocomplete/__workshop__/example.tsx +0 -79
  154. package/src/core/components/autocomplete/__workshop__/focusAndBlur.tsx +0 -36
  155. package/src/core/components/autocomplete/__workshop__/fullscreen.tsx +0 -294
  156. package/src/core/components/autocomplete/__workshop__/index.ts +0 -39
  157. package/src/core/components/autocomplete/__workshop__/types.ts +0 -4
  158. package/src/core/components/breadcrumbs/__workshop__/example.tsx +0 -62
  159. package/src/core/components/breadcrumbs/__workshop__/index.ts +0 -14
  160. package/src/core/components/dialog/__workshop__/activate.tsx +0 -134
  161. package/src/core/components/dialog/__workshop__/autoFocus.tsx +0 -29
  162. package/src/core/components/dialog/__workshop__/index.ts +0 -19
  163. package/src/core/components/dialog/__workshop__/layering.tsx +0 -41
  164. package/src/core/components/dialog/__workshop__/nested.tsx +0 -72
  165. package/src/core/components/dialog/__workshop__/onScroll.tsx +0 -39
  166. package/src/core/components/dialog/__workshop__/panes.tsx +0 -82
  167. package/src/core/components/dialog/__workshop__/position.tsx +0 -30
  168. package/src/core/components/dialog/__workshop__/props.tsx +0 -75
  169. package/src/core/components/dialog/__workshop__/provider.tsx +0 -11
  170. package/src/core/components/dialog/__workshop__/wrapped.tsx +0 -76
  171. package/src/core/components/hotkeys/__workshop__/index.ts +0 -14
  172. package/src/core/components/hotkeys/__workshop__/plain.tsx +0 -9
  173. package/src/core/components/menu/__workshop__/asComponent.tsx +0 -45
  174. package/src/core/components/menu/__workshop__/avatarMenu.tsx +0 -51
  175. package/src/core/components/menu/__workshop__/closableMenuButton.tsx +0 -46
  176. package/src/core/components/menu/__workshop__/constrainedInBoundary.tsx +0 -134
  177. package/src/core/components/menu/__workshop__/customMenuItem.tsx +0 -45
  178. package/src/core/components/menu/__workshop__/customSelectedState.tsx +0 -39
  179. package/src/core/components/menu/__workshop__/disableFocusOnClose.tsx +0 -40
  180. package/src/core/components/menu/__workshop__/groups.tsx +0 -156
  181. package/src/core/components/menu/__workshop__/index.ts +0 -89
  182. package/src/core/components/menu/__workshop__/menuButton.tsx +0 -80
  183. package/src/core/components/menu/__workshop__/menuGroupRight.tsx +0 -65
  184. package/src/core/components/menu/__workshop__/nestedMenu.tsx +0 -22
  185. package/src/core/components/menu/__workshop__/onCloseMenuButton.tsx +0 -41
  186. package/src/core/components/menu/__workshop__/selectedItem.tsx +0 -69
  187. package/src/core/components/menu/__workshop__/shouldFocus.tsx +0 -47
  188. package/src/core/components/menu/__workshop__/tones.tsx +0 -25
  189. package/src/core/components/menu/__workshop__/withoutArrow.tsx +0 -32
  190. package/src/core/components/skeleton/__workshop__/delay.tsx +0 -70
  191. package/src/core/components/skeleton/__workshop__/index.ts +0 -11
  192. package/src/core/components/skeleton/__workshop__/skeleton.tsx +0 -64
  193. package/src/core/components/tab/__workshop__/example.tsx +0 -79
  194. package/src/core/components/tab/__workshop__/index.ts +0 -14
  195. package/src/core/components/toast/__workshop__/hook.tsx +0 -71
  196. package/src/core/components/toast/__workshop__/index.ts +0 -19
  197. package/src/core/components/toast/__workshop__/toast.tsx +0 -26
  198. package/src/core/components/tree/__workshop__/basic.perf.ts +0 -19
  199. package/src/core/components/tree/__workshop__/basic.tsx +0 -105
  200. package/src/core/components/tree/__workshop__/index.ts +0 -21
  201. package/src/core/components/tree/__workshop__/tabFromElement.tsx +0 -84
  202. package/src/core/hooks/useElementRect/__workshop__/example.tsx +0 -32
  203. package/src/core/hooks/useElementRect/__workshop__/index.ts +0 -14
  204. package/src/core/hooks/useMediaIndex/__workshop__/index.ts +0 -14
  205. package/src/core/hooks/useMediaIndex/__workshop__/test.tsx +0 -14
  206. package/src/core/primitives/avatar/__workshop__/asButton.tsx +0 -14
  207. package/src/core/primitives/avatar/__workshop__/index.ts +0 -29
  208. package/src/core/primitives/avatar/__workshop__/stack.tsx +0 -25
  209. package/src/core/primitives/avatar/__workshop__/withinButton.tsx +0 -63
  210. package/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx +0 -70
  211. package/src/core/primitives/badge/__workshop__/index.ts +0 -19
  212. package/src/core/primitives/badge/__workshop__/props.tsx +0 -30
  213. package/src/core/primitives/badge/__workshop__/tones.tsx +0 -21
  214. package/src/core/primitives/box/__workshop__/index.ts +0 -19
  215. package/src/core/primitives/box/__workshop__/props.tsx +0 -20
  216. package/src/core/primitives/box/__workshop__/responsive.tsx +0 -20
  217. package/src/core/primitives/button/__workshop__/custom.tsx +0 -51
  218. package/src/core/primitives/button/__workshop__/customIcons.tsx +0 -30
  219. package/src/core/primitives/button/__workshop__/disabled.tsx +0 -74
  220. package/src/core/primitives/button/__workshop__/index.ts +0 -59
  221. package/src/core/primitives/button/__workshop__/mixedChildren.tsx +0 -12
  222. package/src/core/primitives/button/__workshop__/props.tsx +0 -55
  223. package/src/core/primitives/button/__workshop__/sanityUploadButton.tsx +0 -36
  224. package/src/core/primitives/button/__workshop__/stacked.tsx +0 -58
  225. package/src/core/primitives/button/__workshop__/styled1.tsx +0 -17
  226. package/src/core/primitives/button/__workshop__/styled2.tsx +0 -19
  227. package/src/core/primitives/button/__workshop__/uploadButton.tsx +0 -28
  228. package/src/core/primitives/card/__workshop__/allTones.tsx +0 -25
  229. package/src/core/primitives/card/__workshop__/asButton.tsx +0 -107
  230. package/src/core/primitives/card/__workshop__/asComponent.tsx +0 -27
  231. package/src/core/primitives/card/__workshop__/checkered.tsx +0 -26
  232. package/src/core/primitives/card/__workshop__/index.ts +0 -18
  233. package/src/core/primitives/card/__workshop__/interactive.tsx +0 -30
  234. package/src/core/primitives/card/__workshop__/listNavigation.tsx +0 -80
  235. package/src/core/primitives/card/__workshop__/props.tsx +0 -53
  236. package/src/core/primitives/card/__workshop__/selected.tsx +0 -94
  237. package/src/core/primitives/card/__workshop__/styled.tsx +0 -14
  238. package/src/core/primitives/checkbox/__workshop__/example.tsx +0 -25
  239. package/src/core/primitives/checkbox/__workshop__/index.ts +0 -13
  240. package/src/core/primitives/checkbox/__workshop__/props.tsx +0 -33
  241. package/src/core/primitives/checkbox/__workshop__/readOnly.tsx +0 -16
  242. package/src/core/primitives/checkbox/__workshop__/tones.tsx +0 -28
  243. package/src/core/primitives/code/__workshop__/index.ts +0 -19
  244. package/src/core/primitives/code/__workshop__/opticalAlignment.tsx +0 -48
  245. package/src/core/primitives/code/__workshop__/props.tsx +0 -21
  246. package/src/core/primitives/container/__workshop__/example.tsx +0 -20
  247. package/src/core/primitives/container/__workshop__/index.ts +0 -8
  248. package/src/core/primitives/flex/__workshop__/example.tsx +0 -34
  249. package/src/core/primitives/flex/__workshop__/gap.tsx +0 -25
  250. package/src/core/primitives/flex/__workshop__/index.ts +0 -11
  251. package/src/core/primitives/grid/__workshop__/index.ts +0 -10
  252. package/src/core/primitives/grid/__workshop__/responsive.tsx +0 -54
  253. package/src/core/primitives/heading/__workshop__/index.ts +0 -19
  254. package/src/core/primitives/heading/__workshop__/opticalAlignment.tsx +0 -54
  255. package/src/core/primitives/heading/__workshop__/plain.tsx +0 -32
  256. package/src/core/primitives/inline/__workshop__/index.ts +0 -8
  257. package/src/core/primitives/inline/__workshop__/plain.tsx +0 -27
  258. package/src/core/primitives/kbd/__workshop__/index.ts +0 -8
  259. package/src/core/primitives/kbd/__workshop__/plain.tsx +0 -9
  260. package/src/core/primitives/label/__workshop__/index.ts +0 -19
  261. package/src/core/primitives/label/__workshop__/opticalAlignment.tsx +0 -48
  262. package/src/core/primitives/label/__workshop__/plain.tsx +0 -24
  263. package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +0 -77
  264. package/src/core/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
  265. package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
  266. package/src/core/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
  267. package/src/core/primitives/popover/__workshop__/PlainStory.tsx +0 -71
  268. package/src/core/primitives/popover/__workshop__/RecursiveStory.tsx +0 -71
  269. package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +0 -89
  270. package/src/core/primitives/popover/__workshop__/TestStory.tsx +0 -97
  271. package/src/core/primitives/popover/__workshop__/index.ts +0 -49
  272. package/src/core/primitives/radio/__workshop__/example.tsx +0 -63
  273. package/src/core/primitives/radio/__workshop__/index.ts +0 -11
  274. package/src/core/primitives/radio/__workshop__/plain.tsx +0 -28
  275. package/src/core/primitives/select/__workshop__/index.ts +0 -11
  276. package/src/core/primitives/select/__workshop__/plain.tsx +0 -27
  277. package/src/core/primitives/select/__workshop__/readOnly.tsx +0 -23
  278. package/src/core/primitives/spinner/__workshop__/Props.tsx +0 -15
  279. package/src/core/primitives/spinner/__workshop__/index.ts +0 -14
  280. package/src/core/primitives/stack/__workshop__/index.ts +0 -14
  281. package/src/core/primitives/stack/__workshop__/plain.tsx +0 -32
  282. package/src/core/primitives/switch/__workshop__/example.tsx +0 -23
  283. package/src/core/primitives/switch/__workshop__/index.ts +0 -11
  284. package/src/core/primitives/switch/__workshop__/props.tsx +0 -21
  285. package/src/core/primitives/text/__workshop__/colored.tsx +0 -30
  286. package/src/core/primitives/text/__workshop__/example.tsx +0 -39
  287. package/src/core/primitives/text/__workshop__/index.ts +0 -24
  288. package/src/core/primitives/text/__workshop__/opticalAlignment.tsx +0 -48
  289. package/src/core/primitives/textArea/__workshop__/index.ts +0 -14
  290. package/src/core/primitives/textArea/__workshop__/plain.tsx +0 -50
  291. package/src/core/primitives/textInput/__workshop__/clearButton.tsx +0 -30
  292. package/src/core/primitives/textInput/__workshop__/customValidity.tsx +0 -17
  293. package/src/core/primitives/textInput/__workshop__/index.ts +0 -44
  294. package/src/core/primitives/textInput/__workshop__/plain.tsx +0 -98
  295. package/src/core/primitives/textInput/__workshop__/readOnly.tsx +0 -9
  296. package/src/core/primitives/textInput/__workshop__/states.tsx +0 -53
  297. package/src/core/primitives/textInput/__workshop__/tones.tsx +0 -277
  298. package/src/core/primitives/textInput/__workshop__/typed.tsx +0 -23
  299. package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +0 -102
  300. package/src/core/primitives/tooltip/__workshop__/index.ts +0 -29
  301. package/src/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx +0 -74
  302. package/src/core/primitives/tooltip/__workshop__/props.tsx +0 -107
  303. package/src/core/primitives/tooltip/__workshop__/resizableBoundary.tsx +0 -86
  304. package/src/core/theme/__workshop__/build/Root.tsx +0 -367
  305. package/src/core/theme/__workshop__/build/helpers.ts +0 -46
  306. package/src/core/theme/__workshop__/build/story.tsx +0 -465
  307. package/src/core/theme/__workshop__/canvas.tsx +0 -352
  308. package/src/core/theme/__workshop__/color.tsx +0 -62
  309. package/src/core/theme/__workshop__/debug/story.tsx +0 -408
  310. package/src/core/theme/__workshop__/index.ts +0 -39
  311. package/src/core/theme/__workshop__/layer.tsx +0 -78
  312. package/src/core/theme/__workshop__/nestedProvider.tsx +0 -15
  313. package/src/core/utils/boundaryElement/__workshop__/index.ts +0 -14
  314. package/src/core/utils/boundaryElement/__workshop__/plain.tsx +0 -19
  315. package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +0 -30
  316. package/src/core/utils/elementQuery/__workshop__/index.ts +0 -14
  317. package/src/core/utils/layer/__workshop__/_debug.tsx +0 -17
  318. package/src/core/utils/layer/__workshop__/index.ts +0 -24
  319. package/src/core/utils/layer/__workshop__/multipleRoots.tsx +0 -49
  320. package/src/core/utils/layer/__workshop__/nested.tsx +0 -98
  321. package/src/core/utils/layer/__workshop__/responsiveZOffset.tsx +0 -13
  322. package/src/core/utils/portal/__workshop__/index.ts +0 -14
  323. package/src/core/utils/portal/__workshop__/named.tsx +0 -63
  324. package/src/core/utils/virtualList/__workshop__/changingProps.tsx +0 -36
  325. package/src/core/utils/virtualList/__workshop__/elementScroll.tsx +0 -24
  326. package/src/core/utils/virtualList/__workshop__/index.ts +0 -29
  327. package/src/core/utils/virtualList/__workshop__/infiniteList.tsx +0 -48
  328. package/src/core/utils/virtualList/__workshop__/windowScrolll.tsx +0 -22
@@ -23,15 +23,16 @@ export function useMenuController(props: {
23
23
  onKeyDown?: React.KeyboardEventHandler
24
24
  originElement?: HTMLElement | null
25
25
  shouldFocus: 'first' | 'last' | null
26
+ // oxlint-disable-next-line no-deprecated
26
27
  rootElementRef: React.MutableRefObject<HTMLDivElement | null>
27
28
  }): MenuController {
28
29
  const {onKeyDown, originElement, shouldFocus, rootElementRef} = props
29
30
  const elementsRef = useRef<HTMLElement[]>([])
30
31
  const [activeIndex, _setActiveIndex] = useState(-1)
31
32
  const activeIndexRef = useRef(activeIndex)
32
- // eslint-disable-next-line react-hooks/refs
33
+ // oxlint-disable-next-line react-compiler
33
34
  const activeElement = useMemo(() => elementsRef.current[activeIndex] || null, [activeIndex])
34
- // eslint-disable-next-line react-hooks/refs
35
+ // oxlint-disable-next-line react-compiler
35
36
  const mounted = Boolean(rootElementRef.current)
36
37
 
37
38
  const setActiveIndex = useCallback((nextActiveIndex: number) => {
@@ -219,12 +220,13 @@ export function useMenuController(props: {
219
220
  element?.focus()
220
221
  })
221
222
 
223
+ // oxlint-disable-next-line consistent-return
222
224
  return () => cancelAnimationFrame(rafId)
223
225
  }, [activeIndex, mounted, setActiveIndex, shouldFocus])
224
226
 
225
- // eslint-disable-next-line react-hooks/refs
227
+ // oxlint-disable-next-line react-compiler
226
228
  return {
227
- // eslint-disable-next-line react-hooks/refs
229
+ // oxlint-disable-next-line react-compiler
228
230
  activeElement,
229
231
  activeIndex,
230
232
  handleItemMouseEnter,
@@ -28,11 +28,12 @@ export const Skeleton = forwardRef(function Skeleton(
28
28
  ref: React.Ref<HTMLDivElement>,
29
29
  ) {
30
30
  const {animated = false, delay, radius, ...restProps} = props
31
+ // oxlint-disable-next-line no-unneeded-ternary
31
32
  const [visible, setVisible] = useState<boolean>(delay ? false : true)
32
33
 
33
34
  useEffect(() => {
34
35
  if (!delay) {
35
- // eslint-disable-next-line react-hooks/set-state-in-effect
36
+ // oxlint-disable-next-line react-compiler
36
37
  return setVisible(true)
37
38
  }
38
39
 
@@ -13,6 +13,7 @@ export interface TabProps {
13
13
  */
14
14
  'aria-controls': string
15
15
  'id': string
16
+ // oxlint-disable-next-line no-redundant-type-constituents
16
17
  'icon'?: React.ElementType | React.ReactNode
17
18
  'focused'?: boolean
18
19
  'fontSize'?: number | number[]
@@ -56,6 +56,7 @@ export const TabList = forwardRef(function TabList(
56
56
  )
57
57
 
58
58
  return (
59
+ // oxlint-disable-next-line interactive-supports-focus
59
60
  <CustomInline
60
61
  data-ui="TabList"
61
62
  {...restProps}
@@ -1,4 +1,6 @@
1
- /** @jest-environment jsdom */
1
+ /** @vitest-environment jsdom */
2
+
3
+ import {describe, expect, it, vi} from 'vitest'
2
4
 
3
5
  import {render} from '../../../../test'
4
6
  import {ToastContext} from './toastContext'
@@ -8,7 +10,7 @@ import {useToast} from './useToast'
8
10
  describe('components/toast', () => {
9
11
  describe('useToast', () => {
10
12
  it('should get context value', async () => {
11
- const log = jest.fn()
13
+ const log = vi.fn()
12
14
 
13
15
  function Debug() {
14
16
  const rootToast = useToast()
@@ -25,6 +27,7 @@ describe('components/toast', () => {
25
27
  }
26
28
 
27
29
  return (
30
+ // oxlint-disable-next-line jsx-no-constructed-context-values
28
31
  <ToastContext.Provider value={value}>
29
32
  <Debug />
30
33
  </ToastContext.Provider>
@@ -38,7 +41,7 @@ describe('components/toast', () => {
38
41
  })
39
42
 
40
43
  it('should fail when no context value is provided', async () => {
41
- const log = jest.fn()
44
+ const log = vi.fn()
42
45
 
43
46
  function Debug() {
44
47
  try {
@@ -54,6 +57,7 @@ describe('components/toast', () => {
54
57
  const value = undefined
55
58
 
56
59
  return (
60
+ // oxlint-disable-next-line no-unsafe-type-assertion
57
61
  <ToastContext.Provider value={value as any}>
58
62
  <Debug />
59
63
  </ToastContext.Provider>
@@ -66,7 +70,7 @@ describe('components/toast', () => {
66
70
  })
67
71
 
68
72
  it('should fail when context value is not compatible', async () => {
69
- const log = jest.fn()
73
+ const log = vi.fn()
70
74
 
71
75
  function Debug() {
72
76
  try {
@@ -85,6 +89,7 @@ describe('components/toast', () => {
85
89
  }
86
90
 
87
91
  return (
92
+ // oxlint-disable-next-line jsx-no-constructed-context-values, no-unsafe-type-assertion
88
93
  <ToastContext.Provider value={value as any}>
89
94
  <Debug />
90
95
  </ToastContext.Provider>
@@ -1,5 +1,5 @@
1
1
  import {CloseIcon} from '@sanity/icons'
2
- import {motion, type Variant, type Variants} from 'framer-motion'
2
+ import {motion, type Variant, type Variants} from 'motion/react'
3
3
 
4
4
  import {usePrefersReducedMotion} from '../../hooks/usePrefersReducedMotion'
5
5
  import {Box, Button, Flex, Stack, Text} from '../../primitives'
@@ -1,4 +1,4 @@
1
- import {AnimatePresence} from 'framer-motion'
1
+ import {AnimatePresence} from 'motion/react'
2
2
  import {startTransition, useMemo, useState} from 'react'
3
3
 
4
4
  import {useMounted} from '../../hooks/useMounted'
@@ -218,6 +218,7 @@ export const Tree = memo(
218
218
 
219
219
  return (
220
220
  <TreeContext.Provider value={contextValue}>
221
+ {/* oxlint-disable-next-line interactive-supports-focus */}
221
222
  <Stack
222
223
  as="ul"
223
224
  data-ui="Tree"
@@ -21,6 +21,7 @@ export const TreeGroup = memo(function TreeGroup(
21
21
  {...restProps}
22
22
  hidden={!expanded}
23
23
  marginTop={tree.space}
24
+ // oxlint-disable-next-line prefer-tag-over-role
24
25
  role="group"
25
26
  space={tree.space}
26
27
  >
@@ -74,10 +74,10 @@ export const TreeItem = memo(function TreeItem(
74
74
  const itemPath = useMemo(() => path.concat([id || '']), [id, path])
75
75
  const itemKey = itemPath.join('/')
76
76
  const itemState = tree.state[itemKey]
77
- // eslint-disable-next-line react-hooks/refs
77
+ // oxlint-disable-next-line react-compiler
78
78
  const focused = tree.focusedElement === rootRef.current
79
79
  const expanded = itemState?.expanded === undefined ? expandedProp : itemState?.expanded || false
80
- // eslint-disable-next-line react-hooks/refs
80
+ // oxlint-disable-next-line react-compiler
81
81
  const tabIndex = tree.focusedElement && tree.focusedElement === rootRef.current ? 0 : -1
82
82
  const contextValue = useMemo(
83
83
  () => ({...tree, level: tree.level + 1, path: itemPath}),
@@ -1,4 +1,4 @@
1
- import type {Transition, Variant} from 'framer-motion'
1
+ import type {Transition, Variant} from 'motion/react'
2
2
 
3
3
  /**
4
4
  * @internal
@@ -13,7 +13,7 @@ export const EMPTY_RECORD: Record<string, never> = {}
13
13
  const POPOVER_MOTION_DURATION = 0.2
14
14
 
15
15
  /**
16
- * Shared `framer-motion` variants used by `Popover` and `Tooltip` components.
16
+ * Shared `motion` variants used by `Popover` and `Tooltip` components.
17
17
  * @internal
18
18
  */
19
19
  export const POPOVER_MOTION_PROPS: {
@@ -1,8 +1,9 @@
1
- /** @jest-environment jsdom */
1
+ /** @vitest-environment jsdom */
2
2
 
3
3
  import {render, screen} from '@testing-library/react'
4
4
  import userEvent from '@testing-library/user-event'
5
5
  import {useEffect, useRef, useState} from 'react'
6
+ import {describe, expect, it, vi} from 'vitest'
6
7
 
7
8
  import {useClickOutside} from './useClickOutside'
8
9
 
@@ -16,16 +17,18 @@ describe('useClickOutside', () => {
16
17
  */
17
18
  it('calls the handler when clicking outside of the array of elements', async () => {
18
19
  const user = userEvent.setup()
19
- const handler = jest.fn()
20
+ const handler = vi.fn()
20
21
 
21
22
  const TestComponent = () => {
22
23
  const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)
23
24
  const [popoverElement, setPopoverElement] = useState<HTMLDivElement | null>(null)
24
25
 
26
+ // oxlint-disable-next-line no-deprecated
25
27
  useClickOutside(handler, [buttonElement, popoverElement])
26
28
 
27
29
  return (
28
30
  <>
31
+ {/* oxlint-disable-next-line control-has-associated-label */}
29
32
  <button data-testid="button" ref={setButtonElement} />
30
33
  <div data-testid="popover" ref={setPopoverElement} />
31
34
  <div data-testid="outside" />
@@ -45,16 +48,18 @@ describe('useClickOutside', () => {
45
48
 
46
49
  it('the elements array flattens nested arrays one level deep', async () => {
47
50
  const user = userEvent.setup()
48
- const handler = jest.fn()
51
+ const handler = vi.fn()
49
52
 
50
53
  const TestComponent = () => {
51
54
  const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)
52
55
  const [popoverElement, setPopoverElement] = useState<HTMLDivElement | null>(null)
53
56
 
57
+ // oxlint-disable-next-line no-deprecated
54
58
  useClickOutside(handler, [null, [null, buttonElement], [popoverElement, null], null])
55
59
 
56
60
  return (
57
61
  <>
62
+ {/* oxlint-disable-next-line control-has-associated-label */}
58
63
  <button data-testid="button" ref={setButtonElement} />
59
64
  <div data-testid="popover" ref={setPopoverElement} />
60
65
  <div data-testid="outside" />
@@ -74,18 +79,20 @@ describe('useClickOutside', () => {
74
79
 
75
80
  it('it can set a boundary to scope outside click events', async () => {
76
81
  const user = userEvent.setup()
77
- const handler = jest.fn()
82
+ const handler = vi.fn()
78
83
 
79
84
  const TestComponent = () => {
80
85
  const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)
81
86
  const [popoverElement, setPopoverElement] = useState<HTMLDivElement | null>(null)
82
87
  const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)
83
88
 
89
+ // oxlint-disable-next-line no-deprecated
84
90
  useClickOutside(handler, [buttonElement, popoverElement], boundaryElement)
85
91
 
86
92
  return (
87
93
  <>
88
94
  <div ref={setBoundaryElement}>
95
+ {/* oxlint-disable-next-line control-has-associated-label */}
89
96
  <button data-testid="button" ref={setButtonElement} />
90
97
  <div data-testid="popover" ref={setPopoverElement} />
91
98
  <div data-testid="inside" />
@@ -114,16 +121,18 @@ describe('useClickOutside', () => {
114
121
  * Thus it makes sense to unit test it to ensure it works as expected and we don't accidentally break backwards compatibility.
115
122
  */
116
123
  const user = userEvent.setup()
117
- const handler = jest.fn()
124
+ const handler = vi.fn()
118
125
 
119
126
  const TestComponent = (props: {open?: true}) => {
120
127
  const {open = false} = props
121
128
  const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)
122
129
 
130
+ // oxlint-disable-next-line no-deprecated
123
131
  const setElement = useClickOutside(handler, [buttonElement])
124
132
 
125
133
  return (
126
134
  <>
135
+ {/* oxlint-disable-next-line control-has-associated-label */}
127
136
  <button data-testid="button" ref={setButtonElement} />
128
137
  {open && <div data-testid="popover" ref={setElement} />}
129
138
  <div data-testid="outside" />
@@ -155,17 +164,19 @@ describe('useClickOutside', () => {
155
164
  * Since we don't want people to use the `setElement` pattern, test that userland can handle dynamically changing elements arrays
156
165
  */
157
166
  const user = userEvent.setup()
158
- const handler = jest.fn()
167
+ const handler = vi.fn()
159
168
 
160
169
  const TestComponent = (props: {open?: true}) => {
161
170
  const {open = false} = props
162
171
  const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)
163
172
  const [popoverElement, setPopoverElement] = useState<HTMLDivElement | null>(null)
164
173
 
174
+ // oxlint-disable-next-line no-deprecated
165
175
  useClickOutside(handler, [buttonElement, popoverElement])
166
176
 
167
177
  return (
168
178
  <>
179
+ {/* oxlint-disable-next-line control-has-associated-label */}
169
180
  <button data-testid="button" ref={setButtonElement} />
170
181
  {open && <div data-testid="popover" ref={setPopoverElement} />}
171
182
  <div data-testid="outside" />
@@ -199,7 +210,7 @@ describe('useClickOutside', () => {
199
210
  */
200
211
 
201
212
  const user = userEvent.setup()
202
- let handler = jest.fn()
213
+ let handler = vi.fn()
203
214
 
204
215
  /**
205
216
  * Using refs in the `useClickOutside` elements array is dangerous,
@@ -210,10 +221,12 @@ describe('useClickOutside', () => {
210
221
  const buttonRef = useRef<HTMLButtonElement | null>(null)
211
222
  const popoverRef = useRef<HTMLDivElement | null>(null)
212
223
 
224
+ // oxlint-disable-next-line no-deprecated
213
225
  useClickOutside(handler, [buttonRef.current, popoverRef.current])
214
226
 
215
227
  return (
216
228
  <>
229
+ {/* oxlint-disable-next-line control-has-associated-label */}
217
230
  <button data-testid="button" ref={buttonRef} />
218
231
  <div data-testid="popover" ref={popoverRef} />
219
232
  </>
@@ -229,15 +242,17 @@ describe('useClickOutside', () => {
229
242
  * If a mixture of refs and state is used it can appear like it's working correctly,
230
243
  * but this is a side-effect, not an indication it's safe.
231
244
  */
232
- handler = jest.fn()
245
+ handler = vi.fn()
233
246
  TestComponent = () => {
234
247
  const buttonRef = useRef<HTMLButtonElement | null>(null)
235
248
  const [popoverElement, setPopoverElement] = useState<HTMLDivElement | null>(null)
236
249
 
250
+ // oxlint-disable-next-line no-deprecated
237
251
  useClickOutside(handler, [buttonRef.current, popoverElement])
238
252
 
239
253
  return (
240
254
  <>
255
+ {/* oxlint-disable-next-line control-has-associated-label */}
241
256
  <button data-testid="button" ref={buttonRef} />
242
257
  <div data-testid="popover" ref={setPopoverElement} />
243
258
  <div data-testid="outside" />
@@ -254,11 +269,12 @@ describe('useClickOutside', () => {
254
269
  /**
255
270
  * Unrelated state updates can create the same false impression of safety.
256
271
  */
257
- handler = jest.fn()
272
+ handler = vi.fn()
258
273
  TestComponent = () => {
259
274
  const buttonRef = useRef<HTMLButtonElement | null>(null)
260
275
  const popoverRef = useRef<HTMLDivElement | null>(null)
261
276
 
277
+ // oxlint-disable-next-line no-deprecated
262
278
  useClickOutside(handler, [buttonRef.current, popoverRef.current])
263
279
 
264
280
  const [, tick] = useState(0)
@@ -272,6 +288,7 @@ describe('useClickOutside', () => {
272
288
 
273
289
  return (
274
290
  <>
291
+ {/* oxlint-disable-next-line control-has-associated-label */}
275
292
  <button data-testid="button" ref={buttonRef} />
276
293
  <div data-testid="popover" ref={popoverRef} />
277
294
  <div data-testid="outside" />
@@ -289,6 +306,7 @@ describe('useClickOutside', () => {
289
306
  * When using the legacy version of the `useClickOutside` API it's necessary to synchronize mutable ref values
290
307
  * with a effect and state loop to ensure they're not stale
291
308
  */
309
+ // oxlint-disable-next-line no-deprecated
292
310
  const useElementsFromRefs = (refs: React.MutableRefObject<HTMLElement | null>[]) => {
293
311
  const [elements, setElements] = useState(() => refs.map((ref) => ref.current))
294
312
 
@@ -306,16 +324,18 @@ describe('useClickOutside', () => {
306
324
 
307
325
  return elements
308
326
  }
309
- handler = jest.fn()
327
+ handler = vi.fn()
310
328
  TestComponent = () => {
311
329
  const buttonRef = useRef<HTMLButtonElement | null>(null)
312
330
  const popoverRef = useRef<HTMLDivElement | null>(null)
313
331
 
314
332
  const elements = useElementsFromRefs([buttonRef, popoverRef])
333
+ // oxlint-disable-next-line no-deprecated
315
334
  useClickOutside(handler, elements)
316
335
 
317
336
  return (
318
337
  <>
338
+ {/* oxlint-disable-next-line control-has-associated-label */}
319
339
  <button data-testid="button" ref={buttonRef} />
320
340
  <div data-testid="popover" ref={popoverRef} />
321
341
  <div data-testid="outside" />
@@ -337,7 +357,7 @@ describe('useClickOutside', () => {
337
357
  */
338
358
 
339
359
  const user = userEvent.setup()
340
- let handler = jest.fn()
360
+ let handler = vi.fn()
341
361
 
342
362
  /**
343
363
  * Using refs in the `useClickOutside` elements array is dangerous,
@@ -347,6 +367,7 @@ describe('useClickOutside', () => {
347
367
  let TestComponent = () => {
348
368
  const boundaryRef = useRef<HTMLDivElement | null>(null)
349
369
 
370
+ // oxlint-disable-next-line no-deprecated
350
371
  useClickOutside(handler, [], boundaryRef.current)
351
372
 
352
373
  return (
@@ -368,17 +389,19 @@ describe('useClickOutside', () => {
368
389
  * If a mixture of refs and state is used it can appear like it's working correctly,
369
390
  * but this is a side-effect, not an indication it's safe.
370
391
  */
371
- handler = jest.fn()
392
+ handler = vi.fn()
372
393
  TestComponent = () => {
373
394
  const buttonRef = useRef<HTMLButtonElement | null>(null)
374
395
  const [popoverElement, setPopoverElement] = useState<HTMLDivElement | null>(null)
375
396
  const boundaryRef = useRef<HTMLDivElement | null>(null)
376
397
 
398
+ // oxlint-disable-next-line no-deprecated
377
399
  useClickOutside(handler, [buttonRef.current, popoverElement], boundaryRef.current)
378
400
 
379
401
  return (
380
402
  <>
381
403
  <div ref={boundaryRef}>
404
+ {/* oxlint-disable-next-line control-has-associated-label */}
382
405
  <button data-testid="button" ref={buttonRef} />
383
406
  <div data-testid="popover" ref={setPopoverElement} />
384
407
  <div data-testid="inside" />
@@ -398,12 +421,13 @@ describe('useClickOutside', () => {
398
421
  /**
399
422
  * Unrelated state updates can create the same false impression of safety.
400
423
  */
401
- handler = jest.fn()
424
+ handler = vi.fn()
402
425
  TestComponent = () => {
403
426
  const buttonRef = useRef<HTMLButtonElement | null>(null)
404
427
  const popoverRef = useRef<HTMLDivElement | null>(null)
405
428
  const boundaryRef = useRef<HTMLDivElement | null>(null)
406
429
 
430
+ // oxlint-disable-next-line no-deprecated
407
431
  useClickOutside(handler, [buttonRef.current, popoverRef.current], boundaryRef.current)
408
432
 
409
433
  const [, tick] = useState(0)
@@ -418,6 +442,7 @@ describe('useClickOutside', () => {
418
442
  return (
419
443
  <>
420
444
  <div ref={boundaryRef}>
445
+ {/* oxlint-disable-next-line control-has-associated-label */}
421
446
  <button data-testid="button" ref={buttonRef} />
422
447
  <div data-testid="popover" ref={popoverRef} />
423
448
  <div data-testid="inside" />
@@ -438,10 +463,11 @@ describe('useClickOutside', () => {
438
463
  * When using the legacy version of the `useClickOutside` API it's necessary to synchronize mutable ref values
439
464
  * with a effect and state loop to ensure they're not stale
440
465
  */
466
+ // oxlint-disable-next-line no-deprecated
441
467
  const useBoundaryElementFromRef = (ref: React.MutableRefObject<HTMLElement | null>) => {
442
468
  const [element, setElement] = useState(() => ref.current)
443
469
 
444
- // eslint-disable-next-line react-hooks/exhaustive-deps
470
+ // oxlint-disable-next-line exhaustive-deps
445
471
  useEffect(() => {
446
472
  // If the ref has mutated since the last render, update the state and schedule a re-render
447
473
  if (ref.current !== element) {
@@ -451,18 +477,20 @@ describe('useClickOutside', () => {
451
477
 
452
478
  return element
453
479
  }
454
- handler = jest.fn()
480
+ handler = vi.fn()
455
481
  TestComponent = () => {
456
482
  const buttonRef = useRef<HTMLButtonElement | null>(null)
457
483
  const popoverRef = useRef<HTMLDivElement | null>(null)
458
484
  const boundaryRef = useRef<HTMLDivElement | null>(null)
459
485
 
460
486
  const boundaryElement = useBoundaryElementFromRef(boundaryRef)
487
+ // oxlint-disable-next-line no-deprecated
461
488
  useClickOutside(handler, [buttonRef.current, popoverRef.current], boundaryElement)
462
489
 
463
490
  return (
464
491
  <>
465
492
  <div ref={boundaryRef}>
493
+ {/* oxlint-disable-next-line control-has-associated-label */}
466
494
  <button data-testid="button" ref={buttonRef} />
467
495
  <div data-testid="popover" ref={popoverRef} />
468
496
  <div data-testid="inside" />
@@ -26,6 +26,7 @@ function _getElements(
26
26
  }
27
27
  }
28
28
 
29
+ // oxlint-disable-next-line no-unsafe-type-assertion
29
30
  return ret.filter(Boolean) as HTMLElement[]
30
31
  }
31
32
 
@@ -58,7 +59,6 @@ export function useClickOutside(
58
59
  const nextElements = _getElements(element, elementsArg)
59
60
 
60
61
  if (prevElements.length !== nextElements.length) {
61
- // eslint-disable-next-line react-hooks/set-state-in-effect
62
62
  setElements(nextElements)
63
63
  elementsRef.current = nextElements
64
64
 
@@ -1,8 +1,9 @@
1
- /** @jest-environment jsdom */
1
+ /** @vitest-environment jsdom */
2
2
 
3
3
  import {render, screen} from '@testing-library/react'
4
4
  import userEvent from '@testing-library/user-event'
5
5
  import {useRef} from 'react'
6
+ import {describe, expect, it, vi} from 'vitest'
6
7
 
7
8
  import {useClickOutsideEvent} from './useClickOutsideEvent'
8
9
 
@@ -13,7 +14,7 @@ describe('useClickOutsideEvent', () => {
13
14
 
14
15
  it('calls the handler when clicking outside of the array of elements', async () => {
15
16
  const user = userEvent.setup()
16
- const handler = jest.fn()
17
+ const handler = vi.fn()
17
18
 
18
19
  const TestComponent = () => {
19
20
  const buttonRef = useRef<HTMLButtonElement | null>(null)
@@ -23,6 +24,7 @@ describe('useClickOutsideEvent', () => {
23
24
 
24
25
  return (
25
26
  <>
27
+ {/* oxlint-disable-next-line control-has-associated-label */}
26
28
  <button data-testid="button" ref={buttonRef} />
27
29
  <div data-testid="popover" ref={popoverRef} />
28
30
  <div data-testid="outside" />
@@ -42,7 +44,7 @@ describe('useClickOutsideEvent', () => {
42
44
 
43
45
  it('the elements array flattens nested arrays one level deep', async () => {
44
46
  const user = userEvent.setup()
45
- const handler = jest.fn()
47
+ const handler = vi.fn()
46
48
 
47
49
  const TestComponent = () => {
48
50
  const buttonRef = useRef<HTMLButtonElement | null>(null)
@@ -57,6 +59,7 @@ describe('useClickOutsideEvent', () => {
57
59
 
58
60
  return (
59
61
  <>
62
+ {/* oxlint-disable-next-line control-has-associated-label */}
60
63
  <button data-testid="button" ref={buttonRef} />
61
64
  <div data-testid="popover" ref={popoverRef} />
62
65
  <div data-testid="outside" />
@@ -76,7 +79,7 @@ describe('useClickOutsideEvent', () => {
76
79
 
77
80
  it('it can set a boundary to scope outside click events', async () => {
78
81
  const user = userEvent.setup()
79
- const handler = jest.fn()
82
+ const handler = vi.fn()
80
83
 
81
84
  const TestComponent = () => {
82
85
  const buttonRef = useRef<HTMLButtonElement | null>(null)
@@ -92,6 +95,7 @@ describe('useClickOutsideEvent', () => {
92
95
  return (
93
96
  <>
94
97
  <div ref={boundaryRef}>
98
+ {/* oxlint-disable-next-line control-has-associated-label */}
95
99
  <button data-testid="button" ref={buttonRef} />
96
100
  <div data-testid="popover" ref={popoverRef} />
97
101
  <div data-testid="inside" />
@@ -1,6 +1,7 @@
1
- /** @jest-environment jsdom */
1
+ /** @vitest-environment jsdom */
2
2
 
3
3
  import {act, renderHook} from '@testing-library/react'
4
+ import {describe, expect, it, vi} from 'vitest'
4
5
 
5
6
  import {useDelayedState} from './useDelayedState'
6
7
 
@@ -16,7 +17,7 @@ describe('useDelayedState', () => {
16
17
  })
17
18
 
18
19
  it('should update state after delay if delay is provided', async () => {
19
- jest.useFakeTimers()
20
+ vi.useFakeTimers()
20
21
  const {result} = renderHook(() => useDelayedState(false))
21
22
  const [, setState] = result.current
22
23
 
@@ -25,12 +26,12 @@ describe('useDelayedState', () => {
25
26
  })
26
27
  expect(result.current[0]).toBe(false)
27
28
  act(() => {
28
- jest.advanceTimersByTime(500)
29
+ vi.advanceTimersByTime(500)
29
30
  })
30
31
  expect(result.current[0]).toBe(false)
31
32
 
32
33
  act(() => {
33
- jest.advanceTimersByTime(500)
34
+ vi.advanceTimersByTime(500)
34
35
  })
35
36
 
36
37
  expect(result.current[0]).toBe(true)
@@ -56,12 +57,12 @@ describe('useDelayedState', () => {
56
57
  })
57
58
  expect(result.current[0]).toBe(false)
58
59
 
59
- jest.advanceTimersByTime(500)
60
+ vi.advanceTimersByTime(500)
60
61
 
61
62
  act(() => {
62
63
  setState(false)
63
64
  })
64
- jest.advanceTimersByTime(600)
65
+ vi.advanceTimersByTime(600)
65
66
  // Even after 1.1 seconds, the state should continue being false, because it was cancelled by a next setState call
66
67
  expect(result.current[0]).toBe(false)
67
68
  })
@@ -9,5 +9,6 @@ import {useElementSize} from '../useElementSize'
9
9
  export function useElementRect(element: HTMLElement | null): DOMRectReadOnly | null {
10
10
  const elementSize = useElementSize(element)
11
11
 
12
+ // oxlint-disable-next-line no-deprecated
12
13
  return elementSize?._contentRect || null
13
14
  }
@@ -10,6 +10,7 @@ import {useImperativeHandle, useRef} from 'react'
10
10
  * +useImperativeHandle(forwardedRef, () => ref.current)
11
11
  * ```
12
12
  */
13
+ // oxlint-disable-next-line no-deprecated
13
14
  export function useForwardedRef<T>(ref: React.ForwardedRef<T>): React.MutableRefObject<T | null> {
14
15
  const innerRef = useRef<T | null>(null)
15
16
 
@@ -1,7 +1,8 @@
1
- /** @jest-environment node */
1
+ /** @vitest-environment node */
2
2
 
3
3
  import {buildTheme} from '@sanity/ui/theme'
4
4
  import {renderToStaticMarkup, renderToString} from 'react-dom/server'
5
+ import {describe, expect, it} from 'vitest'
5
6
 
6
7
  import {ThemeProvider} from '../../theme'
7
8
  import {useMediaIndex} from './useMediaIndex'