@sanity/ui 3.0.0-static.10 → 3.0.0-static.12

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 (275) hide show
  1. package/dist/_chunks-cjs/_visual-editing.js +1300 -1269
  2. package/dist/_chunks-cjs/_visual-editing.js.map +1 -1
  3. package/dist/_chunks-cjs/buildCommand.js +28 -10
  4. package/dist/_chunks-cjs/buildCommand.js.map +1 -1
  5. package/dist/_chunks-es/_visual-editing.mjs +1298 -1263
  6. package/dist/_chunks-es/_visual-editing.mjs.map +1 -1
  7. package/dist/_visual-editing.d.mts +516 -360
  8. package/dist/_visual-editing.d.ts +516 -360
  9. package/dist/cli.js +1 -1
  10. package/dist/css.d.mts +258 -75
  11. package/dist/css.d.ts +258 -75
  12. package/dist/css.js +746 -752
  13. package/dist/css.js.map +1 -1
  14. package/dist/css.mjs +748 -754
  15. package/dist/css.mjs.map +1 -1
  16. package/dist/index.d.mts +1342 -871
  17. package/dist/index.d.ts +1342 -871
  18. package/dist/index.js +433 -325
  19. package/dist/index.js.map +1 -1
  20. package/dist/index.mjs +429 -321
  21. package/dist/index.mjs.map +1 -1
  22. package/dist/sanity-palette.css +105 -1
  23. package/dist/sanity-palette.min.css +1 -0
  24. package/dist/sanity-theme.css +4571 -1
  25. package/dist/sanity-theme.min.css +1 -0
  26. package/dist/system.css +22053 -21710
  27. package/dist/system.min.css +1 -0
  28. package/dist/theme.d.mts +51 -106
  29. package/dist/theme.d.ts +51 -106
  30. package/dist/theme.js +19 -20
  31. package/dist/theme.js.map +1 -1
  32. package/dist/theme.mjs +19 -20
  33. package/dist/theme.mjs.map +1 -1
  34. package/package.json +10 -5
  35. package/src/cli/buildCommand.ts +46 -19
  36. package/src/css/_comp.ts +2 -2
  37. package/src/css/{compile/compileStyle.ts → _compileStyle.ts} +7 -7
  38. package/src/css/_resp.ts +0 -1
  39. package/src/css/{system.style.ts → _system.style.ts} +3 -2
  40. package/src/css/aspects/display/display.ts +1 -0
  41. package/src/css/aspects/display/types.ts +2 -3
  42. package/src/css/aspects/flex/types.ts +4 -12
  43. package/src/css/aspects/flexItem/types.ts +1 -3
  44. package/src/css/aspects/font/font.style.ts +7 -66
  45. package/src/css/aspects/font/types.ts +1 -3
  46. package/src/css/aspects/grid/grid.ts +1 -0
  47. package/src/css/aspects/grid/types.ts +5 -9
  48. package/src/css/aspects/gridItem/gridItem.ts +1 -1
  49. package/src/css/aspects/gridItem/types.ts +7 -18
  50. package/src/css/aspects/height/height.ts +3 -4
  51. package/src/css/aspects/inset/inset.ts +1 -0
  52. package/src/css/aspects/margin/margin.ts +1 -0
  53. package/src/css/aspects/margin/types.ts +1 -0
  54. package/src/css/aspects/maxWidth/maxWidth.ts +1 -0
  55. package/src/css/aspects/maxWidth/types.ts +1 -0
  56. package/src/css/aspects/minWidth/minWidth.ts +1 -0
  57. package/src/css/aspects/minWidth/types.ts +2 -0
  58. package/src/css/aspects/overflow/overflow.ts +1 -0
  59. package/src/css/aspects/padding/padding.ts +1 -0
  60. package/src/css/aspects/pointerEvents/pointerEvents.ts +1 -0
  61. package/src/css/aspects/position/position.ts +1 -0
  62. package/src/css/aspects/shadow/shadow.style.ts +16 -41
  63. package/src/css/aspects/shadow/shadow.ts +1 -0
  64. package/src/css/aspects/textOverflow/textOverflow.ts +1 -0
  65. package/src/css/aspects/textOverflow/types.ts +1 -0
  66. package/src/css/aspects/width/types.ts +2 -0
  67. package/src/css/aspects/width/width.ts +1 -0
  68. package/src/css/compilePalette.ts +32 -0
  69. package/src/css/compileSystem.ts +7 -0
  70. package/src/css/{compile/compileTheme.ts → compileTheme.ts} +1 -0
  71. package/src/css/compileTheme_v3.ts +434 -0
  72. package/src/css/components/breadcrumbs/breadcrumbs.ts +1 -0
  73. package/src/css/components/dialog/dialog.ts +7 -0
  74. package/src/css/components/menu/menu.ts +2 -0
  75. package/src/css/components/skeleton/skeleton.style.ts +8 -4
  76. package/src/css/components/skeleton/skeleton.ts +4 -0
  77. package/src/css/components/skeleton/types.ts +4 -0
  78. package/src/css/components/toast/toast.ts +5 -0
  79. package/src/css/components/tree/tree.ts +1 -0
  80. package/src/css/composeClassNames.ts +4 -2
  81. package/src/css/constants.ts +11 -0
  82. package/src/css/index.ts +4 -3
  83. package/src/css/primitives/_arrow/_arrow.style.ts +6 -8
  84. package/src/css/primitives/_arrow/_arrow.ts +7 -0
  85. package/src/css/primitives/_input/input.ts +2 -0
  86. package/src/css/primitives/_selectable/_selectable.style.ts +24 -25
  87. package/src/css/primitives/_selectable/selectable.ts +1 -2
  88. package/src/css/primitives/avatar/avatar.style.ts +5 -8
  89. package/src/css/primitives/avatar/avatar.ts +6 -0
  90. package/src/css/primitives/avatar/types.ts +1 -0
  91. package/src/css/primitives/box/types.ts +1 -3
  92. package/src/css/primitives/button/button.style.ts +48 -15
  93. package/src/css/primitives/button/button.ts +4 -21
  94. package/src/css/primitives/button/index.ts +1 -0
  95. package/src/css/primitives/button/types.ts +18 -0
  96. package/src/css/primitives/card/card.style.ts +4 -7
  97. package/src/css/primitives/card/card.ts +2 -2
  98. package/src/css/primitives/card/types.ts +2 -2
  99. package/src/css/primitives/checkbox/checkbox.ts +2 -0
  100. package/src/css/primitives/container/container.ts +1 -0
  101. package/src/css/primitives/container/types.ts +1 -0
  102. package/src/css/primitives/kbd/kbd.ts +1 -0
  103. package/src/css/primitives/label/types.ts +7 -2
  104. package/src/css/primitives/popover/popover.ts +2 -0
  105. package/src/css/primitives/radio/radio.ts +1 -0
  106. package/src/css/primitives/select/select.ts +2 -0
  107. package/src/css/primitives/spinner/spinner.ts +2 -0
  108. package/src/css/primitives/switch/switch.ts +5 -0
  109. package/src/css/primitives/text/types.ts +4 -0
  110. package/src/css/primitives/textArea/textArea.ts +1 -0
  111. package/src/css/primitives/textInput/textInput.ts +1 -0
  112. package/src/css/primitives/token/token.style.ts +37 -36
  113. package/src/css/primitives/tooltip/tooltip.ts +2 -0
  114. package/src/css/responsiveRules.ts +12 -19
  115. package/src/css/scopeClassName.ts +1 -0
  116. package/src/css/types.ts +115 -15
  117. package/src/css/util.ts +5 -0
  118. package/src/css/utils/srOnly/srOnly.ts +1 -0
  119. package/src/css/varNames.ts +230 -143
  120. package/src/css/vars.ts +53 -22
  121. package/src/theme/palette/constants.ts +2 -0
  122. package/src/theme/palette/types.ts +3 -0
  123. package/src/theme/types.ts +2 -6
  124. package/src/theme/v0/focusRing.ts +1 -3
  125. package/src/theme/v0/font.ts +6 -18
  126. package/src/theme/v0/layer.ts +1 -3
  127. package/src/theme/v0/shadow.ts +2 -6
  128. package/src/theme/v2/avatar.ts +1 -3
  129. package/src/theme/v2/color/_system.ts +1 -3
  130. package/src/theme/v2/color/avatar.ts +2 -6
  131. package/src/theme/v2/color/badge.ts +2 -6
  132. package/src/theme/v2/color/button.ts +3 -9
  133. package/src/theme/v2/color/color.ts +3 -9
  134. package/src/theme/v2/color/input.ts +3 -9
  135. package/src/theme/v2/color/kbd.ts +1 -3
  136. package/src/theme/v2/color/selectable.ts +2 -6
  137. package/src/theme/v2/color/state.ts +1 -3
  138. package/src/theme/v2/color/syntax.ts +1 -3
  139. package/src/theme/v2/input.ts +1 -3
  140. package/src/theme/v2/theme.ts +2 -6
  141. package/src/theme/v3/buildTheme_v3.ts +2 -1
  142. package/src/theme/v3/color/color.ts +6 -4
  143. package/src/theme/v3/color/renderColor.ts +4 -1
  144. package/src/theme/v3/{defaults.ts → defaultTokens.ts} +2 -2
  145. package/src/theme/v3/index.ts +1 -1
  146. package/src/theme/v3/resolveTokens.ts +18 -18
  147. package/src/ui/RootClassNames.tsx +44 -0
  148. package/src/ui/StyleTags.tsx +3 -1
  149. package/src/ui/_compat/helpers.ts +72 -0
  150. package/src/ui/_compat/index.ts +2 -6
  151. package/src/ui/_compat/studioTheme.ts +7 -0
  152. package/src/ui/_compat/theme/themeColorProvider.tsx +2 -6
  153. package/src/ui/_compat/theme/themeProvider.tsx +2 -6
  154. package/src/ui/_compat/theme/types.ts +1 -3
  155. package/src/ui/_compat/theme/useRootTheme.ts +1 -3
  156. package/src/ui/_compat/theme/useTheme.ts +2 -6
  157. package/src/ui/_compat/types.ts +0 -83
  158. package/src/ui/components/autocomplete/__workshop__/constrainedHeight.tsx +2 -2
  159. package/src/ui/components/autocomplete/autocomplete.tsx +86 -114
  160. package/src/ui/components/autocomplete/autocompleteOption.tsx +2 -0
  161. package/src/ui/components/autocomplete/types.ts +3 -8
  162. package/src/ui/components/breadcrumbs/breadcrumbs.tsx +27 -21
  163. package/src/ui/components/dialog/dialog.tsx +89 -291
  164. package/src/ui/components/dialog/dialogCard.tsx +183 -0
  165. package/src/ui/components/dialog/isTargetWithinScope.ts +14 -0
  166. package/src/ui/components/hotkeys/hotkeys.tsx +33 -15
  167. package/src/ui/components/menu/__workshop__/asComponent.tsx +6 -6
  168. package/src/ui/components/menu/menu.tsx +27 -33
  169. package/src/ui/components/menu/menuButton.tsx +10 -14
  170. package/src/ui/components/menu/menuDivider.tsx +25 -13
  171. package/src/ui/components/menu/menuGroup.tsx +34 -26
  172. package/src/ui/components/menu/menuItem.tsx +51 -40
  173. package/src/ui/components/skeleton/codeSkeleton.tsx +53 -0
  174. package/src/ui/components/skeleton/headingSkeleton.tsx +52 -0
  175. package/src/ui/components/skeleton/index.ts +3 -0
  176. package/src/ui/components/skeleton/labelSkeleton.tsx +51 -0
  177. package/src/ui/components/skeleton/skeleton.tsx +39 -16
  178. package/src/ui/components/skeleton/textSkeleton.tsx +31 -110
  179. package/src/ui/components/tab/tab.tsx +23 -19
  180. package/src/ui/components/tab/tabList.tsx +34 -33
  181. package/src/ui/components/tab/tabPanel.tsx +25 -19
  182. package/src/ui/components/toast/toast.tsx +21 -16
  183. package/src/ui/components/toast/toastLayer.tsx +28 -10
  184. package/src/ui/components/toast/toastProvider.tsx +2 -6
  185. package/src/ui/components/toast/types.ts +2 -6
  186. package/src/ui/components/toast/useToast.ts +1 -3
  187. package/src/ui/components/tree/tree.tsx +194 -187
  188. package/src/ui/components/tree/treeGroup.tsx +25 -5
  189. package/src/ui/components/tree/treeItem.tsx +35 -23
  190. package/src/ui/hooks/useClickOutside.ts +2 -6
  191. package/src/ui/hooks/useClickOutsideEvent.ts +3 -9
  192. package/src/ui/index.ts +1 -0
  193. package/src/ui/primitives/_selectable/selectable.tsx +33 -20
  194. package/src/ui/primitives/avatar/avatar.tsx +28 -31
  195. package/src/ui/primitives/avatar/avatarCounter.tsx +33 -25
  196. package/src/ui/primitives/avatar/avatarStack.tsx +31 -24
  197. package/src/ui/primitives/avatar/types.ts +2 -0
  198. package/src/ui/primitives/badge/__workshop__/props.tsx +1 -9
  199. package/src/ui/primitives/badge/__workshop__/tones.tsx +1 -6
  200. package/src/ui/primitives/badge/badge.tsx +33 -32
  201. package/src/ui/primitives/badge/types.ts +2 -1
  202. package/src/ui/primitives/box/box.tsx +59 -29
  203. package/src/ui/primitives/button/__workshop__/sanityUploadButton.tsx +3 -3
  204. package/src/ui/primitives/button/__workshop__/uploadButton.tsx +2 -1
  205. package/src/ui/primitives/button/button.test.tsx +1 -15
  206. package/src/ui/primitives/button/button.tsx +63 -70
  207. package/src/ui/primitives/card/__workshop__/asComponent.tsx +3 -3
  208. package/src/ui/primitives/card/card.tsx +22 -22
  209. package/src/ui/primitives/card/cardProvider.tsx +2 -0
  210. package/src/ui/primitives/checkbox/checkbox.tsx +26 -15
  211. package/src/ui/primitives/code/code.tsx +24 -22
  212. package/src/ui/primitives/container/container.tsx +26 -15
  213. package/src/ui/primitives/flex/flex.tsx +21 -19
  214. package/src/ui/primitives/grid/grid.tsx +21 -16
  215. package/src/ui/primitives/heading/heading.tsx +42 -19
  216. package/src/ui/primitives/inline/inline.tsx +26 -23
  217. package/src/ui/primitives/kbd/kbd.tsx +25 -23
  218. package/src/ui/primitives/label/label.tsx +29 -26
  219. package/src/ui/primitives/popover/popover.tsx +293 -271
  220. package/src/ui/primitives/popover/popoverCard.tsx +122 -120
  221. package/src/ui/primitives/radio/radio.tsx +30 -14
  222. package/src/ui/primitives/select/select.tsx +24 -16
  223. package/src/ui/primitives/spinner/animatedSpinnerIcon.tsx +4 -2
  224. package/src/ui/primitives/spinner/spinner.tsx +24 -12
  225. package/src/ui/primitives/stack/stack.tsx +27 -18
  226. package/src/ui/primitives/switch/switch.tsx +31 -14
  227. package/src/ui/primitives/text/text.tsx +30 -24
  228. package/src/ui/primitives/textArea/textArea.tsx +33 -18
  229. package/src/ui/primitives/textInput/textInput.tsx +28 -40
  230. package/src/ui/primitives/tooltip/constants.ts +1 -1
  231. package/src/ui/primitives/tooltip/tooltip.tsx +85 -61
  232. package/src/ui/primitives/tooltip/tooltipCard.tsx +89 -82
  233. package/src/ui/primitives/types.ts +1 -3
  234. package/src/ui/types/avatar.ts +3 -6
  235. package/src/ui/types/badge.ts +1 -3
  236. package/src/ui/types/button.ts +1 -3
  237. package/src/ui/types/card.ts +1 -3
  238. package/src/ui/types/dialog.ts +1 -3
  239. package/src/ui/types/props.ts +20 -10
  240. package/src/ui/utils/arrow/arrow.tsx +43 -25
  241. package/src/ui/utils/boundaryElement/boundaryElementProvider.tsx +2 -6
  242. package/src/ui/utils/boundaryElement/types.ts +1 -3
  243. package/src/ui/utils/boundaryElement/useBoundaryElement.ts +1 -3
  244. package/src/ui/utils/elementQuery/elementQuery.tsx +43 -19
  245. package/src/ui/utils/errorBoundary.tsx +2 -0
  246. package/src/ui/utils/index.ts +0 -1
  247. package/src/ui/utils/layer/layer.tsx +23 -93
  248. package/src/ui/utils/layer/layerCard.tsx +92 -0
  249. package/src/ui/utils/layer/layerProvider.tsx +2 -6
  250. package/src/ui/utils/layer/useLayer.ts +1 -3
  251. package/src/ui/utils/portal/portal.ts +2 -6
  252. package/src/ui/utils/portal/portalProvider.tsx +2 -6
  253. package/src/ui/utils/portal/types.ts +1 -3
  254. package/src/ui/utils/portal/usePortal.ts +1 -3
  255. package/src/ui/utils/srOnly/srOnly.tsx +25 -20
  256. package/src/ui/utils/virtualList/virtualList.tsx +69 -50
  257. package/src/css/compile/compilePalette.ts +0 -27
  258. package/src/css/compile/compileRule.ts +0 -97
  259. package/src/css/compile/compileRules.test.ts +0 -36
  260. package/src/css/compile/compileRules.ts +0 -43
  261. package/src/css/compile/compileSystem.ts +0 -10
  262. package/src/css/compile/compileTheme_v3.ts +0 -401
  263. package/src/css/compile/types.ts +0 -6
  264. package/src/css/components/breadcrumbs/rules.ts +0 -25
  265. package/src/css/components/dialog/rules.ts +0 -78
  266. package/src/css/components/skeleton/rules.ts +0 -113
  267. package/src/css/components/toast/rules.ts +0 -18
  268. package/src/css/components/tree/rules.ts +0 -168
  269. package/src/css/primitives/_selectable/_contants.ts +0 -11
  270. package/src/css/primitives/card/_constants.ts +0 -13
  271. package/src/css/primitives/popover/rules.ts +0 -5
  272. package/src/css/primitives/spinner/rules.ts +0 -21
  273. package/src/css/primitives/token/rules.ts +0 -45
  274. package/src/ui/utils/conditionalWrapper/conditionalWrapper.tsx +0 -23
  275. package/src/ui/utils/conditionalWrapper/index.ts +0 -1
