@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.
Files changed (135) hide show
  1. package/README.md +1 -1
  2. package/dist/index.d.ts +19 -19
  3. package/dist/index.esm.js +338 -101
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +338 -101
  6. package/dist/index.js.map +1 -1
  7. package/package.json +33 -33
  8. package/src/__workshop__/constants.ts +2 -2
  9. package/src/components/autocomplete/__mocks__/apiStore.ts +2 -2
  10. package/src/components/autocomplete/__workshop__/async.tsx +2 -2
  11. package/src/components/autocomplete/__workshop__/constrainedHeight.tsx +2 -2
  12. package/src/components/autocomplete/__workshop__/custom.tsx +1 -1
  13. package/src/components/autocomplete/__workshop__/fullscreen.tsx +6 -6
  14. package/src/components/autocomplete/autocomplete.tsx +20 -20
  15. package/src/components/autocomplete/autocompleteOption.tsx +1 -1
  16. package/src/components/autocomplete/autocompleteReducer.ts +1 -1
  17. package/src/components/breadcrumbs/breadcrumbs.tsx +2 -2
  18. package/src/components/dialog/dialog.tsx +11 -11
  19. package/src/components/dialog/dialogProvider.tsx +1 -1
  20. package/src/components/dialog/styles.ts +1 -1
  21. package/src/components/hotkeys/hotkeys.tsx +1 -1
  22. package/src/components/menu/__workshop__/asComponent.tsx +1 -1
  23. package/src/components/menu/__workshop__/menuButton.tsx +1 -1
  24. package/src/components/menu/menu.test.tsx +3 -3
  25. package/src/components/menu/menu.tsx +7 -7
  26. package/src/components/menu/menuButton.tsx +7 -7
  27. package/src/components/menu/menuGroup.tsx +4 -4
  28. package/src/components/menu/menuItem.tsx +4 -4
  29. package/src/components/menu/useMenuController.ts +3 -3
  30. package/src/components/skeleton/skeleton.tsx +2 -2
  31. package/src/components/skeleton/textSkeleton.tsx +25 -19
  32. package/src/components/tab/tab.tsx +2 -2
  33. package/src/components/tab/tabList.tsx +3 -3
  34. package/src/components/tab/tabPanel.tsx +1 -1
  35. package/src/components/toast/toast.test.tsx +2 -1
  36. package/src/components/toast/toast.tsx +1 -1
  37. package/src/components/toast/toastProvider.tsx +1 -1
  38. package/src/components/tree/__workshop__/basic.perf.ts +1 -1
  39. package/src/components/tree/helpers.ts +2 -2
  40. package/src/components/tree/style.ts +1 -1
  41. package/src/components/tree/tree.tsx +9 -9
  42. package/src/components/tree/treeGroup.tsx +1 -1
  43. package/src/components/tree/treeItem.tsx +4 -4
  44. package/src/hooks/useArrayProp.ts +2 -2
  45. package/src/hooks/useClickOutside.ts +2 -2
  46. package/src/hooks/useCustomValidity.ts +1 -1
  47. package/src/hooks/useMediaIndex/useMediaIndex.test.tsx +4 -4
  48. package/src/hooks/usePrefersDark.hydration.test.tsx +2 -1
  49. package/src/hooks/usePrefersReducedMotion.hydration.test.tsx +2 -1
  50. package/src/lib/globalScope.ts +1 -0
  51. package/src/primitives/_selectable/selectable.tsx +1 -1
  52. package/src/primitives/_selectable/style.ts +1 -1
  53. package/src/primitives/avatar/avatar.tsx +3 -3
  54. package/src/primitives/avatar/avatarCounter.tsx +5 -3
  55. package/src/primitives/avatar/avatarStack.tsx +2 -2
  56. package/src/primitives/avatar/styles.ts +1 -1
  57. package/src/primitives/badge/badge.tsx +2 -2
  58. package/src/primitives/box/box.tsx +2 -2
  59. package/src/primitives/button/button.tsx +2 -2
  60. package/src/primitives/button/styles.ts +1 -1
  61. package/src/primitives/card/__workshop__/asComponent.tsx +1 -1
  62. package/src/primitives/card/__workshop__/selected.tsx +19 -15
  63. package/src/primitives/card/card.tsx +1 -1
  64. package/src/primitives/card/styles.ts +1 -1
  65. package/src/primitives/checkbox/checkbox.tsx +1 -1
  66. package/src/primitives/code/code.tsx +2 -1
  67. package/src/primitives/container/container.tsx +2 -2
  68. package/src/primitives/container/styles.ts +1 -1
  69. package/src/primitives/flex/flex.tsx +2 -2
  70. package/src/primitives/grid/grid.tsx +1 -1
  71. package/src/primitives/heading/heading.tsx +1 -1
  72. package/src/primitives/heading/styles.ts +4 -2
  73. package/src/primitives/helpers.ts +2 -2
  74. package/src/primitives/inline/inline.tsx +2 -2
  75. package/src/primitives/kbd/kbd.tsx +1 -1
  76. package/src/primitives/label/label.tsx +1 -1
  77. package/src/primitives/label/styles.ts +1 -1
  78. package/src/primitives/popover/__workshop__/RecursiveStory.tsx +1 -1
  79. package/src/primitives/popover/__workshop__/TestStory.tsx +1 -1
  80. package/src/primitives/popover/helpers.ts +1 -1
  81. package/src/primitives/popover/popover.tsx +11 -11
  82. package/src/primitives/popover/popoverArrow.tsx +1 -1
  83. package/src/primitives/popover/popoverCard.tsx +4 -4
  84. package/src/primitives/radio/radio.tsx +1 -1
  85. package/src/primitives/select/select.tsx +1 -1
  86. package/src/primitives/select/styles.ts +2 -2
  87. package/src/primitives/spinner/spinner.tsx +1 -1
  88. package/src/primitives/stack/stack.tsx +1 -1
  89. package/src/primitives/stack/styles.ts +1 -1
  90. package/src/primitives/switch/__workshop__/props.tsx +1 -1
  91. package/src/primitives/switch/styles.ts +1 -1
  92. package/src/primitives/switch/switch.tsx +1 -1
  93. package/src/primitives/text/__workshop__/colored.tsx +9 -8
  94. package/src/primitives/text/styles.ts +4 -2
  95. package/src/primitives/text/text.tsx +2 -2
  96. package/src/primitives/textArea/textArea.tsx +3 -3
  97. package/src/primitives/textInput/__workshop__/plain.tsx +2 -2
  98. package/src/primitives/textInput/textInput.tsx +11 -11
  99. package/src/primitives/tooltip/tooltip.tsx +8 -7
  100. package/src/primitives/tooltip/tooltipArrow.tsx +1 -1
  101. package/src/styles/border/borderStyle.ts +5 -5
  102. package/src/styles/colorVars/colorVarsStyle.ts +1 -1
  103. package/src/styles/flex/flexItemStyle.ts +1 -1
  104. package/src/styles/flex/flexStyle.ts +3 -3
  105. package/src/styles/font/responsiveFont.ts +1 -1
  106. package/src/styles/font/textAlignStyle.ts +1 -1
  107. package/src/styles/helpers.ts +3 -3
  108. package/src/styles/input/responsiveInputPaddingStyle.ts +4 -4
  109. package/src/styles/input/textInputStyle.ts +2 -2
  110. package/src/styles/margin/marginStyle.ts +1 -1
  111. package/src/styles/padding/paddingStyle.ts +1 -1
  112. package/src/theme/__workshop__/color.tsx +1 -0
  113. package/src/theme/lib/theme/color/button/createButtonModes.ts +1 -1
  114. package/src/theme/lib/theme/color/button/createButtonTones.ts +1 -1
  115. package/src/theme/lib/theme/color/card/createCardStates.ts +1 -1
  116. package/src/theme/lib/theme/color/factory.ts +2 -2
  117. package/src/theme/lib/theme/color/input/createInputModes.ts +1 -1
  118. package/src/theme/lib/theme/color/muted/createMuted.ts +1 -1
  119. package/src/theme/lib/theme/color/selectable/createSelectableTones.ts +2 -2
  120. package/src/theme/lib/theme/color/solid/createSolidTones.ts +1 -1
  121. package/src/theme/lib/theme/color/spot/createSpot.ts +1 -1
  122. package/src/theme/lib/theme/shadow.ts +1 -1
  123. package/src/theme/lib/theme/theme.ts +1 -1
  124. package/src/theme/theme.test.tsx +2 -1
  125. package/src/theme/themeProvider.tsx +1 -1
  126. package/src/theme/useRootTheme.ts +1 -0
  127. package/src/utils/boundaryElement/boundaryElement.test.tsx +2 -1
  128. package/src/utils/elementQuery/elementQuery.tsx +2 -2
  129. package/src/utils/layer/layer.test.tsx +2 -1
  130. package/src/utils/layer/layer.tsx +3 -3
  131. package/src/utils/layer/layerProvider.tsx +2 -2
  132. package/src/utils/portal/portal.test.tsx +2 -1
  133. package/src/utils/srOnly/srOnly.tsx +1 -1
  134. package/src/utils/virtualList/__workshop__/changingProps.tsx +1 -1
  135. 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
