@sanity/ui 4.0.0-static.4 → 4.0.0-static.40

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 (341) hide show
  1. package/dist/_chunks-es/{refractor.js → Refractor.js} +1 -1
  2. package/dist/_chunks-es/{refractor.js.map → Refractor.js.map} +1 -1
  3. package/dist/css/index.css +2 -1
  4. package/dist/css/index.css.map +1 -0
  5. package/dist/css/index.d.ts +51 -7
  6. package/dist/css/index.js +17979 -55
  7. package/dist/css/index.js.map +1 -1
  8. package/dist/index.d.ts +26 -38
  9. package/dist/index.js +1744 -1127
  10. package/dist/index.js.map +1 -1
  11. package/exports/css/index.css +1 -0
  12. package/package.json +39 -51
  13. package/src/core/Root.tsx +1 -1
  14. package/src/core/RootProvider.tsx +5 -5
  15. package/src/core/__workshop__/index.ts +1 -1
  16. package/src/core/components/autocomplete/{autocomplete.tsx → Autocomplete.tsx} +90 -58
  17. package/src/core/components/autocomplete/__workshop__/{custom.tsx → Custom.tsx} +14 -1
  18. package/src/core/components/autocomplete/__workshop__/{example.tsx → Example.tsx} +12 -1
  19. package/src/core/components/autocomplete/__workshop__/index.ts +6 -6
  20. package/src/core/components/autocomplete/types.ts +1 -1
  21. package/src/core/components/breadcrumbs/{breadcrumbs.tsx → Breadcrumbs.tsx} +80 -47
  22. package/src/core/components/breadcrumbs/__workshop__/index.ts +1 -1
  23. package/src/core/components/dialog/{dialog.tsx → Dialog.tsx} +20 -11
  24. package/src/core/components/dialog/{dialogCard.tsx → DialogCard.tsx} +9 -9
  25. package/src/core/components/dialog/{dialogContext.ts → DialogContext.ts} +1 -1
  26. package/src/core/components/dialog/{dialogProvider.tsx → DialogProvider.tsx} +2 -2
  27. package/src/core/components/dialog/__workshop__/{panes.tsx → Panes.tsx} +9 -21
  28. package/src/core/components/dialog/__workshop__/{position.tsx → Position.tsx} +9 -1
  29. package/src/core/components/dialog/__workshop__/{props.tsx → Props.tsx} +2 -0
  30. package/src/core/components/dialog/__workshop__/index.ts +10 -10
  31. package/src/core/components/dialog/__workshop__/styles.css.ts +18 -0
  32. package/src/core/components/dialog/useDialog.ts +3 -3
  33. package/src/core/components/hotkeys/{hotkeys.tsx → Hotkeys.tsx} +2 -2
  34. package/src/core/components/hotkeys/__workshop__/index.ts +1 -1
  35. package/src/core/components/menu/{menu.test.tsx → Menu.test.tsx} +9 -13
  36. package/src/core/components/menu/{menu.tsx → Menu.tsx} +19 -24
  37. package/src/core/components/menu/{menuButton.tsx → MenuButton.tsx} +14 -9
  38. package/src/core/components/menu/{menuContext.ts → MenuContext.ts} +3 -4
  39. package/src/core/components/menu/{menuGroup.tsx → MenuGroup.tsx} +16 -11
  40. package/src/core/components/menu/{menuItem.tsx → MenuItem.tsx} +7 -9
  41. package/src/core/components/menu/__workshop__/DataProps.tsx +27 -0
  42. package/src/core/components/menu/__workshop__/{menuButton.tsx → MenuButton.tsx} +6 -1
  43. package/src/core/components/menu/__workshop__/{tones.tsx → Tones.tsx} +7 -1
  44. package/src/core/components/menu/__workshop__/index.ts +22 -17
  45. package/src/core/components/menu/useMenu.ts +5 -5
  46. package/src/core/components/menu/useMenuController.ts +5 -5
  47. package/src/core/components/tab/{tab.tsx → Tab.tsx} +1 -1
  48. package/src/core/components/tab/{tabList.tsx → TabList.tsx} +2 -2
  49. package/src/core/components/tab/{tabPanel.tsx → TabPanel.tsx} +1 -1
  50. package/src/core/components/tab/__workshop__/index.ts +1 -1
  51. package/src/core/components/toast/{toast.test.tsx → Toast.test.tsx} +7 -7
  52. package/src/core/components/toast/{toast.tsx → Toast.tsx} +6 -6
  53. package/src/core/components/toast/{toastContext.ts → ToastContext.ts} +1 -1
  54. package/src/core/components/toast/{toastLayer.tsx → ToastLayer.tsx} +1 -1
  55. package/src/core/components/toast/{toastProvider.tsx → ToastProvider.tsx} +7 -7
  56. package/src/core/components/toast/__workshop__/{toast.tsx → Toast.tsx} +2 -0
  57. package/src/core/components/toast/__workshop__/index.ts +2 -2
  58. package/src/core/components/toast/useToast.ts +3 -3
  59. package/src/core/components/tree/{tree.tsx → Tree.tsx} +4 -4
  60. package/src/core/components/tree/{treeContext.ts → TreeContext.ts} +1 -1
  61. package/src/core/components/tree/{treeGroup.tsx → TreeGroup.tsx} +1 -1
  62. package/src/core/components/tree/{treeItem.tsx → TreeItem.tsx} +28 -25
  63. package/src/core/components/tree/__workshop__/index.ts +4 -4
  64. package/src/core/components/tree/useTree.ts +3 -3
  65. package/src/core/components/virtualList/{virtualList.tsx → VirtualList.tsx} +87 -45
  66. package/src/core/components/virtualList/__workshop__/index.ts +4 -4
  67. package/src/core/helpers/props.ts +0 -9
  68. package/src/core/hooks/useGlobalKeyDown.ts +11 -4
  69. package/src/core/hooks/useMediaIndex/__workshop__/index.ts +1 -1
  70. package/src/core/hooks/useResponsiveProp.ts +4 -17
  71. package/src/core/index.ts +68 -66
  72. package/src/core/lib/createGlobalScopedContext.ts +5 -3
  73. package/src/core/primitives/avatar/{avatar.tsx → Avatar.tsx} +7 -6
  74. package/src/core/primitives/avatar/{avatarCounter.tsx → AvatarCounter.tsx} +2 -2
  75. package/src/core/primitives/avatar/{avatarStack.tsx → AvatarStack.tsx} +3 -3
  76. package/src/core/primitives/avatar/__workshop__/{asButton.tsx → AsButton.tsx} +8 -1
  77. package/src/core/primitives/avatar/__workshop__/PropsStory.tsx +22 -0
  78. package/src/core/primitives/avatar/__workshop__/{stack.tsx → Stack.tsx} +5 -1
  79. package/src/core/primitives/avatar/__workshop__/index.ts +9 -4
  80. package/src/core/primitives/badge/{badge.test.tsx → Badge.test.tsx} +1 -1
  81. package/src/core/primitives/badge/{badge.tsx → Badge.tsx} +2 -2
  82. package/src/core/primitives/badge/__workshop__/{props.tsx → Props.tsx} +12 -1
  83. package/src/core/primitives/badge/__workshop__/index.ts +2 -2
  84. package/src/core/primitives/box/__workshop__/{props.tsx → Props.tsx} +6 -1
  85. package/src/core/primitives/box/__workshop__/index.ts +2 -2
  86. package/src/core/primitives/button/{button.test.tsx → Button.test.tsx} +1 -1
  87. package/src/core/primitives/button/{button.tsx → Button.tsx} +12 -11
  88. package/src/core/primitives/button/__workshop__/DataProps.tsx +22 -0
  89. package/src/core/primitives/button/__workshop__/{props.tsx → Props.tsx} +22 -0
  90. package/src/core/primitives/button/__workshop__/SanityUploadButton.tsx +21 -0
  91. package/src/core/primitives/button/__workshop__/{stacked.tsx → Stacked.tsx} +16 -0
  92. package/src/core/primitives/button/__workshop__/Styled1.tsx +11 -0
  93. package/src/core/primitives/button/__workshop__/index.ts +15 -15
  94. package/src/core/primitives/button/__workshop__/styles.css.ts +30 -0
  95. package/src/core/primitives/card/{card.tsx → Card.tsx} +10 -10
  96. package/src/core/primitives/card/{cardContext.ts → CardContext.ts} +1 -1
  97. package/src/core/primitives/card/{cardProvider.tsx → CardProvider.tsx} +3 -12
  98. package/src/core/primitives/card/__workshop__/DataProps.tsx +30 -0
  99. package/src/core/primitives/card/__workshop__/{props.tsx → Props.tsx} +10 -0
  100. package/src/core/primitives/card/__workshop__/{selected.tsx → Selected.tsx} +1 -1
  101. package/src/core/primitives/card/__workshop__/{styled.tsx → Styled.tsx} +2 -5
  102. package/src/core/primitives/card/__workshop__/index.ts +10 -9
  103. package/src/core/primitives/card/useCard.ts +11 -6
  104. package/src/core/primitives/checkbox/__workshop__/index.ts +4 -4
  105. package/src/core/primitives/code/{code.tsx → Code.tsx} +26 -2
  106. package/src/core/primitives/code/__workshop__/{props.tsx → Props.tsx} +6 -1
  107. package/src/core/primitives/code/__workshop__/index.ts +2 -2
  108. package/src/core/primitives/container/{container.tsx → Container.tsx} +1 -1
  109. package/src/core/primitives/container/__workshop__/{example.tsx → Example.tsx} +6 -1
  110. package/src/core/primitives/container/__workshop__/index.ts +1 -1
  111. package/src/core/primitives/flex/{flex.tsx → Flex.tsx} +1 -1
  112. package/src/core/primitives/flex/__workshop__/{example.tsx → Example.tsx} +14 -16
  113. package/src/core/primitives/flex/__workshop__/index.ts +2 -2
  114. package/src/core/primitives/flex/__workshop__/styles.css.ts +12 -0
  115. package/src/core/primitives/grid/{grid.tsx → Grid.tsx} +1 -1
  116. package/src/core/primitives/grid/__workshop__/index.ts +1 -1
  117. package/src/core/primitives/heading/{heading.tsx → Heading.tsx} +16 -0
  118. package/src/core/primitives/heading/__workshop__/{plain.tsx → Plain.tsx} +12 -1
  119. package/src/core/primitives/heading/__workshop__/index.ts +2 -2
  120. package/src/core/primitives/inline/{inline.tsx → Inline.tsx} +2 -1
  121. package/src/core/primitives/inline/__workshop__/{plain.tsx → Plain.tsx} +5 -1
  122. package/src/core/primitives/inline/__workshop__/index.ts +1 -1
  123. package/src/core/primitives/kbd/{kbd.tsx → Kbd.tsx} +2 -2
  124. package/src/core/primitives/kbd/__workshop__/index.ts +1 -1
  125. package/src/core/primitives/label/{label.tsx → Label.tsx} +16 -0
  126. package/src/core/primitives/label/__workshop__/{plain.tsx → Plain.tsx} +15 -1
  127. package/src/core/primitives/label/__workshop__/index.ts +2 -2
  128. package/src/core/primitives/layer/{layer.test.tsx → Layer.test.tsx} +7 -7
  129. package/src/core/primitives/layer/{layer.tsx → Layer.tsx} +3 -3
  130. package/src/core/primitives/layer/{layerCard.tsx → LayerCard.tsx} +2 -2
  131. package/src/core/primitives/layer/{layerContext.ts → LayerContext.ts} +1 -1
  132. package/src/core/primitives/layer/{layerProvider.tsx → LayerProvider.tsx} +6 -6
  133. package/src/core/primitives/layer/__workshop__/index.ts +3 -3
  134. package/src/core/primitives/layer/useLayer.ts +3 -3
  135. package/src/core/primitives/popover/{popover.tsx → Popover.tsx} +170 -150
  136. package/src/core/primitives/popover/{popoverLayer.tsx → PopoverLayer.tsx} +3 -3
  137. package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +13 -1
  138. package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +2 -0
  139. package/src/core/primitives/popover/__workshop__/PlainStory.tsx +8 -0
  140. package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +7 -1
  141. package/src/core/primitives/popover/__workshop__/TestStory.tsx +6 -0
  142. package/src/core/primitives/popover/floating-ui/size.ts +17 -16
  143. package/src/core/primitives/radio/{radio.tsx → Radio.tsx} +2 -2
  144. package/src/core/primitives/radio/__workshop__/index.ts +2 -2
  145. package/src/core/primitives/select/{select.tsx → Select.tsx} +7 -5
  146. package/src/core/primitives/select/__workshop__/{plain.tsx → Plain.tsx} +4 -0
  147. package/src/core/primitives/select/__workshop__/index.ts +2 -2
  148. package/src/core/primitives/selectable/{selectable.tsx → Selectable.tsx} +2 -2
  149. package/src/core/primitives/selectable/__workshop__/DataProps.tsx +27 -0
  150. package/src/core/primitives/selectable/__workshop__/index.ts +14 -0
  151. package/src/core/primitives/skeleton/{codeSkeleton.tsx → CodeSkeleton.tsx} +1 -1
  152. package/src/core/primitives/skeleton/{headingSkeleton.tsx → HeadingSkeleton.tsx} +1 -1
  153. package/src/core/primitives/skeleton/{labelSkeleton.tsx → LabelSkeleton.tsx} +1 -1
  154. package/src/core/primitives/skeleton/{skeleton.tsx → Skeleton.tsx} +2 -2
  155. package/src/core/primitives/skeleton/{textSkeleton.tsx → TextSkeleton.tsx} +1 -1
  156. package/src/core/primitives/skeleton/__workshop__/{delay.tsx → Delay.tsx} +9 -1
  157. package/src/core/primitives/skeleton/__workshop__/{skeleton.tsx → Skeleton.tsx} +9 -1
  158. package/src/core/primitives/skeleton/__workshop__/index.ts +2 -2
  159. package/src/core/primitives/spinner/{spinner.tsx → Spinner.tsx} +2 -2
  160. package/src/core/primitives/spinner/__workshop__/Props.tsx +6 -1
  161. package/src/core/primitives/stack/{stack.tsx → Stack.tsx} +1 -1
  162. package/src/core/primitives/stack/__workshop__/{plain.tsx → Plain.tsx} +4 -1
  163. package/src/core/primitives/stack/__workshop__/index.ts +1 -1
  164. package/src/core/primitives/switch/{switch.tsx → Switch.tsx} +2 -10
  165. package/src/core/primitives/switch/__workshop__/index.ts +2 -2
  166. package/src/core/primitives/text/{text.tsx → Text.tsx} +14 -0
  167. package/src/core/primitives/text/__workshop__/{colored.tsx → Colored.tsx} +10 -8
  168. package/src/core/primitives/text/__workshop__/{example.tsx → Example.tsx} +15 -1
  169. package/src/core/primitives/text/__workshop__/index.ts +3 -3
  170. package/src/core/primitives/textArea/{textArea.tsx → TextArea.tsx} +7 -1
  171. package/src/core/primitives/textArea/__workshop__/{plain.tsx → Plain.tsx} +8 -0
  172. package/src/core/primitives/textArea/__workshop__/index.ts +1 -1
  173. package/src/core/primitives/textInput/{textInput.tsx → TextInput.tsx} +93 -72
  174. package/src/core/primitives/textInput/__workshop__/{plain.tsx → Plain.tsx} +34 -4
  175. package/src/core/primitives/textInput/__workshop__/{typed.tsx → Typed.tsx} +7 -1
  176. package/src/core/primitives/textInput/__workshop__/index.ts +7 -7
  177. package/src/core/primitives/tooltip/{tooltip.test.tsx → Tooltip.test.tsx} +4 -4
  178. package/src/core/primitives/tooltip/{tooltip.tsx → Tooltip.tsx} +102 -63
  179. package/src/core/primitives/tooltip/{tooltipLayer.tsx → TooltipLayer.tsx} +2 -2
  180. package/src/core/primitives/tooltip/__workshop__/{customPortal.tsx → CustomPortal.tsx} +2 -0
  181. package/src/core/primitives/tooltip/__workshop__/{overflowingBoundary.tsx → OverflowingBoundary.tsx} +2 -0
  182. package/src/core/primitives/tooltip/__workshop__/{props.tsx → Props.tsx} +12 -0
  183. package/src/core/primitives/tooltip/__workshop__/{resizableBoundary.tsx → ResizableBoundary.tsx} +5 -0
  184. package/src/core/primitives/tooltip/__workshop__/index.ts +4 -4
  185. package/src/core/primitives/tooltip/tooltipDelayGroup/{tooltipDelayGroupContext.tsx → TooltipDelayGroupContext.tsx} +1 -1
  186. package/src/core/primitives/tooltip/tooltipDelayGroup/{tooltipDelayGroupProvider.tsx → TooltipDelayGroupProvider.tsx} +2 -4
  187. package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +3 -3
  188. package/src/core/types.ts +6 -5
  189. package/src/core/utils/{errorBoundary.tsx → ErrorBoundary.tsx} +1 -1
  190. package/src/core/utils/boundaryElement/{boundaryElementContext.ts → BoundaryElementContext.ts} +2 -5
  191. package/src/core/utils/boundaryElement/BoundaryElementProvider.tsx +16 -0
  192. package/src/core/utils/boundaryElement/__workshop__/index.ts +1 -1
  193. package/src/core/utils/boundaryElement/types.ts +1 -4
  194. package/src/core/utils/boundaryElement/useBoundaryElement.ts +7 -19
  195. package/src/core/utils/elementQuery/__workshop__/CustomMedia.tsx +19 -0
  196. package/src/core/utils/elementQuery/__workshop__/index.ts +1 -1
  197. package/src/core/utils/elementQuery/__workshop__/styles.css.ts +31 -0
  198. package/src/core/utils/portal/{portal.test.tsx → Portal.test.tsx} +7 -7
  199. package/src/core/utils/portal/{portal.tsx → Portal.tsx} +7 -4
  200. package/src/core/utils/portal/{portalContext.ts → PortalContext.ts} +1 -1
  201. package/src/core/utils/portal/PortalProvider.tsx +38 -0
  202. package/src/core/utils/portal/__workshop__/index.ts +1 -1
  203. package/src/core/utils/portal/usePortal.ts +12 -5
  204. package/src/css/_responsiveStyle.css.ts +2 -2
  205. package/src/css/primitives/_input/_input.css.ts +13 -12
  206. package/src/css/primitives/_input/input.ts +2 -0
  207. package/src/css/primitives/_input/types.ts +2 -1
  208. package/src/css/primitives/avatar/avatar.css.ts +17 -5
  209. package/src/css/primitives/box/box.css.ts +19 -1
  210. package/src/css/primitives/button/button.css.ts +252 -183
  211. package/src/css/primitives/card/__workshop__/{color.tsx → Color.tsx} +9 -1
  212. package/src/css/primitives/card/__workshop__/index.ts +1 -1
  213. package/src/css/primitives/card/card.css.ts +133 -130
  214. package/src/css/primitives/checkbox/checkbox.css.ts +1 -0
  215. package/src/css/primitives/code/code.ts +4 -0
  216. package/src/css/primitives/code/types.ts +7 -1
  217. package/src/css/primitives/heading/heading.ts +4 -0
  218. package/src/css/primitives/heading/types.ts +7 -1
  219. package/src/css/primitives/label/label.ts +4 -0
  220. package/src/css/primitives/label/types.ts +7 -1
  221. package/src/css/primitives/radio/radio.css.ts +1 -1
  222. package/src/css/primitives/root/root.css.ts +1 -1
  223. package/src/css/primitives/select/select.css.ts +7 -1
  224. package/src/css/primitives/selectable/selectable.css.ts +79 -70
  225. package/src/css/primitives/switch/switch.css.ts +10 -1
  226. package/src/css/primitives/text/text.ts +2 -0
  227. package/src/css/primitives/text/types.ts +6 -1
  228. package/src/css/primitives/textInput/textInput.css.ts +15 -3
  229. package/src/css/props/width/types.ts +1 -1
  230. package/src/css/props/width/width.css.ts +5 -2
  231. package/src/css/theme/buildCSSTheme.ts +4 -0
  232. package/src/css/types.ts +4 -0
  233. package/src/css/vars.css.ts +4 -0
  234. package/dist/_chunks-cjs/refractor.cjs +0 -22
  235. package/dist/_chunks-cjs/refractor.cjs.map +0 -1
  236. package/dist/css/index.cjs +0 -966
  237. package/dist/css/index.cjs.map +0 -1
  238. package/dist/css/index.d.cts +0 -1370
  239. package/dist/index.cjs +0 -4515
  240. package/dist/index.cjs.map +0 -1
  241. package/dist/index.d.cts +0 -2521
  242. package/dist/theme.cjs +0 -870
  243. package/dist/theme.cjs.map +0 -1
  244. package/dist/theme.d.cts +0 -499
  245. package/src/core/primitives/button/__workshop__/sanityUploadButton.tsx +0 -36
  246. package/src/core/primitives/button/__workshop__/styled1.tsx +0 -17
  247. package/src/core/primitives/button/__workshop__/styled2.tsx +0 -19
  248. package/src/core/primitives/popover/helpers.ts +0 -32
  249. package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
  250. package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -102
  251. package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -18
  252. package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +0 -41
  253. package/src/core/utils/portal/portalProvider.tsx +0 -70
  254. /package/src/core/__workshop__/{boundary.tsx → Boundary.tsx} +0 -0
  255. /package/src/core/components/autocomplete/{autocompleteOption.tsx → AutocompleteOption.tsx} +0 -0
  256. /package/src/core/components/autocomplete/__workshop__/{async.tsx → Async.tsx} +0 -0
  257. /package/src/core/components/autocomplete/__workshop__/{constrainedHeight.tsx → ConstrainedHeight.tsx} +0 -0
  258. /package/src/core/components/autocomplete/__workshop__/{focusAndBlur.tsx → FocusAndBlur.tsx} +0 -0
  259. /package/src/core/components/autocomplete/__workshop__/{fullscreen.tsx → Fullscreen.tsx} +0 -0
  260. /package/src/core/components/breadcrumbs/__workshop__/{example.tsx → Example.tsx} +0 -0
  261. /package/src/core/components/dialog/__workshop__/{activate.tsx → Activate.tsx} +0 -0
  262. /package/src/core/components/dialog/__workshop__/{autoFocus.tsx → AutoFocus.tsx} +0 -0
  263. /package/src/core/components/dialog/__workshop__/{layering.tsx → Layering.tsx} +0 -0
  264. /package/src/core/components/dialog/__workshop__/{nested.tsx → Nested.tsx} +0 -0
  265. /package/src/core/components/dialog/__workshop__/{onScroll.tsx → OnScroll.tsx} +0 -0
  266. /package/src/core/components/dialog/__workshop__/{provider.tsx → Provider.tsx} +0 -0
  267. /package/src/core/components/dialog/__workshop__/{wrapped.tsx → Wrapped.tsx} +0 -0
  268. /package/src/core/components/hotkeys/__workshop__/{plain.tsx → Plain.tsx} +0 -0
  269. /package/src/core/components/menu/{menuDivider.tsx → MenuDivider.tsx} +0 -0
  270. /package/src/core/components/menu/__workshop__/{asComponent.tsx → AsComponent.tsx} +0 -0
  271. /package/src/core/components/menu/__workshop__/{avatarMenu.tsx → AvatarMenu.tsx} +0 -0
  272. /package/src/core/components/menu/__workshop__/{closableMenuButton.tsx → ClosableMenuButton.tsx} +0 -0
  273. /package/src/core/components/menu/__workshop__/{constrainedInBoundary.tsx → ConstrainedInBoundary.tsx} +0 -0
  274. /package/src/core/components/menu/__workshop__/{customMenuItem.tsx → CustomMenuItem.tsx} +0 -0
  275. /package/src/core/components/menu/__workshop__/{customSelectedState.tsx → CustomSelectedState.tsx} +0 -0
  276. /package/src/core/components/menu/__workshop__/{disableFocusOnClose.tsx → DisableFocusOnClose.tsx} +0 -0
  277. /package/src/core/components/menu/__workshop__/{groups.tsx → Groups.tsx} +0 -0
  278. /package/src/core/components/menu/__workshop__/{menuGroupRight.tsx → MenuGroupRight.tsx} +0 -0
  279. /package/src/core/components/menu/__workshop__/{nestedMenu.tsx → NestedMenu.tsx} +0 -0
  280. /package/src/core/components/menu/__workshop__/{onCloseMenuButton.tsx → OnCloseMenuButton.tsx} +0 -0
  281. /package/src/core/components/menu/__workshop__/{selectedItem.tsx → SelectedItem.tsx} +0 -0
  282. /package/src/core/components/menu/__workshop__/{shouldFocus.tsx → ShouldFocus.tsx} +0 -0
  283. /package/src/core/components/menu/__workshop__/{withoutArrow.tsx → WithoutArrow.tsx} +0 -0
  284. /package/src/core/components/tab/__workshop__/{example.tsx → Example.tsx} +0 -0
  285. /package/src/core/components/toast/__workshop__/{hook.tsx → Hook.tsx} +0 -0
  286. /package/src/core/components/tree/__workshop__/{basic.tsx → Basic.tsx} +0 -0
  287. /package/src/core/components/tree/__workshop__/{tabFromElement.tsx → TabFromElement.tsx} +0 -0
  288. /package/src/core/components/virtualList/__workshop__/{changingProps.tsx → ChangingProps.tsx} +0 -0
  289. /package/src/core/components/virtualList/__workshop__/{elementScroll.tsx → ElementScroll.tsx} +0 -0
  290. /package/src/core/components/virtualList/__workshop__/{infiniteList.tsx → InfiniteList.tsx} +0 -0
  291. /package/src/core/components/virtualList/__workshop__/{windowScrolll.tsx → WindowScrolll.tsx} +0 -0
  292. /package/src/core/hooks/useMediaIndex/__workshop__/{test.tsx → Test.tsx} +0 -0
  293. /package/src/core/primitives/arrow/{arrow.tsx → Arrow.tsx} +0 -0
  294. /package/src/core/primitives/avatar/__workshop__/{withinButton.tsx → WithinButton.tsx} +0 -0
  295. /package/src/core/primitives/avatar/__workshop__/{withinMenuItem.tsx → WithinMenuItem.tsx} +0 -0
  296. /package/src/core/primitives/badge/__workshop__/{tones.tsx → Tones.tsx} +0 -0
  297. /package/src/core/primitives/box/{box.tsx → Box.tsx} +0 -0
  298. /package/src/core/primitives/box/__workshop__/{responsive.tsx → Responsive.tsx} +0 -0
  299. /package/src/core/primitives/button/__workshop__/{custom.tsx → Custom.tsx} +0 -0
  300. /package/src/core/primitives/button/__workshop__/{customIcons.tsx → CustomIcons.tsx} +0 -0
  301. /package/src/core/primitives/button/__workshop__/{disabled.tsx → Disabled.tsx} +0 -0
  302. /package/src/core/primitives/button/__workshop__/{mixedChildren.tsx → MixedChildren.tsx} +0 -0
  303. /package/src/core/primitives/button/__workshop__/{textOverflow.tsx → TextOverflow.tsx} +0 -0
  304. /package/src/core/primitives/button/__workshop__/{uploadButton.tsx → UploadButton.tsx} +0 -0
  305. /package/src/core/primitives/card/__workshop__/{asButton.tsx → AsButton.tsx} +0 -0
  306. /package/src/core/primitives/card/__workshop__/{asComponent.tsx → AsComponent.tsx} +0 -0
  307. /package/src/core/primitives/card/__workshop__/{checkered.tsx → Checkered.tsx} +0 -0
  308. /package/src/core/primitives/card/__workshop__/{interactive.tsx → Interactive.tsx} +0 -0
  309. /package/src/core/primitives/card/__workshop__/{listNavigation.tsx → ListNavigation.tsx} +0 -0
  310. /package/src/core/primitives/card/__workshop__/{tones.tsx → Tones.tsx} +0 -0
  311. /package/src/core/primitives/checkbox/{checkbox.tsx → Checkbox.tsx} +0 -0
  312. /package/src/core/primitives/checkbox/__workshop__/{example.tsx → Example.tsx} +0 -0
  313. /package/src/core/primitives/checkbox/__workshop__/{props.tsx → Props.tsx} +0 -0
  314. /package/src/core/primitives/checkbox/__workshop__/{readOnly.tsx → ReadOnly.tsx} +0 -0
  315. /package/src/core/primitives/checkbox/__workshop__/{tones.tsx → Tones.tsx} +0 -0
  316. /package/src/core/primitives/code/{refractor.tsx → Refractor.tsx} +0 -0
  317. /package/src/core/primitives/code/__workshop__/{opticalAlignment.tsx → OpticalAlignment.tsx} +0 -0
  318. /package/src/core/primitives/flex/__workshop__/{gap.tsx → Gap.tsx} +0 -0
  319. /package/src/core/primitives/grid/__workshop__/{responsive.tsx → Responsive.tsx} +0 -0
  320. /package/src/core/primitives/heading/__workshop__/{opticalAlignment.tsx → OpticalAlignment.tsx} +0 -0
  321. /package/src/core/primitives/kbd/__workshop__/{plain.tsx → Plain.tsx} +0 -0
  322. /package/src/core/primitives/label/__workshop__/{opticalAlignment.tsx → OpticalAlignment.tsx} +0 -0
  323. /package/src/core/primitives/layer/__workshop__/{multipleRoots.tsx → MultipleRoots.tsx} +0 -0
  324. /package/src/core/primitives/layer/__workshop__/{nested.tsx → Nested.tsx} +0 -0
  325. /package/src/core/primitives/layer/__workshop__/{responsiveZOffset.tsx → ResponsiveZOffset.tsx} +0 -0
  326. /package/src/core/primitives/radio/__workshop__/{example.tsx → Example.tsx} +0 -0
  327. /package/src/core/primitives/radio/__workshop__/{plain.tsx → Plain.tsx} +0 -0
  328. /package/src/core/primitives/select/__workshop__/{readOnly.tsx → ReadOnly.tsx} +0 -0
  329. /package/src/core/primitives/spinner/{animatedSpinnerIcon.tsx → AnimatedSpinnerIcon.tsx} +0 -0
  330. /package/src/core/primitives/srOnly/{srOnly.tsx → SrOnly.tsx} +0 -0
  331. /package/src/core/primitives/switch/__workshop__/{example.tsx → Example.tsx} +0 -0
  332. /package/src/core/primitives/switch/__workshop__/{props.tsx → Props.tsx} +0 -0
  333. /package/src/core/primitives/text/__workshop__/{opticalAlignment.tsx → OpticalAlignment.tsx} +0 -0
  334. /package/src/core/primitives/textInput/__workshop__/{clearButton.tsx → ClearButton.tsx} +0 -0
  335. /package/src/core/primitives/textInput/__workshop__/{customValidity.tsx → CustomValidity.tsx} +0 -0
  336. /package/src/core/primitives/textInput/__workshop__/{readOnly.tsx → ReadOnly.tsx} +0 -0
  337. /package/src/core/primitives/textInput/__workshop__/{states.tsx → States.tsx} +0 -0
  338. /package/src/core/primitives/textInput/__workshop__/{tones.tsx → Tones.tsx} +0 -0
  339. /package/src/core/utils/boundaryElement/__workshop__/{plain.tsx → Plain.tsx} +0 -0
  340. /package/src/core/utils/elementQuery/{elementQuery.tsx → ElementQuery.tsx} +0 -0
  341. /package/src/core/utils/portal/__workshop__/{named.tsx → Named.tsx} +0 -0
