@sanity/ui 2.3.7-canary.0 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_chunks-cjs/getTheme_v2.js +319 -0
- package/dist/_chunks-cjs/getTheme_v2.js.map +1 -0
- package/dist/_chunks-es/getTheme_v2.mjs +320 -0
- package/dist/_chunks-es/getTheme_v2.mjs.map +1 -0
- package/dist/_legacy/getTheme_v2.esm.js +320 -0
- package/dist/_legacy/getTheme_v2.esm.js.map +1 -0
- package/dist/index.d.mts +2 -13
- package/dist/index.d.ts +2 -13
- package/dist/index.esm.js +2301 -2237
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +2304 -2241
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2301 -2237
- package/dist/index.mjs.map +1 -1
- package/dist/theme.esm.js +4 -315
- package/dist/theme.esm.js.map +1 -1
- package/dist/theme.js +36 -349
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +4 -315
- package/dist/theme.mjs.map +1 -1
- package/package.json +35 -31
- package/src/core/components/autocomplete/autocomplete.tsx +34 -31
- package/src/core/components/breadcrumbs/breadcrumbs.tsx +2 -3
- package/src/core/components/dialog/dialog.tsx +12 -23
- package/src/core/components/hotkeys/hotkeys.tsx +3 -3
- package/src/core/components/menu/menu.tsx +1 -5
- package/src/core/components/menu/menuButton.tsx +32 -17
- package/src/core/components/menu/menuGroup.tsx +5 -7
- package/src/core/components/menu/menuItem.tsx +6 -10
- package/src/core/components/skeleton/skeleton.tsx +11 -5
- package/src/core/components/skeleton/textSkeleton.tsx +7 -6
- package/src/core/components/toast/styles.ts +61 -0
- package/src/core/components/toast/toast.tsx +11 -16
- package/src/core/components/toast/toastProvider.tsx +25 -26
- package/src/core/components/tree/treeItem.tsx +44 -31
- package/src/core/hooks/useArrayProp.ts +10 -11
- package/src/core/primitives/avatar/avatar.tsx +15 -11
- package/src/core/primitives/avatar/avatarCounter.tsx +17 -11
- package/src/core/primitives/avatar/avatarStack.tsx +7 -3
- package/src/core/primitives/badge/badge.tsx +4 -7
- package/src/core/primitives/box/box.tsx +27 -53
- package/src/core/primitives/button/button.tsx +12 -11
- package/src/core/primitives/card/card.tsx +9 -17
- package/src/core/primitives/code/code.tsx +3 -4
- package/src/core/primitives/container/container.tsx +11 -4
- package/src/core/primitives/flex/flex.tsx +7 -13
- package/src/core/primitives/grid/grid.tsx +10 -19
- package/src/core/primitives/heading/heading.tsx +4 -7
- package/src/core/primitives/inline/inline.tsx +2 -3
- package/src/core/primitives/kbd/kbd.tsx +3 -4
- package/src/core/primitives/label/label.tsx +4 -7
- package/src/core/primitives/popover/popover.tsx +49 -49
- package/src/core/primitives/select/select.tsx +6 -12
- package/src/core/primitives/stack/stack.tsx +3 -4
- package/src/core/primitives/text/text.tsx +4 -7
- package/src/core/primitives/textArea/textArea.tsx +6 -12
- package/src/core/primitives/textInput/textInput.tsx +5 -6
- package/src/core/primitives/tooltip/tooltip.tsx +7 -14
- package/src/core/theme/themeProvider.tsx +6 -4
- package/src/core/utils/elementQuery/elementQuery.tsx +3 -4
- package/src/core/utils/layer/getLayerContext.test.ts +4 -0
- package/src/core/utils/layer/layer.test.tsx +2 -0
- package/src/core/utils/layer/layerProvider.tsx +43 -35
- package/src/core/utils/layer/types.ts +1 -0
- package/dist/index.compiled.mjs +0 -7488
- package/dist/index.compiled.mjs.map +0 -1
- package/src/core/components/tree/treeItem.styles.ts +0 -21
|
@@ -24,10 +24,9 @@ import {
|
|
|
24
24
|
useImperativeHandle,
|
|
25
25
|
} from 'react'
|
|
26
26
|
import {styled} from 'styled-components'
|
|
27
|
-
import {usePrefersReducedMotion} from '../../hooks'
|
|
27
|
+
import {useArrayProp, usePrefersReducedMotion} from '../../hooks'
|
|
28
28
|
import {useDelayedState} from '../../hooks/useDelayedState'
|
|
29
29
|
import {origin} from '../../middleware/origin'
|
|
30
|
-
import {_getArrayProp} from '../../styles'
|
|
31
30
|
import {useTheme_v2} from '../../theme'
|
|
32
31
|
import type {Placement} from '../../types'
|
|
33
32
|
import {
|
|
@@ -105,31 +104,25 @@ export const Tooltip = forwardRef(function Tooltip(
|
|
|
105
104
|
const {
|
|
106
105
|
animate: _animate = false,
|
|
107
106
|
arrow: arrowProp = false,
|
|
108
|
-
boundaryElement
|
|
107
|
+
boundaryElement = boundaryElementContext?.element,
|
|
109
108
|
children: childProp,
|
|
110
109
|
content,
|
|
111
110
|
disabled,
|
|
112
|
-
fallbackPlacements:
|
|
111
|
+
fallbackPlacements: fallbackPlacementsProp = props.fallbackPlacements ??
|
|
112
|
+
DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? 'bottom'],
|
|
113
113
|
padding = 2,
|
|
114
114
|
placement: placementProp = 'bottom',
|
|
115
115
|
portal: portalProp,
|
|
116
116
|
radius = 2,
|
|
117
117
|
scheme,
|
|
118
118
|
shadow = 2,
|
|
119
|
-
zOffset
|
|
119
|
+
zOffset = layer.tooltip.zOffset,
|
|
120
120
|
delay,
|
|
121
121
|
...restProps
|
|
122
122
|
} = props
|
|
123
|
-
const zOffset = _zOffset ?? layer.tooltip.zOffset
|
|
124
|
-
const fallbackPlacementsProp =
|
|
125
|
-
_fallbackPlacements ?? DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? 'bottom']
|
|
126
|
-
const boundaryElement = _boundaryElement ?? boundaryElementContext?.element
|
|
127
123
|
const prefersReducedMotion = usePrefersReducedMotion()
|
|
128
124
|
const animate = prefersReducedMotion ? false : _animate
|
|
129
|
-
const fallbackPlacements =
|
|
130
|
-
() => _getArrayProp(fallbackPlacementsProp),
|
|
131
|
-
[fallbackPlacementsProp],
|
|
132
|
-
)
|
|
125
|
+
const fallbackPlacements = useArrayProp(fallbackPlacementsProp)
|
|
133
126
|
const ref = useRef<HTMLDivElement | null>(null)
|
|
134
127
|
const [referenceElement, setReferenceElement] = useState<HTMLElement | null>(null)
|
|
135
128
|
const arrowRef = useRef<HTMLDivElement | null>(null)
|
|
@@ -298,7 +291,7 @@ export const Tooltip = forwardRef(function Tooltip(
|
|
|
298
291
|
useEffect(() => {
|
|
299
292
|
if (!showTooltip) return
|
|
300
293
|
|
|
301
|
-
|
|
294
|
+
function handleWindowMouseMove(event: MouseEvent) {
|
|
302
295
|
if (!referenceElement) return
|
|
303
296
|
|
|
304
297
|
const isHoveringReference =
|
|
@@ -24,11 +24,13 @@ export interface ThemeProviderProps {
|
|
|
24
24
|
* @public
|
|
25
25
|
*/
|
|
26
26
|
export function ThemeProvider(props: ThemeProviderProps): React.ReactElement {
|
|
27
|
-
const {children} = props
|
|
28
27
|
const parentTheme = useContext(ThemeContext)
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
const {
|
|
29
|
+
children,
|
|
30
|
+
scheme = parentTheme?.scheme || 'light',
|
|
31
|
+
theme: rootTheme = parentTheme?.theme || null,
|
|
32
|
+
tone = parentTheme?.tone || 'default',
|
|
33
|
+
} = props
|
|
32
34
|
|
|
33
35
|
const themeContext: ThemeContextValue | null = useMemo(() => {
|
|
34
36
|
if (!rootTheme) return null
|
|
@@ -21,16 +21,15 @@ export const ElementQuery = forwardRef(function ElementQuery(
|
|
|
21
21
|
forwardedRef: React.ForwardedRef<HTMLDivElement>,
|
|
22
22
|
) {
|
|
23
23
|
const theme = useTheme_v2()
|
|
24
|
-
const {children, media
|
|
25
|
-
const media = _media ?? theme.media
|
|
24
|
+
const {children, media = theme.media, ...restProps} = props
|
|
26
25
|
|
|
27
26
|
const ref = useRef<HTMLDivElement | null>(null)
|
|
28
27
|
const [element, setElement] = useState<HTMLDivElement | null>(null)
|
|
29
28
|
const elementSize = useElementSize(element)
|
|
30
29
|
const width = useMemo(() => elementSize?.border.width ?? window.innerWidth, [elementSize])
|
|
31
30
|
|
|
32
|
-
const max = findMaxBreakpoints(media, width)
|
|
33
|
-
const min = findMinBreakpoints(media, width)
|
|
31
|
+
const max = useMemo(() => findMaxBreakpoints(media, width), [media, width])
|
|
32
|
+
const min = useMemo(() => findMinBreakpoints(media, width), [media, width])
|
|
34
33
|
|
|
35
34
|
useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)
|
|
36
35
|
|
|
@@ -8,6 +8,9 @@ describe('getLayerContext', () => {
|
|
|
8
8
|
version: 0.0,
|
|
9
9
|
isTopLayer: true,
|
|
10
10
|
level: 0,
|
|
11
|
+
registerChild: () => () => {
|
|
12
|
+
//
|
|
13
|
+
},
|
|
11
14
|
size: 0,
|
|
12
15
|
zIndex: 0,
|
|
13
16
|
}
|
|
@@ -18,6 +21,7 @@ describe('getLayerContext', () => {
|
|
|
18
21
|
version: 0.0,
|
|
19
22
|
isTopLayer: true,
|
|
20
23
|
level: 0,
|
|
24
|
+
registerChild: expect.any(Function),
|
|
21
25
|
size: 0,
|
|
22
26
|
zIndex: 0,
|
|
23
27
|
})
|
|
@@ -24,6 +24,7 @@ describe('utils/layer', () => {
|
|
|
24
24
|
version: 0.0,
|
|
25
25
|
isTopLayer: true,
|
|
26
26
|
level: 0,
|
|
27
|
+
registerChild: () => () => undefined,
|
|
27
28
|
size: 0,
|
|
28
29
|
zIndex: 0,
|
|
29
30
|
}
|
|
@@ -39,6 +40,7 @@ describe('utils/layer', () => {
|
|
|
39
40
|
|
|
40
41
|
expect(log.mock.calls[0][0].version).toBe(0.0)
|
|
41
42
|
expect(log.mock.calls[0][0].isTopLayer).toBe(true)
|
|
43
|
+
expect(typeof log.mock.calls[0][0].registerChild).toBe('function')
|
|
42
44
|
expect(log.mock.calls[0][0].size).toBe(0)
|
|
43
45
|
expect(log.mock.calls[0][0].zIndex).toBe(0)
|
|
44
46
|
})
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {useMediaIndex} from '../../hooks'
|
|
3
|
-
import {_getArrayProp} from '../../styles'
|
|
1
|
+
import {useCallback, useContext, useEffect, useMemo, useState} from 'react'
|
|
2
|
+
import {useMediaIndex, useArrayProp} from '../../hooks'
|
|
4
3
|
import {getLayerContext} from './getLayerContext'
|
|
5
4
|
import {LayerContext} from './layerContext'
|
|
5
|
+
import {LayerContextValue} from './types'
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* @public
|
|
@@ -20,15 +20,15 @@ export function LayerProvider(props: LayerProviderProps): React.ReactElement {
|
|
|
20
20
|
|
|
21
21
|
// Get parent context values
|
|
22
22
|
const parentContextValue = useContext(LayerContext)
|
|
23
|
-
const parentRegisterChild = useContext(LayerContextRegisterChild)
|
|
24
23
|
const parent = parentContextValue && getLayerContext(parentContextValue)
|
|
24
|
+
const parentRegisterChild = parent?.registerChild
|
|
25
25
|
const parentLevel = parent?.level ?? 0
|
|
26
26
|
|
|
27
27
|
// Get level
|
|
28
28
|
const level = parentLevel + 1
|
|
29
29
|
|
|
30
30
|
// Get z-index offset
|
|
31
|
-
const zOffset =
|
|
31
|
+
const zOffset = useArrayProp(zOffsetProp)
|
|
32
32
|
|
|
33
33
|
// Get responsive z-index value
|
|
34
34
|
const maxMediaIndex = zOffset.length - 1
|
|
@@ -36,36 +36,51 @@ export function LayerProvider(props: LayerProviderProps): React.ReactElement {
|
|
|
36
36
|
const zIndex = parent ? parent.zIndex + zOffset[mediaIndex] : zOffset[mediaIndex]
|
|
37
37
|
|
|
38
38
|
// A state value that is used to keep track of the number of child layers on each level
|
|
39
|
-
const [
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
const [, setChildLayers] = useState<Record<number, number>>({})
|
|
40
|
+
|
|
41
|
+
// A state value that is used to keep track of the number of child levels
|
|
42
|
+
const [size, setSize] = useState(0)
|
|
42
43
|
|
|
43
44
|
const isTopLayer = size === 0
|
|
44
45
|
|
|
45
46
|
const registerChild = useCallback(
|
|
46
|
-
(childLevel
|
|
47
|
+
(childLevel?: number) => {
|
|
47
48
|
// Register child layers to the parent layer
|
|
48
49
|
const parentDispose = parentRegisterChild?.(childLevel)
|
|
49
50
|
|
|
50
|
-
|
|
51
|
-
const prevLen = state[childLevel] ?? 0
|
|
52
|
-
const nextState = {...state, [childLevel]: prevLen + 1}
|
|
53
|
-
|
|
54
|
-
return nextState
|
|
55
|
-
})
|
|
56
|
-
|
|
57
|
-
return () => {
|
|
51
|
+
if (childLevel !== undefined) {
|
|
58
52
|
setChildLayers((state) => {
|
|
59
|
-
const
|
|
53
|
+
const prevLen = state[childLevel] ?? 0
|
|
54
|
+
const nextState = {...state, [childLevel]: prevLen + 1}
|
|
60
55
|
|
|
61
|
-
|
|
62
|
-
delete nextState[childLevel]
|
|
63
|
-
} else {
|
|
64
|
-
nextState[childLevel] -= 1
|
|
65
|
-
}
|
|
56
|
+
setSize(Object.keys(nextState).length)
|
|
66
57
|
|
|
67
58
|
return nextState
|
|
68
59
|
})
|
|
60
|
+
} else {
|
|
61
|
+
// Legacy behavior: if no child level is provided, increment the size by 1
|
|
62
|
+
setSize((v) => v + 1)
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
return () => {
|
|
66
|
+
if (childLevel !== undefined) {
|
|
67
|
+
setChildLayers((state) => {
|
|
68
|
+
const nextState = {...state}
|
|
69
|
+
|
|
70
|
+
if (nextState[childLevel] === 1) {
|
|
71
|
+
delete nextState[childLevel]
|
|
72
|
+
|
|
73
|
+
setSize(Object.keys(nextState).length)
|
|
74
|
+
} else {
|
|
75
|
+
nextState[childLevel] -= 1
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
return nextState
|
|
79
|
+
})
|
|
80
|
+
} else {
|
|
81
|
+
// Legacy behavior: if no child level is provided, decrement the size by 1
|
|
82
|
+
setSize((v) => v - 1)
|
|
83
|
+
}
|
|
69
84
|
|
|
70
85
|
parentDispose?.()
|
|
71
86
|
}
|
|
@@ -76,24 +91,17 @@ export function LayerProvider(props: LayerProviderProps): React.ReactElement {
|
|
|
76
91
|
// Register this layer on mount
|
|
77
92
|
useEffect(() => parentRegisterChild?.(level), [level, parentRegisterChild])
|
|
78
93
|
|
|
79
|
-
const value = useMemo(
|
|
94
|
+
const value: LayerContextValue = useMemo(
|
|
80
95
|
() => ({
|
|
81
|
-
version: 0.0
|
|
96
|
+
version: 0.0,
|
|
82
97
|
isTopLayer,
|
|
83
98
|
level,
|
|
99
|
+
registerChild,
|
|
84
100
|
size,
|
|
85
101
|
zIndex,
|
|
86
102
|
}),
|
|
87
|
-
[isTopLayer, level, size, zIndex],
|
|
103
|
+
[isTopLayer, level, registerChild, size, zIndex],
|
|
88
104
|
)
|
|
89
105
|
|
|
90
|
-
return
|
|
91
|
-
<LayerContext.Provider value={value}>
|
|
92
|
-
<LayerContextRegisterChild.Provider value={registerChild}>
|
|
93
|
-
{children}
|
|
94
|
-
</LayerContextRegisterChild.Provider>
|
|
95
|
-
</LayerContext.Provider>
|
|
96
|
-
)
|
|
106
|
+
return <LayerContext.Provider value={value}>{children}</LayerContext.Provider>
|
|
97
107
|
}
|
|
98
|
-
|
|
99
|
-
const LayerContextRegisterChild = createContext<((childLevel: number) => () => void) | null>(null)
|