@@ -1,21 +1,22 @@
1
1
  import {tooltipCard} from '@sanity/ui/css'
2
2
  import {motion} from 'framer-motion'
3
- import {CSSProperties, ForwardedRef, forwardRef, memo, useMemo} from 'react'
3
+ import {type CSSProperties, ForwardedRef, useMemo} from 'react'
4
4
 
5
5
  import {POPOVER_MOTION_PROPS} from '../../constants'
6
6
  import {Placement, Props} from '../../types'
7
7
  import {Arrow} from '../../utils'
8
- import {Card, CardProps} from '../card'
8
+ import {Card, CardOwnProps} from '../card'
9
9
  import {
10
10
  DEFAULT_TOOLTIP_ARROW_HEIGHT,
11
11
  DEFAULT_TOOLTIP_ARROW_RADIUS,
12
12
  DEFAULT_TOOLTIP_ARROW_WIDTH,
13
13
  } from './constants'
14
14
 
15
- const MotionCard = motion.create(Card)
15
+ /* @internal */
16
+ export const DEFAULT_TOOLTIP_CARD_ELEMENT = 'div'
16
17
 
17
18
  /* @internal */
18
- export interface TooltipCardProps extends CardProps {
19
+ export interface TooltipCardOwnProps extends CardOwnProps {
19
20
  animate?: boolean
20
21
  arrow: boolean
21
22
  arrowRef: ForwardedRef<HTMLDivElement>
@@ -26,90 +27,96 @@ export interface TooltipCardProps extends CardProps {
26
27
  placement?: Placement
27
28
  }
28
29
 
30
+ /** @internal */
31
+ export type TooltipCardElementType = 'div'
32
+
33
+ /** @internal */
34
+ export type TooltipCardProps<E extends TooltipCardElementType = TooltipCardElementType> = Props<
35
+ TooltipCardOwnProps,
36
+ E
37
+ >
38
+
39
+ const MotionCard = motion.create(Card)
40
+
29
41
  /**
30
42
  * @internal
31
43
  */
32
- export const TooltipCard = memo(
33
- forwardRef(function TooltipCard(
34
- props: Omit<
35
- Props<TooltipCardProps, 'div'>,
36
- 'onDrag' | 'onDragEnd' | 'onDragStart' | 'onAnimationStart'
37
- >,
38
- ref: ForwardedRef<HTMLDivElement>,
39
- ) {
40
- const {
41
- animate,
42
- arrow,
43
- arrowRef,
44
- arrowX,
45
- arrowY,
46
- children,
44
+ export function TooltipCard<E extends TooltipCardElementType = typeof DEFAULT_TOOLTIP_CARD_ELEMENT>(
45
+ props: TooltipCardProps<E>,
46
+ ) {
47
+ const {
48
+ animate,
49
+ arrow,
50
+ arrowRef,
51
+ arrowX,
52
+ arrowY,
53
+ as = DEFAULT_TOOLTIP_CARD_ELEMENT,
54
+ children,
55
+ originX,
56
+ originY,
57
+ padding,
58
+ placement,
59
+ radius,
60
+ scheme,
61
+ shadow,
62
+ style,
63
+ tone = 'inherit',
64
+ ...rest
65
+ } = props as TooltipCardProps<typeof DEFAULT_TOOLTIP_CARD_ELEMENT>
66
+
67
+ const rootStyle: CSSProperties = useMemo(
68
+ () => ({
47
69
  originX,
48
70
  originY,
49
- padding,
50
- placement,
51
- radius,
52
- scheme,
53
- shadow,
54
- style,
55
- tone,
56
- ...restProps
57
- } = props
71
+ willChange: animate ? 'transform' : undefined,
72
+ ...style,
73
+ }),
74
+ [animate, originX, originY, style],
75
+ )
58
76
 
59
- const rootStyle: CSSProperties = useMemo(
60
- () => ({
61
- originX,
62
- originY,
63
- willChange: animate ? 'transform' : undefined,
64
- ...style,
65
- }),
66
- [animate, originX, originY, style],
67
- )
77
+ const arrowStyle: CSSProperties = useMemo(
78
+ () => ({
79
+ left: arrowX !== null ? arrowX : undefined,
80
+ top: arrowY !== null ? arrowY : undefined,
81
+ right: undefined,
82
+ bottom: undefined,
83
+ }),
84
+ [arrowX, arrowY],
85
+ )
68
86
 
69
- const arrowStyle: CSSProperties = useMemo(
70
- () => ({
71
- left: arrowX !== null ? arrowX : undefined,
72
- top: arrowY !== null ? arrowY : undefined,
73
- right: undefined,
74
- bottom: undefined,
75
- }),
76
- [arrowX, arrowY],
77
- )
87
+ return (
88
+ <MotionCard
89
+ data-ui="Tooltip__card"
90
+ {...rest}
91
+ as={as}
92
+ className={tooltipCard()}
93
+ data-animate={animate ? '' : undefined}
94
+ data-placement={placement}
95
+ padding={padding}
96
+ radius={radius}
97
+ scheme={scheme}
98
+ shadow={shadow}
99
+ style={rootStyle}
100
+ variants={POPOVER_MOTION_PROPS.card}
101
+ transition={POPOVER_MOTION_PROPS.transition}
102
+ initial={animate ? ['hidden', 'initial'] : undefined}
103
+ animate={animate ? ['visible', 'scaleIn'] : undefined}
104
+ exit={animate ? ['hidden', 'scaleOut'] : undefined}
105
+ tone={tone}
106
+ >
107
+ {children}
78
108
 
79
- return (
80
- <MotionCard
81
- data-ui="Tooltip__card"
82
- {...restProps}
83
- data-animate={animate ? '' : undefined}
84
- className={tooltipCard()}
85
- data-placement={placement}
86
- padding={padding}
87
- radius={radius}
88
- ref={ref}
89
- scheme={scheme}
90
- shadow={shadow}
91
- style={rootStyle}
92
- variants={POPOVER_MOTION_PROPS.card}
93
- transition={POPOVER_MOTION_PROPS.transition}
94
- initial={animate ? ['hidden', 'initial'] : undefined}
95
- animate={animate ? ['visible', 'scaleIn'] : undefined}
96
- exit={animate ? ['hidden', 'scaleOut'] : undefined}
97
- tone={tone}
98
- >
99
- {children}
100
-
101
- {arrow && (
102
- <Arrow
103
- ref={arrowRef}
104
- style={arrowStyle}
105
- width={DEFAULT_TOOLTIP_ARROW_WIDTH}
106
- height={DEFAULT_TOOLTIP_ARROW_HEIGHT}
107
- radius={DEFAULT_TOOLTIP_ARROW_RADIUS}
108
- />
109
- )}
110
- </MotionCard>
111
- )
112
- }),
113
- )
109
+ {arrow && (
110
+ <Arrow
111
+ ref={arrowRef}
112
+ style={arrowStyle}
113
+ width={DEFAULT_TOOLTIP_ARROW_WIDTH}
114
+ height={DEFAULT_TOOLTIP_ARROW_HEIGHT}
115
+ radius={DEFAULT_TOOLTIP_ARROW_RADIUS}
116
+ />
117
+ )}
118
+ </MotionCard>
119
+ )
120
+ }
114
121
 
115
- TooltipCard.displayName = 'Memo(ForwardRef(TooltipCard))'
122
+ TooltipCard.displayName = 'TooltipCard'
@@ -155,9 +155,7 @@ export interface ResponsiveWidthProps {
155
155
  width?: number | 'auto' | (number | 'auto')[]
156
156
  }
157
157
 
158
- /**
159
- * @public
160
- */
158
+ /** @public */
161
159
  export type Delay =
162
160
  | number
163
161
  | Partial<{
@@ -3,17 +3,14 @@ export {
3
3
  type AvatarSize,
4
4
  } from '@sanity/ui/theme'
5
5
 
6
- /**
7
- * @public
8
- */
6
+ /** @public */
9
7
  export type AvatarPosition = 'top' | 'bottom' | 'inside'
10
8
 
11
- /**
12
- * @public
13
- */
9
+ /** @public */
14
10
  // export type AvatarSize = 0 | 1 | 2 | 3
15
11
 
16
12
  /**
17
13
  * @public
14
+ * @deprecated Will be removed in next major version.
18
15
  */
19
16
  export type AvatarStatus = 'online' | 'editing' | 'inactive'
@@ -6,7 +6,5 @@ import {ThemeColorStateToneKey} from '@sanity/ui/theme'
6
6
  */
7
7
  export type BadgeMode = 'default' | 'outline'
8
8
 
9
- /**
10
- * @public
11
- */
9
+ /** @public */
12
10
  export type BadgeTone = ThemeColorStateToneKey
@@ -6,9 +6,7 @@ import {ThemeColorButtonModeKey, ThemeColorStateToneKey} from '@sanity/ui/theme'
6
6
  */
7
7
  export type ButtonMode = ThemeColorButtonModeKey
8
8
 
9
- /**
10
- * @public
11
- */
9
+ /** @public */
12
10
  export type ButtonTextAlign = 'left' | 'right' | 'center'
13
11
 
14
12
  /**
@@ -1,6 +1,4 @@
1
1
  import {ThemeColorCardToneKey} from '@sanity/ui/theme'
2
2
 
3
- /**
4
- * @public
5
- */
3
+ /** @public */
6
4
  export type CardTone = ThemeColorCardToneKey | 'inherit'
@@ -1,4 +1,2 @@
1
- /**
2
- * @public
3
- */
1
+ /** @public */
4
2
  export type DialogPosition = 'absolute' | 'fixed'
@@ -1,18 +1,28 @@
1
- import type {ComponentProps, ElementType} from 'react'
1
+ /* eslint-disable @typescript-eslint/no-empty-object-type */
2
2
 
3
- export interface PolymorphicProps {
4
- as?: ElementType
5
- }
3
+ import type {ComponentClass, ComponentProps, ExoticComponent, FunctionComponent, JSX} from 'react'
4
+
5
+ /**
6
+ * Assign properties from `U` to `T`, excluding properties that already exist in `T`.
7
+ *
8
+ * @public
9
+ */
10
+ export type Assign<T extends {}, U extends {}> = Omit<T, keyof U> & U
11
+
12
+ /** @public */
13
+ export type EmptyProps = {}
14
+
15
+ /** @public */
16
+ export type TagType = keyof JSX.IntrinsicElements
6
17
 
7
18
  /** @public */
8
- export type ElementProps<E extends ElementType> = Omit<ComponentProps<E>, 'as' | 'ref'>
19
+ export type ComponentType<P = any> = FunctionComponent<P> | ComponentClass<P> | ExoticComponent<P>
9
20
 
10
21
  /** @public */
11
- export type Assign<T, U> = Omit<T, keyof U> & U
22
+ export type ElementType<P> = TagType | ComponentType<P>
12
23
 
13
24
  /** @public */
14
- // eslint-disable-next-line @typescript-eslint/no-empty-object-type
15
- export type Props<P extends {} = {}, E extends ElementType = ElementType> = Assign<
16
- ElementProps<E> & PolymorphicProps,
17
- P
25
+ export type Props<P extends EmptyProps, E extends ElementType<P>> = Assign<
26
+ E extends TagType ? JSX.IntrinsicElements[E] : ComponentProps<E>,
27
+ P & {as?: E}
18
28
  >
@@ -1,18 +1,37 @@
1
- import {_arrow, _arrowShape, _arrowStroke} from '@sanity/ui/css'
2
- import {CSSProperties, ForwardedRef, forwardRef, ReactElement, useMemo} from 'react'
1
+ import {_arrow, _arrowShape, _arrowStroke, _arrowStrokeMask} from '@sanity/ui/css'
2
+ import {CSSProperties, useMemo} from 'react'
3
3
 
4
- import {useTheme_v2} from '../../_compat'
5
- import {Props} from '../../types'
4
+ import {ComponentType, Props} from '../../types'
6
5
  import {compileCommands, getRoundedCommands, Point} from './cmds'
7
6
 
8
7
  /** @internal */
9
- export const Arrow = forwardRef(function Arrow(
10
- props: Props<{width: number; height: number; radius?: number}, 'div'>,
11
- ref: ForwardedRef<HTMLDivElement>,
12
- ): ReactElement {
13
- const {width: w, height: h, radius = 0, style, ...restProps} = props
14
- const {card} = useTheme_v2()
15
- const strokeWidth = card.shadow.outline
8
+ export const DEFAULT_ARROW_ELEMENT = 'div'
9
+
10
+ /** @internal */
11
+ export type ArrowOwnProps = {
12
+ width: number
13
+ height: number
14
+ radius?: number
15
+ }
16
+
17
+ /** @internal */
18
+ export type ArrowElementType = 'div' | 'span' | ComponentType
19
+
20
+ /** @internal */
21
+ export type ArrowProps<E extends ArrowElementType = ArrowElementType> = Props<ArrowOwnProps, E>
22
+
23
+ /** @internal */
24
+ export function Arrow<E extends ArrowElementType = typeof DEFAULT_ARROW_ELEMENT>(
25
+ props: ArrowProps<E>,
26
+ ) {
27
+ const {
28
+ as: Element = DEFAULT_ARROW_ELEMENT,
29
+ width: w,
30
+ height: h,
31
+ radius = 0,
32
+ style,
33
+ ...rest
34
+ } = props as ArrowProps<typeof DEFAULT_ARROW_ELEMENT>
16
35
 
17
36
  const center = w / 2
18
37
 
@@ -34,26 +53,25 @@ export const Arrow = forwardRef(function Arrow(
34
53
  const fillPath = `${path} M ${w} -1 M 0 -1 Z`
35
54
 
36
55
  return (
37
- <div
38
- {...restProps}
56
+ <Element
57
+ {...rest}
39
58
  className={_arrow()}
40
- ref={ref}
41
- style={{...style, '--arrow-size': `${w}px`} as CSSProperties}
59
+ style={
60
+ {
61
+ ...style,
62
+ '--arrow-size': `${w}px`,
63
+ } as CSSProperties
64
+ }
42
65
  >
43
66
  <svg width={w} height={w} viewBox={`0 0 ${w} ${w}`}>
44
67
  <mask id="stroke-mask">
45
- <rect x={0} y={strokeWidth} width={w} height={w} fill="white" />
68
+ <rect className={_arrowStrokeMask()} x={0} width={w} height={w} fill="white" />
46
69
  </mask>
47
- <path
48
- className={_arrowStroke()}
49
- d={strokePath}
50
- mask="url(#stroke-mask)"
51
- strokeWidth={strokeWidth * 2}
52
- />
70
+ <path className={_arrowStroke()} d={strokePath} mask="url(#stroke-mask)" />
53
71
  <path className={_arrowShape()} d={fillPath} />
54
72
  </svg>
55
- </div>
73
+ </Element>
56
74
  )
57
- })
75
+ }
58
76
 
59
- Arrow.displayName = 'ForwardRef(Arrow)'
77
+ Arrow.displayName = 'Arrow'
@@ -3,17 +3,13 @@ import {ReactElement, ReactNode, useMemo} from 'react'
3
3
  import {BoundaryElementContext} from './boundaryElementContext'
4
4
  import {BoundaryElementContextValue} from './types'
5
5
 
6
- /**
7
- * @public
8
- */
6
+ /** @public */
9
7
  export interface BoundaryElementProviderProps {
10
8
  children: ReactNode
11
9
  element: HTMLElement | null
12
10
  }
13
11
 
14
- /**
15
- * @public
16
- */
12
+ /** @public */
17
13
  export function BoundaryElementProvider(props: BoundaryElementProviderProps): ReactElement {
18
14
  const {children, element} = props
19
15
  const value: BoundaryElementContextValue = useMemo(() => ({version: 0.0, element}), [element])
@@ -1,6 +1,4 @@
1
- /**
2
- * @public
3
- */
1
+ /** @public */
4
2
  export interface BoundaryElementContextValue {
5
3
  version: 0.0
6
4
  element: HTMLElement | null
@@ -9,9 +9,7 @@ const DEFAULT_VALUE: BoundaryElementContextValue = {
9
9
  element: null,
10
10
  }
11
11
 
12
- /**
13
- * @public
14
- */
12
+ /** @public */
15
13
  export function useBoundaryElement(): BoundaryElementContextValue {
16
14
  const value = useContext(BoundaryElementContext)
17
15
 
@@ -1,53 +1,77 @@
1
- import {ForwardedRef, forwardRef, useImperativeHandle, useMemo, useState} from 'react'
1
+ import {BREAKPOINTS} from '@sanity/ui/css'
2
+ import {useImperativeHandle, useMemo, useState} from 'react'
2
3
 
3
- import {useTheme_v2} from '../../_compat'
4
4
  import {useElementSize} from '../../hooks'
5
- import {Props} from '../../types'
5
+ import {ComponentType, Props} from '../../types'
6
6
  import {findMaxBreakpoints, findMinBreakpoints} from './helpers'
7
7
 
8
+ /** @beta */
9
+ export const DEFAULT_ELEMENT_QUERY_ELEMENT = 'div'
10
+
8
11
  /**
9
12
  * DO NOT USE IN PRODUCTION.
10
13
  * @beta
11
14
  */
12
- export interface MediaQueryProps {
15
+ export type ElementQueryOwnProps = {
13
16
  media?: number[]
14
17
  }
15
18
 
19
+ /** @beta */
20
+ export type ElementQueryElementType = 'div' | ComponentType
21
+
22
+ /**
23
+ * DO NOT USE IN PRODUCTION.
24
+ * @beta
25
+ */
26
+ export type ElementQueryProps<E extends ElementQueryElementType = ElementQueryElementType> = Props<
27
+ ElementQueryOwnProps,
28
+ E
29
+ >
30
+
31
+ const DEFAULT_BREAKPOINTS = Object.values(BREAKPOINTS)
32
+
16
33
  /**
17
34
  * DO NOT USE IN PRODUCTION.
18
35
  * @beta
19
36
  */
20
- export const ElementQuery = forwardRef(function ElementQuery(
21
- props: Props<MediaQueryProps, 'div'>,
22
- forwardedRef: ForwardedRef<HTMLDivElement>,
23
- ) {
24
- const theme = useTheme_v2()
25
- const {children, media: _media, ...restProps} = props
26
- const media = _media ?? theme.media
37
+ export function ElementQuery<
38
+ E extends ElementQueryElementType = typeof DEFAULT_ELEMENT_QUERY_ELEMENT,
39
+ >(props: ElementQueryProps<E>) {
40
+ const {
41
+ as: Element = DEFAULT_ELEMENT_QUERY_ELEMENT,
42
+ children,
43
+ media: mediaProp,
44
+ ref: forwardedRef,
45
+ ...rest
46
+ } = props as ElementQueryProps<typeof DEFAULT_ELEMENT_QUERY_ELEMENT>
47
+
48
+ const breakpoints = mediaProp ?? DEFAULT_BREAKPOINTS
27
49
 
28
50
  const [element, setElement] = useState<HTMLDivElement | null>(null)
29
51
  const elementSize = useElementSize(element)
30
52
  const width = useMemo(() => elementSize?.border.width ?? window.innerWidth, [elementSize])
31
53
 
32
54
  const max = useMemo(() => {
33
- const eq = findMaxBreakpoints(media, width)
55
+ const eq = findMaxBreakpoints(breakpoints, width)
34
56
 
35
57
  return eq.length ? eq.join(' ') : undefined
36
- }, [media, width])
58
+ }, [breakpoints, width])
59
+
37
60
  const min = useMemo(() => {
38
- const eq = findMinBreakpoints(media, width)
61
+ const eq = findMinBreakpoints(breakpoints, width)
39
62
 
40
63
  return eq.length ? eq.join(' ') : undefined
41
- }, [media, width])
64
+ }, [breakpoints, width])
42
65
 
43
66
  useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => element, [
44
67
  element,
45
68
  ])
46
69
 
47
70
  return (
48
- <div data-ui="ElementQuery" {...restProps} data-eq-max={max} data-eq-min={min} ref={setElement}>
71
+ <Element data-ui="ElementQuery" {...rest} data-eq-max={max} data-eq-min={min} ref={setElement}>
49
72
  {children}
50
- </div>
73
+ </Element>
51
74
  )
52
- })
53
- ElementQuery.displayName = 'ForwardRef(ElementQuery)'
75
+ }
76
+
77
+ ElementQuery.displayName = 'ElementQuery'
@@ -25,6 +25,8 @@ export interface ErrorBoundaryState {
25
25
  export class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
26
26
  state: ErrorBoundaryState = {error: null}
27
27
 
28
+ static displayName = 'ErrorBoundary'
29
+
28
30
  static getDerivedStateFromError(error: Error): ErrorBoundaryState {
29
31
  // Update state so the next render will show the fallback UI.
30
32
  return {error}
@@ -1,6 +1,5 @@
1
1
  export * from './arrow'
2
2
  export * from './boundaryElement'
3
- export * from './conditionalWrapper'
4
3
  export * from './elementQuery'
5
4
  export * from './errorBoundary'
6
5
  export * from './layer'