- ({$size, $style, theme}: {$size: number[]; $style: ThemeFontKey; theme: Theme}) => {
10
- const {media} = theme.sanity
11
- const font = theme.sanity.fonts[$style]
12
-
13
- const styles = _responsive(media, $size, (sizeIndex) => {
14
- const fontSize = font.sizes[sizeIndex]
15
- const capHeight = fontSize.lineHeight - fontSize.ascenderHeight - fontSize.descenderHeight
16
-
17
- return {height: capHeight}
18
- })
19
-
20
- return styles
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'
@@ -115,7 +115,7 @@ export function ToastProvider(props: ToastProviderProps): React.ReactElement {
115
115
 
116
116
  toastsRef.current = {}
117
117
  },
118
- []
118
+ [],
119
119
  )
120
120
 
121
121
  const value: ToastContextValue = useMemo(() => ({version: 0.0, push}), [push])
@@ -3,7 +3,7 @@ import {findByTestId, fireEvent} from '@testing-library/dom'
3
3
 
4
4
  function test<ElementType = unknown>(
5
5
  title: string,
6
- run: PerfTestRunFn<ElementType>
6
+ run: PerfTestRunFn<ElementType>,
7
7
  ): PerfTestProps<ElementType> {
8
8
  return {name: title, run}
9
9
  }
@@ -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(() => {
@@ -1,3 +1,4 @@
1
+ /* eslint-disable @typescript-eslint/no-explicit-any */
1
2
  /**
2
3
  * Gets the global scope instance in a given environment.
3
4
  *
@@ -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)