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

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 +1752 -1132
  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} +24 -9
  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
@@ -18,24 +18,25 @@ import {
18
18
  type ReactElement,
19
19
  type ReactNode,
20
20
  type Ref,
21
+ use,
21
22
  useCallback,
22
- useEffect,
23
23
  useImperativeHandle,
24
24
  useMemo,
25
25
  useRef,
26
26
  } from 'react'
27
27
 
28
28
  import {Z_OFFSETS} from '../../constants'
29
+ import {_getResponsiveProp} from '../../helpers/props'
29
30
  import {usePrefersReducedMotion} from '../../hooks/usePrefersReducedMotion'
30
- import {useResponsiveProp} from '../../hooks/useResponsiveProp'
31
31
  import {origin} from '../../middleware/origin'
32
32
  import type {ComponentType, Placement, Props} from '../../types'
33
- import {useBoundaryElement} from '../../utils/boundaryElement/useBoundaryElement'
33
+ import {BoundaryElementContext} from '../../utils/boundaryElement/BoundaryElementContext'
34
34
  import {getElementRef} from '../../utils/getElementRef'
35
- import {Portal} from '../../utils/portal/portal'
36
- import {CardProvider} from '../card/cardProvider'
37
- import {useCard} from '../card/useCard'
38
- import {type LayerOwnProps} from '../layer/layer'
35
+ import {Portal} from '../../utils/portal/Portal'
36
+ import {CardContext} from '../card/CardContext'
37
+ import {CardProvider} from '../card/CardProvider'
38
+ import {assertCardContext} from '../card/useCard'
39
+ import {type LayerOwnProps} from '../layer/Layer'
39
40
  import {useLayer} from '../layer/useLayer'