@@ -11,10 +11,10 @@ import {
11
11
  useState,
12
12
  } from 'react'
13
13
 
14
- import {Stack} from '../../primitives/stack/stack'
14
+ import {Stack} from '../../primitives/stack/Stack'
15
15
  import type {ComponentType, Props} from '../../types'
16
16
  import {_findNextItemElement, _findPrevItemElement, _focusItemElement} from './helpers'
17
- import {TreeContext} from './treeContext'
17
+ import {TreeContext} from './TreeContext'
18
18
  import type {TreeContextValue, TreeState} from './types'
19
19
 
20
20
  /** @beta */
@@ -230,7 +230,7 @@ export function Tree<E extends TreeElementType = typeof DEFAULT_TREE_ELEMENT>(
230
230
  }, [children])
231
231
 
232
232
  return (
233
- <TreeContext.Provider value={contextValue}>
233
+ <TreeContext value={contextValue}>
234
234
  <Stack
235
235
  as="ul"
236
236
  data-ui="Tree"
@@ -243,6 +243,6 @@ export function Tree<E extends TreeElementType = typeof DEFAULT_TREE_ELEMENT>(
243
243
  >
244
244
  {children}
245
245
  </Stack>
246
- </TreeContext.Provider>
246
+ </TreeContext>
247
247
  )
248
248
  }
