@sanity/ui 0.37.10 → 0.37.13

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 (242) hide show
  1. package/lib/dts/src/components/autocomplete/autocomplete.d.ts +2 -2
  2. package/lib/dts/src/components/autocomplete/autocomplete.d.ts.map +1 -1
  3. package/lib/dts/src/components/autocomplete/autocomplete.styles.d.ts.map +1 -1
  4. package/lib/dts/src/components/autocomplete/constants.d.ts +0 -4
  5. package/lib/dts/src/components/autocomplete/constants.d.ts.map +1 -1
  6. package/lib/dts/src/components/breadcrumbs/breadcrumbs.d.ts.map +1 -1
  7. package/lib/dts/src/components/dialog/dialog.d.ts.map +1 -1
  8. package/lib/dts/src/components/dialog/styles.d.ts +1 -1
  9. package/lib/dts/src/components/dialog/styles.d.ts.map +1 -1
  10. package/lib/dts/src/components/hotkeys/hotkeys.d.ts.map +1 -1
  11. package/lib/dts/src/components/menu/menuButton.d.ts.map +1 -1
  12. package/lib/dts/src/components/menu/menuGroup.d.ts.map +1 -1
  13. package/lib/dts/src/components/menu/menuItem.d.ts.map +1 -1
  14. package/lib/dts/src/components/skeleton/skeleton.d.ts.map +1 -1
  15. package/lib/dts/src/hooks/_internal/useUnique.d.ts +2 -3
  16. package/lib/dts/src/hooks/_internal/useUnique.d.ts.map +1 -1
  17. package/lib/dts/src/hooks/index.d.ts +2 -1
  18. package/lib/dts/src/hooks/index.d.ts.map +1 -1
  19. package/lib/dts/src/hooks/useArrayProp.d.ts +7 -0
  20. package/lib/dts/src/hooks/useArrayProp.d.ts.map +1 -0
  21. package/lib/dts/src/hooks/useElementRect/useElementRect.d.ts +1 -1
  22. package/lib/dts/src/hooks/useElementRect/useElementRect.d.ts.map +1 -1
  23. package/lib/dts/src/hooks/useElementSize.d.ts +7 -0
  24. package/lib/dts/src/hooks/useElementSize.d.ts.map +1 -0
  25. package/lib/dts/src/index.d.ts +1 -0
  26. package/lib/dts/src/index.d.ts.map +1 -1
  27. package/lib/dts/src/observers/elementSizeObserver.d.ts +37 -0
  28. package/lib/dts/src/observers/elementSizeObserver.d.ts.map +1 -0
  29. package/lib/dts/src/observers/index.d.ts +3 -0
  30. package/lib/dts/src/observers/index.d.ts.map +1 -0
  31. package/lib/dts/src/observers/resizeObserver.d.ts +5 -0
  32. package/lib/dts/src/observers/resizeObserver.d.ts.map +1 -0
  33. package/lib/dts/src/primitives/_selectable/selectable.d.ts +1 -2
  34. package/lib/dts/src/primitives/_selectable/selectable.d.ts.map +1 -1
  35. package/lib/dts/src/primitives/avatar/avatar.d.ts.map +1 -1
  36. package/lib/dts/src/primitives/avatar/avatarCounter.d.ts +1 -0
  37. package/lib/dts/src/primitives/avatar/avatarCounter.d.ts.map +1 -1
  38. package/lib/dts/src/primitives/avatar/avatarStack.d.ts +1 -0
  39. package/lib/dts/src/primitives/avatar/avatarStack.d.ts.map +1 -1
  40. package/lib/dts/src/primitives/avatar/styles.d.ts.map +1 -1
  41. package/lib/dts/src/primitives/badge/badge.d.ts.map +1 -1
  42. package/lib/dts/src/primitives/box/box.d.ts.map +1 -1
  43. package/lib/dts/src/primitives/button/button.d.ts.map +1 -1
  44. package/lib/dts/src/primitives/card/card.d.ts.map +1 -1
  45. package/lib/dts/src/primitives/code/code.d.ts.map +1 -1
  46. package/lib/dts/src/primitives/container/container.d.ts.map +1 -1
  47. package/lib/dts/src/primitives/container/styles.d.ts.map +1 -1
  48. package/lib/dts/src/primitives/container/types.d.ts +1 -1
  49. package/lib/dts/src/primitives/container/types.d.ts.map +1 -1
  50. package/lib/dts/src/primitives/flex/flex.d.ts.map +1 -1
  51. package/lib/dts/src/primitives/grid/grid.d.ts.map +1 -1
  52. package/lib/dts/src/primitives/heading/heading.d.ts.map +1 -1
  53. package/lib/dts/src/primitives/inline/inline.d.ts.map +1 -1
  54. package/lib/dts/src/primitives/inline/styles.d.ts.map +1 -1
  55. package/lib/dts/src/primitives/inline/types.d.ts +1 -1
  56. package/lib/dts/src/primitives/inline/types.d.ts.map +1 -1
  57. package/lib/dts/src/primitives/kbd/kbd.d.ts.map +1 -1
  58. package/lib/dts/src/primitives/label/label.d.ts.map +1 -1
  59. package/lib/dts/src/primitives/popover/popover.d.ts.map +1 -1
  60. package/lib/dts/src/primitives/select/styles.d.ts +5 -1
  61. package/lib/dts/src/primitives/select/styles.d.ts.map +1 -1
  62. package/lib/dts/src/primitives/stack/stack.d.ts.map +1 -1
  63. package/lib/dts/src/primitives/stack/styles.d.ts +1 -1
  64. package/lib/dts/src/primitives/stack/styles.d.ts.map +1 -1
  65. package/lib/dts/src/primitives/text/text.d.ts.map +1 -1
  66. package/lib/dts/src/primitives/textArea/textArea.d.ts.map +1 -1
  67. package/lib/dts/src/primitives/textInput/textInput.d.ts.map +1 -1
  68. package/lib/dts/src/primitives/tooltip/tooltip.d.ts.map +1 -1
  69. package/lib/dts/src/primitives/types.d.ts +1 -1
  70. package/lib/dts/src/primitives/types.d.ts.map +1 -1
  71. package/lib/dts/src/styles/border/types.d.ts +5 -5
  72. package/lib/dts/src/styles/border/types.d.ts.map +1 -1
  73. package/lib/dts/src/styles/box/types.d.ts +4 -4
  74. package/lib/dts/src/styles/box/types.d.ts.map +1 -1
  75. package/lib/dts/src/styles/flex/flexItemStyle.d.ts.map +1 -1
  76. package/lib/dts/src/styles/flex/types.d.ts +6 -6
  77. package/lib/dts/src/styles/flex/types.d.ts.map +1 -1
  78. package/lib/dts/src/styles/font/responsiveFont.d.ts +1 -1
  79. package/lib/dts/src/styles/font/responsiveFont.d.ts.map +1 -1
  80. package/lib/dts/src/styles/font/types.d.ts +3 -3
  81. package/lib/dts/src/styles/font/types.d.ts.map +1 -1
  82. package/lib/dts/src/styles/grid/types.d.ts +14 -14
  83. package/lib/dts/src/styles/grid/types.d.ts.map +1 -1
  84. package/lib/dts/src/styles/helpers.d.ts +4 -4
  85. package/lib/dts/src/styles/helpers.d.ts.map +1 -1
  86. package/lib/dts/src/styles/input/responsiveInputPaddingStyle.d.ts +12 -12
  87. package/lib/dts/src/styles/input/responsiveInputPaddingStyle.d.ts.map +1 -1
  88. package/lib/dts/src/styles/input/textInputStyle.d.ts +4 -1
  89. package/lib/dts/src/styles/input/textInputStyle.d.ts.map +1 -1
  90. package/lib/dts/src/styles/margin/types.d.ts +7 -7
  91. package/lib/dts/src/styles/margin/types.d.ts.map +1 -1
  92. package/lib/dts/src/styles/padding/types.d.ts +7 -7
  93. package/lib/dts/src/styles/padding/types.d.ts.map +1 -1
  94. package/lib/dts/src/styles/radius/types.d.ts +1 -1
  95. package/lib/dts/src/styles/radius/types.d.ts.map +1 -1
  96. package/lib/dts/src/styles/shadow/shadowStyle.d.ts.map +1 -1
  97. package/lib/dts/src/styles/shadow/types.d.ts +1 -1
  98. package/lib/dts/src/styles/shadow/types.d.ts.map +1 -1
  99. package/lib/dts/src/theme/lib/theme/fonts.d.ts +1 -3
  100. package/lib/dts/src/theme/lib/theme/fonts.d.ts.map +1 -1
  101. package/lib/dts/src/theme/studioTheme/fonts.d.ts.map +1 -1
  102. package/lib/dts/src/types/index.d.ts +2 -1
  103. package/lib/dts/src/types/index.d.ts.map +1 -1
  104. package/lib/dts/src/types/placement.d.ts +7 -0
  105. package/lib/dts/src/types/placement.d.ts.map +1 -0
  106. package/lib/dts/src/types/text.d.ts +5 -0
  107. package/lib/dts/src/types/text.d.ts.map +1 -0
  108. package/lib/dts/src/utils/elementQuery/elementQuery.d.ts.map +1 -1
  109. package/lib/dts/src/utils/index.d.ts +0 -1
  110. package/lib/dts/src/utils/index.d.ts.map +1 -1
  111. package/lib/dts/src/utils/virtualList/virtualList.d.ts.map +1 -1
  112. package/lib/sanity-ui.js +738 -627
  113. package/lib/sanity-ui.js.map +1 -1
  114. package/lib/{sanity-ui.modern.js → sanity-ui.modern.mjs} +736 -616
  115. package/lib/sanity-ui.modern.mjs.map +1 -0
  116. package/lib/sanity-ui.module.js +732 -623
  117. package/lib/sanity-ui.module.js.map +1 -1
  118. package/package.json +11 -11
  119. package/src/__workshop__/color/overview.tsx +9 -11
  120. package/src/components/autocomplete/__workshop__/async.tsx +14 -12
  121. package/src/components/autocomplete/__workshop__/constrainedHeight.tsx +36 -0
  122. package/src/components/autocomplete/autocomplete.styles.tsx +0 -1
  123. package/src/components/autocomplete/autocomplete.tsx +14 -7
  124. package/src/components/autocomplete/constants.ts +0 -5
  125. package/src/components/breadcrumbs/breadcrumbs.tsx +3 -2
  126. package/src/components/dialog/dialog.tsx +17 -9
  127. package/src/components/dialog/styles.ts +3 -3
  128. package/src/components/hotkeys/hotkeys.tsx +3 -1
  129. package/src/components/menu/__workshop__/constrainedInBoundary.tsx +11 -14
  130. package/src/components/menu/__workshop__/groups.tsx +1 -1
  131. package/src/components/menu/menuButton.tsx +21 -13
  132. package/src/components/menu/menuGroup.tsx +3 -2
  133. package/src/components/menu/menuItem.tsx +4 -5
  134. package/src/components/skeleton/skeleton.tsx +10 -1
  135. package/src/components/skeleton/textSkeleton.tsx +7 -7
  136. package/src/hooks/_internal/useUnique.ts +4 -5
  137. package/src/hooks/index.ts +2 -1
  138. package/src/hooks/useArrayProp.ts +23 -0
  139. package/src/hooks/useElementRect/useElementRect.ts +4 -16
  140. package/src/hooks/useElementSize.ts +18 -0
  141. package/src/index.ts +1 -0
  142. package/src/observers/elementSizeObserver.ts +116 -0
  143. package/src/observers/index.ts +2 -0
  144. package/src/{utils → observers}/resizeObserver.ts +1 -4
  145. package/src/primitives/_selectable/selectable.tsx +5 -4
  146. package/src/primitives/avatar/avatar.tsx +7 -5
  147. package/src/primitives/avatar/avatarCounter.tsx +14 -12
  148. package/src/primitives/avatar/avatarStack.tsx +19 -13
  149. package/src/primitives/avatar/styles.ts +2 -2
  150. package/src/primitives/badge/badge.tsx +3 -2
  151. package/src/primitives/box/box.tsx +27 -26
  152. package/src/primitives/button/button.tsx +22 -10
  153. package/src/primitives/card/card.tsx +13 -11
  154. package/src/primitives/checkbox/__workshop__/example.tsx +4 -2
  155. package/src/primitives/checkbox/__workshop__/props.tsx +4 -2
  156. package/src/primitives/checkbox/__workshop__/readOnly.tsx +4 -2
  157. package/src/primitives/code/__workshop__/props.tsx +1 -1
  158. package/src/primitives/code/code.tsx +2 -1
  159. package/src/primitives/container/container.tsx +10 -1
  160. package/src/primitives/container/styles.ts +2 -2
  161. package/src/primitives/container/types.ts +1 -1
  162. package/src/primitives/flex/flex.tsx +6 -5
  163. package/src/primitives/grid/__workshop__/responsive.tsx +13 -12
  164. package/src/primitives/grid/grid.tsx +9 -8
  165. package/src/primitives/heading/__workshop__/opticalAlignment.tsx +19 -7
  166. package/src/primitives/heading/heading.tsx +3 -2
  167. package/src/primitives/inline/inline.tsx +12 -6
  168. package/src/primitives/inline/styles.ts +2 -2
  169. package/src/primitives/inline/types.ts +1 -1
  170. package/src/primitives/kbd/kbd.tsx +2 -1
  171. package/src/primitives/label/label.tsx +4 -3
  172. package/src/primitives/popover/__workshop__/{margins.tsx → MarginsStory.tsx} +1 -1
  173. package/src/primitives/popover/__workshop__/{matchReferenceWidth.tsx → MatchReferenceWidthStory.tsx} +0 -0
  174. package/src/primitives/popover/__workshop__/{plain.tsx → PlainStory.tsx} +12 -14
  175. package/src/primitives/popover/__workshop__/{recursive.tsx → RecursiveStory.tsx} +4 -1
  176. package/src/primitives/popover/__workshop__/RightAlignedStory.tsx +60 -0
  177. package/src/primitives/popover/__workshop__/TestStory.tsx +79 -0
  178. package/src/primitives/popover/__workshop__/index.ts +10 -5
  179. package/src/primitives/popover/popover.tsx +5 -3
  180. package/src/primitives/select/select.tsx +9 -9
  181. package/src/primitives/select/styles.ts +10 -4
  182. package/src/primitives/stack/stack.tsx +2 -1
  183. package/src/primitives/stack/styles.ts +3 -3
  184. package/src/primitives/text/__workshop__/opticalAlignment.tsx +15 -5
  185. package/src/primitives/text/text.tsx +3 -2
  186. package/src/primitives/textArea/__workshop__/plain.tsx +23 -18
  187. package/src/primitives/textArea/textArea.tsx +17 -5
  188. package/src/primitives/textInput/__workshop__/clearButton.tsx +14 -8
  189. package/src/primitives/textInput/__workshop__/index.ts +2 -2
  190. package/src/primitives/textInput/__workshop__/plain.tsx +39 -32
  191. package/src/primitives/textInput/__workshop__/tones.tsx +97 -75
  192. package/src/primitives/textInput/__workshop__/typed.tsx +8 -2
  193. package/src/primitives/textInput/textInput.tsx +43 -12
  194. package/src/primitives/tooltip/__workshop__/props.tsx +5 -1
  195. package/src/primitives/tooltip/tooltip.tsx +3 -2
  196. package/src/primitives/types.ts +1 -1
  197. package/src/styles/border/borderStyle.ts +6 -6
  198. package/src/styles/border/types.ts +5 -5
  199. package/src/styles/box/boxStyle.ts +5 -5
  200. package/src/styles/box/types.ts +4 -4
  201. package/src/styles/flex/flexItemStyle.ts +5 -4
  202. package/src/styles/flex/flexStyle.ts +6 -6
  203. package/src/styles/flex/types.ts +6 -6
  204. package/src/styles/font/responsiveFont.ts +7 -27
  205. package/src/styles/font/textAlignStyle.ts +2 -2
  206. package/src/styles/font/types.ts +4 -3
  207. package/src/styles/grid/gridItemStyle.ts +7 -7
  208. package/src/styles/grid/gridStyle.ts +9 -9
  209. package/src/styles/grid/types.ts +14 -14
  210. package/src/styles/helpers.ts +9 -9
  211. package/src/styles/input/responsiveInputPaddingStyle.ts +24 -27
  212. package/src/styles/input/textInputStyle.ts +89 -79
  213. package/src/styles/margin/marginStyle.ts +8 -8
  214. package/src/styles/margin/marginsStyle.test.ts +1 -1
  215. package/src/styles/margin/types.ts +7 -7
  216. package/src/styles/padding/paddingStyle.test.ts +1 -1
  217. package/src/styles/padding/paddingStyle.ts +8 -8
  218. package/src/styles/padding/types.ts +7 -7
  219. package/src/styles/radius/radiusStyle.ts +2 -2
  220. package/src/styles/radius/types.ts +1 -1
  221. package/src/styles/shadow/shadowStyle.ts +2 -5
  222. package/src/styles/shadow/types.ts +1 -1
  223. package/src/theme/lib/theme/fonts.ts +1 -3
  224. package/src/theme/studioTheme/fonts.ts +5 -9
  225. package/src/types/index.ts +2 -2
  226. package/src/types/placement.ts +18 -0
  227. package/src/types/text.ts +4 -0
  228. package/src/utils/elementQuery/elementQuery.tsx +5 -18
  229. package/src/utils/index.ts +0 -1
  230. package/src/utils/layer/layer.tsx +1 -1
  231. package/src/utils/layer/layerProvider.tsx +2 -2
  232. package/src/utils/virtualList/virtualList.tsx +8 -7
  233. package/lib/dts/src/hooks/useResponsiveProp.d.ts +0 -6
  234. package/lib/dts/src/hooks/useResponsiveProp.d.ts.map +0 -1
  235. package/lib/dts/src/types/common.d.ts +0 -11
  236. package/lib/dts/src/types/common.d.ts.map +0 -1
  237. package/lib/dts/src/utils/resizeObserver.d.ts +0 -6
  238. package/lib/dts/src/utils/resizeObserver.d.ts.map +0 -1
  239. package/lib/sanity-ui.modern.js.map +0 -1
  240. package/src/hooks/useResponsiveProp.ts +0 -10
  241. package/src/primitives/popover/__workshop__/rightAligned.tsx +0 -57
  242. package/src/types/common.ts +0 -12