40
41
  import {
41
42
  DEFAULT_FALLBACK_PLACEMENTS,
@@ -44,7 +45,7 @@ import {
44
45
  DEFAULT_POPOVER_PADDING,
45
46
  } from './constants'
46
47
  import {size} from './floating-ui/size'
47
- import {PopoverLayer} from './popoverLayer'
48
+ import {PopoverLayer} from './PopoverLayer'
48
49
  import type {PopoverMargins, PopoverUpdateCallback} from './types'
49
50
 
50
51
  /** @public */
@@ -154,8 +155,6 @@ function ViewportOverlay() {
154
155
  export function Popover<E extends PopoverElementType = typeof DEFAULT_POPOVER_ELEMENT>(
155
156
  props: PopoverProps<E>,
156
157
  ): React.JSX.Element {
157
- const boundaryElementContext = useBoundaryElement()
158
-
159
158
  const {
160
159
  __unstable_margins: margins = DEFAULT_POPOVER_MARGINS,
161
160
  animate: _animate = false,
@@ -166,12 +165,10 @@ export function Popover<E extends PopoverElementType = typeof DEFAULT_POPOVER_EL
166
165
  constrainSize = false,
167
166
  content,
168
167
  disabled,
169
- fallbackPlacements = props.fallbackPlacements ??
170
- DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? 'bottom'],
168
+ fallbackPlacements: _fallbackPlacements,
171
169
  matchReferenceWidth,
172
- floatingBoundary = boundaryElementContext.element,
170
+ floatingBoundary: _floatingBoundary,
173
171
  modal,
174
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
175
172
  onActivate,
176
173
  open,
177
174
  overflow = 'hidden',
@@ -182,7 +179,7 @@ export function Popover<E extends PopoverElementType = typeof DEFAULT_POPOVER_EL
182
179
  preventOverflow = true,
183
180
  radius = 3,
184
181
  ref: forwardedRef,
185
- referenceBoundary = boundaryElementContext.element,
182
+ referenceBoundary: _referenceBoundary,
186
183
  referenceElement,
187
184
  scheme,
188
185
  shadow = 3,
@@ -192,12 +189,14 @@ export function Popover<E extends PopoverElementType = typeof DEFAULT_POPOVER_EL
192
189
  updateRef,
193
190
  ...rest
194
191
  } = props as PopoverProps<typeof DEFAULT_POPOVER_ELEMENT>
195
-
196
- const card = useCard()
192
+ const fallbackPlacements =
193
+ _fallbackPlacements ?? DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? 'bottom']
194
+ const floatingBoundary = _floatingBoundary ?? use(BoundaryElementContext)
195
+ const referenceBoundary = _referenceBoundary ?? use(BoundaryElementContext)
197
196
 
198
197
  const prefersReducedMotion = usePrefersReducedMotion()
199
198
  const animate = prefersReducedMotion ? false : _animate
200
- const zOffset = useResponsiveProp(zOffsetProp)
199
+ const zOffset = useMemo(() => _getResponsiveProp(zOffsetProp), [zOffsetProp])
201
200
  const ref = useRef<HTMLDivElement | null>(null)
202
201
  const arrowRef = useRef<HTMLDivElement | null>(null)
203
202
  const rootBoundary: RootBoundary = 'viewport'
@@ -207,108 +206,22 @@ export function Popover<E extends PopoverElementType = typeof DEFAULT_POPOVER_EL
207
206
  // Keep track of reference element width (see `size` middleware below)
208
207
  const referenceWidthRef = useRef<number>(undefined)
209
208
 
210
- const middleware = useMemo(() => {
211
- const ret: Middleware[] = []
212
-
213
- // Flip the floating element when leaving the boundary box
214
- if (constrainSize || preventOverflow) {
215
- if (placementStrategy === 'autoPlacement') {
216
- ret.push(
217
- autoPlacement({
218
- allowedPlacements: [placementProp].concat(fallbackPlacements),
219
- }),
220
- )
221
- } else {
222
- ret.push(
223
- flip({
224
- boundary: floatingBoundary || undefined,
225
- fallbackPlacements,
226
- padding: DEFAULT_POPOVER_PADDING,
227
- rootBoundary,
228
- }),
229
- )
230
- }
231
- }
232
-
233
- // Define distance between reference and floating element
234
- ret.push(offset({mainAxis: DEFAULT_POPOVER_DISTANCE}))
235
-
236
- // Track sizes
237
- if (constrainSize || matchReferenceWidth) {
238
- ret.push(
239
- size({
240
- apply({availableWidth, availableHeight, elements, referenceWidth}) {
241
- // not fresh, so use refs
242
-
243
- referenceWidthRef.current = referenceWidth
244
-
245
- if (matchReferenceWidth) {
246
- elements.floating.style.width = `${referenceWidth}px`
247
- }
248
-
249
- if (constrainSize) {
250
- elements.floating.style.maxWidth = `${availableWidth}px`
251
- elements.floating.style.maxHeight = `${availableHeight}px`
252
- }
253
- },
254
- boundaryElement: floatingBoundary || undefined,
255
- constrainSize,
256
- margins,
257
- matchReferenceWidth,
258
- padding: DEFAULT_POPOVER_PADDING,
259
- }),
260
- )
261
- }
262
-
263
- // Shift the popover so its sits within the boundary element
264
- if (preventOverflow) {
265
- ret.push(
266
- shift({
267
- boundary: floatingBoundary || undefined,
268
- rootBoundary,
269
- padding: DEFAULT_POPOVER_PADDING,
270
- }),
271
- )
272
- }
273
-
274
- // Place arrow
275
- if (arrowProp) {
276
- ret.push(
277
- arrow({
278
- element: arrowRef,
279
- padding: DEFAULT_POPOVER_PADDING,
280
- }),
281
- )
282
- }
283
-
284
- // Determine the origin to scale from.
285
- // Must be placed after `@sanity/ui/size` and `shift` middleware.
286
- if (animate) {
287
- ret.push(origin)
288
- }
289
-
290
- ret.push(
291
- hide({
292
- boundary: referenceBoundary || undefined,
293
- padding: DEFAULT_POPOVER_PADDING,
294
- strategy: 'referenceHidden',
295
- }),
296
- )
297
-
298
- return ret
299
- }, [
209
+ const middleware = useMiddleware({
300
210
  animate,
301
211
  arrowProp,
212
+ arrowRef,
302
213
  constrainSize,
303
214
  fallbackPlacements,
304
215
  floatingBoundary,
305
- placementProp,
306
- placementStrategy,
307
216
  margins,
308
217
  matchReferenceWidth,
218
+ placementProp,
219
+ placementStrategy,
309
220
  preventOverflow,
310
221
  referenceBoundary,
311
- ])
222
+ referenceWidthRef,
223
+ rootBoundary,
224
+ })
312
225
 
313
226
  const {x, y, middlewareData, placement, refs, strategy, update} = useFloating({
314
227
  middleware,
@@ -329,10 +242,6 @@ export function Popover<E extends PopoverElementType = typeof DEFAULT_POPOVER_EL
329
242
  const originX = middlewareData['@sanity/ui/origin']?.originX
330
243
  const originY = middlewareData['@sanity/ui/origin']?.originY
331
244
 
332
- const setArrow = useCallback((arrowEl: HTMLDivElement | null) => {
333
- arrowRef.current = arrowEl
334
- }, [])
335
-
336
245
  const setFloating = useCallback(
337
246
  (node: HTMLDivElement | null) => {
338
247
  ref.current = node
@@ -341,22 +250,9 @@ export function Popover<E extends PopoverElementType = typeof DEFAULT_POPOVER_EL
341
250
  [refs],
342
251
  )
343
252
 
344
- const setReference = useCallback(
345
- (node: HTMLElement | null) => {
346
- refs.setReference(node)
347
-
348
- if (!childProp) return
349
-
350
- const childRef = getElementRef(childProp)
351
-
352
- if (typeof childRef === 'function') {
353
- childRef(node)
354
- } else if (childRef) {
355
- childRef.current = node
356
- }
357
- },
358
- [childProp, refs],
359
- )
253
+ // If there's a child then we need to set the reference element to the cloned child ref
254
+ // and if child changes we make sure to update or remove the reference element.
255
+ useImperativeHandle(childProp ? getElementRef(childProp) : null, () => refs.reference.current)
360
256
 
361
257
  const child = useMemo(() => {
362
258
  // If a reference element is defined, we don't need to clone the child
@@ -364,18 +260,10 @@ export function Popover<E extends PopoverElementType = typeof DEFAULT_POPOVER_EL
364
260
 
365
261
  if (!childProp) return null
366
262
 
367
- return cloneElement(childProp, {ref: setReference})
368
- }, [childProp, referenceElement, setReference])
263
+ return cloneElement(childProp, {ref: refs.setReference})
264
+ }, [childProp, referenceElement, refs.setReference])
369
265
 
370
- useEffect(() => {
371
- if (updateRef) {
372
- if (typeof updateRef === 'function') {
373
- updateRef(update)
374
- } else if (updateRef) {
375
- updateRef.current = update
376
- }
377
- }
378
- }, [update, updateRef])
266
+ useImperativeHandle(updateRef, () => update, [update])
379
267
 
380
268
  if (disabled) {
381
269
  return childProp || <></>
@@ -392,7 +280,7 @@ export function Popover<E extends PopoverElementType = typeof DEFAULT_POPOVER_EL
392
280
  __unstable_margins={margins}
393
281
  animate={animate}
394
282
  arrow={arrowProp}
395
- arrowRef={setArrow}
283
+ arrowRef={arrowRef}
396
284
  arrowX={arrowX}
397
285
  arrowY={arrowY}
398
286
  as={as}
@@ -419,17 +307,24 @@ export function Popover<E extends PopoverElementType = typeof DEFAULT_POPOVER_EL
419
307
  </>
420
308
  )
421
309
 
422
- const children =
423
- open &&
424
- (portal ? (
310
+ let children = open ? node : null
311
+
312
+ if (open && portal) {
313
+ let resolvedTone = tone as Exclude<typeof tone, 'inherit'>
314
+ if (tone === 'inherit') {
315
+ const card = use(CardContext)
316
+ assertCardContext(card)
317
+ resolvedTone = card.tone
318
+ }
319
+
320
+ children = (
425
321
  <Portal __unstable_name={typeof portal === 'string' ? portal : undefined}>
426
- <CardProvider tone={tone === 'inherit' ? card.tone : tone} scheme={scheme ?? 'light'}>
322
+ <CardProvider tone={resolvedTone} scheme={scheme ?? 'light'}>
427
323
  {node}
428
324
  </CardProvider>
429
325
  </Portal>
430
- ) : (
431
- node
432
- ))
326
+ )
327
+ }
433
328
 
434
329
  return (
435
330
  <>
@@ -441,3 +336,128 @@ export function Popover<E extends PopoverElementType = typeof DEFAULT_POPOVER_EL
441
336
  </>
442
337
  )
443
338
  }
339
+
340
+ function useMiddleware({
341
+ animate,
342
+ arrowProp,
343
+ arrowRef,
344
+ constrainSize,
345
+ fallbackPlacements,
346
+ floatingBoundary,
347
+ margins,
348
+ matchReferenceWidth,
349
+ placementProp,
350
+ placementStrategy,
351
+ preventOverflow,
352
+ referenceBoundary,
353
+ referenceWidthRef,
354
+ rootBoundary,
355
+ }: {
356
+ animate: boolean
357
+ arrowProp: boolean
358
+ arrowRef: React.RefObject<HTMLDivElement | null>
359
+ constrainSize: boolean
360
+ fallbackPlacements: Placement[]
361
+ floatingBoundary: HTMLElement | null
362
+ margins: PopoverMargins
363
+ matchReferenceWidth: boolean | undefined
364
+ placementProp: Placement
365
+ placementStrategy: 'flip' | 'autoPlacement'
366
+ preventOverflow: boolean
367
+ referenceBoundary: HTMLElement | null
368
+ referenceWidthRef: React.RefObject<number | undefined>
369
+ rootBoundary: RootBoundary
370
+ }) {
371
+ return useMemo(() => {
372
+ const ret: Middleware[] = []
373
+
374
+ // Flip the floating element when leaving the boundary box
375
+ if (constrainSize || preventOverflow) {
376
+ if (placementStrategy === 'autoPlacement') {
377
+ ret.push(
378
+ autoPlacement({
379
+ allowedPlacements: [placementProp].concat(fallbackPlacements),
380
+ }),
381
+ )
382
+ } else {
383
+ ret.push(
384
+ flip({
385
+ boundary: floatingBoundary || undefined,
386
+ fallbackPlacements,
387
+ padding: DEFAULT_POPOVER_PADDING,
388
+ rootBoundary,
389
+ }),
390
+ )
391
+ }
392
+ }
393
+
394
+ // Define distance between reference and floating element
395
+ ret.push(offset({mainAxis: DEFAULT_POPOVER_DISTANCE}))
396
+
397
+ // Track sizes
398
+ if (constrainSize || matchReferenceWidth) {
399
+ ret.push(
400
+ size({
401
+ boundaryElement: floatingBoundary || undefined,
402
+ constrainSize,
403
+ margins,
404
+ matchReferenceWidth,
405
+ padding: DEFAULT_POPOVER_PADDING,
406
+ referenceWidthRef,
407
+ }),
408
+ )
409
+ }
410
+
411
+ // Shift the popover so its sits within the boundary element
412
+ if (preventOverflow) {
413
+ ret.push(
414
+ shift({
415
+ boundary: floatingBoundary || undefined,
416
+ rootBoundary,
417
+ padding: DEFAULT_POPOVER_PADDING,
418
+ }),
419
+ )
420
+ }
421
+
422
+ // Place arrow
423
+ if (arrowProp) {
424
+ ret.push(
425
+ arrow({
426
+ element: arrowRef,
427
+ padding: DEFAULT_POPOVER_PADDING,
428
+ }),
429
+ )
430
+ }
431
+
432
+ // Determine the origin to scale from.
433
+ // Must be placed after `@sanity/ui/size` and `shift` middleware.
434
+ if (animate) {
435
+ ret.push(origin)
436
+ }
437
+
438
+ ret.push(
439
+ hide({
440
+ boundary: referenceBoundary || undefined,
441
+ padding: DEFAULT_POPOVER_PADDING,
442
+ strategy: 'referenceHidden',
443
+ }),
444
+ )
445
+
446
+ return ret
447
+ }, [
448
+ animate,
449
+ arrowProp,
450
+ arrowRef,
451
+ constrainSize,
452
+ fallbackPlacements,
453
+ floatingBoundary,
454
+ margins,
455
+ matchReferenceWidth,
456
+ placementProp,
457
+ placementStrategy,
458
+ preventOverflow,
459
+ referenceBoundary,
460
+ referenceWidthRef,
461
+ rootBoundary,
462
+ ])
463
+ }
@@ -5,9 +5,9 @@ import {type CSSProperties, type ForwardedRef, useMemo} from 'react'
5
5
 
6
6
  import {POPOVER_MOTION_PROPS} from '../../constants'
7
7
  import type {Placement} from '../../types'
8
- import {Arrow} from '../arrow/arrow'
9
- import {Flex} from '../flex/flex'
10
- import {Layer, type LayerOwnProps, type LayerProps} from '../layer/layer'
8
+ import {Arrow} from '../arrow/Arrow'
9
+ import {Flex} from '../flex/Flex'
10
+ import {Layer, type LayerOwnProps, type LayerProps} from '../layer/Layer'
11
11
  import {
12
12
  DEFAULT_POPOVER_ARROW_HEIGHT,
13
13
  DEFAULT_POPOVER_ARROW_RADIUS,
@@ -12,11 +12,15 @@ import {
12
12
 
13
13
  export default function AlignedStory(): React.JSX.Element {
14
14
  const constrainSize = useBoolean('Constrain size', false)
15
+ // @ts-expect-error - TODO: fix this
15
16
  const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS)
16
17
  const portal = useBoolean('Portal', true)
18
+ // @ts-expect-error - TODO: fix this
17
19
  const width = useSelect('Width', WORKSHOP_CONTAINER_WIDTH_OPTIONS, 'auto')
18
20
 
21
+ // @ts-expect-error - TODO: fix this
19
22
  const flexAlign = useSelect('Align', WORKSHOP_FLEX_ALIGN_OPTIONS)
23
+ // @ts-expect-error - TODO: fix this
20
24
  const flexJustify = useSelect('Justify', WORKSHOP_FLEX_JUSTIFY_OPTIONS)
21
25
 
22
26
  const [open, setOpen] = useState(false)
@@ -49,7 +53,13 @@ export default function AlignedStory(): React.JSX.Element {
49
53
  return (
50
54
  <Card height="fill" padding={[4, 5, 6]} sizing="border" tone="transparent">
51
55
  <Card height="fill" padding={2} ref={setBoundaryElement} shadow={1} sizing="border">
52
- <Flex align={flexAlign} height="fill" justify={flexJustify}>
56
+ <Flex
57
+ // @ts-expect-error - TODO: fix this
58
+ align={flexAlign}
59
+ height="fill"
60
+ // @ts-expect-error - TODO: fix this
61
+ justify={flexJustify}
62
+ >
53
63
  <Popover
54
64
  constrainSize={constrainSize}
55
65
  content={content}
@@ -58,8 +68,10 @@ export default function AlignedStory(): React.JSX.Element {
58
68
  overflow="auto"
59
69
  padding={3}
60
70
  portal={portal}
71
+ // @ts-expect-error - TODO: fix this
61
72
  placement={placement}
62
73
  ref={popoverElementRef}
74
+ // @ts-expect-error - TODO: fix this
63
75
  width={width}
64
76
  >
65
77
  <Button
@@ -5,6 +5,7 @@ import {WORKSHOP_PLACEMENT_OPTIONS} from '$workshop'
5
5
 
6
6
  export default function MatchReferenceWidthStory(): React.JSX.Element {
7
7
  const arrow = useBoolean('Arrow', true)
8
+ // @ts-expect-error - TODO: fix this
8
9
  const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'bottom')
9
10
 
10
11
  return (
@@ -18,6 +19,7 @@ export default function MatchReferenceWidthStory(): React.JSX.Element {
18
19
  }
19
20
  matchReferenceWidth
20
21
  open
22
+ // @ts-expect-error - TODO: fix this
21
23
  placement={placement}
22
24
  radius={2}
23
25
  >
@@ -15,11 +15,15 @@ export default function PlainStory(): React.JSX.Element {
15
15
  const constrainSize = useBoolean('Constrain size', true)
16
16
  const matchReferenceWidth = useBoolean('Match reference width', false)
17
17
  const open = useBoolean('Open', true)
18
+ // @ts-expect-error - TODO: fix this
18
19
  const padding = useSelect('Padding', WORKSHOP_SPACE_OPTIONS, 3)
20
+ // @ts-expect-error - TODO: fix this
19
21
  const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'bottom')
20
22
  const portal = useBoolean('Portal', true)
21
23
  const preventOverflow = useBoolean('Prevent overflow', true)
24
+ // @ts-expect-error - TODO: fix this
22
25
  const radius = useSelect('Radius', WORKSHOP_RADIUS_OPTIONS, 2)
26
+ // @ts-expect-error - TODO: fix this
23
27
  const width = useSelect('Width', WORKSHOP_CONTAINER_WIDTH_OPTIONS, 'auto')
24
28
  const [portalElement, setPortalElement] = useState<HTMLDivElement | null>(null)
25
29
  const [boundaryElement, setBoundaryElement] = useState<HTMLDivElement | null>(null)
@@ -53,11 +57,15 @@ export default function PlainStory(): React.JSX.Element {
53
57
  floatingBoundary={boundaryElementFlag ? boundaryElement : undefined}
54
58
  matchReferenceWidth={matchReferenceWidth}
55
59
  open={open}
60
+ // @ts-expect-error - TODO: fix this
56
61
  padding={padding}
62
+ // @ts-expect-error - TODO: fix this
57
63
  placement={placement}
58
64
  portal={portal}
59
65
  preventOverflow={preventOverflow}
66
+ // @ts-expect-error - TODO: fix this
60
67
  radius={radius}
68
+ // @ts-expect-error - TODO: fix this
61
69
  width={width}
62
70
  >
63
71
  <Button text="This button is the popover reference" />
@@ -26,6 +26,7 @@ export default function SidePanelStory(): React.JSX.Element {
26
26
  const sidePanelWidth = useSelect('Side panel width', SIDE_PANEL_WIDTH, SIDE_PANEL_WIDTH.md)
27
27
  const [sidePanel, setSidePanel] = useState<HTMLDivElement | null>(null)
28
28
  const updateRef = useRef<PopoverUpdateCallback>(undefined)
29
+ // @ts-expect-error - TODO: fix this
29
30
  const tone = useSelect('Tone', WORKSHOP_CARD_TONE_OPTIONS) ?? 'inherit'
30
31
 
31
32
  useEffect(() => updateRef.current?.(), [sidePanelWidth])
@@ -48,7 +49,12 @@ export default function SidePanelStory(): React.JSX.Element {
48
49
 
49
50
  <Card border padding={3}>
50
51
  <Text size={1}>
51
- Some editor <InlineObject tone={tone} updateRef={updateRef} />
52
+ Some editor{' '}
53
+ <InlineObject
54
+ // @ts-expect-error - TODO: fix this
55
+ tone={tone}
56
+ updateRef={updateRef}
57
+ />
52
58
  </Text>
53
59
  </Card>
54
60
  </Stack>
@@ -25,11 +25,14 @@ export default function TestStory(): React.JSX.Element {
25
25
  const constrainSize = useBoolean('Constrain size', true)
26
26
  const matchReferenceWidth = useBoolean('Match reference width', false)
27
27
  const open = useBoolean('Open', true)
28
+ // @ts-expect-error - TODO: fix this
28
29
  const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'bottom')
29
30
  const portal = useBoolean('Render in portal', true)
30
31
  const preventOverflow = useBoolean('Prevent overflow', true)
32
+ // @ts-expect-error - TODO: fix this
31
33
  const radius = useSelect('Radius', WORKSHOP_RADIUS_OPTIONS, 2)
32
34
  const referenceWide = useBoolean('Reference wide?', false)
35
+ // @ts-expect-error - TODO: fix this
33
36
  const width = useSelect('Width', WORKSHOP_CONTAINER_WIDTH_OPTIONS, 'auto')
34
37
 
35
38
  const text = useText('Text', 'Test')
@@ -81,11 +84,14 @@ export default function TestStory(): React.JSX.Element {
81
84
  open={open}
82
85
  overflow="hidden"
83
86
  padding={3}
87
+ // @ts-expect-error - TODO: fix this
84
88
  placement={placement}
85
89
  portal={portal}
86
90
  preventOverflow={preventOverflow}
91
+ // @ts-expect-error - TODO: fix this
87
92
  radius={radius}
88
93
  updateRef={updateRef}
94
+ // @ts-expect-error - TODO: fix this
89
95
  width={width}
90
96
  >
91
97
  {button}
@@ -1,23 +1,16 @@
1
- import {detectOverflow, type Elements, type Middleware} from '@floating-ui/react-dom'
1
+ import {detectOverflow, type Middleware} from '@floating-ui/react-dom'
2
2
 
3
3
  import type {PopoverMargins} from '../types'
4
4
 
5
- export interface SizeMiddlewareApplyOptions {
6
- availableWidth: number
7
- availableHeight: number
8
- elements: Elements
9
- referenceWidth: number
10
- }
11
-
12
5
  export function size(options: {
13
- apply: (args: SizeMiddlewareApplyOptions) => void
14
6
  boundaryElement?: HTMLElement | null
15
7
  constrainSize: boolean
16
8
  margins: PopoverMargins
17
9
  matchReferenceWidth?: boolean
18
10
  padding?: number
11
+ referenceWidthRef: React.RefObject<number | undefined>
19
12
  }): Middleware {
20
- const {apply, margins, padding = 0} = options
13
+ const {margins, padding = 0, constrainSize, matchReferenceWidth, referenceWidthRef} = options
21
14
 
22
15
  return {
23
16
  name: '@sanity/ui/size',
@@ -61,12 +54,20 @@ export function size(options: {
61
54
 
62
55
  // IMPORTANT – APPLY ELEMENT STYLES HERE
63
56
  // Elements need to be resized BEFORE the `platform.getDimensions` call below
64
- apply({
65
- availableWidth: maxWidth - margins[1] - margins[3],
66
- availableHeight: maxHeight - margins[0] - margins[2],
67
- elements,
68
- referenceWidth: reference.width - margins[1] - margins[3],
69
- })
57
+ const availableWidth = maxWidth - margins[1] - margins[3]
58
+ const availableHeight = maxHeight - margins[0] - margins[2]
59
+ const referenceWidth = reference.width - margins[1] - margins[3]
60
+
61
+ referenceWidthRef.current = referenceWidth
62
+
63
+ if (matchReferenceWidth) {
64
+ elements.floating.style.width = `${referenceWidth}px`
65
+ }
66
+
67
+ if (constrainSize) {
68
+ elements.floating.style.maxWidth = `${availableWidth}px`
69
+ elements.floating.style.maxHeight = `${availableHeight}px`
70
+ }
70
71
 
71
72
  const nextDimensions = await platform.getDimensions(elements.floating)
72
73
 
@@ -47,7 +47,7 @@ export function Radio<E extends RadioElementType = typeof DEFAULT_RADIO_ELEMENT>
47
47
  useCustomValidity(ref, customValidity)
48
48
 
49
49
  return (
50
- <div className={radio({className})} data-ui="Radio" style={style}>
50
+ <span className={radio({className})} data-ui="Radio" style={style}>
51
51
  <Element
52
52
  {...rest}
53
53
  className={radioInput()}
@@ -59,6 +59,6 @@ export function Radio<E extends RadioElementType = typeof DEFAULT_RADIO_ELEMENT>
59
59
  type="radio"
60
60
  />
61
61
  <span className={radioPresentation()} />
62
- </div>
62
+ </span>
63
63
  )
64
64
  }
@@ -5,8 +5,8 @@ const scope: WorkshopScope = {
5
5
  name: 'primitives/radio',
6
6
  title: 'Radio',
7
7
  stories: [
8
- {name: 'plain', title: 'Plain', component: lazy(() => import('./plain'))},
9
- {name: 'example', title: 'Example', component: lazy(() => import('./example'))},
8
+ {name: 'plain', title: 'Plain', component: lazy(() => import('./Plain'))},
9
+ {name: 'example', title: 'Example', component: lazy(() => import('./Example'))},
10
10
  ],
11
11
  }
12
12