@sanity/ui 3.3.2 → 3.3.4

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 (437) hide show
  1. package/dist/index.d.mts +8 -8
  2. package/dist/index.d.mts.map +1 -1
  3. package/dist/index.d.ts +8 -8
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +16 -16
  6. package/dist/index.mjs +16 -16
  7. package/dist/index.mjs.map +1 -1
  8. package/dist/tabList.js +2 -2
  9. package/dist/tabList.mjs +2 -2
  10. package/dist/tabList.mjs.map +1 -1
  11. package/dist/useTheme.d.mts +3 -3
  12. package/dist/useTheme.d.mts.map +1 -1
  13. package/dist/useTheme.d.ts +3 -3
  14. package/dist/useTheme.d.ts.map +1 -1
  15. package/package.json +8 -13
  16. package/exports/_visual-editing.ts +0 -32
  17. package/exports/index.ts +0 -1
  18. package/exports/theme.ts +0 -1
  19. package/src/core/_compat.ts +0 -294
  20. package/src/core/components/autocomplete/autocomplete.styles.tsx +0 -39
  21. package/src/core/components/autocomplete/autocomplete.tsx +0 -775
  22. package/src/core/components/autocomplete/autocompleteOption.tsx +0 -46
  23. package/src/core/components/autocomplete/autocompleteReducer.ts +0 -47
  24. package/src/core/components/autocomplete/constants.ts +0 -28
  25. package/src/core/components/autocomplete/index.ts +0 -2
  26. package/src/core/components/autocomplete/types.ts +0 -108
  27. package/src/core/components/breadcrumbs/breadcrumbs.styles.ts +0 -18
  28. package/src/core/components/breadcrumbs/breadcrumbs.test.tsx +0 -54
  29. package/src/core/components/breadcrumbs/breadcrumbs.tsx +0 -136
  30. package/src/core/components/breadcrumbs/index.ts +0 -1
  31. package/src/core/components/dialog/dialog.tsx +0 -433
  32. package/src/core/components/dialog/dialogContext.ts +0 -20
  33. package/src/core/components/dialog/dialogProvider.tsx +0 -35
  34. package/src/core/components/dialog/index.ts +0 -4
  35. package/src/core/components/dialog/styles.ts +0 -77
  36. package/src/core/components/dialog/useDialog.ts +0 -11
  37. package/src/core/components/hotkeys/hotkeys.test.tsx +0 -47
  38. package/src/core/components/hotkeys/hotkeys.tsx +0 -68
  39. package/src/core/components/hotkeys/index.ts +0 -1
  40. package/src/core/components/index.ts +0 -9
  41. package/src/core/components/menu/helpers.ts +0 -82
  42. package/src/core/components/menu/index.ts +0 -5
  43. package/src/core/components/menu/menu.spacing.test.tsx +0 -68
  44. package/src/core/components/menu/menu.test.tsx +0 -128
  45. package/src/core/components/menu/menu.tsx +0 -180
  46. package/src/core/components/menu/menuButton.tsx +0 -276
  47. package/src/core/components/menu/menuContext.ts +0 -18
  48. package/src/core/components/menu/menuDivider.ts +0 -24
  49. package/src/core/components/menu/menuGroup.spacing.test.tsx +0 -66
  50. package/src/core/components/menu/menuGroup.tsx +0 -237
  51. package/src/core/components/menu/menuItem.spacing.test.tsx +0 -62
  52. package/src/core/components/menu/menuItem.tsx +0 -201
  53. package/src/core/components/menu/useMenu.ts +0 -21
  54. package/src/core/components/menu/useMenuController.ts +0 -233
  55. package/src/core/components/skeleton/index.ts +0 -2
  56. package/src/core/components/skeleton/skeleton.tsx +0 -58
  57. package/src/core/components/skeleton/styles.ts +0 -50
  58. package/src/core/components/skeleton/textSkeleton.tsx +0 -122
  59. package/src/core/components/tab/index.ts +0 -3
  60. package/src/core/components/tab/tab.tsx +0 -102
  61. package/src/core/components/tab/tabList.test.tsx +0 -50
  62. package/src/core/components/tab/tabList.tsx +0 -71
  63. package/src/core/components/tab/tabPanel.tsx +0 -39
  64. package/src/core/components/toast/index.ts +0 -4
  65. package/src/core/components/toast/styles.ts +0 -77
  66. package/src/core/components/toast/toast.test.tsx +0 -106
  67. package/src/core/components/toast/toast.tsx +0 -199
  68. package/src/core/components/toast/toastContext.ts +0 -7
  69. package/src/core/components/toast/toastLayer.tsx +0 -52
  70. package/src/core/components/toast/toastProvider.tsx +0 -113
  71. package/src/core/components/toast/toastState.ts +0 -6
  72. package/src/core/components/toast/types.ts +0 -26
  73. package/src/core/components/toast/useToast.ts +0 -25
  74. package/src/core/components/tree/helpers.ts +0 -105
  75. package/src/core/components/tree/index.ts +0 -4
  76. package/src/core/components/tree/style.ts +0 -105
  77. package/src/core/components/tree/tree.test.tsx +0 -60
  78. package/src/core/components/tree/tree.tsx +0 -242
  79. package/src/core/components/tree/treeContext.ts +0 -10
  80. package/src/core/components/tree/treeGroup.tsx +0 -29
  81. package/src/core/components/tree/treeItem.test.tsx +0 -70
  82. package/src/core/components/tree/treeItem.tsx +0 -225
  83. package/src/core/components/tree/types.ts +0 -25
  84. package/src/core/components/tree/useTree.ts +0 -17
  85. package/src/core/constants.ts +0 -79
  86. package/src/core/helpers/animation.ts +0 -27
  87. package/src/core/helpers/element.ts +0 -55
  88. package/src/core/helpers/focus.ts +0 -100
  89. package/src/core/helpers/index.ts +0 -4
  90. package/src/core/helpers/scroll.ts +0 -15
  91. package/src/core/hooks/index.ts +0 -13
  92. package/src/core/hooks/useArrayProp.ts +0 -17
  93. package/src/core/hooks/useClickOutside.test.tsx +0 -510
  94. package/src/core/hooks/useClickOutside.ts +0 -118
  95. package/src/core/hooks/useClickOutsideEvent.test.tsx +0 -119
  96. package/src/core/hooks/useClickOutsideEvent.ts +0 -73
  97. package/src/core/hooks/useCustomValidity.ts +0 -13
  98. package/src/core/hooks/useDelayed.test.ts +0 -89
  99. package/src/core/hooks/useDelayedState.ts +0 -36
  100. package/src/core/hooks/useElementRect/index.ts +0 -1
  101. package/src/core/hooks/useElementRect/useElementRect.ts +0 -14
  102. package/src/core/hooks/useElementSize.ts +0 -19
  103. package/src/core/hooks/useForwardedRef.ts +0 -20
  104. package/src/core/hooks/useGlobalKeyDown.ts +0 -24
  105. package/src/core/hooks/useIsomorphicEffect.ts +0 -7
  106. package/src/core/hooks/useMatchMedia.ts +0 -28
  107. package/src/core/hooks/useMediaIndex/index.ts +0 -1
  108. package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -37
  109. package/src/core/hooks/useMediaIndex/useMediaIndex.ts +0 -102
  110. package/src/core/hooks/useMounted.ts +0 -15
  111. package/src/core/hooks/usePrefersDark.hydration.test.tsx +0 -58
  112. package/src/core/hooks/usePrefersDark.test.tsx +0 -21
  113. package/src/core/hooks/usePrefersDark.ts +0 -16
  114. package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -58
  115. package/src/core/hooks/usePrefersReducedMotion.test.tsx +0 -21
  116. package/src/core/hooks/usePrefersReducedMotion.ts +0 -16
  117. package/src/core/index.ts +0 -10
  118. package/src/core/lib/createGlobalScopedContext.ts +0 -37
  119. package/src/core/lib/globalScope.ts +0 -20
  120. package/src/core/lib/isRecord.ts +0 -3
  121. package/src/core/middleware/origin.ts +0 -47
  122. package/src/core/observers/elementSizeObserver.ts +0 -117
  123. package/src/core/observers/index.ts +0 -2
  124. package/src/core/observers/resizeObserver.ts +0 -9
  125. package/src/core/primitives/_selectable/index.ts +0 -1
  126. package/src/core/primitives/_selectable/selectable.tsx +0 -15
  127. package/src/core/primitives/_selectable/style.ts +0 -115
  128. package/src/core/primitives/avatar/avatar.tsx +0 -200
  129. package/src/core/primitives/avatar/avatarCounter.tsx +0 -91
  130. package/src/core/primitives/avatar/avatarStack.tsx +0 -101
  131. package/src/core/primitives/avatar/index.ts +0 -4
  132. package/src/core/primitives/avatar/styles.ts +0 -167
  133. package/src/core/primitives/avatar/types.ts +0 -17
  134. package/src/core/primitives/badge/badge.test.tsx +0 -17
  135. package/src/core/primitives/badge/badge.tsx +0 -72
  136. package/src/core/primitives/badge/index.ts +0 -1
  137. package/src/core/primitives/badge/styles.ts +0 -20
  138. package/src/core/primitives/badge/types.ts +0 -8
  139. package/src/core/primitives/box/box.test.tsx +0 -155
  140. package/src/core/primitives/box/box.tsx +0 -162
  141. package/src/core/primitives/box/index.ts +0 -1
  142. package/src/core/primitives/button/button.test.tsx +0 -86
  143. package/src/core/primitives/button/button.tsx +0 -214
  144. package/src/core/primitives/button/index.ts +0 -1
  145. package/src/core/primitives/button/styles.ts +0 -118
  146. package/src/core/primitives/card/card.tsx +0 -125
  147. package/src/core/primitives/card/index.ts +0 -2
  148. package/src/core/primitives/card/styles.ts +0 -147
  149. package/src/core/primitives/card/types.ts +0 -12
  150. package/src/core/primitives/checkbox/checkbox.tsx +0 -73
  151. package/src/core/primitives/checkbox/index.ts +0 -1
  152. package/src/core/primitives/checkbox/styles.ts +0 -128
  153. package/src/core/primitives/code/code.tsx +0 -56
  154. package/src/core/primitives/code/index.ts +0 -1
  155. package/src/core/primitives/code/refractor.tsx +0 -22
  156. package/src/core/primitives/code/styles.ts +0 -77
  157. package/src/core/primitives/container/container.tsx +0 -55
  158. package/src/core/primitives/container/index.ts +0 -2
  159. package/src/core/primitives/container/styles.ts +0 -23
  160. package/src/core/primitives/container/types.ts +0 -6
  161. package/src/core/primitives/flex/flex.tsx +0 -63
  162. package/src/core/primitives/flex/index.ts +0 -1
  163. package/src/core/primitives/grid/grid.test.tsx +0 -86
  164. package/src/core/primitives/grid/grid.tsx +0 -77
  165. package/src/core/primitives/grid/index.ts +0 -1
  166. package/src/core/primitives/heading/heading.tsx +0 -89
  167. package/src/core/primitives/heading/index.ts +0 -1
  168. package/src/core/primitives/heading/styles.ts +0 -64
  169. package/src/core/primitives/heading/types.ts +0 -7
  170. package/src/core/primitives/index.ts +0 -27
  171. package/src/core/primitives/inline/index.ts +0 -1
  172. package/src/core/primitives/inline/inline.test.tsx +0 -55
  173. package/src/core/primitives/inline/inline.tsx +0 -66
  174. package/src/core/primitives/inline/styles.ts +0 -32
  175. package/src/core/primitives/inline/types.ts +0 -6
  176. package/src/core/primitives/kbd/index.ts +0 -1
  177. package/src/core/primitives/kbd/kbd.tsx +0 -73
  178. package/src/core/primitives/label/index.ts +0 -1
  179. package/src/core/primitives/label/label.tsx +0 -88
  180. package/src/core/primitives/label/styles.ts +0 -45
  181. package/src/core/primitives/popover/constants.ts +0 -22
  182. package/src/core/primitives/popover/floating-ui/size.ts +0 -99
  183. package/src/core/primitives/popover/helpers.ts +0 -31
  184. package/src/core/primitives/popover/index.ts +0 -2
  185. package/src/core/primitives/popover/popover.tsx +0 -512
  186. package/src/core/primitives/popover/popoverCard.tsx +0 -167
  187. package/src/core/primitives/popover/types.ts +0 -6
  188. package/src/core/primitives/radio/index.ts +0 -1
  189. package/src/core/primitives/radio/radio.tsx +0 -51
  190. package/src/core/primitives/radio/styles.ts +0 -117
  191. package/src/core/primitives/select/index.ts +0 -1
  192. package/src/core/primitives/select/select.test.tsx +0 -56
  193. package/src/core/primitives/select/select.tsx +0 -95
  194. package/src/core/primitives/select/styles.ts +0 -166
  195. package/src/core/primitives/spinner/index.ts +0 -1
  196. package/src/core/primitives/spinner/spinner.tsx +0 -46
  197. package/src/core/primitives/stack/index.ts +0 -1
  198. package/src/core/primitives/stack/stack.test.tsx +0 -61
  199. package/src/core/primitives/stack/stack.tsx +0 -59
  200. package/src/core/primitives/stack/styles.ts +0 -33
  201. package/src/core/primitives/switch/index.ts +0 -1
  202. package/src/core/primitives/switch/styles.ts +0 -173
  203. package/src/core/primitives/switch/switch.tsx +0 -68
  204. package/src/core/primitives/text/index.ts +0 -1
  205. package/src/core/primitives/text/styles.ts +0 -74
  206. package/src/core/primitives/text/text.tsx +0 -90
  207. package/src/core/primitives/textArea/index.ts +0 -1
  208. package/src/core/primitives/textArea/textArea.tsx +0 -120
  209. package/src/core/primitives/textInput/index.ts +0 -1
  210. package/src/core/primitives/textInput/textInput.test.tsx +0 -52
  211. package/src/core/primitives/textInput/textInput.tsx +0 -398
  212. package/src/core/primitives/tooltip/constants.ts +0 -23
  213. package/src/core/primitives/tooltip/index.ts +0 -2
  214. package/src/core/primitives/tooltip/tooltip.test.tsx +0 -485
  215. package/src/core/primitives/tooltip/tooltip.tsx +0 -497
  216. package/src/core/primitives/tooltip/tooltipCard.tsx +0 -110
  217. package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
  218. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx +0 -11
  219. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +0 -57
  220. package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +0 -12
  221. package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
  222. package/src/core/primitives/types.ts +0 -179
  223. package/src/core/styles/border/borderStyle.ts +0 -56
  224. package/src/core/styles/border/index.ts +0 -2
  225. package/src/core/styles/border/types.ts +0 -10
  226. package/src/core/styles/box/boxStyle.ts +0 -69
  227. package/src/core/styles/box/index.ts +0 -2
  228. package/src/core/styles/box/types.ts +0 -11
  229. package/src/core/styles/card/_cardColorStyle.ts +0 -108
  230. package/src/core/styles/card/index.ts +0 -1
  231. package/src/core/styles/flex/flexItemStyle.ts +0 -27
  232. package/src/core/styles/flex/flexStyle.ts +0 -70
  233. package/src/core/styles/flex/index.ts +0 -3
  234. package/src/core/styles/flex/types.ts +0 -24
  235. package/src/core/styles/focusRing/index.ts +0 -25
  236. package/src/core/styles/font/codeFontStyle.ts +0 -13
  237. package/src/core/styles/font/headingFontStyle.ts +0 -13
  238. package/src/core/styles/font/index.ts +0 -6
  239. package/src/core/styles/font/labelFontStyle.ts +0 -13
  240. package/src/core/styles/font/responsiveFont.ts +0 -100
  241. package/src/core/styles/font/textAlignStyle.ts +0 -19
  242. package/src/core/styles/font/textFontStyle.ts +0 -13
  243. package/src/core/styles/font/types.ts +0 -33
  244. package/src/core/styles/grid/gridItemStyle.ts +0 -82
  245. package/src/core/styles/grid/gridStyle.ts +0 -109
  246. package/src/core/styles/grid/index.ts +0 -3
  247. package/src/core/styles/grid/types.ts +0 -37
  248. package/src/core/styles/helpers.ts +0 -72
  249. package/src/core/styles/index.ts +0 -5
  250. package/src/core/styles/input/index.ts +0 -2
  251. package/src/core/styles/input/responsiveInputPaddingStyle.ts +0 -78
  252. package/src/core/styles/input/textInputStyle.ts +0 -263
  253. package/src/core/styles/internal.ts +0 -12
  254. package/src/core/styles/margin/index.ts +0 -2
  255. package/src/core/styles/margin/marginStyle.ts +0 -22
  256. package/src/core/styles/margin/marginsStyle.test.ts +0 -34
  257. package/src/core/styles/margin/types.ts +0 -9
  258. package/src/core/styles/padding/index.ts +0 -2
  259. package/src/core/styles/padding/paddingStyle.test.ts +0 -34
  260. package/src/core/styles/padding/paddingStyle.ts +0 -22
  261. package/src/core/styles/padding/types.ts +0 -12
  262. package/src/core/styles/radius/index.ts +0 -2
  263. package/src/core/styles/radius/radiusStyle.ts +0 -23
  264. package/src/core/styles/radius/types.ts +0 -8
  265. package/src/core/styles/shadow/index.ts +0 -2
  266. package/src/core/styles/shadow/shadowStyle.ts +0 -29
  267. package/src/core/styles/shadow/types.ts +0 -6
  268. package/src/core/styles/types.ts +0 -8
  269. package/src/core/theme/index.ts +0 -5
  270. package/src/core/theme/theme.test.tsx +0 -77
  271. package/src/core/theme/themeColorProvider.tsx +0 -29
  272. package/src/core/theme/themeContext.ts +0 -10
  273. package/src/core/theme/themeProvider.tsx +0 -62
  274. package/src/core/theme/types.ts +0 -12
  275. package/src/core/theme/useRootTheme.ts +0 -18
  276. package/src/core/theme/useTheme.ts +0 -18
  277. package/src/core/types/avatar.ts +0 -14
  278. package/src/core/types/badge.ts +0 -12
  279. package/src/core/types/box.ts +0 -19
  280. package/src/core/types/button.ts +0 -21
  281. package/src/core/types/card.ts +0 -6
  282. package/src/core/types/component.ts +0 -32
  283. package/src/core/types/dialog.ts +0 -4
  284. package/src/core/types/flex.ts +0 -30
  285. package/src/core/types/grid.ts +0 -14
  286. package/src/core/types/gridItem.ts +0 -29
  287. package/src/core/types/index.ts +0 -15
  288. package/src/core/types/placement.ts +0 -18
  289. package/src/core/types/popover.ts +0 -4
  290. package/src/core/types/radius.ts +0 -4
  291. package/src/core/types/selectable.ts +0 -6
  292. package/src/core/types/text.ts +0 -4
  293. package/src/core/utils/arrow/arrow.tsx +0 -124
  294. package/src/core/utils/arrow/cmds.ts +0 -91
  295. package/src/core/utils/arrow/index.ts +0 -1
  296. package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -105
  297. package/src/core/utils/boundaryElement/boundaryElementContext.ts +0 -7
  298. package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -24
  299. package/src/core/utils/boundaryElement/index.ts +0 -3
  300. package/src/core/utils/boundaryElement/types.ts +0 -7
  301. package/src/core/utils/boundaryElement/useBoundaryElement.ts +0 -26
  302. package/src/core/utils/conditionalWrapper/conditionalWrapper.tsx +0 -22
  303. package/src/core/utils/conditionalWrapper/index.ts +0 -1
  304. package/src/core/utils/elementQuery/elementQuery.tsx +0 -53
  305. package/src/core/utils/elementQuery/helpers.ts +0 -27
  306. package/src/core/utils/elementQuery/index.ts +0 -1
  307. package/src/core/utils/errorBoundary.tsx +0 -48
  308. package/src/core/utils/getElementRef.ts +0 -31
  309. package/src/core/utils/index.ts +0 -9
  310. package/src/core/utils/layer/getLayerContext.test.ts +0 -32
  311. package/src/core/utils/layer/getLayerContext.ts +0 -21
  312. package/src/core/utils/layer/index.ts +0 -4
  313. package/src/core/utils/layer/layer.test.tsx +0 -113
  314. package/src/core/utils/layer/layer.tsx +0 -99
  315. package/src/core/utils/layer/layerContext.ts +0 -7
  316. package/src/core/utils/layer/layerProvider.tsx +0 -111
  317. package/src/core/utils/layer/types.ts +0 -9
  318. package/src/core/utils/layer/useLayer.ts +0 -28
  319. package/src/core/utils/portal/index.ts +0 -4
  320. package/src/core/utils/portal/portal.test.tsx +0 -108
  321. package/src/core/utils/portal/portal.ts +0 -32
  322. package/src/core/utils/portal/portalContext.ts +0 -31
  323. package/src/core/utils/portal/portalProvider.tsx +0 -48
  324. package/src/core/utils/portal/types.ts +0 -9
  325. package/src/core/utils/portal/usePortal.ts +0 -25
  326. package/src/core/utils/spanWithTextOverflow.tsx +0 -10
  327. package/src/core/utils/srOnly/index.ts +0 -1
  328. package/src/core/utils/srOnly/srOnly.tsx +0 -36
  329. package/src/core/utils/virtualList/index.ts +0 -1
  330. package/src/core/utils/virtualList/virtualList.tsx +0 -201
  331. package/src/theme/build/_deprecated/color/_selectable/createSelectableTones.ts +0 -86
  332. package/src/theme/build/_deprecated/color/_solid/createSolidTones.ts +0 -58
  333. package/src/theme/build/_deprecated/color/button/createButtonModes.ts +0 -27
  334. package/src/theme/build/_deprecated/color/button/createButtonTones.ts +0 -60
  335. package/src/theme/build/_deprecated/color/card/createCardStates.ts +0 -66
  336. package/src/theme/build/_deprecated/color/color.test.ts +0 -67
  337. package/src/theme/build/_deprecated/color/defaults.ts +0 -391
  338. package/src/theme/build/_deprecated/color/factory.ts +0 -178
  339. package/src/theme/build/_deprecated/color/index.ts +0 -1
  340. package/src/theme/build/_deprecated/color/input/createInputModes.ts +0 -86
  341. package/src/theme/build/_deprecated/color/muted/createMuted.ts +0 -58
  342. package/src/theme/build/_deprecated/color/spot/createSpot.ts +0 -23
  343. package/src/theme/build/buildColorTheme.test.ts +0 -185
  344. package/src/theme/build/buildColorTheme.ts +0 -507
  345. package/src/theme/build/buildTheme.test.ts +0 -89
  346. package/src/theme/build/buildTheme.ts +0 -36
  347. package/src/theme/build/colorToken/colorToken.ts +0 -19
  348. package/src/theme/build/colorToken/compileColorToken.ts +0 -21
  349. package/src/theme/build/colorToken/index.ts +0 -2
  350. package/src/theme/build/colorToken/types.ts +0 -6
  351. package/src/theme/build/index.ts +0 -3
  352. package/src/theme/build/lib/color-fns/blend/index.ts +0 -3
  353. package/src/theme/build/lib/color-fns/blend/mix.ts +0 -21
  354. package/src/theme/build/lib/color-fns/blend/multiply.ts +0 -18
  355. package/src/theme/build/lib/color-fns/blend/screen.ts +0 -18
  356. package/src/theme/build/lib/color-fns/color-fns.test.ts +0 -70
  357. package/src/theme/build/lib/color-fns/contrastRatio.ts +0 -31
  358. package/src/theme/build/lib/color-fns/convert.ts +0 -150
  359. package/src/theme/build/lib/color-fns/index.ts +0 -6
  360. package/src/theme/build/lib/color-fns/parse.ts +0 -60
  361. package/src/theme/build/lib/color-fns/rgba.ts +0 -10
  362. package/src/theme/build/lib/color-fns/types.ts +0 -28
  363. package/src/theme/build/lib/isRecord.ts +0 -3
  364. package/src/theme/build/lib/lazy.ts +0 -30
  365. package/src/theme/build/lib/utils.ts +0 -19
  366. package/src/theme/build/merge.ts +0 -31
  367. package/src/theme/build/mixThemeColor.test.ts +0 -23
  368. package/src/theme/build/mixThemeColor.ts +0 -53
  369. package/src/theme/build/renderColorTheme.ts +0 -538
  370. package/src/theme/build/renderColorValue.ts +0 -83
  371. package/src/theme/build/resolveColorTokens.ts +0 -274
  372. package/src/theme/build/theme.test.ts +0 -29
  373. package/src/theme/config/helpers.ts +0 -60
  374. package/src/theme/config/index.ts +0 -4
  375. package/src/theme/config/system.ts +0 -117
  376. package/src/theme/config/tokens/color/index.ts +0 -1
  377. package/src/theme/config/tokens/color/types.ts +0 -135
  378. package/src/theme/config/tokens/index.ts +0 -4
  379. package/src/theme/config/tokens/parseTokenKey.test.ts +0 -66
  380. package/src/theme/config/tokens/parseTokenKey.ts +0 -67
  381. package/src/theme/config/tokens/parseTokenValue.test.ts +0 -44
  382. package/src/theme/config/tokens/parseTokenValue.ts +0 -134
  383. package/src/theme/config/tokens/types.ts +0 -53
  384. package/src/theme/config/types.ts +0 -46
  385. package/src/theme/defaults/colorPalette.ts +0 -5
  386. package/src/theme/defaults/colorTokens.ts +0 -648
  387. package/src/theme/defaults/config.ts +0 -84
  388. package/src/theme/defaults/fonts.ts +0 -227
  389. package/src/theme/getScopedTheme.ts +0 -103
  390. package/src/theme/index.ts +0 -5
  391. package/src/theme/system/avatar.ts +0 -14
  392. package/src/theme/system/color/_constants.ts +0 -45
  393. package/src/theme/system/color/_helpers.ts +0 -28
  394. package/src/theme/system/color/_system.ts +0 -40
  395. package/src/theme/system/color/avatar.ts +0 -15
  396. package/src/theme/system/color/badge.ts +0 -16
  397. package/src/theme/system/color/button.ts +0 -17
  398. package/src/theme/system/color/color.ts +0 -34
  399. package/src/theme/system/color/index.ts +0 -13
  400. package/src/theme/system/color/input.ts +0 -25
  401. package/src/theme/system/color/kbd.ts +0 -8
  402. package/src/theme/system/color/selectable.ts +0 -12
  403. package/src/theme/system/color/shadow.ts +0 -7
  404. package/src/theme/system/color/state.ts +0 -43
  405. package/src/theme/system/color/syntax.ts +0 -41
  406. package/src/theme/system/css.ts +0 -14
  407. package/src/theme/system/focusRing.ts +0 -7
  408. package/src/theme/system/font.ts +0 -52
  409. package/src/theme/system/index.ts +0 -11
  410. package/src/theme/system/input.ts +0 -33
  411. package/src/theme/system/layer.ts +0 -8
  412. package/src/theme/system/shadow.ts +0 -19
  413. package/src/theme/system/styles.ts +0 -13
  414. package/src/theme/system/theme.ts +0 -142
  415. package/src/theme/system/v0/avatar.ts +0 -10
  416. package/src/theme/system/v0/color/_generic.ts +0 -35
  417. package/src/theme/system/v0/color/_system.ts +0 -18
  418. package/src/theme/system/v0/color/base.ts +0 -21
  419. package/src/theme/system/v0/color/button.ts +0 -56
  420. package/src/theme/system/v0/color/card.ts +0 -25
  421. package/src/theme/system/v0/color/color.ts +0 -51
  422. package/src/theme/system/v0/color/index.ts +0 -11
  423. package/src/theme/system/v0/color/input.ts +0 -40
  424. package/src/theme/system/v0/color/muted.ts +0 -37
  425. package/src/theme/system/v0/color/selectable.ts +0 -42
  426. package/src/theme/system/v0/color/solid.ts +0 -37
  427. package/src/theme/system/v0/color/spot.ts +0 -14
  428. package/src/theme/system/v0/index.ts +0 -3
  429. package/src/theme/system/v0/input.ts +0 -23
  430. package/src/theme/versioning/getTheme_v2.ts +0 -72
  431. package/src/theme/versioning/index.ts +0 -5
  432. package/src/theme/versioning/is_v0.ts +0 -6
  433. package/src/theme/versioning/is_v2.ts +0 -6
  434. package/src/theme/versioning/themeColor_v0_v2.ts +0 -250
  435. package/src/theme/versioning/themeColor_v2_v2_9.ts +0 -50
  436. package/src/theme/versioning/v0_v2.ts +0 -106
  437. package/src/theme/versioning/v2_v0.ts +0 -153