@@ -7,4 +7,4 @@ import type {TreeContextValue} from './types'
7
7
  * @internal
8
8
  */
9
9
  export const TreeContext: Context<TreeContextValue | null> =
10
- createGlobalScopedContext<TreeContextValue | null>('@sanity/ui/v3/tree', null)
10
+ createGlobalScopedContext<TreeContextValue | null>('@sanity/ui/v4/tree', null)
@@ -1,4 +1,4 @@
1
- import {Stack} from '../../primitives/stack/stack'
1
+ import {Stack} from '../../primitives/stack/Stack'
2
2
  import type {ComponentType, Props} from '../../types'
3
3
  import {useTree} from './useTree'
4
4
 
@@ -7,22 +7,22 @@ import {
7
7
  type MouseEvent,
8
8
  type MouseEventHandler,
9
9
  type ReactNode,
10
- type Ref,
11
10
  useCallback,
12
11
  useEffect,
13
12
  useId,
14
13
  useMemo,
15
14
  useRef,
15
+ useState,
16
16
  } from 'react'
17
17
 
18
- import {Box, type BoxProps} from '../../primitives/box/box'
19
- import type {CardOwnProps} from '../../primitives/card/card'
20
- import {Flex} from '../../primitives/flex/flex'
21
- import {Selectable, type SelectableElementType} from '../../primitives/selectable/selectable'
22
- import {Text} from '../../primitives/text/text'
18
+ import {Box, type BoxProps} from '../../primitives/box/Box'
19
+ import type {CardOwnProps} from '../../primitives/card/Card'
20
+ import {Flex} from '../../primitives/flex/Flex'
21
+ import {Selectable, type SelectableElementType} from '../../primitives/selectable/Selectable'
22
+ import {Text} from '../../primitives/text/Text'
23
23
  import type {ComponentType, Props} from '../../types'
