@sanity/ui 4.4.5 → 4.5.0-panda.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/dist/{arrow-72xi7WAV.js → arrow-BVbVEhyN.js} +21 -25
- package/dist/arrow-BVbVEhyN.js.map +1 -0
- package/dist/autocomplete.js +8 -10
- package/dist/autocomplete.js.map +1 -1
- package/dist/breadcrumbs.js +5 -6
- package/dist/breadcrumbs.js.map +1 -1
- package/dist/{button-D34_7IeR.js → button-DLiQy0Qz.js} +6 -7
- package/dist/button-DLiQy0Qz.js.map +1 -0
- package/dist/{hotkeys-DInKzmc_.js → hotkeys-D-yvp5RU.js} +4 -6
- package/dist/{hotkeys-DInKzmc_.js.map → hotkeys-D-yvp5RU.js.map} +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +41 -53
- package/dist/index.js.map +1 -1
- package/dist/{layer-Bg3aVJDJ.js → layer-CA793bFP.js} +2 -3
- package/dist/layer-CA793bFP.js.map +1 -0
- package/dist/menu.js +5 -7
- package/dist/menu.js.map +1 -1
- package/dist/{popover-DiKiJ-Cd.js → popover-bcCbXwoP.js} +2 -2
- package/dist/{popover-DiKiJ-Cd.js.map → popover-bcCbXwoP.js.map} +1 -1
- package/dist/popover.js +1 -1
- package/dist/{stack-DpKdobwf.js → stack-TOlBMvbq.js} +2 -3
- package/dist/stack-TOlBMvbq.js.map +1 -0
- package/dist/styles.css +694 -560
- package/dist/{textInput-BMXkOQzX.js → textInput-ByCyqiAh.js} +8 -9
- package/dist/{textInput-BMXkOQzX.js.map → textInput-ByCyqiAh.js.map} +1 -1
- package/dist/toast.js +10 -13
- package/dist/toast.js.map +1 -1
- package/dist/tooltip.js +5 -7
- package/dist/tooltip.js.map +1 -1
- package/package.json +8 -4
- package/dist/arrow-72xi7WAV.js.map +0 -1
- package/dist/button-D34_7IeR.js.map +0 -1
- package/dist/layer-Bg3aVJDJ.js.map +0 -1
- package/dist/stack-DpKdobwf.js.map +0 -1
package/dist/tooltip.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.js","names":["(nextState: SetStateAction<S>, delay?: number) => {\n const action = () => {\n setState(nextState)\n }\n\n // A new state change has been initiated, cancel the previous one.\n if (delayedAction.current) {\n clearTimeout(delayedAction.current)\n delayedAction.current = undefined\n }\n\n if (!delay) return action()\n delayedAction.current = setTimeout(action, delay)\n }","useCallback((nextState: SetStateAction<S>, delay?: number) => {\n const action = () => {\n setState(nextState)\n }\n\n // A new state change has been initiated, cancel the previous one.\n if (delayedAction.current) {\n clearTimeout(delayedAction.current)\n delayedAction.current = undefined\n }\n\n if (!delay) return action()\n delayedAction.current = setTimeout(action, delay)\n }, [])","() => {\n return () => {\n if (delayedAction.current) {\n clearTimeout(delayedAction.current)\n }\n }\n }","[]","[state, onStateChange]","_c","getTransformOrigin(originX, originY)","{\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }","animate ? 'transform' : undefined","useMemo(\n () => ({\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }),\n [animate, originX, originY, style],\n )","{\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }","arrowX !== null ? arrowX : undefined","arrowY !== null ? arrowY : undefined","useMemo(\n () => ({\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }),\n [arrowX, arrowY],\n )","clsx(tooltipCard, className)","arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )","<MotionCard\n className={clsx(tooltipCard, className)}\n data-ui=\"Tooltip__card\"\n {...restProps}\n data-placement={placement}\n padding={padding}\n radius={radius}\n ref={ref}\n scheme={scheme}\n shadow={shadow}\n style={rootStyle}\n {...(animate ? POPOVER_MOTION_PROPS : undefined)}\n >\n {children}\n\n {arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )}\n </MotionCard>","animate ? POPOVER_MOTION_PROPS : undefined","_c","_animate = false","arrowProp = false","placementProp = 'bottom'","padding = 2","radius = 2","shadow = 2","_getArrayProp(fallbackPlacementsProp)","() => ref.current","resolvePortalElement(portal, portalName)","{\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n portalElement,\n rootBoundary,\n }","{\n middleware,\n placement: placementProp,\n whileElementsMounted: autoUpdate,\n }","childProp ? getElementRef<HTMLElement>(childProp) : undefined","() => update()","() => {\n if (boundaryElement || portalElement) reposition()\n }","[boundaryElement, portalElement]","delayGroupContext || {}","(open: boolean, immediate?: boolean) => {\n if (isInsideGroup) {\n // When it's inside a group, the open or close status will be handled by the group.\n if (open) {\n const groupedOpenDelay = immediate ? 0 : openDelay\n\n setIsGroupActive?.(open, groupedOpenDelay)\n setOpenTooltipId?.(tooltipId, groupedOpenDelay)\n } else {\n const minimumGroupDeactivateDelay = 200 // We should provide some delay to allow the user to reach the next tooltip.\n const groupDeactivateDelay =\n closeDelay > minimumGroupDeactivateDelay ? closeDelay : minimumGroupDeactivateDelay\n\n setIsGroupActive?.(open, groupDeactivateDelay)\n setOpenTooltipId?.(null, immediate ? 0 : closeDelay)\n }\n } else {\n const standaloneDelay = immediate ? 0 : open ? openDelay : closeDelay\n\n // When it's not inside a group, the open or close status will be handled by the tooltip itself.\n setIsOpen(open, standaloneDelay)\n }\n }","useCallback(\n (open: boolean, immediate?: boolean) => {\n if (isInsideGroup) {\n // When it's inside a group, the open or close status will be handled by the group.\n if (open) {\n const groupedOpenDelay = immediate ? 0 : openDelay\n\n setIsGroupActive?.(open, groupedOpenDelay)\n setOpenTooltipId?.(tooltipId, groupedOpenDelay)\n } else {\n const minimumGroupDeactivateDelay = 200 // We should provide some delay to allow the user to reach the next tooltip.\n const groupDeactivateDelay =\n closeDelay > minimumGroupDeactivateDelay ? closeDelay : minimumGroupDeactivateDelay\n\n setIsGroupActive?.(open, groupDeactivateDelay)\n setOpenTooltipId?.(null, immediate ? 0 : closeDelay)\n }\n } else {\n const standaloneDelay = immediate ? 0 : open ? openDelay : closeDelay\n\n // When it's not inside a group, the open or close status will be handled by the tooltip itself.\n setIsOpen(open, standaloneDelay)\n }\n },\n [\n isInsideGroup,\n openDelay,\n setIsGroupActive,\n setOpenTooltipId,\n tooltipId,\n closeDelay,\n setIsOpen,\n ],\n )","(e: FocusEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onBlur?.(e)\n }","props","useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onBlur?.(e)\n },\n [childProp?.props, handleIsOpenChange, suppressed],\n )","(e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onClick?.(e)\n }","e","useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onClick?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )","(e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onContextMenu?.(e)\n }","useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onContextMenu?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )","(e: FocusEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onFocus?.(e)\n }","useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onFocus?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )","(e: MouseEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onMouseEnter?.(e)\n }","useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onMouseEnter?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )","(e: MouseEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onMouseLeave?.(e)\n }","useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onMouseLeave?.(e)\n },\n [childProp?.props, handleIsOpenChange, suppressed],\n )","{handleIsOpenChange, referenceRef, showTooltip, isInsideGroup}","() => handleIsOpenChange(false, true)","() => {\n // If the user clicks on escape key, close the tooltip.\n if (!showTooltip) return\n\n function handleWindowKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n onWindowEscape()\n }\n }\n\n window.addEventListener('keydown', handleWindowKeyDown)\n\n // oxlint-disable-next-line consistent-return\n return () => {\n window.removeEventListener('keydown', handleWindowKeyDown)\n }\n }","[showTooltip]","(arrowEl: HTMLDivElement | null) => {\n arrowRef.current = arrowEl\n update()\n }","useCallback(\n (arrowEl: HTMLDivElement | null) => {\n arrowRef.current = arrowEl\n update()\n },\n [update],\n )","(node: HTMLDivElement | null) => {\n ref.current = node\n if (node) handOverReference()\n refs.setFloating(node)\n }","useCallback(\n (node: HTMLDivElement | null) => {\n ref.current = node\n if (node) handOverReference()\n refs.setFloating(node)\n },\n [handOverReference, refs],\n )","useMemo(() => {\n if (!childProp) return null\n\n return cloneElement(childProp, {\n onBlur: handleBlur,\n onFocus: handleFocus,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n onContextMenu: handleContextMenu,\n ref: setReference,\n })\n }, [\n childProp,\n handleBlur,\n handleClick,\n handleContextMenu,\n handleFocus,\n handleMouseEnter,\n handleMouseLeave,\n setReference,\n ])","cloneElement(childProp, {\n onBlur: handleBlur,\n onFocus: handleFocus,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n onContextMenu: handleContextMenu,\n ref: setReference,\n })","<></>","<TooltipCard\n {...restProps}\n animate={animate}\n arrow={arrowProp}\n arrowRef={setArrow}\n arrowX={arrowX}\n arrowY={arrowY}\n originX={originX}\n originY={originY}\n padding={padding}\n placement={placement}\n radius={radius}\n ref={setFloating}\n scheme={scheme}\n shadow={shadow}\n >\n {content}\n </TooltipCard>","<Layer\n data-ui=\"Tooltip\"\n {...restProps}\n className={clsx(tooltipLayer, restProps.className)}\n ref={setFloating}\n style={floatingStyles}\n zOffset={zOffset}\n >\n <TooltipCard\n {...restProps}\n animate={animate}\n arrow={arrowProp}\n arrowRef={setArrow}\n arrowX={arrowX}\n arrowY={arrowY}\n originX={originX}\n originY={originY}\n padding={padding}\n placement={placement}\n radius={radius}\n ref={setFloating}\n scheme={scheme}\n shadow={shadow}\n >\n {content}\n </TooltipCard>\n </Layer>","Layer","clsx(tooltipLayer, restProps.className)","\"Tooltip\"","portalProp ? <Portal __unstable_name={portalName}>{tooltip}</Portal> : tooltip","animate ? (\n <AnimateActivity layoutMode=\"default\" mode={showTooltip ? 'visible' : 'hidden'}>\n {tooltipNode}\n </AnimateActivity>\n ) : (\n <Activity mode={showTooltip ? 'visible' : 'hidden'}>{tooltipNode}</Activity>\n )","<>\n {/* the tooltip */}\n {disabled ? null : tooltipActivity}\n\n {/* the referred element */}\n {child}\n </>","disabled ? null : tooltipActivity","{\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n portalElement,\n rootBoundary,\n}: {\n animate: boolean\n arrowProp: boolean\n arrowRef: React.RefObject<HTMLDivElement | null>\n boundaryElement: HTMLElement | null\n fallbackPlacements: Placement[]\n portalElement: HTMLElement | null\n rootBoundary: RootBoundary\n}","flip(\n withBoundary(boundaryRef, {\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\n }),\n )","offset({mainAxis: DEFAULT_TOOLTIP_DISTANCE})","shift(withBoundary(boundaryRef, {rootBoundary, padding: DEFAULT_TOOLTIP_PADDING}))","sizeMiddleware({boundaryRef, portalRef, rootBoundary})","arrow({element: arrowRef, padding: DEFAULT_TOOLTIP_PADDING})","useMemo(() => {\n const ret: Middleware[] = []\n\n // Flip the floating element when leaving the boundary box\n ret.push(\n flip(\n withBoundary(boundaryRef, {\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\n }),\n ),\n )\n\n // Define distance between reference and floating element\n ret.push(offset({mainAxis: DEFAULT_TOOLTIP_DISTANCE}))\n\n // Shift the tooltip so its sits with the boundary element\n ret.push(shift(withBoundary(boundaryRef, {rootBoundary, padding: DEFAULT_TOOLTIP_PADDING})))\n\n // Cap the tooltip width to the boundary, viewport and portal\n ret.push(sizeMiddleware({boundaryRef, portalRef, rootBoundary}))\n\n // Place arrow\n if (arrowProp) {\n ret.push(arrow({element: arrowRef, padding: DEFAULT_TOOLTIP_PADDING}))\n }\n\n // Determine the origin to scale from.\n // Must be placed after `size` and `shift` middleware.\n if (animate) {\n ret.push(origin)\n }\n\n return ret\n }, [animate, arrowProp, arrowRef, boundaryRef, fallbackPlacements, portalRef, rootBoundary])","{\n handleIsOpenChange,\n referenceRef,\n showTooltip,\n isInsideGroup,\n}: {\n handleIsOpenChange: (open: boolean, immediate?: boolean) => void\n referenceRef: ElementRef\n showTooltip: boolean\n isInsideGroup: boolean\n}","(target: EventTarget | null, teardown: () => void) => {\n const referenceElement = referenceRef.current\n\n if (!referenceElement) return\n\n const isHoveringReference =\n referenceElement === target || (target instanceof Node && referenceElement.contains(target))\n\n if (!isHoveringReference) {\n handleIsOpenChange(false)\n // Allow removing the event listener eagerly, to avoid race conditions\n teardown()\n }\n }","referenceRef.current","() => {\n if (!showTooltip || isInsideGroup) return\n\n const handleMouseMove = (event: MouseEvent) => {\n onMouseMove(event.target, () => window.removeEventListener('mousemove', handleMouseMove))\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n\n // oxlint-disable-next-line consistent-return\n return () => window.removeEventListener('mousemove', handleMouseMove)\n }","[isInsideGroup, showTooltip]","_c","childRef","_Fragment","tooltipActivity","{\n setIsGroupActive: setIsGroupActive,\n openTooltipId: openTooltipId,\n setOpenTooltipId: setOpenTooltipId,\n // When the group is active, we want the next tooltip to open immediately.\n openDelay: isGroupActive ? 1 : openDelay,\n closeDelay: closeDelay,\n }","isGroupActive ? 1 : openDelay","useMemo(\n () => ({\n setIsGroupActive: setIsGroupActive,\n openTooltipId: openTooltipId,\n setOpenTooltipId: setOpenTooltipId,\n // When the group is active, we want the next tooltip to open immediately.\n openDelay: isGroupActive ? 1 : openDelay,\n closeDelay: closeDelay,\n }),\n [closeDelay, isGroupActive, openDelay, openTooltipId, setIsGroupActive, setOpenTooltipId],\n )","<TooltipDelayGroupContext.Provider value={value}>{children}</TooltipDelayGroupContext.Provider>","TooltipDelayGroupContext.Provider","_c","\"top\"","\"bottom\"","\"left\"","\"right\""],"sources":["../src/core/hooks/useDelayedState.ts","../src/core/primitives/tooltip/constants.ts","../src/core/primitives/tooltip/tooltip.css.ts","../src/core/primitives/tooltip/tooltipCard.tsx","../src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx","../src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts","../src/core/primitives/tooltip/tooltip.tsx","../src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx"],"sourcesContent":["import {SetStateAction, useCallback, useEffect, useRef, useState} from 'react'\n\n/**\n * @beta\n */\nexport function useDelayedState<S>(\n initialState: S | (() => S),\n): [S, (nextState: SetStateAction<S>, delay?: number) => void] {\n const [state, setState] = useState(initialState)\n const delayedAction = useRef<NodeJS.Timeout | undefined>(undefined)\n\n const onStateChange = useCallback((nextState: SetStateAction<S>, delay?: number) => {\n const action = () => {\n setState(nextState)\n }\n\n // A new state change has been initiated, cancel the previous one.\n if (delayedAction.current) {\n clearTimeout(delayedAction.current)\n delayedAction.current = undefined\n }\n\n if (!delay) return action()\n delayedAction.current = setTimeout(action, delay)\n }, [])\n\n useEffect(() => {\n return () => {\n if (delayedAction.current) {\n clearTimeout(delayedAction.current)\n }\n }\n }, [])\n\n return [state, onStateChange]\n}\n","import {Placement} from '@floating-ui/react-dom'\n\nexport const DEFAULT_TOOLTIP_ARROW_WIDTH = 15\nexport const DEFAULT_TOOLTIP_ARROW_HEIGHT = 6\nexport const DEFAULT_TOOLTIP_ARROW_RADIUS = 2\n\nexport const DEFAULT_TOOLTIP_DISTANCE = 4\nexport const DEFAULT_TOOLTIP_PADDING = 4\n\nexport const DEFAULT_FALLBACK_PLACEMENTS: Record<Placement, Placement[]> = {\n 'top': ['top-end', 'top-start', 'bottom', 'left', 'right'],\n 'top-start': ['top', 'top-end', 'bottom-start', 'left-start', 'right-start'],\n 'top-end': ['top', 'top-start', 'bottom-end', 'left-end', 'right-end'],\n 'bottom': ['bottom-end', 'bottom-start', 'top', 'left', 'right'],\n 'bottom-start': ['bottom', 'bottom-end', 'top-start', 'left-start', 'right-start'],\n 'bottom-end': ['bottom', 'bottom-start', 'top-end', 'left-end', 'right-end'],\n 'left': ['left-end', 'left-start', 'right', 'top', 'bottom'],\n 'left-start': ['left', 'left-end', 'right-start', 'top-start', 'bottom-start'],\n 'left-end': ['left', 'left-start', 'right-end', 'top-end', 'bottom-end'],\n 'right': ['right-end', 'right-start', 'left', 'top', 'bottom'],\n 'right-start': ['right', 'right-end', 'left-start', 'top-start', 'bottom-start'],\n 'right-end': ['right', 'right-start', 'left-end', 'top-end', 'bottom-end'],\n}\n","import {style} from '@vanilla-extract/css'\n\nexport const tooltipLayer = style({\n pointerEvents: 'none',\n})\n\nexport const tooltipCard = style({\n willChange: 'transform',\n})\n","import {clsx} from 'clsx/lite'\nimport {motion} from 'motion/react'\nimport React, {CSSProperties, useMemo} from 'react'\n\nimport {ThemeColorSchemeKey} from '../../../theme/system/color/_system'\nimport {POPOVER_MOTION_PROPS} from '../../constants'\nimport {getTransformOrigin} from '../../middleware/origin'\nimport {Placement} from '../../types/placement'\nimport {Radius} from '../../types/radius'\nimport {Arrow} from '../../utils/arrow/arrow'\nimport {Card} from '../card/card'\nimport {\n DEFAULT_TOOLTIP_ARROW_HEIGHT,\n DEFAULT_TOOLTIP_ARROW_RADIUS,\n DEFAULT_TOOLTIP_ARROW_WIDTH,\n} from './constants'\n\nimport {tooltipCard} from './tooltip.css'\n\nconst MotionCard = motion.create(Card)\n\n/**\n * @internal\n */\nexport function TooltipCard(\n props: {\n animate?: boolean\n arrow: boolean\n arrowRef: React.Ref<HTMLDivElement>\n arrowX?: number\n arrowY?: number\n originX?: number\n originY?: number\n padding?: number | number[]\n placement?: Placement\n radius?: Radius | Radius[]\n scheme?: ThemeColorSchemeKey\n shadow?: number | number[]\n } & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'width'>,\n) {\n const {\n animate,\n arrow,\n arrowRef,\n arrowX,\n arrowY,\n children,\n className,\n originX,\n originY,\n padding,\n placement,\n radius,\n ref,\n scheme,\n shadow,\n style,\n ...restProps\n } = props\n\n const rootStyle: CSSProperties = useMemo(\n () => ({\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }),\n [animate, originX, originY, style],\n )\n\n const arrowStyle: CSSProperties = useMemo(\n () => ({\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }),\n [arrowX, arrowY],\n )\n\n return (\n <MotionCard\n className={clsx(tooltipCard, className)}\n data-ui=\"Tooltip__card\"\n {...restProps}\n data-placement={placement}\n padding={padding}\n radius={radius}\n ref={ref}\n scheme={scheme}\n shadow={shadow}\n style={rootStyle}\n {...(animate ? POPOVER_MOTION_PROPS : undefined)}\n >\n {children}\n\n {arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )}\n </MotionCard>\n )\n}\n","import {createGlobalScopedContext} from '../../../lib/createGlobalScopedContext'\nimport {TooltipDelayGroupContextValue} from './types'\n\n/**\n * @beta\n */\nexport const TooltipDelayGroupContext =\n createGlobalScopedContext<TooltipDelayGroupContextValue | null>(\n '@sanity/ui/context/tooltipDelayGroup',\n null,\n )\n","import {useContext} from 'react'\n\nimport {TooltipDelayGroupContext} from './tooltipDelayGroupContext'\nimport {TooltipDelayGroupContextValue} from './types'\n\n/**\n * @beta\n */\nexport function useTooltipDelayGroup(): TooltipDelayGroupContextValue | null {\n const value = useContext(TooltipDelayGroupContext)\n\n return value\n}\n","import {\n arrow,\n autoUpdate,\n detectOverflow,\n flip,\n type Middleware,\n offset,\n type RootBoundary,\n shift,\n size,\n useFloating,\n} from '@floating-ui/react-dom'\nimport {clsx} from 'clsx/lite'\nimport {\n Activity,\n cloneElement,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react'\n// TODO: switch to `useEffectEvent` from `react` once\n// https://github.com/facebook/react/issues/34818 is fixed in the lowest React\n// version we support: on React 19.2 the native hook never sees values past\n// the first render when the calling component is wrapped in `forwardRef` or\n// `memo`, and consumers may wrap `Tooltip` in `memo`.\nimport {useEffectEvent} from 'use-effect-event'\n\nimport type {ThemeColorSchemeKey} from '../../../theme/system/color/_system'\nimport {useDelayedState} from '../../hooks/useDelayedState'\nimport {useLatestRef} from '../../hooks/useLatestRef'\nimport {usePrefersReducedMotion} from '../../hooks/usePrefersReducedMotion'\nimport {useReferenceElement} from '../../hooks/useReferenceElement'\nimport {origin} from '../../middleware/origin'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {useTheme_v2} from '../../theme/useTheme'\nimport type {Placement} from '../../types/placement'\nimport {AnimateActivity} from '../../utils/animateActivity'\nimport {useBoundaryElement} from '../../utils/boundaryElement/useBoundaryElement'\nimport {getElementRef} from '../../utils/getElementRef'\nimport {Layer, type LayerProps} from '../../utils/layer/layer'\nimport {Portal} from '../../utils/portal/portal'\nimport {resolvePortalElement} from '../../utils/portal/resolvePortalElement'\nimport {usePortal} from '../../utils/portal/usePortal'\nimport type {Delay} from '../types'\nimport {\n DEFAULT_FALLBACK_PLACEMENTS,\n DEFAULT_TOOLTIP_DISTANCE,\n DEFAULT_TOOLTIP_PADDING,\n} from './constants'\nimport {TooltipCard} from './tooltipCard'\nimport {useTooltipDelayGroup} from './tooltipDelayGroup/useTooltipDelayGroup'\n\nimport {tooltipLayer} from './tooltip.css'\n\n/**\n * @public\n */\nexport interface TooltipProps extends Omit<LayerProps, 'as'> {\n /** @deprecated Use `fallbackPlacements` instead. */\n allowedAutoPlacements?: never\n arrow?: boolean\n boundaryElement?: HTMLElement | null\n children?: React.JSX.Element\n content?: React.ReactNode\n disabled?: boolean\n fallbackPlacements?: Placement[]\n padding?: number | number[]\n placement?: Placement\n /** Whether or not to render the tooltip in a portal element. */\n portal?: boolean | string\n radius?: number | number[]\n scheme?: ThemeColorSchemeKey\n shadow?: number | number[]\n /**\n * Adds a delay to open or close the tooltip.\n *\n * If only a `number` is passed, it will be used for both opening and closing.\n *\n * If an object `{open: number; close:number}` is passed, it can be used to set different delays for each action.\n *\n * @public\n * @defaultValue 0\n */\n delay?: Delay\n /**\n * Whether the tooltip should animate in and out.\n *\n * @beta\n * @defaultValue false\n */\n animate?: boolean\n}\n\n/**\n * Tooltips display information when hovering, focusing or tapping.\n *\n * @public\n */\nexport function Tooltip(\n props: TooltipProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'children' | 'content'>,\n) {\n const boundaryElementContext = useBoundaryElement()\n const {layer} = useTheme_v2()\n const {\n animate: _animate = false,\n arrow: arrowProp = false,\n boundaryElement: _boundaryElement,\n children: childProp,\n content,\n disabled,\n fallbackPlacements: _fallbackPlacementsProp,\n padding = 2,\n placement: placementProp = 'bottom',\n portal: portalProp,\n radius = 2,\n ref: forwardedRef,\n scheme,\n shadow = 2,\n zOffset: _zOffset,\n delay,\n ...restProps\n } = props\n const boundaryElement = _boundaryElement ?? boundaryElementContext?.element\n const fallbackPlacementsProp =\n _fallbackPlacementsProp ?? DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? 'bottom']\n const zOffset = _zOffset ?? layer.tooltip.zOffset\n const prefersReducedMotion = usePrefersReducedMotion()\n const animate = prefersReducedMotion ? false : _animate\n const fallbackPlacements = _getArrayProp(fallbackPlacementsProp)\n const ref = useRef<HTMLDivElement | null>(null)\n const arrowRef = useRef<HTMLDivElement | null>(null)\n const rootBoundary: RootBoundary = 'viewport'\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n const portal = usePortal()\n const portalName = typeof portalProp === 'string' ? portalProp : undefined\n // Resolved the way `Portal` resolves it (a missing named portal falls back to the default one),\n // so the width cap applies to the element the tooltip actually renders into\n const portalElement = resolvePortalElement(portal, portalName)\n\n const middleware = useMiddleware({\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n portalElement,\n rootBoundary,\n })\n\n const {floatingStyles, placement, middlewareData, refs, update} = useFloating({\n middleware,\n placement: placementProp,\n whileElementsMounted: autoUpdate,\n })\n\n const childRef = childProp ? getElementRef<HTMLElement>(childProp) : undefined\n const {handOverReference, referenceRef, setReference} = useReferenceElement(refs, childRef)\n\n // The middleware reads the boundary and portal elements through refs (see `useMiddleware`), so\n // a change of either does not reach Floating UI by itself: reposition a shown tooltip against\n // the new element here, without tearing `autoUpdate` down. `update` is a no-op while the tooltip\n // is closed, as there is no floating element then. The body references the elements so that\n // the dependencies the React Compiler and the linter infer from it are the authored ones; with\n // neither element there is no tooltip DOM to reposition (`Portal` renders nothing).\n const reposition = useEffectEvent(() => update())\n\n useLayoutEffect(() => {\n if (boundaryElement || portalElement) reposition()\n }, [boundaryElement, portalElement])\n\n const arrowX = middlewareData.arrow?.x\n const arrowY = middlewareData.arrow?.y\n\n const originX = middlewareData['@sanity/ui/origin']?.originX\n const originY = middlewareData['@sanity/ui/origin']?.originY\n\n const tooltipId = useId()\n const [isOpen, setIsOpen] = useDelayedState(false)\n const delayGroupContext = useTooltipDelayGroup()\n const {setIsGroupActive, setOpenTooltipId} = delayGroupContext || {}\n // Derived, not synced: `disabled` and an empty `content` suppress the tooltip in the same render\n // that changes them, instead of an effect closing it one commit later. The hover state\n // (`isOpen`, or the group pointing at this tooltip) is kept as it is, so a tooltip that is\n // re-enabled or given content while its child is still hovered shows right away.\n const suppressed = disabled || !content\n const showTooltip = !suppressed && (isOpen || delayGroupContext?.openTooltipId === tooltipId)\n\n const isInsideGroup = delayGroupContext !== null\n const openDelayProp = typeof delay === 'number' ? delay : delay?.open || 0\n const closeDelayProp = typeof delay === 'number' ? delay : delay?.close || 0\n\n const openDelay = isInsideGroup ? delayGroupContext.openDelay : openDelayProp\n const closeDelay = isInsideGroup ? delayGroupContext.closeDelay : closeDelayProp\n\n const handleIsOpenChange = useCallback(\n (open: boolean, immediate?: boolean) => {\n if (isInsideGroup) {\n // When it's inside a group, the open or close status will be handled by the group.\n if (open) {\n const groupedOpenDelay = immediate ? 0 : openDelay\n\n setIsGroupActive?.(open, groupedOpenDelay)\n setOpenTooltipId?.(tooltipId, groupedOpenDelay)\n } else {\n const minimumGroupDeactivateDelay = 200 // We should provide some delay to allow the user to reach the next tooltip.\n const groupDeactivateDelay =\n closeDelay > minimumGroupDeactivateDelay ? closeDelay : minimumGroupDeactivateDelay\n\n setIsGroupActive?.(open, groupDeactivateDelay)\n setOpenTooltipId?.(null, immediate ? 0 : closeDelay)\n }\n } else {\n const standaloneDelay = immediate ? 0 : open ? openDelay : closeDelay\n\n // When it's not inside a group, the open or close status will be handled by the tooltip itself.\n setIsOpen(open, standaloneDelay)\n }\n },\n [\n isInsideGroup,\n openDelay,\n setIsGroupActive,\n setOpenTooltipId,\n tooltipId,\n closeDelay,\n setIsOpen,\n ],\n )\n\n // `isOpen` is delayed visibility, not the current hover state: after the pointer or focus\n // leaves, it stays true for the close delay. While the tooltip is suppressed it must not linger\n // like that, or re-enabling it (or giving it content) before the delay has elapsed would show it\n // under a pointer that has already left. Leaving a suppressed tooltip closes it immediately.\n const handleBlur = useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onBlur?.(e)\n },\n [childProp?.props, handleIsOpenChange, suppressed],\n )\n const handleClick = useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onClick?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )\n const handleContextMenu = useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onContextMenu?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )\n const handleFocus = useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onFocus?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )\n const handleMouseEnter = useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onMouseEnter?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )\n const handleMouseLeave = useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onMouseLeave?.(e)\n },\n [childProp?.props, handleIsOpenChange, suppressed],\n )\n\n // Handle closing the tooltip when the mouse leaves the referenceElement\n useCloseOnMouseLeave({handleIsOpenChange, referenceRef, showTooltip, isInsideGroup})\n\n const onWindowEscape = useEffectEvent(() => handleIsOpenChange(false, true))\n\n useEffect(() => {\n // If the user clicks on escape key, close the tooltip.\n if (!showTooltip) return\n\n function handleWindowKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n onWindowEscape()\n }\n }\n\n window.addEventListener('keydown', handleWindowKeyDown)\n\n // oxlint-disable-next-line consistent-return\n return () => {\n window.removeEventListener('keydown', handleWindowKeyDown)\n }\n }, [showTooltip])\n\n const setArrow = useCallback(\n (arrowEl: HTMLDivElement | null) => {\n arrowRef.current = arrowEl\n update()\n },\n [update],\n )\n\n const setFloating = useCallback(\n (node: HTMLDivElement | null) => {\n ref.current = node\n if (node) handOverReference()\n refs.setFloating(node)\n },\n [handOverReference, refs],\n )\n\n const child = useMemo(() => {\n if (!childProp) return null\n\n return cloneElement(childProp, {\n onBlur: handleBlur,\n onFocus: handleFocus,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n onContextMenu: handleContextMenu,\n ref: setReference,\n })\n }, [\n childProp,\n handleBlur,\n handleClick,\n handleContextMenu,\n handleFocus,\n handleMouseEnter,\n handleMouseLeave,\n setReference,\n ])\n\n if (!child) return <></>\n\n const tooltip = (\n <Layer\n data-ui=\"Tooltip\"\n {...restProps}\n className={clsx(tooltipLayer, restProps.className)}\n ref={setFloating}\n style={floatingStyles}\n zOffset={zOffset}\n >\n <TooltipCard\n {...restProps}\n animate={animate}\n arrow={arrowProp}\n arrowRef={setArrow}\n arrowX={arrowX}\n arrowY={arrowY}\n originX={originX}\n originY={originY}\n padding={padding}\n placement={placement}\n radius={radius}\n ref={setFloating}\n scheme={scheme}\n shadow={shadow}\n >\n {content}\n </TooltipCard>\n </Layer>\n )\n\n const tooltipNode = portalProp ? <Portal __unstable_name={portalName}>{tooltip}</Portal> : tooltip\n\n const tooltipActivity = animate ? (\n <AnimateActivity layoutMode=\"default\" mode={showTooltip ? 'visible' : 'hidden'}>\n {tooltipNode}\n </AnimateActivity>\n ) : (\n <Activity mode={showTooltip ? 'visible' : 'hidden'}>{tooltipNode}</Activity>\n )\n\n // The fragment has the same shape whether or not the tooltip is disabled, so the referred\n // element keeps its fiber (DOM node, state, focus) when `disabled` toggles. Returning the bare\n // child while disabled would change the tree shape and remount it. While disabled the tooltip\n // slot is left empty: no hidden tooltip DOM is rendered.\n return (\n <>\n {/* the tooltip */}\n {disabled ? null : tooltipActivity}\n\n {/* the referred element */}\n {child}\n </>\n )\n}\n\ntype ElementRef = React.RefObject<HTMLElement | null>\n\n/**\n * Derivable middleware options that read the boundary element from a ref. Floating UI evaluates\n * them inside `computePosition`, which is when the ref is read — never during render.\n *\n * Built at module scope, like `sizeMiddleware` below: a `ref.current` read inside a callback\n * created during render makes the React Compiler skip the calling function, since it cannot tell\n * when the callback runs.\n */\nfunction withBoundary<Options extends object>(\n boundaryRef: ElementRef,\n options: Options,\n): () => Options & {boundary: HTMLElement | undefined} {\n return () => ({...options, boundary: boundaryRef.current || undefined})\n}\n\n/**\n * Caps the tooltip width to the room it is positioned in: the boundary element (or the clipping\n * ancestors when there is none), always within the viewport, and the portal element's width.\n * Floating UI measures inside its own positioning pass — only while the tooltip is shown, never\n * during render or on mount — and the width is written straight to the element, so no state or\n * layout effect is involved. Placed after `shift` so `availableWidth` is the full clipping width\n * for top and bottom placements; for left and right placements it is the room on that side.\n */\nfunction sizeMiddleware({\n boundaryRef,\n portalRef,\n rootBoundary,\n}: {\n boundaryRef: ElementRef\n portalRef: ElementRef\n rootBoundary: RootBoundary\n}): Middleware {\n return size(() => ({\n boundary: boundaryRef.current || undefined,\n rootBoundary,\n padding: DEFAULT_TOOLTIP_PADDING,\n async apply(state) {\n const {availableWidth, elements} = state\n const portalElement = portalRef.current\n let maxWidth = availableWidth\n\n // A tooltip rendered in a portal is capped to the portal's width as well, which may be\n // narrower than the boundary (see the CustomPortal story). The portal is measured on its\n // own rather than as part of `boundary`: an element array is the intersection of the rects,\n // and the portal need not overlap the boundary at all. A portal without a width — an empty\n // mount point — imposes no cap, as before.\n if (portalElement) {\n const overflow = await detectOverflow(state, {\n boundary: portalElement,\n rootBoundary,\n padding: DEFAULT_TOOLTIP_PADDING,\n })\n // The portal's clipping width minus the padding on both sides, wherever the tooltip is\n const portalWidth = state.rects.floating.width - overflow.left - overflow.right\n\n if (portalWidth > 0) maxWidth = Math.min(maxWidth, portalWidth)\n }\n\n // No room on the chosen side gives a negative width: the cap is clamped to zero rather than\n // removed, so the tooltip never grows across the boundary.\n elements.floating.style.maxWidth = `${Math.max(0, maxWidth)}px`\n },\n }))\n}\n\nfunction useMiddleware({\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n portalElement,\n rootBoundary,\n}: {\n animate: boolean\n arrowProp: boolean\n arrowRef: React.RefObject<HTMLDivElement | null>\n boundaryElement: HTMLElement | null\n fallbackPlacements: Placement[]\n portalElement: HTMLElement | null\n rootBoundary: RootBoundary\n}) {\n // The elements are read through refs when Floating UI runs the middleware — inside\n // `computePosition`, never during render — so the middleware array keeps its identity when an\n // element changes, and with it Floating UI's `update` callback and `autoUpdate` subscription.\n // Passing the elements as option values would make `useFloating` deep-compare them on every\n // render (it has no DOM element case: two elements are equal unless their own enumerable\n // properties differ, which for React-rendered elements means walking their fibers), and an\n // element captured by a closure such as `apply` would never be noticed at all, since functions\n // are compared by source. The component repositions a shown tooltip itself when an element\n // changes (see `useLayoutEffect` in `Tooltip`).\n const boundaryRef = useLatestRef(boundaryElement)\n const portalRef = useLatestRef(portalElement)\n\n return useMemo(() => {\n const ret: Middleware[] = []\n\n // Flip the floating element when leaving the boundary box\n ret.push(\n flip(\n withBoundary(boundaryRef, {\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\n }),\n ),\n )\n\n // Define distance between reference and floating element\n ret.push(offset({mainAxis: DEFAULT_TOOLTIP_DISTANCE}))\n\n // Shift the tooltip so its sits with the boundary element\n ret.push(shift(withBoundary(boundaryRef, {rootBoundary, padding: DEFAULT_TOOLTIP_PADDING})))\n\n // Cap the tooltip width to the boundary, viewport and portal\n ret.push(sizeMiddleware({boundaryRef, portalRef, rootBoundary}))\n\n // Place arrow\n if (arrowProp) {\n ret.push(arrow({element: arrowRef, padding: DEFAULT_TOOLTIP_PADDING}))\n }\n\n // Determine the origin to scale from.\n // Must be placed after `size` and `shift` middleware.\n if (animate) {\n ret.push(origin)\n }\n\n return ret\n }, [animate, arrowProp, arrowRef, boundaryRef, fallbackPlacements, portalRef, rootBoundary])\n}\n\n/**\n * As `useEffectEvent` should never be passed to other components or hooks, this custom hook groups together the `useEffectEvent` and the `useEffect` hook using it.\n * @see https://19.react.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events:~:text=Never%20pass%20them%20to%20other%20components%20or%20Hooks\n */\nfunction useCloseOnMouseLeave({\n handleIsOpenChange,\n referenceRef,\n showTooltip,\n isInsideGroup,\n}: {\n handleIsOpenChange: (open: boolean, immediate?: boolean) => void\n referenceRef: ElementRef\n showTooltip: boolean\n isInsideGroup: boolean\n}) {\n // An \"effect event\" (https://19.react.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events),\n // so that the `mousemove` listener below is not detached and attached again whenever\n // `handleIsOpenChange` changes; the referred element is read from its ref when the pointer moves.\n const onMouseMove = useEffectEvent((target: EventTarget | null, teardown: () => void) => {\n const referenceElement = referenceRef.current\n\n if (!referenceElement) return\n\n const isHoveringReference =\n referenceElement === target || (target instanceof Node && referenceElement.contains(target))\n\n if (!isHoveringReference) {\n handleIsOpenChange(false)\n // Allow removing the event listener eagerly, to avoid race conditions\n teardown()\n }\n })\n\n // Detect whether the mouse is moving outside of the reference element. This is sometimes\n // necessary, because the tooltip might not always close as it should (e.g. when clicking\n // the reference element triggers a CPU-heavy operation.)\n useEffect(() => {\n if (!showTooltip || isInsideGroup) return\n\n const handleMouseMove = (event: MouseEvent) => {\n onMouseMove(event.target, () => window.removeEventListener('mousemove', handleMouseMove))\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n\n // oxlint-disable-next-line consistent-return\n return () => window.removeEventListener('mousemove', handleMouseMove)\n }, [isInsideGroup, showTooltip])\n}\n","import {useMemo} from 'react'\n\nimport {useDelayedState} from '../../../hooks/useDelayedState'\nimport {Delay} from '../../types'\nimport {TooltipDelayGroupContext} from './tooltipDelayGroupContext'\nimport {TooltipDelayGroupContextValue} from './types'\n\n/**\n * @public\n * */\nexport interface TooltipDelayGroupProviderProps {\n children?: React.ReactNode\n /**\n * Handles the delays to open or close a tooltip inside a group\n *\n * If only a `number` is passed, it will be used for both opening and closing.\n *\n * If an object `{open: number; close:number}` is passed, it can be used to set different delays for each action.\n *\n * @public\n */\n delay: Delay\n}\n\n/**\n * @public\n * Provides context for a group of tooltip elements that should share a delay\n * which temporarily becomes 1 ms after the first floating element of the group opens.\n */\nexport function TooltipDelayGroupProvider(\n props: TooltipDelayGroupProviderProps,\n): React.JSX.Element {\n const {children, delay} = props\n const [isGroupActive, setIsGroupActive] = useDelayedState(false)\n const [openTooltipId, setOpenTooltipId] = useDelayedState<string | null>(null)\n\n const openDelay = typeof delay === 'number' ? delay : delay?.open || 0\n const closeDelay = typeof delay === 'number' ? delay : delay?.close || 0\n\n const value: TooltipDelayGroupContextValue = useMemo(\n () => ({\n setIsGroupActive: setIsGroupActive,\n openTooltipId: openTooltipId,\n setOpenTooltipId: setOpenTooltipId,\n // When the group is active, we want the next tooltip to open immediately.\n openDelay: isGroupActive ? 1 : openDelay,\n closeDelay: closeDelay,\n }),\n [closeDelay, isGroupActive, openDelay, openTooltipId, setIsGroupActive, setOpenTooltipId],\n )\n\n return (\n <TooltipDelayGroupContext.Provider value={value}>{children}</TooltipDelayGroupContext.Provider>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tooltip.js","names":["(nextState: SetStateAction<S>, delay?: number) => {\n const action = () => {\n setState(nextState)\n }\n\n // A new state change has been initiated, cancel the previous one.\n if (delayedAction.current) {\n clearTimeout(delayedAction.current)\n delayedAction.current = undefined\n }\n\n if (!delay) return action()\n delayedAction.current = setTimeout(action, delay)\n }","useCallback((nextState: SetStateAction<S>, delay?: number) => {\n const action = () => {\n setState(nextState)\n }\n\n // A new state change has been initiated, cancel the previous one.\n if (delayedAction.current) {\n clearTimeout(delayedAction.current)\n delayedAction.current = undefined\n }\n\n if (!delay) return action()\n delayedAction.current = setTimeout(action, delay)\n }, [])","() => {\n return () => {\n if (delayedAction.current) {\n clearTimeout(delayedAction.current)\n }\n }\n }","[]","[state, onStateChange]","_c","getTransformOrigin(originX, originY)","{\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }","animate ? 'transform' : undefined","useMemo(\n () => ({\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }),\n [animate, originX, originY, style],\n )","{\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }","arrowX !== null ? arrowX : undefined","arrowY !== null ? arrowY : undefined","useMemo(\n () => ({\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }),\n [arrowX, arrowY],\n )","clsx(tooltipCard, className)","arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )","<MotionCard\n className={clsx(tooltipCard, className)}\n data-ui=\"Tooltip__card\"\n {...restProps}\n data-placement={placement}\n padding={padding}\n radius={radius}\n ref={ref}\n scheme={scheme}\n shadow={shadow}\n style={rootStyle}\n {...(animate ? POPOVER_MOTION_PROPS : undefined)}\n >\n {children}\n\n {arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )}\n </MotionCard>","animate ? POPOVER_MOTION_PROPS : undefined","_c","_animate = false","arrowProp = false","placementProp = 'bottom'","padding = 2","radius = 2","shadow = 2","_getArrayProp(fallbackPlacementsProp)","() => ref.current","resolvePortalElement(portal, portalName)","{\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n portalElement,\n rootBoundary,\n }","{\n middleware,\n placement: placementProp,\n whileElementsMounted: autoUpdate,\n }","childProp ? getElementRef<HTMLElement>(childProp) : undefined","() => update()","() => {\n if (boundaryElement || portalElement) reposition()\n }","[boundaryElement, portalElement]","delayGroupContext || {}","(open: boolean, immediate?: boolean) => {\n if (isInsideGroup) {\n // When it's inside a group, the open or close status will be handled by the group.\n if (open) {\n const groupedOpenDelay = immediate ? 0 : openDelay\n\n setIsGroupActive?.(open, groupedOpenDelay)\n setOpenTooltipId?.(tooltipId, groupedOpenDelay)\n } else {\n const minimumGroupDeactivateDelay = 200 // We should provide some delay to allow the user to reach the next tooltip.\n const groupDeactivateDelay =\n closeDelay > minimumGroupDeactivateDelay ? closeDelay : minimumGroupDeactivateDelay\n\n setIsGroupActive?.(open, groupDeactivateDelay)\n setOpenTooltipId?.(null, immediate ? 0 : closeDelay)\n }\n } else {\n const standaloneDelay = immediate ? 0 : open ? openDelay : closeDelay\n\n // When it's not inside a group, the open or close status will be handled by the tooltip itself.\n setIsOpen(open, standaloneDelay)\n }\n }","useCallback(\n (open: boolean, immediate?: boolean) => {\n if (isInsideGroup) {\n // When it's inside a group, the open or close status will be handled by the group.\n if (open) {\n const groupedOpenDelay = immediate ? 0 : openDelay\n\n setIsGroupActive?.(open, groupedOpenDelay)\n setOpenTooltipId?.(tooltipId, groupedOpenDelay)\n } else {\n const minimumGroupDeactivateDelay = 200 // We should provide some delay to allow the user to reach the next tooltip.\n const groupDeactivateDelay =\n closeDelay > minimumGroupDeactivateDelay ? closeDelay : minimumGroupDeactivateDelay\n\n setIsGroupActive?.(open, groupDeactivateDelay)\n setOpenTooltipId?.(null, immediate ? 0 : closeDelay)\n }\n } else {\n const standaloneDelay = immediate ? 0 : open ? openDelay : closeDelay\n\n // When it's not inside a group, the open or close status will be handled by the tooltip itself.\n setIsOpen(open, standaloneDelay)\n }\n },\n [\n isInsideGroup,\n openDelay,\n setIsGroupActive,\n setOpenTooltipId,\n tooltipId,\n closeDelay,\n setIsOpen,\n ],\n )","(e: FocusEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onBlur?.(e)\n }","props","useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onBlur?.(e)\n },\n [childProp?.props, handleIsOpenChange, suppressed],\n )","(e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onClick?.(e)\n }","e","useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onClick?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )","(e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onContextMenu?.(e)\n }","useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onContextMenu?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )","(e: FocusEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onFocus?.(e)\n }","useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onFocus?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )","(e: MouseEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onMouseEnter?.(e)\n }","useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onMouseEnter?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )","(e: MouseEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onMouseLeave?.(e)\n }","useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onMouseLeave?.(e)\n },\n [childProp?.props, handleIsOpenChange, suppressed],\n )","{handleIsOpenChange, referenceRef, showTooltip, isInsideGroup}","() => handleIsOpenChange(false, true)","() => {\n // If the user clicks on escape key, close the tooltip.\n if (!showTooltip) return\n\n function handleWindowKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n onWindowEscape()\n }\n }\n\n window.addEventListener('keydown', handleWindowKeyDown)\n\n // oxlint-disable-next-line consistent-return\n return () => {\n window.removeEventListener('keydown', handleWindowKeyDown)\n }\n }","[showTooltip]","(arrowEl: HTMLDivElement | null) => {\n arrowRef.current = arrowEl\n update()\n }","useCallback(\n (arrowEl: HTMLDivElement | null) => {\n arrowRef.current = arrowEl\n update()\n },\n [update],\n )","(node: HTMLDivElement | null) => {\n ref.current = node\n if (node) handOverReference()\n refs.setFloating(node)\n }","useCallback(\n (node: HTMLDivElement | null) => {\n ref.current = node\n if (node) handOverReference()\n refs.setFloating(node)\n },\n [handOverReference, refs],\n )","useMemo(() => {\n if (!childProp) return null\n\n return cloneElement(childProp, {\n onBlur: handleBlur,\n onFocus: handleFocus,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n onContextMenu: handleContextMenu,\n ref: setReference,\n })\n }, [\n childProp,\n handleBlur,\n handleClick,\n handleContextMenu,\n handleFocus,\n handleMouseEnter,\n handleMouseLeave,\n setReference,\n ])","cloneElement(childProp, {\n onBlur: handleBlur,\n onFocus: handleFocus,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n onContextMenu: handleContextMenu,\n ref: setReference,\n })","<></>","<TooltipCard\n {...restProps}\n animate={animate}\n arrow={arrowProp}\n arrowRef={setArrow}\n arrowX={arrowX}\n arrowY={arrowY}\n originX={originX}\n originY={originY}\n padding={padding}\n placement={placement}\n radius={radius}\n ref={setFloating}\n scheme={scheme}\n shadow={shadow}\n >\n {content}\n </TooltipCard>","<Layer\n data-ui=\"Tooltip\"\n {...restProps}\n className={clsx(tooltipLayer, restProps.className)}\n ref={setFloating}\n style={floatingStyles}\n zOffset={zOffset}\n >\n <TooltipCard\n {...restProps}\n animate={animate}\n arrow={arrowProp}\n arrowRef={setArrow}\n arrowX={arrowX}\n arrowY={arrowY}\n originX={originX}\n originY={originY}\n padding={padding}\n placement={placement}\n radius={radius}\n ref={setFloating}\n scheme={scheme}\n shadow={shadow}\n >\n {content}\n </TooltipCard>\n </Layer>","Layer","clsx(tooltipLayer, restProps.className)","\"Tooltip\"","portalProp ? <Portal __unstable_name={portalName}>{tooltip}</Portal> : tooltip","animate ? (\n <AnimateActivity layoutMode=\"default\" mode={showTooltip ? 'visible' : 'hidden'}>\n {tooltipNode}\n </AnimateActivity>\n ) : (\n <Activity mode={showTooltip ? 'visible' : 'hidden'}>{tooltipNode}</Activity>\n )","<>\n {/* the tooltip */}\n {disabled ? null : tooltipActivity}\n\n {/* the referred element */}\n {child}\n </>","disabled ? null : tooltipActivity","{\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n portalElement,\n rootBoundary,\n}: {\n animate: boolean\n arrowProp: boolean\n arrowRef: React.RefObject<HTMLDivElement | null>\n boundaryElement: HTMLElement | null\n fallbackPlacements: Placement[]\n portalElement: HTMLElement | null\n rootBoundary: RootBoundary\n}","flip(\n withBoundary(boundaryRef, {\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\n }),\n )","offset({mainAxis: DEFAULT_TOOLTIP_DISTANCE})","shift(withBoundary(boundaryRef, {rootBoundary, padding: DEFAULT_TOOLTIP_PADDING}))","sizeMiddleware({boundaryRef, portalRef, rootBoundary})","arrow({element: arrowRef, padding: DEFAULT_TOOLTIP_PADDING})","useMemo(() => {\n const ret: Middleware[] = []\n\n // Flip the floating element when leaving the boundary box\n ret.push(\n flip(\n withBoundary(boundaryRef, {\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\n }),\n ),\n )\n\n // Define distance between reference and floating element\n ret.push(offset({mainAxis: DEFAULT_TOOLTIP_DISTANCE}))\n\n // Shift the tooltip so its sits with the boundary element\n ret.push(shift(withBoundary(boundaryRef, {rootBoundary, padding: DEFAULT_TOOLTIP_PADDING})))\n\n // Cap the tooltip width to the boundary, viewport and portal\n ret.push(sizeMiddleware({boundaryRef, portalRef, rootBoundary}))\n\n // Place arrow\n if (arrowProp) {\n ret.push(arrow({element: arrowRef, padding: DEFAULT_TOOLTIP_PADDING}))\n }\n\n // Determine the origin to scale from.\n // Must be placed after `size` and `shift` middleware.\n if (animate) {\n ret.push(origin)\n }\n\n return ret\n }, [animate, arrowProp, arrowRef, boundaryRef, fallbackPlacements, portalRef, rootBoundary])","{\n handleIsOpenChange,\n referenceRef,\n showTooltip,\n isInsideGroup,\n}: {\n handleIsOpenChange: (open: boolean, immediate?: boolean) => void\n referenceRef: ElementRef\n showTooltip: boolean\n isInsideGroup: boolean\n}","(target: EventTarget | null, teardown: () => void) => {\n const referenceElement = referenceRef.current\n\n if (!referenceElement) return\n\n const isHoveringReference =\n referenceElement === target || (target instanceof Node && referenceElement.contains(target))\n\n if (!isHoveringReference) {\n handleIsOpenChange(false)\n // Allow removing the event listener eagerly, to avoid race conditions\n teardown()\n }\n }","referenceRef.current","() => {\n if (!showTooltip || isInsideGroup) return\n\n const handleMouseMove = (event: MouseEvent) => {\n onMouseMove(event.target, () => window.removeEventListener('mousemove', handleMouseMove))\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n\n // oxlint-disable-next-line consistent-return\n return () => window.removeEventListener('mousemove', handleMouseMove)\n }","[isInsideGroup, showTooltip]","_c","childRef","_Fragment","tooltipActivity","{\n setIsGroupActive: setIsGroupActive,\n openTooltipId: openTooltipId,\n setOpenTooltipId: setOpenTooltipId,\n // When the group is active, we want the next tooltip to open immediately.\n openDelay: isGroupActive ? 1 : openDelay,\n closeDelay: closeDelay,\n }","isGroupActive ? 1 : openDelay","useMemo(\n () => ({\n setIsGroupActive: setIsGroupActive,\n openTooltipId: openTooltipId,\n setOpenTooltipId: setOpenTooltipId,\n // When the group is active, we want the next tooltip to open immediately.\n openDelay: isGroupActive ? 1 : openDelay,\n closeDelay: closeDelay,\n }),\n [closeDelay, isGroupActive, openDelay, openTooltipId, setIsGroupActive, setOpenTooltipId],\n )","<TooltipDelayGroupContext.Provider value={value}>{children}</TooltipDelayGroupContext.Provider>","TooltipDelayGroupContext.Provider","_c","\"top\"","\"bottom\"","\"left\"","\"right\""],"sources":["../src/core/hooks/useDelayedState.ts","../src/core/primitives/tooltip/constants.ts","../src/core/primitives/tooltip/tooltip.css.ts","../src/core/primitives/tooltip/tooltipCard.tsx","../src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx","../src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts","../src/core/primitives/tooltip/tooltip.tsx","../src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx"],"sourcesContent":["import {SetStateAction, useCallback, useEffect, useRef, useState} from 'react'\n\n/**\n * @beta\n */\nexport function useDelayedState<S>(\n initialState: S | (() => S),\n): [S, (nextState: SetStateAction<S>, delay?: number) => void] {\n const [state, setState] = useState(initialState)\n const delayedAction = useRef<NodeJS.Timeout | undefined>(undefined)\n\n const onStateChange = useCallback((nextState: SetStateAction<S>, delay?: number) => {\n const action = () => {\n setState(nextState)\n }\n\n // A new state change has been initiated, cancel the previous one.\n if (delayedAction.current) {\n clearTimeout(delayedAction.current)\n delayedAction.current = undefined\n }\n\n if (!delay) return action()\n delayedAction.current = setTimeout(action, delay)\n }, [])\n\n useEffect(() => {\n return () => {\n if (delayedAction.current) {\n clearTimeout(delayedAction.current)\n }\n }\n }, [])\n\n return [state, onStateChange]\n}\n","import {Placement} from '@floating-ui/react-dom'\n\nexport const DEFAULT_TOOLTIP_ARROW_WIDTH = 15\nexport const DEFAULT_TOOLTIP_ARROW_HEIGHT = 6\nexport const DEFAULT_TOOLTIP_ARROW_RADIUS = 2\n\nexport const DEFAULT_TOOLTIP_DISTANCE = 4\nexport const DEFAULT_TOOLTIP_PADDING = 4\n\nexport const DEFAULT_FALLBACK_PLACEMENTS: Record<Placement, Placement[]> = {\n 'top': ['top-end', 'top-start', 'bottom', 'left', 'right'],\n 'top-start': ['top', 'top-end', 'bottom-start', 'left-start', 'right-start'],\n 'top-end': ['top', 'top-start', 'bottom-end', 'left-end', 'right-end'],\n 'bottom': ['bottom-end', 'bottom-start', 'top', 'left', 'right'],\n 'bottom-start': ['bottom', 'bottom-end', 'top-start', 'left-start', 'right-start'],\n 'bottom-end': ['bottom', 'bottom-start', 'top-end', 'left-end', 'right-end'],\n 'left': ['left-end', 'left-start', 'right', 'top', 'bottom'],\n 'left-start': ['left', 'left-end', 'right-start', 'top-start', 'bottom-start'],\n 'left-end': ['left', 'left-start', 'right-end', 'top-end', 'bottom-end'],\n 'right': ['right-end', 'right-start', 'left', 'top', 'bottom'],\n 'right-start': ['right', 'right-end', 'left-start', 'top-start', 'bottom-start'],\n 'right-end': ['right', 'right-start', 'left-end', 'top-end', 'bottom-end'],\n}\n","import {css} from '#styled-system/css'\n\nexport const tooltipLayer = css({\n pointerEvents: 'none',\n})\n\nexport const tooltipCard = css({\n willChange: 'transform',\n})\n","import {clsx} from 'clsx/lite'\nimport {motion} from 'motion/react'\nimport React, {CSSProperties, useMemo} from 'react'\n\nimport {ThemeColorSchemeKey} from '../../../theme/system/color/_system'\nimport {POPOVER_MOTION_PROPS} from '../../constants'\nimport {getTransformOrigin} from '../../middleware/origin'\nimport {Placement} from '../../types/placement'\nimport {Radius} from '../../types/radius'\nimport {Arrow} from '../../utils/arrow/arrow'\nimport {Card} from '../card/card'\nimport {\n DEFAULT_TOOLTIP_ARROW_HEIGHT,\n DEFAULT_TOOLTIP_ARROW_RADIUS,\n DEFAULT_TOOLTIP_ARROW_WIDTH,\n} from './constants'\n\nimport {tooltipCard} from './tooltip.css'\n\nconst MotionCard = motion.create(Card)\n\n/**\n * @internal\n */\nexport function TooltipCard(\n props: {\n animate?: boolean\n arrow: boolean\n arrowRef: React.Ref<HTMLDivElement>\n arrowX?: number\n arrowY?: number\n originX?: number\n originY?: number\n padding?: number | number[]\n placement?: Placement\n radius?: Radius | Radius[]\n scheme?: ThemeColorSchemeKey\n shadow?: number | number[]\n } & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'width'>,\n) {\n const {\n animate,\n arrow,\n arrowRef,\n arrowX,\n arrowY,\n children,\n className,\n originX,\n originY,\n padding,\n placement,\n radius,\n ref,\n scheme,\n shadow,\n style,\n ...restProps\n } = props\n\n const rootStyle: CSSProperties = useMemo(\n () => ({\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }),\n [animate, originX, originY, style],\n )\n\n const arrowStyle: CSSProperties = useMemo(\n () => ({\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }),\n [arrowX, arrowY],\n )\n\n return (\n <MotionCard\n className={clsx(tooltipCard, className)}\n data-ui=\"Tooltip__card\"\n {...restProps}\n data-placement={placement}\n padding={padding}\n radius={radius}\n ref={ref}\n scheme={scheme}\n shadow={shadow}\n style={rootStyle}\n {...(animate ? POPOVER_MOTION_PROPS : undefined)}\n >\n {children}\n\n {arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )}\n </MotionCard>\n )\n}\n","import {createGlobalScopedContext} from '../../../lib/createGlobalScopedContext'\nimport {TooltipDelayGroupContextValue} from './types'\n\n/**\n * @beta\n */\nexport const TooltipDelayGroupContext =\n createGlobalScopedContext<TooltipDelayGroupContextValue | null>(\n '@sanity/ui/context/tooltipDelayGroup',\n null,\n )\n","import {useContext} from 'react'\n\nimport {TooltipDelayGroupContext} from './tooltipDelayGroupContext'\nimport {TooltipDelayGroupContextValue} from './types'\n\n/**\n * @beta\n */\nexport function useTooltipDelayGroup(): TooltipDelayGroupContextValue | null {\n const value = useContext(TooltipDelayGroupContext)\n\n return value\n}\n","import {\n arrow,\n autoUpdate,\n detectOverflow,\n flip,\n type Middleware,\n offset,\n type RootBoundary,\n shift,\n size,\n useFloating,\n} from '@floating-ui/react-dom'\nimport {clsx} from 'clsx/lite'\nimport {\n Activity,\n cloneElement,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n} from 'react'\n// TODO: switch to `useEffectEvent` from `react` once\n// https://github.com/facebook/react/issues/34818 is fixed in the lowest React\n// version we support: on React 19.2 the native hook never sees values past\n// the first render when the calling component is wrapped in `forwardRef` or\n// `memo`, and consumers may wrap `Tooltip` in `memo`.\nimport {useEffectEvent} from 'use-effect-event'\n\nimport type {ThemeColorSchemeKey} from '../../../theme/system/color/_system'\nimport {useDelayedState} from '../../hooks/useDelayedState'\nimport {useLatestRef} from '../../hooks/useLatestRef'\nimport {usePrefersReducedMotion} from '../../hooks/usePrefersReducedMotion'\nimport {useReferenceElement} from '../../hooks/useReferenceElement'\nimport {origin} from '../../middleware/origin'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {useTheme_v2} from '../../theme/useTheme'\nimport type {Placement} from '../../types/placement'\nimport {AnimateActivity} from '../../utils/animateActivity'\nimport {useBoundaryElement} from '../../utils/boundaryElement/useBoundaryElement'\nimport {getElementRef} from '../../utils/getElementRef'\nimport {Layer, type LayerProps} from '../../utils/layer/layer'\nimport {Portal} from '../../utils/portal/portal'\nimport {resolvePortalElement} from '../../utils/portal/resolvePortalElement'\nimport {usePortal} from '../../utils/portal/usePortal'\nimport type {Delay} from '../types'\nimport {\n DEFAULT_FALLBACK_PLACEMENTS,\n DEFAULT_TOOLTIP_DISTANCE,\n DEFAULT_TOOLTIP_PADDING,\n} from './constants'\nimport {TooltipCard} from './tooltipCard'\nimport {useTooltipDelayGroup} from './tooltipDelayGroup/useTooltipDelayGroup'\n\nimport {tooltipLayer} from './tooltip.css'\n\n/**\n * @public\n */\nexport interface TooltipProps extends Omit<LayerProps, 'as'> {\n /** @deprecated Use `fallbackPlacements` instead. */\n allowedAutoPlacements?: never\n arrow?: boolean\n boundaryElement?: HTMLElement | null\n children?: React.JSX.Element\n content?: React.ReactNode\n disabled?: boolean\n fallbackPlacements?: Placement[]\n padding?: number | number[]\n placement?: Placement\n /** Whether or not to render the tooltip in a portal element. */\n portal?: boolean | string\n radius?: number | number[]\n scheme?: ThemeColorSchemeKey\n shadow?: number | number[]\n /**\n * Adds a delay to open or close the tooltip.\n *\n * If only a `number` is passed, it will be used for both opening and closing.\n *\n * If an object `{open: number; close:number}` is passed, it can be used to set different delays for each action.\n *\n * @public\n * @defaultValue 0\n */\n delay?: Delay\n /**\n * Whether the tooltip should animate in and out.\n *\n * @beta\n * @defaultValue false\n */\n animate?: boolean\n}\n\n/**\n * Tooltips display information when hovering, focusing or tapping.\n *\n * @public\n */\nexport function Tooltip(\n props: TooltipProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'children' | 'content'>,\n) {\n const boundaryElementContext = useBoundaryElement()\n const {layer} = useTheme_v2()\n const {\n animate: _animate = false,\n arrow: arrowProp = false,\n boundaryElement: _boundaryElement,\n children: childProp,\n content,\n disabled,\n fallbackPlacements: _fallbackPlacementsProp,\n padding = 2,\n placement: placementProp = 'bottom',\n portal: portalProp,\n radius = 2,\n ref: forwardedRef,\n scheme,\n shadow = 2,\n zOffset: _zOffset,\n delay,\n ...restProps\n } = props\n const boundaryElement = _boundaryElement ?? boundaryElementContext?.element\n const fallbackPlacementsProp =\n _fallbackPlacementsProp ?? DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? 'bottom']\n const zOffset = _zOffset ?? layer.tooltip.zOffset\n const prefersReducedMotion = usePrefersReducedMotion()\n const animate = prefersReducedMotion ? false : _animate\n const fallbackPlacements = _getArrayProp(fallbackPlacementsProp)\n const ref = useRef<HTMLDivElement | null>(null)\n const arrowRef = useRef<HTMLDivElement | null>(null)\n const rootBoundary: RootBoundary = 'viewport'\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n const portal = usePortal()\n const portalName = typeof portalProp === 'string' ? portalProp : undefined\n // Resolved the way `Portal` resolves it (a missing named portal falls back to the default one),\n // so the width cap applies to the element the tooltip actually renders into\n const portalElement = resolvePortalElement(portal, portalName)\n\n const middleware = useMiddleware({\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n portalElement,\n rootBoundary,\n })\n\n const {floatingStyles, placement, middlewareData, refs, update} = useFloating({\n middleware,\n placement: placementProp,\n whileElementsMounted: autoUpdate,\n })\n\n const childRef = childProp ? getElementRef<HTMLElement>(childProp) : undefined\n const {handOverReference, referenceRef, setReference} = useReferenceElement(refs, childRef)\n\n // The middleware reads the boundary and portal elements through refs (see `useMiddleware`), so\n // a change of either does not reach Floating UI by itself: reposition a shown tooltip against\n // the new element here, without tearing `autoUpdate` down. `update` is a no-op while the tooltip\n // is closed, as there is no floating element then. The body references the elements so that\n // the dependencies the React Compiler and the linter infer from it are the authored ones; with\n // neither element there is no tooltip DOM to reposition (`Portal` renders nothing).\n const reposition = useEffectEvent(() => update())\n\n useLayoutEffect(() => {\n if (boundaryElement || portalElement) reposition()\n }, [boundaryElement, portalElement])\n\n const arrowX = middlewareData.arrow?.x\n const arrowY = middlewareData.arrow?.y\n\n const originX = middlewareData['@sanity/ui/origin']?.originX\n const originY = middlewareData['@sanity/ui/origin']?.originY\n\n const tooltipId = useId()\n const [isOpen, setIsOpen] = useDelayedState(false)\n const delayGroupContext = useTooltipDelayGroup()\n const {setIsGroupActive, setOpenTooltipId} = delayGroupContext || {}\n // Derived, not synced: `disabled` and an empty `content` suppress the tooltip in the same render\n // that changes them, instead of an effect closing it one commit later. The hover state\n // (`isOpen`, or the group pointing at this tooltip) is kept as it is, so a tooltip that is\n // re-enabled or given content while its child is still hovered shows right away.\n const suppressed = disabled || !content\n const showTooltip = !suppressed && (isOpen || delayGroupContext?.openTooltipId === tooltipId)\n\n const isInsideGroup = delayGroupContext !== null\n const openDelayProp = typeof delay === 'number' ? delay : delay?.open || 0\n const closeDelayProp = typeof delay === 'number' ? delay : delay?.close || 0\n\n const openDelay = isInsideGroup ? delayGroupContext.openDelay : openDelayProp\n const closeDelay = isInsideGroup ? delayGroupContext.closeDelay : closeDelayProp\n\n const handleIsOpenChange = useCallback(\n (open: boolean, immediate?: boolean) => {\n if (isInsideGroup) {\n // When it's inside a group, the open or close status will be handled by the group.\n if (open) {\n const groupedOpenDelay = immediate ? 0 : openDelay\n\n setIsGroupActive?.(open, groupedOpenDelay)\n setOpenTooltipId?.(tooltipId, groupedOpenDelay)\n } else {\n const minimumGroupDeactivateDelay = 200 // We should provide some delay to allow the user to reach the next tooltip.\n const groupDeactivateDelay =\n closeDelay > minimumGroupDeactivateDelay ? closeDelay : minimumGroupDeactivateDelay\n\n setIsGroupActive?.(open, groupDeactivateDelay)\n setOpenTooltipId?.(null, immediate ? 0 : closeDelay)\n }\n } else {\n const standaloneDelay = immediate ? 0 : open ? openDelay : closeDelay\n\n // When it's not inside a group, the open or close status will be handled by the tooltip itself.\n setIsOpen(open, standaloneDelay)\n }\n },\n [\n isInsideGroup,\n openDelay,\n setIsGroupActive,\n setOpenTooltipId,\n tooltipId,\n closeDelay,\n setIsOpen,\n ],\n )\n\n // `isOpen` is delayed visibility, not the current hover state: after the pointer or focus\n // leaves, it stays true for the close delay. While the tooltip is suppressed it must not linger\n // like that, or re-enabling it (or giving it content) before the delay has elapsed would show it\n // under a pointer that has already left. Leaving a suppressed tooltip closes it immediately.\n const handleBlur = useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onBlur?.(e)\n },\n [childProp?.props, handleIsOpenChange, suppressed],\n )\n const handleClick = useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onClick?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )\n const handleContextMenu = useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, true)\n childProp?.props.onContextMenu?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )\n const handleFocus = useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onFocus?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )\n const handleMouseEnter = useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(true)\n childProp?.props?.onMouseEnter?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )\n const handleMouseLeave = useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false, suppressed)\n childProp?.props?.onMouseLeave?.(e)\n },\n [childProp?.props, handleIsOpenChange, suppressed],\n )\n\n // Handle closing the tooltip when the mouse leaves the referenceElement\n useCloseOnMouseLeave({handleIsOpenChange, referenceRef, showTooltip, isInsideGroup})\n\n const onWindowEscape = useEffectEvent(() => handleIsOpenChange(false, true))\n\n useEffect(() => {\n // If the user clicks on escape key, close the tooltip.\n if (!showTooltip) return\n\n function handleWindowKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n onWindowEscape()\n }\n }\n\n window.addEventListener('keydown', handleWindowKeyDown)\n\n // oxlint-disable-next-line consistent-return\n return () => {\n window.removeEventListener('keydown', handleWindowKeyDown)\n }\n }, [showTooltip])\n\n const setArrow = useCallback(\n (arrowEl: HTMLDivElement | null) => {\n arrowRef.current = arrowEl\n update()\n },\n [update],\n )\n\n const setFloating = useCallback(\n (node: HTMLDivElement | null) => {\n ref.current = node\n if (node) handOverReference()\n refs.setFloating(node)\n },\n [handOverReference, refs],\n )\n\n const child = useMemo(() => {\n if (!childProp) return null\n\n return cloneElement(childProp, {\n onBlur: handleBlur,\n onFocus: handleFocus,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n onContextMenu: handleContextMenu,\n ref: setReference,\n })\n }, [\n childProp,\n handleBlur,\n handleClick,\n handleContextMenu,\n handleFocus,\n handleMouseEnter,\n handleMouseLeave,\n setReference,\n ])\n\n if (!child) return <></>\n\n const tooltip = (\n <Layer\n data-ui=\"Tooltip\"\n {...restProps}\n className={clsx(tooltipLayer, restProps.className)}\n ref={setFloating}\n style={floatingStyles}\n zOffset={zOffset}\n >\n <TooltipCard\n {...restProps}\n animate={animate}\n arrow={arrowProp}\n arrowRef={setArrow}\n arrowX={arrowX}\n arrowY={arrowY}\n originX={originX}\n originY={originY}\n padding={padding}\n placement={placement}\n radius={radius}\n ref={setFloating}\n scheme={scheme}\n shadow={shadow}\n >\n {content}\n </TooltipCard>\n </Layer>\n )\n\n const tooltipNode = portalProp ? <Portal __unstable_name={portalName}>{tooltip}</Portal> : tooltip\n\n const tooltipActivity = animate ? (\n <AnimateActivity layoutMode=\"default\" mode={showTooltip ? 'visible' : 'hidden'}>\n {tooltipNode}\n </AnimateActivity>\n ) : (\n <Activity mode={showTooltip ? 'visible' : 'hidden'}>{tooltipNode}</Activity>\n )\n\n // The fragment has the same shape whether or not the tooltip is disabled, so the referred\n // element keeps its fiber (DOM node, state, focus) when `disabled` toggles. Returning the bare\n // child while disabled would change the tree shape and remount it. While disabled the tooltip\n // slot is left empty: no hidden tooltip DOM is rendered.\n return (\n <>\n {/* the tooltip */}\n {disabled ? null : tooltipActivity}\n\n {/* the referred element */}\n {child}\n </>\n )\n}\n\ntype ElementRef = React.RefObject<HTMLElement | null>\n\n/**\n * Derivable middleware options that read the boundary element from a ref. Floating UI evaluates\n * them inside `computePosition`, which is when the ref is read — never during render.\n *\n * Built at module scope, like `sizeMiddleware` below: a `ref.current` read inside a callback\n * created during render makes the React Compiler skip the calling function, since it cannot tell\n * when the callback runs.\n */\nfunction withBoundary<Options extends object>(\n boundaryRef: ElementRef,\n options: Options,\n): () => Options & {boundary: HTMLElement | undefined} {\n return () => ({...options, boundary: boundaryRef.current || undefined})\n}\n\n/**\n * Caps the tooltip width to the room it is positioned in: the boundary element (or the clipping\n * ancestors when there is none), always within the viewport, and the portal element's width.\n * Floating UI measures inside its own positioning pass — only while the tooltip is shown, never\n * during render or on mount — and the width is written straight to the element, so no state or\n * layout effect is involved. Placed after `shift` so `availableWidth` is the full clipping width\n * for top and bottom placements; for left and right placements it is the room on that side.\n */\nfunction sizeMiddleware({\n boundaryRef,\n portalRef,\n rootBoundary,\n}: {\n boundaryRef: ElementRef\n portalRef: ElementRef\n rootBoundary: RootBoundary\n}): Middleware {\n return size(() => ({\n boundary: boundaryRef.current || undefined,\n rootBoundary,\n padding: DEFAULT_TOOLTIP_PADDING,\n async apply(state) {\n const {availableWidth, elements} = state\n const portalElement = portalRef.current\n let maxWidth = availableWidth\n\n // A tooltip rendered in a portal is capped to the portal's width as well, which may be\n // narrower than the boundary (see the CustomPortal story). The portal is measured on its\n // own rather than as part of `boundary`: an element array is the intersection of the rects,\n // and the portal need not overlap the boundary at all. A portal without a width — an empty\n // mount point — imposes no cap, as before.\n if (portalElement) {\n const overflow = await detectOverflow(state, {\n boundary: portalElement,\n rootBoundary,\n padding: DEFAULT_TOOLTIP_PADDING,\n })\n // The portal's clipping width minus the padding on both sides, wherever the tooltip is\n const portalWidth = state.rects.floating.width - overflow.left - overflow.right\n\n if (portalWidth > 0) maxWidth = Math.min(maxWidth, portalWidth)\n }\n\n // No room on the chosen side gives a negative width: the cap is clamped to zero rather than\n // removed, so the tooltip never grows across the boundary.\n elements.floating.style.maxWidth = `${Math.max(0, maxWidth)}px`\n },\n }))\n}\n\nfunction useMiddleware({\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n portalElement,\n rootBoundary,\n}: {\n animate: boolean\n arrowProp: boolean\n arrowRef: React.RefObject<HTMLDivElement | null>\n boundaryElement: HTMLElement | null\n fallbackPlacements: Placement[]\n portalElement: HTMLElement | null\n rootBoundary: RootBoundary\n}) {\n // The elements are read through refs when Floating UI runs the middleware — inside\n // `computePosition`, never during render — so the middleware array keeps its identity when an\n // element changes, and with it Floating UI's `update` callback and `autoUpdate` subscription.\n // Passing the elements as option values would make `useFloating` deep-compare them on every\n // render (it has no DOM element case: two elements are equal unless their own enumerable\n // properties differ, which for React-rendered elements means walking their fibers), and an\n // element captured by a closure such as `apply` would never be noticed at all, since functions\n // are compared by source. The component repositions a shown tooltip itself when an element\n // changes (see `useLayoutEffect` in `Tooltip`).\n const boundaryRef = useLatestRef(boundaryElement)\n const portalRef = useLatestRef(portalElement)\n\n return useMemo(() => {\n const ret: Middleware[] = []\n\n // Flip the floating element when leaving the boundary box\n ret.push(\n flip(\n withBoundary(boundaryRef, {\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\n }),\n ),\n )\n\n // Define distance between reference and floating element\n ret.push(offset({mainAxis: DEFAULT_TOOLTIP_DISTANCE}))\n\n // Shift the tooltip so its sits with the boundary element\n ret.push(shift(withBoundary(boundaryRef, {rootBoundary, padding: DEFAULT_TOOLTIP_PADDING})))\n\n // Cap the tooltip width to the boundary, viewport and portal\n ret.push(sizeMiddleware({boundaryRef, portalRef, rootBoundary}))\n\n // Place arrow\n if (arrowProp) {\n ret.push(arrow({element: arrowRef, padding: DEFAULT_TOOLTIP_PADDING}))\n }\n\n // Determine the origin to scale from.\n // Must be placed after `size` and `shift` middleware.\n if (animate) {\n ret.push(origin)\n }\n\n return ret\n }, [animate, arrowProp, arrowRef, boundaryRef, fallbackPlacements, portalRef, rootBoundary])\n}\n\n/**\n * As `useEffectEvent` should never be passed to other components or hooks, this custom hook groups together the `useEffectEvent` and the `useEffect` hook using it.\n * @see https://19.react.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events:~:text=Never%20pass%20them%20to%20other%20components%20or%20Hooks\n */\nfunction useCloseOnMouseLeave({\n handleIsOpenChange,\n referenceRef,\n showTooltip,\n isInsideGroup,\n}: {\n handleIsOpenChange: (open: boolean, immediate?: boolean) => void\n referenceRef: ElementRef\n showTooltip: boolean\n isInsideGroup: boolean\n}) {\n // An \"effect event\" (https://19.react.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events),\n // so that the `mousemove` listener below is not detached and attached again whenever\n // `handleIsOpenChange` changes; the referred element is read from its ref when the pointer moves.\n const onMouseMove = useEffectEvent((target: EventTarget | null, teardown: () => void) => {\n const referenceElement = referenceRef.current\n\n if (!referenceElement) return\n\n const isHoveringReference =\n referenceElement === target || (target instanceof Node && referenceElement.contains(target))\n\n if (!isHoveringReference) {\n handleIsOpenChange(false)\n // Allow removing the event listener eagerly, to avoid race conditions\n teardown()\n }\n })\n\n // Detect whether the mouse is moving outside of the reference element. This is sometimes\n // necessary, because the tooltip might not always close as it should (e.g. when clicking\n // the reference element triggers a CPU-heavy operation.)\n useEffect(() => {\n if (!showTooltip || isInsideGroup) return\n\n const handleMouseMove = (event: MouseEvent) => {\n onMouseMove(event.target, () => window.removeEventListener('mousemove', handleMouseMove))\n }\n\n window.addEventListener('mousemove', handleMouseMove)\n\n // oxlint-disable-next-line consistent-return\n return () => window.removeEventListener('mousemove', handleMouseMove)\n }, [isInsideGroup, showTooltip])\n}\n","import {useMemo} from 'react'\n\nimport {useDelayedState} from '../../../hooks/useDelayedState'\nimport {Delay} from '../../types'\nimport {TooltipDelayGroupContext} from './tooltipDelayGroupContext'\nimport {TooltipDelayGroupContextValue} from './types'\n\n/**\n * @public\n * */\nexport interface TooltipDelayGroupProviderProps {\n children?: React.ReactNode\n /**\n * Handles the delays to open or close a tooltip inside a group\n *\n * If only a `number` is passed, it will be used for both opening and closing.\n *\n * If an object `{open: number; close:number}` is passed, it can be used to set different delays for each action.\n *\n * @public\n */\n delay: Delay\n}\n\n/**\n * @public\n * Provides context for a group of tooltip elements that should share a delay\n * which temporarily becomes 1 ms after the first floating element of the group opens.\n */\nexport function TooltipDelayGroupProvider(\n props: TooltipDelayGroupProviderProps,\n): React.JSX.Element {\n const {children, delay} = props\n const [isGroupActive, setIsGroupActive] = useDelayedState(false)\n const [openTooltipId, setOpenTooltipId] = useDelayedState<string | null>(null)\n\n const openDelay = typeof delay === 'number' ? delay : delay?.open || 0\n const closeDelay = typeof delay === 'number' ? delay : delay?.close || 0\n\n const value: TooltipDelayGroupContextValue = useMemo(\n () => ({\n setIsGroupActive: setIsGroupActive,\n openTooltipId: openTooltipId,\n setOpenTooltipId: setOpenTooltipId,\n // When the group is active, we want the next tooltip to open immediately.\n openDelay: isGroupActive ? 1 : openDelay,\n closeDelay: closeDelay,\n }),\n [closeDelay, isGroupActive, openDelay, openTooltipId, setIsGroupActive, setOpenTooltipId],\n )\n\n return (\n <TooltipDelayGroupContext.Provider value={value}>{children}</TooltipDelayGroupContext.Provider>\n )\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sanity/ui",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0-panda.0",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"components",
|
|
6
6
|
"design-system",
|
|
@@ -28,6 +28,9 @@
|
|
|
28
28
|
"*.css"
|
|
29
29
|
],
|
|
30
30
|
"types": "./dist/index.d.ts",
|
|
31
|
+
"imports": {
|
|
32
|
+
"#styled-system/*": "./styled-system/*/index.js"
|
|
33
|
+
},
|
|
31
34
|
"exports": {
|
|
32
35
|
".": "./dist/index.js",
|
|
33
36
|
"./autocomplete": "./dist/autocomplete.js",
|
|
@@ -51,7 +54,6 @@
|
|
|
51
54
|
"@floating-ui/react-dom": "^2.1.9",
|
|
52
55
|
"@sanity/color": "^3.0.9",
|
|
53
56
|
"@sanity/icons": "^5.2.3",
|
|
54
|
-
"@vanilla-extract/dynamic": "^2.1.5",
|
|
55
57
|
"clsx": "^2.1.1",
|
|
56
58
|
"csstype": "^3.2.3",
|
|
57
59
|
"motion": "^14.2.0",
|
|
@@ -60,17 +62,19 @@
|
|
|
60
62
|
"use-effect-event": "^2.0.4"
|
|
61
63
|
},
|
|
62
64
|
"devDependencies": {
|
|
65
|
+
"@pandacss/dev": "^2.2.0",
|
|
66
|
+
"@pandacss/transformer": "^2.2.0",
|
|
67
|
+
"@pandacss/vite": "^2.2.0",
|
|
63
68
|
"@sanity/tsdown-config": "^0.29.0",
|
|
64
|
-
"@sanity/vanilla-extract-vite-plugin": "^0.3.0",
|
|
65
69
|
"@testing-library/dom": "^10.4.2",
|
|
66
70
|
"@testing-library/jest-dom": "^7.0.1",
|
|
67
71
|
"@testing-library/react": "^16.3.3",
|
|
68
72
|
"@testing-library/user-event": "^14.6.7",
|
|
73
|
+
"@tsdown/css": "^0.23.1",
|
|
69
74
|
"@types/node": "^24.19.2",
|
|
70
75
|
"@types/react": "^19.3.0",
|
|
71
76
|
"@types/react-dom": "^19.3.0",
|
|
72
77
|
"@types/react-is": "^19.3.0",
|
|
73
|
-
"@vanilla-extract/css": "^1.21.3",
|
|
74
78
|
"@vitejs/plugin-react": "^6.1.2",
|
|
75
79
|
"@vitest/coverage-v8": "^5.0.4",
|
|
76
80
|
"jsdom": "^30.1.2",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"arrow-72xi7WAV.js","names":["createPortal(children, portalElement)","_c","radius = 0","compileCommands(cmds)","clsx(arrow, className)","assignInlineVars({[arrowSize]: `${w}px`})","`${w}px`","{...style, ...assignInlineVars({[arrowSize]: `${w}px`})}","<rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />","<mask id={strokeMaskId}>\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>","<path\n className={arrowStroke}\n d={strokePath}\n mask={`url(#${strokeMaskId})`}\n strokeWidth={strokeWidth * 2}\n />","strokeWidth * 2","`url(#${strokeMaskId})`","<path className={arrowShape} d={fillPath} />","<svg width={w} height={w} viewBox={`0 0 ${w} ${w}`}>\n <mask id={strokeMaskId}>\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>\n <path\n className={arrowStroke}\n d={strokePath}\n mask={`url(#${strokeMaskId})`}\n strokeWidth={strokeWidth * 2}\n />\n <path className={arrowShape} d={fillPath} />\n </svg>","`0 0 ${w} ${w}`","<div\n data-ui=\"Arrow\"\n {...restProps}\n className={clsx(arrow, className)}\n ref={ref}\n style={{...style, ...assignInlineVars({[arrowSize]: `${w}px`})}}\n >\n <svg width={w} height={w} viewBox={`0 0 ${w} ${w}`}>\n <mask id={strokeMaskId}>\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>\n <path\n className={arrowStroke}\n d={strokePath}\n mask={`url(#${strokeMaskId})`}\n strokeWidth={strokeWidth * 2}\n />\n <path className={arrowShape} d={fillPath} />\n </svg>\n </div>","_c"],"sources":["../src/core/utils/boundaryElement/boundaryElementContext.ts","../src/core/utils/boundaryElement/useBoundaryElement.ts","../src/core/utils/portal/resolvePortalElement.ts","../src/core/utils/portal/portalContext.ts","../src/core/utils/portal/usePortal.ts","../src/core/utils/portal/portal.ts","../src/core/utils/arrow/cmds.ts","../src/core/utils/arrow/arrow.css.ts","../src/core/utils/arrow/arrow.tsx"],"sourcesContent":["import {createGlobalScopedContext} from '../../lib/createGlobalScopedContext'\nimport {BoundaryElementContextValue} from './types'\n\nexport const BoundaryElementContext = createGlobalScopedContext<BoundaryElementContextValue | null>(\n '@sanity/ui/context/boundaryElement',\n null,\n)\n","import {useContext} from 'react'\n\nimport {isRecord} from '../../lib/isRecord'\nimport {BoundaryElementContext} from './boundaryElementContext'\nimport {BoundaryElementContextValue} from './types'\n\nconst DEFAULT_VALUE: BoundaryElementContextValue = {\n version: 0.0,\n element: null,\n}\n\n/**\n * @public\n */\nexport function useBoundaryElement(): BoundaryElementContextValue {\n const value = useContext(BoundaryElementContext)\n\n // NOTE: This check is for future-compatiblity\n // - If the value is not an object, it’s not compatible with the current version\n // - If the value is an object, but doesn’t have `version: 0.0`, it’s not compatible with the current version\n if (value && (!isRecord(value) || value.version !== 0.0)) {\n throw new Error('useBoundaryElement(): the context value is not compatible')\n }\n\n return value || DEFAULT_VALUE\n}\n","import type {PortalContextValue} from './types'\n\n/**\n * The element a `Portal` renders into: the named element when `name` is given, otherwise the\n * context's element, falling back to the `default` named element in both cases.\n *\n * Components that reason about the portal element (the tooltip caps its width to it, the dialog\n * scopes its click-outside and focus handling to it) resolve it through this function as well, so\n * they cannot disagree with where the portal content ends up.\n */\nexport function resolvePortalElement(\n portal: PortalContextValue,\n name?: string,\n): HTMLElement | null {\n return (name ? portal.elements?.[name] : portal.element) || portal.elements?.default || null\n}\n","import {createGlobalScopedContext} from '../../lib/createGlobalScopedContext'\nimport {globalScope} from '../../lib/globalScope'\nimport {PortalContextValue} from './types'\n\nconst key = '@sanity/ui/context/portal'\nconst elementKey = Symbol.for(`${key}/element`)\n\nglobalScope[elementKey] = null\n\nconst defaultContextValue: PortalContextValue = {\n version: 0.0,\n boundaryElement: null,\n get element() {\n if (typeof document === 'undefined') {\n return null\n }\n\n if (globalScope[elementKey]) {\n return globalScope[elementKey]\n }\n\n globalScope[elementKey] = document.createElement('div')\n globalScope[elementKey].setAttribute('data-portal', '')\n\n document.body.appendChild(globalScope[elementKey])\n\n return globalScope[elementKey]\n },\n}\n\nexport const PortalContext = createGlobalScopedContext<PortalContextValue>(key, defaultContextValue)\n","import {useContext} from 'react'\n\nimport {isRecord} from '../../lib/isRecord'\nimport {PortalContext} from './portalContext'\nimport {PortalContextValue} from './types'\n\n/**\n * @public\n */\nexport function usePortal(): PortalContextValue {\n const value = useContext(PortalContext)\n\n if (!value) {\n throw new Error('usePortal(): missing context value')\n }\n\n // NOTE: This check is for future-compatiblity\n // - If the value is not an object, it’s not compatible with the current version\n // - If the value is an object, but doesn’t have `version: 0.0`, it’s not compatible with the current version\n if (!isRecord(value) || value.version !== 0.0) {\n throw new Error('usePortal(): the context value is not compatible')\n }\n\n return value\n}\n","import {createPortal} from 'react-dom'\n\nimport {resolvePortalElement} from './resolvePortalElement'\nimport {usePortal} from './usePortal'\n\n/**\n * @public\n */\nexport interface PortalProps {\n children: React.ReactNode\n /**\n * @beta This API might change. DO NOT USE IN PRODUCTION.\n */\n __unstable_name?: string\n}\n\n/**\n * @public\n */\nexport function Portal(props: PortalProps): React.ReactPortal | null {\n const {children, __unstable_name: name} = props\n const portal = usePortal()\n const portalElement = resolvePortalElement(portal, name)\n\n if (!portalElement) {\n return null\n }\n\n return createPortal(children, portalElement)\n}\n","interface PointCmd {\n type: 'point'\n x: number\n y: number\n radius?: number\n}\n\ninterface CurveCmd {\n type: 'curve'\n startControl: Point\n endControl: Point\n curveEnd: Point\n}\n\nexport type Cmd = PointCmd | CurveCmd\n\nexport interface Point {\n x: number\n y: number\n radius?: number\n}\n\nfunction moveTowardsLength(movingPoint: Point, targetPoint: Point, amount: number) {\n const width = targetPoint.x - movingPoint.x\n const height = targetPoint.y - movingPoint.y\n\n const distance = Math.sqrt(width * width + height * height)\n\n return moveTowardsFractional(movingPoint, targetPoint, Math.min(1, amount / distance))\n}\n\nfunction moveTowardsFractional(movingPoint: Point, targetPoint: Point, fraction: number): Point {\n return {\n x: movingPoint.x + (targetPoint.x - movingPoint.x) * fraction,\n y: movingPoint.y + (targetPoint.y - movingPoint.y) * fraction,\n }\n}\n\nexport function getRoundedCommands(points: Point[]): Cmd[] {\n const len = points.length\n\n const cmds: Cmd[] = []\n\n for (let i = 0; i < len; i += 1) {\n const point = points[i]\n const prevPoint = points[i - 1]\n const nextPoint = points[i + 1]\n\n if (prevPoint && point.radius) {\n const curveStart = moveTowardsLength(point, prevPoint, point.radius)\n const curveEnd = moveTowardsLength(point, nextPoint, point.radius)\n const startControl = moveTowardsFractional(curveStart, point, 0.5)\n const endControl = moveTowardsFractional(point, curveEnd, 0.5)\n\n cmds.push({\n type: 'point',\n ...curveStart,\n })\n\n cmds.push({\n type: 'curve',\n curveEnd,\n startControl,\n endControl,\n })\n } else {\n cmds.push({\n type: 'point',\n ...point,\n })\n }\n }\n\n return cmds\n}\n\nexport function compileCommands(cmds: Cmd[]): string {\n return cmds\n .map((n, idx) => {\n if (n.type === 'point') {\n return `${idx === 0 ? 'M' : 'L'} ${n.x} ${n.y}`\n }\n\n if (n.type === 'curve') {\n return `C ${n.startControl.x} ${n.startControl.y} ${n.endControl.x} ${n.endControl.y} ${n.curveEnd.x} ${n.curveEnd.y}`\n }\n\n return ``\n })\n .join(' ')\n}\n","import {createVar, globalStyle, style} from '@vanilla-extract/css'\n\nexport const arrowSize = createVar()\n\nexport const arrow = style({\n position: 'absolute',\n width: arrowSize,\n height: arrowSize,\n selectors: {\n ':empty + &': {display: 'none'},\n \"[data-placement^='top'] > &\": {bottom: `calc(-1 * ${arrowSize})`},\n \"[data-placement^='right'] > &\": {left: `calc(-1 * ${arrowSize})`},\n \"[data-placement^='left'] > &\": {right: `calc(-1 * ${arrowSize})`},\n \"[data-placement^='bottom'] > &\": {top: `calc(-1 * ${arrowSize})`},\n },\n})\n\nglobalStyle(`${arrow} > svg`, {\n display: 'block',\n lineHeight: 0,\n transformOrigin: `calc(${arrowSize} / 2) calc(${arrowSize} / 2)`,\n})\n\nglobalStyle(`[data-placement^='top'] > ${arrow} > svg`, {transform: 'rotate(0)'})\nglobalStyle(`[data-placement^='right'] > ${arrow} > svg`, {transform: 'rotate(90deg)'})\nglobalStyle(`[data-placement^='left'] > ${arrow} > svg`, {transform: 'rotate(-90deg)'})\nglobalStyle(`[data-placement^='bottom'] > ${arrow} > svg`, {transform: 'rotate(180deg)'})\n\nexport const arrowStroke = style({\n stroke: 'var(--card-shadow-outline-color)',\n})\n\nexport const arrowShape = style({\n fill: 'var(--card-bg-color)',\n})\n","import {assignInlineVars} from '@vanilla-extract/dynamic'\nimport {clsx} from 'clsx/lite'\nimport {HTMLProps, useId} from 'react'\n\nimport {useTheme_v2} from '../../theme/useTheme'\nimport {compileCommands, getRoundedCommands, Point} from './cmds'\n\nimport {arrow, arrowShape, arrowSize, arrowStroke} from './arrow.css'\n\n/** @internal */\nexport function Arrow(\n props: {width: number; height: number; radius?: number} & Omit<\n HTMLProps<HTMLDivElement>,\n 'width' | 'height'\n >,\n): React.JSX.Element {\n const {className, width: w, height: h, radius = 0, ref, style, ...restProps} = props\n const {card} = useTheme_v2()\n const strokeMaskId = `stroke-mask-${useId()}`\n const strokeWidth = card.shadow.outline\n\n const center = w / 2\n\n const points: Point[] = [\n {\n x: 0,\n y: 0,\n },\n {\n x: radius,\n y: 0,\n radius,\n },\n {\n x: center,\n y: h - 1,\n radius,\n },\n {\n x: w - radius,\n y: 0,\n radius,\n },\n {\n x: w,\n y: 0,\n },\n ]\n\n const cmds = getRoundedCommands(points)\n const path = compileCommands(cmds)\n\n // oxlint-disable-next-line no-unnecessary-template-expression\n const strokePath = `${path}`\n const fillPath = `${path} M ${w} -1 M 0 -1 Z`\n\n return (\n <div\n data-ui=\"Arrow\"\n {...restProps}\n className={clsx(arrow, className)}\n ref={ref}\n style={{...style, ...assignInlineVars({[arrowSize]: `${w}px`})}}\n >\n <svg width={w} height={w} viewBox={`0 0 ${w} ${w}`}>\n <mask id={strokeMaskId}>\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>\n <path\n className={arrowStroke}\n d={strokePath}\n mask={`url(#${strokeMaskId})`}\n strokeWidth={strokeWidth * 2}\n />\n <path className={arrowShape} d={fillPath} />\n </svg>\n </div>\n )\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"button-D34_7IeR.js","names":["<SpinnerIcon className={spinnerIcon} />","<Text data-ui=\"Spinner\" {...props}>\n <SpinnerIcon className={spinnerIcon} />\n </Text>","_c","fontSize = 1","justifyProp = 'center'","mode = 'default'","paddingProp = 3","radiusProp = 2","gap = 3","tone = 'default'","type = 'button'","muted = false","_getArrayProp(justifyProp)","_getArrayProp(paddingProp)","_getArrayProp(paddingXProp)","_getArrayProp(paddingYProp)","_getArrayProp(paddingTopProp)","_getArrayProp(paddingBottomProp)","_getArrayProp(paddingLeftProp)","_getArrayProp(paddingRightProp)","_getArrayProp(radiusProp)","_getArrayProp(gap)","{\n // flex: 1,\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n }","useMemo(\n () => ({\n // flex: 1,\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n }),\n [padding, paddingX, paddingY, paddingTop, paddingBottom, paddingLeft, paddingRight],\n )","Boolean(loading) && (\n <div className={buttonLoadingBox} data-ui=\"ButtonLoading\">\n <Spinner />\n </div>\n )","(IconComponent || text || IconRightComponent) && (\n <Box as=\"span\" {...boxProps}>\n <Flex as=\"span\" justify={justify} gap={spacing}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n {text && (\n <Box>\n <Text\n muted={muted}\n align={textAlign}\n size={fontSize}\n textOverflow=\"ellipsis\"\n weight={textWeight ?? button.textWeight}\n >\n {text}\n </Text>\n </Box>\n )}\n\n {IconRightComponent && (\n <Text size={fontSize}>\n {isValidElement(IconRightComponent) && IconRightComponent}\n {isValidElementType(IconRightComponent) && <IconRightComponent />}\n </Text>\n )}\n </Flex>\n </Box>\n )","button.textWeight","children && (\n <Box as=\"span\" {...boxProps}>\n {children}\n </Box>\n )","<StyledButton\n data-ui=\"Button\"\n {...restProps}\n $mode={mode}\n $radius={radius}\n $tone={tone}\n data-disabled={Boolean(loading || disabled)}\n data-selected={selected ? '' : undefined}\n disabled={Boolean(loading || disabled)}\n ref={ref}\n type={type}\n $width={width}\n >\n {Boolean(loading) && (\n <div className={buttonLoadingBox} data-ui=\"ButtonLoading\">\n <Spinner />\n </div>\n )}\n\n {(IconComponent || text || IconRightComponent) && (\n <Box as=\"span\" {...boxProps}>\n <Flex as=\"span\" justify={justify} gap={spacing}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n {text && (\n <Box>\n <Text\n muted={muted}\n align={textAlign}\n size={fontSize}\n textOverflow=\"ellipsis\"\n weight={textWeight ?? button.textWeight}\n >\n {text}\n </Text>\n </Box>\n )}\n\n {IconRightComponent && (\n <Text size={fontSize}>\n {isValidElement(IconRightComponent) && IconRightComponent}\n {isValidElementType(IconRightComponent) && <IconRightComponent />}\n </Text>\n )}\n </Flex>\n </Box>\n )}\n\n {children && (\n <Box as=\"span\" {...boxProps}>\n {children}\n </Box>\n )}\n </StyledButton>","Boolean(loading || disabled)","selected ? '' : undefined","_c"],"sources":["../src/core/primitives/spinner/spinner.css.ts","../src/core/primitives/spinner/spinner.tsx","../src/core/primitives/button/styles.ts","../src/core/primitives/button/button.css.ts","../src/core/primitives/button/button.tsx"],"sourcesContent":["import {keyframes, style} from '@vanilla-extract/css'\n\nconst rotate = keyframes({\n from: {transform: 'rotate(0deg)'},\n to: {transform: 'rotate(360deg)'},\n})\n\nconst size = 'round(1em, 2px)'\nexport const spinnerIcon = style({\n animation: `${rotate} 500ms linear infinite`,\n // Prevents a wobbly spinner on Safari\n height: size,\n width: size,\n})\n","import {SpinnerIcon} from '@sanity/icons/Spinner'\n\nimport {Text} from '../text/text'\n\nimport {spinnerIcon} from './spinner.css'\n\n/**\n * @public\n */\nexport interface SpinnerProps {\n muted?: boolean\n size?: number | number[]\n}\n\n/**\n * Indicate that something is loading for an indeterminate amount of time.\n *\n * @public\n */\nexport function Spinner(\n props: SpinnerProps & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'size'>,\n) {\n return (\n <Text data-ui=\"Spinner\" {...props}>\n <SpinnerIcon className={spinnerIcon} />\n </Text>\n )\n}\n","import {css} from 'styled-components'\n\nimport {ThemeColorCard_v2} from '../../../theme/system/color/color'\nimport {getTheme_v2} from '../../../theme/versioning/getTheme_v2'\nimport {_cardColorStyle} from '../../styles/card/_cardColorStyle'\nimport {focusRingBorderStyle, focusRingStyle} from '../../styles/focusRing'\nimport {ThemeProps} from '../../styles/types'\nimport {ButtonMode, ButtonTone} from '../../types/button'\n\nfunction buttonToneColor(\n base: ThemeColorCard_v2,\n {$mode, $tone}: {$mode: ButtonMode; $tone: ButtonTone},\n) {\n const mode = base.button[$mode] || base.button.default\n\n return mode[$tone] || mode.default\n}\n\n/**\n * @internal\n */\nexport function buttonBaseStyles(props: ThemeProps): ReturnType<typeof css> {\n const {button} = getTheme_v2(props.theme)\n const borderBoxShadow = focusRingBorderStyle({\n width: button.border.width,\n color: 'var(--card-border-color)',\n })\n\n return css`\n /* Stays here: Breadcrumbs' expand button overrides it at equal specificity */\n margin: 0;\n background-color: var(--card-bg-color);\n color: var(--card-fg-color);\n box-shadow: ${borderBoxShadow};\n\n &:not([data-disabled='true']) {\n &:focus:not(:focus-visible) {\n box-shadow: ${borderBoxShadow};\n }\n }\n `\n}\n\n/**\n * @internal\n */\nexport function buttonColorStyles(\n props: {$mode: ButtonMode; $tone: ButtonTone} & ThemeProps,\n): ReturnType<typeof css> {\n const {color: baseColor} = getTheme_v2(props.theme)\n const color = buttonToneColor(baseColor, props)\n\n return css`\n ${_cardColorStyle(baseColor, color.enabled)}\n\n &:not([data-disabled='true']) {\n @media (hover: hover) {\n &:hover {\n ${_cardColorStyle(baseColor, color.hovered)}\n }\n\n &:active {\n ${_cardColorStyle(baseColor, color.pressed)}\n }\n\n &[data-hovered] {\n ${_cardColorStyle(baseColor, color.hovered)}\n }\n }\n\n &[data-selected] {\n ${_cardColorStyle(baseColor, color.pressed)}\n }\n }\n `\n}\n\n/**\n * @internal\n */\nexport function buttonDisabledAndFocusStyles(\n props: {$mode: ButtonMode; $tone: ButtonTone} & ThemeProps,\n): ReturnType<typeof css> {\n const {button, color: baseColor} = getTheme_v2(props.theme)\n const color = buttonToneColor(baseColor, props)\n\n return css`\n &:disabled,\n &[data-disabled='true'] {\n ${_cardColorStyle(baseColor, color.disabled)}\n }\n\n &:not([data-disabled='true']):focus {\n box-shadow: ${focusRingStyle({\n base: baseColor,\n border: {width: 2, color: baseColor.bg},\n focusRing: button.focusRing,\n })};\n }\n `\n}\n\n/**\n * @internal\n */\nexport function buttonStyles(props: ThemeProps): ReturnType<typeof css> {\n const {style} = getTheme_v2(props.theme)\n\n return css`\n ${style?.button?.root}\n `\n}\n","import {globalStyle, style} from '@vanilla-extract/css'\n\nexport const buttonRoot = style({\n WebkitFontSmoothing: 'inherit',\n appearance: 'none',\n display: 'inline-flex',\n alignItems: 'center',\n font: 'inherit',\n border: 0,\n outline: 'none',\n userSelect: 'none',\n textDecoration: 'none',\n boxSizing: 'border-box',\n padding: 0,\n whiteSpace: 'nowrap',\n textAlign: 'left',\n position: 'relative',\n verticalAlign: 'top',\n selectors: {\n '&::-moz-focus-inner': {\n border: 0,\n padding: 0,\n },\n },\n})\n\nglobalStyle(`${buttonRoot} > span`, {\n display: 'block',\n flex: 1,\n minWidth: 0,\n borderRadius: 'inherit',\n})\n\nexport const buttonWidthFill = style({\n width: ['-moz-available', '-webkit-fill-available', 'stretch'],\n})\n\nexport const buttonLoadingBox = style({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: 'var(--card-bg-color)',\n borderRadius: 'inherit',\n zIndex: 1,\n boxShadow: 'inherit',\n})\n","import {isValidElement, useMemo} from 'react'\nimport {isValidElementType} from 'react-is'\nimport {styled} from 'styled-components'\n\nimport {ThemeFontWeightKey} from '../../../theme/system/font'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {responsiveRadiusStyle} from '../../styles/radius/radiusStyle'\nimport {ResponsiveRadiusStyleProps} from '../../styles/radius/types'\nimport {useTheme_v2} from '../../theme/useTheme'\nimport {ButtonMode, ButtonTextAlign, ButtonTone, ButtonWidth} from '../../types/button'\nimport {ElementType, Props} from '../../types/component'\nimport {FlexJustify} from '../../types/flex'\nimport {Box} from '../box/box'\nimport {Flex} from '../flex/flex'\nimport {Spinner} from '../spinner/spinner'\nimport {Text} from '../text/text'\nimport {ResponsivePaddingProps, ResponsiveRadiusProps} from '../types'\nimport {\n buttonBaseStyles,\n buttonColorStyles,\n buttonDisabledAndFocusStyles,\n buttonStyles,\n} from './styles'\n\nimport {buttonLoadingBox, buttonRoot, buttonWidthFill} from './button.css'\n\n/**\n * @public\n */\nexport interface ButtonOwnProps extends ResponsivePaddingProps, ResponsiveRadiusProps {\n fontSize?: number | number[]\n mode?: ButtonMode\n // oxlint-disable-next-line no-redundant-type-constituents\n icon?: React.ElementType | React.ReactNode\n // oxlint-disable-next-line no-redundant-type-constituents\n iconRight?: React.ElementType | React.ReactNode\n justify?: FlexJustify | FlexJustify[]\n /**\n * @beta Do not use in production, as this might change.\n */\n loading?: boolean\n selected?: boolean\n /**\n * @deprecated Use `gap` instead.\n */\n space?: never\n gap?: number | number[]\n muted?: boolean\n text?: React.ReactNode\n textAlign?: ButtonTextAlign\n textWeight?: ThemeFontWeightKey\n tone?: ButtonTone\n type?: 'button' | 'reset' | 'submit'\n width?: ButtonWidth\n}\n\n/**\n * @public\n */\nexport type ButtonProps<E extends ElementType = 'button'> = Props<ButtonOwnProps, E>\n\n// The static rules live in `buttonRoot` in styles.css; `width=\"fill\"` is the\n// `buttonWidthFill` class on the last level\nconst ButtonBase = styled.button.attrs({className: buttonRoot})(buttonBaseStyles)\n\nconst ButtonColor = styled(ButtonBase)<{$mode: ButtonMode; $tone: ButtonTone}>(buttonColorStyles)\n\nconst ButtonDisabledAndFocus = styled(ButtonColor)<{$mode: ButtonMode; $tone: ButtonTone}>(\n buttonDisabledAndFocusStyles,\n)\n\nconst StyledButton = styled(ButtonDisabledAndFocus).attrs<{$width?: ButtonWidth}>((props) => ({\n className: props.$width === 'fill' ? buttonWidthFill : undefined,\n}))<{$width?: ButtonWidth} & ResponsiveRadiusStyleProps>(responsiveRadiusStyle, buttonStyles)\n\nfunction ButtonComponent(\n props: ButtonOwnProps & {as?: ElementType} & Omit<\n React.HTMLProps<HTMLButtonElement>,\n 'as' | 'width'\n >,\n) {\n const {\n children,\n disabled,\n ref,\n fontSize = 1,\n icon: IconComponent,\n iconRight: IconRightComponent,\n justify: justifyProp = 'center',\n loading,\n mode = 'default',\n padding: paddingProp = 3,\n paddingX: paddingXProp,\n paddingY: paddingYProp,\n paddingTop: paddingTopProp,\n paddingBottom: paddingBottomProp,\n paddingLeft: paddingLeftProp,\n paddingRight: paddingRightProp,\n radius: radiusProp = 2,\n selected,\n gap = 3,\n text,\n textAlign,\n textWeight,\n tone = 'default',\n type = 'button',\n muted = false,\n width,\n ...restProps\n } = props\n const {button} = useTheme_v2()\n\n const justify = _getArrayProp(justifyProp)\n const padding = _getArrayProp(paddingProp)\n const paddingX = _getArrayProp(paddingXProp)\n const paddingY = _getArrayProp(paddingYProp)\n const paddingTop = _getArrayProp(paddingTopProp)\n const paddingBottom = _getArrayProp(paddingBottomProp)\n const paddingLeft = _getArrayProp(paddingLeftProp)\n const paddingRight = _getArrayProp(paddingRightProp)\n const radius = _getArrayProp(radiusProp)\n const spacing = _getArrayProp(gap)\n\n const boxProps = useMemo(\n () => ({\n // flex: 1,\n padding,\n paddingX,\n paddingY,\n paddingTop,\n paddingBottom,\n paddingLeft,\n paddingRight,\n }),\n [padding, paddingX, paddingY, paddingTop, paddingBottom, paddingLeft, paddingRight],\n )\n\n return (\n <StyledButton\n data-ui=\"Button\"\n {...restProps}\n $mode={mode}\n $radius={radius}\n $tone={tone}\n data-disabled={Boolean(loading || disabled)}\n data-selected={selected ? '' : undefined}\n disabled={Boolean(loading || disabled)}\n ref={ref}\n type={type}\n $width={width}\n >\n {Boolean(loading) && (\n <div className={buttonLoadingBox} data-ui=\"ButtonLoading\">\n <Spinner />\n </div>\n )}\n\n {(IconComponent || text || IconRightComponent) && (\n <Box as=\"span\" {...boxProps}>\n <Flex as=\"span\" justify={justify} gap={spacing}>\n {IconComponent && (\n <Text size={fontSize}>\n {isValidElement(IconComponent) && IconComponent}\n {isValidElementType(IconComponent) && <IconComponent />}\n </Text>\n )}\n\n {text && (\n <Box>\n <Text\n muted={muted}\n align={textAlign}\n size={fontSize}\n textOverflow=\"ellipsis\"\n weight={textWeight ?? button.textWeight}\n >\n {text}\n </Text>\n </Box>\n )}\n\n {IconRightComponent && (\n <Text size={fontSize}>\n {isValidElement(IconRightComponent) && IconRightComponent}\n {isValidElementType(IconRightComponent) && <IconRightComponent />}\n </Text>\n )}\n </Flex>\n </Box>\n )}\n\n {children && (\n <Box as=\"span\" {...boxProps}>\n {children}\n </Box>\n )}\n </StyledButton>\n )\n}\n\n/**\n * @public\n */\nexport const Button: <E extends ElementType = 'button'>(\n props: ButtonProps<E>,\n) => React.JSX.Element = ButtonComponent\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"layer-Bg3aVJDJ.js","names":["as = 'div'","style = EMPTY_RECORD","() => ref.current","() => {\n const becameTopLayer = isTopLayerRef.current !== isTopLayer && isTopLayer\n\n if (becameTopLayer) {\n onActivate?.({activeElement: lastFocusedRef.current})\n }\n\n isTopLayerRef.current = isTopLayer\n }","[isTopLayer, onActivate]","(event: FocusEvent<HTMLDivElement, Element>) => {\n // Call the user-provided onFocus handler if any\n onFocus?.(event)\n\n const rootElement = ref.current\n const target = document.activeElement\n\n if (!isTopLayer || !rootElement || !target) return\n\n if (isHTMLElement(target) && containsOrEqualsElement(rootElement, target)) {\n lastFocusedRef.current = target\n }\n }","useCallback(\n // oxlint-disable-next-line no-unnecessary-type-arguments\n (event: FocusEvent<HTMLDivElement, Element>) => {\n // Call the user-provided onFocus handler if any\n onFocus?.(event)\n\n const rootElement = ref.current\n const target = document.activeElement\n\n if (!isTopLayer || !rootElement || !target) return\n\n if (isHTMLElement(target) && containsOrEqualsElement(rootElement, target)) {\n lastFocusedRef.current = target\n }\n },\n [isTopLayer, onFocus],\n )","clsx(layer, className)","{...style, zIndex}","<Component\n data-ui=\"Layer\"\n {...restProps}\n className={clsx(layer, className)}\n onFocus={handleFocus}\n ref={ref}\n style={{...style, zIndex}}\n >\n {children}\n </Component>","zOffset = 1","<LayerChildren {...restProps}>{children}</LayerChildren>","<LayerProvider zOffset={zOffset}>\n <LayerChildren {...restProps}>{children}</LayerChildren>\n </LayerProvider>","_c"],"sources":["../src/core/utils/layer/layer.css.ts","../src/core/utils/layer/layer.tsx"],"sourcesContent":["import {style} from '@vanilla-extract/css'\n\nexport const layer = style({\n position: 'relative',\n})\n","import {clsx} from 'clsx/lite'\nimport {FocusEvent, useCallback, useEffect, useImperativeHandle, useRef} from 'react'\n\nimport {EMPTY_RECORD} from '../../constants'\nimport {containsOrEqualsElement, isHTMLElement} from '../../helpers/element'\nimport {LayerProvider} from './layerProvider'\nimport {useLayer} from './useLayer'\n\nimport {layer} from './layer.css'\n\n/**\n * @public\n */\nexport interface LayerProps {\n as?: React.ElementType | keyof React.JSX.IntrinsicElements\n /** A callback that fires when the layer becomes the top layer when it was not the top layer before. */\n onActivate?: (props: {activeElement: HTMLElement | null}) => void\n zOffset?: number | number[]\n}\n\ninterface LayerChildrenProps {\n as?: React.ElementType | keyof React.JSX.IntrinsicElements\n onActivate?: LayerProps['onActivate']\n}\n\nfunction LayerChildren(props: LayerChildrenProps & Omit<React.HTMLProps<HTMLDivElement>, 'as'>) {\n const {\n as = 'div',\n children,\n className,\n onActivate,\n onFocus,\n ref: forwardedRef,\n style = EMPTY_RECORD,\n ...restProps\n } = props\n const {zIndex, isTopLayer} = useLayer()\n const lastFocusedRef = useRef<HTMLElement | null>(null)\n const ref = useRef<HTMLDivElement | null>(null)\n const isTopLayerRef = useRef<boolean>(isTopLayer)\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n // When the layer very first mounts, it will be the top layer, but we don't want to fire\n // the callback in that case. We use a ref to track the previous value of isTopLayer to\n // determine if the layer has become the top layer since the last render.\n useEffect(() => {\n const becameTopLayer = isTopLayerRef.current !== isTopLayer && isTopLayer\n\n if (becameTopLayer) {\n onActivate?.({activeElement: lastFocusedRef.current})\n }\n\n isTopLayerRef.current = isTopLayer\n }, [isTopLayer, onActivate])\n\n const handleFocus = useCallback(\n // oxlint-disable-next-line no-unnecessary-type-arguments\n (event: FocusEvent<HTMLDivElement, Element>) => {\n // Call the user-provided onFocus handler if any\n onFocus?.(event)\n\n const rootElement = ref.current\n const target = document.activeElement\n\n if (!isTopLayer || !rootElement || !target) return\n\n if (isHTMLElement(target) && containsOrEqualsElement(rootElement, target)) {\n lastFocusedRef.current = target\n }\n },\n [isTopLayer, onFocus],\n )\n\n // Rendering the polymorphic `as` needs one concrete element type for JSX to\n // type-check the div-flavored props (the same widening styled-components'\n // `as` prop performed here before).\n // oxlint-disable-next-line no-unsafe-type-assertion\n const Component = as as 'div'\n\n return (\n <Component\n data-ui=\"Layer\"\n {...restProps}\n className={clsx(layer, className)}\n onFocus={handleFocus}\n ref={ref}\n style={{...style, zIndex}}\n >\n {children}\n </Component>\n )\n}\n\n/**\n * @public\n */\nexport function Layer(props: LayerProps & Omit<React.HTMLProps<HTMLDivElement>, 'as'>) {\n const {children, zOffset = 1, ...restProps} = props\n\n return (\n <LayerProvider zOffset={zOffset}>\n <LayerChildren {...restProps}>{children}</LayerChildren>\n </LayerProvider>\n )\n}\n"],"mappings":";;;;;;;;ACyBA,SAAS,cAAc,OAAyE;gBAG5F,UACA,WAGK,cAFL,YACA,SAGG,WAPHA,IAMAC;CAEE,AAAA,EAAA,OAAA,+IATE,CACJ,IAAA,IACA,UACA,WACA,YACA,SACA,KAAK,cACL,OAAA,IACA,GAAA,aACE;CARF,IAAA,KAAA,OAAA,KAAA,IAAK,QAALD,IAMA,QAAA,OAAA,KAAA,IAAQ,eAARC,IAGI,EAAC,QAAQ,eAAc,SAAS,GAChC,iBAAiB,OAA2B,IAAI,GAChD,MAAM,OAA8B,IAAI,GACxC,gBAAgB,OAAgB,UAAU,GAEgCC;CAAhF,oDAAsF,WAAA,IAAI,iCAA1F,oBAAkE,cAAcA,EAAiB;CAKvFC,IAAAA,IAQPC;CARH,AACmD,EAAA,QAAA,cAAA,EAAA,QAG/C,cAJM,WAAM;EAOd,AANuB,cAAc,YAAY,cAAc,cAG7D,aAAa,EAAC,eAAe,eAAe,QAAO,CAAC,GAGtD,cAAc,UAAU;CAC1B,GAAG,KAAA,CAAC,YAAY,UAAU,GAPyB,EAAA,MAAA,YAG/C,EAAA,MAAA,gEAJJ,UAAUD,IAQPC,EAAwB;CAIzBC,IAAAA;CAOO,AAAA,EAAA,QAAA,cAAA,EAAA,QALL,WAFF,MAAC,UAA+C;EAE9C,UAAU,KAAK;EAEf,IAAM,cAAc,IAAI,SAClB,SAAS,SAAS;EAExB,AAAK,cAAe,eAAgB,UAEhC,cAAc,MAAM,KAAK,wBAAwB,aAAa,MAAM,MACtE,eAAe,UAAU;CAE7B,GALO,EAAA,MAAA,YALL,EAAA,MAAA;CAJJ,IAAM,cAAcC,IAsBd,YAAY,IAMHC;CAAY,AAAA,EAAA,QAAA,0BAAZ,KAAA,KAAK,OAAO,SAAS,GAAT,EAAA,MAAA;CAGhBC,IAAAA;CAAI,AAAA,EAAA,QAAA,SAAA,EAAA,QAAO,UAAX,KAAA;EAAC,GAAG;EAAO;CAAM,GAAb,EAAA,MAAA,OAAO,EAAA,MAAA;CANpBC,IAAAA;CADF,OACG,EAAA,QAAA,aAAA,EAAA,QAQE,YAAA,EAAA,QAJQ,eAAA,EAAA,QAFL,aAAA,EAAA,QACOF,MAAAA,EAAAA,QAGJC,MANT,KAAA,oBAAC,WAAD;EACE,WAAQ;EACR,GAAI;EACJ,WAAWD;EACX,SAAS;EACJ;EACL,OAAOC;EAEN;CACQ,CAAA,GATV,EAAA,MAAA,WAQE,EAAA,MAAA,UAJQ,EAAA,MAAA,aAFL,EAAA,MAAA,WACOD,EAAAA,MAAAA,IAGJC,EAAAA,MAAAA,8BANTC;AAWJ;;;;AAKA,SAAgB,MAAM,OAAiE;gBAC9E,UAA0B,WAAhBC;CAA6B,AAAA,EAAA,OAAA,0DAAxC,CAAC,UAAU,SAAA,IAAa,GAAA,aAAgB;CAA7B,IAAA,UAAA,OAAA,KAAA,IAAU,IAAVA,IAIbC;CAA+B,AAAA,EAAA,OAAA,YAAA,EAAA,OAAZ,aAAnB,KAAA,oBAAC,eAAD;EAAe,GAAI;EAAY;CAAwB,CAAA,GAAxB,EAAA,KAAA,UAAZ,EAAA,KAAA;CADrBC,IAAAA;CADF,OAEID,EAAAA,OAAAA,MAAAA,EAAAA,OADsB,WAAxB,KAAA,oBAAC,eAAD;EAAwB;EACtBA,UAAAA;CACa,CAAA,GADbA,EAAAA,KAAAA,IADsB,EAAA,KAAA,iCAAxBC;AAIJ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stack-DpKdobwf.js","names":["<span className={spanWithTextOverflow}>{props.children}</span>","children","_c","accent = false","muted = false","size = 2","<SpanWithTextOverflow>{children}</SpanWithTextOverflow>","_getArrayProp(align)","_getArrayProp(size)","<span>{children}</span>","<StyledText\n data-ui=\"Text\"\n {...restProps}\n $accent={accent}\n $align={_getArrayProp(align)}\n $muted={muted}\n ref={ref}\n $size={_getArrayProp(size)}\n $weight={weight}\n >\n <span>{children}</span>\n </StyledText>","_c","_getArrayProp(gap)","<StyledStack\n data-as={typeof as === 'string' ? as : undefined}\n data-ui=\"Stack\"\n {...restProps}\n $space={_getArrayProp(gap)}\n forwardedAs={as}\n ref={ref}\n />","typeof as === 'string' ? as : undefined","_c","\"gridTemplateColumns\"","\"gridAutoRows\""],"sources":["../src/core/styles/font/fontColorStyle.ts","../src/core/styles/font/textAlignStyle.ts","../src/core/utils/spanWithTextOverflow.css.ts","../src/core/utils/spanWithTextOverflow.tsx","../src/core/primitives/text/styles.ts","../src/core/primitives/text/text.tsx","../src/core/primitives/stack/styles.ts","../src/core/primitives/stack/stack.tsx"],"sourcesContent":["import {CSSObject} from '../../../theme/system/css'\n\n/**\n * @internal\n */\nexport function fontColorStyle(props: {\n $accent?: boolean\n $muted?: boolean\n}): CSSObject | undefined {\n if (props.$muted) return {color: 'var(--card-muted-fg-color)'}\n if (props.$accent) return {color: 'var(--card-accent-fg-color)'}\n return undefined\n}\n","import {CSSObject} from '../../../theme/system/css'\nimport {getTheme_v2} from '../../../theme/versioning/getTheme_v2'\nimport {_responsive} from '../helpers'\nimport {ThemeProps} from '../types'\nimport {ResponsiveTextAlignStyleProps} from './types'\n\n/**\n * Get responsive text align styles.\n * @internal\n */\nexport function responsiveTextAlignStyle(\n props: ResponsiveTextAlignStyleProps & ThemeProps,\n): CSSObject[] {\n const {media} = getTheme_v2(props.theme)\n\n return _responsive(media, props.$align, (textAlign) => {\n return {textAlign}\n })\n}\n","import {style} from '@vanilla-extract/css'\n\nexport const spanWithTextOverflow = style({\n display: 'block',\n whiteSpace: 'nowrap',\n textOverflow: 'ellipsis',\n overflow: ['hidden', 'clip'],\n})\n","import {spanWithTextOverflow} from './spanWithTextOverflow.css'\n\n/** @internal */\nexport function SpanWithTextOverflow(props: {children?: React.ReactNode}): React.JSX.Element {\n return <span className={spanWithTextOverflow}>{props.children}</span>\n}\n","import {css} from 'styled-components'\n\nimport {getTheme_v2} from '../../../theme/versioning/getTheme_v2'\nimport {_fontBase} from '../../styles/font/responsiveFont'\nimport {ThemeProps} from '../../styles/types'\n\nexport function textBaseStyle(props: ThemeProps): ReturnType<typeof css> {\n const {font} = getTheme_v2(props.theme)\n\n return css`\n ${_fontBase('text', props)}\n\n color: var(--card-fg-color);\n\n & code {\n font-family: ${font.code.family};\n border-radius: 1px;\n background-color: var(--card-code-bg-color);\n color: var(--card-code-fg-color);\n }\n\n & a {\n text-decoration: none;\n border-radius: 1px;\n color: var(--card-link-color);\n outline: none;\n\n @media (hover: hover) {\n &:hover {\n text-decoration: underline;\n }\n }\n\n &:focus {\n box-shadow:\n 0 0 0 1px var(--card-bg-color),\n 0 0 0 3px var(--card-focus-ring-color);\n }\n\n &:focus:not(:focus-visible) {\n box-shadow: none;\n }\n }\n\n & strong {\n font-weight: ${font.text.weights.bold};\n }\n\n & svg {\n /* Certain popular CSS libraries changes the defaults for SVG display */\n /* Make sure SVGs are rendered as inline elements */\n display: inline;\n /* ...and aren't squeezed by resets that set max-width: 100% */\n max-width: unset;\n }\n\n & [data-sanity-icon] {\n vertical-align: baseline;\n color: var(--card-icon-color);\n\n & path {\n vector-effect: non-scaling-stroke !important;\n }\n }\n `\n}\n","import {styled} from 'styled-components'\n\nimport {ThemeFontWeightKey} from '../../../theme/system/font'\nimport {fontColorStyle} from '../../styles/font/fontColorStyle'\nimport {_fontWeight, _responsiveFontSize} from '../../styles/font/responsiveFont'\nimport {responsiveTextAlignStyle} from '../../styles/font/textAlignStyle'\nimport {ResponsiveFontSizeStyleProps, ResponsiveFontStyleProps} from '../../styles/font/types'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {ElementType, Props} from '../../types/component'\nimport {TextAlign} from '../../types/text'\nimport {SpanWithTextOverflow} from '../../utils/spanWithTextOverflow'\nimport {textBaseStyle} from './styles'\n\n/**\n * @public\n */\nexport interface TextOwnProps {\n accent?: boolean\n align?: TextAlign | TextAlign[]\n /** When `true` the text color will be muted. */\n muted?: boolean\n size?: number | number[]\n /**\n * Controls how overflowing text is treated.\n * Use `textOverflow=\"ellipsis\"` to render text as a single line which is concatenated with a `…` symbol.\n * @beta\n */\n textOverflow?: 'ellipsis'\n weight?: ThemeFontWeightKey\n}\n\n/**\n * @public\n */\nexport type TextProps<E extends ElementType = 'div'> = Props<TextOwnProps, E>\n\nconst TextBase = styled.div(textBaseStyle)\n\nconst TextSize = styled(TextBase)<ResponsiveFontSizeStyleProps>((props) =>\n _responsiveFontSize('text', props),\n)\n\nconst StyledText = styled(TextSize)<ResponsiveFontStyleProps>(\n (props) => _fontWeight('text', props),\n responsiveTextAlignStyle,\n fontColorStyle,\n)\n\nfunction TextComponent(\n props: TextOwnProps & {as?: ElementType} & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'size'>,\n) {\n const {\n accent = false,\n align,\n children: childrenProp,\n muted = false,\n ref,\n size = 2,\n textOverflow,\n weight,\n ...restProps\n } = props\n\n let children = childrenProp\n\n if (textOverflow === 'ellipsis') {\n children = <SpanWithTextOverflow>{children}</SpanWithTextOverflow>\n }\n\n return (\n <StyledText\n data-ui=\"Text\"\n {...restProps}\n $accent={accent}\n $align={_getArrayProp(align)}\n $muted={muted}\n ref={ref}\n $size={_getArrayProp(size)}\n $weight={weight}\n >\n <span>{children}</span>\n </StyledText>\n )\n}\n\n/**\n * The `Text` component is an agile, themed typographic element.\n *\n * @public\n */\nexport const Text: <E extends ElementType = 'div'>(props: TextProps<E>) => React.JSX.Element =\n TextComponent\n","import {CSSObject} from '../../../theme/system/css'\nimport {getTheme_v2} from '../../../theme/versioning/getTheme_v2'\nimport {_responsive, rem} from '../../styles/helpers'\nimport {ThemeProps} from '../../styles/types'\n\nexport interface ResponsiveStackSpaceStyleProps {\n $space: number[]\n}\n\nconst BASE_STYLE: CSSObject = {\n '&&:not([hidden])': {\n display: 'grid',\n },\n '&[data-as=\"ul\"],&[data-as=\"ol\"]': {\n listStyle: 'none',\n },\n 'gridTemplateColumns': 'minmax(0, 1fr)',\n 'gridAutoRows': 'min-content',\n}\n\nexport function stackBaseStyle(): CSSObject {\n return BASE_STYLE\n}\n\nexport function responsiveStackSpaceStyle(\n props: ResponsiveStackSpaceStyleProps & ThemeProps,\n): CSSObject[] {\n const {media, space} = getTheme_v2(props.theme)\n\n return _responsive(media, props.$space, (spaceIndex) => ({\n // oxlint-disable-next-line no-deprecated\n gridGap: rem(space[spaceIndex]),\n }))\n}\n","import {styled} from 'styled-components'\n\nimport {_getArrayProp} from '../../styles/helpers'\nimport {ElementType, Props} from '../../types/component'\nimport {Box, BoxOwnProps} from '../box/box'\nimport {responsiveStackSpaceStyle, ResponsiveStackSpaceStyleProps, stackBaseStyle} from './styles'\n\n/**\n * @public\n */\nexport interface StackOwnProps extends BoxOwnProps {\n gap?: number | number[]\n /**\n * @deprecated Use `gap` instead.\n */\n space?: never\n}\n\n/**\n * @public\n */\nexport type StackProps<E extends ElementType = 'div'> = Props<StackOwnProps, E>\n\nconst StyledStack = styled(Box)<ResponsiveStackSpaceStyleProps>(\n stackBaseStyle,\n responsiveStackSpaceStyle,\n)\n\nfunction StackComponent(\n props: StackOwnProps & {as?: ElementType} & Omit<React.HTMLProps<HTMLDivElement>, 'as'>,\n) {\n const {as, gap, ref, ...restProps} = props\n\n return (\n <StyledStack\n data-as={typeof as === 'string' ? as : undefined}\n data-ui=\"Stack\"\n {...restProps}\n $space={_getArrayProp(gap)}\n forwardedAs={as}\n ref={ref}\n />\n )\n}\n\n/**\n * The `Stack` component is used to place elements on top of each other.\n *\n * @public\n */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const Stack = StackComponent as unknown as <E extends ElementType = 'div'>(\n props: StackProps<E>,\n) => React.JSX.Element\n"],"mappings":"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"}
|