@@ -1,119 +0,0 @@
1
- /** @vitest-environment jsdom */
2
-
3
- import {render, screen} from '@testing-library/react'
4
- import userEvent from '@testing-library/user-event'
5
- import {useRef} from 'react'
6
- import {describe, expect, it, vi} from 'vitest'
7
-
8
- import {useClickOutsideEvent} from './useClickOutsideEvent'
9
-
10
- describe('useClickOutsideEvent', () => {
11
- /**
12
- * This suite demonstrates the new hook `useClickOutsideEvent` that replaces `useClickOutside`
13
- */
14
-
15
- it('calls the handler when clicking outside of the array of elements', async () => {
16
- const user = userEvent.setup()
17
- const handler = vi.fn()
18
-
19
- const TestComponent = () => {
20
- const buttonRef = useRef<HTMLButtonElement | null>(null)
21
- const popoverRef = useRef<HTMLDivElement | null>(null)
22
-
23
- useClickOutsideEvent(handler, () => [buttonRef.current, popoverRef.current])
24
-
25
- return (
26
- <>
27
- {/* oxlint-disable-next-line control-has-associated-label */}
28
- <button data-testid="button" ref={buttonRef} />
29
- <div data-testid="popover" ref={popoverRef} />
30
- <div data-testid="outside" />
31
- </>
32
- )
33
- }
34
-
35
- render(<TestComponent />)
36
-
37
- await user.click(screen.getByTestId('button'))
38
- await user.click(screen.getByTestId('popover'))
39
- expect(handler).not.toHaveBeenCalled()
40
-
41
- await user.click(screen.getByTestId('outside'))
42
- expect(handler).toHaveBeenCalledTimes(1)
43
- })
44
-
45
- it('the elements array flattens nested arrays one level deep', async () => {
46
- const user = userEvent.setup()
47
- const handler = vi.fn()
48
-
49
- const TestComponent = () => {
50
- const buttonRef = useRef<HTMLButtonElement | null>(null)
51
- const popoverRef = useRef<HTMLDivElement | null>(null)
52
-
53
- useClickOutsideEvent(handler, () => [
54
- null,
55
- [null, buttonRef.current],
56
- [popoverRef.current, null],
57
- null,
58
- ])
59
-
60
- return (
61
- <>
62
- {/* oxlint-disable-next-line control-has-associated-label */}
63
- <button data-testid="button" ref={buttonRef} />
64
- <div data-testid="popover" ref={popoverRef} />
65
- <div data-testid="outside" />
66
- </>
67
- )
68
- }
69
-
70
- render(<TestComponent />)
71
-
72
- await user.click(screen.getByTestId('button'))
73
- await user.click(screen.getByTestId('popover'))
74
- expect(handler).not.toHaveBeenCalled()
75
-
76
- await user.click(screen.getByTestId('outside'))
77
- expect(handler).toHaveBeenCalledTimes(1)
78
- })
79
-
80
- it('it can set a boundary to scope outside click events', async () => {
81
- const user = userEvent.setup()
82
- const handler = vi.fn()
83
-
84
- const TestComponent = () => {
85
- const buttonRef = useRef<HTMLButtonElement | null>(null)
86
- const popoverRef = useRef<HTMLDivElement | null>(null)
87
- const boundaryRef = useRef<HTMLDivElement | null>(null)
88
-
89
- useClickOutsideEvent(
90
- handler,
91
- () => [buttonRef.current, popoverRef.current],
92
- () => boundaryRef.current,
93
- )
94
-
95
- return (
96
- <>
97
- <div ref={boundaryRef}>
98
- {/* oxlint-disable-next-line control-has-associated-label */}
99
- <button data-testid="button" ref={buttonRef} />
100
- <div data-testid="popover" ref={popoverRef} />
101
- <div data-testid="inside" />
102
- </div>
103
- <div data-testid="outside" />
104
- </>
105
- )
106
- }
107
-
108
- render(<TestComponent />)
109
-
110
- await user.click(screen.getByTestId('button'))
111
- await user.click(screen.getByTestId('popover'))
112
- // Since it's outside the boundary it should be ignored
113
- await user.click(screen.getByTestId('outside'))
114
- expect(handler).not.toHaveBeenCalled()
115
-
116
- await user.click(screen.getByTestId('inside'))
117
- expect(handler).toHaveBeenCalledTimes(1)
118
- })
119
- })
@@ -1,73 +0,0 @@
1
- import {useDebugValue, useEffect} from 'react'
2
- import {useEffectEvent} from 'use-effect-event'
3
-
4
- import {EMPTY_ARRAY} from '../constants'
5
-
6
- /**
7
- * @public
8
- */
9
- export type ClickOutsideEventListener = (event: MouseEvent) => void
10
-
11
- /**
12
- * @public
13
- */
14
- export type ClickOutsideEventElements = (HTMLElement | null | (HTMLElement | null)[])[]
15
-
16
- /**
17
- * @public
18
- */
19
- export function useClickOutsideEvent(
20
- listener: ClickOutsideEventListener | false | undefined,
21
- elementsArg: () => ClickOutsideEventElements = () => EMPTY_ARRAY,
22
- boundaryElement?: () => HTMLElement | null,
23
- ): void {
24
- /**
25
- * The `useEffectEvent` hook allow us to always see the latest value of `listener`, `elementsArg` and `boundaryElement` without needing to
26
- * juggle `useState`, `useRef` and `useState` to make sure the `mousedown` event listener isn't constantly being added and removed.
27
- */
28
- const onEvent = useEffectEvent((evt: MouseEvent) => {
29
- if (!listener) {
30
- return
31
- }
32
-
33
- const target = evt.target
34
-
35
- if (!(target instanceof Node)) {
36
- return
37
- }
38
-
39
- const resolvedBoundaryElement = boundaryElement?.()
40
-
41
- if (resolvedBoundaryElement && !resolvedBoundaryElement.contains(target)) {
42
- return
43
- }
44
-
45
- const elements = elementsArg().flat()
46
-
47
- for (const el of elements) {
48
- if (!el) continue
49
-
50
- if (target === el || el.contains(target)) {
51
- return
52
- }
53
- }
54
-
55
- listener(evt)
56
- })
57
-
58
- const hasListener = Boolean(listener)
59
-
60
- useEffect(() => {
61
- if (!hasListener) return undefined
62
-
63
- const handleEvent = (evt: MouseEvent) => onEvent(evt)
64
-
65
- document.addEventListener('mousedown', handleEvent)
66
-
67
- return () => {
68
- document.removeEventListener('mousedown', handleEvent)
69
- }
70
- }, [hasListener])
71
-
72
- useDebugValue(listener ? 'MouseDown On' : 'MouseDown Off')
73
- }
@@ -1,13 +0,0 @@
1
- import {useEffect} from 'react'
2
-
3
- /**
4
- * @beta
5
- */
6
- export function useCustomValidity(
7
- ref: {current: null | {setCustomValidity: (validity: string) => void}},
8
- customValidity: string | undefined,
9
- ): void {
10
- useEffect(() => {
11
- ref.current?.setCustomValidity(customValidity || '')
12
- }, [customValidity, ref])
13
- }
@@ -1,89 +0,0 @@
1
- /** @vitest-environment jsdom */
2
-
3
- import {act, renderHook} from '@testing-library/react'
4
- import {describe, expect, it, vi} from 'vitest'
5
-
6
- import {useDelayedState} from './useDelayedState'
7
-
8
- describe('useDelayedState', () => {
9
- it('should update state immediately if delay is not provided', () => {
10
- const {result} = renderHook(() => useDelayedState(false))
11
- const [, setState] = result.current
12
-
13
- act(() => {
14
- setState(true)
15
- })
16
- expect(result.current[0]).toBe(true)
17
- })
18
-
19
- it('should update state after delay if delay is provided', async () => {
20
- vi.useFakeTimers()
21
- const {result} = renderHook(() => useDelayedState(false))
22
- const [, setState] = result.current
23
-
24
- act(() => {
25
- setState(true, 1000)
26
- })
27
- expect(result.current[0]).toBe(false)
28
- act(() => {
29
- vi.advanceTimersByTime(500)
30
- })
31
- expect(result.current[0]).toBe(false)
32
-
33
- act(() => {
34
- vi.advanceTimersByTime(500)
35
- })
36
-
37
- expect(result.current[0]).toBe(true)
38
- })
39
-
40
- it('should update state with callback function', () => {
41
- const {result} = renderHook(() => useDelayedState(false))
42
- const [, setState] = result.current
43
-
44
- act(() => {
45
- setState((prev: boolean) => !prev)
46
- })
47
-
48
- expect(result.current[0]).toBe(true)
49
- })
50
-
51
- it('should clear pending timeout on unmount', () => {
52
- vi.useFakeTimers()
53
- const clearTimeoutSpy = vi.spyOn(global, 'clearTimeout')
54
- const {result, unmount} = renderHook(() => useDelayedState(false))
55
- const [, setState] = result.current
56
-
57
- act(() => {
58
- setState(true, 1000)
59
- })
60
-
61
- clearTimeoutSpy.mockClear()
62
-
63
- // Unmount while the delayed update is still pending
64
- unmount()
65
-
66
- // clearTimeout should have been called during cleanup
67
- expect(clearTimeoutSpy).toHaveBeenCalledTimes(1)
68
- clearTimeoutSpy.mockRestore()
69
- })
70
-
71
- it('should cancel update if the set state was called with a new state', () => {
72
- const {result} = renderHook(() => useDelayedState(false))
73
- const [, setState] = result.current
74
-
75
- act(() => {
76
- setState(true, 1000)
77
- })
78
- expect(result.current[0]).toBe(false)
79
-
80
- vi.advanceTimersByTime(500)
81
-
82
- act(() => {
83
- setState(false)
84
- })
85
- vi.advanceTimersByTime(600)
86
- // Even after 1.1 seconds, the state should continue being false, because it was cancelled by a next setState call
87
- expect(result.current[0]).toBe(false)
88
- })
89
- })
@@ -1,36 +0,0 @@
1
- import {SetStateAction, useCallback, useEffect, useRef, useState} from 'react'
2
-
3
- /**
4
- * @beta
5
- */
6
- export function useDelayedState<S>(
7
- initialState: S | (() => S),
8
- ): [S, (nextState: SetStateAction<S>, delay?: number) => void] {
9
- const [state, setState] = useState(initialState)
10
- const delayedAction = useRef<NodeJS.Timeout | undefined>(undefined)
11
-
12
- const onStateChange = useCallback((nextState: SetStateAction<S>, delay?: number) => {
13
- const action = () => {
14
- setState(nextState)
15
- }
16
-
17
- // A new state change has been initiated, cancel the previous one.
18
- if (delayedAction.current) {
19
- clearTimeout(delayedAction.current)
20
- delayedAction.current = undefined
21
- }
22
-
23
- if (!delay) return action()
24
- delayedAction.current = setTimeout(action, delay)
25
- }, [])
26
-
27
- useEffect(() => {
28
- return () => {
29
- if (delayedAction.current) {
30
- clearTimeout(delayedAction.current)
31
- }
32
- }
33
- }, [])
34
-
35
- return [state, onStateChange]
36
- }
@@ -1 +0,0 @@
1
- export * from './useElementRect'
@@ -1,14 +0,0 @@
1
- import {useElementSize} from '../useElementSize'
2
-
3
- /**
4
- * Subscribe to the rect of a DOM element.
5
- * @beta
6
- *
7
- * @deprecated Use `useElementSize` instead
8
- */
9
- export function useElementRect(element: HTMLElement | null): DOMRectReadOnly | null {
10
- const elementSize = useElementSize(element)
11
-
12
- // oxlint-disable-next-line no-deprecated
13
- return elementSize?._contentRect || null
14
- }
@@ -1,19 +0,0 @@
1
- import {useEffect, useState} from 'react'
2
-
3
- import {_elementSizeObserver, ElementSize} from '../observers/elementSizeObserver'
4
-
5
- /**
6
- * Subscribe to the size of a DOM element.
7
- * @beta
8
- */
9
- export function useElementSize(element: HTMLElement | null): ElementSize | null {
10
- const [size, setSize] = useState<ElementSize | null>(null)
11
-
12
- useEffect(() => {
13
- if (!element) return undefined
14
-
15
- return _elementSizeObserver.subscribe(element, setSize)
16
- }, [element])
17
-
18
- return size
19
- }
@@ -1,20 +0,0 @@
1
- import {useImperativeHandle, useRef} from 'react'
2
-
3
- /**
4
- * @beta
5
- * @deprecated use `useImperativeHandle` instead
6
- * @example
7
- * ```diff
8
- * -const ref = useForwardedRef(forwardedRef)
9
- * +const ref = useRef(null)
10
- * +useImperativeHandle(forwardedRef, () => ref.current)
11
- * ```
12
- */
13
- // oxlint-disable-next-line no-deprecated
14
- export function useForwardedRef<T>(ref: React.ForwardedRef<T>): React.MutableRefObject<T | null> {
15
- const innerRef = useRef<T | null>(null)
16
-
17
- useImperativeHandle(ref, () => innerRef.current!)
18
-
19
- return innerRef
20
- }
@@ -1,24 +0,0 @@
1
- import {useEffect} from 'react'
2
- import {useEffectEvent} from 'use-effect-event'
3
-
4
- /**
5
- * Adds global keydown event listener to the window.
6
- *
7
- * @param onKeyDown - The function to call when a keydown event is triggered.
8
- * @param options - The options to pass to the addEventListener function (example, capture: true)
9
- * @beta
10
- */
11
- export function useGlobalKeyDown(
12
- onKeyDown: (event: KeyboardEvent) => void,
13
- options?: AddEventListenerOptions,
14
- ): void {
15
- const handleKeyDown = useEffectEvent((event: KeyboardEvent) => onKeyDown(event))
16
-
17
- useEffect(() => {
18
- const handler = (event: KeyboardEvent) => handleKeyDown(event)
19
-
20
- window.addEventListener('keydown', handler, options)
21
-
22
- return () => window.removeEventListener('keydown', handler, options)
23
- }, [options])
24
- }
@@ -1,7 +0,0 @@
1
- import {useEffect, useLayoutEffect} from 'react'
2
-
3
- /**
4
- * @beta
5
- * @deprecated use `useLayoutEffect` instead, or `useEffect` if possible
6
- */
7
- export const useIsomorphicEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect
@@ -1,28 +0,0 @@
1
- import {useCallback, useDebugValue, useSyncExternalStore} from 'react'
2
-
3
- /**
4
- * Efficiently subscribes to `window.matchMedia` queries
5
- *
6
- * @param getServerSnapshot - Only called during server-side rendering, and hydration if using hydrateRoot. Required if the hook is called during SSR (https://react.dev/reference/react/useSyncExternalStore#adding-support-for-server-rendering)
7
- *
8
- * @public
9
- */
10
- export function useMatchMedia(
11
- mediaQueryString: `(${string})`,
12
- getServerSnapshot?: () => boolean,
13
- ): boolean {
14
- useDebugValue(mediaQueryString)
15
-
16
- return useSyncExternalStore(
17
- useCallback(
18
- (onStoreChange) => {
19
- const media = window.matchMedia(mediaQueryString)
20
- media.addEventListener('change', onStoreChange)
21
- return () => media.removeEventListener('change', onStoreChange)
22
- },
23
- [mediaQueryString],
24
- ),
25
- () => window.matchMedia(mediaQueryString).matches,
26
- getServerSnapshot,
27
- )
28
- }
@@ -1 +0,0 @@
1
- export * from './useMediaIndex'
@@ -1,37 +0,0 @@
1
- /** @vitest-environment node */
2
-
3
- import {buildTheme} from '@sanity/ui/theme'
4
- import {renderToStaticMarkup, renderToString} from 'react-dom/server'
5
- import {describe, expect, it} from 'vitest'
6
-
7
- import {ThemeProvider} from '../../theme'
8
- import {useMediaIndex} from './useMediaIndex'
9
-
10
- const theme = buildTheme()
11
-
12
- function Log() {
13
- const mediaIndex = useMediaIndex()
14
-
15
- return <>mediaIndex: {JSON.stringify(mediaIndex)}</>
16
- }
17
-
18
- describe('useMediaIndex', () => {
19
- it(`SSR to static markup returns 0`, () => {
20
- expect(
21
- renderToStaticMarkup(
22
- <ThemeProvider theme={theme}>
23
- <Log />
24
- </ThemeProvider>,
25
- ),
26
- ).toBe('mediaIndex: 0')
27
- })
28
- it(`SSR to markup for hydration doesn't throw`, () => {
29
- expect(
30
- renderToString(
31
- <ThemeProvider theme={theme}>
32
- <Log />
33
- </ThemeProvider>,
34
- ),
35
- ).toMatchInlineSnapshot(`"mediaIndex: <!-- -->0"`)
36
- })
37
- })
@@ -1,102 +0,0 @@
1
- import {useMemo, useSyncExternalStore} from 'react'
2
-
3
- import {useTheme_v2} from '../../theme'
4
-
5
- /**
6
- * @internal
7
- */
8
- export interface _MediaStore {
9
- subscribe: (onStoreChange: () => void) => () => void
10
- getSnapshot: () => number
11
- }
12
-
13
- type MediaQueryMinWidth = `(min-width: ${number}px)`
14
- type MediaQueryMaxWidth = `(max-width: ${number}px)`
15
- type MediaQueryMinMaxWidth = `${MediaQueryMinWidth} and ${MediaQueryMaxWidth}`
16
- type MediaQuery = `screen and ${MediaQueryMinWidth | MediaQueryMaxWidth | MediaQueryMinMaxWidth}`
17
-
18
- function _getMediaQuery(media: number[], index: number): MediaQuery {
19
- if (index === 0) {
20
- return `screen and (max-width: ${media[index] - 1}px)`
21
- }
22
-
23
- if (index === media.length) {
24
- return `screen and (min-width: ${media[index - 1]}px)`
25
- }
26
-
27
- return `screen and (min-width: ${media[index - 1]}px) and (max-width: ${media[index] - 1}px)`
28
- }
29
-
30
- function _createMediaStore(media: number[]): _MediaStore {
31
- const mediaLen = media.length
32
- let sizes: {mq: MediaQueryList; index: number}[]
33
-
34
- // The _createMediaStore function is called in both server and client environments.
35
- // However since subscribe and getSnapshot are only called on the client we lazy init what we need for them
36
- // so that we don't need to run checks for wether it's safe to call `window.matchMedia`
37
- const getSizes = () => {
38
- if (!sizes) {
39
- sizes = []
40
-
41
- for (let index = mediaLen; index > -1; index -= 1) {
42
- const mediaQuery = _getMediaQuery(media, index)
43
-
44
- sizes.push({index, mq: window.matchMedia(mediaQuery)})
45
- }
46
- }
47
-
48
- return sizes
49
- }
50
-
51
- const getSnapshot = () => {
52
- for (const {index, mq} of getSizes()) {
53
- if (mq.matches) return index
54
- }
55
-
56
- return 0
57
- }
58
-
59
- const subscribe = (onStoreChange: () => void) => {
60
- const disposeFns: (() => void)[] = []
61
-
62
- for (const {mq} of getSizes()) {
63
- const handleChange = () => {
64
- if (mq.matches) onStoreChange()
65
- }
66
-
67
- mq.addEventListener('change', handleChange)
68
-
69
- disposeFns.push(() => mq.removeEventListener('change', handleChange))
70
- }
71
-
72
- return () => {
73
- for (const disposeFn of disposeFns) {
74
- disposeFn()
75
- }
76
- }
77
- }
78
-
79
- return {getSnapshot, subscribe}
80
- }
81
-
82
- /**
83
- * Only called during server-side rendering, and hydration if using hydrateRoot
84
- * Since the server environment doesn't have access to the DOM, we can't determine the current value of the media query
85
- * and we assume `(prefers-color-scheme: light)` since it's the most common scheme
86
- *
87
- * @link https://beta.reactjs.org/apis/react/useSyncExternalStore#adding-support-for-server-rendering
88
- */
89
- function getServerSnapshot() {
90
- return 0
91
- }
92
-
93
- /**
94
- * This API might change. DO NOT USE IN PRODUCTION.
95
- * @beta
96
- */
97
- export function useMediaIndex(): number {
98
- const {media} = useTheme_v2()
99
- const store = useMemo(() => _createMediaStore(media), [media])
100
-
101
- return useSyncExternalStore(store.subscribe, store.getSnapshot, getServerSnapshot)
102
- }
@@ -1,15 +0,0 @@
1
- import {useSyncExternalStore} from 'react'
2
-
3
- /**
4
- * Some components should only render after mounting to the DOM, and not be rendered at all during SSR renderToString or equivalent.
5
- * @public
6
- */
7
- export function useMounted(): boolean {
8
- return useSyncExternalStore(
9
- subscribe,
10
- () => true,
11
- () => false,
12
- )
13
- }
14
-
15
- const subscribe = () => () => {}
@@ -1,58 +0,0 @@
1
- /** @vitest-environment jsdom */
2
-
3
- /**
4
- * As this hook is used for top-level theming it's likely to be called while server-rendering
5
- * and that's why it's worth it to have a testing suite for hydration
6
- */
7
- import {waitFor} from '@testing-library/dom'
8
- import {hydrateRoot} from 'react-dom/client'
9
- import {afterAll, beforeAll, describe, expect, it, vi} from 'vitest'
10
-
11
- import {usePrefersDark} from './usePrefersDark'
12
-
13
- function Log() {
14
- const dark = usePrefersDark()
15
-
16
- return <>dark: {JSON.stringify(dark)}</>
17
- }
18
-
19
- const originalMatchMedia = window.matchMedia
20
-
21
- describe('usePrefersDark SSR hydration', () => {
22
- beforeAll(() => {
23
- window.matchMedia = () =>
24
- // oxlint-disable-next-line no-unsafe-type-assertion
25
- ({
26
- addEventListener: vi.fn(),
27
- removeEventListener: vi.fn(),
28
- matches: true,
29
- }) as any
30
- })
31
-
32
- afterAll(() => {
33
- window.matchMedia = originalMatchMedia
34
- })
35
-
36
- it(`hydrates without any warnings`, async () => {
37
- const spy = vi.spyOn(console, 'error').mockImplementation(() => {})
38
-
39
- const node = document.createElement('div')
40
-
41
- document.body.appendChild(node)
42
-
43
- node.innerHTML = `dark: <!-- -->false`
44
-
45
- hydrateRoot(node, <Log />)
46
-
47
- // It's false initially
48
- await waitFor(() => expect(node.innerHTML).toBe('dark: <!-- -->false'))
49
-
50
- // After hydration it should switch to true
51
- await waitFor(() => expect(node.innerHTML).toBe('dark: <!-- -->true'))
52
-
53
- expect(console.error).not.toHaveBeenCalled()
54
-
55
- spy.mockReset()
56
- spy.mockRestore()
57
- })
58
- })