@sanity/ui 3.3.2 → 3.3.3

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 (423) hide show
  1. package/package.json +6 -11
  2. package/exports/_visual-editing.ts +0 -32
  3. package/exports/index.ts +0 -1
  4. package/exports/theme.ts +0 -1
  5. package/src/core/_compat.ts +0 -294
  6. package/src/core/components/autocomplete/autocomplete.styles.tsx +0 -39
  7. package/src/core/components/autocomplete/autocomplete.tsx +0 -775
  8. package/src/core/components/autocomplete/autocompleteOption.tsx +0 -46
  9. package/src/core/components/autocomplete/autocompleteReducer.ts +0 -47
  10. package/src/core/components/autocomplete/constants.ts +0 -28
  11. package/src/core/components/autocomplete/index.ts +0 -2
  12. package/src/core/components/autocomplete/types.ts +0 -108
  13. package/src/core/components/breadcrumbs/breadcrumbs.styles.ts +0 -18
  14. package/src/core/components/breadcrumbs/breadcrumbs.test.tsx +0 -54
  15. package/src/core/components/breadcrumbs/breadcrumbs.tsx +0 -136
  16. package/src/core/components/breadcrumbs/index.ts +0 -1
  17. package/src/core/components/dialog/dialog.tsx +0 -433
  18. package/src/core/components/dialog/dialogContext.ts +0 -20
  19. package/src/core/components/dialog/dialogProvider.tsx +0 -35
  20. package/src/core/components/dialog/index.ts +0 -4
  21. package/src/core/components/dialog/styles.ts +0 -77
  22. package/src/core/components/dialog/useDialog.ts +0 -11
  23. package/src/core/components/hotkeys/hotkeys.test.tsx +0 -47
  24. package/src/core/components/hotkeys/hotkeys.tsx +0 -68
  25. package/src/core/components/hotkeys/index.ts +0 -1
  26. package/src/core/components/index.ts +0 -9
  27. package/src/core/components/menu/helpers.ts +0 -82
  28. package/src/core/components/menu/index.ts +0 -5
  29. package/src/core/components/menu/menu.spacing.test.tsx +0 -68
  30. package/src/core/components/menu/menu.test.tsx +0 -128
  31. package/src/core/components/menu/menu.tsx +0 -180
  32. package/src/core/components/menu/menuButton.tsx +0 -276
  33. package/src/core/components/menu/menuContext.ts +0 -18
  34. package/src/core/components/menu/menuDivider.ts +0 -24
  35. package/src/core/components/menu/menuGroup.spacing.test.tsx +0 -66
  36. package/src/core/components/menu/menuGroup.tsx +0 -237
  37. package/src/core/components/menu/menuItem.spacing.test.tsx +0 -62
  38. package/src/core/components/menu/menuItem.tsx +0 -201
  39. package/src/core/components/menu/useMenu.ts +0 -21
  40. package/src/core/components/menu/useMenuController.ts +0 -233
  41. package/src/core/components/skeleton/index.ts +0 -2
  42. package/src/core/components/skeleton/skeleton.tsx +0 -58
  43. package/src/core/components/skeleton/styles.ts +0 -50
  44. package/src/core/components/skeleton/textSkeleton.tsx +0 -122
  45. package/src/core/components/tab/index.ts +0 -3
  46. package/src/core/components/tab/tab.tsx +0 -102
  47. package/src/core/components/tab/tabList.test.tsx +0 -50
  48. package/src/core/components/tab/tabList.tsx +0 -71
  49. package/src/core/components/tab/tabPanel.tsx +0 -39
  50. package/src/core/components/toast/index.ts +0 -4
  51. package/src/core/components/toast/styles.ts +0 -77
  52. package/src/core/components/toast/toast.test.tsx +0 -106
  53. package/src/core/components/toast/toast.tsx +0 -199
  54. package/src/core/components/toast/toastContext.ts +0 -7
  55. package/src/core/components/toast/toastLayer.tsx +0 -52
  56. package/src/core/components/toast/toastProvider.tsx +0 -113
  57. package/src/core/components/toast/toastState.ts +0 -6
  58. package/src/core/components/toast/types.ts +0 -26
  59. package/src/core/components/toast/useToast.ts +0 -25
  60. package/src/core/components/tree/helpers.ts +0 -105
  61. package/src/core/components/tree/index.ts +0 -4
  62. package/src/core/components/tree/style.ts +0 -105
  63. package/src/core/components/tree/tree.test.tsx +0 -60
  64. package/src/core/components/tree/tree.tsx +0 -242
  65. package/src/core/components/tree/treeContext.ts +0 -10
  66. package/src/core/components/tree/treeGroup.tsx +0 -29
  67. package/src/core/components/tree/treeItem.test.tsx +0 -70
  68. package/src/core/components/tree/treeItem.tsx +0 -225
  69. package/src/core/components/tree/types.ts +0 -25
  70. package/src/core/components/tree/useTree.ts +0 -17
  71. package/src/core/constants.ts +0 -79
  72. package/src/core/helpers/animation.ts +0 -27
  73. package/src/core/helpers/element.ts +0 -55
  74. package/src/core/helpers/focus.ts +0 -100
  75. package/src/core/helpers/index.ts +0 -4
  76. package/src/core/helpers/scroll.ts +0 -15
  77. package/src/core/hooks/index.ts +0 -13
  78. package/src/core/hooks/useArrayProp.ts +0 -17
  79. package/src/core/hooks/useClickOutside.test.tsx +0 -510
  80. package/src/core/hooks/useClickOutside.ts +0 -118
  81. package/src/core/hooks/useClickOutsideEvent.test.tsx +0 -119
  82. package/src/core/hooks/useClickOutsideEvent.ts +0 -73
  83. package/src/core/hooks/useCustomValidity.ts +0 -13
  84. package/src/core/hooks/useDelayed.test.ts +0 -89
  85. package/src/core/hooks/useDelayedState.ts +0 -36
  86. package/src/core/hooks/useElementRect/index.ts +0 -1
  87. package/src/core/hooks/useElementRect/useElementRect.ts +0 -14
  88. package/src/core/hooks/useElementSize.ts +0 -19
  89. package/src/core/hooks/useForwardedRef.ts +0 -20
  90. package/src/core/hooks/useGlobalKeyDown.ts +0 -24
  91. package/src/core/hooks/useIsomorphicEffect.ts +0 -7
  92. package/src/core/hooks/useMatchMedia.ts +0 -28
  93. package/src/core/hooks/useMediaIndex/index.ts +0 -1
  94. package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -37
  95. package/src/core/hooks/useMediaIndex/useMediaIndex.ts +0 -102
  96. package/src/core/hooks/useMounted.ts +0 -15
  97. package/src/core/hooks/usePrefersDark.hydration.test.tsx +0 -58
  98. package/src/core/hooks/usePrefersDark.test.tsx +0 -21
  99. package/src/core/hooks/usePrefersDark.ts +0 -16
  100. package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -58
  101. package/src/core/hooks/usePrefersReducedMotion.test.tsx +0 -21
  102. package/src/core/hooks/usePrefersReducedMotion.ts +0 -16
  103. package/src/core/index.ts +0 -10
  104. package/src/core/lib/createGlobalScopedContext.ts +0 -37
  105. package/src/core/lib/globalScope.ts +0 -20
  106. package/src/core/lib/isRecord.ts +0 -3
  107. package/src/core/middleware/origin.ts +0 -47
  108. package/src/core/observers/elementSizeObserver.ts +0 -117
  109. package/src/core/observers/index.ts +0 -2
  110. package/src/core/observers/resizeObserver.ts +0 -9
  111. package/src/core/primitives/_selectable/index.ts +0 -1
  112. package/src/core/primitives/_selectable/selectable.tsx +0 -15
  113. package/src/core/primitives/_selectable/style.ts +0 -115
  114. package/src/core/primitives/avatar/avatar.tsx +0 -200
  115. package/src/core/primitives/avatar/avatarCounter.tsx +0 -91
  116. package/src/core/primitives/avatar/avatarStack.tsx +0 -101
  117. package/src/core/primitives/avatar/index.ts +0 -4
  118. package/src/core/primitives/avatar/styles.ts +0 -167
  119. package/src/core/primitives/avatar/types.ts +0 -17
  120. package/src/core/primitives/badge/badge.test.tsx +0 -17
  121. package/src/core/primitives/badge/badge.tsx +0 -72
  122. package/src/core/primitives/badge/index.ts +0 -1
  123. package/src/core/primitives/badge/styles.ts +0 -20
  124. package/src/core/primitives/badge/types.ts +0 -8
  125. package/src/core/primitives/box/box.test.tsx +0 -155
  126. package/src/core/primitives/box/box.tsx +0 -162
  127. package/src/core/primitives/box/index.ts +0 -1
  128. package/src/core/primitives/button/button.test.tsx +0 -86
  129. package/src/core/primitives/button/button.tsx +0 -214
  130. package/src/core/primitives/button/index.ts +0 -1
  131. package/src/core/primitives/button/styles.ts +0 -118
  132. package/src/core/primitives/card/card.tsx +0 -125
  133. package/src/core/primitives/card/index.ts +0 -2
  134. package/src/core/primitives/card/styles.ts +0 -147
  135. package/src/core/primitives/card/types.ts +0 -12
  136. package/src/core/primitives/checkbox/checkbox.tsx +0 -73
  137. package/src/core/primitives/checkbox/index.ts +0 -1
  138. package/src/core/primitives/checkbox/styles.ts +0 -128
  139. package/src/core/primitives/code/code.tsx +0 -56
  140. package/src/core/primitives/code/index.ts +0 -1
  141. package/src/core/primitives/code/refractor.tsx +0 -22
  142. package/src/core/primitives/code/styles.ts +0 -77
  143. package/src/core/primitives/container/container.tsx +0 -55
  144. package/src/core/primitives/container/index.ts +0 -2
  145. package/src/core/primitives/container/styles.ts +0 -23
  146. package/src/core/primitives/container/types.ts +0 -6
  147. package/src/core/primitives/flex/flex.tsx +0 -63
  148. package/src/core/primitives/flex/index.ts +0 -1
  149. package/src/core/primitives/grid/grid.test.tsx +0 -86
  150. package/src/core/primitives/grid/grid.tsx +0 -77
  151. package/src/core/primitives/grid/index.ts +0 -1
  152. package/src/core/primitives/heading/heading.tsx +0 -89
  153. package/src/core/primitives/heading/index.ts +0 -1
  154. package/src/core/primitives/heading/styles.ts +0 -64
  155. package/src/core/primitives/heading/types.ts +0 -7
  156. package/src/core/primitives/index.ts +0 -27
  157. package/src/core/primitives/inline/index.ts +0 -1
  158. package/src/core/primitives/inline/inline.test.tsx +0 -55
  159. package/src/core/primitives/inline/inline.tsx +0 -66
  160. package/src/core/primitives/inline/styles.ts +0 -32
  161. package/src/core/primitives/inline/types.ts +0 -6
  162. package/src/core/primitives/kbd/index.ts +0 -1
  163. package/src/core/primitives/kbd/kbd.tsx +0 -73
  164. package/src/core/primitives/label/index.ts +0 -1
  165. package/src/core/primitives/label/label.tsx +0 -88
  166. package/src/core/primitives/label/styles.ts +0 -45
  167. package/src/core/primitives/popover/constants.ts +0 -22
  168. package/src/core/primitives/popover/floating-ui/size.ts +0 -99
  169. package/src/core/primitives/popover/helpers.ts +0 -31
  170. package/src/core/primitives/popover/index.ts +0 -2
  171. package/src/core/primitives/popover/popover.tsx +0 -512
  172. package/src/core/primitives/popover/popoverCard.tsx +0 -167
  173. package/src/core/primitives/popover/types.ts +0 -6
  174. package/src/core/primitives/radio/index.ts +0 -1
  175. package/src/core/primitives/radio/radio.tsx +0 -51
  176. package/src/core/primitives/radio/styles.ts +0 -117
  177. package/src/core/primitives/select/index.ts +0 -1
  178. package/src/core/primitives/select/select.test.tsx +0 -56
  179. package/src/core/primitives/select/select.tsx +0 -95
  180. package/src/core/primitives/select/styles.ts +0 -166
  181. package/src/core/primitives/spinner/index.ts +0 -1
  182. package/src/core/primitives/spinner/spinner.tsx +0 -46
  183. package/src/core/primitives/stack/index.ts +0 -1
  184. package/src/core/primitives/stack/stack.test.tsx +0 -61
  185. package/src/core/primitives/stack/stack.tsx +0 -59
  186. package/src/core/primitives/stack/styles.ts +0 -33
  187. package/src/core/primitives/switch/index.ts +0 -1
  188. package/src/core/primitives/switch/styles.ts +0 -173
  189. package/src/core/primitives/switch/switch.tsx +0 -68
  190. package/src/core/primitives/text/index.ts +0 -1
  191. package/src/core/primitives/text/styles.ts +0 -74
  192. package/src/core/primitives/text/text.tsx +0 -90
  193. package/src/core/primitives/textArea/index.ts +0 -1
  194. package/src/core/primitives/textArea/textArea.tsx +0 -120
  195. package/src/core/primitives/textInput/index.ts +0 -1
  196. package/src/core/primitives/textInput/textInput.test.tsx +0 -52
  197. package/src/core/primitives/textInput/textInput.tsx +0 -398
  198. package/src/core/primitives/tooltip/constants.ts +0 -23
  199. package/src/core/primitives/tooltip/index.ts +0 -2
  200. package/src/core/primitives/tooltip/tooltip.test.tsx +0 -485
  201. package/src/core/primitives/tooltip/tooltip.tsx +0 -497
  202. package/src/core/primitives/tooltip/tooltipCard.tsx +0 -110
  203. package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
  204. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx +0 -11
  205. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +0 -57
  206. package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +0 -12
  207. package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
  208. package/src/core/primitives/types.ts +0 -179
  209. package/src/core/styles/border/borderStyle.ts +0 -56
  210. package/src/core/styles/border/index.ts +0 -2
  211. package/src/core/styles/border/types.ts +0 -10
  212. package/src/core/styles/box/boxStyle.ts +0 -69
  213. package/src/core/styles/box/index.ts +0 -2
  214. package/src/core/styles/box/types.ts +0 -11
  215. package/src/core/styles/card/_cardColorStyle.ts +0 -108
  216. package/src/core/styles/card/index.ts +0 -1
  217. package/src/core/styles/flex/flexItemStyle.ts +0 -27
  218. package/src/core/styles/flex/flexStyle.ts +0 -70
  219. package/src/core/styles/flex/index.ts +0 -3
  220. package/src/core/styles/flex/types.ts +0 -24
  221. package/src/core/styles/focusRing/index.ts +0 -25
  222. package/src/core/styles/font/codeFontStyle.ts +0 -13
  223. package/src/core/styles/font/headingFontStyle.ts +0 -13
  224. package/src/core/styles/font/index.ts +0 -6
  225. package/src/core/styles/font/labelFontStyle.ts +0 -13
  226. package/src/core/styles/font/responsiveFont.ts +0 -100
  227. package/src/core/styles/font/textAlignStyle.ts +0 -19
  228. package/src/core/styles/font/textFontStyle.ts +0 -13
  229. package/src/core/styles/font/types.ts +0 -33
  230. package/src/core/styles/grid/gridItemStyle.ts +0 -82
  231. package/src/core/styles/grid/gridStyle.ts +0 -109
  232. package/src/core/styles/grid/index.ts +0 -3
  233. package/src/core/styles/grid/types.ts +0 -37
  234. package/src/core/styles/helpers.ts +0 -72
  235. package/src/core/styles/index.ts +0 -5
  236. package/src/core/styles/input/index.ts +0 -2
  237. package/src/core/styles/input/responsiveInputPaddingStyle.ts +0 -78
  238. package/src/core/styles/input/textInputStyle.ts +0 -263
  239. package/src/core/styles/internal.ts +0 -12
  240. package/src/core/styles/margin/index.ts +0 -2
  241. package/src/core/styles/margin/marginStyle.ts +0 -22
  242. package/src/core/styles/margin/marginsStyle.test.ts +0 -34
  243. package/src/core/styles/margin/types.ts +0 -9
  244. package/src/core/styles/padding/index.ts +0 -2
  245. package/src/core/styles/padding/paddingStyle.test.ts +0 -34
  246. package/src/core/styles/padding/paddingStyle.ts +0 -22
  247. package/src/core/styles/padding/types.ts +0 -12
  248. package/src/core/styles/radius/index.ts +0 -2
  249. package/src/core/styles/radius/radiusStyle.ts +0 -23
  250. package/src/core/styles/radius/types.ts +0 -8
  251. package/src/core/styles/shadow/index.ts +0 -2
  252. package/src/core/styles/shadow/shadowStyle.ts +0 -29
  253. package/src/core/styles/shadow/types.ts +0 -6
  254. package/src/core/styles/types.ts +0 -8
  255. package/src/core/theme/index.ts +0 -5
  256. package/src/core/theme/theme.test.tsx +0 -77
  257. package/src/core/theme/themeColorProvider.tsx +0 -29
  258. package/src/core/theme/themeContext.ts +0 -10
  259. package/src/core/theme/themeProvider.tsx +0 -62
  260. package/src/core/theme/types.ts +0 -12
  261. package/src/core/theme/useRootTheme.ts +0 -18
  262. package/src/core/theme/useTheme.ts +0 -18
  263. package/src/core/types/avatar.ts +0 -14
  264. package/src/core/types/badge.ts +0 -12
  265. package/src/core/types/box.ts +0 -19
  266. package/src/core/types/button.ts +0 -21
  267. package/src/core/types/card.ts +0 -6
  268. package/src/core/types/component.ts +0 -32
  269. package/src/core/types/dialog.ts +0 -4
  270. package/src/core/types/flex.ts +0 -30
  271. package/src/core/types/grid.ts +0 -14
  272. package/src/core/types/gridItem.ts +0 -29
  273. package/src/core/types/index.ts +0 -15
  274. package/src/core/types/placement.ts +0 -18
  275. package/src/core/types/popover.ts +0 -4
  276. package/src/core/types/radius.ts +0 -4
  277. package/src/core/types/selectable.ts +0 -6
  278. package/src/core/types/text.ts +0 -4
  279. package/src/core/utils/arrow/arrow.tsx +0 -124
  280. package/src/core/utils/arrow/cmds.ts +0 -91
  281. package/src/core/utils/arrow/index.ts +0 -1
  282. package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -105
  283. package/src/core/utils/boundaryElement/boundaryElementContext.ts +0 -7
  284. package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -24
  285. package/src/core/utils/boundaryElement/index.ts +0 -3
  286. package/src/core/utils/boundaryElement/types.ts +0 -7
  287. package/src/core/utils/boundaryElement/useBoundaryElement.ts +0 -26
  288. package/src/core/utils/conditionalWrapper/conditionalWrapper.tsx +0 -22
  289. package/src/core/utils/conditionalWrapper/index.ts +0 -1
  290. package/src/core/utils/elementQuery/elementQuery.tsx +0 -53
  291. package/src/core/utils/elementQuery/helpers.ts +0 -27
  292. package/src/core/utils/elementQuery/index.ts +0 -1
  293. package/src/core/utils/errorBoundary.tsx +0 -48
  294. package/src/core/utils/getElementRef.ts +0 -31
  295. package/src/core/utils/index.ts +0 -9
  296. package/src/core/utils/layer/getLayerContext.test.ts +0 -32
  297. package/src/core/utils/layer/getLayerContext.ts +0 -21
  298. package/src/core/utils/layer/index.ts +0 -4
  299. package/src/core/utils/layer/layer.test.tsx +0 -113
  300. package/src/core/utils/layer/layer.tsx +0 -99
  301. package/src/core/utils/layer/layerContext.ts +0 -7
  302. package/src/core/utils/layer/layerProvider.tsx +0 -111
  303. package/src/core/utils/layer/types.ts +0 -9
  304. package/src/core/utils/layer/useLayer.ts +0 -28
  305. package/src/core/utils/portal/index.ts +0 -4
  306. package/src/core/utils/portal/portal.test.tsx +0 -108
  307. package/src/core/utils/portal/portal.ts +0 -32
  308. package/src/core/utils/portal/portalContext.ts +0 -31
  309. package/src/core/utils/portal/portalProvider.tsx +0 -48
  310. package/src/core/utils/portal/types.ts +0 -9
  311. package/src/core/utils/portal/usePortal.ts +0 -25
  312. package/src/core/utils/spanWithTextOverflow.tsx +0 -10
  313. package/src/core/utils/srOnly/index.ts +0 -1
  314. package/src/core/utils/srOnly/srOnly.tsx +0 -36
  315. package/src/core/utils/virtualList/index.ts +0 -1
  316. package/src/core/utils/virtualList/virtualList.tsx +0 -201
  317. package/src/theme/build/_deprecated/color/_selectable/createSelectableTones.ts +0 -86
  318. package/src/theme/build/_deprecated/color/_solid/createSolidTones.ts +0 -58
  319. package/src/theme/build/_deprecated/color/button/createButtonModes.ts +0 -27
  320. package/src/theme/build/_deprecated/color/button/createButtonTones.ts +0 -60
  321. package/src/theme/build/_deprecated/color/card/createCardStates.ts +0 -66
  322. package/src/theme/build/_deprecated/color/color.test.ts +0 -67
  323. package/src/theme/build/_deprecated/color/defaults.ts +0 -391
  324. package/src/theme/build/_deprecated/color/factory.ts +0 -178
  325. package/src/theme/build/_deprecated/color/index.ts +0 -1
  326. package/src/theme/build/_deprecated/color/input/createInputModes.ts +0 -86
  327. package/src/theme/build/_deprecated/color/muted/createMuted.ts +0 -58
  328. package/src/theme/build/_deprecated/color/spot/createSpot.ts +0 -23
  329. package/src/theme/build/buildColorTheme.test.ts +0 -185
  330. package/src/theme/build/buildColorTheme.ts +0 -507
  331. package/src/theme/build/buildTheme.test.ts +0 -89
  332. package/src/theme/build/buildTheme.ts +0 -36
  333. package/src/theme/build/colorToken/colorToken.ts +0 -19
  334. package/src/theme/build/colorToken/compileColorToken.ts +0 -21
  335. package/src/theme/build/colorToken/index.ts +0 -2
  336. package/src/theme/build/colorToken/types.ts +0 -6
  337. package/src/theme/build/index.ts +0 -3
  338. package/src/theme/build/lib/color-fns/blend/index.ts +0 -3
  339. package/src/theme/build/lib/color-fns/blend/mix.ts +0 -21
  340. package/src/theme/build/lib/color-fns/blend/multiply.ts +0 -18
  341. package/src/theme/build/lib/color-fns/blend/screen.ts +0 -18
  342. package/src/theme/build/lib/color-fns/color-fns.test.ts +0 -70
  343. package/src/theme/build/lib/color-fns/contrastRatio.ts +0 -31
  344. package/src/theme/build/lib/color-fns/convert.ts +0 -150
  345. package/src/theme/build/lib/color-fns/index.ts +0 -6
  346. package/src/theme/build/lib/color-fns/parse.ts +0 -60
  347. package/src/theme/build/lib/color-fns/rgba.ts +0 -10
  348. package/src/theme/build/lib/color-fns/types.ts +0 -28
  349. package/src/theme/build/lib/isRecord.ts +0 -3
  350. package/src/theme/build/lib/lazy.ts +0 -30
  351. package/src/theme/build/lib/utils.ts +0 -19
  352. package/src/theme/build/merge.ts +0 -31
  353. package/src/theme/build/mixThemeColor.test.ts +0 -23
  354. package/src/theme/build/mixThemeColor.ts +0 -53
  355. package/src/theme/build/renderColorTheme.ts +0 -538
  356. package/src/theme/build/renderColorValue.ts +0 -83
  357. package/src/theme/build/resolveColorTokens.ts +0 -274
  358. package/src/theme/build/theme.test.ts +0 -29
  359. package/src/theme/config/helpers.ts +0 -60
  360. package/src/theme/config/index.ts +0 -4
  361. package/src/theme/config/system.ts +0 -117
  362. package/src/theme/config/tokens/color/index.ts +0 -1
  363. package/src/theme/config/tokens/color/types.ts +0 -135
  364. package/src/theme/config/tokens/index.ts +0 -4
  365. package/src/theme/config/tokens/parseTokenKey.test.ts +0 -66
  366. package/src/theme/config/tokens/parseTokenKey.ts +0 -67
  367. package/src/theme/config/tokens/parseTokenValue.test.ts +0 -44
  368. package/src/theme/config/tokens/parseTokenValue.ts +0 -134
  369. package/src/theme/config/tokens/types.ts +0 -53
  370. package/src/theme/config/types.ts +0 -46
  371. package/src/theme/defaults/colorPalette.ts +0 -5
  372. package/src/theme/defaults/colorTokens.ts +0 -648
  373. package/src/theme/defaults/config.ts +0 -84
  374. package/src/theme/defaults/fonts.ts +0 -227
  375. package/src/theme/getScopedTheme.ts +0 -103
  376. package/src/theme/index.ts +0 -5
  377. package/src/theme/system/avatar.ts +0 -14
  378. package/src/theme/system/color/_constants.ts +0 -45
  379. package/src/theme/system/color/_helpers.ts +0 -28
  380. package/src/theme/system/color/_system.ts +0 -40
  381. package/src/theme/system/color/avatar.ts +0 -15
  382. package/src/theme/system/color/badge.ts +0 -16
  383. package/src/theme/system/color/button.ts +0 -17
  384. package/src/theme/system/color/color.ts +0 -34
  385. package/src/theme/system/color/index.ts +0 -13
  386. package/src/theme/system/color/input.ts +0 -25
  387. package/src/theme/system/color/kbd.ts +0 -8
  388. package/src/theme/system/color/selectable.ts +0 -12
  389. package/src/theme/system/color/shadow.ts +0 -7
  390. package/src/theme/system/color/state.ts +0 -43
  391. package/src/theme/system/color/syntax.ts +0 -41
  392. package/src/theme/system/css.ts +0 -14
  393. package/src/theme/system/focusRing.ts +0 -7
  394. package/src/theme/system/font.ts +0 -52
  395. package/src/theme/system/index.ts +0 -11
  396. package/src/theme/system/input.ts +0 -33
  397. package/src/theme/system/layer.ts +0 -8
  398. package/src/theme/system/shadow.ts +0 -19
  399. package/src/theme/system/styles.ts +0 -13
  400. package/src/theme/system/theme.ts +0 -142
  401. package/src/theme/system/v0/avatar.ts +0 -10
  402. package/src/theme/system/v0/color/_generic.ts +0 -35
  403. package/src/theme/system/v0/color/_system.ts +0 -18
  404. package/src/theme/system/v0/color/base.ts +0 -21
  405. package/src/theme/system/v0/color/button.ts +0 -56
  406. package/src/theme/system/v0/color/card.ts +0 -25
  407. package/src/theme/system/v0/color/color.ts +0 -51
  408. package/src/theme/system/v0/color/index.ts +0 -11
  409. package/src/theme/system/v0/color/input.ts +0 -40
  410. package/src/theme/system/v0/color/muted.ts +0 -37
  411. package/src/theme/system/v0/color/selectable.ts +0 -42
  412. package/src/theme/system/v0/color/solid.ts +0 -37
  413. package/src/theme/system/v0/color/spot.ts +0 -14
  414. package/src/theme/system/v0/index.ts +0 -3
  415. package/src/theme/system/v0/input.ts +0 -23
  416. package/src/theme/versioning/getTheme_v2.ts +0 -72
  417. package/src/theme/versioning/index.ts +0 -5
  418. package/src/theme/versioning/is_v0.ts +0 -6
  419. package/src/theme/versioning/is_v2.ts +0 -6
  420. package/src/theme/versioning/themeColor_v0_v2.ts +0 -250
  421. package/src/theme/versioning/themeColor_v2_v2_9.ts +0 -50
  422. package/src/theme/versioning/v0_v2.ts +0 -106
  423. package/src/theme/versioning/v2_v0.ts +0 -153
