@sanity/ui 2.3.6 → 2.3.7-canary.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.
Files changed (53) hide show
  1. package/dist/index.compiled.mjs +7488 -0
  2. package/dist/index.compiled.mjs.map +1 -0
  3. package/dist/index.d.mts +13 -1
  4. package/dist/index.d.ts +13 -1
  5. package/dist/index.esm.js +1047 -1072
  6. package/dist/index.esm.js.map +1 -1
  7. package/dist/index.js +1054 -1079
  8. package/dist/index.js.map +1 -1
  9. package/dist/index.mjs +1047 -1072
  10. package/dist/index.mjs.map +1 -1
  11. package/package.json +31 -35
  12. package/src/core/components/autocomplete/autocomplete.tsx +31 -34
  13. package/src/core/components/breadcrumbs/breadcrumbs.tsx +3 -2
  14. package/src/core/components/dialog/dialog.tsx +23 -12
  15. package/src/core/components/hotkeys/hotkeys.tsx +3 -3
  16. package/src/core/components/menu/menu.tsx +5 -1
  17. package/src/core/components/menu/menuButton.tsx +17 -32
  18. package/src/core/components/menu/menuGroup.tsx +7 -5
  19. package/src/core/components/menu/menuItem.tsx +10 -6
  20. package/src/core/components/skeleton/skeleton.tsx +5 -11
  21. package/src/core/components/skeleton/textSkeleton.tsx +6 -7
  22. package/src/core/components/toast/toastProvider.tsx +26 -24
  23. package/src/core/components/tree/treeItem.styles.ts +21 -0
  24. package/src/core/components/tree/treeItem.tsx +31 -44
  25. package/src/core/hooks/useArrayProp.ts +11 -10
  26. package/src/core/primitives/avatar/avatar.tsx +11 -15
  27. package/src/core/primitives/avatar/avatarCounter.tsx +11 -17
  28. package/src/core/primitives/avatar/avatarStack.tsx +3 -7
  29. package/src/core/primitives/badge/badge.tsx +7 -4
  30. package/src/core/primitives/box/box.tsx +53 -27
  31. package/src/core/primitives/button/button.tsx +11 -12
  32. package/src/core/primitives/card/card.tsx +17 -9
  33. package/src/core/primitives/code/code.tsx +4 -3
  34. package/src/core/primitives/container/container.tsx +4 -11
  35. package/src/core/primitives/flex/flex.tsx +13 -7
  36. package/src/core/primitives/grid/grid.tsx +19 -10
  37. package/src/core/primitives/heading/heading.tsx +7 -4
  38. package/src/core/primitives/inline/inline.tsx +3 -2
  39. package/src/core/primitives/kbd/kbd.tsx +4 -3
  40. package/src/core/primitives/label/label.tsx +7 -4
  41. package/src/core/primitives/popover/popover.tsx +49 -49
  42. package/src/core/primitives/select/select.tsx +12 -6
  43. package/src/core/primitives/stack/stack.tsx +4 -3
  44. package/src/core/primitives/text/text.tsx +7 -4
  45. package/src/core/primitives/textArea/textArea.tsx +12 -6
  46. package/src/core/primitives/textInput/textInput.tsx +6 -5
  47. package/src/core/primitives/tooltip/tooltip.tsx +14 -7
  48. package/src/core/theme/themeProvider.tsx +4 -6
  49. package/src/core/utils/elementQuery/elementQuery.tsx +4 -3
  50. package/src/core/utils/layer/getLayerContext.test.ts +0 -4
  51. package/src/core/utils/layer/layer.test.tsx +0 -2
  52. package/src/core/utils/layer/layerProvider.tsx +35 -43
  53. package/src/core/utils/layer/types.ts +0 -1
@@ -1,8 +1,8 @@
1
- import {useCallback, useContext, useEffect, useMemo, useState} from 'react'
2
- import {useMediaIndex, useArrayProp} from '../../hooks'
1
+ import {createContext, useCallback, useContext, useEffect, useMemo, useState} from 'react'
2
+ import {useMediaIndex} from '../../hooks'
3
+ import {_getArrayProp} from '../../styles'
3
4
  import {getLayerContext} from './getLayerContext'
4
5
  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)
23
24
  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 = useArrayProp(zOffsetProp)
31
+ const zOffset = useMemo(() => _getArrayProp(zOffsetProp), [zOffsetProp])
32
32
 
33
33
  // Get responsive z-index value
34
34
  const maxMediaIndex = zOffset.length - 1
@@ -36,51 +36,36 @@ 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 [, 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)
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])
43
42
 
44
43
  const isTopLayer = size === 0
45
44
 
46
45
  const registerChild = useCallback(
47
- (childLevel?: number) => {
46
+ (childLevel: number) => {
48
47
  // Register child layers to the parent layer
49
48
  const parentDispose = parentRegisterChild?.(childLevel)
50
49
 
51
- if (childLevel !== undefined) {
52
- setChildLayers((state) => {
53
- const prevLen = state[childLevel] ?? 0
54
- const nextState = {...state, [childLevel]: prevLen + 1}
55
-
56
- setSize(Object.keys(nextState).length)
50
+ setChildLayers((state) => {
51
+ const prevLen = state[childLevel] ?? 0
52
+ const nextState = {...state, [childLevel]: prevLen + 1}
57
53
 
58
- return nextState
59
- })
60
- } else {
61
- // Legacy behavior: if no child level is provided, increment the size by 1
62
- setSize((v) => v + 1)
63
- }
54
+ return nextState
55
+ })
64
56
 
65
57
  return () => {
66
- if (childLevel !== undefined) {
67
- setChildLayers((state) => {
68
- const nextState = {...state}
69
-
70
- if (nextState[childLevel] === 1) {
71
- delete nextState[childLevel]
58
+ setChildLayers((state) => {
59
+ const nextState = {...state}
72
60
 
73
- setSize(Object.keys(nextState).length)
74
- } else {
75
- nextState[childLevel] -= 1
76
- }
61
+ if (nextState[childLevel] === 1) {
62
+ delete nextState[childLevel]
63
+ } else {
64
+ nextState[childLevel] -= 1
65
+ }
77
66
 
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
- }
67
+ return nextState
68
+ })
84
69
 
85
70
  parentDispose?.()
86
71
  }
@@ -91,17 +76,24 @@ export function LayerProvider(props: LayerProviderProps): React.ReactElement {
91
76
  // Register this layer on mount
92
77
  useEffect(() => parentRegisterChild?.(level), [level, parentRegisterChild])
93
78
 
94
- const value: LayerContextValue = useMemo(
79
+ const value = useMemo(
95
80
  () => ({
96
- version: 0.0,
81
+ version: 0.0 as const,
97
82
  isTopLayer,
98
83
  level,
99
- registerChild,
100
84
  size,
101
85
  zIndex,
102
86
  }),
103
- [isTopLayer, level, registerChild, size, zIndex],
87
+ [isTopLayer, level, size, zIndex],
104
88
  )
105
89
 
106
- 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
+ )
107
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
  }