@sanity/ui 4.0.0-static.4 → 4.0.0-static.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +1744 -1127
- 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} +7 -7
- 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
|
@@ -11,10 +11,10 @@ import {
|
|
|
11
11
|
useState,
|
|
12
12
|
} from 'react'
|
|
13
13
|
|
|
14
|
-
import {Stack} from '../../primitives/stack/
|
|
14
|
+
import {Stack} from '../../primitives/stack/Stack'
|
|
15
15
|
import type {ComponentType, Props} from '../../types'
|
|
16
16
|
import {_findNextItemElement, _findPrevItemElement, _focusItemElement} from './helpers'
|
|
17
|
-
import {TreeContext} from './
|
|
17
|
+
import {TreeContext} from './TreeContext'
|
|
18
18
|
import type {TreeContextValue, TreeState} from './types'
|
|
19
19
|
|
|
20
20
|
/** @beta */
|
|
@@ -230,7 +230,7 @@ export function Tree<E extends TreeElementType = typeof DEFAULT_TREE_ELEMENT>(
|
|
|
230
230
|
}, [children])
|
|
231
231
|
|
|
232
232
|
return (
|
|
233
|
-
<TreeContext
|
|
233
|
+
<TreeContext value={contextValue}>
|
|
234
234
|
<Stack
|
|
235
235
|
as="ul"
|
|
236
236
|
data-ui="Tree"
|
|
@@ -243,6 +243,6 @@ export function Tree<E extends TreeElementType = typeof DEFAULT_TREE_ELEMENT>(
|
|
|
243
243
|
>
|
|
244
244
|
{children}
|
|
245
245
|
</Stack>
|
|
246
|
-
</TreeContext
|
|
246
|
+
</TreeContext>
|
|
247
247
|
)
|
|
248
248
|
}
|
|
@@ -7,4 +7,4 @@ import type {TreeContextValue} from './types'
|
|
|
7
7
|
* @internal
|
|
8
8
|
*/
|
|
9
9
|
export const TreeContext: Context<TreeContextValue | null> =
|
|
10
|
-
createGlobalScopedContext<TreeContextValue | null>('@sanity/ui/
|
|
10
|
+
createGlobalScopedContext<TreeContextValue | null>('@sanity/ui/v4/tree', null)
|
|
@@ -7,22 +7,22 @@ import {
|
|
|
7
7
|
type MouseEvent,
|
|
8
8
|
type MouseEventHandler,
|
|
9
9
|
type ReactNode,
|
|
10
|
-
type Ref,
|
|
11
10
|
useCallback,
|
|
12
11
|
useEffect,
|
|
13
12
|
useId,
|
|
14
13
|
useMemo,
|
|
15
14
|
useRef,
|
|
15
|
+
useState,
|
|
16
16
|
} from 'react'
|
|
17
17
|
|
|
18
|
-
import {Box, type BoxProps} from '../../primitives/box/
|
|
19
|
-
import type {CardOwnProps} from '../../primitives/card/
|
|
20
|
-
import {Flex} from '../../primitives/flex/
|
|
21
|
-
import {Selectable, type SelectableElementType} from '../../primitives/selectable/
|
|
22
|
-
import {Text} from '../../primitives/text/
|
|
18
|
+
import {Box, type BoxProps} from '../../primitives/box/Box'
|
|
19
|
+
import type {CardOwnProps} from '../../primitives/card/Card'
|
|
20
|
+
import {Flex} from '../../primitives/flex/Flex'
|
|
21
|
+
import {Selectable, type SelectableElementType} from '../../primitives/selectable/Selectable'
|
|
22
|
+
import {Text} from '../../primitives/text/Text'
|
|
23
23
|
import type {ComponentType, Props} from '../../types'
|
|
24
|
-
import {TreeContext} from './
|
|
25
|
-
import {TreeGroup} from './
|
|
24
|
+
import {TreeContext} from './TreeContext'
|
|
25
|
+
import {TreeGroup} from './TreeGroup'
|
|
26
26
|
import {useTree} from './useTree'
|
|
27
27
|
|
|
28
28
|
/** @beta */
|
|
@@ -81,17 +81,19 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
|
|
|
81
81
|
...rest
|
|
82
82
|
} = props as TreeItemProps<typeof DEFAULT_TREE_ITEM_ELEMENT>
|
|
83
83
|
|
|
84
|
-
const
|
|
84
|
+
const [rootElement, setRootElement] = useState<HTMLLIElement | null>(null)
|
|
85
85
|
const treeitemRef = useRef<HTMLDivElement | null>(null)
|
|
86
86
|
const tree = useTree()
|
|
87
87
|
const {path, registerItem, setExpanded, setFocusedElement} = tree
|
|
88
88
|
const _id = useId()
|
|
89
89
|
const id = idProp || _id
|
|
90
|
-
const itemPath = useMemo(() =>
|
|
91
|
-
|
|
90
|
+
const [itemPath, itemKey] = useMemo(() => {
|
|
91
|
+
const itemPath = path.concat([id || ''])
|
|
92
|
+
return [itemPath, itemPath.join('/')]
|
|
93
|
+
}, [id, path])
|
|
92
94
|
const itemState = tree.state[itemKey]
|
|
93
95
|
const expanded = itemState?.expanded === undefined ? expandedProp : itemState?.expanded || false
|
|
94
|
-
const focused = tree.focusedElement && tree.focusedElement ===
|
|
96
|
+
const focused = tree.focusedElement && tree.focusedElement === rootElement
|
|
95
97
|
const tabIndex = focused ? 0 : -1
|
|
96
98
|
const contextValue = useMemo(
|
|
97
99
|
() => ({...tree, level: tree.level + 1, path: itemPath}),
|
|
@@ -111,28 +113,28 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
|
|
|
111
113
|
) {
|
|
112
114
|
event.stopPropagation()
|
|
113
115
|
setExpanded(itemKey, !expanded)
|
|
114
|
-
setFocusedElement(
|
|
116
|
+
setFocusedElement(rootElement)
|
|
115
117
|
}
|
|
116
118
|
},
|
|
117
|
-
[expanded, itemKey, onClick, setExpanded, setFocusedElement],
|
|
119
|
+
[expanded, itemKey, onClick, rootElement, setExpanded, setFocusedElement],
|
|
118
120
|
)
|
|
119
121
|
|
|
120
122
|
const handleKeyDown = useCallback(
|
|
121
123
|
(event: KeyboardEvent<HTMLElement>) => {
|
|
122
124
|
if (focused && event.key === 'Enter') {
|
|
123
|
-
const el = treeitemRef.current ||
|
|
125
|
+
const el = treeitemRef.current || rootElement
|
|
124
126
|
|
|
125
127
|
el?.click()
|
|
126
128
|
}
|
|
127
129
|
},
|
|
128
|
-
[focused],
|
|
130
|
+
[focused, rootElement],
|
|
129
131
|
)
|
|
130
132
|
|
|
131
133
|
useEffect(() => {
|
|
132
|
-
if (!
|
|
134
|
+
if (!rootElement) return
|
|
133
135
|
|
|
134
|
-
return registerItem(
|
|
135
|
-
}, [expanded,
|
|
136
|
+
return registerItem(rootElement, itemKey, expanded, selected)
|
|
137
|
+
}, [expanded, itemKey, registerItem, rootElement, selected])
|
|
136
138
|
|
|
137
139
|
const content = (
|
|
138
140
|
<Flex gap={space} padding={padding}>
|
|
@@ -172,7 +174,7 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
|
|
|
172
174
|
as="li"
|
|
173
175
|
className={treeItem({className})}
|
|
174
176
|
onClick={handleClick}
|
|
175
|
-
ref={
|
|
177
|
+
ref={setRootElement}
|
|
176
178
|
role="none"
|
|
177
179
|
>
|
|
178
180
|
<Selectable
|
|
@@ -193,9 +195,9 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
|
|
|
193
195
|
{content}
|
|
194
196
|
</Selectable>
|
|
195
197
|
|
|
196
|
-
<TreeContext
|
|
198
|
+
<TreeContext value={contextValue}>
|
|
197
199
|
{children && <TreeGroup hidden={!expanded}>{children}</TreeGroup>}
|
|
198
|
-
</TreeContext
|
|
200
|
+
</TreeContext>
|
|
199
201
|
</Box>
|
|
200
202
|
)
|
|
201
203
|
}
|
|
@@ -211,7 +213,8 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
|
|
|
211
213
|
className={treeItem({className})}
|
|
212
214
|
onClick={handleClick}
|
|
213
215
|
onKeyDown={handleKeyDown}
|
|
214
|
-
|
|
216
|
+
// @ts-expect-error - TODO: fix this
|
|
217
|
+
ref={setRootElement}
|
|
215
218
|
role="treeitem"
|
|
216
219
|
tabIndex={tabIndex}
|
|
217
220
|
>
|
|
@@ -229,9 +232,9 @@ export function TreeItem<E extends TreeItemElementType = typeof DEFAULT_TREE_ITE
|
|
|
229
232
|
{content}
|
|
230
233
|
</Selectable>
|
|
231
234
|
|
|
232
|
-
<TreeContext
|
|
235
|
+
<TreeContext value={contextValue}>
|
|
233
236
|
{children && <TreeGroup expanded={expanded}>{children}</TreeGroup>}
|
|
234
|
-
</TreeContext
|
|
237
|
+
</TreeContext>
|
|
235
238
|
</Box>
|
|
236
239
|
)
|
|
237
240
|
}
|
|
@@ -8,14 +8,14 @@ const scope: WorkshopScope = {
|
|
|
8
8
|
{
|
|
9
9
|
name: 'basic',
|
|
10
10
|
title: 'Basic',
|
|
11
|
-
component: lazy(() => import('./
|
|
12
|
-
// options: {perfTests: () => import('./
|
|
11
|
+
component: lazy(() => import('./Basic')),
|
|
12
|
+
// options: {perfTests: () => import('./Basic.perf')},
|
|
13
13
|
},
|
|
14
14
|
{
|
|
15
15
|
name: 'tab',
|
|
16
16
|
title: 'Tab',
|
|
17
|
-
component: lazy(() => import('./
|
|
18
|
-
// options: {perfTests: () => import('./
|
|
17
|
+
component: lazy(() => import('./TabFromElement')),
|
|
18
|
+
// options: {perfTests: () => import('./Basic.perf')},
|
|
19
19
|
},
|
|
20
20
|
],
|
|
21
21
|
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {use} from 'react'
|
|
2
2
|
|
|
3
|
-
import {TreeContext} from './
|
|
3
|
+
import {TreeContext} from './TreeContext'
|
|
4
4
|
import type {TreeContextValue} from './types'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
7
|
* @beta
|
|
8
8
|
*/
|
|
9
9
|
export function useTree(): TreeContextValue {
|
|
10
|
-
const tree =
|
|
10
|
+
const tree = use(TreeContext)
|
|
11
11
|
|
|
12
12
|
if (!tree) {
|
|
13
13
|
throw new Error('Tree: missing context value')
|
|
@@ -3,6 +3,7 @@ import type {Space} from '@sanity/ui/theme'
|
|
|
3
3
|
import {
|
|
4
4
|
type CSSProperties,
|
|
5
5
|
type ReactNode,
|
|
6
|
+
startTransition,
|
|
6
7
|
useEffect,
|
|
7
8
|
useImperativeHandle,
|
|
8
9
|
useMemo,
|
|
@@ -12,7 +13,7 @@ import {
|
|
|
12
13
|
|
|
13
14
|
import {_isScrollable} from '../../helpers/scroll'
|
|
14
15
|
import {_ResizeObserver} from '../../observers/resize'
|
|
15
|
-
import {Box} from '../../primitives/box/
|
|
16
|
+
import {Box} from '../../primitives/box/Box'
|
|
16
17
|
import type {ComponentType, Props} from '../../types'
|
|
17
18
|
|
|
18
19
|
/** @beta */
|
|
@@ -29,7 +30,10 @@ export interface VirtualListChangeOpts {
|
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
/** @beta */
|
|
32
|
-
export type VirtualListOwnProps<
|
|
33
|
+
export type VirtualListOwnProps<
|
|
34
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
35
|
+
Item = any,
|
|
36
|
+
> = {
|
|
33
37
|
gap?: Space
|
|
34
38
|
getItemKey?: (item: Item, itemIndex: number) => string
|
|
35
39
|
items?: Item[]
|
|
@@ -113,6 +117,7 @@ export function VirtualList<E extends VirtualListElementType = typeof DEFAULT_VI
|
|
|
113
117
|
window.addEventListener('scroll', handleScroll, {passive: true})
|
|
114
118
|
window.addEventListener('resize', handleResize)
|
|
115
119
|
|
|
120
|
+
// eslint-disable-next-line react-hooks/set-state-in-effect
|
|
116
121
|
setScrollHeight(window.innerHeight)
|
|
117
122
|
|
|
118
123
|
handleScroll()
|
|
@@ -141,51 +146,21 @@ export function VirtualList<E extends VirtualListElementType = typeof DEFAULT_VI
|
|
|
141
146
|
|
|
142
147
|
useEffect(() => {
|
|
143
148
|
// console.log('renderItem', renderItem)
|
|
144
|
-
setItemHeight(-1)
|
|
149
|
+
startTransition(() => setItemHeight(-1))
|
|
145
150
|
}, [renderItem])
|
|
146
151
|
|
|
147
|
-
const children =
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
position="absolute"
|
|
160
|
-
>
|
|
161
|
-
{renderItem(items[0])}
|
|
162
|
-
</Box>
|
|
163
|
-
<div
|
|
164
|
-
ref={(el) => (el ? setGapValue(el.offsetHeight) : undefined)}
|
|
165
|
-
style={{height: vars.space[gap]}}
|
|
166
|
-
/>
|
|
167
|
-
</>,
|
|
168
|
-
]
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return items.slice(fromIndex, toIndex).map((item, _itemIndex) => {
|
|
172
|
-
const itemIndex = fromIndex + _itemIndex
|
|
173
|
-
const node = renderItem(item)
|
|
174
|
-
const key = getItemKey ? getItemKey(item, itemIndex) : itemIndex
|
|
175
|
-
|
|
176
|
-
return (
|
|
177
|
-
<Box
|
|
178
|
-
insetLeft={0}
|
|
179
|
-
insetRight={0}
|
|
180
|
-
key={key}
|
|
181
|
-
position="absolute"
|
|
182
|
-
style={{top: itemIndex * (itemHeight + gapValue)}}
|
|
183
|
-
>
|
|
184
|
-
{node}
|
|
185
|
-
</Box>
|
|
186
|
-
)
|
|
187
|
-
})
|
|
188
|
-
}, [fromIndex, gap, gapValue, getItemKey, itemHeight, items, renderItem, toIndex])
|
|
152
|
+
const children = useChildren({
|
|
153
|
+
fromIndex,
|
|
154
|
+
gap,
|
|
155
|
+
getItemKey,
|
|
156
|
+
itemHeight,
|
|
157
|
+
items,
|
|
158
|
+
renderItem,
|
|
159
|
+
toIndex,
|
|
160
|
+
gapValue,
|
|
161
|
+
setGapValue,
|
|
162
|
+
setItemHeight,
|
|
163
|
+
})
|
|
189
164
|
|
|
190
165
|
const wrapperStyle: CSSProperties = useMemo(() => ({height}), [height])
|
|
191
166
|
|
|
@@ -198,6 +173,73 @@ export function VirtualList<E extends VirtualListElementType = typeof DEFAULT_VI
|
|
|
198
173
|
)
|
|
199
174
|
}
|
|
200
175
|
|
|
176
|
+
function useChildren({
|
|
177
|
+
fromIndex,
|
|
178
|
+
gap,
|
|
179
|
+
getItemKey,
|
|
180
|
+
itemHeight,
|
|
181
|
+
items,
|
|
182
|
+
renderItem,
|
|
183
|
+
toIndex,
|
|
184
|
+
gapValue,
|
|
185
|
+
setGapValue,
|
|
186
|
+
setItemHeight,
|
|
187
|
+
}: Pick<VirtualListProps, 'getItemKey' | 'renderItem'> &
|
|
188
|
+
Required<Pick<VirtualListProps, 'items'>> & {
|
|
189
|
+
fromIndex: number
|
|
190
|
+
gap: Space
|
|
191
|
+
itemHeight: number
|
|
192
|
+
toIndex: number
|
|
193
|
+
gapValue: number
|
|
194
|
+
setGapValue: React.Dispatch<React.SetStateAction<number>>
|
|
195
|
+
setItemHeight: React.Dispatch<React.SetStateAction<number>>
|
|
196
|
+
}) {
|
|
197
|
+
if (!renderItem || items.length === 0) return null
|
|
198
|
+
|
|
199
|
+
if (itemHeight === -1) {
|
|
200
|
+
return [
|
|
201
|
+
<>
|
|
202
|
+
<Box
|
|
203
|
+
ref={(el) => {
|
|
204
|
+
if (el) setItemHeight(el.offsetHeight)
|
|
205
|
+
}}
|
|
206
|
+
insetTop={0}
|
|
207
|
+
insetLeft={0}
|
|
208
|
+
insetRight={0}
|
|
209
|
+
key={0}
|
|
210
|
+
position="absolute"
|
|
211
|
+
>
|
|
212
|
+
{renderItem(items[0])}
|
|
213
|
+
</Box>
|
|
214
|
+
<div
|
|
215
|
+
ref={(el) => {
|
|
216
|
+
if (el) setGapValue(el.offsetHeight)
|
|
217
|
+
}}
|
|
218
|
+
style={{height: vars.space[gap]}}
|
|
219
|
+
/>
|
|
220
|
+
</>,
|
|
221
|
+
]
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
return items.slice(fromIndex, toIndex).map((item, _itemIndex) => {
|
|
225
|
+
const itemIndex = fromIndex + _itemIndex
|
|
226
|
+
const node = renderItem(item)
|
|
227
|
+
const key = getItemKey ? getItemKey(item, itemIndex) : itemIndex
|
|
228
|
+
|
|
229
|
+
return (
|
|
230
|
+
<Box
|
|
231
|
+
insetLeft={0}
|
|
232
|
+
insetRight={0}
|
|
233
|
+
key={key}
|
|
234
|
+
position="absolute"
|
|
235
|
+
style={{top: itemIndex * (itemHeight + gapValue)}}
|
|
236
|
+
>
|
|
237
|
+
{node}
|
|
238
|
+
</Box>
|
|
239
|
+
)
|
|
240
|
+
})
|
|
241
|
+
}
|
|
242
|
+
|
|
201
243
|
function findScrollable(parentNode: ParentNode | null) {
|
|
202
244
|
let _scrollEl = parentNode
|
|
203
245
|
|
|
@@ -8,22 +8,22 @@ const scope: WorkshopScope = {
|
|
|
8
8
|
{
|
|
9
9
|
name: 'window-scroll',
|
|
10
10
|
title: 'Window scroll',
|
|
11
|
-
component: lazy(() => import('./
|
|
11
|
+
component: lazy(() => import('./WindowScrolll')),
|
|
12
12
|
},
|
|
13
13
|
{
|
|
14
14
|
name: 'element-scroll',
|
|
15
15
|
title: 'Element scroll',
|
|
16
|
-
component: lazy(() => import('./
|
|
16
|
+
component: lazy(() => import('./ElementScroll')),
|
|
17
17
|
},
|
|
18
18
|
{
|
|
19
19
|
name: 'infinite-list',
|
|
20
20
|
title: 'Infinite list',
|
|
21
|
-
component: lazy(() => import('./
|
|
21
|
+
component: lazy(() => import('./InfiniteList')),
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
name: 'changing-props',
|
|
25
25
|
title: 'Changing props',
|
|
26
|
-
component: lazy(() => import('./
|
|
26
|
+
component: lazy(() => import('./ChangingProps')),
|
|
27
27
|
},
|
|
28
28
|
],
|
|
29
29
|
}
|
|
@@ -4,15 +4,6 @@ import {EMPTY_ARRAY} from '../constants'
|
|
|
4
4
|
import {isArray} from '../lib/isArray'
|
|
5
5
|
import {isRecord} from '../lib/isRecord'
|
|
6
6
|
|
|
7
|
-
/**
|
|
8
|
-
* @internal
|
|
9
|
-
*/
|
|
10
|
-
export function _getArrayProp<T>(val: T | T[] | undefined, defaultVal?: T[]): T[] {
|
|
11
|
-
if (val === undefined) return defaultVal || EMPTY_ARRAY
|
|
12
|
-
|
|
13
|
-
return Array.isArray(val) ? val : [val]
|
|
14
|
-
}
|
|
15
|
-
|
|
16
7
|
/**
|
|
17
8
|
* @internal
|
|
18
9
|
*/
|
|
@@ -2,16 +2,23 @@ import {useEffect} from 'react'
|
|
|
2
2
|
import {useEffectEvent} from 'use-effect-event'
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
|
+
* Adds global keydown event listener to the window.
|
|
6
|
+
*
|
|
7
|
+
* @param onKeyDown - The function to call when a keydown event is triggered.
|
|
8
|
+
* @param options - The options to pass to the addEventListener function (example, capture: true)
|
|
5
9
|
* @beta
|
|
6
10
|
*/
|
|
7
|
-
export function useGlobalKeyDown(
|
|
11
|
+
export function useGlobalKeyDown(
|
|
12
|
+
onKeyDown: (event: KeyboardEvent) => void,
|
|
13
|
+
options?: AddEventListenerOptions,
|
|
14
|
+
): void {
|
|
8
15
|
const handleKeyDown = useEffectEvent((event: KeyboardEvent) => onKeyDown(event))
|
|
9
16
|
|
|
10
17
|
useEffect(() => {
|
|
11
18
|
const handler = (event: KeyboardEvent) => handleKeyDown(event)
|
|
12
19
|
|
|
13
|
-
window.addEventListener('keydown', handler)
|
|
20
|
+
window.addEventListener('keydown', handler, options)
|
|
14
21
|
|
|
15
|
-
return () => window.removeEventListener('keydown', handler)
|
|
16
|
-
}, [])
|
|
22
|
+
return () => window.removeEventListener('keydown', handler, options)
|
|
23
|
+
}, [options])
|
|
17
24
|
}
|
|
@@ -1,28 +1,15 @@
|
|
|
1
1
|
import type {Breakpoint, ResponsiveProp} from '@sanity/ui/css'
|
|
2
|
-
import {
|
|
2
|
+
import {useMemo} from 'react'
|
|
3
3
|
|
|
4
4
|
import {_getResponsiveProp} from '../helpers/props'
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
* @
|
|
7
|
+
* @internal
|
|
8
|
+
* @deprecated use `_getResponsiveProp` directly instead, if necessary
|
|
9
9
|
*/
|
|
10
10
|
export function useResponsiveProp<T>(
|
|
11
11
|
val: ResponsiveProp<T> | undefined,
|
|
12
12
|
defaultVal?: Partial<Record<Breakpoint, T>>,
|
|
13
13
|
): Partial<Record<Breakpoint, T>> {
|
|
14
|
-
|
|
15
|
-
() => [_getResponsiveProp(val, defaultVal), JSON.stringify(val ?? defaultVal)],
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
const hash = JSON.stringify(val ?? defaultVal)
|
|
19
|
-
|
|
20
|
-
if (hash !== cachedHash) {
|
|
21
|
-
// If the cached hash has changed, update the cache right away.
|
|
22
|
-
// Calling setState during render is fine in this case, and preferred over a useEffect loop
|
|
23
|
-
// https://19.dev/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes
|
|
24
|
-
setCache([_getResponsiveProp(val, defaultVal), hash])
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return cachedVal
|
|
14
|
+
return useMemo(() => _getResponsiveProp(val, defaultVal), [defaultVal, val])
|
|
28
15
|
}
|