24
- import {TreeContext} from './treeContext'
25
- import {TreeGroup} from './treeGroup'
24
+ import {TreeContext} from './TreeContext'
25
+ import {TreeGroup} from './TreeGroup'
26
26
  import {useTree} from './useTree'
27
27
 
28
28
  /** @beta */
@@ -81,17 +81,19 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
81
81
  ...rest
82
82
  } = props as TreeItemProps<typeof DEFAULT_TREE_ITEM_ELEMENT>
83
83
 
84
- const rootRef = useRef<HTMLElement | null>(null)
84
+ const [rootElement, setRootElement] = useState<HTMLLIElement | null>(null)
85
85
  const treeitemRef = useRef<HTMLDivElement | null>(null)
86
86
  const tree = useTree()
87
87
  const {path, registerItem, setExpanded, setFocusedElement} = tree
88
88
  const _id = useId()
89
89
  const id = idProp || _id
90
- const itemPath = useMemo(() => path.concat([id || '']), [id, path])
91
- const itemKey = itemPath.join('/')
90
+ const [itemPath, itemKey] = useMemo(() => {
91
+ const itemPath = path.concat([id || ''])
92
+ return [itemPath, itemPath.join('/')]
93
+ }, [id, path])
92
94
  const itemState = tree.state[itemKey]
