@sanity/ui 2.3.6-canary.2 → 2.3.6-canary.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.
@@ -27,8 +27,8 @@ export function ThemeProvider(props: ThemeProviderProps): React.ReactElement {
27
27
  const {children} = props
28
28
  const parentTheme = useContext(ThemeContext)
29
29
  const scheme = props.scheme ?? (parentTheme?.scheme || 'light')
30
- const rootTheme = parentTheme?.theme || null
31
- const tone = parentTheme?.tone || 'default'
30
+ const rootTheme = props.theme ?? (parentTheme?.theme || null)
31
+ const tone = props.tone ?? (parentTheme?.tone || 'default')
32
32
 
33
33
  const themeContext: ThemeContextValue | null = useMemo(() => {
34
34
  if (!rootTheme) return null
@@ -21,15 +21,16 @@ export const ElementQuery = forwardRef(function ElementQuery(
21
21
  forwardedRef: React.ForwardedRef<HTMLDivElement>,
22
22
  ) {
23
23
  const theme = useTheme_v2()
24
- const {children, media = theme.media, ...restProps} = props
24
+ const {children, media: _media, ...restProps} = props
25
+ const media = _media ?? theme.media
25
26
 
26
27
  const ref = useRef<HTMLDivElement | null>(null)
27
28
  const [element, setElement] = useState<HTMLDivElement | null>(null)
28
29
  const elementSize = useElementSize(element)
29
30
  const width = useMemo(() => elementSize?.border.width ?? window.innerWidth, [elementSize])
30
31
 
31
- const max = useMemo(() => findMaxBreakpoints(media, width), [media, width])
32
- const min = useMemo(() => findMinBreakpoints(media, width), [media, width])
32
+ const max = findMaxBreakpoints(media, width)
33
+ const min = findMinBreakpoints(media, width)
33
34
 
34
35
  useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)
35
36
 
@@ -8,9 +8,6 @@ describe('getLayerContext', () => {
8
8
  version: 0.0,
9
9
  isTopLayer: true,
10
10
  level: 0,
11
- registerChild: () => () => {
12
- //
13
- },
14
11
  size: 0,
15
12
  zIndex: 0,
16
13
  }
@@ -21,7 +18,6 @@ describe('getLayerContext', () => {
21
18
  version: 0.0,
22
19
  isTopLayer: true,
23
20
  level: 0,
24
- registerChild: expect.any(Function),
25
21
  size: 0,
26
22
  zIndex: 0,
27
23
  })
@@ -24,7 +24,6 @@ describe('utils/layer', () => {
24
24
  version: 0.0,
25
25
  isTopLayer: true,
26
26
  level: 0,
27
- registerChild: () => () => undefined,
28
27
  size: 0,
29
28
  zIndex: 0,
30
29
  }
@@ -40,7 +39,6 @@ describe('utils/layer', () => {
40
39
 
41
40
  expect(log.mock.calls[0][0].version).toBe(0.0)
42
41
  expect(log.mock.calls[0][0].isTopLayer).toBe(true)
43
- expect(typeof log.mock.calls[0][0].registerChild).toBe('function')
44
42
  expect(log.mock.calls[0][0].size).toBe(0)
45
43
  expect(log.mock.calls[0][0].zIndex).toBe(0)
46
44
  })
@@ -1,9 +1,8 @@
1
- import {useCallback, useContext, useEffect, useMemo, useState} from 'react'
1
+ import {createContext, useCallback, useContext, useEffect, useMemo, useState} from 'react'
2
2
  import {useMediaIndex} from '../../hooks'
3
3
  import {_getArrayProp} from '../../styles'
4
4
  import {getLayerContext} from './getLayerContext'
5
5
  import {LayerContext} from './layerContext'
6
- import {LayerContextValue} from './types'
7
6
 
8
7
  /**
9
8
  * @public
@@ -21,8 +20,8 @@ export function LayerProvider(props: LayerProviderProps): React.ReactElement {
21
20
 
22
21
  // Get parent context values
23
22
  const parentContextValue = useContext(LayerContext)
23
+ const parentRegisterChild = useContext(LayerContextRegisterChild)
24
24
  const parent = parentContextValue && getLayerContext(parentContextValue)
25
- const parentRegisterChild = parent?.registerChild
26
25
  const parentLevel = parent?.level ?? 0
27
26
 
28
27
  // Get level
@@ -37,51 +36,36 @@ export function LayerProvider(props: LayerProviderProps): React.ReactElement {
37
36
  const zIndex = parent ? parent.zIndex + zOffset[mediaIndex] : zOffset[mediaIndex]
38
37
 
39
38
  // A state value that is used to keep track of the number of child layers on each level
40
- const [, setChildLayers] = useState<Record<number, number>>({})
41
-
42
- // A state value that is used to keep track of the number of child levels
43
- const [size, setSize] = useState(0)
39
+ const [childLayers, setChildLayers] = useState<Record<number, number>>({})
40
+ // A memo value that is used to keep track of the number of child levels
41
+ const size = useMemo(() => Object.keys(childLayers).length, [childLayers])
44
42
 
45
43
  const isTopLayer = size === 0
46
44
 
47
45
  const registerChild = useCallback(
48
- (childLevel?: number) => {
46
+ (childLevel: number) => {
49
47
  // Register child layers to the parent layer
50
48
  const parentDispose = parentRegisterChild?.(childLevel)
51
49
 
52
- if (childLevel !== undefined) {
53
- setChildLayers((state) => {
54
- const prevLen = state[childLevel] ?? 0
55
- const nextState = {...state, [childLevel]: prevLen + 1}
56
-
57
- setSize(Object.keys(nextState).length)
50
+ setChildLayers((state) => {
51
+ const prevLen = state[childLevel] ?? 0
52
+ const nextState = {...state, [childLevel]: prevLen + 1}
58
53
 
59
- return nextState
60
- })
61
- } else {
62
- // Legacy behavior: if no child level is provided, increment the size by 1
63
- setSize((v) => v + 1)
64
- }
54
+ return nextState
55
+ })
65
56
 
66
57
  return () => {
67
- if (childLevel !== undefined) {
68
- setChildLayers((state) => {
69
- const nextState = {...state}
70
-
71
- if (nextState[childLevel] === 1) {
72
- delete nextState[childLevel]
58
+ setChildLayers((state) => {
59
+ const nextState = {...state}
73
60
 
74
- setSize(Object.keys(nextState).length)
75
- } else {
76
- nextState[childLevel] -= 1
77
- }
61
+ if (nextState[childLevel] === 1) {
62
+ delete nextState[childLevel]
63
+ } else {
64
+ nextState[childLevel] -= 1
65
+ }
78
66
 
79
- return nextState
80
- })
81
- } else {
82
- // Legacy behavior: if no child level is provided, decrement the size by 1
83
- setSize((v) => v - 1)
84
- }
67
+ return nextState
68
+ })
85
69
 
86
70
  parentDispose?.()
87
71
  }
@@ -92,17 +76,24 @@ export function LayerProvider(props: LayerProviderProps): React.ReactElement {
92
76
  // Register this layer on mount
93
77
  useEffect(() => parentRegisterChild?.(level), [level, parentRegisterChild])
94
78
 
95
- const value: LayerContextValue = useMemo(
79
+ const value = useMemo(
96
80
  () => ({
97
- version: 0.0,
81
+ version: 0.0 as const,
98
82
  isTopLayer,
99
83
  level,
100
- registerChild,
101
84
  size,
102
85
  zIndex,
103
86
  }),
104
- [isTopLayer, level, registerChild, size, zIndex],
87
+ [isTopLayer, level, size, zIndex],
105
88
  )
106
89
 
107
- return <LayerContext.Provider value={value}>{children}</LayerContext.Provider>
90
+ return (
91
+ <LayerContext.Provider value={value}>
92
+ <LayerContextRegisterChild.Provider value={registerChild}>
93
+ {children}
94
+ </LayerContextRegisterChild.Provider>
95
+ </LayerContext.Provider>
96
+ )
108
97
  }
98
+
99
+ const LayerContextRegisterChild = createContext<((childLevel: number) => () => void) | null>(null)
@@ -3,7 +3,6 @@ export interface LayerContextValue {
3
3
  version: 0.0
4
4
  isTopLayer: boolean
5
5
  level?: number
6
- registerChild: (childLevel?: number) => () => void
7
6
  size: number
8
7
  zIndex: number
9
8
  }