@sanity/ui 2.10.0-corel.0 → 3.0.0-static.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (322) hide show
  1. package/bin/ui.js +6 -0
  2. package/dist/_chunks-cjs/buildCommand.js +2836 -0
  3. package/dist/_chunks-cjs/buildCommand.js.map +1 -0
  4. package/dist/_chunks-cjs/getTheme_v2.js +1 -27
  5. package/dist/_chunks-cjs/getTheme_v2.js.map +1 -1
  6. package/dist/_chunks-es/getTheme_v2.mjs +1 -27
  7. package/dist/_chunks-es/getTheme_v2.mjs.map +1 -1
  8. package/dist/_legacy/getTheme_v2.esm.js +1 -27
  9. package/dist/_legacy/getTheme_v2.esm.js.map +1 -1
  10. package/dist/cli.d.ts +1 -0
  11. package/dist/cli.js +23 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/css.d.mts +943 -0
  14. package/dist/css.d.ts +943 -0
  15. package/dist/css.esm.js +3135 -0
  16. package/dist/css.esm.js.map +1 -0
  17. package/dist/css.js +3135 -0
  18. package/dist/css.js.map +1 -0
  19. package/dist/css.mjs +3135 -0
  20. package/dist/css.mjs.map +1 -0
  21. package/dist/index.d.mts +175 -164
  22. package/dist/index.d.ts +175 -164
  23. package/dist/index.esm.js +864 -1955
  24. package/dist/index.esm.js.map +1 -1
  25. package/dist/index.js +870 -1962
  26. package/dist/index.js.map +1 -1
  27. package/dist/index.mjs +864 -1955
  28. package/dist/index.mjs.map +1 -1
  29. package/dist/sanity-theme.css +25 -0
  30. package/dist/system.css +2953 -0
  31. package/dist/theme.d.mts +84 -22
  32. package/dist/theme.d.ts +84 -22
  33. package/dist/theme.esm.js +232 -283
  34. package/dist/theme.esm.js.map +1 -1
  35. package/dist/theme.js +232 -283
  36. package/dist/theme.js.map +1 -1
  37. package/dist/theme.mjs +232 -283
  38. package/dist/theme.mjs.map +1 -1
  39. package/exports/css.ts +1 -0
  40. package/package.json +25 -4
  41. package/src/core/__workshop__/constants.ts +15 -15
  42. package/src/core/__workshop__/fontsPlugin.tsx +1 -1
  43. package/src/core/components/autocomplete/autocomplete.styles.tsx +1 -1
  44. package/src/core/components/autocomplete/autocomplete.tsx +12 -4
  45. package/src/core/components/breadcrumbs/__workshop__/example.tsx +1 -3
  46. package/src/core/components/breadcrumbs/__workshop__/index.ts +0 -5
  47. package/src/core/components/breadcrumbs/breadcrumbs.styles.ts +14 -2
  48. package/src/core/components/breadcrumbs/breadcrumbs.tsx +14 -9
  49. package/src/core/components/dialog/__workshop__/panes.tsx +1 -1
  50. package/src/core/components/dialog/dialog.tsx +77 -92
  51. package/src/core/components/hotkeys/hotkeys.tsx +18 -29
  52. package/src/core/components/menu/menu.tsx +8 -5
  53. package/src/core/components/menu/menuDivider.ts +2 -1
  54. package/src/core/components/menu/menuGroup.tsx +16 -8
  55. package/src/core/components/menu/menuItem.tsx +23 -14
  56. package/src/core/components/skeleton/skeleton.tsx +1 -1
  57. package/src/core/components/skeleton/styles.ts +1 -1
  58. package/src/core/components/skeleton/textSkeleton.tsx +1 -1
  59. package/src/core/components/tab/tab.tsx +6 -7
  60. package/src/core/components/tab/tabList.tsx +3 -2
  61. package/src/core/components/toast/styles.ts +1 -1
  62. package/src/core/components/toast/toast.tsx +6 -4
  63. package/src/core/components/toast/toastProvider.tsx +31 -22
  64. package/src/core/components/tree/style.ts +1 -1
  65. package/src/core/components/tree/tree.tsx +8 -2
  66. package/src/core/components/tree/treeGroup.tsx +1 -1
  67. package/src/core/components/tree/treeItem.tsx +38 -25
  68. package/src/core/components/tree/types.ts +5 -1
  69. package/src/core/lib/styled/elements.ts +135 -0
  70. package/src/core/lib/styled/index.ts +2 -0
  71. package/src/core/lib/styled/members.ts +15 -0
  72. package/src/core/lib/styled/styled.ts +79 -0
  73. package/src/core/primitives/_selectable/selectable.tsx +27 -14
  74. package/src/core/primitives/avatar/avatar.tsx +52 -32
  75. package/src/core/primitives/avatar/avatarCounter.tsx +1 -1
  76. package/src/core/primitives/avatar/avatarStack.tsx +1 -1
  77. package/src/core/primitives/badge/__workshop__/tones.tsx +9 -16
  78. package/src/core/primitives/badge/badge.tsx +18 -20
  79. package/src/core/primitives/box/box.tsx +62 -74
  80. package/src/core/primitives/button/__workshop__/props.tsx +3 -1
  81. package/src/core/primitives/button/__workshop__/sanityUploadButton.tsx +1 -1
  82. package/src/core/primitives/button/__workshop__/styled1.tsx +1 -1
  83. package/src/core/primitives/button/__workshop__/styled2.tsx +1 -1
  84. package/src/core/primitives/button/button.tsx +38 -45
  85. package/src/core/primitives/button/styles.ts +2 -2
  86. package/src/core/primitives/card/RootCardContext.ts +3 -0
  87. package/src/core/primitives/card/__workshop__/selected.tsx +1 -1
  88. package/src/core/primitives/card/__workshop__/styled.tsx +1 -1
  89. package/src/core/primitives/card/card.tsx +44 -46
  90. package/src/core/primitives/card/styles.ts +1 -1
  91. package/src/core/primitives/checkbox/checkbox.tsx +6 -8
  92. package/src/core/primitives/code/code.tsx +23 -12
  93. package/src/core/primitives/code/styles.ts +1 -1
  94. package/src/core/primitives/container/container.tsx +7 -15
  95. package/src/core/primitives/flex/__workshop__/example.tsx +1 -1
  96. package/src/core/primitives/flex/flex.tsx +6 -19
  97. package/src/core/primitives/grid/grid.tsx +2 -1
  98. package/src/core/primitives/heading/heading.tsx +32 -19
  99. package/src/core/primitives/heading/styles.ts +1 -1
  100. package/src/core/primitives/inline/inline.tsx +22 -13
  101. package/src/core/primitives/kbd/kbd.tsx +30 -37
  102. package/src/core/primitives/label/label.tsx +15 -4
  103. package/src/core/primitives/label/styles.ts +1 -1
  104. package/src/core/primitives/popover/__workshop__/RecursiveStory.tsx +0 -1
  105. package/src/core/primitives/popover/popover.tsx +21 -15
  106. package/src/core/primitives/popover/popoverCard.tsx +36 -38
  107. package/src/core/primitives/radio/radio.tsx +1 -1
  108. package/src/core/primitives/radio/styles.ts +1 -1
  109. package/src/core/primitives/select/select.tsx +1 -1
  110. package/src/core/primitives/select/styles.ts +1 -1
  111. package/src/core/primitives/spinner/spinner.tsx +6 -20
  112. package/src/core/primitives/stack/stack.tsx +12 -10
  113. package/src/core/primitives/switch/styles.ts +9 -9
  114. package/src/core/primitives/switch/switch.tsx +20 -21
  115. package/src/core/primitives/text/__workshop__/colored.tsx +1 -1
  116. package/src/core/primitives/text/styles.ts +1 -2
  117. package/src/core/primitives/text/text.tsx +17 -21
  118. package/src/core/primitives/textArea/textArea.tsx +1 -1
  119. package/src/core/primitives/textInput/__workshop__/plain.tsx +1 -1
  120. package/src/core/primitives/textInput/textInput.tsx +176 -123
  121. package/src/core/primitives/tooltip/tooltip.test.tsx +1 -0
  122. package/src/core/primitives/tooltip/tooltip.tsx +13 -13
  123. package/src/core/primitives/tooltip/tooltipCard.tsx +15 -14
  124. package/src/core/primitives/types.ts +35 -16
  125. package/src/core/styles/border/borderStyle.ts +6 -0
  126. package/src/core/styles/border/types.ts +1 -0
  127. package/src/core/styles/box/boxStyle.ts +6 -0
  128. package/src/core/styles/card/_cardColorStyle.ts +0 -8
  129. package/src/core/styles/flex/flexStyle.ts +0 -18
  130. package/src/core/styles/flex/types.ts +1 -3
  131. package/src/core/styles/grid/gridStyle.ts +0 -10
  132. package/src/core/styles/helpers.ts +9 -0
  133. package/src/core/styles/input/textInputStyle.ts +1 -1
  134. package/src/core/theme/__workshop__/build/Root.tsx +1 -1
  135. package/src/core/theme/themeProvider.tsx +1 -1
  136. package/src/core/theme/useTheme.ts +1 -1
  137. package/src/core/types/avatar.ts +6 -1
  138. package/src/core/types/button.ts +1 -0
  139. package/src/core/types/flex.ts +27 -26
  140. package/src/core/types/gridItem.ts +32 -24
  141. package/src/core/types/radius.ts +7 -4
  142. package/src/core/utils/arrow/arrow.tsx +1 -1
  143. package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +1 -1
  144. package/src/core/utils/layer/layer.tsx +28 -11
  145. package/src/core/utils/srOnly/srOnly.tsx +1 -1
  146. package/src/core/utils/virtualList/virtualList.tsx +1 -1
  147. package/src/css/_resp.ts +28 -0
  148. package/src/css/cli/buildCommand.ts +36 -0
  149. package/src/css/cli/index.ts +38 -0
  150. package/src/css/compile/comileRules.ts +59 -0
  151. package/src/css/compile/compileRule.ts +58 -0
  152. package/src/css/compile/compileSystem.ts +7 -0
  153. package/src/css/compile/compileTheme.ts +509 -0
  154. package/src/css/components/breadcrumbs/breadcrumbs.ts +5 -0
  155. package/src/css/components/breadcrumbs/index.ts +1 -0
  156. package/src/css/components/breadcrumbs/rules.ts +7 -0
  157. package/src/css/components/dialog/classes.ts +29 -0
  158. package/src/css/components/dialog/index.ts +1 -0
  159. package/src/css/components/dialog/rules.ts +75 -0
  160. package/src/css/components/tree/index.ts +1 -0
  161. package/src/css/components/tree/rules.ts +52 -0
  162. package/src/css/components/tree/tree.ts +5 -0
  163. package/src/css/composeClassNames.ts +3 -0
  164. package/src/css/index.ts +47 -0
  165. package/src/css/primitives/avatar/avatar.ts +32 -0
  166. package/src/css/primitives/avatar/index.ts +2 -0
  167. package/src/css/primitives/avatar/rules.ts +190 -0
  168. package/src/css/primitives/avatar/types.ts +9 -0
  169. package/src/css/primitives/badge/badge.ts +8 -0
  170. package/src/css/primitives/badge/index.ts +2 -0
  171. package/src/css/primitives/badge/rules.ts +25 -0
  172. package/src/css/primitives/badge/types.ts +8 -0
  173. package/src/css/primitives/box/box.ts +34 -0
  174. package/src/css/primitives/box/index.ts +2 -0
  175. package/src/css/primitives/box/rules.ts +25 -0
  176. package/src/css/primitives/box/types.ts +49 -0
  177. package/src/css/primitives/button/button.ts +26 -0
  178. package/src/css/primitives/button/index.ts +1 -0
  179. package/src/css/primitives/button/rules.ts +58 -0
  180. package/src/css/primitives/card/card.ts +21 -0
  181. package/src/css/primitives/card/index.ts +1 -0
  182. package/src/css/primitives/card/rules.ts +93 -0
  183. package/src/{core/primitives/checkbox/styles.ts → css/primitives/checkbox/__styles.ts} +3 -3
  184. package/src/css/primitives/checkbox/checkbox.ts +9 -0
  185. package/src/css/primitives/checkbox/index.ts +1 -0
  186. package/src/css/primitives/checkbox/rules.ts +136 -0
  187. package/src/css/primitives/code/code.ts +9 -0
  188. package/src/css/primitives/code/index.ts +2 -0
  189. package/src/css/primitives/code/rules.ts +71 -0
  190. package/src/css/primitives/code/types.ts +10 -0
  191. package/src/css/primitives/container/container.ts +7 -0
  192. package/src/css/primitives/container/index.ts +2 -0
  193. package/src/css/primitives/container/rules.ts +8 -0
  194. package/src/css/primitives/container/types.ts +6 -0
  195. package/src/css/primitives/heading/heading.ts +16 -0
  196. package/src/css/primitives/heading/index.ts +2 -0
  197. package/src/css/primitives/heading/rules.ts +84 -0
  198. package/src/css/primitives/heading/types.ts +12 -0
  199. package/src/css/primitives/kbd/index.ts +2 -0
  200. package/src/css/primitives/kbd/kbd.ts +7 -0
  201. package/src/css/primitives/kbd/rules.ts +20 -0
  202. package/src/css/primitives/kbd/types.ts +5 -0
  203. package/src/css/primitives/label/index.ts +2 -0
  204. package/src/css/primitives/label/label.ts +16 -0
  205. package/src/css/primitives/label/rules.ts +85 -0
  206. package/src/css/primitives/label/types.ts +12 -0
  207. package/src/css/primitives/popover/index.ts +1 -0
  208. package/src/css/primitives/popover/popover.ts +5 -0
  209. package/src/css/primitives/popover/rules.ts +5 -0
  210. package/src/css/primitives/radio/index.ts +1 -0
  211. package/src/css/primitives/radio/radio.ts +5 -0
  212. package/src/css/primitives/radio/rules.ts +5 -0
  213. package/src/css/primitives/select/index.ts +1 -0
  214. package/src/css/primitives/select/rules.ts +5 -0
  215. package/src/css/primitives/select/select.ts +5 -0
  216. package/src/{core/primitives/_selectable/style.ts → css/primitives/selectable/__style.ts} +5 -4
  217. package/src/css/primitives/selectable/index.ts +2 -0
  218. package/src/css/primitives/selectable/rules.ts +27 -0
  219. package/src/css/primitives/selectable/selectable.ts +9 -0
  220. package/src/css/primitives/selectable/types.ts +6 -0
  221. package/src/css/primitives/spinner/index.ts +1 -0
  222. package/src/css/primitives/spinner/rules.ts +22 -0
  223. package/src/css/primitives/spinner/spinner.ts +5 -0
  224. package/src/css/primitives/switch/index.ts +1 -0
  225. package/src/css/primitives/switch/rules.ts +132 -0
  226. package/src/css/primitives/switch/switch.ts +5 -0
  227. package/src/css/primitives/text/index.ts +2 -0
  228. package/src/css/primitives/text/rules.ts +75 -0
  229. package/src/css/primitives/text/text.ts +16 -0
  230. package/src/css/primitives/text/types.ts +11 -0
  231. package/src/css/primitives/textArea/index.ts +1 -0
  232. package/src/css/primitives/textArea/rules.ts +5 -0
  233. package/src/css/primitives/textArea/textArea.ts +5 -0
  234. package/src/css/primitives/textInput/index.ts +1 -0
  235. package/src/css/primitives/textInput/rules.ts +226 -0
  236. package/src/css/primitives/textInput/textInput.ts +7 -0
  237. package/src/css/primitives/token/rules.ts +45 -0
  238. package/src/css/primitives/tooltip/index.ts +1 -0
  239. package/src/css/primitives/tooltip/rules.ts +17 -0
  240. package/src/css/primitives/tooltip/tooltip.ts +9 -0
  241. package/src/css/responsiveRules.ts +25 -0
  242. package/src/css/rules.ts +121 -0
  243. package/src/css/styles/border/border.ts +22 -0
  244. package/src/css/styles/border/index.ts +2 -0
  245. package/src/css/styles/border/rules.ts +24 -0
  246. package/src/css/styles/border/types.ts +10 -0
  247. package/src/css/styles/display/rules.ts +62 -0
  248. package/src/css/styles/flex/flex.ts +20 -0
  249. package/src/css/styles/flex/index.ts +2 -0
  250. package/src/css/styles/flex/rules.ts +28 -0
  251. package/src/css/styles/flex/types.ts +35 -0
  252. package/src/css/styles/flexItem/flexItem.ts +8 -0
  253. package/src/css/styles/flexItem/index.ts +2 -0
  254. package/src/css/styles/flexItem/rules.ts +11 -0
  255. package/src/css/styles/flexItem/types.ts +11 -0
  256. package/src/css/styles/font/font.ts +12 -0
  257. package/src/css/styles/font/index.ts +2 -0
  258. package/src/css/styles/font/rules.ts +125 -0
  259. package/src/css/styles/font/types.ts +6 -0
  260. package/src/css/styles/gap/gap.ts +8 -0
  261. package/src/css/styles/gap/index.ts +2 -0
  262. package/src/css/styles/gap/rules.ts +33 -0
  263. package/src/css/styles/gap/types.ts +9 -0
  264. package/src/css/styles/grid/rules.ts +35 -0
  265. package/src/css/styles/gridItem/gridItem.ts +15 -0
  266. package/src/css/styles/gridItem/index.ts +2 -0
  267. package/src/css/styles/gridItem/rules.ts +96 -0
  268. package/src/css/styles/gridItem/types.ts +41 -0
  269. package/src/css/styles/height/rules.ts +7 -0
  270. package/src/css/styles/margin/index.ts +2 -0
  271. package/src/css/styles/margin/margin.ts +15 -0
  272. package/src/css/styles/margin/rules.ts +59 -0
  273. package/src/css/styles/margin/types.ts +11 -0
  274. package/src/css/styles/maxWidth/index.ts +2 -0
  275. package/src/css/styles/maxWidth/maxWidth.ts +6 -0
  276. package/src/css/styles/maxWidth/rules.ts +36 -0
  277. package/src/css/styles/maxWidth/types.ts +6 -0
  278. package/src/css/styles/overflow/rules.ts +9 -0
  279. package/src/css/styles/padding/index.ts +2 -0
  280. package/src/css/styles/padding/padding.ts +15 -0
  281. package/src/css/styles/padding/rules.ts +59 -0
  282. package/src/css/styles/padding/types.ts +12 -0
  283. package/src/css/styles/pointerEvents/index.ts +2 -0
  284. package/src/css/styles/pointerEvents/pointerEvents.ts +6 -0
  285. package/src/css/styles/pointerEvents/rules.ts +11 -0
  286. package/src/css/styles/pointerEvents/types.ts +7 -0
  287. package/src/css/styles/position/index.ts +2 -0
  288. package/src/css/styles/position/position.ts +7 -0
  289. package/src/css/styles/position/rules.ts +31 -0
  290. package/src/css/styles/position/types.ts +13 -0
  291. package/src/css/styles/radius/index.ts +2 -0
  292. package/src/css/styles/radius/radius.ts +8 -0
  293. package/src/css/styles/radius/rules.ts +13 -0
  294. package/src/css/styles/radius/types.ts +7 -0
  295. package/src/css/styles/shadow/rules.ts +53 -0
  296. package/src/css/styles/width/index.ts +2 -0
  297. package/src/css/styles/width/rules.ts +7 -0
  298. package/src/css/styles/width/types.ts +8 -0
  299. package/src/css/styles/width/width.ts +6 -0
  300. package/src/css/types.ts +591 -0
  301. package/src/css/varNames.ts +381 -0
  302. package/src/css/vars.ts +313 -0
  303. package/src/theme/build/_deprecated/color/factory.ts +1 -1
  304. package/src/theme/build/_deprecated/color/muted/createMuted.ts +2 -2
  305. package/src/theme/build/buildColorTheme.ts +39 -45
  306. package/src/theme/build/renderColorTheme.ts +65 -239
  307. package/src/theme/build/resolveColorTokens.ts +115 -51
  308. package/src/theme/config/tokens/color/types.ts +18 -4
  309. package/src/theme/defaults/colorTokens.ts +10 -17
  310. package/src/theme/defaults/config.ts +1 -1
  311. package/src/theme/getScopedTheme.ts +2 -9
  312. package/src/theme/system/_constants.ts +25 -0
  313. package/src/theme/system/_types.ts +41 -0
  314. package/src/theme/system/color/_constants.ts +0 -8
  315. package/src/theme/system/color/badge.ts +7 -3
  316. package/src/theme/system/index.ts +2 -0
  317. package/src/theme/system/v0/color/_system.ts +4 -8
  318. package/src/theme/system/v0/color/color.ts +2 -3
  319. package/src/theme/versioning/themeColor_v0_v2.ts +0 -26
  320. package/src/theme/versioning/v0_v2.ts +0 -4
  321. package/src/core/components/breadcrumbs/__workshop__/buttons.tsx +0 -58
  322. package/src/core/components/dialog/styles.ts +0 -76