93
95
  const expanded = itemState?.expanded === undefined ? expandedProp : itemState?.expanded || false
94
- const focused = tree.focusedElement && tree.focusedElement === rootRef.current
96
+ const focused = tree.focusedElement && tree.focusedElement === rootElement
95
97
  const tabIndex = focused ? 0 : -1
96
98
  const contextValue = useMemo(
97
99
  () => ({...tree, level: tree.level + 1, path: itemPath}),
@@ -111,28 +113,28 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
111
113
  ) {
112
114
  event.stopPropagation()
113
115
  setExpanded(itemKey, !expanded)
114
- setFocusedElement(rootRef.current)
116
+ setFocusedElement(rootElement)
115
117
  }
116
118
  },
117
- [expanded, itemKey, onClick, setExpanded, setFocusedElement],
119
+ [expanded, itemKey, onClick, rootElement, setExpanded, setFocusedElement],
118
120
  )
119
121
 
120
122
  const handleKeyDown = useCallback(
121
123
  (event: KeyboardEvent<HTMLElement>) => {
122
124
  if (focused && event.key === 'Enter') {
123
- const el = treeitemRef.current || rootRef.current
125
+ const el = treeitemRef.current || rootElement
124
126
 
125
127
  el?.click()
126
128
  }
127
129
  },
128
- [focused],
130
+ [focused, rootElement],
129
131
  )