@@ -1,14 +1,16 @@
1
1
  import {css, CSSObject, FlattenSimpleInterpolation} from 'styled-components'
2
2
  import {ThemeFontWeightKey} from '../../theme'
3
+ import {CardTone} from '../../types'
3
4
  import {focusRingBorderStyle, focusRingStyle} from '../focusRing'
4
- import {getResponsiveProp, rem, responsive} from '../helpers'
5
+ import {rem, _responsive} from '../helpers'
5
6
  import {ThemeProps} from '../types'
6
7
 
7
8
  /**
8
9
  * @internal
9
10
  */
10
11
  export interface TextInputInputStyleProps {
11
- $fontSize?: number | number[]
12
+ $fontSize: number[]
13
+ $tone: CardTone
12
14
  $weight?: ThemeFontWeightKey
13
15
  }
14
16
 
@@ -19,6 +21,7 @@ export interface TextInputRepresentationStyleProps {
19
21
  $border?: boolean
20
22
  $hasPrefix?: boolean
21
23
  $hasSuffix?: boolean
24
+ $tone: CardTone
22
25
  }
23
26
 
24
27
  const ROOT_STYLE = css`
@@ -36,14 +39,11 @@ export function textInputRootStyle(): FlattenSimpleInterpolation {
36
39
  export function textInputBaseStyle(
37
40
  props: TextInputInputStyleProps & ThemeProps
38
41
  ): FlattenSimpleInterpolation {
39
- const {theme, $weight} = props
42
+ const {theme, $tone, $weight} = props
40
43
  const font = theme.sanity.fonts.text
41
44
  const color = theme.sanity.color.input
42
45
 
43
46
  return css`
