@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.
- package/dist/_chunks-es/{refractor.js → Refractor.js} +1 -1
- package/dist/_chunks-es/{refractor.js.map → Refractor.js.map} +1 -1
- package/dist/css/index.css +2 -1
- package/dist/css/index.css.map +1 -0
- package/dist/css/index.d.ts +51 -7
- package/dist/css/index.js +17979 -55
- package/dist/css/index.js.map +1 -1
- package/dist/index.d.ts +26 -38
- package/dist/index.js +1752 -1132
- package/dist/index.js.map +1 -1
- package/exports/css/index.css +1 -0
- package/package.json +39 -51
- package/src/core/Root.tsx +1 -1
- package/src/core/RootProvider.tsx +5 -5
- package/src/core/__workshop__/index.ts +1 -1
- package/src/core/components/autocomplete/{autocomplete.tsx → Autocomplete.tsx} +90 -58
- package/src/core/components/autocomplete/__workshop__/{custom.tsx → Custom.tsx} +14 -1
- package/src/core/components/autocomplete/__workshop__/{example.tsx → Example.tsx} +12 -1
- package/src/core/components/autocomplete/__workshop__/index.ts +6 -6
- package/src/core/components/autocomplete/types.ts +1 -1
- package/src/core/components/breadcrumbs/{breadcrumbs.tsx → Breadcrumbs.tsx} +80 -47
- package/src/core/components/breadcrumbs/__workshop__/index.ts +1 -1
- package/src/core/components/dialog/{dialog.tsx → Dialog.tsx} +20 -11
- package/src/core/components/dialog/{dialogCard.tsx → DialogCard.tsx} +9 -9
- package/src/core/components/dialog/{dialogContext.ts → DialogContext.ts} +1 -1
- package/src/core/components/dialog/{dialogProvider.tsx → DialogProvider.tsx} +2 -2
- package/src/core/components/dialog/__workshop__/{panes.tsx → Panes.tsx} +9 -21
- package/src/core/components/dialog/__workshop__/{position.tsx → Position.tsx} +9 -1
- package/src/core/components/dialog/__workshop__/{props.tsx → Props.tsx} +2 -0
- package/src/core/components/dialog/__workshop__/index.ts +10 -10
- package/src/core/components/dialog/__workshop__/styles.css.ts +18 -0
- package/src/core/components/dialog/useDialog.ts +3 -3
- package/src/core/components/hotkeys/{hotkeys.tsx → Hotkeys.tsx} +2 -2
- package/src/core/components/hotkeys/__workshop__/index.ts +1 -1
- package/src/core/components/menu/{menu.test.tsx → Menu.test.tsx} +9 -13
- package/src/core/components/menu/{menu.tsx → Menu.tsx} +19 -24
- package/src/core/components/menu/{menuButton.tsx → MenuButton.tsx} +14 -9
- package/src/core/components/menu/{menuContext.ts → MenuContext.ts} +3 -4
- package/src/core/components/menu/{menuGroup.tsx → MenuGroup.tsx} +16 -11
- package/src/core/components/menu/{menuItem.tsx → MenuItem.tsx} +7 -9
- package/src/core/components/menu/__workshop__/DataProps.tsx +27 -0
- package/src/core/components/menu/__workshop__/{menuButton.tsx → MenuButton.tsx} +6 -1
- package/src/core/components/menu/__workshop__/{tones.tsx → Tones.tsx} +7 -1
- package/src/core/components/menu/__workshop__/index.ts +22 -17
- package/src/core/components/menu/useMenu.ts +5 -5
- package/src/core/components/menu/useMenuController.ts +5 -5
- package/src/core/components/tab/{tab.tsx → Tab.tsx} +1 -1
- package/src/core/components/tab/{tabList.tsx → TabList.tsx} +2 -2
- package/src/core/components/tab/{tabPanel.tsx → TabPanel.tsx} +1 -1
- package/src/core/components/tab/__workshop__/index.ts +1 -1
- package/src/core/components/toast/{toast.test.tsx → Toast.test.tsx} +7 -7
- package/src/core/components/toast/{toast.tsx → Toast.tsx} +6 -6
- package/src/core/components/toast/{toastContext.ts → ToastContext.ts} +1 -1
- package/src/core/components/toast/{toastLayer.tsx → ToastLayer.tsx} +1 -1
- package/src/core/components/toast/{toastProvider.tsx → ToastProvider.tsx} +24 -9
- package/src/core/components/toast/__workshop__/{toast.tsx → Toast.tsx} +2 -0
- package/src/core/components/toast/__workshop__/index.ts +2 -2
- package/src/core/components/toast/useToast.ts +3 -3
- package/src/core/components/tree/{tree.tsx → Tree.tsx} +4 -4
- package/src/core/components/tree/{treeContext.ts → TreeContext.ts} +1 -1
- package/src/core/components/tree/{treeGroup.tsx → TreeGroup.tsx} +1 -1
- package/src/core/components/tree/{treeItem.tsx → TreeItem.tsx} +28 -25
- package/src/core/components/tree/__workshop__/index.ts +4 -4
- package/src/core/components/tree/useTree.ts +3 -3
- package/src/core/components/virtualList/{virtualList.tsx → VirtualList.tsx} +87 -45
- package/src/core/components/virtualList/__workshop__/index.ts +4 -4
- package/src/core/helpers/props.ts +0 -9
- package/src/core/hooks/useGlobalKeyDown.ts +11 -4
- package/src/core/hooks/useMediaIndex/__workshop__/index.ts +1 -1
- package/src/core/hooks/useResponsiveProp.ts +4 -17
- package/src/core/index.ts +68 -66
- package/src/core/lib/createGlobalScopedContext.ts +5 -3
- package/src/core/primitives/avatar/{avatar.tsx → Avatar.tsx} +7 -6
- package/src/core/primitives/avatar/{avatarCounter.tsx → AvatarCounter.tsx} +2 -2
- package/src/core/primitives/avatar/{avatarStack.tsx → AvatarStack.tsx} +3 -3
- package/src/core/primitives/avatar/__workshop__/{asButton.tsx → AsButton.tsx} +8 -1
- package/src/core/primitives/avatar/__workshop__/PropsStory.tsx +22 -0
- package/src/core/primitives/avatar/__workshop__/{stack.tsx → Stack.tsx} +5 -1
- package/src/core/primitives/avatar/__workshop__/index.ts +9 -4
- package/src/core/primitives/badge/{badge.test.tsx → Badge.test.tsx} +1 -1
- package/src/core/primitives/badge/{badge.tsx → Badge.tsx} +2 -2
- package/src/core/primitives/badge/__workshop__/{props.tsx → Props.tsx} +12 -1
- package/src/core/primitives/badge/__workshop__/index.ts +2 -2
- package/src/core/primitives/box/__workshop__/{props.tsx → Props.tsx} +6 -1
- package/src/core/primitives/box/__workshop__/index.ts +2 -2
- package/src/core/primitives/button/{button.test.tsx → Button.test.tsx} +1 -1
- package/src/core/primitives/button/{button.tsx → Button.tsx} +12 -11
- package/src/core/primitives/button/__workshop__/DataProps.tsx +22 -0
- package/src/core/primitives/button/__workshop__/{props.tsx → Props.tsx} +22 -0
- package/src/core/primitives/button/__workshop__/SanityUploadButton.tsx +21 -0
- package/src/core/primitives/button/__workshop__/{stacked.tsx → Stacked.tsx} +16 -0
- package/src/core/primitives/button/__workshop__/Styled1.tsx +11 -0
- package/src/core/primitives/button/__workshop__/index.ts +15 -15
- package/src/core/primitives/button/__workshop__/styles.css.ts +30 -0
- package/src/core/primitives/card/{card.tsx → Card.tsx} +10 -10
- package/src/core/primitives/card/{cardContext.ts → CardContext.ts} +1 -1
- package/src/core/primitives/card/{cardProvider.tsx → CardProvider.tsx} +3 -12
- package/src/core/primitives/card/__workshop__/DataProps.tsx +30 -0
- package/src/core/primitives/card/__workshop__/{props.tsx → Props.tsx} +10 -0
- package/src/core/primitives/card/__workshop__/{selected.tsx → Selected.tsx} +1 -1
- package/src/core/primitives/card/__workshop__/{styled.tsx → Styled.tsx} +2 -5
- package/src/core/primitives/card/__workshop__/index.ts +10 -9
- package/src/core/primitives/card/useCard.ts +11 -6
- package/src/core/primitives/checkbox/__workshop__/index.ts +4 -4
- package/src/core/primitives/code/{code.tsx → Code.tsx} +26 -2
- package/src/core/primitives/code/__workshop__/{props.tsx → Props.tsx} +6 -1
- package/src/core/primitives/code/__workshop__/index.ts +2 -2
- package/src/core/primitives/container/{container.tsx → Container.tsx} +1 -1
- package/src/core/primitives/container/__workshop__/{example.tsx → Example.tsx} +6 -1
- package/src/core/primitives/container/__workshop__/index.ts +1 -1
- package/src/core/primitives/flex/{flex.tsx → Flex.tsx} +1 -1
- package/src/core/primitives/flex/__workshop__/{example.tsx → Example.tsx} +14 -16
- package/src/core/primitives/flex/__workshop__/index.ts +2 -2
- package/src/core/primitives/flex/__workshop__/styles.css.ts +12 -0
- package/src/core/primitives/grid/{grid.tsx → Grid.tsx} +1 -1
- package/src/core/primitives/grid/__workshop__/index.ts +1 -1
- package/src/core/primitives/heading/{heading.tsx → Heading.tsx} +16 -0
- package/src/core/primitives/heading/__workshop__/{plain.tsx → Plain.tsx} +12 -1
- package/src/core/primitives/heading/__workshop__/index.ts +2 -2
- package/src/core/primitives/inline/{inline.tsx → Inline.tsx} +2 -1
- package/src/core/primitives/inline/__workshop__/{plain.tsx → Plain.tsx} +5 -1
- package/src/core/primitives/inline/__workshop__/index.ts +1 -1
- package/src/core/primitives/kbd/{kbd.tsx → Kbd.tsx} +2 -2
- package/src/core/primitives/kbd/__workshop__/index.ts +1 -1
- package/src/core/primitives/label/{label.tsx → Label.tsx} +16 -0
- package/src/core/primitives/label/__workshop__/{plain.tsx → Plain.tsx} +15 -1
- package/src/core/primitives/label/__workshop__/index.ts +2 -2
- package/src/core/primitives/layer/{layer.test.tsx → Layer.test.tsx} +7 -7
- package/src/core/primitives/layer/{layer.tsx → Layer.tsx} +3 -3
- package/src/core/primitives/layer/{layerCard.tsx → LayerCard.tsx} +2 -2
- package/src/core/primitives/layer/{layerContext.ts → LayerContext.ts} +1 -1
- package/src/core/primitives/layer/{layerProvider.tsx → LayerProvider.tsx} +6 -6
- package/src/core/primitives/layer/__workshop__/index.ts +3 -3
- package/src/core/primitives/layer/useLayer.ts +3 -3
- package/src/core/primitives/popover/{popover.tsx → Popover.tsx} +170 -150
- package/src/core/primitives/popover/{popoverLayer.tsx → PopoverLayer.tsx} +3 -3
- package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +13 -1
- package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +2 -0
- package/src/core/primitives/popover/__workshop__/PlainStory.tsx +8 -0
- package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +7 -1
- package/src/core/primitives/popover/__workshop__/TestStory.tsx +6 -0
- package/src/core/primitives/popover/floating-ui/size.ts +17 -16
- package/src/core/primitives/radio/{radio.tsx → Radio.tsx} +2 -2
- package/src/core/primitives/radio/__workshop__/index.ts +2 -2
- package/src/core/primitives/select/{select.tsx → Select.tsx} +7 -5
- package/src/core/primitives/select/__workshop__/{plain.tsx → Plain.tsx} +4 -0
- package/src/core/primitives/select/__workshop__/index.ts +2 -2
- package/src/core/primitives/selectable/{selectable.tsx → Selectable.tsx} +2 -2
- package/src/core/primitives/selectable/__workshop__/DataProps.tsx +27 -0
- package/src/core/primitives/selectable/__workshop__/index.ts +14 -0
- package/src/core/primitives/skeleton/{codeSkeleton.tsx → CodeSkeleton.tsx} +1 -1
- package/src/core/primitives/skeleton/{headingSkeleton.tsx → HeadingSkeleton.tsx} +1 -1
- package/src/core/primitives/skeleton/{labelSkeleton.tsx → LabelSkeleton.tsx} +1 -1
- package/src/core/primitives/skeleton/{skeleton.tsx → Skeleton.tsx} +2 -2
- package/src/core/primitives/skeleton/{textSkeleton.tsx → TextSkeleton.tsx} +1 -1
- package/src/core/primitives/skeleton/__workshop__/{delay.tsx → Delay.tsx} +9 -1
- package/src/core/primitives/skeleton/__workshop__/{skeleton.tsx → Skeleton.tsx} +9 -1
- package/src/core/primitives/skeleton/__workshop__/index.ts +2 -2
- package/src/core/primitives/spinner/{spinner.tsx → Spinner.tsx} +2 -2
- package/src/core/primitives/spinner/__workshop__/Props.tsx +6 -1
- package/src/core/primitives/stack/{stack.tsx → Stack.tsx} +1 -1
- package/src/core/primitives/stack/__workshop__/{plain.tsx → Plain.tsx} +4 -1
- package/src/core/primitives/stack/__workshop__/index.ts +1 -1
- package/src/core/primitives/switch/{switch.tsx → Switch.tsx} +2 -10
- package/src/core/primitives/switch/__workshop__/index.ts +2 -2
- package/src/core/primitives/text/{text.tsx → Text.tsx} +14 -0
- package/src/core/primitives/text/__workshop__/{colored.tsx → Colored.tsx} +10 -8
- package/src/core/primitives/text/__workshop__/{example.tsx → Example.tsx} +15 -1
- package/src/core/primitives/text/__workshop__/index.ts +3 -3
- package/src/core/primitives/textArea/{textArea.tsx → TextArea.tsx} +7 -1
- package/src/core/primitives/textArea/__workshop__/{plain.tsx → Plain.tsx} +8 -0
- package/src/core/primitives/textArea/__workshop__/index.ts +1 -1
- package/src/core/primitives/textInput/{textInput.tsx → TextInput.tsx} +93 -72
- package/src/core/primitives/textInput/__workshop__/{plain.tsx → Plain.tsx} +34 -4
- package/src/core/primitives/textInput/__workshop__/{typed.tsx → Typed.tsx} +7 -1
- package/src/core/primitives/textInput/__workshop__/index.ts +7 -7
- package/src/core/primitives/tooltip/{tooltip.test.tsx → Tooltip.test.tsx} +4 -4
- package/src/core/primitives/tooltip/{tooltip.tsx → Tooltip.tsx} +102 -63
- package/src/core/primitives/tooltip/{tooltipLayer.tsx → TooltipLayer.tsx} +2 -2
- package/src/core/primitives/tooltip/__workshop__/{customPortal.tsx → CustomPortal.tsx} +2 -0
- package/src/core/primitives/tooltip/__workshop__/{overflowingBoundary.tsx → OverflowingBoundary.tsx} +2 -0
- package/src/core/primitives/tooltip/__workshop__/{props.tsx → Props.tsx} +12 -0
- package/src/core/primitives/tooltip/__workshop__/{resizableBoundary.tsx → ResizableBoundary.tsx} +5 -0
- package/src/core/primitives/tooltip/__workshop__/index.ts +4 -4
- package/src/core/primitives/tooltip/tooltipDelayGroup/{tooltipDelayGroupContext.tsx → TooltipDelayGroupContext.tsx} +1 -1
- package/src/core/primitives/tooltip/tooltipDelayGroup/{tooltipDelayGroupProvider.tsx → TooltipDelayGroupProvider.tsx} +2 -4
- package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +3 -3
- package/src/core/types.ts +6 -5
- package/src/core/utils/{errorBoundary.tsx → ErrorBoundary.tsx} +1 -1
- package/src/core/utils/boundaryElement/{boundaryElementContext.ts → BoundaryElementContext.ts} +2 -5
- package/src/core/utils/boundaryElement/BoundaryElementProvider.tsx +16 -0
- package/src/core/utils/boundaryElement/__workshop__/index.ts +1 -1
- package/src/core/utils/boundaryElement/types.ts +1 -4
- package/src/core/utils/boundaryElement/useBoundaryElement.ts +7 -19
- package/src/core/utils/elementQuery/__workshop__/CustomMedia.tsx +19 -0
- package/src/core/utils/elementQuery/__workshop__/index.ts +1 -1
- package/src/core/utils/elementQuery/__workshop__/styles.css.ts +31 -0
- package/src/core/utils/portal/{portal.test.tsx → Portal.test.tsx} +7 -7
- package/src/core/utils/portal/{portal.tsx → Portal.tsx} +7 -4
- package/src/core/utils/portal/{portalContext.ts → PortalContext.ts} +1 -1
- package/src/core/utils/portal/PortalProvider.tsx +38 -0
- package/src/core/utils/portal/__workshop__/index.ts +1 -1
- package/src/core/utils/portal/usePortal.ts +12 -5
- package/src/css/_responsiveStyle.css.ts +2 -2
- package/src/css/primitives/_input/_input.css.ts +13 -12
- package/src/css/primitives/_input/input.ts +2 -0
- package/src/css/primitives/_input/types.ts +2 -1
- package/src/css/primitives/avatar/avatar.css.ts +17 -5
- package/src/css/primitives/box/box.css.ts +19 -1
- package/src/css/primitives/button/button.css.ts +252 -183
- package/src/css/primitives/card/__workshop__/{color.tsx → Color.tsx} +9 -1
- package/src/css/primitives/card/__workshop__/index.ts +1 -1
- package/src/css/primitives/card/card.css.ts +133 -130
- package/src/css/primitives/checkbox/checkbox.css.ts +1 -0
- package/src/css/primitives/code/code.ts +4 -0
- package/src/css/primitives/code/types.ts +7 -1
- package/src/css/primitives/heading/heading.ts +4 -0
- package/src/css/primitives/heading/types.ts +7 -1
- package/src/css/primitives/label/label.ts +4 -0
- package/src/css/primitives/label/types.ts +7 -1
- package/src/css/primitives/radio/radio.css.ts +1 -1
- package/src/css/primitives/root/root.css.ts +1 -1
- package/src/css/primitives/select/select.css.ts +7 -1
- package/src/css/primitives/selectable/selectable.css.ts +79 -70
- package/src/css/primitives/switch/switch.css.ts +10 -1
- package/src/css/primitives/text/text.ts +2 -0
- package/src/css/primitives/text/types.ts +6 -1
- package/src/css/primitives/textInput/textInput.css.ts +15 -3
- package/src/css/props/width/types.ts +1 -1
- package/src/css/props/width/width.css.ts +5 -2
- package/src/css/theme/buildCSSTheme.ts +4 -0
- package/src/css/types.ts +4 -0
- package/src/css/vars.css.ts +4 -0
- package/dist/_chunks-cjs/refractor.cjs +0 -22
- package/dist/_chunks-cjs/refractor.cjs.map +0 -1
- package/dist/css/index.cjs +0 -966
- package/dist/css/index.cjs.map +0 -1
- package/dist/css/index.d.cts +0 -1370
- package/dist/index.cjs +0 -4515
- package/dist/index.cjs.map +0 -1
- package/dist/index.d.cts +0 -2521
- package/dist/theme.cjs +0 -870
- package/dist/theme.cjs.map +0 -1
- package/dist/theme.d.cts +0 -499
- package/src/core/primitives/button/__workshop__/sanityUploadButton.tsx +0 -36
- package/src/core/primitives/button/__workshop__/styled1.tsx +0 -17
- package/src/core/primitives/button/__workshop__/styled2.tsx +0 -19
- package/src/core/primitives/popover/helpers.ts +0 -32
- package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
- package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -102
- package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -18
- package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +0 -41
- package/src/core/utils/portal/portalProvider.tsx +0 -70
- /package/src/core/__workshop__/{boundary.tsx → Boundary.tsx} +0 -0
- /package/src/core/components/autocomplete/{autocompleteOption.tsx → AutocompleteOption.tsx} +0 -0
- /package/src/core/components/autocomplete/__workshop__/{async.tsx → Async.tsx} +0 -0
- /package/src/core/components/autocomplete/__workshop__/{constrainedHeight.tsx → ConstrainedHeight.tsx} +0 -0
- /package/src/core/components/autocomplete/__workshop__/{focusAndBlur.tsx → FocusAndBlur.tsx} +0 -0
- /package/src/core/components/autocomplete/__workshop__/{fullscreen.tsx → Fullscreen.tsx} +0 -0
- /package/src/core/components/breadcrumbs/__workshop__/{example.tsx → Example.tsx} +0 -0
- /package/src/core/components/dialog/__workshop__/{activate.tsx → Activate.tsx} +0 -0
- /package/src/core/components/dialog/__workshop__/{autoFocus.tsx → AutoFocus.tsx} +0 -0
- /package/src/core/components/dialog/__workshop__/{layering.tsx → Layering.tsx} +0 -0
- /package/src/core/components/dialog/__workshop__/{nested.tsx → Nested.tsx} +0 -0
- /package/src/core/components/dialog/__workshop__/{onScroll.tsx → OnScroll.tsx} +0 -0
- /package/src/core/components/dialog/__workshop__/{provider.tsx → Provider.tsx} +0 -0
- /package/src/core/components/dialog/__workshop__/{wrapped.tsx → Wrapped.tsx} +0 -0
- /package/src/core/components/hotkeys/__workshop__/{plain.tsx → Plain.tsx} +0 -0
- /package/src/core/components/menu/{menuDivider.tsx → MenuDivider.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{asComponent.tsx → AsComponent.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{avatarMenu.tsx → AvatarMenu.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{closableMenuButton.tsx → ClosableMenuButton.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{constrainedInBoundary.tsx → ConstrainedInBoundary.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{customMenuItem.tsx → CustomMenuItem.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{customSelectedState.tsx → CustomSelectedState.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{disableFocusOnClose.tsx → DisableFocusOnClose.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{groups.tsx → Groups.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{menuGroupRight.tsx → MenuGroupRight.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{nestedMenu.tsx → NestedMenu.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{onCloseMenuButton.tsx → OnCloseMenuButton.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{selectedItem.tsx → SelectedItem.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{shouldFocus.tsx → ShouldFocus.tsx} +0 -0
- /package/src/core/components/menu/__workshop__/{withoutArrow.tsx → WithoutArrow.tsx} +0 -0
- /package/src/core/components/tab/__workshop__/{example.tsx → Example.tsx} +0 -0
- /package/src/core/components/toast/__workshop__/{hook.tsx → Hook.tsx} +0 -0
- /package/src/core/components/tree/__workshop__/{basic.tsx → Basic.tsx} +0 -0
- /package/src/core/components/tree/__workshop__/{tabFromElement.tsx → TabFromElement.tsx} +0 -0
- /package/src/core/components/virtualList/__workshop__/{changingProps.tsx → ChangingProps.tsx} +0 -0
- /package/src/core/components/virtualList/__workshop__/{elementScroll.tsx → ElementScroll.tsx} +0 -0
- /package/src/core/components/virtualList/__workshop__/{infiniteList.tsx → InfiniteList.tsx} +0 -0
- /package/src/core/components/virtualList/__workshop__/{windowScrolll.tsx → WindowScrolll.tsx} +0 -0
- /package/src/core/hooks/useMediaIndex/__workshop__/{test.tsx → Test.tsx} +0 -0
- /package/src/core/primitives/arrow/{arrow.tsx → Arrow.tsx} +0 -0
- /package/src/core/primitives/avatar/__workshop__/{withinButton.tsx → WithinButton.tsx} +0 -0
- /package/src/core/primitives/avatar/__workshop__/{withinMenuItem.tsx → WithinMenuItem.tsx} +0 -0
- /package/src/core/primitives/badge/__workshop__/{tones.tsx → Tones.tsx} +0 -0
- /package/src/core/primitives/box/{box.tsx → Box.tsx} +0 -0
- /package/src/core/primitives/box/__workshop__/{responsive.tsx → Responsive.tsx} +0 -0
- /package/src/core/primitives/button/__workshop__/{custom.tsx → Custom.tsx} +0 -0
- /package/src/core/primitives/button/__workshop__/{customIcons.tsx → CustomIcons.tsx} +0 -0
- /package/src/core/primitives/button/__workshop__/{disabled.tsx → Disabled.tsx} +0 -0
- /package/src/core/primitives/button/__workshop__/{mixedChildren.tsx → MixedChildren.tsx} +0 -0
- /package/src/core/primitives/button/__workshop__/{textOverflow.tsx → TextOverflow.tsx} +0 -0
- /package/src/core/primitives/button/__workshop__/{uploadButton.tsx → UploadButton.tsx} +0 -0
- /package/src/core/primitives/card/__workshop__/{asButton.tsx → AsButton.tsx} +0 -0
- /package/src/core/primitives/card/__workshop__/{asComponent.tsx → AsComponent.tsx} +0 -0
- /package/src/core/primitives/card/__workshop__/{checkered.tsx → Checkered.tsx} +0 -0
- /package/src/core/primitives/card/__workshop__/{interactive.tsx → Interactive.tsx} +0 -0
- /package/src/core/primitives/card/__workshop__/{listNavigation.tsx → ListNavigation.tsx} +0 -0
- /package/src/core/primitives/card/__workshop__/{tones.tsx → Tones.tsx} +0 -0
- /package/src/core/primitives/checkbox/{checkbox.tsx → Checkbox.tsx} +0 -0
- /package/src/core/primitives/checkbox/__workshop__/{example.tsx → Example.tsx} +0 -0
- /package/src/core/primitives/checkbox/__workshop__/{props.tsx → Props.tsx} +0 -0
- /package/src/core/primitives/checkbox/__workshop__/{readOnly.tsx → ReadOnly.tsx} +0 -0
- /package/src/core/primitives/checkbox/__workshop__/{tones.tsx → Tones.tsx} +0 -0
- /package/src/core/primitives/code/{refractor.tsx → Refractor.tsx} +0 -0
- /package/src/core/primitives/code/__workshop__/{opticalAlignment.tsx → OpticalAlignment.tsx} +0 -0
- /package/src/core/primitives/flex/__workshop__/{gap.tsx → Gap.tsx} +0 -0
- /package/src/core/primitives/grid/__workshop__/{responsive.tsx → Responsive.tsx} +0 -0
- /package/src/core/primitives/heading/__workshop__/{opticalAlignment.tsx → OpticalAlignment.tsx} +0 -0
- /package/src/core/primitives/kbd/__workshop__/{plain.tsx → Plain.tsx} +0 -0
- /package/src/core/primitives/label/__workshop__/{opticalAlignment.tsx → OpticalAlignment.tsx} +0 -0
- /package/src/core/primitives/layer/__workshop__/{multipleRoots.tsx → MultipleRoots.tsx} +0 -0
- /package/src/core/primitives/layer/__workshop__/{nested.tsx → Nested.tsx} +0 -0
- /package/src/core/primitives/layer/__workshop__/{responsiveZOffset.tsx → ResponsiveZOffset.tsx} +0 -0
- /package/src/core/primitives/radio/__workshop__/{example.tsx → Example.tsx} +0 -0
- /package/src/core/primitives/radio/__workshop__/{plain.tsx → Plain.tsx} +0 -0
- /package/src/core/primitives/select/__workshop__/{readOnly.tsx → ReadOnly.tsx} +0 -0
- /package/src/core/primitives/spinner/{animatedSpinnerIcon.tsx → AnimatedSpinnerIcon.tsx} +0 -0
- /package/src/core/primitives/srOnly/{srOnly.tsx → SrOnly.tsx} +0 -0
- /package/src/core/primitives/switch/__workshop__/{example.tsx → Example.tsx} +0 -0
- /package/src/core/primitives/switch/__workshop__/{props.tsx → Props.tsx} +0 -0
- /package/src/core/primitives/text/__workshop__/{opticalAlignment.tsx → OpticalAlignment.tsx} +0 -0
- /package/src/core/primitives/textInput/__workshop__/{clearButton.tsx → ClearButton.tsx} +0 -0
- /package/src/core/primitives/textInput/__workshop__/{customValidity.tsx → CustomValidity.tsx} +0 -0
- /package/src/core/primitives/textInput/__workshop__/{readOnly.tsx → ReadOnly.tsx} +0 -0
- /package/src/core/primitives/textInput/__workshop__/{states.tsx → States.tsx} +0 -0
- /package/src/core/primitives/textInput/__workshop__/{tones.tsx → Tones.tsx} +0 -0
- /package/src/core/utils/boundaryElement/__workshop__/{plain.tsx → Plain.tsx} +0 -0
- /package/src/core/utils/elementQuery/{elementQuery.tsx → ElementQuery.tsx} +0 -0
- /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 {
|
|
33
|
+
import {BoundaryElementContext} from '../../utils/boundaryElement/BoundaryElementContext'
|
|
34
34
|
import {getElementRef} from '../../utils/getElementRef'
|
|
35
|
-
import {Portal} from '../../utils/portal/
|
|
36
|
-
import {
|
|
37
|
-
import {
|
|
38
|
-
import {
|
|
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 './
|
|
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
|
|
170
|
-
DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? 'bottom'],
|
|
168
|
+
fallbackPlacements: _fallbackPlacements,
|
|
171
169
|
matchReferenceWidth,
|
|
172
|
-
floatingBoundary
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
345
|
-
|
|
346
|
-
|
|
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
|
-
|
|
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={
|
|
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
|
-
|
|
423
|
-
|
|
424
|
-
|
|
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={
|
|
322
|
+
<CardProvider tone={resolvedTone} scheme={scheme ?? 'light'}>
|
|
427
323
|
{node}
|
|
428
324
|
</CardProvider>
|
|
429
325
|
</Portal>
|
|
430
|
-
)
|
|
431
|
-
|
|
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/
|
|
9
|
-
import {Flex} from '../flex/
|
|
10
|
-
import {Layer, type LayerOwnProps, type LayerProps} from '../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
|
|
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
|
|
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
|
|
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 {
|
|
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
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
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
|
-
<
|
|
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
|
-
</
|
|
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('./
|
|
9
|
-
{name: 'example', title: 'Example', component: lazy(() => import('./
|
|
8
|
+
{name: 'plain', title: 'Plain', component: lazy(() => import('./Plain'))},
|
|
9
|
+
{name: 'example', title: 'Example', component: lazy(() => import('./Example'))},
|
|
10
10
|
],
|
|
11
11
|
}
|
|
12
12
|
|