130
132
 
131
133
  useEffect(() => {
132
- if (!rootRef.current) return
134
+ if (!rootElement) return
133
135
 
134
- return registerItem(rootRef.current, itemPath.join('/'), expanded, selected)
135
- }, [expanded, itemPath, registerItem, selected])
136
+ return registerItem(rootElement, itemKey, expanded, selected)
137
+ }, [expanded, itemKey, registerItem, rootElement, selected])
136
138
 
137
139
  const content = (
138
140
  <Flex gap={space} padding={padding}>
@@ -172,7 +174,7 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
172
174
  as="li"
173
175
  className={treeItem({className})}
174
176
  onClick={handleClick}
175
- ref={rootRef as Ref<HTMLLIElement>}
177
+ ref={setRootElement}
176
178
  role="none"
177
179
  >
178
180
  <Selectable
@@ -193,9 +195,9 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
193
195
  {content}
194
196
  </Selectable>
195
197
 
196
- <TreeContext.Provider value={contextValue}>
198
+ <TreeContext value={contextValue}>
197
199
  {children && <TreeGroup hidden={!expanded}>{children}</TreeGroup>}
198
- </TreeContext.Provider>
200
+ </TreeContext>
199
201
  </Box>
200
202
  )
201
203
  }
@@ -211,7 +213,8 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
211
213
  className={treeItem({className})}