@@ -1,276 +0,0 @@
1
- import {ThemeColorSchemeKey} from '@sanity/ui/theme'
2
- import {
3
- cloneElement,
4
- forwardRef,
5
- useCallback,
6
- useEffect,
7
- useImperativeHandle,
8
- useMemo,
9
- useRef,
10
- useState,
11
- } from 'react'
12
-
13
- import {Popover, PopoverProps} from '../../primitives'
14
- import {Placement, Radius} from '../../types'
15
- import {MenuProps} from './menu'
16
-
17
- /**
18
- * @public
19
- */
20
- export interface MenuButtonProps {
21
- /**
22
- * @beta Do not use in production.
23
- */
24
- __unstable_disableRestoreFocusOnClose?: boolean
25
- /**
26
- * @deprecated Use `popover={{boundaryElement: element}}` instead.
27
- */
28
- boundaryElement?: HTMLElement
29
- button: React.JSX.Element
30
- id: string
31
- menu?: React.JSX.Element
32
- onClose?: () => void
33
- onOpen?: () => void
34
- /**
35
- * @deprecated Use `popover={{placement: 'top'}}` instead.
36
- */
37
- placement?: Placement
38
- popover?: Omit<PopoverProps, 'content' | 'open'>
39
- /**
40
- * @deprecated Use `popover={{scheme: 'dark'}}` instead.
41
- */
42
- popoverScheme?: ThemeColorSchemeKey
43
- /**
44
- * @deprecated Use `popover={{radius: 2}}` instead.
45
- */
46
- popoverRadius?: Radius | Radius[]
47
- /**
48
- * @beta Do not use in production.
49
- * @deprecated Use `popover={{portal: true}}` instead.
50
- */
51
- portal?: boolean
52
- /**
53
- * @deprecated Use `popover={{preventOverflow: true}}` instead.
54
- */
55
- preventOverflow?: boolean
56
- }
57
-
58
- /**
59
- * The `MenuButton` component follows the WAI-ARIA specification for menu buttons.
60
- *
61
- * @public
62
- */
63
- export const MenuButton = forwardRef(function MenuButton(
64
- props: MenuButtonProps,
65
- forwardedRef: React.ForwardedRef<HTMLButtonElement | null>,
66
- ) {
67
- const {
68
- __unstable_disableRestoreFocusOnClose: disableRestoreFocusOnClose = false,
69
- // oxlint-disable-next-line no-deprecated
70
- boundaryElement: deprecated_boundaryElement,
71
- button: buttonProp,
72
- id,
73
- menu: menuProp,
74
- onClose,
75
- onOpen,
76
- // oxlint-disable-next-line no-deprecated
77
- placement: deprecated_placement,
78
- // oxlint-disable-next-line no-deprecated
79
- popoverScheme: deprecated_popoverScheme,
80
- // oxlint-disable-next-line no-deprecated
81
- portal: deprecated_portal = true,
82
- popover,
83
- // oxlint-disable-next-line no-deprecated
84
- popoverRadius: deprecated_popoverRadius,
85
- // oxlint-disable-next-line no-deprecated
86
- preventOverflow: deprecated_preventOverflow,
87
- } = props
88
- const [open, setOpen] = useState(false)
89
- const [shouldFocus, setShouldFocus] = useState<'first' | 'last' | null>(null)
90
- const [buttonElement, setButtonElement] = useState<HTMLButtonElement | null>(null)
91
- const [menuElements, setChildMenuElements] = useState<HTMLElement[]>([])
92
- const openRef = useRef<boolean>(open)
93
-
94
- // Notify consumers when the menu opens
95
- useEffect(() => {
96
- if (onOpen && open && !openRef.current) {
97
- onOpen()
98
- }
99
- }, [onOpen, open])
100
-
101
- // Notify consumers when the menu closes
102
- useEffect(() => {
103
- if (onClose && !open && openRef.current) {
104
- onClose()
105
- }
106
- }, [onClose, open])
107
-
108
- useEffect(() => {
109
- openRef.current = open
110
- }, [open])
111
-
112
- const handleButtonClick = useCallback(() => {
113
- setOpen((v) => !v)
114
- setShouldFocus(null)
115
- }, [])
116
-
117
- // Prevent mouse event propagation when the menu is open.
118
- // This is to ensure that `handleBlur` isn't triggered when clicking the menu button whilst open,
119
- // which can lead to `setOpen` being triggered multiple times (once by `handleBlur`, and again by `handleButtonClick`).
120
- const handleMouseDown = useCallback(
121
- (event: PointerEvent) => {
122
- if (open) event.preventDefault()
123
- },
124
- [open],
125
- )
126
-
127
- const handleButtonKeyDown = useCallback((event: React.KeyboardEvent<HTMLButtonElement>) => {
128
- // On `ArrowDown`, `Enter` and `Space`
129
- // - Opens menu and moves focus to first menuitem
130
- if (event.key === 'ArrowDown' || event.key === 'Enter' || event.key === ' ') {
131
- event.preventDefault()
132
- setOpen(true)
133
- setShouldFocus('first')
134
-
135
- return
136
- }
137
-
138
- // On `ArrowUp`
139
- // - Opens menu and moves focus to last menuitem
140
- if (event.key === 'ArrowUp') {
141
- event.preventDefault()
142
- setOpen(true)
143
- setShouldFocus('last')
144
-
145
- return
146
- }
147
- }, [])
148
-
149
- const handleMenuClickOutside = useCallback(
150
- (event: MouseEvent) => {
151
- const target = event.target
152
-
153
- if (!(target instanceof Node)) {
154
- return
155
- }
156
-
157
- if (buttonElement && (target === buttonElement || buttonElement.contains(target))) {
158
- return
159
- }
160
-
161
- for (const el of menuElements) {
162
- if (target === el || el.contains(target)) {
163
- return
164
- }
165
- }
166
-
167
- setOpen(false)
168
- },
169
- [buttonElement, menuElements],
170
- )
171
-
172
- const handleMenuEscape = useCallback(() => {
173
- setOpen(false)
174
- if (disableRestoreFocusOnClose) return
175
- if (buttonElement) buttonElement.focus()
176
- }, [buttonElement, disableRestoreFocusOnClose])
177
-
178
- const handleBlur = useCallback(
179
- (event: FocusEvent) => {
180
- const target = event.relatedTarget
181
-
182
- if (!(target instanceof Node)) {
183
- return
184
- }
185
-
186
- for (const el of menuElements) {
187
- if (el === target || el.contains(target)) {
188
- return
189
- }
190
- }
191
-
192
- setOpen(false)
193
- },
194
- [menuElements],
195
- )
196
-
197
- const handleItemClick = useCallback(() => {
198
- setOpen(false)
199
- if (disableRestoreFocusOnClose) return
200
- if (buttonElement) buttonElement.focus()
201
- }, [buttonElement, disableRestoreFocusOnClose])
202
-
203
- const registerElement = useCallback((el: HTMLElement) => {
204
- setChildMenuElements((els) => els.concat([el]))
205
-
206
- return () => setChildMenuElements((els) => els.filter((_el) => _el !== el))
207
- }, [])
208
-
209
- const menuProps: MenuProps = {
210
- 'aria-labelledby': id,
211
- 'onBlurCapture': handleBlur,
212
- 'onClickOutside': handleMenuClickOutside,
213
- 'onEscape': handleMenuEscape,
214
- 'onItemClick': handleItemClick,
215
- 'originElement': buttonElement,
216
- registerElement,
217
- shouldFocus,
218
- }
219
-
220
- const menu = menuProp && cloneElement(menuProp, menuProps)
221
-
222
- const button = useMemo(
223
- () =>
224
- buttonProp &&
225
- cloneElement(buttonProp, {
226
- 'data-ui': 'MenuButton',
227
- id,
228
- 'onClick': handleButtonClick,
229
- 'onKeyDown': handleButtonKeyDown,
230
- 'onMouseDown': handleMouseDown,
231
- 'aria-haspopup': true,
232
- 'aria-expanded': open,
233
- 'ref': setButtonElement,
234
- 'selected': buttonProp.props.selected ?? open,
235
- }),
236
- [buttonProp, handleButtonClick, handleButtonKeyDown, handleMouseDown, id, open],
237
- )
238
-
239
- // Forward button ref to parent
240
- useImperativeHandle<HTMLButtonElement | null, HTMLButtonElement | null>(
241
- forwardedRef,
242
- () => buttonElement,
243
- [buttonElement],
244
- )
245
-
246
- const popoverProps: MenuButtonProps['popover'] = useMemo(
247
- () => ({
248
- // oxlint-disable-next-line no-deprecated
249
- boundaryElement: deprecated_boundaryElement,
250
- overflow: 'auto',
251
- placement: deprecated_placement,
252
- portal: deprecated_portal,
253
- preventOverflow: deprecated_preventOverflow,
254
- radius: deprecated_popoverRadius,
255
- scheme: deprecated_popoverScheme,
256
- // oxlint-disable-next-line no-useless-fallback-in-spread
257
- ...(popover || {}),
258
- }),
259
- [
260
- deprecated_boundaryElement,
261
- deprecated_placement,
262
- deprecated_popoverRadius,
263
- deprecated_popoverScheme,
264
- deprecated_portal,
265
- deprecated_preventOverflow,
266
- popover,
267
- ],
268
- )
269
-
270
- return (
271
- <Popover data-ui="MenuButton__popover" {...popoverProps} content={menu} open={open}>
272
- {button || <></>}
273
- </Popover>
274
- )
275
- })
276
- MenuButton.displayName = 'ForwardRef(MenuButton)'
@@ -1,18 +0,0 @@
1
- import {createGlobalScopedContext} from '../../lib/createGlobalScopedContext'
2
-
3
- export interface MenuContextValue {
4
- version: 2
5
- activeElement: HTMLElement | null
6
- mount: (element: HTMLElement | null, selected?: boolean) => () => void
7
- onClickOutside?: (event: MouseEvent) => void
8
- onEscape?: () => void
9
- onItemClick?: () => void
10
- onItemMouseEnter: (event: React.MouseEvent<HTMLElement>) => void
11
- onItemMouseLeave: (event: React.MouseEvent<HTMLElement>) => void
12
- registerElement?: (el: HTMLElement) => () => void
13
- }
14
-
15
- export const MenuContext = createGlobalScopedContext<MenuContextValue | null>(
16
- '@sanity/ui/context/menu',
17
- null,
18
- )
@@ -1,24 +0,0 @@
1
- import {styled} from 'styled-components'
2
-
3
- import {ElementType, EmptyProps, Props} from '../../types'
4
-
5
- const StyledMenuDivider = styled.hr`
6
- height: 1px;
7
- border: 0;
8
- background: var(--card-hairline-soft-color);
9
- margin: 0;
10
- `
11
- StyledMenuDivider.displayName = 'MenuDivider'
12
-
13
- /**
14
- * @public
15
- */
16
- export type MenuDividerProps<E extends ElementType = 'hr'> = Props<EmptyProps, E>
17
-
18
- /**
19
- * @public
20
- */
21
- // oxlint-disable-next-line no-unsafe-type-assertion
22
- export const MenuDivider = StyledMenuDivider as unknown as <E extends ElementType = 'hr'>(
23
- props: MenuDividerProps<E>,
24
- ) => React.JSX.Element
@@ -1,66 +0,0 @@
1
- /** @vitest-environment jsdom */
2
-
3
- import {beforeEach, describe, expect, it, vi} from 'vitest'
4
-
5
- import {render} from '../../../../test'
6
- import {Flex} from '../../primitives'
7
- import {MenuContext, MenuContextValue} from './menuContext'
8
- import {MenuGroup} from './menuGroup'
9
- import {MenuItem} from './menuItem'
10
-
11
- vi.mock('../../primitives', async (importOriginal) => {
12
- const actual = await importOriginal<typeof import('../../primitives')>()
13
-
14
- return {
15
- ...actual,
16
- // oxlint-disable-next-line no-unsafe-type-assertion
17
- Flex: vi.fn((props: Record<string, unknown>) => (actual.Flex as any).render(props, null)),
18
- Popover: vi.fn(({children}: {children?: React.ReactNode}) => children),
19
- }
20
- })
21
-
22
- const menuContextValue: MenuContextValue = {
23
- version: 2,
24
- activeElement: null,
25
- mount: () => () => undefined,
26
- onItemMouseEnter: () => undefined,
27
- onItemMouseLeave: () => undefined,
28
- }
29
-
30
- function renderMenuGroup(props: Partial<React.ComponentProps<typeof MenuGroup>> = {}) {
31
- return render(
32
- <MenuContext.Provider value={menuContextValue}>
33
- <MenuGroup id="menu-group" text="Menu group" {...props}>
34
- <MenuItem id="submenu-item" text="Submenu item" />
35
- </MenuGroup>
36
- </MenuContext.Provider>,
37
- )
38
- }
39
-
40
- describe('components/menuGroup spacing', () => {
41
- const mockedFlex = vi.mocked(Flex)
42
-
43
- beforeEach(() => {
44
- mockedFlex.mockClear()
45
- })
46
-
47
- it('should support `space` and `gap` with the same behavior', () => {
48
- renderMenuGroup({space: 2})
49
- expect(mockedFlex.mock.calls.map(([props]) => props)).toContainEqual(
50
- expect.objectContaining({gap: 2}),
51
- )
52
-
53
- mockedFlex.mockClear()
54
- renderMenuGroup({gap: 2})
55
- expect(mockedFlex.mock.calls.map(([props]) => props)).toContainEqual(
56
- expect.objectContaining({gap: 2}),
57
- )
58
- })
59
-
60
- it('should prefer `gap` over `space` when both are provided', () => {
61
- renderMenuGroup({gap: 3, space: 1})
62
- const propsList = mockedFlex.mock.calls.map(([props]) => props)
63
- expect(propsList).toContainEqual(expect.objectContaining({gap: 3}))
64
- expect(propsList).not.toContainEqual(expect.objectContaining({gap: 1}))
65
- })
66
- })
@@ -1,237 +0,0 @@
1
- import {ChevronRightIcon} from '@sanity/icons'
2
- import {isValidElement, useCallback, useEffect, useState} from 'react'
3
- import {isValidElementType} from 'react-is'
4
-
5
- import {Box, Flex, Popover, PopoverProps, Text} from '../../primitives'
6
- import {Selectable} from '../../primitives/_selectable'
7
- import {_getArrayProp} from '../../styles'
8
- import {useRootTheme} from '../../theme'
9
- import {ElementType, Props, Radius, SelectableTone} from '../../types'
10
- import {Menu, MenuProps} from './menu'
11
- import {useMenu} from './useMenu'
12
-
13
- /**
14
- * @public
15
- */
16
- export interface MenuGroupOwnProps {
17
- fontSize?: number | number[]
18
- // oxlint-disable-next-line no-redundant-type-constituents
19
- icon?: React.ElementType | React.ReactNode
20
- menu?: Omit<
21
- MenuProps,
22
- | 'onClickOutside'
23
- | 'onEscape'
24
- | 'onItemClick'
25
- | 'onKeyDown'
26
- | 'onMouseEnter'
27
- | 'registerElement'
28
- | 'shouldFocus'
29
- | 'onBlurCapture'
30
- >
31
- padding?: number | number[]
32
- popover?: Omit<PopoverProps, 'content' | 'open'>
33
- radius?: Radius | Radius[]
34
- gap?: number | number[]
35
- /**
36
- * @deprecated Use `gap` instead. `space` will be removed in v4.
37
- */
38
- space?: number | number[]
39
- text: React.ReactNode
40
- tone?: SelectableTone
41
- }
42
-
43
- /**
44
- * @public
45
- */
46
- export type MenuGroupProps<E extends ElementType = 'button'> = Props<MenuGroupOwnProps, E>
47
-
48
- function MenuGroupComponent(
49
- props: Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'popover' | 'ref' | 'tabIndex'> &
50
- MenuGroupOwnProps & {as?: ElementType},
51
- ): React.JSX.Element {
52
- const {
53
- as = 'button',
54
- children,
55
- fontSize = 1,
56
- icon: IconComponent,
57
- menu: menuProps,
58
- onClick,
59
- padding = 3,
60
- popover,
61
- radius = 2,
62
- gap,
63
- // oxlint-disable-next-line no-deprecated
64
- space: deprecated_space = 3,
65
- text,
66
- tone = 'default',
67
- ...restProps
68
- } = props
69
- const spacing = gap === undefined ? deprecated_space : gap
70
- const menu = useMenu()
71
- const {scheme} = useRootTheme()
72
- const {
73
- activeElement,
74
- mount,
75
- onClickOutside,
76
- onEscape,
77
- onItemClick,
78
- onItemMouseEnter: _onItemMouseEnter,
79
- registerElement,
80
- } = menu
81
- const onItemMouseEnter = _onItemMouseEnter ?? menu.onItemMouseEnter
82
- const [rootElement, setRootElement] = useState<HTMLButtonElement | HTMLDivElement | null>(null)
83
- const [open, setOpen] = useState(false)
84
- const [shouldFocus, setShouldFocus] = useState<'first' | 'last' | null>(null)
85
- const active = Boolean(activeElement) && activeElement === rootElement
86
- const [withinMenu, setWithinMenu] = useState(false)
87
-
88
- const handleMouseEnter = useCallback(
89
- (event: React.MouseEvent<HTMLElement>) => {
90
- setWithinMenu(false)
91
- onItemMouseEnter(event)
92
- setOpen(true)
93
- },
94
- [onItemMouseEnter],
95
- )
96
-
97
- const handleMenuKeyDown = useCallback(
98
- (event: React.KeyboardEvent<HTMLDivElement>) => {
99
- if (event.key === 'ArrowLeft') {
100
- event.stopPropagation()
101
-
102
- setOpen(false)
103
-
104
- requestAnimationFrame(() => {
105
- rootElement?.focus()
106
- })
107
- }
108
- },
109
- [rootElement],
110
- )
111
-
112
- const handleClick = useCallback(
113
- (event: React.MouseEvent<HTMLDivElement>) => {
114
- onClick?.(event)
115
-
116
- setShouldFocus('first')
117
- setOpen(true)
118
- },
119
- [onClick],
120
- )
121
-
122
- const handleChildItemClick = useCallback(() => {
123
- setOpen(false)
124
- onItemClick?.()
125
- }, [onItemClick])
126
-
127
- const handleMenuMouseEnter = useCallback(() => setWithinMenu(true), [])
128
-
129
- // Register the menu item element
130
- useEffect(() => mount(rootElement), [mount, rootElement])
131
-
132
- // Close child menu when a sibling item becomes active
133
- useEffect(() => {
134
- // oxlint-disable-next-line react-compiler
135
- if (!active) setOpen(false)
136
- }, [active])
137
-
138
- // Update state when child menu is no longer open
139
- useEffect(() => {
140
- // oxlint-disable-next-line react-compiler
141
- if (!open) setWithinMenu(false)
142
- }, [open])
143
-
144
- // Reset the shouldFocus state after it has been used
145
- useEffect(() => {
146
- if (!shouldFocus) return
147
- // The useMenuController effect that handles `shouldFocus` schedules a request animation frame where it's processed.
148
- // By doing the same here, we ensure that the reset is processed after the focus change.
149
- const rafId = requestAnimationFrame(() => setShouldFocus(null))
150
-
151
- // oxlint-disable-next-line consistent-return
152
- return () => cancelAnimationFrame(rafId)
153
- }, [shouldFocus])
154
-
155
- const childMenu = (
156
- <Menu
157
- {...menuProps}
158
- onClickOutside={onClickOutside}
159
- onEscape={onEscape}
160
- onItemClick={handleChildItemClick}
161
- onKeyDown={handleMenuKeyDown}
162
- onMouseEnter={handleMenuMouseEnter}
163
- registerElement={registerElement}
164
- shouldFocus={shouldFocus}
165
- >
166
- {children}
167
- </Menu>
168
- )
169
-
170
- const handleKeyDown = useCallback((event: React.KeyboardEvent<HTMLDivElement>) => {
171
- const target = event.currentTarget
172
-
173
- if (document.activeElement !== target) {
174
- return
175
- }
176
-
177
- if (event.key === 'ArrowRight') {
178
- setShouldFocus('first')
179
- setOpen(true)
180
- setWithinMenu(true)
181
-
182
- return
183
- }
184
- }, [])
185
-
186
- return (
187
- <Popover {...popover} content={childMenu} data-ui="MenuGroup__popover" open={open}>
188
- <Selectable
189
- data-as={as}
190
- data-ui="MenuGroup"
191
- forwardedAs={as}
192
- {...restProps}
193
- aria-pressed={as === 'button' ? withinMenu : undefined}
194
- data-pressed={as !== 'button' ? withinMenu : undefined}
195
- data-selected={!withinMenu && active ? '' : undefined}
196
- $radius={_getArrayProp(radius)}
197
- $tone={tone}
198
- $scheme={scheme}
199
- onClick={handleClick}
200
- onKeyDown={handleKeyDown}
201
- onMouseEnter={handleMouseEnter}
202
- ref={setRootElement}
203
- tabIndex={-1}
204
- type={as === 'button' ? 'button' : undefined}
205
- >
206
- <Flex gap={spacing} padding={padding}>
207
- {IconComponent && (
208
- <Text size={fontSize}>
209
- {isValidElement(IconComponent) && IconComponent}
210
- {isValidElementType(IconComponent) && <IconComponent />}
211
- </Text>
212
- )}
213
-
214
- <Box flex={1}>
215
- <Text size={fontSize} textOverflow="ellipsis" weight="medium">
216
- {text}
217
- </Text>
218
- </Box>
219
-
220
- <Text size={fontSize}>
221
- <ChevronRightIcon />
222
- </Text>
223
- </Flex>
224
- </Selectable>
225
- </Popover>
226
- )
227
- }
228
-
229
- MenuGroupComponent.displayName = 'MenuGroup'
230
-
231
- /**
232
- * @public
233
- */
234
- // oxlint-disable-next-line no-unsafe-type-assertion
235
- export const MenuGroup = MenuGroupComponent as unknown as <E extends ElementType = 'button'>(
236
- props: MenuGroupProps<E>,
237
- ) => React.JSX.Element
@@ -1,62 +0,0 @@
1
- /** @vitest-environment jsdom */
2
-
3
- import {beforeEach, describe, expect, it, vi} from 'vitest'
4
-
5
- import {render} from '../../../../test'
6
- import {Flex} from '../../primitives'
7
- import {MenuContext, MenuContextValue} from './menuContext'
8
- import {MenuItem} from './menuItem'
9
-
10
- vi.mock('../../primitives', async (importOriginal) => {
11
- const actual = await importOriginal<typeof import('../../primitives')>()
12
-
13
- return {
14
- ...actual,
15
- // oxlint-disable-next-line no-unsafe-type-assertion
16
- Flex: vi.fn((props: Record<string, unknown>) => (actual.Flex as any).render(props, null)),
17
- }
18
- })
19
-
20
- const menuContextValue: MenuContextValue = {
21
- version: 2,
22
- activeElement: null,
23
- mount: () => () => undefined,
24
- onItemMouseEnter: () => undefined,
25
- onItemMouseLeave: () => undefined,
26
- }
27
-
28
- function renderMenuItem(props: Partial<React.ComponentProps<typeof MenuItem>> = {}) {
29
- return render(
30
- <MenuContext.Provider value={menuContextValue}>
31
- <MenuItem id="menu-item" text="Menu item" {...props} />
32
- </MenuContext.Provider>,
33
- )
34
- }
35
-
36
- describe('components/menuItem spacing', () => {
37
- const mockedFlex = vi.mocked(Flex)
38
-
39
- beforeEach(() => {
40
- mockedFlex.mockClear()
41
- })
42
-
43
- it('should support `space` and `gap` with the same behavior', () => {
44
- renderMenuItem({space: 2})
45
- expect(mockedFlex.mock.calls.map(([props]) => props)).toContainEqual(
46
- expect.objectContaining({gap: 2}),
47
- )
48
-
49
- mockedFlex.mockClear()
50
- renderMenuItem({gap: 2})
51
- expect(mockedFlex.mock.calls.map(([props]) => props)).toContainEqual(
52
- expect.objectContaining({gap: 2}),
53
- )
54
- })
55
-
56
- it('should prefer `gap` over `space` when both are provided', () => {
57
- renderMenuItem({gap: 3, space: 1})
58
- const propsList = mockedFlex.mock.calls.map(([props]) => props)
59
- expect(propsList).toContainEqual(expect.objectContaining({gap: 3}))
60
- expect(propsList).not.toContainEqual(expect.objectContaining({gap: 1}))
61
- })
62
- })