44
- --input-fg-color: ${color.default.enabled.fg};
45
- --input-placeholder-color: ${color.default.enabled.placeholder};
46
-
47
47
  appearance: none;
48
48
  background: none;
49
49
  border: 0;
@@ -57,7 +57,6 @@ export function textInputBaseStyle(
57
57
  position: relative;
58
58
  z-index: 1;
59
59
  display: block;
60
- color: var(--input-fg-color);
61
60
 
62
61
  /* NOTE: This is a hack to disable Chrome’s autofill styles */
63
62
  &:-webkit-autofill,
@@ -69,37 +68,44 @@ export function textInputBaseStyle(
69
68
  transition-delay: 86400s /* 24h */;
70
69
  }
71
70
 
72
- &::placeholder {
73
- color: var(--input-placeholder-color);
74
- }
75
-
76
71
  /* &:is(textarea) */
77
72
  &[data-as='textarea'] {
78
73
  resize: none;
79
74
  }
80
75
 
81
- /* enabled */
82
- &:not(:invalid):not(:disabled):not(:read-only) {
76
+ color: var(--input-fg-color);
77
+
78
+ &::placeholder {
79
+ color: var(--input-placeholder-color);
80
+ }
81
+
82
+ &[data-tone='${$tone}'] {
83
83
  --input-fg-color: ${color.default.enabled.fg};
84
84
  --input-placeholder-color: ${color.default.enabled.placeholder};
85
- }
86
85
 
87
- /* disabled */
88
- &:not(:invalid):disabled {
89
- --input-fg-color: ${color.default.disabled.fg};
90
- --input-placeholder-color: ${color.default.disabled.placeholder};
91
- }
86
+ /* enabled */
87
+ &:not(:invalid):not(:disabled):not(:read-only) {
88
+ --input-fg-color: ${color.default.enabled.fg};
89
+ --input-placeholder-color: ${color.default.enabled.placeholder};
90
+ }
92
91
 
93
- /* invalid */
94
- &:invalid {
95
- --input-fg-color: ${color.invalid.enabled.fg};
96
- --input-placeholder-color: ${color.invalid.enabled.placeholder};
97
- }
92
+ /* disabled */
93
+ &:not(:invalid):disabled {
94
+ --input-fg-color: ${color.default.disabled.fg};
95
+ --input-placeholder-color: ${color.default.disabled.placeholder};
96
+ }
98
97
 
99
- /* readOnly */
100
- &:read-only {
101
- --input-fg-color: ${color.default.readOnly.fg};
102
- --input-placeholder-color: ${color.default.readOnly.placeholder};
98
+ /* invalid */
99
+ &:invalid {
100
+ --input-fg-color: ${color.invalid.enabled.fg};
101
+ --input-placeholder-color: ${color.invalid.enabled.placeholder};
102
+ }
103
+
104
+ /* readOnly */
105
+ &:read-only {
106
+ --input-fg-color: ${color.default.readOnly.fg};
107
+ --input-placeholder-color: ${color.default.readOnly.placeholder};
108
+ }
103
109
  }
104
110
  `
105
111
  }
@@ -108,7 +114,7 @@ export function textInputFontSizeStyle(props: TextInputInputStyleProps & ThemePr
108
114
  const {theme} = props
109
115
  const {fonts, media} = theme.sanity
110
116
 
111
- return responsive(media, getResponsiveProp(props.$fontSize, [2]), (sizeIndex) => {
117
+ return _responsive(media, props.$fontSize, (sizeIndex) => {
112
118
  const size = fonts.text.sizes[sizeIndex] || fonts.text.sizes[2]
113
119
 
114
120
  return {
@@ -121,13 +127,11 @@ export function textInputFontSizeStyle(props: TextInputInputStyleProps & ThemePr
121
127
  export function textInputRepresentationStyle(
122
128
  props: TextInputRepresentationStyleProps & ThemeProps
123
129
  ): FlattenSimpleInterpolation {
124
- const {$border, $hasPrefix, $hasSuffix, theme} = props
130
+ const {$border, $hasPrefix, $hasSuffix, $tone, theme} = props
125
131
  const {focusRing, input} = theme.sanity
126
132
  const color = theme.sanity.color.input
127
133
 
128
134
  return css`
129
- --card-bg-color: ${color.default.enabled.bg};
130
- --card-fg-color: ${color.default.enabled.fg};
131
135
  --input-box-shadow: none;
132
136
 
133
137
  position: absolute;
@@ -138,6 +142,7 @@ export function textInputRepresentationStyle(
138
142
  display: block;
139
143
  pointer-events: none;
140
144
  z-index: 0;
145
+
141
146
  background-color: var(--card-bg-color);
142
147
  box-shadow: var(--input-box-shadow);
143
148
 
@@ -146,65 +151,70 @@ export function textInputRepresentationStyle(
146
151
  border-top-right-radius: ${$hasSuffix ? 0 : undefined};
147
152
  border-bottom-right-radius: ${$hasSuffix ? 0 : undefined};
148
153
 
149
- /* enabled */
150
- *:not(:disabled) + && {
151
- --input-box-shadow: ${$border
152
- ? focusRingBorderStyle({color: color.default.enabled.border, width: input.border.width})
153
- : undefined};
154
- }
154
+ &[data-tone='${$tone}'] {
155
+ --card-bg-color: ${color.default.enabled.bg};
156
+ --card-fg-color: ${color.default.enabled.fg};
155
157
 
156
- /* invalid */
157
- *:not(:disabled):invalid + && {
158
- --card-bg-color: ${color.invalid.enabled.bg};
159
- --card-fg-color: ${color.invalid.enabled.fg};
160
- --input-box-shadow: ${$border
161
- ? focusRingBorderStyle({color: color.invalid.enabled.border, width: input.border.width})
162
- : 'none'};
163
- }
164
-
165
- /* focused */
166
- *:not(:disabled):focus + && {
167
- --input-box-shadow: ${focusRingStyle({
168
- border: $border
169
- ? {color: color.default.enabled.border, width: input.border.width}
170
- : undefined,
171
- focusRing,
172
- })};
173
- }
158
+ /* enabled */
159
+ *:not(:disabled) + & {
160
+ --input-box-shadow: ${$border
161
+ ? focusRingBorderStyle({color: color.default.enabled.border, width: input.border.width})
162
+ : undefined};
163
+ }
174
164
 
175
- /* disabled */
176
- *:disabled + && {
177
- --card-bg-color: ${color.default.disabled.bg};
178
- --card-fg-color: ${color.default.disabled.fg};
179
- --input-box-shadow: ${$border
180
- ? focusRingBorderStyle({
181
- color: color.default.disabled.border,
182
- width: input.border.width,
183
- })
184
- : 'none'};
185
- }
165
+ /* invalid */
166
+ *:not(:disabled):invalid + & {
167
+ --card-bg-color: ${color.invalid.enabled.bg};
168
+ --card-fg-color: ${color.invalid.enabled.fg};
169
+ --input-box-shadow: ${$border
170
+ ? focusRingBorderStyle({color: color.invalid.enabled.border, width: input.border.width})
171
+ : 'none'};
172
+ }
186
173
 
187
- /* hovered */
188
- @media (hover: hover) {
189
- *:not(:disabled):not(:read-only):not(:invalid):hover + && {
190
- --card-bg-color: ${color.default.hovered.bg};
191
- --card-fg-color: ${color.default.hovered.fg};
174
+ /* focused */
175
+ *:not(:disabled):focus + & {
176
+ --input-box-shadow: ${focusRingStyle({
177
+ border: $border
178
+ ? {color: color.default.enabled.border, width: input.border.width}
179
+ : undefined,
180
+ focusRing,
181
+ })};
192
182
  }
193
183
 
194
- *:not(:disabled):not(:read-only):not(:invalid):not(:focus):hover + && {
184
+ /* disabled */
185
+ *:disabled + & {
186
+ --card-bg-color: ${color.default.disabled.bg} !important;
187
+ --card-fg-color: ${color.default.disabled.fg} !important;
195
188
  --input-box-shadow: ${$border
196
189
  ? focusRingBorderStyle({
197
- color: color.default.hovered.border,
190
+ color: color.default.disabled.border,
198
191
  width: input.border.width,
199
192
  })
200
193
  : 'none'};
201
194
  }
202
- }
203
195
 
204
- /* readOnly */
205
- *:read-only + && {
206
- --card-bg-color: ${color.default.readOnly.bg};
207
- --card-fg-color: ${color.default.readOnly.fg};
196
+ /* readOnly */
197
+ *:read-only + & {
198
+ --card-bg-color: ${color.default.readOnly.bg} !important;
199
+ --card-fg-color: ${color.default.readOnly.fg} !important;
200
+ }
201
+
202
+ /* hovered */
203
+ @media (hover: hover) {
204
+ *:not(:disabled):not(:read-only):not(:invalid):hover + & {
205
+ --card-bg-color: ${color.default.hovered.bg};
206
+ --card-fg-color: ${color.default.hovered.fg};
207
+ }
208
+
209
+ *:not(:disabled):not(:read-only):not(:invalid):not(:focus):hover + & {
210
+ --input-box-shadow: ${$border
211
+ ? focusRingBorderStyle({
212
+ color: color.default.hovered.border,
213
+ width: input.border.width,
214
+ })
215
+ : 'none'};
216
+ }
217
+ }
208
218
  }
209
219
  `
210
220
  }
@@ -1,5 +1,5 @@
1
1
  import {CSSObject} from 'styled-components'
2
- import {getResponsiveProp, getResponsiveSpace} from '../helpers'
2
+ import {_getResponsiveSpace} from '../helpers'
3
3
  import {ThemeProps} from '../types'
4
4
  import {ResponsiveMarginStyleProps} from './types'
5
5
 
@@ -9,12 +9,12 @@ export function responsiveMarginStyle(
9
9
  const {theme} = props
10
10
 
11
11
  return [
12
- getResponsiveSpace(theme, ['margin'], getResponsiveProp(props.$margin)),
13
- getResponsiveSpace(theme, ['marginLeft', 'marginRight'], getResponsiveProp(props.$marginX)),
14
- getResponsiveSpace(theme, ['marginTop', 'marginBottom'], getResponsiveProp(props.$marginY)),
15
- getResponsiveSpace(theme, ['marginTop'], getResponsiveProp(props.$marginTop)),
16
- getResponsiveSpace(theme, ['marginRight'], getResponsiveProp(props.$marginRight)),
17
- getResponsiveSpace(theme, ['marginBottom'], getResponsiveProp(props.$marginBottom)),
18
- getResponsiveSpace(theme, ['marginLeft'], getResponsiveProp(props.$marginLeft)),
12
+ _getResponsiveSpace(theme, ['margin'], props.$margin),
13
+ _getResponsiveSpace(theme, ['marginLeft', 'marginRight'], props.$marginX),
14
+ _getResponsiveSpace(theme, ['marginTop', 'marginBottom'], props.$marginY),
15
+ _getResponsiveSpace(theme, ['marginTop'], props.$marginTop),
16
+ _getResponsiveSpace(theme, ['marginRight'], props.$marginRight),
17
+ _getResponsiveSpace(theme, ['marginBottom'], props.$marginBottom),
18
+ _getResponsiveSpace(theme, ['marginLeft'], props.$marginLeft),
19
19
  ].filter(Boolean) as CSSObject[][]
20
20
  }
@@ -6,7 +6,7 @@ const theme: Theme = {sanity: {...restTheme, color: color.light.default}}
6
6
 
7
7
  describe('styles/margin', () => {
8
8
  it('should 1', () => {
9
- const styles = responsiveMarginStyle({$margin: 0, theme})
9
+ const styles = responsiveMarginStyle({$margin: [0], theme})
10
10
 
11
11
  expect(styles).toEqual([[{margin: 0}]])
12
12
  })
@@ -1,9 +1,9 @@
1
1
  export interface ResponsiveMarginStyleProps {
2
- $margin?: number | number[]
3
- $marginX?: number | number[]
4
- $marginY?: number | number[]
5
- $marginTop?: number | number[]
6
- $marginRight?: number | number[]
7
- $marginBottom?: number | number[]
8
- $marginLeft?: number | number[]
2
+ $margin?: number[]
3
+ $marginX?: number[]
4
+ $marginY?: number[]
5
+ $marginTop?: number[]
6
+ $marginRight?: number[]
7
+ $marginBottom?: number[]
8
+ $marginLeft?: number[]
9
9
  }
@@ -6,7 +6,7 @@ const theme: Theme = {sanity: {...restTheme, color: color.light.default}}
6
6
 
7
7
  describe('styles/padding', () => {
8
8
  it('should 1', () => {
9
- const styles = responsivePaddingStyle({$padding: 0, theme})
9
+ const styles = responsivePaddingStyle({$padding: [0], theme})
10
10
 
11
11
  expect(styles).toEqual([[{padding: 0}]])
12
12
  })
@@ -1,5 +1,5 @@
1
1
  import {CSSObject} from 'styled-components'
2
- import {getResponsiveProp, getResponsiveSpace} from '../helpers'
2
+ import {_getResponsiveSpace} from '../helpers'
3
3
  import {ThemeProps} from '../types'
4
4
  import {ResponsivePaddingStyleProps} from './types'
5
5
 
@@ -9,12 +9,12 @@ export function responsivePaddingStyle(
9
9
  const {theme} = props
10
10
 
11
11
  return [
12
- getResponsiveSpace(theme, ['padding'], getResponsiveProp(props.$padding)),
13
- getResponsiveSpace(theme, ['paddingLeft', 'paddingRight'], getResponsiveProp(props.$paddingX)),
14
- getResponsiveSpace(theme, ['paddingTop', 'paddingBottom'], getResponsiveProp(props.$paddingY)),
15
- getResponsiveSpace(theme, ['paddingTop'], getResponsiveProp(props.$paddingTop)),
16
- getResponsiveSpace(theme, ['paddingRight'], getResponsiveProp(props.$paddingRight)),
17
- getResponsiveSpace(theme, ['paddingBottom'], getResponsiveProp(props.$paddingBottom)),
18
- getResponsiveSpace(theme, ['paddingLeft'], getResponsiveProp(props.$paddingLeft)),
12
+ _getResponsiveSpace(theme, ['padding'], props.$padding),
13
+ _getResponsiveSpace(theme, ['paddingLeft', 'paddingRight'], props.$paddingX),
14
+ _getResponsiveSpace(theme, ['paddingTop', 'paddingBottom'], props.$paddingY),
15
+ _getResponsiveSpace(theme, ['paddingTop'], props.$paddingTop),
16
+ _getResponsiveSpace(theme, ['paddingRight'], props.$paddingRight),
17
+ _getResponsiveSpace(theme, ['paddingBottom'], props.$paddingBottom),
18
+ _getResponsiveSpace(theme, ['paddingLeft'], props.$paddingLeft),
19
19
  ].filter(Boolean) as CSSObject[][]
20
20
  }
@@ -2,11 +2,11 @@
2
2
  * @internal
3
3
  */
4
4
  export interface ResponsivePaddingStyleProps {
5
- $padding?: number | number[]
6
- $paddingX?: number | number[]
7
- $paddingY?: number | number[]
8
- $paddingTop?: number | number[]
9
- $paddingRight?: number | number[]
10
- $paddingBottom?: number | number[]
11
- $paddingLeft?: number | number[]
5
+ $padding?: number[]
6
+ $paddingX?: number[]
7
+ $paddingY?: number[]
8
+ $paddingTop?: number[]
9
+ $paddingRight?: number[]
10
+ $paddingBottom?: number[]
11
+ $paddingLeft?: number[]
12
12
  }
@@ -1,5 +1,5 @@
1
1
  import {CSSObject} from 'styled-components'
2
- import {getResponsiveProp, rem, responsive} from '../helpers'
2
+ import {rem, _responsive} from '../helpers'
3
3
  import {ThemeProps} from '../types'
4
4
  import {ResponsiveRadiusStyleProps} from './types'
5
5
 
@@ -7,7 +7,7 @@ export function responsiveRadiusStyle(props: ResponsiveRadiusStyleProps & ThemeP
7
7
  const {theme} = props
8
8
  const {media, radius} = theme.sanity
9
9
 
10
- return responsive(media, getResponsiveProp(props.$radius), (radiusIndex) => ({
10
+ return _responsive(media, props.$radius, (radiusIndex) => ({
11
11
  borderRadius: rem(radius[radiusIndex]),
12
12
  }))
13
13
  }
@@ -2,5 +2,5 @@
2
2
  * @internal
3
3
  */
4
4
  export interface ResponsiveRadiusStyleProps {
5
- $radius?: number | number[]
5
+ $radius: number[]
6
6
  }
@@ -1,8 +1,7 @@
1
1
  import {CSSObject} from 'styled-components'
2
- import {getResponsiveProp} from '..'
3
2
  import {EMPTY_RECORD} from '../../constants'
4
3
  import {BoxShadow, ThemeShadow} from '../../theme'
5
- import {rem, responsive} from '../helpers'
4
+ import {rem, _responsive} from '../helpers'
6
5
  import {ThemeProps} from '../types'
7
6
  import {ResponsiveShadowStyleProps} from './types'
8
7
 
@@ -25,7 +24,5 @@ export function responsiveShadowStyle(props: ResponsiveShadowStyleProps & ThemeP
25
24
  const {theme} = props
26
25
  const {media, shadows} = theme.sanity
27
26
 
28
- return responsive(media, getResponsiveProp(props.$shadow), (shadow) =>
29
- shadowStyle(shadows[shadow])
30
- )
27
+ return _responsive(media, props.$shadow, (shadow) => shadowStyle(shadows[shadow]))
31
28
  }
@@ -2,5 +2,5 @@
2
2
  * @internal
3
3
  */
4
4
  export interface ResponsiveShadowStyleProps {
5
- $shadow?: number | number[]
5
+ $shadow: number[]
6
6
  }
@@ -37,9 +37,7 @@ export interface ThemeFont {
37
37
  family: string
38
38
  weights: ThemeFontWeight
39
39
  sizes: ThemeFontSize[]
40
- /**
41
- * @beta
42
- */
40
+ /** @deprecated No longer supported. */
43
41
  horizontalOffset?: number
44
42
  }
45
43
 
@@ -2,8 +2,7 @@ import {ThemeFonts} from '../lib/theme'
2
2
 
3
3
  export const fonts: ThemeFonts = {
4
4
  code: {
5
- family: '-apple-system-ui-monospace, "SF Mono", Menlo, Monaco, Consolas, monospace',
6
- horizontalOffset: 0.075,
5
+ family: 'ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace',
7
6
  weights: {
8
7
  regular: 400,
9
8
  medium: 500,
@@ -56,7 +55,6 @@ export const fonts: ThemeFonts = {
56
55
  heading: {
57
56
  family:
58
57
  '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Liberation Sans", Helvetica, Arial, system-ui, sans-serif',
59
- horizontalOffset: 0.075,
60
58
  weights: {
61
59
  regular: 700,
62
60
  medium: 800,
@@ -97,16 +95,16 @@ export const fonts: ThemeFonts = {
97
95
  letterSpacing: 0,
98
96
  },
99
97
  {
100
- ascenderHeight: 9,
101
- descenderHeight: 7,
98
+ ascenderHeight: 8,
99
+ descenderHeight: 8,
102
100
  fontSize: 33,
103
101
  iconSize: 49,
104
102
  lineHeight: 39,
105
103
  letterSpacing: 0,
106
104
  },
107
105
  {
108
- ascenderHeight: 10,
109
- descenderHeight: 8,
106
+ ascenderHeight: 9,
107
+ descenderHeight: 9,
110
108
  fontSize: 38,
111
109
  iconSize: 53,
112
110
  lineHeight: 45,
@@ -117,7 +115,6 @@ export const fonts: ThemeFonts = {
117
115
  label: {
118
116
  family:
119
117
  '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Liberation Sans", system-ui, sans-serif',
120
- horizontalOffset: 0.075,
121
118
  weights: {
122
119
  regular: 600,
123
120
  medium: 700,
@@ -170,7 +167,6 @@ export const fonts: ThemeFonts = {
170
167
  text: {
171
168
  family:
172
169
  '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Liberation Sans", Helvetica, Arial, system-ui, sans-serif',
173
- horizontalOffset: 0.075,
174
170
  weights: {
175
171
  regular: 400,
176
172
  medium: 500,
@@ -1,5 +1,3 @@
1
- export * from './common'
2
-
3
1
  export * from './avatar'
4
2
  export * from './badge'
5
3
  export * from './box'
@@ -9,5 +7,7 @@ export * from './dialog'
9
7
  export * from './flex'
10
8
  export * from './grid'
11
9
  export * from './gridItem'
10
+ export * from './placement'
12
11
  export * from './popover'
13
12
  export * from './selectable'
13
+ export * from './text'
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Placement of floating UI elements.
3
+ *
4
+ * @public
5
+ */
6
+ export type Placement =
7
+ | 'top'
8
+ | 'top-start'
9
+ | 'top-end'
10
+ | 'right'
11
+ | 'right-start'
12
+ | 'right-end'
13
+ | 'bottom'
14
+ | 'bottom-start'
15
+ | 'bottom-end'
16
+ | 'left'
17
+ | 'left-start'
18
+ | 'left-end'
@@ -0,0 +1,4 @@
1
+ /**
2
+ * @public
3
+ */
4
+ export type TextAlign = 'left' | 'right' | 'center' | 'justify' | 'initial'
@@ -1,7 +1,6 @@
1
- import React, {forwardRef, useCallback, useEffect, useMemo, useState} from 'react'
2
- import {useForwardedRef} from '../../hooks'
1
+ import React, {forwardRef, useCallback, useMemo, useState} from 'react'
2
+ import {useElementSize, useForwardedRef} from '../../hooks'
3
3
  import {useTheme} from '../../theme'
4
- import {ResizeObserver} from '../resizeObserver'
5
4
  import {findMaxBreakpoints, findMinBreakpoints} from './helpers'
6
5
 
7
6
  /**
@@ -23,23 +22,11 @@ export const ElementQuery = forwardRef(function ElementQuery(
23
22
  ) {
24
23
  const theme = useTheme()
25
24
  const {children, media = theme.sanity.media, ...restProps} = props
26
- const [width, setWidth] = useState(() => window.innerWidth)
25
+
27
26
  const forwardedRef = useForwardedRef(ref)
28
27
  const [element, setElement] = useState<HTMLDivElement | null>(null)
29
-
30
- useEffect(() => {
31
- if (!element) return
32
-
33
- const handleResizeEntries: ResizeObserverCallback = (entries) => {
34
- setWidth(entries[0].contentRect.width)
35
- }
36
-
37
- const ro = new ResizeObserver(handleResizeEntries)
38
-
39
- ro.observe(element)
40
-
41
- return () => ro.disconnect()
42
- }, [element])
28
+ const elementSize = useElementSize(element)
29
+ const width = useMemo(() => elementSize?.border.width ?? window.innerWidth, [elementSize])
43
30
 
44
31
  const max = useMemo(() => findMaxBreakpoints(media, width), [media, width])
45
32
  const min = useMemo(() => findMinBreakpoints(media, width), [media, width])
@@ -3,6 +3,5 @@ export * from './elementQuery'
3
3
  export * from './errorBoundary'
4
4
  export * from './layer'
5
5
  export * from './portal'
6
- export * from './resizeObserver'
7
6
  export * from './srOnly'
8
7
  export * from './virtualList'
@@ -28,7 +28,7 @@ const LayerChildren = forwardRef(function LayerChildren(
28
28
  const {zIndex} = useLayer()
29
29
 
30
30
  return (
31
- <Root {...restProps} ref={ref} style={{...style, zIndex}}>
31
+ <Root {...restProps} data-ui="Layer" ref={ref} style={{...style, zIndex}}>
32
32
  {children}
33
33
  </Root>
34
34
  )
@@ -1,5 +1,5 @@
1
1
  import React, {useCallback, useContext, useEffect, useMemo, useState} from 'react'
2
- import {useMediaIndex, useResponsiveProp} from '../../hooks'
2
+ import {useMediaIndex, useArrayProp} from '../../hooks'
3
3
  import {LayerContext} from './layerContext'
4
4
  import {LayerContextValue} from './types'
5
5
 
@@ -17,7 +17,7 @@ export interface LayerProviderProps {
17
17
  export function LayerProvider(props: LayerProviderProps): React.ReactElement {
18
18
  const {children, zOffset: zOffsetProp = 0} = props
19
19
  const parent = useContext(LayerContext)
20
- const zOffset = useResponsiveProp(zOffsetProp)
20
+ const zOffset = useArrayProp(zOffsetProp)
21
21
  const maxMediaIndex = zOffset.length - 1
22
22
  const mediaIndex = Math.min(useMediaIndex(), maxMediaIndex)
23
23
  const zIndex = parent ? parent.zIndex + zOffset[mediaIndex] : zOffset[mediaIndex]
@@ -2,6 +2,7 @@ import React, {forwardRef, useEffect, useMemo, useRef, useState} from 'react'
2
2
  import styled from 'styled-components'
3
3
  import {_isScrollable} from '../../helpers'
4
4
  import {useForwardedRef} from '../../hooks'
5
+ import {_elementSizeObserver} from '../../observers'
5
6
  import {StackProps} from '../../primitives'
6
7
  import {useTheme} from '../../theme'
7
8
 
@@ -86,18 +87,18 @@ export const VirtualList = forwardRef(function VirtualList(
86
87
 
87
88
  scrollEl.addEventListener('scroll', handleScroll, {passive: true})
88
89
 
89
- const ro = new ResizeObserver((entries) => {
90
- setScrollHeight(entries[0].contentRect.height)
91
- })
92
-
93
- ro.observe(scrollEl)
90
+ const disposeElementSizeListener = _elementSizeObserver.subscribe(
91
+ scrollEl,
92
+ (scrollElementSize) => {
93
+ setScrollHeight(scrollElementSize.content.height)
94
+ }
95
+ )
94
96
 
95
97
  handleScroll()
96
98
 
97
99
  return () => {
98
100
  scrollEl.removeEventListener('scroll', handleScroll)
99
- ro.unobserve(scrollEl)
100
- ro.disconnect()
101
+ disposeElementSizeListener()
101
102
  }
102
103
  }
103
104
 
@@ -1,6 +0,0 @@
1
- /**
2
- * This API might change. DO NOT USE IN PRODUCTION.
3
- * @beta
4
- */
5
- export declare function useResponsiveProp<T = number>(val: T | T[] | undefined, defaultVal?: T[]): T[];
6
- //# sourceMappingURL=useResponsiveProp.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useResponsiveProp.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useResponsiveProp.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,SAAS,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAE7F"}