212
214
  onClick={handleClick}
213
215
  onKeyDown={handleKeyDown}
214
- ref={rootRef as Ref<HTMLAnchorElement>}
216
+ // @ts-expect-error - TODO: fix this
217
+ ref={setRootElement}
215
218
  role="treeitem"
216
219
  tabIndex={tabIndex}
217
220
  >
@@ -229,9 +232,9 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
229
232
  {content}
230
233
  </Selectable>
231
234
 
232
- <TreeContext.Provider value={contextValue}>
235
+ <TreeContext value={contextValue}>
233
236
  {children && <TreeGroup expanded={expanded}>{children}</TreeGroup>}
234
- </TreeContext.Provider>
237
+ </TreeContext>
235
238
  </Box>
236
239
  )
237
240
  }
@@ -8,14 +8,14 @@ const scope: WorkshopScope = {
8
8
  {
9
9
  name: 'basic',
10
10
  title: 'Basic',
11
- component: lazy(() => import('./basic')),
12
- // options: {perfTests: () => import('./basic.perf')},
11
+ component: lazy(() => import('./Basic')),
12
+ // options: {perfTests: () => import('./Basic.perf')},
13
13
  },
14
14
  {
15
15
  name: 'tab',
16
16
  title: 'Tab',
17
- component: lazy(() => import('./tabFromElement')),
18
- // options: {perfTests: () => import('./basic.perf')},
17
+ component: lazy(() => import('./TabFromElement')),
18
+ // options: {perfTests: () => import('./Basic.perf')},
19
19
  },
20
20
  ],
21
21
  }
@@ -1,13 +1,13 @@
1
- import {useContext} from 'react'
1
+ import {use} from 'react'
2
2
 
3
- import {TreeContext} from './treeContext'
3
+ import {TreeContext} from './TreeContext'
4
4
  import type {TreeContextValue} from './types'
5
5
 
6
6
  /**
7
7
  * @beta
8
8
  */
