@sanity/ui 1.7.3 → 1.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.d.ts +19 -19
- package/dist/index.esm.js +338 -101
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +338 -101
- package/dist/index.js.map +1 -1
- package/package.json +33 -33
- package/src/__workshop__/constants.ts +2 -2
- package/src/components/autocomplete/__mocks__/apiStore.ts +2 -2
- package/src/components/autocomplete/__workshop__/async.tsx +2 -2
- package/src/components/autocomplete/__workshop__/constrainedHeight.tsx +2 -2
- package/src/components/autocomplete/__workshop__/custom.tsx +1 -1
- package/src/components/autocomplete/__workshop__/fullscreen.tsx +6 -6
- package/src/components/autocomplete/autocomplete.tsx +20 -20
- package/src/components/autocomplete/autocompleteOption.tsx +1 -1
- package/src/components/autocomplete/autocompleteReducer.ts +1 -1
- package/src/components/breadcrumbs/breadcrumbs.tsx +2 -2
- package/src/components/dialog/dialog.tsx +11 -11
- package/src/components/dialog/dialogProvider.tsx +1 -1
- package/src/components/dialog/styles.ts +1 -1
- package/src/components/hotkeys/hotkeys.tsx +1 -1
- package/src/components/menu/__workshop__/asComponent.tsx +1 -1
- package/src/components/menu/__workshop__/menuButton.tsx +1 -1
- package/src/components/menu/menu.test.tsx +3 -3
- package/src/components/menu/menu.tsx +7 -7
- package/src/components/menu/menuButton.tsx +7 -7
- package/src/components/menu/menuGroup.tsx +4 -4
- package/src/components/menu/menuItem.tsx +4 -4
- package/src/components/menu/useMenuController.ts +3 -3
- package/src/components/skeleton/skeleton.tsx +2 -2
- package/src/components/skeleton/textSkeleton.tsx +25 -19
- package/src/components/tab/tab.tsx +2 -2
- package/src/components/tab/tabList.tsx +3 -3
- package/src/components/tab/tabPanel.tsx +1 -1
- package/src/components/toast/toast.test.tsx +2 -1
- package/src/components/toast/toast.tsx +1 -1
- package/src/components/toast/toastProvider.tsx +1 -1
- package/src/components/tree/__workshop__/basic.perf.ts +1 -1
- package/src/components/tree/helpers.ts +2 -2
- package/src/components/tree/style.ts +1 -1
- package/src/components/tree/tree.tsx +9 -9
- package/src/components/tree/treeGroup.tsx +1 -1
- package/src/components/tree/treeItem.tsx +4 -4
- package/src/hooks/useArrayProp.ts +2 -2
- package/src/hooks/useClickOutside.ts +2 -2
- package/src/hooks/useCustomValidity.ts +1 -1
- package/src/hooks/useMediaIndex/useMediaIndex.test.tsx +4 -4
- package/src/hooks/usePrefersDark.hydration.test.tsx +2 -1
- package/src/hooks/usePrefersReducedMotion.hydration.test.tsx +2 -1
- package/src/lib/globalScope.ts +1 -0
- package/src/primitives/_selectable/selectable.tsx +1 -1
- package/src/primitives/_selectable/style.ts +1 -1
- package/src/primitives/avatar/avatar.tsx +3 -3
- package/src/primitives/avatar/avatarCounter.tsx +5 -3
- package/src/primitives/avatar/avatarStack.tsx +2 -2
- package/src/primitives/avatar/styles.ts +1 -1
- package/src/primitives/badge/badge.tsx +2 -2
- package/src/primitives/box/box.tsx +2 -2
- package/src/primitives/button/button.tsx +2 -2
- package/src/primitives/button/styles.ts +1 -1
- package/src/primitives/card/__workshop__/asComponent.tsx +1 -1
- package/src/primitives/card/__workshop__/selected.tsx +19 -15
- package/src/primitives/card/card.tsx +1 -1
- package/src/primitives/card/styles.ts +1 -1
- package/src/primitives/checkbox/checkbox.tsx +1 -1
- package/src/primitives/code/code.tsx +2 -1
- package/src/primitives/container/container.tsx +2 -2
- package/src/primitives/container/styles.ts +1 -1
- package/src/primitives/flex/flex.tsx +2 -2
- package/src/primitives/grid/grid.tsx +1 -1
- package/src/primitives/heading/heading.tsx +1 -1
- package/src/primitives/heading/styles.ts +4 -2
- package/src/primitives/helpers.ts +2 -2
- package/src/primitives/inline/inline.tsx +2 -2
- package/src/primitives/kbd/kbd.tsx +1 -1
- package/src/primitives/label/label.tsx +1 -1
- package/src/primitives/label/styles.ts +1 -1
- package/src/primitives/popover/__workshop__/RecursiveStory.tsx +1 -1
- package/src/primitives/popover/__workshop__/TestStory.tsx +1 -1
- package/src/primitives/popover/helpers.ts +1 -1
- package/src/primitives/popover/popover.tsx +11 -11
- package/src/primitives/popover/popoverArrow.tsx +1 -1
- package/src/primitives/popover/popoverCard.tsx +4 -4
- package/src/primitives/radio/radio.tsx +1 -1
- package/src/primitives/select/select.tsx +1 -1
- package/src/primitives/select/styles.ts +2 -2
- package/src/primitives/spinner/spinner.tsx +1 -1
- package/src/primitives/stack/stack.tsx +1 -1
- package/src/primitives/stack/styles.ts +1 -1
- package/src/primitives/switch/__workshop__/props.tsx +1 -1
- package/src/primitives/switch/styles.ts +1 -1
- package/src/primitives/switch/switch.tsx +1 -1
- package/src/primitives/text/__workshop__/colored.tsx +9 -8
- package/src/primitives/text/styles.ts +4 -2
- package/src/primitives/text/text.tsx +2 -2
- package/src/primitives/textArea/textArea.tsx +3 -3
- package/src/primitives/textInput/__workshop__/plain.tsx +2 -2
- package/src/primitives/textInput/textInput.tsx +11 -11
- package/src/primitives/tooltip/tooltip.tsx +8 -7
- package/src/primitives/tooltip/tooltipArrow.tsx +1 -1
- package/src/styles/border/borderStyle.ts +5 -5
- package/src/styles/colorVars/colorVarsStyle.ts +1 -1
- package/src/styles/flex/flexItemStyle.ts +1 -1
- package/src/styles/flex/flexStyle.ts +3 -3
- package/src/styles/font/responsiveFont.ts +1 -1
- package/src/styles/font/textAlignStyle.ts +1 -1
- package/src/styles/helpers.ts +3 -3
- package/src/styles/input/responsiveInputPaddingStyle.ts +4 -4
- package/src/styles/input/textInputStyle.ts +2 -2
- package/src/styles/margin/marginStyle.ts +1 -1
- package/src/styles/padding/paddingStyle.ts +1 -1
- package/src/theme/__workshop__/color.tsx +1 -0
- package/src/theme/lib/theme/color/button/createButtonModes.ts +1 -1
- package/src/theme/lib/theme/color/button/createButtonTones.ts +1 -1
- package/src/theme/lib/theme/color/card/createCardStates.ts +1 -1
- package/src/theme/lib/theme/color/factory.ts +2 -2
- package/src/theme/lib/theme/color/input/createInputModes.ts +1 -1
- package/src/theme/lib/theme/color/muted/createMuted.ts +1 -1
- package/src/theme/lib/theme/color/selectable/createSelectableTones.ts +2 -2
- package/src/theme/lib/theme/color/solid/createSolidTones.ts +1 -1
- package/src/theme/lib/theme/color/spot/createSpot.ts +1 -1
- package/src/theme/lib/theme/shadow.ts +1 -1
- package/src/theme/lib/theme/theme.ts +1 -1
- package/src/theme/theme.test.tsx +2 -1
- package/src/theme/themeProvider.tsx +1 -1
- package/src/theme/useRootTheme.ts +1 -0
- package/src/utils/boundaryElement/boundaryElement.test.tsx +2 -1
- package/src/utils/elementQuery/elementQuery.tsx +2 -2
- package/src/utils/layer/layer.test.tsx +2 -1
- package/src/utils/layer/layer.tsx +3 -3
- package/src/utils/layer/layerProvider.tsx +2 -2
- package/src/utils/portal/portal.test.tsx +2 -1
- package/src/utils/srOnly/srOnly.tsx +1 -1
- package/src/utils/virtualList/__workshop__/changingProps.tsx +1 -1
- package/src/utils/virtualList/virtualList.tsx +2 -1
|
@@ -51,7 +51,7 @@ export interface MenuButtonProps {
|
|
|
51
51
|
*/
|
|
52
52
|
export const MenuButton = forwardRef(function MenuButton(
|
|
53
53
|
props: MenuButtonProps,
|
|
54
|
-
ref: React.ForwardedRef<HTMLButtonElement | null
|
|
54
|
+
ref: React.ForwardedRef<HTMLButtonElement | null>,
|
|
55
55
|
) {
|
|
56
56
|
const {
|
|
57
57
|
__unstable_disableRestoreFocusOnClose: disableRestoreFocusOnClose = false,
|
|
@@ -139,7 +139,7 @@ export const MenuButton = forwardRef(function MenuButton(
|
|
|
139
139
|
|
|
140
140
|
setOpen(false)
|
|
141
141
|
},
|
|
142
|
-
[buttonElement, menuElements]
|
|
142
|
+
[buttonElement, menuElements],
|
|
143
143
|
)
|
|
144
144
|
|
|
145
145
|
const handleMenuEscape = useCallback(() => {
|
|
@@ -164,7 +164,7 @@ export const MenuButton = forwardRef(function MenuButton(
|
|
|
164
164
|
|
|
165
165
|
setOpen(false)
|
|
166
166
|
},
|
|
167
|
-
[menuElements]
|
|
167
|
+
[menuElements],
|
|
168
168
|
)
|
|
169
169
|
|
|
170
170
|
const handleItemClick = useCallback(() => {
|
|
@@ -203,7 +203,7 @@ export const MenuButton = forwardRef(function MenuButton(
|
|
|
203
203
|
handleBlur,
|
|
204
204
|
registerElement,
|
|
205
205
|
shouldFocus,
|
|
206
|
-
]
|
|
206
|
+
],
|
|
207
207
|
)
|
|
208
208
|
|
|
209
209
|
const menu = isElement(menuProp) ? cloneElement(menuProp, menuProps) : null
|
|
@@ -218,7 +218,7 @@ export const MenuButton = forwardRef(function MenuButton(
|
|
|
218
218
|
|
|
219
219
|
setButtonElement(el)
|
|
220
220
|
},
|
|
221
|
-
[ref]
|
|
221
|
+
[ref],
|
|
222
222
|
)
|
|
223
223
|
|
|
224
224
|
const button = useMemo(
|
|
@@ -235,7 +235,7 @@ export const MenuButton = forwardRef(function MenuButton(
|
|
|
235
235
|
selected: open,
|
|
236
236
|
})
|
|
237
237
|
: null,
|
|
238
|
-
[buttonProp, handleButtonClick, handleButtonKeyDown, id, open, setButtonRef]
|
|
238
|
+
[buttonProp, handleButtonClick, handleButtonKeyDown, id, open, setButtonRef],
|
|
239
239
|
)
|
|
240
240
|
|
|
241
241
|
const popoverProps: MenuButtonProps['popover'] = useMemo(
|
|
@@ -257,7 +257,7 @@ export const MenuButton = forwardRef(function MenuButton(
|
|
|
257
257
|
deprecated_portal,
|
|
258
258
|
deprecated_preventOverflow,
|
|
259
259
|
popover,
|
|
260
|
-
]
|
|
260
|
+
],
|
|
261
261
|
)
|
|
262
262
|
|
|
263
263
|
return (
|
|
@@ -28,7 +28,7 @@ export interface MenuGroupProps {
|
|
|
28
28
|
*/
|
|
29
29
|
export function MenuGroup(
|
|
30
30
|
props: MenuGroupProps &
|
|
31
|
-
Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref' | 'tabIndex'
|
|
31
|
+
Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref' | 'tabIndex'>,
|
|
32
32
|
): React.ReactElement {
|
|
33
33
|
const {
|
|
34
34
|
as = 'button',
|
|
@@ -66,7 +66,7 @@ export function MenuGroup(
|
|
|
66
66
|
onItemMouseEnter(event)
|
|
67
67
|
setOpen(true)
|
|
68
68
|
},
|
|
69
|
-
[onItemMouseEnter]
|
|
69
|
+
[onItemMouseEnter],
|
|
70
70
|
)
|
|
71
71
|
|
|
72
72
|
const handleMenuKeyDown = useCallback(
|
|
@@ -81,7 +81,7 @@ export function MenuGroup(
|
|
|
81
81
|
})
|
|
82
82
|
}
|
|
83
83
|
},
|
|
84
|
-
[rootElement]
|
|
84
|
+
[rootElement],
|
|
85
85
|
)
|
|
86
86
|
|
|
87
87
|
const handleClick = useCallback(
|
|
@@ -96,7 +96,7 @@ export function MenuGroup(
|
|
|
96
96
|
shouldFocusRef.current = null
|
|
97
97
|
})
|
|
98
98
|
},
|
|
99
|
-
[onClick]
|
|
99
|
+
[onClick],
|
|
100
100
|
)
|
|
101
101
|
|
|
102
102
|
const handleChildItemClick = useCallback(() => {
|
|
@@ -38,7 +38,7 @@ export interface MenuItemProps extends ResponsivePaddingProps, ResponsiveRadiusP
|
|
|
38
38
|
export const MenuItem = forwardRef(function MenuItem(
|
|
39
39
|
props: MenuItemProps &
|
|
40
40
|
Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref' | 'selected' | 'tabIndex'>,
|
|
41
|
-
forwardedRef: React.ForwardedRef<HTMLDivElement
|
|
41
|
+
forwardedRef: React.ForwardedRef<HTMLDivElement>,
|
|
42
42
|
) {
|
|
43
43
|
const {
|
|
44
44
|
as = 'button',
|
|
@@ -85,7 +85,7 @@ export const MenuItem = forwardRef(function MenuItem(
|
|
|
85
85
|
if (onClick) onClick(event)
|
|
86
86
|
if (onItemClick) onItemClick()
|
|
87
87
|
},
|
|
88
|
-
[disabled, onClick, onItemClick]
|
|
88
|
+
[disabled, onClick, onItemClick],
|
|
89
89
|
)
|
|
90
90
|
|
|
91
91
|
const paddingProps = useMemo(
|
|
@@ -98,7 +98,7 @@ export const MenuItem = forwardRef(function MenuItem(
|
|
|
98
98
|
paddingBottom,
|
|
99
99
|
paddingLeft,
|
|
100
100
|
}),
|
|
101
|
-
[padding, paddingX, paddingY, paddingTop, paddingRight, paddingBottom, paddingLeft]
|
|
101
|
+
[padding, paddingX, paddingY, paddingTop, paddingRight, paddingBottom, paddingLeft],
|
|
102
102
|
)
|
|
103
103
|
|
|
104
104
|
const setRef = useCallback(
|
|
@@ -106,7 +106,7 @@ export const MenuItem = forwardRef(function MenuItem(
|
|
|
106
106
|
ref.current = el
|
|
107
107
|
setRootElement(el)
|
|
108
108
|
},
|
|
109
|
-
[ref]
|
|
109
|
+
[ref],
|
|
110
110
|
)
|
|
111
111
|
|
|
112
112
|
return (
|
|
@@ -61,7 +61,7 @@ export function useMenuController(props: {
|
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
},
|
|
64
|
-
[rootElement, setActiveIndex]
|
|
64
|
+
[rootElement, setActiveIndex],
|
|
65
65
|
)
|
|
66
66
|
|
|
67
67
|
const handleKeyDown = useCallback(
|
|
@@ -159,7 +159,7 @@ export function useMenuController(props: {
|
|
|
159
159
|
onKeyDown(event)
|
|
160
160
|
}
|
|
161
161
|
},
|
|
162
|
-
[onKeyDown, originElement, setActiveIndex]
|
|
162
|
+
[onKeyDown, originElement, setActiveIndex],
|
|
163
163
|
)
|
|
164
164
|
|
|
165
165
|
const handleItemMouseEnter = useCallback(
|
|
@@ -169,7 +169,7 @@ export function useMenuController(props: {
|
|
|
169
169
|
|
|
170
170
|
setActiveIndex(currentIndex)
|
|
171
171
|
},
|
|
172
|
-
[setActiveIndex]
|
|
172
|
+
[setActiveIndex],
|
|
173
173
|
)
|
|
174
174
|
|
|
175
175
|
const handleItemMouseLeave = useCallback(() => {
|
|
@@ -8,7 +8,7 @@ import {skeletonStyle} from './styles'
|
|
|
8
8
|
|
|
9
9
|
const Root = styled(Box)<{$animated: boolean; $visible: boolean} & ResponsiveRadiusStyleProps>(
|
|
10
10
|
responsiveRadiusStyle,
|
|
11
|
-
skeletonStyle
|
|
11
|
+
skeletonStyle,
|
|
12
12
|
)
|
|
13
13
|
|
|
14
14
|
/**
|
|
@@ -26,7 +26,7 @@ export interface SkeletonProps extends ResponsiveRadiusProps, Omit<BoxProps, 'ch
|
|
|
26
26
|
*/
|
|
27
27
|
export const Skeleton = forwardRef(function Skeleton(
|
|
28
28
|
props: SkeletonProps & React.HTMLProps<HTMLDivElement>,
|
|
29
|
-
ref: React.Ref<HTMLDivElement
|
|
29
|
+
ref: React.Ref<HTMLDivElement>,
|
|
30
30
|
) {
|
|
31
31
|
const {animated = false, delay, radius, ...restProps} = props
|
|
32
32
|
const [visible, setVisible] = useState<boolean>(delay ? false : true)
|
|
@@ -5,21 +5,27 @@ import {_responsive} from '../../styles'
|
|
|
5
5
|
import {Theme, ThemeFontKey} from '../../theme'
|
|
6
6
|
import {Skeleton, SkeletonProps} from './skeleton'
|
|
7
7
|
|
|
8
|
-
const Root = styled(Skeleton)<{$size: number[]; $style: ThemeFontKey}>(
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
8
|
+
const Root = styled(Skeleton)<{$size: number[]; $style: ThemeFontKey}>(({
|
|
9
|
+
$size,
|
|
10
|
+
$style,
|
|
11
|
+
theme,
|
|
12
|
+
}: {
|
|
13
|
+
$size: number[]
|
|
14
|
+
$style: ThemeFontKey
|
|
15
|
+
theme: Theme
|
|
16
|
+
}) => {
|
|
17
|
+
const {media} = theme.sanity
|
|
18
|
+
const font = theme.sanity.fonts[$style]
|
|
19
|
+
|
|
20
|
+
const styles = _responsive(media, $size, (sizeIndex) => {
|
|
21
|
+
const fontSize = font.sizes[sizeIndex]
|
|
22
|
+
const capHeight = fontSize.lineHeight - fontSize.ascenderHeight - fontSize.descenderHeight
|
|
23
|
+
|
|
24
|
+
return {height: capHeight}
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
return styles
|
|
28
|
+
})
|
|
23
29
|
|
|
24
30
|
/**
|
|
25
31
|
* This API might change. DO NOT USE IN PRODUCTION.
|
|
@@ -60,7 +66,7 @@ export interface CodeSkeletonProps extends SkeletonProps {
|
|
|
60
66
|
export const TextSkeleton = forwardRef(function TextSkeleton(
|
|
61
67
|
props: TextSkeletonProps &
|
|
62
68
|
Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'children' | 'height' | 'size'>,
|
|
63
|
-
ref: React.Ref<HTMLDivElement
|
|
69
|
+
ref: React.Ref<HTMLDivElement>,
|
|
64
70
|
) {
|
|
65
71
|
const {size = 2, ...restProps} = props
|
|
66
72
|
const $size = useArrayProp(size)
|
|
@@ -75,7 +81,7 @@ export const TextSkeleton = forwardRef(function TextSkeleton(
|
|
|
75
81
|
export const LabelSkeleton = forwardRef(function TextSkeleton(
|
|
76
82
|
props: LabelSkeletonProps &
|
|
77
83
|
Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'children' | 'height' | 'size'>,
|
|
78
|
-
ref: React.Ref<HTMLDivElement
|
|
84
|
+
ref: React.Ref<HTMLDivElement>,
|
|
79
85
|
) {
|
|
80
86
|
const {size = 2, ...restProps} = props
|
|
81
87
|
const $size = useArrayProp(size)
|
|
@@ -90,7 +96,7 @@ export const LabelSkeleton = forwardRef(function TextSkeleton(
|
|
|
90
96
|
export const HeadingSkeleton = forwardRef(function TextSkeleton(
|
|
91
97
|
props: HeadingSkeletonProps &
|
|
92
98
|
Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'children' | 'height' | 'size'>,
|
|
93
|
-
ref: React.Ref<HTMLDivElement
|
|
99
|
+
ref: React.Ref<HTMLDivElement>,
|
|
94
100
|
) {
|
|
95
101
|
const {size = 2, ...restProps} = props
|
|
96
102
|
const $size = useArrayProp(size)
|
|
@@ -105,7 +111,7 @@ export const HeadingSkeleton = forwardRef(function TextSkeleton(
|
|
|
105
111
|
export const CodeSkeleton = forwardRef(function TextSkeleton(
|
|
106
112
|
props: CodeSkeletonProps &
|
|
107
113
|
Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'children' | 'height' | 'size'>,
|
|
108
|
-
ref: React.Ref<HTMLDivElement
|
|
114
|
+
ref: React.Ref<HTMLDivElement>,
|
|
109
115
|
) {
|
|
110
116
|
const {size = 2, ...restProps} = props
|
|
111
117
|
const $size = useArrayProp(size)
|
|
@@ -27,7 +27,7 @@ export interface TabProps {
|
|
|
27
27
|
export const Tab = forwardRef(function Tab(
|
|
28
28
|
props: TabProps &
|
|
29
29
|
Omit<React.HTMLProps<HTMLButtonElement>, 'aria-controls' | 'as' | 'id' | 'label' | 'type'>,
|
|
30
|
-
forwardedRef: React.ForwardedRef<HTMLButtonElement
|
|
30
|
+
forwardedRef: React.ForwardedRef<HTMLButtonElement>,
|
|
31
31
|
) {
|
|
32
32
|
const {
|
|
33
33
|
icon,
|
|
@@ -53,7 +53,7 @@ export const Tab = forwardRef(function Tab(
|
|
|
53
53
|
focusedRef.current = true
|
|
54
54
|
if (onFocus) onFocus(event)
|
|
55
55
|
},
|
|
56
|
-
[onFocus]
|
|
56
|
+
[onFocus],
|
|
57
57
|
)
|
|
58
58
|
|
|
59
59
|
const ref = useForwardedRef(forwardedRef)
|
|
@@ -17,7 +17,7 @@ function _isReactElement(node: unknown): node is React.ReactElement {
|
|
|
17
17
|
*/
|
|
18
18
|
export const TabList = forwardRef(function TabList(
|
|
19
19
|
props: TabListProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height'>,
|
|
20
|
-
ref
|
|
20
|
+
ref,
|
|
21
21
|
) {
|
|
22
22
|
const {children: childrenProp, ...restProps} = props
|
|
23
23
|
const [focusedIndex, setFocusedIndex] = useState(-1)
|
|
@@ -29,7 +29,7 @@ export const TabList = forwardRef(function TabList(
|
|
|
29
29
|
focused: focusedIndex === childIndex,
|
|
30
30
|
key: childIndex,
|
|
31
31
|
onFocus: () => handleTabFocus(childIndex),
|
|
32
|
-
})
|
|
32
|
+
}),
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
const numTabs = tabs.length
|
|
@@ -48,7 +48,7 @@ export const TabList = forwardRef(function TabList(
|
|
|
48
48
|
setFocusedIndex((prevIndex) => (prevIndex + 1) % numTabs)
|
|
49
49
|
}
|
|
50
50
|
},
|
|
51
|
-
[numTabs]
|
|
51
|
+
[numTabs],
|
|
52
52
|
)
|
|
53
53
|
|
|
54
54
|
return (
|
|
@@ -18,7 +18,7 @@ export interface TabPanelProps extends BoxProps {
|
|
|
18
18
|
export const TabPanel = forwardRef(function TabPanel(
|
|
19
19
|
props: TabPanelProps &
|
|
20
20
|
Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'aria-labelledby' | 'id' | 'role'>,
|
|
21
|
-
ref: React.ForwardedRef<HTMLDivElement
|
|
21
|
+
ref: React.ForwardedRef<HTMLDivElement>,
|
|
22
22
|
) {
|
|
23
23
|
const {flex, ...restProps} = props
|
|
24
24
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** @jest-environment jsdom */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
3
|
|
|
3
4
|
import {render} from '../../../test'
|
|
4
5
|
import {ToastContext} from './toastContext'
|
|
@@ -94,7 +95,7 @@ describe('components/toast', () => {
|
|
|
94
95
|
render(<Root />)
|
|
95
96
|
|
|
96
97
|
expect(log.mock.calls[0][0].message).toEqual(
|
|
97
|
-
'useToast(): the context value is not compatible'
|
|
98
|
+
'useToast(): the context value is not compatible',
|
|
98
99
|
)
|
|
99
100
|
})
|
|
100
101
|
})
|
|
@@ -40,7 +40,7 @@ const TextBox = styled(Flex)`
|
|
|
40
40
|
* @public
|
|
41
41
|
*/
|
|
42
42
|
export function Toast(
|
|
43
|
-
props: ToastProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref' | 'title'
|
|
43
|
+
props: ToastProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref' | 'title'>,
|
|
44
44
|
): React.ReactElement {
|
|
45
45
|
const {closable, description, onClose, title, status, ...restProps} = props
|
|
46
46
|
const cardTone = status ? STATUS_CARD_TONE[status] : 'default'
|
|
@@ -3,7 +3,7 @@ import {TreeState} from './types'
|
|
|
3
3
|
export function _findPrevItemElement(
|
|
4
4
|
state: TreeState,
|
|
5
5
|
itemElements: HTMLElement[],
|
|
6
|
-
focusedElement: HTMLElement
|
|
6
|
+
focusedElement: HTMLElement,
|
|
7
7
|
): HTMLElement | null {
|
|
8
8
|
const idx = itemElements.indexOf(focusedElement)
|
|
9
9
|
const els = itemElements.slice(0, idx)
|
|
@@ -46,7 +46,7 @@ export function _findPrevItemElement(
|
|
|
46
46
|
export function _findNextItemElement(
|
|
47
47
|
state: TreeState,
|
|
48
48
|
itemElements: HTMLElement[],
|
|
49
|
-
focusedElement: HTMLElement
|
|
49
|
+
focusedElement: HTMLElement,
|
|
50
50
|
): HTMLElement | null {
|
|
51
51
|
const idx = itemElements.indexOf(focusedElement)
|
|
52
52
|
const els = itemElements.slice(idx)
|
|
@@ -92,7 +92,7 @@ export interface TreeItemBoxStyleProps {
|
|
|
92
92
|
}
|
|
93
93
|
|
|
94
94
|
export function treeItemBoxStyle(
|
|
95
|
-
props: TreeItemBoxStyleProps & ThemeProps
|
|
95
|
+
props: TreeItemBoxStyleProps & ThemeProps,
|
|
96
96
|
): FlattenSimpleInterpolation {
|
|
97
97
|
const {$level, theme} = props
|
|
98
98
|
const {space} = theme.sanity
|
|
@@ -21,7 +21,7 @@ export const Tree = memo(
|
|
|
21
21
|
forwardRef(function Tree(
|
|
22
22
|
props: TreeProps &
|
|
23
23
|
Omit<React.HTMLProps<HTMLDivElement>, 'align' | 'as' | 'height' | 'ref' | 'role' | 'wrap'>,
|
|
24
|
-
ref: React.ForwardedRef<HTMLDivElement
|
|
24
|
+
ref: React.ForwardedRef<HTMLDivElement>,
|
|
25
25
|
): React.ReactElement {
|
|
26
26
|
const {children, space = 1, onFocus, ...restProps} = props
|
|
27
27
|
const forwardedRef = useForwardedRef(ref)
|
|
@@ -58,7 +58,7 @@ export const Tree = memo(
|
|
|
58
58
|
})
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
|
-
[]
|
|
61
|
+
[],
|
|
62
62
|
)
|
|
63
63
|
|
|
64
64
|
const setExpanded = useCallback((path: string, expanded: boolean) => {
|
|
@@ -83,7 +83,7 @@ export const Tree = memo(
|
|
|
83
83
|
space,
|
|
84
84
|
state,
|
|
85
85
|
}),
|
|
86
|
-
[focusedElement, itemElements, path, registerItem, setExpanded, space, state]
|
|
86
|
+
[focusedElement, itemElements, path, registerItem, setExpanded, space, state],
|
|
87
87
|
)
|
|
88
88
|
|
|
89
89
|
const handleKeyDown = useCallback(
|
|
@@ -96,7 +96,7 @@ export const Tree = memo(
|
|
|
96
96
|
const nextEl = _findNextItemElement(
|
|
97
97
|
stateRef.current,
|
|
98
98
|
itemElements,
|
|
99
|
-
focusedElementRef.current
|
|
99
|
+
focusedElementRef.current,
|
|
100
100
|
)
|
|
101
101
|
|
|
102
102
|
if (nextEl) {
|
|
@@ -113,7 +113,7 @@ export const Tree = memo(
|
|
|
113
113
|
const prevEl = _findPrevItemElement(
|
|
114
114
|
stateRef.current,
|
|
115
115
|
itemElements,
|
|
116
|
-
focusedElementRef.current
|
|
116
|
+
focusedElementRef.current,
|
|
117
117
|
)
|
|
118
118
|
|
|
119
119
|
if (prevEl) {
|
|
@@ -180,7 +180,7 @@ export const Tree = memo(
|
|
|
180
180
|
return
|
|
181
181
|
}
|
|
182
182
|
},
|
|
183
|
-
[itemElements]
|
|
183
|
+
[itemElements],
|
|
184
184
|
)
|
|
185
185
|
|
|
186
186
|
const handleFocus = useCallback(
|
|
@@ -190,13 +190,13 @@ export const Tree = memo(
|
|
|
190
190
|
// Call the element's `focus` handler
|
|
191
191
|
onFocus?.(event)
|
|
192
192
|
},
|
|
193
|
-
[onFocus]
|
|
193
|
+
[onFocus],
|
|
194
194
|
)
|
|
195
195
|
|
|
196
196
|
useEffect(() => {
|
|
197
197
|
if (!forwardedRef.current) return
|
|
198
198
|
const _itemElements = Array.from(
|
|
199
|
-
forwardedRef.current.querySelectorAll('[data-ui="TreeItem"]')
|
|
199
|
+
forwardedRef.current.querySelectorAll('[data-ui="TreeItem"]'),
|
|
200
200
|
) as HTMLElement[]
|
|
201
201
|
|
|
202
202
|
setItemElements(_itemElements)
|
|
@@ -218,7 +218,7 @@ export const Tree = memo(
|
|
|
218
218
|
</Stack>
|
|
219
219
|
</TreeContext.Provider>
|
|
220
220
|
)
|
|
221
|
-
})
|
|
221
|
+
}),
|
|
222
222
|
)
|
|
223
223
|
|
|
224
224
|
Tree.displayName = 'Tree'
|
|
@@ -8,7 +8,7 @@ export interface TreeGroupProps {
|
|
|
8
8
|
|
|
9
9
|
export const TreeGroup = memo(function TreeGroup(
|
|
10
10
|
props: TreeGroupProps &
|
|
11
|
-
Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref' | 'role' | 'wrap'
|
|
11
|
+
Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'ref' | 'role' | 'wrap'>,
|
|
12
12
|
): React.ReactElement {
|
|
13
13
|
const {children, expanded = false, ...restProps} = props
|
|
14
14
|
const tree = useTree()
|
|
@@ -45,7 +45,7 @@ const ToggleArrowText = styled(Text)`
|
|
|
45
45
|
* @beta
|
|
46
46
|
*/
|
|
47
47
|
export const TreeItem = memo(function TreeItem(
|
|
48
|
-
props: TreeItemProps & Omit<React.HTMLProps<HTMLLIElement>, 'as' | 'ref' | 'role'
|
|
48
|
+
props: TreeItemProps & Omit<React.HTMLProps<HTMLLIElement>, 'as' | 'ref' | 'role'>,
|
|
49
49
|
): React.ReactElement {
|
|
50
50
|
const {
|
|
51
51
|
children,
|
|
@@ -78,7 +78,7 @@ export const TreeItem = memo(function TreeItem(
|
|
|
78
78
|
const tabIndex = tree.focusedElement && tree.focusedElement === rootRef.current ? 0 : -1
|
|
79
79
|
const contextValue = useMemo(
|
|
80
80
|
() => ({...tree, level: tree.level + 1, path: itemPath}),
|
|
81
|
-
[itemPath, tree]
|
|
81
|
+
[itemPath, tree],
|
|
82
82
|
)
|
|
83
83
|
|
|
84
84
|
const handleClick = useCallback(
|
|
@@ -97,7 +97,7 @@ export const TreeItem = memo(function TreeItem(
|
|
|
97
97
|
setFocusedElement(rootRef.current)
|
|
98
98
|
}
|
|
99
99
|
},
|
|
100
|
-
[expanded, itemKey, onClick, setExpanded, setFocusedElement]
|
|
100
|
+
[expanded, itemKey, onClick, setExpanded, setFocusedElement],
|
|
101
101
|
)
|
|
102
102
|
|
|
103
103
|
const handleKeyDown = useCallback(
|
|
@@ -108,7 +108,7 @@ export const TreeItem = memo(function TreeItem(
|
|
|
108
108
|
el?.click()
|
|
109
109
|
}
|
|
110
110
|
},
|
|
111
|
-
[focused]
|
|
111
|
+
[focused],
|
|
112
112
|
)
|
|
113
113
|
|
|
114
114
|
useEffect(() => {
|
|
@@ -10,7 +10,7 @@ export type ArrayPropPrimitive = string | number | boolean | undefined | null
|
|
|
10
10
|
*/
|
|
11
11
|
export function useArrayProp<T extends ArrayPropPrimitive = ArrayPropPrimitive>(
|
|
12
12
|
val: T | T[] | undefined,
|
|
13
|
-
defaultVal?: T[]
|
|
13
|
+
defaultVal?: T[],
|
|
14
14
|
): T[] {
|
|
15
15
|
// JSON.stringify is fast, but it's not faster than useMemo's referencial equality check
|
|
16
16
|
const __perf_hash__ = useMemo(() => JSON.stringify(val ?? defaultVal), [defaultVal, val])
|
|
@@ -20,6 +20,6 @@ export function useArrayProp<T extends ArrayPropPrimitive = ArrayPropPrimitive>(
|
|
|
20
20
|
|
|
21
21
|
// Improve performance: Keep object identify for a given hash of the value
|
|
22
22
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
23
|
-
[__perf_hash__]
|
|
23
|
+
[__perf_hash__],
|
|
24
24
|
)
|
|
25
25
|
}
|
|
@@ -8,7 +8,7 @@ export type ClickOutsideListener = (event: MouseEvent) => void
|
|
|
8
8
|
|
|
9
9
|
function _getElements(
|
|
10
10
|
element: HTMLElement | null,
|
|
11
|
-
elementsArg: Array<HTMLElement | HTMLElement[] | null
|
|
11
|
+
elementsArg: Array<HTMLElement | HTMLElement[] | null>,
|
|
12
12
|
): HTMLElement[] {
|
|
13
13
|
const ret = [element]
|
|
14
14
|
|
|
@@ -29,7 +29,7 @@ function _getElements(
|
|
|
29
29
|
export function useClickOutside(
|
|
30
30
|
listener: ClickOutsideListener,
|
|
31
31
|
elementsArg: Array<HTMLElement | HTMLElement[] | null> = EMPTY_ARRAY,
|
|
32
|
-
boundaryElement?: HTMLElement | null
|
|
32
|
+
boundaryElement?: HTMLElement | null,
|
|
33
33
|
): (el: HTMLElement | null) => void {
|
|
34
34
|
const [element, setElement] = useState<HTMLElement | null>(null)
|
|
35
35
|
const [elements, setElements] = useState(() => _getElements(element, elementsArg))
|
|
@@ -5,7 +5,7 @@ import {useEffect} from 'react'
|
|
|
5
5
|
*/
|
|
6
6
|
export function useCustomValidity(
|
|
7
7
|
ref: {current: null | {setCustomValidity: (validity: string) => void}},
|
|
8
|
-
customValidity: string | undefined
|
|
8
|
+
customValidity: string | undefined,
|
|
9
9
|
): void {
|
|
10
10
|
useEffect(() => {
|
|
11
11
|
if (ref.current) {
|
|
@@ -15,8 +15,8 @@ describe('useMediaIndex', () => {
|
|
|
15
15
|
renderToStaticMarkup(
|
|
16
16
|
<ThemeProvider theme={studioTheme}>
|
|
17
17
|
<Log />
|
|
18
|
-
</ThemeProvider
|
|
19
|
-
)
|
|
18
|
+
</ThemeProvider>,
|
|
19
|
+
),
|
|
20
20
|
).toBe('mediaIndex: 0')
|
|
21
21
|
})
|
|
22
22
|
it(`SSR to markup for hydration doesn't throw`, () => {
|
|
@@ -24,8 +24,8 @@ describe('useMediaIndex', () => {
|
|
|
24
24
|
renderToString(
|
|
25
25
|
<ThemeProvider theme={studioTheme}>
|
|
26
26
|
<Log />
|
|
27
|
-
</ThemeProvider
|
|
28
|
-
)
|
|
27
|
+
</ThemeProvider>,
|
|
28
|
+
),
|
|
29
29
|
).toMatchInlineSnapshot(`"mediaIndex: <!-- -->0"`)
|
|
30
30
|
})
|
|
31
31
|
})
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** @jest-environment jsdom */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
3
|
/**
|
|
3
4
|
* As this hook is used for top-level theming it's likely to be called while server-rendering
|
|
4
5
|
* and that's why it's worth it to have a testing suite for hydration
|
|
@@ -23,7 +24,7 @@ describe('usePrefersDark SSR hydration', () => {
|
|
|
23
24
|
addEventListener: jest.fn(),
|
|
24
25
|
removeEventListener: jest.fn(),
|
|
25
26
|
matches: true,
|
|
26
|
-
} as any
|
|
27
|
+
}) as any
|
|
27
28
|
})
|
|
28
29
|
|
|
29
30
|
afterAll(() => {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
/** @jest-environment jsdom */
|
|
2
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
3
|
/**
|
|
3
4
|
* As this hook is used for top-level theming it's likely to be called while server-rendering
|
|
4
5
|
* and that's why it's worth it to have a testing suite for hydration
|
|
@@ -23,7 +24,7 @@ describe('usePrefersReducedMotion SSR hydration', () => {
|
|
|
23
24
|
addEventListener: jest.fn(),
|
|
24
25
|
removeEventListener: jest.fn(),
|
|
25
26
|
matches: true,
|
|
26
|
-
} as any
|
|
27
|
+
}) as any
|
|
27
28
|
})
|
|
28
29
|
|
|
29
30
|
afterAll(() => {
|
package/src/lib/globalScope.ts
CHANGED
|
@@ -9,5 +9,5 @@ import {selectableBaseStyle, selectableColorStyle, SelectableStyleProps} from '.
|
|
|
9
9
|
export const Selectable = styled(Box)<SelectableStyleProps & ResponsiveRadiusStyleProps>(
|
|
10
10
|
responsiveRadiusStyle,
|
|
11
11
|
selectableBaseStyle,
|
|
12
|
-
selectableColorStyle
|
|
12
|
+
selectableColorStyle,
|
|
13
13
|
)
|
|
@@ -33,7 +33,7 @@ export function selectableBaseStyle(): FlattenSimpleInterpolation {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
export function selectableColorStyle(
|
|
36
|
-
props: SelectableStyleProps & ThemeProps
|
|
36
|
+
props: SelectableStyleProps & ThemeProps,
|
|
37
37
|
): FlattenSimpleInterpolation {
|
|
38
38
|
const {$tone, theme} = props
|
|
39
39
|
const {base, muted, selectable} = theme.sanity.color
|
|
@@ -29,7 +29,7 @@ export interface AvatarProps {
|
|
|
29
29
|
|
|
30
30
|
const Root = styled.div<{$color: string; $size: AvatarSize[]}>(
|
|
31
31
|
responsiveAvatarSizeStyle,
|
|
32
|
-
avatarStyle.root
|
|
32
|
+
avatarStyle.root,
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
const Arrow = styled.div(avatarStyle.arrow)
|
|
@@ -45,7 +45,7 @@ const Initials = styled.div(avatarStyle.initials)
|
|
|
45
45
|
*/
|
|
46
46
|
export const Avatar = forwardRef(function Avatar(
|
|
47
47
|
props: AvatarProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'ref'>,
|
|
48
|
-
ref: React.ForwardedRef<HTMLDivElement
|
|
48
|
+
ref: React.ForwardedRef<HTMLDivElement>,
|
|
49
49
|
) {
|
|
50
50
|
const {
|
|
51
51
|
as: asProp,
|
|
@@ -72,7 +72,7 @@ export const Avatar = forwardRef(function Avatar(
|
|
|
72
72
|
|
|
73
73
|
const elementId = useId()
|
|
74
74
|
const [arrowPosition, setArrowPosition] = useState<AvatarPosition | undefined>(
|
|
75
|
-
animateArrowFrom || arrowPositionProp || 'inside'
|
|
75
|
+
animateArrowFrom || arrowPositionProp || 'inside',
|
|
76
76
|
)
|
|
77
77
|
|
|
78
78
|
const [imageFailed, setImageFailed] = useState<boolean>(false)
|