@sanity/ui 4.0.0-beta.8 → 4.0.0-next.0
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/LICENSE +1 -1
- package/README.md +21 -7
- package/dist/_chunks/getScopedTheme.cjs +4043 -0
- package/dist/_chunks/getScopedTheme.cjs.map +1 -0
- package/dist/_chunks/getScopedTheme.js +3803 -0
- package/dist/_chunks/getScopedTheme.js.map +1 -0
- package/dist/_chunks/portalProvider.cjs +3750 -0
- package/dist/_chunks/portalProvider.cjs.map +1 -0
- package/dist/_chunks/portalProvider.d.cts +1067 -0
- package/dist/_chunks/portalProvider.d.cts.map +1 -0
- package/dist/_chunks/portalProvider.d.ts +1067 -0
- package/dist/_chunks/portalProvider.d.ts.map +1 -0
- package/dist/_chunks/portalProvider.js +3300 -0
- package/dist/_chunks/portalProvider.js.map +1 -0
- package/dist/_chunks/refractor.cjs +18 -0
- package/dist/_chunks/refractor.cjs.map +1 -0
- package/dist/_chunks/refractor.js +20 -0
- package/dist/_chunks/refractor.js.map +1 -0
- package/dist/_chunks/rgba.d.cts +929 -0
- package/dist/_chunks/rgba.d.cts.map +1 -0
- package/dist/_chunks/rgba.d.ts +929 -0
- package/dist/_chunks/rgba.d.ts.map +1 -0
- package/dist/_visual-editing.cjs +4 -0
- package/dist/_visual-editing.d.cts +2 -0
- package/dist/_visual-editing.d.ts +2 -0
- package/dist/_visual-editing.js +3 -0
- package/dist/index.cjs +3007 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +1275 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +708 -1188
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2964 -4783
- package/dist/index.js.map +1 -1
- package/dist/theme.cjs +54 -0
- package/dist/theme.cjs.map +1 -0
- package/dist/theme.d.cts +278 -0
- package/dist/theme.d.cts.map +1 -0
- package/dist/theme.d.ts +278 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +53 -0
- package/dist/theme.js.map +1 -0
- package/package.json +65 -88
- package/dist/_chunks-es/Syntax.js +0 -23
- package/dist/_chunks-es/Syntax.js.map +0 -1
- package/dist/index.css +0 -1
- package/exports/index.css +0 -1
- package/exports/index.ts +0 -125
- package/src/components/autocomplete/Autocomplete.tsx +0 -665
- package/src/components/autocomplete/AutocompleteOption.tsx +0 -42
- package/src/components/autocomplete/__workshop__/Async.tsx +0 -162
- package/src/components/autocomplete/__workshop__/ConstrainedHeight.tsx +0 -121
- package/src/components/autocomplete/__workshop__/Custom.tsx +0 -91
- package/src/components/autocomplete/__workshop__/Example.tsx +0 -70
- package/src/components/autocomplete/__workshop__/FocusAndBlur.tsx +0 -39
- package/src/components/autocomplete/__workshop__/Fullscreen.tsx +0 -307
- package/src/components/autocomplete/__workshop__/index.ts +0 -41
- package/src/components/autocomplete/__workshop__/mock/apiStore.ts +0 -49
- package/src/components/autocomplete/__workshop__/mock/countries.ts +0 -245
- package/src/components/autocomplete/__workshop__/types.ts +0 -4
- package/src/components/autocomplete/autocompleteReducer.ts +0 -47
- package/src/components/autocomplete/constants.ts +0 -28
- package/src/components/autocomplete/types.ts +0 -103
- package/src/components/breadcrumbs/Breadcrumbs.tsx +0 -163
- package/src/components/breadcrumbs/__workshop__/Example.tsx +0 -48
- package/src/components/breadcrumbs/__workshop__/index.ts +0 -16
- package/src/components/dialog/Dialog.tsx +0 -230
- package/src/components/dialog/DialogCard.tsx +0 -233
- package/src/components/dialog/DialogContext.ts +0 -21
- package/src/components/dialog/DialogProvider.tsx +0 -34
- package/src/components/dialog/__workshop__/Activate.tsx +0 -141
- package/src/components/dialog/__workshop__/AutoFocus.tsx +0 -29
- package/src/components/dialog/__workshop__/Layering.tsx +0 -41
- package/src/components/dialog/__workshop__/Nested.tsx +0 -71
- package/src/components/dialog/__workshop__/OnScroll.tsx +0 -51
- package/src/components/dialog/__workshop__/Panes.tsx +0 -75
- package/src/components/dialog/__workshop__/Position.tsx +0 -30
- package/src/components/dialog/__workshop__/Props.tsx +0 -93
- package/src/components/dialog/__workshop__/Provider.tsx +0 -11
- package/src/components/dialog/__workshop__/Wrapped.tsx +0 -76
- package/src/components/dialog/__workshop__/index.ts +0 -21
- package/src/components/dialog/isTargetWithinScope.ts +0 -14
- package/src/components/dialog/types.ts +0 -2
- package/src/components/dialog/useDialog.ts +0 -11
- package/src/components/hotkeys/Hotkeys.tsx +0 -70
- package/src/components/hotkeys/__workshop__/Plain.tsx +0 -9
- package/src/components/hotkeys/__workshop__/index.ts +0 -16
- package/src/components/menu/Menu.test.tsx +0 -125
- package/src/components/menu/Menu.tsx +0 -174
- package/src/components/menu/MenuButton.tsx +0 -231
- package/src/components/menu/MenuContext.ts +0 -19
- package/src/components/menu/MenuDivider.tsx +0 -32
- package/src/components/menu/MenuGroup.tsx +0 -240
- package/src/components/menu/MenuItem.tsx +0 -153
- package/src/components/menu/__workshop__/AsComponent.tsx +0 -45
- package/src/components/menu/__workshop__/AvatarMenu.tsx +0 -36
- package/src/components/menu/__workshop__/ClosableMenuButton.tsx +0 -47
- package/src/components/menu/__workshop__/ConstrainedInBoundary.tsx +0 -133
- package/src/components/menu/__workshop__/CustomMenuItem.tsx +0 -47
- package/src/components/menu/__workshop__/CustomSelectedState.tsx +0 -35
- package/src/components/menu/__workshop__/DataProps.tsx +0 -27
- package/src/components/menu/__workshop__/DisableFocusOnClose.tsx +0 -40
- package/src/components/menu/__workshop__/Groups.tsx +0 -164
- package/src/components/menu/__workshop__/MenuButton.tsx +0 -79
- package/src/components/menu/__workshop__/MenuGroupRight.tsx +0 -73
- package/src/components/menu/__workshop__/NestedMenu.tsx +0 -22
- package/src/components/menu/__workshop__/OnCloseMenuButton.tsx +0 -50
- package/src/components/menu/__workshop__/SelectedItem.tsx +0 -69
- package/src/components/menu/__workshop__/ShouldFocus.tsx +0 -42
- package/src/components/menu/__workshop__/Tones.tsx +0 -19
- package/src/components/menu/__workshop__/index.ts +0 -91
- package/src/components/menu/helpers.ts +0 -82
- package/src/components/menu/useMenu.ts +0 -21
- package/src/components/menu/useMenuController.ts +0 -245
- package/src/components/tab/Tab.tsx +0 -135
- package/src/components/tab/TabList.tsx +0 -157
- package/src/components/tab/TabListContext.ts +0 -10
- package/src/components/tab/TabPanel.tsx +0 -94
- package/src/components/tab/__workshop__/Example.tsx +0 -135
- package/src/components/tab/__workshop__/index.ts +0 -16
- package/src/components/tab/types.ts +0 -11
- package/src/components/toast/Toast.test.tsx +0 -103
- package/src/components/toast/Toast.tsx +0 -191
- package/src/components/toast/ToastContext.ts +0 -7
- package/src/components/toast/ToastLayer.tsx +0 -54
- package/src/components/toast/ToastProvider.tsx +0 -127
- package/src/components/toast/__workshop__/Hook.tsx +0 -71
- package/src/components/toast/__workshop__/Toast.tsx +0 -26
- package/src/components/toast/__workshop__/index.ts +0 -21
- package/src/components/toast/toastState.ts +0 -6
- package/src/components/toast/types.ts +0 -24
- package/src/components/toast/useToast.ts +0 -23
- package/src/components/tree/Tree.tsx +0 -248
- package/src/components/tree/TreeContext.ts +0 -10
- package/src/components/tree/TreeGroup.tsx +0 -46
- package/src/components/tree/TreeItem.tsx +0 -236
- package/src/components/tree/__workshop__/Basic.tsx +0 -108
- package/src/components/tree/__workshop__/TabFromElement.tsx +0 -84
- package/src/components/tree/__workshop__/basic.perf.ts +0 -19
- package/src/components/tree/__workshop__/index.ts +0 -23
- package/src/components/tree/helpers.ts +0 -105
- package/src/components/tree/types.ts +0 -24
- package/src/components/tree/useTree.ts +0 -17
- package/src/components/virtualList/VirtualList.tsx +0 -254
- package/src/components/virtualList/__workshop__/ChangingProps.tsx +0 -41
- package/src/components/virtualList/__workshop__/ElementScroll.tsx +0 -43
- package/src/components/virtualList/__workshop__/InfiniteList.tsx +0 -40
- package/src/components/virtualList/__workshop__/WindowScrolll.tsx +0 -23
- package/src/components/virtualList/__workshop__/index.ts +0 -31
- package/src/core/_keys.ts +0 -26
- package/src/core/constants.ts +0 -67
- package/src/core/getElementRef.ts +0 -29
- package/src/core/helpers/animation.ts +0 -26
- package/src/core/helpers/element.ts +0 -55
- package/src/core/helpers/focus.ts +0 -92
- package/src/core/helpers/props.ts +0 -51
- package/src/core/helpers/scroll.ts +0 -15
- package/src/core/lib/createGlobalScopedContext.ts +0 -39
- package/src/core/lib/globalScope.ts +0 -19
- package/src/core/lib/isArray.ts +0 -3
- package/src/core/lib/isRecord.ts +0 -3
- package/src/core/types.ts +0 -57
- package/src/hooks/useClickOutsideEvent.test.tsx +0 -114
- package/src/hooks/useClickOutsideEvent.ts +0 -66
- package/src/hooks/useCustomValidity.ts +0 -13
- package/src/hooks/useElementSize.ts +0 -19
- package/src/hooks/useGlobalKeyDown.ts +0 -23
- package/src/hooks/useMatchMedia.ts +0 -28
- package/src/hooks/useMediaIndex/__workshop__/Test.tsx +0 -14
- package/src/hooks/useMediaIndex/__workshop__/index.ts +0 -16
- package/src/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -21
- package/src/hooks/useMediaIndex/useMediaIndex.ts +0 -111
- package/src/hooks/useMounted.ts +0 -15
- package/src/hooks/usePrefersDark.hydration.test.tsx +0 -56
- package/src/hooks/usePrefersDark.test.tsx +0 -20
- package/src/hooks/usePrefersDark.ts +0 -16
- package/src/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
- package/src/hooks/usePrefersReducedMotion.test.tsx +0 -20
- package/src/hooks/usePrefersReducedMotion.ts +0 -16
- package/src/hooks/useResponsiveProp.ts +0 -14
- package/src/hooks/useUnique.ts +0 -54
- package/src/middleware/origin.ts +0 -47
- package/src/observers/elementSize.ts +0 -114
- package/src/primitives/_syntax/LazySyntax.tsx +0 -4
- package/src/primitives/_syntax/Syntax.tsx +0 -26
- package/src/primitives/avatar/Avatar.tsx +0 -145
- package/src/primitives/avatar/AvatarCounter.tsx +0 -69
- package/src/primitives/avatar/AvatarStack.tsx +0 -77
- package/src/primitives/avatar/__workshop__/AsButton.tsx +0 -12
- package/src/primitives/avatar/__workshop__/PropsStory.tsx +0 -24
- package/src/primitives/avatar/__workshop__/Stack.tsx +0 -27
- package/src/primitives/avatar/__workshop__/WithinButton.tsx +0 -51
- package/src/primitives/avatar/__workshop__/WithinMenuItem.tsx +0 -52
- package/src/primitives/avatar/__workshop__/index.ts +0 -36
- package/src/primitives/avatar/types.ts +0 -2
- package/src/primitives/badge/Badge.test.tsx +0 -16
- package/src/primitives/badge/Badge.tsx +0 -53
- package/src/primitives/badge/__workshop__/Props.tsx +0 -27
- package/src/primitives/badge/__workshop__/Tones.tsx +0 -15
- package/src/primitives/badge/__workshop__/index.ts +0 -26
- package/src/primitives/badge/__workshop__/within-button.tsx +0 -36
- package/src/primitives/box/Box.tsx +0 -73
- package/src/primitives/box/__workshop__/Props.tsx +0 -26
- package/src/primitives/box/__workshop__/Responsive.tsx +0 -19
- package/src/primitives/box/__workshop__/index.ts +0 -21
- package/src/primitives/button/Button.test.tsx +0 -30
- package/src/primitives/button/Button.tsx +0 -148
- package/src/primitives/button/__workshop__/Custom.tsx +0 -39
- package/src/primitives/button/__workshop__/CustomIcons.tsx +0 -37
- package/src/primitives/button/__workshop__/DataProps.tsx +0 -18
- package/src/primitives/button/__workshop__/Disabled.tsx +0 -43
- package/src/primitives/button/__workshop__/MixedChildren.tsx +0 -12
- package/src/primitives/button/__workshop__/Props.tsx +0 -60
- package/src/primitives/button/__workshop__/Stacked.tsx +0 -60
- package/src/primitives/button/__workshop__/Styled1.css.ts +0 -7
- package/src/primitives/button/__workshop__/Styled1.tsx +0 -11
- package/src/primitives/button/__workshop__/TextOverflow.tsx +0 -17
- package/src/primitives/button/__workshop__/UploadButton.tsx +0 -28
- package/src/primitives/button/__workshop__/index.ts +0 -61
- package/src/primitives/button/types.ts +0 -2
- package/src/primitives/card/Card.tsx +0 -124
- package/src/primitives/card/CardContext.ts +0 -10
- package/src/primitives/card/CardInternalContext.ts +0 -10
- package/src/primitives/card/CardInternalProvider.tsx +0 -15
- package/src/primitives/card/CardProvider.tsx +0 -16
- package/src/primitives/card/__workshop__/AsButton.tsx +0 -103
- package/src/primitives/card/__workshop__/AsComponent.tsx +0 -25
- package/src/primitives/card/__workshop__/Checkered.tsx +0 -25
- package/src/primitives/card/__workshop__/DataProps.tsx +0 -25
- package/src/primitives/card/__workshop__/Interactive.tsx +0 -29
- package/src/primitives/card/__workshop__/ListNavigation.tsx +0 -78
- package/src/primitives/card/__workshop__/Props.tsx +0 -59
- package/src/primitives/card/__workshop__/Selected.tsx +0 -62
- package/src/primitives/card/__workshop__/Styled.tsx +0 -11
- package/src/primitives/card/__workshop__/Tones.tsx +0 -26
- package/src/primitives/card/__workshop__/index.ts +0 -21
- package/src/primitives/card/types.ts +0 -21
- package/src/primitives/card/useCard.ts +0 -20
- package/src/primitives/checkbox/Checkbox.tsx +0 -80
- package/src/primitives/checkbox/__workshop__/Example.tsx +0 -25
- package/src/primitives/checkbox/__workshop__/Props.tsx +0 -35
- package/src/primitives/checkbox/__workshop__/ReadOnly.tsx +0 -16
- package/src/primitives/checkbox/__workshop__/Tones.tsx +0 -26
- package/src/primitives/checkbox/__workshop__/index.ts +0 -15
- package/src/primitives/code/Code.tsx +0 -47
- package/src/primitives/code/__workshop__/OpticalAlignment.tsx +0 -25
- package/src/primitives/code/__workshop__/Props.tsx +0 -20
- package/src/primitives/code/__workshop__/index.ts +0 -21
- package/src/primitives/container/Container.tsx +0 -43
- package/src/primitives/container/__workshop__/Example.tsx +0 -16
- package/src/primitives/container/__workshop__/index.ts +0 -16
- package/src/primitives/container/types.ts +0 -6
- package/src/primitives/flex/Flex.tsx +0 -38
- package/src/primitives/flex/__workshop__/Example.tsx +0 -26
- package/src/primitives/flex/__workshop__/Gap.tsx +0 -25
- package/src/primitives/flex/__workshop__/index.ts +0 -13
- package/src/primitives/flex/__workshop__/styles.css.ts +0 -12
- package/src/primitives/grid/Grid.tsx +0 -38
- package/src/primitives/grid/__workshop__/Responsive.tsx +0 -54
- package/src/primitives/grid/__workshop__/index.ts +0 -12
- package/src/primitives/heading/Heading.tsx +0 -68
- package/src/primitives/heading/__workshop__/OpticalAlignment.tsx +0 -27
- package/src/primitives/heading/__workshop__/Plain.tsx +0 -25
- package/src/primitives/heading/__workshop__/index.ts +0 -21
- package/src/primitives/inline/Inline.tsx +0 -37
- package/src/primitives/inline/__workshop__/Plain.tsx +0 -22
- package/src/primitives/inline/__workshop__/index.ts +0 -10
- package/src/primitives/kbd/Kbd.tsx +0 -36
- package/src/primitives/kbd/__workshop__/Plain.tsx +0 -9
- package/src/primitives/kbd/__workshop__/index.ts +0 -10
- package/src/primitives/label/Label.tsx +0 -67
- package/src/primitives/label/__workshop__/OpticalAlignment.tsx +0 -27
- package/src/primitives/label/__workshop__/Plain.tsx +0 -27
- package/src/primitives/label/__workshop__/index.ts +0 -21
- package/src/primitives/layer/Layer.test.tsx +0 -110
- package/src/primitives/layer/Layer.tsx +0 -35
- package/src/primitives/layer/LayerCard.tsx +0 -90
- package/src/primitives/layer/LayerContext.ts +0 -7
- package/src/primitives/layer/LayerProvider.tsx +0 -106
- package/src/primitives/layer/__workshop__/MultipleRoots.tsx +0 -49
- package/src/primitives/layer/__workshop__/Nested.tsx +0 -107
- package/src/primitives/layer/__workshop__/ResponsiveZOffset.tsx +0 -17
- package/src/primitives/layer/__workshop__/_debug.tsx +0 -17
- package/src/primitives/layer/__workshop__/index.ts +0 -26
- package/src/primitives/layer/getLayerContext.test.ts +0 -32
- package/src/primitives/layer/getLayerContext.ts +0 -21
- package/src/primitives/layer/types.ts +0 -9
- package/src/primitives/layer/useLayer.ts +0 -24
- package/src/primitives/popover/Popover.tsx +0 -291
- package/src/primitives/popover/PopoverLayer.tsx +0 -101
- package/src/primitives/popover/__workshop__/AlignedStory.tsx +0 -75
- package/src/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
- package/src/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
- package/src/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
- package/src/primitives/popover/__workshop__/PlainStory.tsx +0 -67
- package/src/primitives/popover/__workshop__/RecursiveStory.tsx +0 -71
- package/src/primitives/popover/__workshop__/SidePanelStory.tsx +0 -95
- package/src/primitives/popover/__workshop__/TestStory.tsx +0 -97
- package/src/primitives/popover/__workshop__/index.ts +0 -56
- package/src/primitives/popover/__workshop__/portal-inheritance.tsx +0 -15
- package/src/primitives/popover/constants.ts +0 -20
- package/src/primitives/popover/floating-ui/size.ts +0 -75
- package/src/primitives/popover/types.ts +0 -12
- package/src/primitives/popover/useMiddleware.ts +0 -126
- package/src/primitives/radio/Radio.tsx +0 -64
- package/src/primitives/radio/__workshop__/Example.tsx +0 -63
- package/src/primitives/radio/__workshop__/Plain.tsx +0 -28
- package/src/primitives/radio/__workshop__/index.ts +0 -13
- package/src/primitives/select/Select.tsx +0 -76
- package/src/primitives/select/__workshop__/Plain.tsx +0 -37
- package/src/primitives/select/__workshop__/ReadOnly.tsx +0 -23
- package/src/primitives/select/__workshop__/index.ts +0 -13
- package/src/primitives/selectable/Selectable.tsx +0 -48
- package/src/primitives/selectable/__workshop__/DataProps.tsx +0 -24
- package/src/primitives/selectable/__workshop__/as-link.tsx +0 -13
- package/src/primitives/selectable/__workshop__/index.ts +0 -19
- package/src/primitives/skeleton/CodeSkeleton.tsx +0 -49
- package/src/primitives/skeleton/HeadingSkeleton.tsx +0 -48
- package/src/primitives/skeleton/LabelSkeleton.tsx +0 -47
- package/src/primitives/skeleton/Skeleton.tsx +0 -70
- package/src/primitives/skeleton/TextSkeleton.tsx +0 -49
- package/src/primitives/skeleton/__workshop__/Delay.tsx +0 -69
- package/src/primitives/skeleton/__workshop__/Skeleton.tsx +0 -63
- package/src/primitives/skeleton/__workshop__/index.ts +0 -13
- package/src/primitives/spinner/Spinner.tsx +0 -45
- package/src/primitives/spinner/SpinnerAnimatedIcon.tsx +0 -14
- package/src/primitives/spinner/__workshop__/Props.tsx +0 -13
- package/src/primitives/spinner/__workshop__/index.ts +0 -16
- package/src/primitives/srOnly/SrOnly.tsx +0 -33
- package/src/primitives/stack/Stack.tsx +0 -38
- package/src/primitives/stack/__workshop__/Plain.tsx +0 -30
- package/src/primitives/stack/__workshop__/index.ts +0 -16
- package/src/primitives/switch/Switch.tsx +0 -76
- package/src/primitives/switch/__workshop__/Example.tsx +0 -25
- package/src/primitives/switch/__workshop__/Props.tsx +0 -23
- package/src/primitives/switch/__workshop__/index.ts +0 -13
- package/src/primitives/text/InlineCode.tsx +0 -25
- package/src/primitives/text/Text.tsx +0 -68
- package/src/primitives/text/__workshop__/Example.tsx +0 -26
- package/src/primitives/text/__workshop__/OpticalAlignment.tsx +0 -27
- package/src/primitives/text/__workshop__/index.ts +0 -26
- package/src/primitives/text/__workshop__/inline-code.tsx +0 -13
- package/src/primitives/textArea/TextArea.tsx +0 -97
- package/src/primitives/textArea/__workshop__/Plain.tsx +0 -46
- package/src/primitives/textArea/__workshop__/index.ts +0 -16
- package/src/primitives/textInput/TextInput.tsx +0 -279
- package/src/primitives/textInput/__workshop__/ClearButton.tsx +0 -32
- package/src/primitives/textInput/__workshop__/CustomValidity.tsx +0 -17
- package/src/primitives/textInput/__workshop__/Plain.tsx +0 -102
- package/src/primitives/textInput/__workshop__/ReadOnly.tsx +0 -14
- package/src/primitives/textInput/__workshop__/States.tsx +0 -53
- package/src/primitives/textInput/__workshop__/Tones.tsx +0 -40
- package/src/primitives/textInput/__workshop__/Typed.tsx +0 -23
- package/src/primitives/textInput/__workshop__/index.ts +0 -46
- package/src/primitives/tooltip/Tooltip.test.tsx +0 -496
- package/src/primitives/tooltip/Tooltip.tsx +0 -546
- package/src/primitives/tooltip/TooltipLayer.tsx +0 -72
- package/src/primitives/tooltip/__workshop__/CustomPortal.tsx +0 -102
- package/src/primitives/tooltip/__workshop__/OverflowingBoundary.tsx +0 -74
- package/src/primitives/tooltip/__workshop__/Props.tsx +0 -107
- package/src/primitives/tooltip/__workshop__/ResizableBoundary.tsx +0 -91
- package/src/primitives/tooltip/__workshop__/index.ts +0 -31
- package/src/primitives/tooltip/constants.ts +0 -24
- package/src/primitives/tooltip/tooltipDelayGroup/TooltipDelayGroupContext.tsx +0 -13
- package/src/primitives/tooltip/tooltipDelayGroup/TooltipDelayGroupProvider.tsx +0 -96
- package/src/primitives/tooltip/tooltipDelayGroup/types.ts +0 -7
- package/src/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
- package/src/root/Root.tsx +0 -93
- package/src/root/RootProvider.tsx +0 -37
- package/src/root/__workshop__/Boundary.tsx +0 -43
- package/src/root/__workshop__/index.ts +0 -24
- package/src/root/__workshop__/primitives.tsx +0 -49
- package/src/root/__workshop__/tone-inheritance.tsx +0 -65
- package/src/utils/ErrorBoundary.tsx +0 -50
- package/src/utils/boundaryElement/BoundaryElementContext.ts +0 -7
- package/src/utils/boundaryElement/BoundaryElementProvider.tsx +0 -16
- package/src/utils/boundaryElement/__workshop__/Plain.tsx +0 -49
- package/src/utils/boundaryElement/__workshop__/index.ts +0 -16
- package/src/utils/boundaryElement/types.ts +0 -2
- package/src/utils/boundaryElement/useBoundaryElement.ts +0 -12
- package/src/utils/elementQuery/ElementQuery.tsx +0 -75
- package/src/utils/elementQuery/__workshop__/CustomMedia.tsx +0 -19
- package/src/utils/elementQuery/__workshop__/index.ts +0 -16
- package/src/utils/elementQuery/__workshop__/styles.css.ts +0 -31
- package/src/utils/elementQuery/helpers.ts +0 -27
- package/src/utils/portal/Portal.test.tsx +0 -105
- package/src/utils/portal/Portal.tsx +0 -42
- package/src/utils/portal/PortalContext.ts +0 -37
- package/src/utils/portal/PortalProvider.tsx +0 -38
- package/src/utils/portal/__workshop__/Named.tsx +0 -69
- package/src/utils/portal/__workshop__/index.ts +0 -16
- package/src/utils/portal/types.ts +0 -7
- package/src/utils/portal/usePortal.ts +0 -30
|
@@ -1,111 +0,0 @@
|
|
|
1
|
-
import {type Breakpoint, BREAKPOINTS} from '@sanity/ui-css'
|
|
2
|
-
import {useMemo, useSyncExternalStore} from 'react'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @internal
|
|
6
|
-
*/
|
|
7
|
-
export interface _MediaStore {
|
|
8
|
-
subscribe: (onStoreChange: () => void) => () => void
|
|
9
|
-
getSnapshot: () => Breakpoint
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
type MediaQueryMinWidth = `(min-width: ${number}px)`
|
|
13
|
-
type MediaQueryMaxWidth = `(max-width: ${number}px)`
|
|
14
|
-
type MediaQueryMinMaxWidth = `${MediaQueryMinWidth} and ${MediaQueryMaxWidth}`
|
|
15
|
-
type MediaQuery = `screen and ${MediaQueryMinWidth | MediaQueryMaxWidth | MediaQueryMinMaxWidth}`
|
|
16
|
-
|
|
17
|
-
function _getMediaQuery(index: number): MediaQuery {
|
|
18
|
-
if (index === 0) {
|
|
19
|
-
return `screen and (max-width: ${BREAKPOINTS[index + 1] - 1}px)`
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
if (index === BREAKPOINTS.length - 1) {
|
|
23
|
-
return `screen and (min-width: ${BREAKPOINTS[index]}px)`
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return `screen and (min-width: ${BREAKPOINTS[index]}px) and (max-width: ${BREAKPOINTS[index + 1] - 1}px)`
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
function _createMediaStore(): _MediaStore {
|
|
30
|
-
const mediaLen = BREAKPOINTS.length
|
|
31
|
-
|
|
32
|
-
let sizes:
|
|
33
|
-
| {
|
|
34
|
-
index: number
|
|
35
|
-
mq: MediaQueryList
|
|
36
|
-
}[]
|
|
37
|
-
| undefined = undefined
|
|
38
|
-
|
|
39
|
-
// The _createMediaStore function is called in both server and client environments.
|
|
40
|
-
// However since subscribe and getSnapshot are only called on the client we lazy init what we need for them
|
|
41
|
-
// so that we don't need to run checks for wether it's safe to call `window.matchMedia`
|
|
42
|
-
const getSizes = () => {
|
|
43
|
-
if (typeof window === 'undefined') {
|
|
44
|
-
return sizes
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
if (!sizes) {
|
|
48
|
-
sizes = []
|
|
49
|
-
|
|
50
|
-
for (let index = mediaLen; index > -1; index -= 1) {
|
|
51
|
-
sizes.push({
|
|
52
|
-
index,
|
|
53
|
-
mq: window.matchMedia(_getMediaQuery(index)),
|
|
54
|
-
})
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return sizes
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const getSnapshot = () => {
|
|
62
|
-
for (const {index, mq} of getSizes() ?? []) {
|
|
63
|
-
if (mq.matches) return index as Breakpoint
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return 0
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const subscribe = (onStoreChange: () => void) => {
|
|
70
|
-
const disposeFns: (() => void)[] = []
|
|
71
|
-
|
|
72
|
-
for (const {mq} of getSizes() ?? []) {
|
|
73
|
-
const handleChange = () => {
|
|
74
|
-
if (mq.matches) onStoreChange()
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
mq.addEventListener('change', handleChange)
|
|
78
|
-
|
|
79
|
-
disposeFns.push(() => mq.removeEventListener('change', handleChange))
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
return () => {
|
|
83
|
-
for (const disposeFn of disposeFns) {
|
|
84
|
-
disposeFn()
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return {getSnapshot, subscribe}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/**
|
|
93
|
-
* Only called during server-side rendering, and hydration if using hydrateRoot
|
|
94
|
-
* Since the server environment doesn't have access to the DOM, we can't determine the current value of the media query
|
|
95
|
-
* and we assume `(prefers-color-scheme: light)` since it's the most common scheme
|
|
96
|
-
*
|
|
97
|
-
* @link https://beta.reactjs.org/apis/react/useSyncExternalStore#adding-support-for-server-rendering
|
|
98
|
-
*/
|
|
99
|
-
function getServerSnapshot(): Breakpoint {
|
|
100
|
-
return 0
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* This API might change. DO NOT USE IN PRODUCTION.
|
|
105
|
-
* @beta
|
|
106
|
-
*/
|
|
107
|
-
export function useMediaIndex(): Breakpoint {
|
|
108
|
-
const store = useMemo(() => _createMediaStore(), [])
|
|
109
|
-
|
|
110
|
-
return useSyncExternalStore(store.subscribe, store.getSnapshot, getServerSnapshot)
|
|
111
|
-
}
|
package/src/hooks/useMounted.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import {useSyncExternalStore} from 'react'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Some components should only render after mounting to the DOM, and not be rendered at all during SSR renderToString or equivalent.
|
|
5
|
-
* @public
|
|
6
|
-
*/
|
|
7
|
-
export function useMounted(): boolean {
|
|
8
|
-
return useSyncExternalStore(
|
|
9
|
-
subscribe,
|
|
10
|
-
() => true,
|
|
11
|
-
() => false,
|
|
12
|
-
)
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
const subscribe = () => () => {}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* As this hook is used for top-level theming it's likely to be called while server-rendering
|
|
3
|
-
* and that's why it's worth it to have a testing suite for hydration
|
|
4
|
-
*/
|
|
5
|
-
import {waitFor} from '@testing-library/dom'
|
|
6
|
-
import {hydrateRoot} from 'react-dom/client'
|
|
7
|
-
import {afterAll, beforeAll, describe, expect, it, vi} from 'vitest'
|
|
8
|
-
|
|
9
|
-
import {usePrefersDark} from './usePrefersDark'
|
|
10
|
-
|
|
11
|
-
function Log() {
|
|
12
|
-
const dark = usePrefersDark()
|
|
13
|
-
|
|
14
|
-
return <>dark: {JSON.stringify(dark)}</>
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const originalMatchMedia = window.matchMedia
|
|
18
|
-
|
|
19
|
-
describe('usePrefersDark SSR hydration', () => {
|
|
20
|
-
beforeAll(() => {
|
|
21
|
-
window.matchMedia = () =>
|
|
22
|
-
({
|
|
23
|
-
addEventListener: vi.fn(),
|
|
24
|
-
removeEventListener: vi.fn(),
|
|
25
|
-
matches: true,
|
|
26
|
-
}) as unknown as MediaQueryList
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
afterAll(() => {
|
|
30
|
-
window.matchMedia = originalMatchMedia
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
it(`hydrates without any warnings`, async () => {
|
|
34
|
-
const spy = vi.spyOn(console, 'error') // .mockImplementation()
|
|
35
|
-
|
|
36
|
-
const node = document.createElement('div')
|
|
37
|
-
|
|
38
|
-
document.body.appendChild(node)
|
|
39
|
-
|
|
40
|
-
node.innerHTML = `dark: <!-- -->false`
|
|
41
|
-
|
|
42
|
-
hydrateRoot(node, <Log />)
|
|
43
|
-
|
|
44
|
-
// It's false initially
|
|
45
|
-
await waitFor(() => expect(node.innerHTML).toBe('dark: <!-- -->false'))
|
|
46
|
-
|
|
47
|
-
// After hydration it should switch to true
|
|
48
|
-
await waitFor(() => expect(node.innerHTML).toBe('dark: <!-- -->true'))
|
|
49
|
-
|
|
50
|
-
// eslint-disable-next-line no-console
|
|
51
|
-
expect(console.error).not.toHaveBeenCalled()
|
|
52
|
-
|
|
53
|
-
spy.mockReset()
|
|
54
|
-
spy.mockRestore()
|
|
55
|
-
})
|
|
56
|
-
})
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/** @jest-environment node */
|
|
2
|
-
import {renderToStaticMarkup, renderToString} from 'react-dom/server'
|
|
3
|
-
import {describe, expect, it} from 'vitest'
|
|
4
|
-
|
|
5
|
-
import {usePrefersDark} from './usePrefersDark'
|
|
6
|
-
|
|
7
|
-
function Log() {
|
|
8
|
-
const dark = usePrefersDark()
|
|
9
|
-
|
|
10
|
-
return <>dark: {JSON.stringify(dark)}</>
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
describe('usePrefersDark', () => {
|
|
14
|
-
it(`SSR to static markup returns false`, () => {
|
|
15
|
-
expect(renderToStaticMarkup(<Log />)).toBe('dark: false')
|
|
16
|
-
})
|
|
17
|
-
it(`SSR to markup for hydration doesn't throw`, () => {
|
|
18
|
-
expect(renderToString(<Log />)).toBe('dark: <!-- -->false')
|
|
19
|
-
})
|
|
20
|
-
})
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import {useMatchMedia} from './useMatchMedia'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Returns true if a dark color scheme is preferred, false if a light color scheme is preferred or the preference is not known.
|
|
5
|
-
*
|
|
6
|
-
* @param getServerSnapshot - Only called during server-side rendering, and hydration if using hydrateRoot. Since the server environment doesn't have access to the DOM, we can't determine the current value of the media query and we assume `(prefers-color-scheme: light)` since it's the most common scheme (https://dev/reference/react/useSyncExternalStore#adding-support-for-server-rendering)
|
|
7
|
-
*
|
|
8
|
-
* If you persist the detected preference in a cookie or a header then you may implement your own server snapshot to read it.
|
|
9
|
-
* Chrome supports reading the `prefers-color-scheme` media query from a header if the server response: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-CH-Prefers-Color-Scheme
|
|
10
|
-
* @example https://gist.github.com/stipsan/13c0cccf8dfc34f4b44bb1b984baf7df
|
|
11
|
-
*
|
|
12
|
-
* @public
|
|
13
|
-
*/
|
|
14
|
-
export function usePrefersDark(getServerSnapshot = () => false): boolean {
|
|
15
|
-
return useMatchMedia('(prefers-color-scheme: dark)', getServerSnapshot)
|
|
16
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* As this hook is used for top-level theming it's likely to be called while server-rendering
|
|
3
|
-
* and that's why it's worth it to have a testing suite for hydration
|
|
4
|
-
*/
|
|
5
|
-
import {waitFor} from '@testing-library/dom'
|
|
6
|
-
import {hydrateRoot} from 'react-dom/client'
|
|
7
|
-
import {afterAll, beforeAll, describe, expect, it, vi} from 'vitest'
|
|
8
|
-
|
|
9
|
-
import {usePrefersReducedMotion} from './usePrefersReducedMotion'
|
|
10
|
-
|
|
11
|
-
function Log() {
|
|
12
|
-
const reduceMotion = usePrefersReducedMotion()
|
|
13
|
-
|
|
14
|
-
return <>prefers-motion: {JSON.stringify(reduceMotion)}</>
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const originalMatchMedia = window.matchMedia
|
|
18
|
-
|
|
19
|
-
describe('usePrefersReducedMotion SSR hydration', () => {
|
|
20
|
-
beforeAll(() => {
|
|
21
|
-
window.matchMedia = () =>
|
|
22
|
-
({
|
|
23
|
-
addEventListener: vi.fn(),
|
|
24
|
-
removeEventListener: vi.fn(),
|
|
25
|
-
matches: true,
|
|
26
|
-
}) as unknown as MediaQueryList
|
|
27
|
-
})
|
|
28
|
-
|
|
29
|
-
afterAll(() => {
|
|
30
|
-
window.matchMedia = originalMatchMedia
|
|
31
|
-
})
|
|
32
|
-
|
|
33
|
-
it(`hydrates without any warnings`, async () => {
|
|
34
|
-
const spy = vi.spyOn(console, 'error') // .mockImplementation()
|
|
35
|
-
|
|
36
|
-
const node = document.createElement('div')
|
|
37
|
-
|
|
38
|
-
document.body.appendChild(node)
|
|
39
|
-
|
|
40
|
-
node.innerHTML = `prefers-motion: <!-- -->false`
|
|
41
|
-
|
|
42
|
-
hydrateRoot(node, <Log />)
|
|
43
|
-
|
|
44
|
-
// It's false initially
|
|
45
|
-
await waitFor(() => expect(node.innerHTML).toBe('prefers-motion: <!-- -->false'))
|
|
46
|
-
|
|
47
|
-
// After hydration it should switch to true
|
|
48
|
-
await waitFor(() => expect(node.innerHTML).toBe('prefers-motion: <!-- -->true'))
|
|
49
|
-
|
|
50
|
-
// eslint-disable-next-line no-console
|
|
51
|
-
expect(console.error).not.toHaveBeenCalled()
|
|
52
|
-
|
|
53
|
-
spy.mockReset()
|
|
54
|
-
spy.mockRestore()
|
|
55
|
-
})
|
|
56
|
-
})
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/** @jest-environment node */
|
|
2
|
-
import {renderToStaticMarkup, renderToString} from 'react-dom/server'
|
|
3
|
-
import {describe, expect, it} from 'vitest'
|
|
4
|
-
|
|
5
|
-
import {usePrefersReducedMotion} from './usePrefersReducedMotion'
|
|
6
|
-
|
|
7
|
-
function Log() {
|
|
8
|
-
const reduceMotion = usePrefersReducedMotion()
|
|
9
|
-
|
|
10
|
-
return <>prefers-motion: {JSON.stringify(reduceMotion)}</>
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
describe('usePrefersReducedMotion', () => {
|
|
14
|
-
it(`SSR to static markup returns false`, () => {
|
|
15
|
-
expect(renderToStaticMarkup(<Log />)).toBe('prefers-motion: false')
|
|
16
|
-
})
|
|
17
|
-
it(`SSR to markup for hydration doesn't throw`, () => {
|
|
18
|
-
expect(renderToString(<Log />)).toBe('prefers-motion: <!-- -->false')
|
|
19
|
-
})
|
|
20
|
-
})
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import {useMatchMedia} from './useMatchMedia'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Returns true if motion should be reduced
|
|
5
|
-
*
|
|
6
|
-
* @param getServerSnapshot - Only called during server-side rendering, and hydration if using hydrateRoot. Since the server environment doesn't have access to the DOM, we can't determine the current value of the media query and we assume `(prefers-reduced-motion: no-preference)` since it's the most common scheme (https://dev/reference/react/useSyncExternalStore#adding-support-for-server-rendering)
|
|
7
|
-
*
|
|
8
|
-
* If you persist the detected preference in a cookie or a header then you may implement your own server snapshot to read it.
|
|
9
|
-
* Chrome supports reading the `prefers-reduced-motion` media query from a header if the server response: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Sec-CH-Prefers-Reduced-Motion
|
|
10
|
-
* @example https://gist.github.com/stipsan/0c0f839a27842249cada893e9fb7767b
|
|
11
|
-
*
|
|
12
|
-
* @public
|
|
13
|
-
*/
|
|
14
|
-
export function usePrefersReducedMotion(getServerSnapshot = () => false): boolean {
|
|
15
|
-
return useMatchMedia('(prefers-reduced-motion: reduce)', getServerSnapshot)
|
|
16
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import type {ResponsiveProp, ResponsivePropArray} from '@sanity/ui-css'
|
|
2
|
-
|
|
3
|
-
import {_getResponsiveProp} from '../core/helpers/props'
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @internal
|
|
7
|
-
* @deprecated use `_getResponsiveProp` directly instead
|
|
8
|
-
*/
|
|
9
|
-
export function useResponsiveProp<T>(
|
|
10
|
-
val: ResponsiveProp<T> | undefined,
|
|
11
|
-
defaultVal?: ResponsivePropArray<T>,
|
|
12
|
-
): ResponsivePropArray<T> {
|
|
13
|
-
return _getResponsiveProp(val, defaultVal)
|
|
14
|
-
}
|
package/src/hooks/useUnique.ts
DELETED
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import {useMemo, useRef} from 'react'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Shallow equality check for objects and arrays
|
|
5
|
-
* @internal
|
|
6
|
-
*/
|
|
7
|
-
function shallowEqual<T>(a: T, b: T): boolean {
|
|
8
|
-
if (a === b) return true
|
|
9
|
-
if (typeof a !== 'object' || typeof b !== 'object') return false
|
|
10
|
-
if (a === null || b === null) return false
|
|
11
|
-
|
|
12
|
-
if (Array.isArray(a) && Array.isArray(b)) {
|
|
13
|
-
if (a.length !== b.length) return false
|
|
14
|
-
return a.every((item, index) => item === b[index])
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const keysA = Object.keys(a as object)
|
|
18
|
-
const keysB = Object.keys(b as object)
|
|
19
|
-
|
|
20
|
-
if (keysA.length !== keysB.length) return false
|
|
21
|
-
|
|
22
|
-
return keysA.every(
|
|
23
|
-
(key) =>
|
|
24
|
-
Object.prototype.hasOwnProperty.call(b, key) &&
|
|
25
|
-
(a as Record<string, unknown>)[key] === (b as Record<string, unknown>)[key],
|
|
26
|
-
)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Hook that returns a stable reference when the value is shallowly equal
|
|
31
|
-
* Prevents unnecessary re-renders and re-registrations
|
|
32
|
-
*
|
|
33
|
-
* @deprecated prefer `useMemo` in the wrapping component instead
|
|
34
|
-
*
|
|
35
|
-
* @internal
|
|
36
|
-
* @param value - The value to stabilize
|
|
37
|
-
* @returns Stable reference to the value
|
|
38
|
-
*/
|
|
39
|
-
export function useUnique<T>(value: T): T {
|
|
40
|
-
const ref = useRef<T>(value)
|
|
41
|
-
|
|
42
|
-
// Use useMemo to compute the stable value
|
|
43
|
-
// Intentionally accessing and updating ref for memoization
|
|
44
|
-
return useMemo(() => {
|
|
45
|
-
// eslint-disable-next-line react-hooks/refs
|
|
46
|
-
if (shallowEqual(ref.current, value)) {
|
|
47
|
-
// eslint-disable-next-line react-hooks/refs
|
|
48
|
-
return ref.current
|
|
49
|
-
}
|
|
50
|
-
// eslint-disable-next-line react-hooks/refs
|
|
51
|
-
ref.current = value
|
|
52
|
-
return value
|
|
53
|
-
}, [value])
|
|
54
|
-
}
|
package/src/middleware/origin.ts
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type {Middleware} from '@floating-ui/react-dom'
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Custom floating-ui middleware which calculates transform-origin X + Y offsets
|
|
5
|
-
* based on the current floating rect's dimensions and shift offset.
|
|
6
|
-
*
|
|
7
|
-
* Scaling popovers with these transform-origin offsets will give the effect of
|
|
8
|
-
* popvers slightly 'growing' from the origin/reference element.
|
|
9
|
-
*
|
|
10
|
-
* This middleware must be applied after both `@sanity/ui/size` and `shift` middlewares.
|
|
11
|
-
*/
|
|
12
|
-
export const origin: Middleware = {
|
|
13
|
-
name: '@sanity/ui/origin',
|
|
14
|
-
fn({middlewareData, placement, rects}) {
|
|
15
|
-
const [side] = placement.split('-')
|
|
16
|
-
|
|
17
|
-
const floatingWidth = rects.floating.width
|
|
18
|
-
const floatingHeight = rects.floating.height
|
|
19
|
-
|
|
20
|
-
const shiftX = middlewareData.shift?.x || 0
|
|
21
|
-
const shiftY = middlewareData.shift?.y || 0
|
|
22
|
-
|
|
23
|
-
if (floatingWidth <= 0 || floatingHeight <= 0) {
|
|
24
|
-
return {}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const isVerticalPlacement = ['bottom', 'top'].includes(side)
|
|
28
|
-
|
|
29
|
-
const {originX, originY}: {originX: number; originY: number} = isVerticalPlacement
|
|
30
|
-
? {
|
|
31
|
-
originX: clamp(0.5 - shiftX / floatingWidth, 0, 1),
|
|
32
|
-
originY: side === 'bottom' ? 0 : 1,
|
|
33
|
-
}
|
|
34
|
-
: {
|
|
35
|
-
originX: side === 'left' ? 1 : 0,
|
|
36
|
-
originY: clamp(0.5 - shiftY / floatingHeight, 0, 1),
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
return {
|
|
40
|
-
data: {originX, originY},
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
function clamp(num: number, min: number, max: number) {
|
|
46
|
-
return Math.min(Math.max(num, min), max)
|
|
47
|
-
}
|
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @beta
|
|
3
|
-
*/
|
|
4
|
-
export interface ElementRectValue {
|
|
5
|
-
width: number
|
|
6
|
-
height: number
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* @beta
|
|
11
|
-
*/
|
|
12
|
-
export interface ElementSize {
|
|
13
|
-
content: ElementRectValue
|
|
14
|
-
border: ElementRectValue
|
|
15
|
-
|
|
16
|
-
/** @deprecated INTERNAL ONLY */
|
|
17
|
-
_contentRect: DOMRectReadOnly
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @internal
|
|
22
|
-
*/
|
|
23
|
-
export type _ElementSizeSubscriber = (elementRect: ElementSize) => void
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* @internal
|
|
27
|
-
*/
|
|
28
|
-
export interface _ElementSizeObserver {
|
|
29
|
-
subscribe: (element: HTMLElement, subscriber: _ElementSizeSubscriber) => () => void
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
/**
|
|
33
|
-
* @internal
|
|
34
|
-
*/
|
|
35
|
-
export interface _ElementSizeListener {
|
|
36
|
-
subscribe: (element: HTMLElement, subscriber: _ElementSizeSubscriber) => () => void
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// Initialize element size observer
|
|
40
|
-
// NOTE: this should NOT have size effects
|
|
41
|
-
/**
|
|
42
|
-
* @internal
|
|
43
|
-
*/
|
|
44
|
-
export const _elementSizeObserver: _ElementSizeObserver = _createElementSizeObserver()
|
|
45
|
-
|
|
46
|
-
function _createElementRectValueListener(): _ElementSizeListener {
|
|
47
|
-
return {
|
|
48
|
-
subscribe(element, subscriber) {
|
|
49
|
-
const resizeObserver = new ResizeObserver(([entry]) => {
|
|
50
|
-
subscriber({
|
|
51
|
-
_contentRect: entry.contentRect,
|
|
52
|
-
border: {
|
|
53
|
-
width: entry.borderBoxSize[0].inlineSize,
|
|
54
|
-
height: entry.borderBoxSize[0].blockSize,
|
|
55
|
-
},
|
|
56
|
-
content: {
|
|
57
|
-
width: entry.contentRect.width,
|
|
58
|
-
height: entry.contentRect.height,
|
|
59
|
-
},
|
|
60
|
-
})
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
resizeObserver.observe(element)
|
|
64
|
-
|
|
65
|
-
return () => {
|
|
66
|
-
resizeObserver.unobserve(element)
|
|
67
|
-
resizeObserver.disconnect()
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
function _createElementSizeObserver(): _ElementSizeObserver {
|
|
74
|
-
const disposeCache = new WeakMap<HTMLElement, () => void>()
|
|
75
|
-
const subscribersCache = new WeakMap<HTMLElement, _ElementSizeSubscriber[]>()
|
|
76
|
-
|
|
77
|
-
return {
|
|
78
|
-
subscribe(element, subscriber) {
|
|
79
|
-
const subscribers = subscribersCache.get(element) || []
|
|
80
|
-
|
|
81
|
-
let dispose = disposeCache.get(element)
|
|
82
|
-
|
|
83
|
-
if (!subscribersCache.has(element)) {
|
|
84
|
-
subscribersCache.set(element, subscribers)
|
|
85
|
-
|
|
86
|
-
const listener = _createElementRectValueListener()
|
|
87
|
-
|
|
88
|
-
// listen
|
|
89
|
-
dispose = listener.subscribe(element, (elementRect) => {
|
|
90
|
-
for (const sub of subscribers) {
|
|
91
|
-
sub(elementRect)
|
|
92
|
-
}
|
|
93
|
-
})
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
subscribers.push(subscriber)
|
|
97
|
-
|
|
98
|
-
return () => {
|
|
99
|
-
// dispose
|
|
100
|
-
|
|
101
|
-
const idx = subscribers.indexOf(subscriber)
|
|
102
|
-
|
|
103
|
-
if (idx > -1) {
|
|
104
|
-
subscribers.splice(idx, 1)
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
if (subscribers.length === 0) {
|
|
108
|
-
// unlisten
|
|
109
|
-
if (dispose) dispose()
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
}
|
|
114
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import {_syntax} from '@sanity/ui-css'
|
|
2
|
-
import {hasLanguage, Refractor} from 'react-refractor'
|
|
3
|
-
|
|
4
|
-
export interface SyntaxProps {
|
|
5
|
-
language?: string
|
|
6
|
-
value: React.ReactNode
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export default function Syntax(props: SyntaxProps): React.JSX.Element {
|
|
10
|
-
const {language: languageProp, value} = props
|
|
11
|
-
const language = typeof languageProp === 'string' ? languageProp : undefined
|
|
12
|
-
const registered = language ? hasLanguage(language) : false
|
|
13
|
-
|
|
14
|
-
if (!language || !registered) {
|
|
15
|
-
return <code>{value}</code>
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return (
|
|
19
|
-
<Refractor
|
|
20
|
-
className={_syntax()}
|
|
21
|
-
inline
|
|
22
|
-
language={language}
|
|
23
|
-
value={typeof value === 'string' ? value : ''}
|
|
24
|
-
/>
|
|
25
|
-
)
|
|
26
|
-
}
|