@@ -1,18 +1,13 @@
1
- import {forwardRef} from 'react'
2
- import {styled} from 'styled-components'
3
- import {useArrayProp} from '../../hooks'
4
- import {responsiveRadiusStyle, ResponsiveRadiusStyleProps} from '../../styles/internal'
1
+ import {badge, composeClassNames, RadiusStyleProps} from '@sanity/ui/css'
2
+ import {ForwardedRef, forwardRef} from 'react'
5
3
  import {BadgeMode, BadgeTone} from '../../types'
6
4
  import {Box, BoxProps} from '../box'
7
5
  import {Text} from '../text'
8
- import {ResponsiveRadiusProps} from '../types'
9
- import {badgeStyle} from './styles'
10
- import {BadgeStyleProps} from './types'
11
6
 
12
7
  /**
13
8
  * @public
14
9
  */
15
- export interface BadgeProps extends BoxProps, ResponsiveRadiusProps {
10
+ export interface BadgeProps extends BoxProps, RadiusStyleProps {
16
11
  as?: React.ElementType | keyof JSX.IntrinsicElements
17
12
  fontSize?: number | number[]
18
13
  /** @deprecated No longer used. */
@@ -20,11 +15,6 @@ export interface BadgeProps extends BoxProps, ResponsiveRadiusProps {
20
15
  tone?: BadgeTone
21
16
  }
22
17
 
23
- const Root = styled(Box)<BadgeStyleProps & ResponsiveRadiusStyleProps>(
24
- responsiveRadiusStyle,
25
- badgeStyle,
26
- )
27
-
28
18
  /**
29
19
  * Badges are used to tag resources.
30
20
  *
@@ -32,30 +22,38 @@ const Root = styled(Box)<BadgeStyleProps & ResponsiveRadiusStyleProps>(
32
22
  */
33
23
  export const Badge = forwardRef(function Badge(
34
24
  props: BadgeProps & React.HTMLProps<HTMLDivElement>,
35
- ref,
25
+ ref: ForwardedRef<HTMLDivElement>,
36
26
  ) {
37
27
  const {
38
28
  children,
29
+ className,
30
+ display = 'inline-block',
39
31
  fontSize = 1,
40
32
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
41
33
  mode: _deprecated_mode,
42
34
  padding = 1,
43
- radius = 'full',
35
+ radius = 2,
44
36
  tone = 'default',
45
37
  ...restProps
46
38
  } = props
47
39
 
48
40
  return (
49
- <Root
41
+ <Box
50
42
  data-ui="Badge"
51
43
  {...restProps}
52
- $tone={tone}
53
- $radius={useArrayProp(radius)}
54
- padding={useArrayProp(padding)}
44
+ className={composeClassNames(
45
+ className,
46
+ badge({
47
+ radius,
48
+ tone,
49
+ }),
50
+ )}
51
+ display={display}
52
+ padding={padding}
55
53
  ref={ref}
56
54
  >
57
55
  <Text size={fontSize}>{children}</Text>
58
- </Root>
56
+ </Box>
59
57
  )
60
58
  })
61
59
  Badge.displayName = 'ForwardRef(Badge)'
@@ -1,55 +1,15 @@
1
+ import {box, BoxStyleProps, composeClassNames, PositionStyleProps} from '@sanity/ui/css'
2
+ import {GapStyleProps} from '@sanity/ui/css'
1
3
  import {forwardRef} from 'react'
2
- import {styled} from 'styled-components'
3
- import {useArrayProp} from '../../hooks'
4
- import {
5
- boxStyle,
6
- flexItemStyle,
7
- FlexItemStyleProps,
8
- responsiveBoxStyle,
9
- ResponsiveBoxStyleProps,
10
- responsiveGridItemStyle,
11
- ResponsiveGridItemStyleProps,
12
- responsivePaddingStyle,
13
- ResponsivePaddingStyleProps,
14
- responsiveMarginStyle,
15
- ResponsiveMarginStyleProps,
16
- } from '../../styles/internal'
17
- import {
18
- ResponsiveBoxProps,
19
- ResponsiveFlexItemProps,
20
- ResponsiveGridItemProps,
21
- ResponsiveMarginProps,
22
- ResponsivePaddingProps,
23
- } from '../types'
24
4
 
25
5
  /**
26
6
  * @public
27
7
  */
28
- export interface BoxProps
29
- extends ResponsiveFlexItemProps,
30
- ResponsiveBoxProps,
31
- ResponsiveGridItemProps,
32
- ResponsiveMarginProps,
33
- ResponsivePaddingProps {
8
+ export interface BoxProps extends BoxStyleProps, GapStyleProps, PositionStyleProps {
34
9
  as?: React.ElementType | keyof JSX.IntrinsicElements
35
10
  forwardedAs?: React.ElementType | keyof JSX.IntrinsicElements
36
11
  }
37
12
 
38
- const Root = styled.div<
39
- FlexItemStyleProps &
40
- ResponsiveBoxStyleProps &
41
- ResponsiveGridItemStyleProps &
42
- ResponsiveMarginStyleProps &
43
- ResponsivePaddingStyleProps
44
- >(
45
- boxStyle,
46
- flexItemStyle,
47
- responsiveBoxStyle,
48
- responsiveGridItemStyle,
49
- responsiveMarginStyle,
50
- responsivePaddingStyle,
51
- )
52
-
53
13
  /**
54
14
  * The `Box` component is a basic layout wrapper component which provides utility properties
55
15
  * for flex, margins and padding.
@@ -57,17 +17,25 @@ const Root = styled.div<
57
17
  * @public
58
18
  */
59
19
  export const Box = forwardRef(function Box(
60
- props: BoxProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height'>,
20
+ props: BoxProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'wrap' | 'width'>,
61
21
  ref: React.ForwardedRef<HTMLDivElement>,
62
22
  ) {
63
23
  const {
64
- as: asProp = 'div',
24
+ align,
25
+ as: As = 'div',
26
+ className,
65
27
  column,
66
28
  columnStart,
67
29
  columnEnd,
30
+ direction,
68
31
  display = 'block',
69
32
  flex,
33
+ gap,
34
+ gapX,
35
+ gapY,
70
36
  height,
37
+ inset,
38
+ justify,
71
39
  margin = 0,
72
40
  marginX,
73
41
  marginY,
@@ -83,48 +51,68 @@ export const Box = forwardRef(function Box(
83
51
  paddingRight,
84
52
  paddingBottom,
85
53
  paddingLeft,
54
+ pointerEvents,
55
+ position,
86
56
  row,
87
57
  rowStart,
88
58
  rowEnd,
89
59
  sizing,
60
+ width,
61
+ wrap,
90
62
  ...restProps
91
63
  } = props
92
64
 
93
65
  return (
94
- <Root
95
- data-as={typeof asProp === 'string' ? asProp : undefined}
66
+ <As
67
+ data-as={typeof As === 'string' ? As : undefined}
96
68
  data-ui="Box"
97
69
  {...restProps}
98
- $column={useArrayProp(column)}
99
- $columnStart={useArrayProp(columnStart)}
100
- $columnEnd={useArrayProp(columnEnd)}
101
- $display={useArrayProp(display)}
102
- $flex={useArrayProp(flex)}
103
- $height={useArrayProp(height)}
104
- $margin={useArrayProp(margin)}
105
- $marginX={useArrayProp(marginX)}
106
- $marginY={useArrayProp(marginY)}
107
- $marginTop={useArrayProp(marginTop)}
108
- $marginRight={useArrayProp(marginRight)}
109
- $marginBottom={useArrayProp(marginBottom)}
110
- $marginLeft={useArrayProp(marginLeft)}
111
- $overflow={useArrayProp(overflow)}
112
- $padding={useArrayProp(padding)}
113
- $paddingX={useArrayProp(paddingX)}
114
- $paddingY={useArrayProp(paddingY)}
115
- $paddingTop={useArrayProp(paddingTop)}
116
- $paddingRight={useArrayProp(paddingRight)}
117
- $paddingBottom={useArrayProp(paddingBottom)}
118
- $paddingLeft={useArrayProp(paddingLeft)}
119
- $row={useArrayProp(row)}
120
- $rowStart={useArrayProp(rowStart)}
121
- $rowEnd={useArrayProp(rowEnd)}
122
- $sizing={useArrayProp(sizing)}
123
- as={asProp}
70
+ className={composeClassNames(
71
+ className,
72
+ box({
73
+ align,
74
+ column,
75
+ columnStart,
76
+ columnEnd,
77
+ direction,
78
+ display,
79
+ flex,
80
+ gap,
81
+ gapX,
82
+ gapY,
83
+ height,
84
+ inset,
85
+ justify,
86
+ overflow,
87
+ margin,
88
+ marginX,
89
+ marginY,
90
+ marginTop,
91
+ marginRight,
92
+ marginBottom,
93
+ marginLeft,
94
+ padding,
95
+ paddingX,
96
+ paddingY,
97
+ paddingTop,
98
+ paddingRight,
99
+ paddingBottom,
100
+ paddingLeft,
101
+ pointerEvents,
102
+ position,
103
+ row,
104
+ rowStart,
105
+ rowEnd,
106
+ sizing,
107
+ width,
108
+ wrap,
109
+ }),
110
+ )}
124
111
  ref={ref}
125
112
  >
126
113
  {props.children}
127
- </Root>
114
+ </As>
128
115
  )
129
116
  })
117
+
130
118
  Box.displayName = 'ForwardRef(Box)'
@@ -13,10 +13,11 @@ import {
13
13
 
14
14
  export default function ButtonStory() {
15
15
  const disabled = useBoolean('Disabled', false, 'Props')
16
- const fontSize = useSelect('Font size', WORKSHOP_TEXT_SIZE_OPTIONS, 1, 'Props')
16
+ const fontSize = useSelect('Font size', WORKSHOP_TEXT_SIZE_OPTIONS, 2, 'Props')
17
17
  const icon = useSelect('Icon', WORKSHOP_ICON_SYMBOL_OPTIONS, 'add-circle', 'Props')
18
18
  const iconRight = useSelect('Icon (right)', WORKSHOP_ICON_SYMBOL_OPTIONS, '', 'Props')
19
19
  const justify = useSelect('Justify', WORKSHOP_FLEX_JUSTIFY_OPTIONS, 'center', 'Props')
20
+ const loading = useBoolean('Loading', false, 'Props')
20
21
  const mode = useSelect('Mode', WORKSHOP_BUTTON_MODE_OPTIONS, 'default', 'Props')
21
22
  const paddingX = useSelect('Padding X', WORKSHOP_SPACE_OPTIONS, 3, 'Props')
22
23
  const paddingY = useSelect('Padding Y', WORKSHOP_SPACE_OPTIONS, 3, 'Props')
@@ -35,6 +36,7 @@ export default function ButtonStory() {
35
36
  icon={icon && icons[icon]}
36
37
  iconRight={iconRight && icons[iconRight]}
37
38
  justify={justify}
39
+ loading={loading}
38
40
  mode={mode}
39
41
  onClick={useAction('onClick')}
40
42
  paddingX={paddingX}
@@ -1,6 +1,6 @@
1
1
  import {UploadIcon} from '@sanity/icons'
2
2
  import {Button, Flex} from '@sanity/ui'
3
- import {styled} from 'styled-components'
3
+ import {styled} from '../../../lib/styled'
4
4
 
5
5
  const SanityUploadButton = styled(Button).attrs({forwardedAs: 'label'})`
6
6
  & input {
@@ -1,5 +1,5 @@
1
1
  import {Button, Flex} from '@sanity/ui'
2
- import {styled} from 'styled-components'
2
+ import {styled} from '../../../lib/styled'
3
3
 
4
4
  const StyledButton1 = styled.a`
5
5
  &:hover {
@@ -1,5 +1,5 @@
1
1
  import {Button, Flex} from '@sanity/ui'
2
- import {styled} from 'styled-components'
2
+ import {styled} from '../../../lib/styled'
3
3
 
4
4
  const StyledButton2 = styled(Button)<{$color?: boolean}>`
5
5
  &:hover {
@@ -1,34 +1,34 @@
1
+ import {buttonLoadingBox, composeClassNames, ResponsiveProp} from '@sanity/ui/css'
2
+ import {button} from '@sanity/ui/css'
3
+ import {PaddingStyleProps, RadiusStyleProps} from '@sanity/ui/css'
4
+ import {Width} from '@sanity/ui/css'
5
+ import {FontTextSize, Space} from '@sanity/ui/theme'
1
6
  import {forwardRef, isValidElement, useMemo} from 'react'
2
7
  import {isValidElementType} from 'react-is'
3
- import {styled} from 'styled-components'
4
8
  import {useArrayProp} from '../../hooks'
5
- import {ThemeProps} from '../../styles'
6
- import {responsiveRadiusStyle, ResponsiveRadiusStyleProps} from '../../styles/internal'
7
9
  import {useTheme_v2} from '../../theme'
8
- import {ButtonMode, ButtonTextAlign, ButtonTone, ButtonWidth, FlexJustify} from '../../types'
10
+ import {ButtonMode, ButtonTextAlign, ButtonTone, FlexJustify} from '../../types'
9
11
  import {Box} from '../box'
10
12
  import {Flex} from '../flex'
11
13
  import {Spinner} from '../spinner'
12
14
  import {Text, TextProps} from '../text'
13
- import {ResponsivePaddingProps, ResponsiveRadiusProps} from '../types'
14
- import {buttonBaseStyles, buttonColorStyles} from './styles'
15
15
 
16
16
  /**
17
17
  * @public
18
18
  */
19
- export interface ButtonProps extends ResponsivePaddingProps, ResponsiveRadiusProps {
19
+ export interface ButtonProps extends PaddingStyleProps, RadiusStyleProps {
20
20
  as?: React.ElementType | keyof JSX.IntrinsicElements
21
- fontSize?: number | number[]
21
+ fontSize?: ResponsiveProp<FontTextSize>
22
22
  mode?: ButtonMode
23
23
  icon?: React.ElementType | React.ReactNode
24
24
  iconRight?: React.ElementType | React.ReactNode
25
- justify?: FlexJustify | FlexJustify[]
25
+ justify?: ResponsiveProp<FlexJustify>
26
26
  /**
27
27
  * @beta Do not use in production, as this might change.
28
28
  */
29
29
  loading?: boolean
30
30
  selected?: boolean
31
- space?: number | number[]
31
+ space?: ResponsiveProp<Space>
32
32
  textAlign?: ButtonTextAlign
33
33
  muted?: boolean
34
34
  text?: React.ReactNode
@@ -36,38 +36,21 @@ export interface ButtonProps extends ResponsivePaddingProps, ResponsiveRadiusPro
36
36
  textWeight?: TextProps['weight']
37
37
  tone?: ButtonTone
38
38
  type?: 'button' | 'reset' | 'submit'
39
- width?: ButtonWidth
39
+ // width?: ButtonWidth
40
+ width?: ResponsiveProp<Width>
40
41
  }
41
42
 
42
- const Root = styled.button<
43
- {$mode: ButtonMode; $tone: ButtonTone; $width?: ButtonWidth} & ResponsiveRadiusStyleProps &
44
- ThemeProps
45
- >(responsiveRadiusStyle, buttonBaseStyles, buttonColorStyles)
46
-
47
- const LoadingBox = styled.div`
48
- position: absolute;
49
- top: 0;
50
- left: 0;
51
- right: 0;
52
- bottom: 0;
53
- display: flex;
54
- align-items: center;
55
- justify-content: center;
56
- background-color: var(--card-bg-color);
57
- border-radius: inherit;
58
- z-index: 1;
59
- box-shadow: inherit;
60
- `
61
-
62
43
  /**
63
44
  * @public
64
45
  */
65
46
  export const Button = forwardRef(function Button(
66
- props: ButtonProps & Omit<React.HTMLProps<HTMLButtonElement>, 'as' | 'width'>,
47
+ props: ButtonProps & Omit<React.HTMLProps<HTMLButtonElement>, 'as' | 'width' | 'height' | 'wrap'>,
67
48
  ref: React.ForwardedRef<HTMLButtonElement>,
68
49
  ) {
69
50
  const {
51
+ as: As = 'button',
70
52
  children,
53
+ className,
71
54
  disabled,
72
55
  fontSize = 1,
73
56
  icon: IconComponent,
@@ -95,7 +78,7 @@ export const Button = forwardRef(function Button(
95
78
  width,
96
79
  ...restProps
97
80
  } = props
98
- const {button} = useTheme_v2()
81
+ const {button: buttonTheme} = useTheme_v2()
99
82
 
100
83
  const justify = useArrayProp(justifyProp)
101
84
  const padding = useArrayProp(paddingProp)
@@ -105,7 +88,7 @@ export const Button = forwardRef(function Button(
105
88
  const paddingBottom = useArrayProp(paddingBottomProp)
106
89
  const paddingLeft = useArrayProp(paddingLeftProp)
107
90
  const paddingRight = useArrayProp(paddingRightProp)
108
- const radius = useArrayProp(radiusProp)
91
+ // const radius = useArrayProp(radiusProp)
109
92
  const space = useArrayProp(spaceProp)
110
93
 
111
94
  const boxProps = useMemo(
@@ -123,23 +106,32 @@ export const Button = forwardRef(function Button(
123
106
  )
124
107
 
125
108
  return (
126
- <Root
109
+ <As
127
110
  data-ui="Button"
128
111
  {...restProps}
129
- $mode={mode}
130
- $radius={radius}
131
- $tone={tone}
112
+ // $mode={mode}
113
+ // $radius={radius}
114
+ // $tone={tone}
115
+ className={composeClassNames(
116
+ className,
117
+ button({
118
+ mode,
119
+ radius: radiusProp,
120
+ tone,
121
+ width,
122
+ }),
123
+ )}
132
124
  data-disabled={Boolean(loading || disabled)}
133
125
  data-selected={selected ? '' : undefined}
134
126
  disabled={Boolean(loading || disabled)}
135
127
  ref={ref}
136
128
  type={type}
137
- $width={width}
129
+ // $width={width}
138
130
  >
139
131
  {Boolean(loading) && (
140
- <LoadingBox>
141
- <Spinner />
142
- </LoadingBox>
132
+ <Box align="center" className={buttonLoadingBox()} display="flex" justify="center">
133
+ <Spinner size={fontSize} />
134
+ </Box>
143
135
  )}
144
136
 
145
137
  {(IconComponent || text || IconRightComponent) && (
@@ -153,14 +145,14 @@ export const Button = forwardRef(function Button(
153
145
  )}
154
146
 
155
147
  {text && (
156
- <Box as="span">
148
+ <Box>
157
149
  <Text
158
150
  as="span"
159
151
  muted={muted}
160
152
  align={textAlign}
161
153
  size={fontSize}
162
154
  textOverflow={textOverflow}
163
- weight={textWeight ?? button.textWeight}
155
+ weight={textWeight ?? buttonTheme.textWeight}
164
156
  >
165
157
  {text}
166
158
  </Text>
@@ -182,7 +174,8 @@ export const Button = forwardRef(function Button(
182
174
  {children}
183
175
  </Box>
184
176
  )}
185
- </Root>
177
+ </As>
186
178
  )
187
179
  })
180
+
188
181
  Button.displayName = 'ForwardRef(Button)'
@@ -1,5 +1,5 @@
1
1
  import {CSSObject, getTheme_v2} from '@sanity/ui/theme'
2
- import {css} from 'styled-components'
2
+ import {css} from '../../lib/styled'
3
3
  import {ThemeProps} from '../../styles'
4
4
  import {_cardColorStyle} from '../../styles/card'
5
5
  import {focusRingBorderStyle, focusRingStyle} from '../../styles/internal'
@@ -29,8 +29,8 @@ export function buttonBaseStyles(
29
29
  border: 0;
30
30
  box-sizing: border-box;
31
31
  padding: 0;
32
- overflow: hidden;
33
32
  margin: 0;
33
+ white-space: nowrap;
34
34
  text-align: left;
35
35
  position: relative;
36
36
  vertical-align: top;
@@ -0,0 +1,3 @@
1
+ import {createContext} from 'react'
2
+
3
+ export const RootCardContext = createContext<{renderedVars: boolean} | null>(null)
@@ -2,7 +2,7 @@ import {EditIcon, PublishIcon} from '@sanity/icons'
2
2
  import {Box, Card, Container, Flex, Inline, Stack, Text, ThemeProps, useRootTheme} from '@sanity/ui'
3
3
  import {ThemeColorStateToneKey, getTheme_v2} from '@sanity/ui/theme'
4
4
  import {useBoolean} from '@sanity/ui-workshop'
5
- import {styled, css} from 'styled-components'
5
+ import {styled, css} from '../../../lib/styled'
6
6
 
7
7
  const TextWithTone = styled(Text)<{$tone: ThemeColorStateToneKey}>((
8
8
  props: {
@@ -1,5 +1,5 @@
1
1
  import {Card, Flex, Text} from '@sanity/ui'
2
- import {styled} from 'styled-components'
2
+ import {styled} from '../../../lib/styled'
3
3
 
4
4
  const StyledCard = styled(Card).attrs({forwardedAs: 'ol'})``
5
5
 
@@ -1,31 +1,16 @@
1
+ import {card, CardStyleProps, composeClassNames} from '@sanity/ui/css'
1
2
  import {ThemeColorSchemeKey} from '@sanity/ui/theme'
2
- import {forwardRef} from 'react'
3
+ import {forwardRef, useContext} from 'react'
3
4
  import {isValidElementType} from 'react-is'
4
- import {styled} from 'styled-components'
5
- import {useArrayProp} from '../../hooks'
6
- import {
7
- responsiveBorderStyle,
8
- ResponsiveBorderStyleProps,
9
- responsiveRadiusStyle,
10
- ResponsiveRadiusStyleProps,
11
- responsiveShadowStyle,
12
- ResponsiveShadowStyleProps,
13
- } from '../../styles/internal'
14
5
  import {ThemeColorProvider, useRootTheme} from '../../theme'
15
6
  import {CardTone} from '../../types'
16
7
  import {Box, BoxProps} from '../box'
17
- import {ResponsiveBorderProps, ResponsiveRadiusProps, ResponsiveShadowProps} from '../types'
18
- import {cardStyle} from './styles'
19
- import {CardStyleProps} from './types'
8
+ import {RootCardContext} from './RootCardContext'
20
9
 
21
10
  /**
22
11
  * @public
23
12
  */
24
- export interface CardProps
25
- extends BoxProps,
26
- ResponsiveBorderProps,
27
- ResponsiveRadiusProps,
28
- ResponsiveShadowProps {
13
+ export interface CardProps extends BoxProps, CardStyleProps {
29
14
  /**
30
15
  * Do not use in production.
31
16
  * @beta
@@ -42,13 +27,6 @@ export interface CardProps
42
27
  tone?: CardTone
43
28
  }
44
29
 
45
- const Root = styled(Box)<
46
- CardStyleProps &
47
- ResponsiveRadiusStyleProps &
48
- ResponsiveBorderStyleProps &
49
- ResponsiveShadowStyleProps
50
- >(responsiveBorderStyle, responsiveRadiusStyle, responsiveShadowStyle, cardStyle)
51
-
52
30
  /**
53
31
  * The `Card` component acts much like a `Box`, but with a background and foreground color.
54
32
  * Components within a `Card` inherit its colors.
@@ -56,60 +34,80 @@ const Root = styled(Box)<
56
34
  * @public
57
35
  */
58
36
  export const Card = forwardRef(function Card(
59
- props: CardProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height'>,
37
+ props: CardProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'width' | 'wrap'>,
60
38
  ref: React.ForwardedRef<HTMLDivElement>,
61
39
  ) {
62
40
  const {
63
- __unstable_checkered: checkered = false,
64
- __unstable_focusRing: focusRing = false,
41
+ // __unstable_checkered: checkered = false,
42
+ // __unstable_focusRing: focusRing = false,
65
43
  as: asProp,
66
44
  border,
67
45
  borderTop,
68
46
  borderRight,
69
47
  borderBottom,
70
48
  borderLeft,
71
- muted,
49
+ className,
50
+ // muted,
72
51
  pressed,
73
52
  radius = 0,
74
53
  scheme,
75
54
  selected,
76
55
  shadow,
56
+ style,
77
57
  tone: toneProp = 'default',
78
58
  ...restProps
79
59
  } = props
80
60
 
81
61
  const as = isValidElementType(asProp) ? asProp : 'div'
62
+ const rootCard = useContext(RootCardContext)
82
63
  const rootTheme = useRootTheme()
64
+
83
65
  const tone = toneProp === 'inherit' ? rootTheme.tone : toneProp
84
66
 
85
- // todo: Consider adding the wrapper approach for nested cards in which the tones are not changing, avoid unnecessary ThemeColorProvider
86
- return (
67
+ // todo: Consider adding the wrapper approach for nested cards in which the tones are not
68
+ // changing, avoid unnecessary ThemeColorProvider
69
+ const node = (
87
70
  <ThemeColorProvider scheme={scheme} tone={tone}>
88
- <Root
71
+ <Box
89
72
  data-as={typeof as === 'string' ? as : undefined}
90
73
  data-scheme={rootTheme.scheme}
91
74
  data-ui="Card"
92
75
  data-tone={tone}
93
76
  {...restProps}
94
- $border={useArrayProp(border)}
95
- $borderTop={useArrayProp(borderTop)}
96
- $borderRight={useArrayProp(borderRight)}
97
- $borderBottom={useArrayProp(borderBottom)}
98
- $borderLeft={useArrayProp(borderLeft)}
99
- $checkered={checkered}
100
- $focusRing={focusRing}
101
- $muted={muted}
102
- $radius={useArrayProp(radius)}
103
- $shadow={useArrayProp(shadow)}
104
- $tone={tone}
105
- data-checkered={checkered ? '' : undefined}
77
+ as={as}
78
+ // $checkered={checkered}
79
+ // $focusRing={focusRing}
80
+ // $muted={muted}
81
+ className={composeClassNames(
82
+ className,
83
+ rootCard ? undefined : 'root',
84
+ card({
85
+ border,
86
+ borderTop,
87
+ borderRight,
88
+ borderBottom,
89
+ borderLeft,
90
+ radius,
91
+ shadow,
92
+ }),
93
+ )}
94
+ // data-checkered={checkered ? '' : undefined}
106
95
  data-pressed={pressed ? '' : undefined}
96
+ data-test={rootCard ? undefined : ''}
107
97
  data-selected={selected ? '' : undefined}
108
- forwardedAs={as}
98
+ // forwardedAs={as}
109
99
  ref={ref}
110
100
  selected={selected}
101
+ style={style}
111
102
  />
112
103
  </ThemeColorProvider>
113
104
  )
105
+
106
+ if (!rootCard) {
107
+ return <RootCardContext.Provider value={{renderedVars: true}}>{node}</RootCardContext.Provider>
108
+ }
109
+
110
+ return node
114
111
  })
112
+
115
113
  Card.displayName = 'ForwardRef(Card)'
@@ -1,5 +1,5 @@
1
1
  import {getTheme_v2} from '@sanity/ui/theme'
2
- import {css} from 'styled-components'
2
+ import {css} from '../../lib/styled'
3
3
  import {ThemeProps} from '../../styles'
4
4
  import {_cardColorStyle} from '../../styles/card'
5
5
  import {focusRingStyle} from '../../styles/focusRing'