@sanity/ui 2.3.6-canary.6 → 2.3.6

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 (53) hide show
  1. package/dist/index.d.mts +1 -13
  2. package/dist/index.d.ts +1 -13
  3. package/dist/index.esm.js +2174 -2147
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +2181 -2154
  6. package/dist/index.js.map +1 -1
  7. package/dist/index.mjs +2174 -2147
  8. package/dist/index.mjs.map +1 -1
  9. package/package.json +35 -31
  10. package/src/core/components/autocomplete/autocomplete.tsx +34 -31
  11. package/src/core/components/breadcrumbs/breadcrumbs.tsx +2 -3
  12. package/src/core/components/dialog/dialog.tsx +12 -23
  13. package/src/core/components/hotkeys/hotkeys.tsx +3 -3
  14. package/src/core/components/menu/menu.tsx +1 -5
  15. package/src/core/components/menu/menuButton.tsx +32 -17
  16. package/src/core/components/menu/menuGroup.tsx +5 -7
  17. package/src/core/components/menu/menuItem.tsx +6 -10
  18. package/src/core/components/skeleton/skeleton.tsx +11 -5
  19. package/src/core/components/skeleton/textSkeleton.tsx +7 -6
  20. package/src/core/components/toast/toastProvider.tsx +24 -26
  21. package/src/core/components/tree/treeItem.tsx +44 -31
  22. package/src/core/hooks/useArrayProp.ts +10 -11
  23. package/src/core/primitives/avatar/avatar.tsx +15 -11
  24. package/src/core/primitives/avatar/avatarCounter.tsx +17 -11
  25. package/src/core/primitives/avatar/avatarStack.tsx +7 -3
  26. package/src/core/primitives/badge/badge.tsx +4 -7
  27. package/src/core/primitives/box/box.tsx +27 -53
  28. package/src/core/primitives/button/button.tsx +12 -11
  29. package/src/core/primitives/card/card.tsx +9 -17
  30. package/src/core/primitives/code/code.tsx +3 -4
  31. package/src/core/primitives/container/container.tsx +11 -4
  32. package/src/core/primitives/flex/flex.tsx +7 -13
  33. package/src/core/primitives/grid/grid.tsx +10 -19
  34. package/src/core/primitives/heading/heading.tsx +4 -7
  35. package/src/core/primitives/inline/inline.tsx +2 -3
  36. package/src/core/primitives/kbd/kbd.tsx +3 -4
  37. package/src/core/primitives/label/label.tsx +4 -7
  38. package/src/core/primitives/popover/popover.tsx +49 -49
  39. package/src/core/primitives/select/select.tsx +6 -12
  40. package/src/core/primitives/stack/stack.tsx +3 -4
  41. package/src/core/primitives/text/text.tsx +4 -7
  42. package/src/core/primitives/textArea/textArea.tsx +6 -12
  43. package/src/core/primitives/textInput/textInput.tsx +5 -6
  44. package/src/core/primitives/tooltip/tooltip.tsx +11 -14
  45. package/src/core/theme/themeProvider.tsx +6 -4
  46. package/src/core/utils/elementQuery/elementQuery.tsx +3 -4
  47. package/src/core/utils/layer/getLayerContext.test.ts +4 -0
  48. package/src/core/utils/layer/layer.test.tsx +2 -0
  49. package/src/core/utils/layer/layerProvider.tsx +43 -35
  50. package/src/core/utils/layer/types.ts +1 -0
  51. package/dist/index.compiled.mjs +0 -7486
  52. package/dist/index.compiled.mjs.map +0 -1
  53. package/src/core/components/tree/treeItem.styles.ts +0 -21
@@ -1,8 +1,8 @@
1
- import {createContext, useCallback, useContext, useEffect, useMemo, useState} from 'react'
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 = useMemo(() => _getArrayProp(zOffsetProp), [zOffsetProp])
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 [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])
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: number) => {
47
+ (childLevel?: number) => {
47
48
  // Register child layers to the parent layer
48
49
  const parentDispose = parentRegisterChild?.(childLevel)
49
50
 
50
- setChildLayers((state) => {
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 nextState = {...state}
53
+ const prevLen = state[childLevel] ?? 0
54
+ const nextState = {...state, [childLevel]: prevLen + 1}
60
55
 
61
- if (nextState[childLevel] === 1) {
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 as const,
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)
@@ -3,6 +3,7 @@ export interface LayerContextValue {
3
3
  version: 0.0
4
4
  isTopLayer: boolean
5
5
  level?: number
6
+ registerChild: (childLevel?: number) => () => void
6
7
  size: number
7
8
  zIndex: number
8
9
  }