@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
|
@@ -25,6 +25,7 @@ export default function CustomPortalStory(): React.JSX.Element {
|
|
|
25
25
|
'Content',
|
|
26
26
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mollis consectetur malesuada. Sed lobortis est dolor, eget imperdiet velit placerat et. Aenean posuere mi non aliquet iaculis. Donec fermentum pulvinar purus at sagittis. Ut tincidunt massa odio, sed finibus justo ullamcorper id. Nam venenatis justo non ligula elementum cursus. Pellentesque laoreet justo in mollis sagittis. In lacinia ornare ultrices. Suspendisse potenti.',
|
|
27
27
|
)
|
|
28
|
+
// @ts-expect-error - TODO: fix this
|
|
28
29
|
const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'top')
|
|
29
30
|
const portal = useSelect('Portal', PORTAL_OPTIONS)
|
|
30
31
|
const useBoundaryElement = useBoolean('Use boundary element', true)
|
|
@@ -60,6 +61,7 @@ export default function CustomPortalStory(): React.JSX.Element {
|
|
|
60
61
|
boundaryElement={useBoundaryElement ? boundaryElement : null}
|
|
61
62
|
content={content ? <Text size={1}>{content}</Text> : undefined}
|
|
62
63
|
padding={2}
|
|
64
|
+
// @ts-expect-error - TODO: fix this
|
|
63
65
|
placement={placement}
|
|
64
66
|
portal={portal}
|
|
65
67
|
>
|
package/src/core/primitives/tooltip/__workshop__/{overflowingBoundary.tsx → OverflowingBoundary.tsx}
RENAMED
|
@@ -9,6 +9,7 @@ export default function OverflowingBoundaryStory(): React.JSX.Element {
|
|
|
9
9
|
'Content',
|
|
10
10
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mollis consectetur malesuada. Sed lobortis est dolor, eget imperdiet velit placerat et. Aenean posuere mi non aliquet iaculis. Donec fermentum pulvinar purus at sagittis. Ut tincidunt massa odio, sed finibus justo ullamcorper id. Nam venenatis justo non ligula elementum cursus. Pellentesque laoreet justo in mollis sagittis. In lacinia ornare ultrices. Suspendisse potenti.',
|
|
11
11
|
)
|
|
12
|
+
// @ts-expect-error - TODO: fix this
|
|
12
13
|
const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'top')
|
|
13
14
|
const portal = useBoolean('Portal', false)
|
|
14
15
|
const useBoundaryElement = useBoolean('Use boundary element', true)
|
|
@@ -56,6 +57,7 @@ export default function OverflowingBoundaryStory(): React.JSX.Element {
|
|
|
56
57
|
<Tooltip
|
|
57
58
|
content={<Text size={1}>{content}</Text>}
|
|
58
59
|
padding={2}
|
|
60
|
+
// @ts-expect-error - TODO: fix this
|
|
59
61
|
placement={placement}
|
|
60
62
|
portal={portal}
|
|
61
63
|
>
|
|
@@ -11,11 +11,14 @@ import {
|
|
|
11
11
|
export default function PropsStory(): React.JSX.Element {
|
|
12
12
|
const arrow = useBoolean('Arrow', false)
|
|
13
13
|
const content = useText('Content', 'Tooltip content')
|
|
14
|
+
// @ts-expect-error - TODO: fix this
|
|
14
15
|
const padding = useSelect('Padding', WORKSHOP_SPACE_OPTIONS, 2)
|
|
16
|
+
// @ts-expect-error - TODO: fix this
|
|
15
17
|
const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'top')
|
|
16
18
|
const portal = useBoolean('Portal', true)
|
|
17
19
|
const openDelay = useNumber('Open Delay', 200)
|
|
18
20
|
const closeDelay = useNumber('Close Delay', 200)
|
|
21
|
+
// @ts-expect-error - TODO: fix this
|
|
19
22
|
const shadow = useSelect('Shadow', WORKSHOP_SHADOW_OPTIONS, 2)
|
|
20
23
|
|
|
21
24
|
return (
|
|
@@ -41,9 +44,12 @@ export default function PropsStory(): React.JSX.Element {
|
|
|
41
44
|
<Tooltip
|
|
42
45
|
arrow={arrow}
|
|
43
46
|
content={<Text size={1}>{content}</Text>}
|
|
47
|
+
// @ts-expect-error - TODO: fix this
|
|
44
48
|
padding={padding}
|
|
49
|
+
// @ts-expect-error - TODO: fix this
|
|
45
50
|
placement={placement}
|
|
46
51
|
portal={portal}
|
|
52
|
+
// @ts-expect-error - TODO: fix this
|
|
47
53
|
shadow={shadow}
|
|
48
54
|
delay={{
|
|
49
55
|
open: openDelay,
|
|
@@ -81,9 +87,12 @@ export default function PropsStory(): React.JSX.Element {
|
|
|
81
87
|
close: 100,
|
|
82
88
|
}}
|
|
83
89
|
content={<Text size={1}>{content}</Text>}
|
|
90
|
+
// @ts-expect-error - TODO: fix this
|
|
84
91
|
padding={padding}
|
|
92
|
+
// @ts-expect-error - TODO: fix this
|
|
85
93
|
placement={placement}
|
|
86
94
|
portal={portal}
|
|
95
|
+
// @ts-expect-error - TODO: fix this
|
|
87
96
|
shadow={shadow}
|
|
88
97
|
>
|
|
89
98
|
<Button mode="bleed" text="Hover me" />
|
|
@@ -96,9 +105,12 @@ export default function PropsStory(): React.JSX.Element {
|
|
|
96
105
|
close: 100,
|
|
97
106
|
}}
|
|
98
107
|
content={<Text size={1}>{content}</Text>}
|
|
108
|
+
// @ts-expect-error - TODO: fix this
|
|
99
109
|
padding={padding}
|
|
110
|
+
// @ts-expect-error - TODO: fix this
|
|
100
111
|
placement={placement}
|
|
101
112
|
portal={portal}
|
|
113
|
+
// @ts-expect-error - TODO: fix this
|
|
102
114
|
shadow={shadow}
|
|
103
115
|
>
|
|
104
116
|
<Button mode="bleed" text="Or me" />
|
package/src/core/primitives/tooltip/__workshop__/{resizableBoundary.tsx → ResizableBoundary.tsx}
RENAMED
|
@@ -9,6 +9,7 @@ export default function ResizableBoundaryStory(): React.JSX.Element {
|
|
|
9
9
|
'Content',
|
|
10
10
|
'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut mollis consectetur malesuada. Sed lobortis est dolor, eget imperdiet velit placerat et. Aenean posuere mi non aliquet iaculis. Donec fermentum pulvinar purus at sagittis. Ut tincidunt massa odio, sed finibus justo ullamcorper id. Nam venenatis justo non ligula elementum cursus. Pellentesque laoreet justo in mollis sagittis. In lacinia ornare ultrices. Suspendisse potenti.',
|
|
11
11
|
)
|
|
12
|
+
// @ts-expect-error - TODO: fix this
|
|
12
13
|
const placement = useSelect('Placement', WORKSHOP_PLACEMENT_OPTIONS, 'right')
|
|
13
14
|
const portal = useBoolean('Portal', true)
|
|
14
15
|
const useBoundaryElement = useBoolean('Use boundary element', true)
|
|
@@ -38,6 +39,7 @@ export default function ResizableBoundaryStory(): React.JSX.Element {
|
|
|
38
39
|
<Tooltip
|
|
39
40
|
content={<Text size={1}>{content}</Text>}
|
|
40
41
|
padding={2}
|
|
42
|
+
// @ts-expect-error - TODO: fix this
|
|
41
43
|
placement={placement}
|
|
42
44
|
portal={portal}
|
|
43
45
|
>
|
|
@@ -46,6 +48,7 @@ export default function ResizableBoundaryStory(): React.JSX.Element {
|
|
|
46
48
|
<Tooltip
|
|
47
49
|
content={<Text size={1}>{content}</Text>}
|
|
48
50
|
padding={2}
|
|
51
|
+
// @ts-expect-error - TODO: fix this
|
|
49
52
|
placement={placement}
|
|
50
53
|
portal={portal}
|
|
51
54
|
>
|
|
@@ -58,6 +61,7 @@ export default function ResizableBoundaryStory(): React.JSX.Element {
|
|
|
58
61
|
<Tooltip
|
|
59
62
|
content={<Text size={1}>{content}</Text>}
|
|
60
63
|
padding={2}
|
|
64
|
+
// @ts-expect-error - TODO: fix this
|
|
61
65
|
placement={placement}
|
|
62
66
|
portal={portal}
|
|
63
67
|
>
|
|
@@ -70,6 +74,7 @@ export default function ResizableBoundaryStory(): React.JSX.Element {
|
|
|
70
74
|
<Tooltip
|
|
71
75
|
content={<Text size={1}>{content}</Text>}
|
|
72
76
|
padding={2}
|
|
77
|
+
// @ts-expect-error - TODO: fix this
|
|
73
78
|
placement={placement}
|
|
74
79
|
portal={portal}
|
|
75
80
|
>
|
|
@@ -8,22 +8,22 @@ const scope: WorkshopScope = {
|
|
|
8
8
|
{
|
|
9
9
|
name: 'props',
|
|
10
10
|
title: 'Props',
|
|
11
|
-
component: lazy(() => import('./
|
|
11
|
+
component: lazy(() => import('./Props')),
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
name: 'resizableBoundary',
|
|
15
15
|
title: 'Resizable Boundary',
|
|
16
|
-
component: lazy(() => import('./
|
|
16
|
+
component: lazy(() => import('./ResizableBoundary')),
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
name: 'overflowBoundary',
|
|
20
20
|
title: 'Overflowing Boundary',
|
|
21
|
-
component: lazy(() => import('./
|
|
21
|
+
component: lazy(() => import('./OverflowingBoundary')),
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
name: 'customPortalStory',
|
|
25
25
|
title: 'Custom Portal',
|
|
26
|
-
component: lazy(() => import('./
|
|
26
|
+
component: lazy(() => import('./CustomPortal')),
|
|
27
27
|
},
|
|
28
28
|
],
|
|
29
29
|
}
|
|
@@ -8,6 +8,6 @@ import type {TooltipDelayGroupContextValue} from './types'
|
|
|
8
8
|
*/
|
|
9
9
|
export const TooltipDelayGroupContext: Context<TooltipDelayGroupContextValue | null> =
|
|
10
10
|
createGlobalScopedContext<TooltipDelayGroupContextValue | null>(
|
|
11
|
-
'@sanity/ui/
|
|
11
|
+
'@sanity/ui/v4/tooltipDelayGroup',
|
|
12
12
|
null,
|
|
13
13
|
)
|
|
@@ -2,7 +2,7 @@ import {type ReactNode, useMemo} from 'react'
|
|
|
2
2
|
|
|
3
3
|
import {useDelayedState} from '../../../hooks/useDelayedState'
|
|
4
4
|
import type {Delay} from '../../../types'
|
|
5
|
-
import {TooltipDelayGroupContext} from './
|
|
5
|
+
import {TooltipDelayGroupContext} from './TooltipDelayGroupContext'
|
|
6
6
|
import type {TooltipDelayGroupContextValue} from './types'
|
|
7
7
|
|
|
8
8
|
/**
|
|
@@ -49,7 +49,5 @@ export function TooltipDelayGroupProvider(
|
|
|
49
49
|
[closeDelay, isGroupActive, openDelay, openTooltipId, setIsGroupActive, setOpenTooltipId],
|
|
50
50
|
)
|
|
51
51
|
|
|
52
|
-
return
|
|
53
|
-
<TooltipDelayGroupContext.Provider value={value}>{children}</TooltipDelayGroupContext.Provider>
|
|
54
|
-
)
|
|
52
|
+
return <TooltipDelayGroupContext value={value}>{children}</TooltipDelayGroupContext>
|
|
55
53
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {use} from 'react'
|
|
2
2
|
|
|
3
|
-
import {TooltipDelayGroupContext} from './
|
|
3
|
+
import {TooltipDelayGroupContext} from './TooltipDelayGroupContext'
|
|
4
4
|
import type {TooltipDelayGroupContextValue} from './types'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @beta
|
|
8
8
|
*/
|
|
9
9
|
export function useTooltipDelayGroup(): TooltipDelayGroupContextValue | null {
|
|
10
|
-
const value =
|
|
10
|
+
const value = use(TooltipDelayGroupContext)
|
|
11
11
|
|
|
12
12
|
return value
|
|
13
13
|
}
|
package/src/core/types.ts
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-empty-object-type */
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
3
3
|
|
|
4
|
-
import type {ComponentClass, ComponentProps, ExoticComponent, FunctionComponent, JSX} from 'react'
|
|
5
|
-
|
|
6
4
|
/**
|
|
7
5
|
* Assign properties from `U` to `T`, excluding properties that already exist in `T`.
|
|
8
6
|
*
|
|
@@ -14,17 +12,20 @@ export type Assign<T extends {}, U extends {}> = Omit<T, keyof U> & U
|
|
|
14
12
|
export type EmptyProps = {}
|
|
15
13
|
|
|
16
14
|
/** @public */
|
|
17
|
-
export type TagType = keyof JSX.IntrinsicElements
|
|
15
|
+
export type TagType = keyof React.JSX.IntrinsicElements
|
|
18
16
|
|
|
19
17
|
/** @public */
|
|
20
|
-
export type ComponentType<P = any> =
|
|
18
|
+
export type ComponentType<P = any> =
|
|
19
|
+
| React.FunctionComponent<P>
|
|
20
|
+
| React.ComponentClass<P>
|
|
21
|
+
| React.ExoticComponent<P>
|
|
21
22
|
|
|
22
23
|
/** @public */
|
|
23
24
|
export type ElementType<P> = TagType | ComponentType<P>
|
|
24
25
|
|
|
25
26
|
/** @public */
|
|
26
27
|
export type Props<P extends EmptyProps, E extends ElementType<P>> = Assign<
|
|
27
|
-
E extends TagType ? JSX.IntrinsicElements[E] : ComponentProps<E>,
|
|
28
|
+
E extends TagType ? React.JSX.IntrinsicElements[E] : React.ComponentProps<E>,
|
|
28
29
|
P & {as?: E}
|
|
29
30
|
>
|
|
30
31
|
|
package/src/core/utils/boundaryElement/{boundaryElementContext.ts → BoundaryElementContext.ts}
RENAMED
|
@@ -3,8 +3,5 @@ import type {Context} from 'react'
|
|
|
3
3
|
import {createGlobalScopedContext} from '../../lib/createGlobalScopedContext'
|
|
4
4
|
import type {BoundaryElementContextValue} from './types'
|
|
5
5
|
|
|
6
|
-
export const BoundaryElementContext: Context<BoundaryElementContextValue
|
|
7
|
-
createGlobalScopedContext<BoundaryElementContextValue
|
|
8
|
-
'@sanity/ui/v3/boundaryElement',
|
|
9
|
-
null,
|
|
10
|
-
)
|
|
6
|
+
export const BoundaryElementContext: Context<BoundaryElementContextValue> =
|
|
7
|
+
createGlobalScopedContext<BoundaryElementContextValue>('@sanity/ui/v4/boundaryElement', null)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import {type ReactNode} from 'react'
|
|
2
|
+
|
|
3
|
+
import {BoundaryElementContext} from './BoundaryElementContext'
|
|
4
|
+
|
|
5
|
+
/** @public */
|
|
6
|
+
export interface BoundaryElementProviderProps {
|
|
7
|
+
children: ReactNode
|
|
8
|
+
element: HTMLElement | null
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** @public */
|
|
12
|
+
export function BoundaryElementProvider(props: BoundaryElementProviderProps): React.JSX.Element {
|
|
13
|
+
const {children, element} = props
|
|
14
|
+
|
|
15
|
+
return <BoundaryElementContext value={element}>{children}</BoundaryElementContext>
|
|
16
|
+
}
|
|
@@ -1,24 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {use, useMemo} from 'react'
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {BoundaryElementContext} from './boundaryElementContext'
|
|
3
|
+
import {BoundaryElementContext} from './BoundaryElementContext'
|
|
5
4
|
import type {BoundaryElementContextValue} from './types'
|
|
6
5
|
|
|
7
|
-
const DEFAULT_VALUE: BoundaryElementContextValue = {
|
|
8
|
-
version: 0.0,
|
|
9
|
-
element: null,
|
|
10
|
-
}
|
|
11
|
-
|
|
12
6
|
/** @public */
|
|
13
|
-
export function useBoundaryElement(): BoundaryElementContextValue {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
// - If the value is an object, but doesn’t have `version: 0.0`, it’s not compatible with the current version
|
|
19
|
-
if (value && (!isRecord(value) || value.version !== 0.0)) {
|
|
20
|
-
throw new Error('useBoundaryElement(): the context value is not compatible')
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
return value || DEFAULT_VALUE
|
|
7
|
+
export function useBoundaryElement(): {version: 0.0; element: BoundaryElementContextValue} {
|
|
8
|
+
// eslint-disable-next-line no-warning-comments
|
|
9
|
+
// @TODO this wrapping is for BC and should be removed
|
|
10
|
+
const element = use(BoundaryElementContext)
|
|
11
|
+
return useMemo(() => ({version: 0.0, element}), [element])
|
|
24
12
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import {Box, Card, ElementQuery, Text} from '@sanity/ui'
|
|
2
|
+
|
|
3
|
+
import {testCard} from './styles.css'
|
|
4
|
+
|
|
5
|
+
export default function CustomMediaQuery(): React.JSX.Element {
|
|
6
|
+
return (
|
|
7
|
+
<Box padding={4}>
|
|
8
|
+
<Box marginBottom={4}>
|
|
9
|
+
<Text>Resize this frame to see the text color change:</Text>
|
|
10
|
+
</Box>
|
|
11
|
+
|
|
12
|
+
<ElementQuery media={[0, 100, 200, 300]}>
|
|
13
|
+
<Card className={testCard} padding={3} shadow={1}>
|
|
14
|
+
<Text>This card sits inside an element query.</Text>
|
|
15
|
+
</Card>
|
|
16
|
+
</ElementQuery>
|
|
17
|
+
</Box>
|
|
18
|
+
)
|
|
19
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import {vars} from '@sanity/ui/css'
|
|
2
|
+
import {style} from '@vanilla-extract/css'
|
|
3
|
+
|
|
4
|
+
export const testCard: string = style({
|
|
5
|
+
selectors: {
|
|
6
|
+
'[data-eq-min~="0"] > &': {
|
|
7
|
+
vars: {
|
|
8
|
+
[vars.color.fg]:
|
|
9
|
+
`light-dark(${vars.color.palette.orange[600]}, ${vars.color.palette.orange[400]})`,
|
|
10
|
+
},
|
|
11
|
+
},
|
|
12
|
+
'[data-eq-min~="1"] > &': {
|
|
13
|
+
vars: {
|
|
14
|
+
[vars.color.fg]:
|
|
15
|
+
`light-dark(${vars.color.palette.red[600]}, ${vars.color.palette.red[400]})`,
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
'[data-eq-min~="2"] > &': {
|
|
19
|
+
vars: {
|
|
20
|
+
[vars.color.fg]:
|
|
21
|
+
`light-dark(${vars.color.palette.magenta[600]}, ${vars.color.palette.magenta[400]})`,
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
'[data-eq-min~="3"] > &': {
|
|
25
|
+
vars: {
|
|
26
|
+
[vars.color.fg]:
|
|
27
|
+
`light-dark(${vars.color.palette.purple[600]}, ${vars.color.palette.purple[400]})`,
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
})
|
|
@@ -2,7 +2,7 @@ import {describe, expect, it, vi} from 'vitest'
|
|
|
2
2
|
|
|
3
3
|
import {render} from '$test/utils'
|
|
4
4
|
|
|
5
|
-
import {PortalContext} from './
|
|
5
|
+
import {PortalContext} from './PortalContext'
|
|
6
6
|
import type {PortalContextValue} from './types'
|
|
7
7
|
import {usePortal} from './usePortal'
|
|
8
8
|
|
|
@@ -27,9 +27,9 @@ describe('utils/portal', () => {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
return (
|
|
30
|
-
<PortalContext
|
|
30
|
+
<PortalContext value={value}>
|
|
31
31
|
<Debug />
|
|
32
|
-
</PortalContext
|
|
32
|
+
</PortalContext>
|
|
33
33
|
)
|
|
34
34
|
}
|
|
35
35
|
|
|
@@ -55,12 +55,12 @@ describe('utils/portal', () => {
|
|
|
55
55
|
|
|
56
56
|
function Root() {
|
|
57
57
|
return (
|
|
58
|
-
<PortalContext
|
|
58
|
+
<PortalContext
|
|
59
59
|
// @ts-expect-error - we want to test the error case
|
|
60
60
|
value={undefined}
|
|
61
61
|
>
|
|
62
62
|
<Debug />
|
|
63
|
-
</PortalContext
|
|
63
|
+
</PortalContext>
|
|
64
64
|
)
|
|
65
65
|
}
|
|
66
66
|
|
|
@@ -86,12 +86,12 @@ describe('utils/portal', () => {
|
|
|
86
86
|
// NOTE: we’re testing this because the context value may be a function in the future
|
|
87
87
|
|
|
88
88
|
return (
|
|
89
|
-
<PortalContext
|
|
89
|
+
<PortalContext
|
|
90
90
|
// @ts-expect-error - we want to test the error case
|
|
91
91
|
value={() => ({version: 1})}
|
|
92
92
|
>
|
|
93
93
|
<Debug />
|
|
94
|
-
</PortalContext
|
|
94
|
+
</PortalContext>
|
|
95
95
|
)
|
|
96
96
|
}
|
|
97
97
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import {type ReactNode, type ReactPortal, use} from 'react'
|
|
2
2
|
import {createPortal} from 'react-dom'
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import {CardContext} from '../../primitives/card/CardContext'
|
|
5
|
+
import {CardProvider} from '../../primitives/card/CardProvider'
|
|
6
|
+
import {assertCardContext} from '../../primitives/card/useCard'
|
|
6
7
|
import {usePortal} from './usePortal'
|
|
7
8
|
|
|
8
9
|
/** @public */
|
|
@@ -17,7 +18,6 @@ export interface PortalProps {
|
|
|
17
18
|
/** @public */
|
|
18
19
|
export function Portal(props: PortalProps): ReactPortal | null {
|
|
19
20
|
const {children, __unstable_name: name} = props
|
|
20
|
-
const card = useCard()
|
|
21
21
|
const portal = usePortal()
|
|
22
22
|
const portalElement =
|
|
23
23
|
(name ? portal.elements && portal.elements[name] : portal.element) ||
|
|
@@ -27,6 +27,9 @@ export function Portal(props: PortalProps): ReactPortal | null {
|
|
|
27
27
|
return null
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
+
const card = use(CardContext)
|
|
31
|
+
assertCardContext(card)
|
|
32
|
+
|
|
30
33
|
return createPortal(
|
|
31
34
|
<CardProvider tone="transparent" scheme={card.scheme}>
|
|
32
35
|
{children}
|
|
@@ -4,7 +4,7 @@ import {createGlobalScopedContext} from '../../lib/createGlobalScopedContext'
|
|
|
4
4
|
import {globalScope} from '../../lib/globalScope'
|
|
5
5
|
import type {PortalContextValue} from './types'
|
|
6
6
|
|
|
7
|
-
const key = '@sanity/ui/
|
|
7
|
+
const key = '@sanity/ui/v4/portal'
|
|
8
8
|
const elementKey = Symbol.for(`${key}/element`)
|
|
9
9
|
|
|
10
10
|
// Use the global scope as a map of symbols to elements
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {type ReactNode, use, useMemo, useSyncExternalStore} from 'react'
|
|
2
|
+
|
|
3
|
+
import {PortalContext} from './PortalContext'
|
|
4
|
+
import type {PortalContextValue} from './types'
|
|
5
|
+
|
|
6
|
+
/** @public */
|
|
7
|
+
export interface PortalProviderProps {
|
|
8
|
+
children: ReactNode
|
|
9
|
+
element?: HTMLElement | null
|
|
10
|
+
/**
|
|
11
|
+
* @beta
|
|
12
|
+
*/
|
|
13
|
+
__unstable_elements?: Record<string, HTMLElement | null | undefined>
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** @public */
|
|
17
|
+
export function PortalProvider(props: PortalProviderProps): React.JSX.Element {
|
|
18
|
+
const {children, element, __unstable_elements: elements} = props
|
|
19
|
+
const parentPortal = use(PortalContext)
|
|
20
|
+
const fallbackElement = useSyncExternalStore(
|
|
21
|
+
emptySubscribe,
|
|
22
|
+
() => elements?.['default'] ?? (parentPortal.element || document.body),
|
|
23
|
+
() => null,
|
|
24
|
+
)
|
|
25
|
+
|
|
26
|
+
const value = useMemo(() => {
|
|
27
|
+
return {
|
|
28
|
+
version: 0.0,
|
|
29
|
+
boundaryElement: null,
|
|
30
|
+
element: element || fallbackElement,
|
|
31
|
+
elements,
|
|
32
|
+
} satisfies PortalContextValue
|
|
33
|
+
}, [element, elements, fallbackElement])
|
|
34
|
+
|
|
35
|
+
return <PortalContext value={value}>{children}</PortalContext>
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const emptySubscribe = () => () => {}
|
|
@@ -1,13 +1,22 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {use} from 'react'
|
|
2
2
|
|
|
3
3
|
import {isRecord} from '../../lib/isRecord'
|
|
4
|
-
import {PortalContext} from './
|
|
4
|
+
import {PortalContext} from './PortalContext'
|
|
5
5
|
import type {PortalContextValue} from './types'
|
|
6
6
|
|
|
7
7
|
/** @public */
|
|
8
8
|
export function usePortal(): PortalContextValue {
|
|
9
|
-
const value =
|
|
9
|
+
const value = use(PortalContext)
|
|
10
10
|
|
|
11
|
+
assertPortalContext(value)
|
|
12
|
+
|
|
13
|
+
return value
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** @internal */
|
|
17
|
+
export function assertPortalContext(
|
|
18
|
+
value: PortalContextValue | null,
|
|
19
|
+
): asserts value is PortalContextValue {
|
|
11
20
|
if (!value) {
|
|
12
21
|
throw new Error('usePortal(): missing context value')
|
|
13
22
|
}
|
|
@@ -18,6 +27,4 @@ export function usePortal(): PortalContextValue {
|
|
|
18
27
|
if (!isRecord(value) || value.version !== 0.0) {
|
|
19
28
|
throw new Error('usePortal(): the context value is not compatible')
|
|
20
29
|
}
|
|
21
|
-
|
|
22
|
-
return value
|
|
23
30
|
}
|
|
@@ -21,8 +21,8 @@ export function _responsiveStyle(layer: string, rule: StyleRule): ResponsiveRule
|
|
|
21
21
|
rules[index] = style({
|
|
22
22
|
'@layer': {
|
|
23
23
|
[layer]: {
|
|
24
|
-
'@
|
|
25
|
-
[`
|
|
24
|
+
'@container': {
|
|
25
|
+
[`(min-width: ${bp}px)`]: rule,
|
|
26
26
|
},
|
|
27
27
|
},
|
|
28
28
|
},
|
|
@@ -37,8 +37,7 @@ export const element: string = _style(layers.primitives, {
|
|
|
37
37
|
display: 'block',
|
|
38
38
|
boxSizing: 'border-box',
|
|
39
39
|
resize: 'none',
|
|
40
|
-
|
|
41
|
-
width: ['-moz-available', '-webkit-fill-available', 'stretch'],
|
|
40
|
+
inlineSize: 'stretch',
|
|
42
41
|
|
|
43
42
|
selectors: {
|
|
44
43
|
'&::placeholder': {
|
|
@@ -57,7 +56,6 @@ export const element: string = _style(layers.primitives, {
|
|
|
57
56
|
[`${root}:not([data-invalid]) &`]: {
|
|
58
57
|
vars: {
|
|
59
58
|
[vars.color.input.text.fg]: vars.color.tinted.default.fg[2],
|
|
60
|
-
[vars.color.input.text.placeholder]: vars.color.tinted.default.border[4],
|
|
61
59
|
},
|
|
62
60
|
},
|
|
63
61
|
|
|
@@ -76,14 +74,12 @@ export const element: string = _style(layers.primitives, {
|
|
|
76
74
|
[`${root}:not([data-invalid]) &:disabled`]: {
|
|
77
75
|
vars: {
|
|
78
76
|
[vars.color.input.text.fg]: vars.color.tinted.default.border[4],
|
|
79
|
-
[vars.color.input.text.placeholder]: vars.color.tinted.default.border[1],
|
|
80
77
|
},
|
|
81
78
|
},
|
|
82
79
|
|
|
83
80
|
[`${root}[data-invalid] &`]: {
|
|
84
81
|
vars: {
|
|
85
82
|
[vars.color.input.text.fg]: vars.color.tinted.critical.fg[2],
|
|
86
|
-
[vars.color.input.text.placeholder]: vars.color.tinted.critical.border[2],
|
|
87
83
|
},
|
|
88
84
|
},
|
|
89
85
|
|
|
@@ -102,22 +98,26 @@ export const element: string = _style(layers.primitives, {
|
|
|
102
98
|
[`${root}[data-invalid] &:disabled`]: {
|
|
103
99
|
vars: {
|
|
104
100
|
[vars.color.input.text.fg]: vars.color.tinted.critical.border[4],
|
|
105
|
-
[vars.color.input.text.placeholder]: vars.color.tinted.critical.border[2],
|
|
106
101
|
},
|
|
107
102
|
},
|
|
108
103
|
},
|
|
104
|
+
|
|
105
|
+
vars: {
|
|
106
|
+
[vars.color.input.text.placeholder]:
|
|
107
|
+
`color-mix(in srgb, transparent, ${vars.color.input.text.fg} 50%)`,
|
|
108
|
+
},
|
|
109
109
|
})
|
|
110
110
|
|
|
111
111
|
export const presentation: string = _style(layers.primitives, {
|
|
112
112
|
backgroundColor: vars.color.input.text.bg,
|
|
113
113
|
borderRadius: 'inherit',
|
|
114
114
|
boxShadow: `inset 0 0 0 ${vars.input.border.width} ${vars.color.input.text.border}`,
|
|
115
|
+
display: 'block',
|
|
115
116
|
position: 'absolute',
|
|
116
117
|
top: 0,
|
|
117
118
|
left: 0,
|
|
118
119
|
right: 0,
|
|
119
120
|
bottom: 0,
|
|
120
|
-
display: 'block',
|
|
121
121
|
pointerEvents: 'none',
|
|
122
122
|
zIndex: 0,
|
|
123
123
|
|
|
@@ -155,11 +155,12 @@ export const presentation: string = _style(layers.primitives, {
|
|
|
155
155
|
},
|
|
156
156
|
},
|
|
157
157
|
|
|
158
|
-
[`${root}:not([data-invalid]):not([data-read-only]) ${element}:not(:disabled):hover + &`]:
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
[`${root}.${border}:not([data-invalid]):not([data-read-only]) ${element}:not(:disabled):hover + &`]:
|
|
159
|
+
{
|
|
160
|
+
vars: {
|
|
161
|
+
[vars.color.input.text.border]: vars.color.tinted.default.border[2],
|
|
162
|
+
},
|
|
161
163
|
},
|
|
162
|
-
},
|
|
163
164
|
|
|
164
165
|
[`${root}:not([data-invalid]) ${element}:focus + &`]: {
|
|
165
166
|
vars: {
|
|
@@ -186,7 +187,7 @@ export const presentation: string = _style(layers.primitives, {
|
|
|
186
187
|
},
|
|
187
188
|
},
|
|
188
189
|
|
|
189
|
-
[`${root}[data-invalid] ${element}:not(:disabled):hover + &`]: {
|
|
190
|
+
[`${root}.${border}[data-invalid] ${element}:not(:disabled):hover + &`]: {
|
|
190
191
|
vars: {
|
|
191
192
|
[vars.color.input.text.border]: vars.color.tinted.critical.border[2],
|
|
192
193
|
},
|