@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,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
- })