9
9
  export function useTree(): TreeContextValue {
10
- const tree = useContext(TreeContext)
10
+ const tree = use(TreeContext)
11
11
 
12
12
  if (!tree) {
13
13
  throw new Error('Tree: missing context value')
@@ -3,6 +3,7 @@ import type {Space} from '@sanity/ui/theme'
3
3
  import {
4
4
  type CSSProperties,
5
5
  type ReactNode,
6
+ startTransition,
6
7
  useEffect,
7
8
  useImperativeHandle,
8
9
  useMemo,
@@ -12,7 +13,7 @@ import {
12
13
 
13
14
  import {_isScrollable} from '../../helpers/scroll'
14
15
  import {_ResizeObserver} from '../../observers/resize'
15
- import {Box} from '../../primitives/box/box'
16
+ import {Box} from '../../primitives/box/Box'
16
17
  import type {ComponentType, Props} from '../../types'
17
18
 
18
19
  /** @beta */
@@ -29,7 +30,10 @@ export interface VirtualListChangeOpts {
29
30
  }
30
31
 
31
32
  /** @beta */
32
- export type VirtualListOwnProps<Item = any> = {
33
+ export type VirtualListOwnProps<
34
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
35
+ Item = any,
36
+ > = {
33
37
  gap?: Space
34
38
  getItemKey?: (item: Item, itemIndex: number) => string
35
39
  items?: Item[]
@@ -113,6 +117,7 @@ export function VirtualList<E extends VirtualListElementType = typeof DEFAULT_VI
113
117
  window.addEventListener('scroll', handleScroll, {passive: true})
114
118
  window.addEventListener('resize', handleResize)
115
119
 
120
+ // eslint-disable-next-line react-hooks/set-state-in-effect
116
121
  setScrollHeight(window.innerHeight)
117
122
 
118
123
  handleScroll()
@@ -141,51 +146,21 @@ export function VirtualList<E extends VirtualListElementType = typeof DEFAULT_VI
141
146
 
142
147
  useEffect(() => {
143
148
  // console.log('renderItem', renderItem)
144
- setItemHeight(-1)
149
+ startTransition(() => setItemHeight(-1))
145
150
  }, [renderItem])
146
151
 
147
- const children = useMemo(() => {
148
- if (!renderItem || items.length === 0) return null
149
-
150
- if (itemHeight === -1) {
151
- return [
152
- <>
153
- <Box
154
- ref={(el) => (el ? setItemHeight(el.offsetHeight) : undefined)}
155
- insetTop={0}
156
- insetLeft={0}
157
- insetRight={0}
158
- key={0}
159
- position="absolute"
160
- >
161
- {renderItem(items[0])}
162
- </Box>
163
- <div
164
- ref={(el) => (el ? setGapValue(el.offsetHeight) : undefined)}
165
- style={{height: vars.space[gap]}}
166
- />
167
- </>,
168
- ]
169
- }
170
-
171
- return items.slice(fromIndex, toIndex).map((item, _itemIndex) => {
172
- const itemIndex = fromIndex + _itemIndex
173
- const node = renderItem(item)
174
- const key = getItemKey ? getItemKey(item, itemIndex) : itemIndex
175
-
176
- return (
177
- <Box
178
- insetLeft={0}
179
- insetRight={0}
180
- key={key}
181
- position="absolute"
182
- style={{top: itemIndex * (itemHeight + gapValue)}}
183
- >
184
- {node}
185
- </Box>
186
- )
187
- })
188
- }, [fromIndex, gap, gapValue, getItemKey, itemHeight, items, renderItem, toIndex])
152
+ const children = useChildren({
153
+ fromIndex,
154
+ gap,
155
+ getItemKey,
156
+ itemHeight,
157
+ items,
158
+ renderItem,
159
+ toIndex,
160
+ gapValue,
161
+ setGapValue,
162
+ setItemHeight,
163
+ })
189
164
 
190
165
  const wrapperStyle: CSSProperties = useMemo(() => ({height}), [height])
191
166
 
@@ -198,6 +173,73 @@ export function VirtualList<E extends VirtualListElementType = typeof DEFAULT_VI
198
173
  )
199
174
  }
200
175
 
176
+ function useChildren({
177
+ fromIndex,
178
+ gap,
179
+ getItemKey,
180
+ itemHeight,
181
+ items,
182
+ renderItem,
183
+ toIndex,
184
+ gapValue,
185
+ setGapValue,
186
+ setItemHeight,
187
+ }: Pick<VirtualListProps, 'getItemKey' | 'renderItem'> &
188
+ Required<Pick<VirtualListProps, 'items'>> & {
189
+ fromIndex: number
190
+ gap: Space
191
+ itemHeight: number
192
+ toIndex: number
193
+ gapValue: number
194
+ setGapValue: React.Dispatch<React.SetStateAction<number>>
195
+ setItemHeight: React.Dispatch<React.SetStateAction<number>>
196
+ }) {
197
+ if (!renderItem || items.length === 0) return null
198
+
199
+ if (itemHeight === -1) {
200
+ return [
201
+ <>
202
+ <Box
203
+ ref={(el) => {
204
+ if (el) setItemHeight(el.offsetHeight)
205
+ }}
206
+ insetTop={0}
207
+ insetLeft={0}
208
+ insetRight={0}
209
+ key={0}
210
+ position="absolute"
211
+ >
212
+ {renderItem(items[0])}
213
+ </Box>
214
+ <div
215
+ ref={(el) => {
216
+ if (el) setGapValue(el.offsetHeight)
217
+ }}
218
+ style={{height: vars.space[gap]}}
219
+ />
220
+ </>,
221
+ ]
222
+ }
223
+
224
+ return items.slice(fromIndex, toIndex).map((item, _itemIndex) => {
225
+ const itemIndex = fromIndex + _itemIndex
226
+ const node = renderItem(item)
227
+ const key = getItemKey ? getItemKey(item, itemIndex) : itemIndex
228
+
229
+ return (
230
+ <Box
231
+ insetLeft={0}
232
+ insetRight={0}
233
+ key={key}
234
+ position="absolute"
235
+ style={{top: itemIndex * (itemHeight + gapValue)}}
236
+ >
237
+ {node}
238
+ </Box>
239
+ )
240
+ })
241
+ }
242
+
201
243
  function findScrollable(parentNode: ParentNode | null) {
202
244
  let _scrollEl = parentNode
203
245
 
@@ -8,22 +8,22 @@ const scope: WorkshopScope = {
8
8
  {
9
9
  name: 'window-scroll',
10
10
  title: 'Window scroll',
11
- component: lazy(() => import('./windowScrolll')),
11
+ component: lazy(() => import('./WindowScrolll')),
12
12
  },
13
13
  {
14
14
  name: 'element-scroll',
15
15
  title: 'Element scroll',
16
- component: lazy(() => import('./elementScroll')),
16
+ component: lazy(() => import('./ElementScroll')),
17
17
  },
18
18
  {
19
19
  name: 'infinite-list',
20
20
  title: 'Infinite list',
21
- component: lazy(() => import('./infiniteList')),
21
+ component: lazy(() => import('./InfiniteList')),
22
22
  },
23
23
  {
24
24
  name: 'changing-props',
25
25
  title: 'Changing props',
26
- component: lazy(() => import('./changingProps')),
26
+ component: lazy(() => import('./ChangingProps')),
27
27
  },
28
28
  ],
29
29
  }
@@ -4,15 +4,6 @@ import {EMPTY_ARRAY} from '../constants'
4
4
  import {isArray} from '../lib/isArray'
5
5
  import {isRecord} from '../lib/isRecord'
6
6
 
7
- /**
8
- * @internal
9
- */
10
- export function _getArrayProp<T>(val: T | T[] | undefined, defaultVal?: T[]): T[] {
11
- if (val === undefined) return defaultVal || EMPTY_ARRAY
12
-
13
- return Array.isArray(val) ? val : [val]
14
- }
15
-
16
7
  /**
17
8
  * @internal
18
9
  */
@@ -2,16 +2,23 @@ import {useEffect} from 'react'
2
2
  import {useEffectEvent} from 'use-effect-event'
3
3
 
4
4
  /**
5
+ * Adds global keydown event listener to the window.
6
+ *
7
+ * @param onKeyDown - The function to call when a keydown event is triggered.
8
+ * @param options - The options to pass to the addEventListener function (example, capture: true)
5
9
  * @beta
6
10
  */
7
- export function useGlobalKeyDown(onKeyDown: (event: KeyboardEvent) => void): void {
11
+ export function useGlobalKeyDown(
12
+ onKeyDown: (event: KeyboardEvent) => void,
13
+ options?: AddEventListenerOptions,
14
+ ): void {
8
15
  const handleKeyDown = useEffectEvent((event: KeyboardEvent) => onKeyDown(event))
9
16
 
10
17
  useEffect(() => {
11
18
  const handler = (event: KeyboardEvent) => handleKeyDown(event)
12
19
 
13
- window.addEventListener('keydown', handler)
20
+ window.addEventListener('keydown', handler, options)
14
21
 
15
- return () => window.removeEventListener('keydown', handler)
16
- }, [])
22
+ return () => window.removeEventListener('keydown', handler, options)
23
+ }, [options])
17
24
  }
@@ -8,7 +8,7 @@ const scope: WorkshopScope = {
8
8
  {
9
9
  name: 'test',
10
10
  title: 'Test',
11
- component: lazy(() => import('./test')),
11
+ component: lazy(() => import('./Test')),
12
12
  },
13
13
  ],
14
14
  }
@@ -1,28 +1,15 @@
1
1
  import type {Breakpoint, ResponsiveProp} from '@sanity/ui/css'
2
- import {useState} from 'react'
2
+ import {useMemo} from 'react'
3
3
 
4
4
  import {_getResponsiveProp} from '../helpers/props'
5
5
 
6
6
  /**
7
- * This API might change. DO NOT USE IN PRODUCTION.
8
- * @beta
7
+ * @internal
8
+ * @deprecated use `_getResponsiveProp` directly instead, if necessary
9
9
  */
10
10
  export function useResponsiveProp<T>(
11
11
  val: ResponsiveProp<T> | undefined,
12
12
  defaultVal?: Partial<Record<Breakpoint, T>>,
13
13
  ): Partial<Record<Breakpoint, T>> {
14
- const [[cachedVal, cachedHash], setCache] = useState<[Partial<Record<Breakpoint, T>>, string]>(
15
- () => [_getResponsiveProp(val, defaultVal), JSON.stringify(val ?? defaultVal)],
16
- )
17
-
18
- const hash = JSON.stringify(val ?? defaultVal)
19
-
20
- if (hash !== cachedHash) {
21
- // If the cached hash has changed, update the cache right away.
22
- // Calling setState during render is fine in this case, and preferred over a useEffect loop
23
- // https://19.dev/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes
24
- setCache([_getResponsiveProp(val, defaultVal), hash])
25
- }
26
-
27
- return cachedVal
14
+ return useMemo(() => _getResponsiveProp(val, defaultVal), [defaultVal, val])
28
15
  }