@sanity/ui 4.0.7 → 4.1.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.
Files changed (41) hide show
  1. package/dist/{arrow-CL8xmdbg.js → arrow-C6TlkggA.js} +5 -4
  2. package/dist/arrow-C6TlkggA.js.map +1 -0
  3. package/dist/autocomplete.d.ts.map +1 -1
  4. package/dist/autocomplete.js +35 -39
  5. package/dist/autocomplete.js.map +1 -1
  6. package/dist/breadcrumbs.d.ts.map +1 -1
  7. package/dist/breadcrumbs.js +28 -30
  8. package/dist/breadcrumbs.js.map +1 -1
  9. package/dist/{button-DQH2KIbq.js → button-D3iEd7Je.js} +7 -7
  10. package/dist/button-D3iEd7Je.js.map +1 -0
  11. package/dist/button-dnqMFkWg.d.ts.map +1 -1
  12. package/dist/{hotkeys-BPlacpG8.js → hotkeys-Bi6Q5963.js} +26 -26
  13. package/dist/hotkeys-Bi6Q5963.js.map +1 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +310 -344
  16. package/dist/index.js.map +1 -1
  17. package/dist/layer-BK7xWHcE.js +61 -0
  18. package/dist/layer-BK7xWHcE.js.map +1 -0
  19. package/dist/layer-ChlP9Ik6.d.ts.map +1 -1
  20. package/dist/menu.d.ts.map +1 -1
  21. package/dist/menu.js +46 -34
  22. package/dist/menu.js.map +1 -1
  23. package/dist/{popover-CEbjxiPx.js → popover-CdBTZDvj.js} +2 -2
  24. package/dist/{popover-CEbjxiPx.js.map → popover-CdBTZDvj.js.map} +1 -1
  25. package/dist/popover.js +1 -1
  26. package/dist/styles.css +408 -0
  27. package/dist/{textInput-B6ZZJSOj.js → textInput-Bu3QuADZ.js} +36 -48
  28. package/dist/textInput-Bu3QuADZ.js.map +1 -0
  29. package/dist/toast.d.ts.map +1 -1
  30. package/dist/toast.js +77 -73
  31. package/dist/toast.js.map +1 -1
  32. package/dist/tooltip.d.ts.map +1 -1
  33. package/dist/tooltip.js +87 -90
  34. package/dist/tooltip.js.map +1 -1
  35. package/package.json +6 -5
  36. package/dist/arrow-CL8xmdbg.js.map +0 -1
  37. package/dist/button-DQH2KIbq.js.map +0 -1
  38. package/dist/hotkeys-BPlacpG8.js.map +0 -1
  39. package/dist/layer-DGn7KJIB.js +0 -61
  40. package/dist/layer-DGn7KJIB.js.map +0 -1
  41. package/dist/textInput-B6ZZJSOj.js.map +0 -1
@@ -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]","{\n originX,\n originY,\n willChange: animate ? 'transform' : undefined,\n ...style,\n }","animate ? 'transform' : undefined","useMemo(\n () => ({\n originX,\n 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 )","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 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","_animate = false","arrowProp = false","padding = 2","placementProp = 'bottom'","radius = 2","shadow = 2","_getArrayProp(fallbackPlacementsProp)","() => ref.current","{\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n rootBoundary,\n }","{reference: referenceElement}","{\n middleware,\n placement: placementProp,\n whileElementsMounted: autoUpdate,\n elements: {reference: referenceElement},\n }","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)\n childProp?.props?.onBlur?.(e)\n }","props","useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(false)\n childProp?.props?.onBlur?.(e)\n },\n [childProp?.props, handleIsOpenChange],\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)\n childProp?.props?.onMouseLeave?.(e)\n }","useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false)\n childProp?.props?.onMouseLeave?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )","{handleIsOpenChange, referenceElement, showTooltip, isInsideGroup}","() => {\n if (disabled && showTooltip) handleIsOpenChange(false)\n }","[disabled, handleIsOpenChange, showTooltip]","() => {\n if (!content && showTooltip) handleIsOpenChange(false)\n }","[content, handleIsOpenChange, showTooltip]","() => {\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 handleIsOpenChange(false, true)\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 }","[handleIsOpenChange, showTooltip]","() => {\n // Get the maximum tooltip width (sans tooltip padding)\n // Tooltip width should never exceed the width of either any supplied boundary or portal element.\n // If both portal and boundary elements are provided, use the smaller width of the two.\n const availableWidths = [\n ...(boundaryElement ? [boundaryElement.offsetWidth] : []),\n portalElement?.offsetWidth || document.body.offsetWidth,\n ]\n\n // oxlint-disable-next-line react/set-state-in-effect\n setTooltipMaxWidth(Math.min(...availableWidths) - DEFAULT_TOOLTIP_PADDING * 2)\n }","offsetWidth","[boundaryElement, portalElement]","(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 refs.setFloating(node)\n }","useCallback(\n (node: HTMLDivElement | null) => {\n ref.current = node\n refs.setFloating(node)\n },\n [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: setReferenceElement,\n })\n }, [\n childProp,\n handleBlur,\n handleClick,\n handleContextMenu,\n handleFocus,\n handleMouseEnter,\n handleMouseLeave,\n ])","cloneElement(childProp, {\n onBlur: handleBlur,\n onFocus: handleFocus,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n onContextMenu: handleContextMenu,\n ref: setReferenceElement,\n })","childProp ? getElementRef(childProp) : null","() => referenceElement","[\n referenceElement,\n ]","<></>","{\n ...floatingStyles,\n maxWidth: tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : undefined,\n }","tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : undefined","<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>","<StyledTooltip\n data-ui=\"Tooltip\"\n {...restProps}\n ref={setFloating}\n style={{\n ...floatingStyles,\n maxWidth: tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : undefined,\n }}\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 </StyledTooltip>","portalProp ? (\n <Portal __unstable_name={typeof portalProp === 'string' ? portalProp : undefined}>\n {tooltip}\n </Portal>\n ) : (\n tooltip\n )","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 {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 referred element */}\n {child}\n </>","{\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n rootBoundary,\n}: {\n animate: boolean\n arrowProp: boolean\n arrowRef: React.RefObject<HTMLDivElement | null>\n boundaryElement: HTMLElement | null\n fallbackPlacements: Placement[]\n rootBoundary: RootBoundary\n}","flip({\n boundary: boundaryElement || undefined,\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\n })","boundaryElement || undefined","offset({mainAxis: DEFAULT_TOOLTIP_DISTANCE})","shift({\n boundary: boundaryElement || undefined,\n rootBoundary,\n padding: DEFAULT_TOOLTIP_PADDING,\n })","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 boundary: boundaryElement || undefined,\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\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(\n shift({\n boundary: boundaryElement || undefined,\n rootBoundary,\n padding: DEFAULT_TOOLTIP_PADDING,\n }),\n )\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 `@sanity/ui/size` and `shift` middleware.\n if (animate) {\n ret.push(origin)\n }\n\n return ret\n }, [animate, arrowProp, arrowRef, boundaryElement, fallbackPlacements, rootBoundary])","{\n handleIsOpenChange,\n referenceElement,\n showTooltip,\n isInsideGroup,\n}: {\n handleIsOpenChange: (open: boolean, immediate?: boolean) => void\n referenceElement: HTMLElement | null\n showTooltip: boolean\n isInsideGroup: boolean\n}","(target: EventTarget | null, teardown: () => void) => {\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 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 // oxlint-disable-next-line react/exhaustive-effect-dependencies\n }","[isInsideGroup, showTooltip]","{\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"],"sources":["../src/core/hooks/useDelayedState.ts","../src/core/primitives/tooltip/constants.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 {motion} from 'motion/react'\nimport React, {CSSProperties, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {ThemeColorSchemeKey} from '../../../theme/system/color/_system'\nimport {POPOVER_MOTION_PROPS} from '../../constants'\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\nconst MotionCard = styled(motion.create(Card))`\n will-change: transform;\n`\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 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 originX,\n 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 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 flip,\n type Middleware,\n offset,\n type RootBoundary,\n shift,\n useFloating,\n} from '@floating-ui/react-dom'\nimport {\n Activity,\n cloneElement,\n useCallback,\n useEffect,\n useId,\n useImperativeHandle,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport {styled} from 'styled-components'\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 {usePrefersReducedMotion} from '../../hooks/usePrefersReducedMotion'\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 {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\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\nconst StyledTooltip = styled(Layer)`\n pointer-events: none;\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 [referenceElement, setReferenceElement] = useState<HTMLElement | null>(null)\n const arrowRef = useRef<HTMLDivElement | null>(null)\n const rootBoundary: RootBoundary = 'viewport'\n const [tooltipMaxWidth, setTooltipMaxWidth] = useState(0)\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n const portal = usePortal()\n const portalElement =\n typeof portalProp === 'string' ? portal.elements?.[portalProp] || null : portal.element\n\n const middleware = useMiddleware({\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n rootBoundary,\n })\n\n const {floatingStyles, placement, middlewareData, refs, update} = useFloating({\n middleware,\n placement: placementProp,\n whileElementsMounted: autoUpdate,\n elements: {reference: referenceElement},\n })\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 const showTooltip = 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 const handleBlur = useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(false)\n childProp?.props?.onBlur?.(e)\n },\n [childProp?.props, handleIsOpenChange],\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)\n childProp?.props?.onMouseLeave?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )\n\n // Handle closing the tooltip when the mouse leaves the referenceElement\n useCloseOnMouseLeave({handleIsOpenChange, referenceElement, showTooltip, isInsideGroup})\n\n // Close when `disabled` changes to `true`\n useEffect(() => {\n if (disabled && showTooltip) handleIsOpenChange(false)\n }, [disabled, handleIsOpenChange, showTooltip])\n\n // Close when `content` changes to falsy\n useEffect(() => {\n if (!content && showTooltip) handleIsOpenChange(false)\n }, [content, handleIsOpenChange, showTooltip])\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 handleIsOpenChange(false, true)\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 }, [handleIsOpenChange, showTooltip])\n\n // // Set the max width of the tooltip based on boundaries and portals\n useLayoutEffect(() => {\n // Get the maximum tooltip width (sans tooltip padding)\n // Tooltip width should never exceed the width of either any supplied boundary or portal element.\n // If both portal and boundary elements are provided, use the smaller width of the two.\n const availableWidths = [\n ...(boundaryElement ? [boundaryElement.offsetWidth] : []),\n portalElement?.offsetWidth || document.body.offsetWidth,\n ]\n\n // oxlint-disable-next-line react/set-state-in-effect\n setTooltipMaxWidth(Math.min(...availableWidths) - DEFAULT_TOOLTIP_PADDING * 2)\n }, [boundaryElement, portalElement])\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 refs.setFloating(node)\n },\n [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: setReferenceElement,\n })\n }, [\n childProp,\n handleBlur,\n handleClick,\n handleContextMenu,\n handleFocus,\n handleMouseEnter,\n handleMouseLeave,\n ])\n\n // If there's a child then we need to set the reference element to the cloned child ref\n // and if child changes we make sure to update or remove the reference element.\n useImperativeHandle(childProp ? getElementRef(childProp) : null, () => referenceElement, [\n referenceElement,\n ])\n\n if (!child) return <></>\n\n if (disabled) return child\n\n const tooltip = (\n <StyledTooltip\n data-ui=\"Tooltip\"\n {...restProps}\n ref={setFloating}\n style={{\n ...floatingStyles,\n maxWidth: tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : undefined,\n }}\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 </StyledTooltip>\n )\n\n const tooltipNode = portalProp ? (\n <Portal __unstable_name={typeof portalProp === 'string' ? portalProp : undefined}>\n {tooltip}\n </Portal>\n ) : (\n tooltip\n )\n\n return (\n <>\n {/* the tooltip */}\n {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 referred element */}\n {child}\n </>\n )\n}\n\nfunction useMiddleware({\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n rootBoundary,\n}: {\n animate: boolean\n arrowProp: boolean\n arrowRef: React.RefObject<HTMLDivElement | null>\n boundaryElement: HTMLElement | null\n fallbackPlacements: Placement[]\n rootBoundary: RootBoundary\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 boundary: boundaryElement || undefined,\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\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(\n shift({\n boundary: boundaryElement || undefined,\n rootBoundary,\n padding: DEFAULT_TOOLTIP_PADDING,\n }),\n )\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 `@sanity/ui/size` and `shift` middleware.\n if (animate) {\n ret.push(origin)\n }\n\n return ret\n }, [animate, arrowProp, arrowRef, boundaryElement, fallbackPlacements, 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 referenceElement,\n showTooltip,\n isInsideGroup,\n}: {\n handleIsOpenChange: (open: boolean, immediate?: boolean) => void\n referenceElement: HTMLElement | null\n showTooltip: boolean\n isInsideGroup: boolean\n}) {\n // Since we don't want the `mouseevent` events to be attached and removed if the `referenceElement` is changed\n // we use a \"effect event\" (https://19.react.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events)\n // in order to always see the latest `referenceElement` value inside the event handler itself.\n const onMouseMove = useEffectEvent((target: EventTarget | null, teardown: () => void) => {\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 // oxlint-disable-next-line react/exhaustive-effect-dependencies\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]","{\n originX,\n originY,\n willChange: animate ? 'transform' : undefined,\n ...style,\n }","animate ? 'transform' : undefined","useMemo(\n () => ({\n originX,\n 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","_animate = false","arrowProp = false","placementProp = 'bottom'","padding = 2","radius = 2","shadow = 2","_getArrayProp(fallbackPlacementsProp)","() => ref.current","{\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n rootBoundary,\n }","{reference: referenceElement}","{\n middleware,\n placement: placementProp,\n whileElementsMounted: autoUpdate,\n elements: {reference: referenceElement},\n }","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)\n childProp?.props?.onBlur?.(e)\n }","props","useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(false)\n childProp?.props?.onBlur?.(e)\n },\n [childProp?.props, handleIsOpenChange],\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)\n childProp?.props?.onMouseLeave?.(e)\n }","useCallback(\n (e: MouseEvent) => {\n handleIsOpenChange(false)\n childProp?.props?.onMouseLeave?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )","{handleIsOpenChange, referenceElement, showTooltip, isInsideGroup}","() => {\n if (disabled && showTooltip) handleIsOpenChange(false)\n }","[disabled, handleIsOpenChange, showTooltip]","() => {\n if (!content && showTooltip) handleIsOpenChange(false)\n }","[content, handleIsOpenChange, showTooltip]","() => {\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 handleIsOpenChange(false, true)\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 }","[handleIsOpenChange, showTooltip]","() => {\n // Get the maximum tooltip width (sans tooltip padding)\n // Tooltip width should never exceed the width of either any supplied boundary or portal element.\n // If both portal and boundary elements are provided, use the smaller width of the two.\n const availableWidths = [\n ...(boundaryElement ? [boundaryElement.offsetWidth] : []),\n portalElement?.offsetWidth || document.body.offsetWidth,\n ]\n\n // oxlint-disable-next-line react/set-state-in-effect\n setTooltipMaxWidth(Math.min(...availableWidths) - DEFAULT_TOOLTIP_PADDING * 2)\n }","offsetWidth","[boundaryElement, portalElement]","(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 refs.setFloating(node)\n }","useCallback(\n (node: HTMLDivElement | null) => {\n ref.current = node\n refs.setFloating(node)\n },\n [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: setReferenceElement,\n })\n }, [\n childProp,\n handleBlur,\n handleClick,\n handleContextMenu,\n handleFocus,\n handleMouseEnter,\n handleMouseLeave,\n ])","cloneElement(childProp, {\n onBlur: handleBlur,\n onFocus: handleFocus,\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n onClick: handleClick,\n onContextMenu: handleContextMenu,\n ref: setReferenceElement,\n })","childProp ? getElementRef(childProp) : null","() => referenceElement","[\n referenceElement,\n ]","<></>","{\n ...floatingStyles,\n maxWidth: tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : undefined,\n }","tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : undefined","<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={{\n ...floatingStyles,\n maxWidth: tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : undefined,\n }}\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 ? (\n <Portal __unstable_name={typeof portalProp === 'string' ? portalProp : undefined}>\n {tooltip}\n </Portal>\n ) : (\n tooltip\n )","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 {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 referred element */}\n {child}\n </>","{\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n rootBoundary,\n}: {\n animate: boolean\n arrowProp: boolean\n arrowRef: React.RefObject<HTMLDivElement | null>\n boundaryElement: HTMLElement | null\n fallbackPlacements: Placement[]\n rootBoundary: RootBoundary\n}","flip({\n boundary: boundaryElement || undefined,\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\n })","boundaryElement || undefined","offset({mainAxis: DEFAULT_TOOLTIP_DISTANCE})","shift({\n boundary: boundaryElement || undefined,\n rootBoundary,\n padding: DEFAULT_TOOLTIP_PADDING,\n })","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 boundary: boundaryElement || undefined,\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\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(\n shift({\n boundary: boundaryElement || undefined,\n rootBoundary,\n padding: DEFAULT_TOOLTIP_PADDING,\n }),\n )\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 `@sanity/ui/size` and `shift` middleware.\n if (animate) {\n ret.push(origin)\n }\n\n return ret\n }, [animate, arrowProp, arrowRef, boundaryElement, fallbackPlacements, rootBoundary])","{\n handleIsOpenChange,\n referenceElement,\n showTooltip,\n isInsideGroup,\n}: {\n handleIsOpenChange: (open: boolean, immediate?: boolean) => void\n referenceElement: HTMLElement | null\n showTooltip: boolean\n isInsideGroup: boolean\n}","(target: EventTarget | null, teardown: () => void) => {\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 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 // oxlint-disable-next-line react/exhaustive-effect-dependencies\n }","[isInsideGroup, showTooltip]","{\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"],"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 {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 originX,\n 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 flip,\n type Middleware,\n offset,\n type RootBoundary,\n shift,\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 useState,\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 {usePrefersReducedMotion} from '../../hooks/usePrefersReducedMotion'\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 {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 [referenceElement, setReferenceElement] = useState<HTMLElement | null>(null)\n const arrowRef = useRef<HTMLDivElement | null>(null)\n const rootBoundary: RootBoundary = 'viewport'\n const [tooltipMaxWidth, setTooltipMaxWidth] = useState(0)\n\n useImperativeHandle<HTMLDivElement | null, HTMLDivElement | null>(forwardedRef, () => ref.current)\n\n const portal = usePortal()\n const portalElement =\n typeof portalProp === 'string' ? portal.elements?.[portalProp] || null : portal.element\n\n const middleware = useMiddleware({\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n rootBoundary,\n })\n\n const {floatingStyles, placement, middlewareData, refs, update} = useFloating({\n middleware,\n placement: placementProp,\n whileElementsMounted: autoUpdate,\n elements: {reference: referenceElement},\n })\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 const showTooltip = 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 const handleBlur = useCallback(\n (e: FocusEvent) => {\n handleIsOpenChange(false)\n childProp?.props?.onBlur?.(e)\n },\n [childProp?.props, handleIsOpenChange],\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)\n childProp?.props?.onMouseLeave?.(e)\n },\n [childProp?.props, handleIsOpenChange],\n )\n\n // Handle closing the tooltip when the mouse leaves the referenceElement\n useCloseOnMouseLeave({handleIsOpenChange, referenceElement, showTooltip, isInsideGroup})\n\n // Close when `disabled` changes to `true`\n useEffect(() => {\n if (disabled && showTooltip) handleIsOpenChange(false)\n }, [disabled, handleIsOpenChange, showTooltip])\n\n // Close when `content` changes to falsy\n useEffect(() => {\n if (!content && showTooltip) handleIsOpenChange(false)\n }, [content, handleIsOpenChange, showTooltip])\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 handleIsOpenChange(false, true)\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 }, [handleIsOpenChange, showTooltip])\n\n // // Set the max width of the tooltip based on boundaries and portals\n useLayoutEffect(() => {\n // Get the maximum tooltip width (sans tooltip padding)\n // Tooltip width should never exceed the width of either any supplied boundary or portal element.\n // If both portal and boundary elements are provided, use the smaller width of the two.\n const availableWidths = [\n ...(boundaryElement ? [boundaryElement.offsetWidth] : []),\n portalElement?.offsetWidth || document.body.offsetWidth,\n ]\n\n // oxlint-disable-next-line react/set-state-in-effect\n setTooltipMaxWidth(Math.min(...availableWidths) - DEFAULT_TOOLTIP_PADDING * 2)\n }, [boundaryElement, portalElement])\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 refs.setFloating(node)\n },\n [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: setReferenceElement,\n })\n }, [\n childProp,\n handleBlur,\n handleClick,\n handleContextMenu,\n handleFocus,\n handleMouseEnter,\n handleMouseLeave,\n ])\n\n // If there's a child then we need to set the reference element to the cloned child ref\n // and if child changes we make sure to update or remove the reference element.\n useImperativeHandle(childProp ? getElementRef(childProp) : null, () => referenceElement, [\n referenceElement,\n ])\n\n if (!child) return <></>\n\n if (disabled) return child\n\n const tooltip = (\n <Layer\n data-ui=\"Tooltip\"\n {...restProps}\n className={clsx(tooltipLayer, restProps.className)}\n ref={setFloating}\n style={{\n ...floatingStyles,\n maxWidth: tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : undefined,\n }}\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 ? (\n <Portal __unstable_name={typeof portalProp === 'string' ? portalProp : undefined}>\n {tooltip}\n </Portal>\n ) : (\n tooltip\n )\n\n return (\n <>\n {/* the tooltip */}\n {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 referred element */}\n {child}\n </>\n )\n}\n\nfunction useMiddleware({\n animate,\n arrowProp,\n arrowRef,\n boundaryElement,\n fallbackPlacements,\n rootBoundary,\n}: {\n animate: boolean\n arrowProp: boolean\n arrowRef: React.RefObject<HTMLDivElement | null>\n boundaryElement: HTMLElement | null\n fallbackPlacements: Placement[]\n rootBoundary: RootBoundary\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 boundary: boundaryElement || undefined,\n fallbackPlacements,\n padding: DEFAULT_TOOLTIP_PADDING,\n rootBoundary,\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(\n shift({\n boundary: boundaryElement || undefined,\n rootBoundary,\n padding: DEFAULT_TOOLTIP_PADDING,\n }),\n )\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 `@sanity/ui/size` and `shift` middleware.\n if (animate) {\n ret.push(origin)\n }\n\n return ret\n }, [animate, arrowProp, arrowRef, boundaryElement, fallbackPlacements, 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 referenceElement,\n showTooltip,\n isInsideGroup,\n}: {\n handleIsOpenChange: (open: boolean, immediate?: boolean) => void\n referenceElement: HTMLElement | null\n showTooltip: boolean\n isInsideGroup: boolean\n}) {\n // Since we don't want the `mouseevent` events to be attached and removed if the `referenceElement` is changed\n // we use a \"effect event\" (https://19.react.dev/learn/separating-events-from-effects#reading-latest-props-and-state-with-effect-events)\n // in order to always see the latest `referenceElement` value inside the event handler itself.\n const onMouseMove = useEffectEvent((target: EventTarget | null, teardown: () => void) => {\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 // oxlint-disable-next-line react/exhaustive-effect-dependencies\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.0.7",
3
+ "version": "4.1.0",
4
4
  "keywords": [
5
5
  "components",
6
6
  "design-system",
@@ -51,6 +51,7 @@
51
51
  "@floating-ui/react-dom": "^2.1.9",
52
52
  "@sanity/color": "^3.0.8",
53
53
  "@sanity/icons": "^5.2.1",
54
+ "clsx": "^2.1.1",
54
55
  "csstype": "^3.2.3",
55
56
  "motion": "^13.1.1",
56
57
  "react-is": "^19.2.8",
@@ -58,11 +59,11 @@
58
59
  "use-effect-event": "^2.0.4"
59
60
  },
60
61
  "devDependencies": {
61
- "@sanity/tsdown-config": "^0.27.0",
62
- "@sanity/vanilla-extract-vite-plugin": "^0.2.16",
62
+ "@sanity/tsdown-config": "^0.27.1",
63
+ "@sanity/vanilla-extract-vite-plugin": "^0.2.17",
63
64
  "@testing-library/dom": "^10.4.1",
64
65
  "@testing-library/jest-dom": "^7.0.1",
65
- "@testing-library/react": "^16.3.2",
66
+ "@testing-library/react": "^16.3.3",
66
67
  "@testing-library/user-event": "^14.6.6",
67
68
  "@types/node": "^24.13.3",
68
69
  "@types/react": "^19.2.18",
@@ -70,7 +71,7 @@
70
71
  "@types/react-is": "^19.2.0",
71
72
  "@vanilla-extract/css": "^1.21.2",
72
73
  "jsdom": "^30.0.1",
73
- "oxc-transform-react": "^0.147.0",
74
+ "oxc-transform-react": "^0.148.0",
74
75
  "react": "^19.2.8",
75
76
  "react-dom": "^19.2.8",
76
77
  "rimraf": "^5.0.5",
@@ -1 +0,0 @@
1
- {"version":3,"file":"arrow-CL8xmdbg.js","names":["createPortal(children, portalElement)","radius = 0","compileCommands(cmds)","<mask id=\"stroke-mask\">\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>","<StrokePath d={strokePath} mask=\"url(#stroke-mask)\" strokeWidth={strokeWidth * 2} />","strokeWidth * 2","<ShapePath d={fillPath} />","<svg width={w} height={w} viewBox={`0 0 ${w} ${w}`}>\n <mask id=\"stroke-mask\">\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>\n <StrokePath d={strokePath} mask=\"url(#stroke-mask)\" strokeWidth={strokeWidth * 2} />\n <ShapePath d={fillPath} />\n </svg>","`0 0 ${w} ${w}`","<StyledArrow {...restProps} $w={w} ref={ref}>\n <svg width={w} height={w} viewBox={`0 0 ${w} ${w}`}>\n <mask id=\"stroke-mask\">\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>\n <StrokePath d={strokePath} mask=\"url(#stroke-mask)\" strokeWidth={strokeWidth * 2} />\n <ShapePath d={fillPath} />\n </svg>\n </StyledArrow>"],"sources":["../src/core/utils/boundaryElement/boundaryElementContext.ts","../src/core/utils/boundaryElement/useBoundaryElement.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.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 {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 {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 =\n (name ? portal.elements && portal.elements[name] : portal.element) || portal.elements?.default\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 {HTMLProps} from 'react'\nimport {css, styled} from 'styled-components'\n\nimport {useTheme_v2} from '../../theme/useTheme'\nimport {compileCommands, getRoundedCommands, Point} from './cmds'\n\nconst StyledArrow = styled.div<{$w: number}>(\n ({$w: w}) => css`\n position: absolute;\n width: ${w}px;\n height: ${w}px;\n\n :empty + & {\n display: none;\n }\n\n & > svg {\n display: block;\n line-height: 0;\n transform-origin: ${w / 2}px ${w / 2}px;\n }\n\n [data-placement^='top'] > & {\n bottom: -${w}px;\n\n & > svg {\n transform: rotate(0);\n }\n }\n\n [data-placement^='right'] > & {\n left: -${w}px;\n\n & > svg {\n transform: rotate(90deg);\n }\n }\n\n [data-placement^='left'] > & {\n right: -${w}px;\n\n & > svg {\n transform: rotate(-90deg);\n }\n }\n\n [data-placement^='bottom'] > & {\n top: -${w}px;\n\n & > svg {\n transform: rotate(180deg);\n }\n }\n `,\n)\n\nconst StrokePath = styled.path`\n stroke: var(--card-shadow-outline-color);\n`\n\nconst ShapePath = styled.path`\n fill: var(--card-bg-color);\n`\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 {width: w, height: h, radius = 0, ref, ...restProps} = props\n const {card} = useTheme_v2()\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 <StyledArrow {...restProps} $w={w} ref={ref}>\n <svg width={w} height={w} viewBox={`0 0 ${w} ${w}`}>\n <mask id=\"stroke-mask\">\n <rect x={0} y={strokeWidth} width={w} height={w} fill=\"white\" />\n </mask>\n <StrokePath d={strokePath} mask=\"url(#stroke-mask)\" strokeWidth={strokeWidth * 2} />\n <ShapePath d={fillPath} />\n </svg>\n </StyledArrow>\n )\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"button-DQH2KIbq.js","names":["<SpinnerIcon className={spinnerIcon} />","<Text data-ui=\"Spinner\" {...props}>\n <SpinnerIcon className={spinnerIcon} />\n </Text>","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 <LoadingBox>\n <Spinner />\n </LoadingBox>\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 <LoadingBox>\n <Spinner />\n </LoadingBox>\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"],"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.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\nexport const spinnerIcon = style({\n animation: `${rotate} 500ms linear infinite`,\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 {CSSObject} from '../../../theme/system/css'\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, ButtonWidth} from '../../types/button'\n\n/**\n * @internal\n */\nexport function buttonBaseStyles(\n props: {$width?: ButtonWidth} & ThemeProps,\n): ReturnType<typeof css> {\n const {$width} = props\n const {style} = getTheme_v2(props.theme)\n\n return css`\n ${style?.button};\n\n -webkit-font-smoothing: inherit;\n appearance: none;\n display: inline-flex;\n align-items: center;\n font: inherit;\n border: 0;\n outline: none;\n user-select: none;\n text-decoration: none;\n border: 0;\n box-sizing: border-box;\n padding: 0;\n margin: 0;\n white-space: nowrap;\n text-align: left;\n position: relative;\n vertical-align: top;\n\n ${\n $width === 'fill' &&\n css`\n width: -moz-available;\n width: -webkit-fill-available;\n width: stretch;\n `\n }\n\n & > span {\n display: block;\n flex: 1;\n min-width: 0;\n border-radius: inherit;\n }\n\n &::-moz-focus-inner {\n border: 0;\n padding: 0;\n }\n `\n}\n\nfunction combineBoxShadow(...boxShadows: (string | undefined)[]): string {\n return boxShadows.filter(Boolean).join(',')\n}\n\n/**\n * @internal\n */\nexport function buttonColorStyles(\n props: {$mode: ButtonMode; $tone: ButtonTone} & ThemeProps,\n): CSSObject[] {\n const {$mode} = props\n const {button, color: baseColor, style} = getTheme_v2(props.theme)\n const shadow = props.$mode === 'ghost'\n const mode = baseColor.button[$mode] || baseColor.button.default\n const color = mode[props.$tone] || mode.default\n const border = {\n width: button.border.width,\n color: 'var(--card-border-color)',\n }\n // const defaultBoxShadow = `inset 0px -1.5px 0px ${buttonTheme.border.width}px color-mix(in srgb, var(--card-border-color) 25%, var(--card-bg-color))`\n const defaultBoxShadow = undefined\n\n // oxlint-disable-next-line no-unsafe-type-assertion\n return [\n _cardColorStyle(baseColor, color.enabled),\n {\n 'backgroundColor': 'var(--card-bg-color)',\n 'color': 'var(--card-fg-color)',\n 'boxShadow': focusRingBorderStyle(border),\n '&:disabled, &[data-disabled=\"true\"]': _cardColorStyle(baseColor, color.disabled),\n \"&:not([data-disabled='true'])\": {\n 'boxShadow': combineBoxShadow(\n focusRingBorderStyle(border),\n shadow ? defaultBoxShadow : undefined,\n ),\n '&:focus': {\n boxShadow: focusRingStyle({\n base: baseColor,\n border: {width: 2, color: baseColor.bg},\n focusRing: button.focusRing,\n }),\n },\n '&:focus:not(:focus-visible)': {\n boxShadow: combineBoxShadow(\n focusRingBorderStyle(border),\n shadow ? defaultBoxShadow : undefined,\n ),\n },\n '@media (hover: hover)': {\n '&:hover': _cardColorStyle(baseColor, color.hovered),\n '&:active': _cardColorStyle(baseColor, color.pressed),\n '&[data-hovered]': _cardColorStyle(baseColor, color.hovered),\n },\n '&[data-selected]': _cardColorStyle(baseColor, color.pressed),\n },\n },\n style?.button?.root,\n ].filter(Boolean) as CSSObject[]\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 {buttonBaseStyles, buttonColorStyles} from './styles'\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\nconst StyledButton = styled.button<\n {$mode: ButtonMode; $tone: ButtonTone; $width?: ButtonWidth} & ResponsiveRadiusStyleProps\n>(responsiveRadiusStyle, buttonBaseStyles, buttonColorStyles)\n\nconst LoadingBox = styled.div`\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: var(--card-bg-color);\n border-radius: inherit;\n z-index: 1;\n box-shadow: inherit;\n`\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 <LoadingBox>\n <Spinner />\n </LoadingBox>\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 */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const Button = ButtonComponent as unknown as <E extends ElementType = 'button'>(\n props: ButtonProps<E>,\n) => React.JSX.Element\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hotkeys-BPlacpG8.js","names":["(event: KeyboardEvent) => onKeyDown(event)","() => {\n const handler = (event: KeyboardEvent) => handleKeyDown(event)\n\n window.addEventListener('keydown', handler, options)\n\n return () => window.removeEventListener('keydown', handler, options)\n // oxlint-disable-next-line react/exhaustive-effect-dependencies\n }","event","[options]","Children.map(childrenProp, (child) => child && <div>{child}</div>)","(child) => child && <div>{child}</div>","useMemo(\n () => Children.map(childrenProp, (child) => child && <div>{child}</div>),\n [childrenProp],\n )","_getArrayProp(gap)","<StyledInline\n data-ui=\"Inline\"\n {...restProps}\n $space={_getArrayProp(gap)}\n forwardedAs={as}\n ref={ref}\n >\n {children}\n </StyledInline>","fontSize = 0","padding = 1","radius = 2","_getArrayProp(radius)","<Text as=\"span\" size={fontSize} weight=\"semibold\">\n {children}\n </Text>","<Box as=\"span\" padding={padding}>\n <Text as=\"span\" size={fontSize} weight=\"semibold\">\n {children}\n </Text>\n </Box>","<StyledKBD data-ui=\"KBD\" {...restProps} $radius={_getArrayProp(radius)} ref={ref}>\n <Box as=\"span\" padding={padding}>\n <Text as=\"span\" size={fontSize} weight=\"semibold\">\n {children}\n </Text>\n </Box>\n </StyledKBD>","gap = 0.5","_getArrayProp(gap)","<></>","keys.map((key, i) => (\n // oxlint-disable-next-line no-array-index-key\n <Key fontSize={fontSize} key={i} padding={padding} radius={radius}>\n {key}\n </Key>\n ))","(key, i) => (\n // oxlint-disable-next-line no-array-index-key\n <Key fontSize={fontSize} key={i} padding={padding} radius={radius}>\n {key}\n </Key>\n )","<Inline as=\"span\" gap={spacing}>\n {keys.map((key, i) => (\n // oxlint-disable-next-line no-array-index-key\n <Key fontSize={fontSize} key={i} padding={padding} radius={radius}>\n {key}\n </Key>\n ))}\n </Inline>","<StyledHotkeys data-ui=\"Hotkeys\" {...restProps} ref={ref}>\n <Inline as=\"span\" gap={spacing}>\n {keys.map((key, i) => (\n // oxlint-disable-next-line no-array-index-key\n <Key fontSize={fontSize} key={i} padding={padding} radius={radius}>\n {key}\n </Key>\n ))}\n </Inline>\n </StyledHotkeys>"],"sources":["../src/core/hooks/useGlobalKeyDown.ts","../src/core/primitives/inline/styles.ts","../src/core/primitives/inline/inline.tsx","../src/core/primitives/kbd/kbd.tsx","../src/core/components/hotkeys/hotkeys.tsx"],"sourcesContent":["import {useEffect} 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`. This public hook runs in the fiber of whatever component calls it\n// (consumers may call it from `forwardRef` or `memo` components).\nimport {useEffectEvent} from 'use-effect-event'\n\n/**\n * Adds global keydown event listener to the window.\n *\n * @param onKeyDown - The function to call when a keydown event is triggered.\n * @param options - The options to pass to the addEventListener function (example, capture: true)\n * @beta\n */\nexport function useGlobalKeyDown(\n onKeyDown: (event: KeyboardEvent) => void,\n options?: AddEventListenerOptions,\n): void {\n const handleKeyDown = useEffectEvent((event: KeyboardEvent) => onKeyDown(event))\n\n useEffect(() => {\n const handler = (event: KeyboardEvent) => handleKeyDown(event)\n\n window.addEventListener('keydown', handler, options)\n\n return () => window.removeEventListener('keydown', handler, options)\n // oxlint-disable-next-line react/exhaustive-effect-dependencies\n }, [options])\n}\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'\nimport {ResponsiveInlineSpaceStyleProps} from './types'\n\nexport function inlineBaseStyle(): CSSObject {\n return {\n 'lineHeight': '0',\n\n '&&:not([hidden])': {\n display: 'block',\n },\n\n '& > div': {\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n }\n}\n\nexport function inlineSpaceStyle(props: ResponsiveInlineSpaceStyleProps & ThemeProps): CSSObject[] {\n const {media, space} = getTheme_v2(props.theme)\n\n return _responsive(media, props.$space, (spaceIndex) => {\n const _space = rem(spaceIndex === 0.5 ? space[1] / 2 : space[spaceIndex])\n\n return {\n 'margin': `-${_space} 0 0 -${_space}`,\n '& > div': {padding: `${_space} 0 0 ${_space}`},\n }\n })\n}\n","import {Children, useMemo} from 'react'\nimport {styled} from 'styled-components'\n\nimport {_getArrayProp} from '../../styles/helpers'\nimport {ElementType, Props} from '../../types/component'\nimport {Box, BoxOwnProps} from '../box/box'\nimport {inlineBaseStyle, inlineSpaceStyle} from './styles'\nimport {ResponsiveInlineSpaceStyleProps} from './types'\n\n/**\n * @public\n */\nexport interface InlineOwnProps extends Omit<BoxOwnProps, 'display'> {\n /**\n * @deprecated Use `gap` instead.\n */\n space?: never\n /** The spacing between children. */\n gap?: number | number[]\n}\n\n/**\n * @public\n */\nexport type InlineProps<E extends ElementType = 'div'> = Props<InlineOwnProps, E>\n\nconst StyledInline = styled(Box)<ResponsiveInlineSpaceStyleProps>(inlineBaseStyle, inlineSpaceStyle)\n\nfunction InlineComponent(\n props: InlineOwnProps & {as?: ElementType} & React.HTMLProps<HTMLDivElement>,\n) {\n const {as, children: childrenProp, gap, ref, ...restProps} = props\n\n const children = useMemo(\n () => Children.map(childrenProp, (child) => child && <div>{child}</div>),\n [childrenProp],\n )\n\n return (\n <StyledInline\n data-ui=\"Inline\"\n {...restProps}\n $space={_getArrayProp(gap)}\n forwardedAs={as}\n ref={ref}\n >\n {children}\n </StyledInline>\n )\n}\n\n/**\n * The `Inline` component is a layout utility for aligning and spacing items horizontally.\n *\n * @public\n */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const Inline = InlineComponent as unknown as <E extends ElementType = 'div'>(\n props: InlineProps<E>,\n) => React.JSX.Element\n","import {css, styled} from 'styled-components'\n\nimport {_getArrayProp} from '../../styles/helpers'\nimport {responsiveRadiusStyle} from '../../styles/radius/radiusStyle'\nimport {ResponsiveRadiusStyleProps} from '../../styles/radius/types'\nimport {ElementType, Props} from '../../types/component'\nimport {Radius} from '../../types/radius'\nimport {Box} from '../box/box'\nimport {Text} from '../text/text'\n\n/**\n * @public\n */\nexport interface KBDOwnProps {\n fontSize?: number | number[]\n padding?: number | number[]\n radius?: Radius | Radius[]\n}\n\n/**\n * @public\n */\nexport type KBDProps<E extends ElementType = 'kbd'> = Props<KBDOwnProps, E>\n\nfunction kbdStyle() {\n return css`\n --card-bg-color: var(--card-kbd-bg-color);\n --card-border-color: var(--card-kbd-border-color);\n --card-fg-color: var(--card-kbd-fg-color);\n\n box-shadow: inset 0 0 0 1px var(--card-border-color);\n background: var(--card-bg-color);\n font: inherit;\n\n vertical-align: top;\n\n &:not([hidden]) {\n display: inline-block;\n }\n `\n}\n\nconst StyledKBD = styled.kbd<ResponsiveRadiusStyleProps>(responsiveRadiusStyle, kbdStyle)\n\nfunction KBDComponent(\n props: KBDOwnProps & {as?: ElementType} & Omit<React.HTMLProps<HTMLElement>, 'as' | 'size'>,\n) {\n const {children, fontSize = 0, padding = 1, radius = 2, ref, ...restProps} = props\n\n return (\n <StyledKBD data-ui=\"KBD\" {...restProps} $radius={_getArrayProp(radius)} ref={ref}>\n <Box as=\"span\" padding={padding}>\n <Text as=\"span\" size={fontSize} weight=\"semibold\">\n {children}\n </Text>\n </Box>\n </StyledKBD>\n )\n}\n\n/**\n * Used to define some text as keyboard input.\n *\n * @public\n */\n// oxlint-disable-next-line no-unsafe-type-assertion\nexport const KBD = KBDComponent as unknown as <E extends ElementType = 'kbd'>(\n props: KBDProps<E>,\n) => React.JSX.Element\n","import {styled} from 'styled-components'\n\nimport {Inline} from '../../primitives/inline/inline'\nimport {KBD} from '../../primitives/kbd/kbd'\nimport {_getArrayProp} from '../../styles/helpers'\nimport {Radius} from '../../types/radius'\n\n/**\n * @public\n */\nexport interface HotkeysProps {\n fontSize?: number | number[]\n gap?: number | number[]\n padding?: number | number[]\n radius?: Radius | Radius[]\n /**\n * @deprecated Use `gap` instead.\n */\n space?: never\n keys?: string[]\n}\n\nconst StyledHotkeys = styled.kbd`\n font: inherit;\n padding: 1px;\n\n &:not([hidden]) {\n display: block;\n }\n`\n\nconst Key = styled(KBD)`\n &:not([hidden]) {\n display: block;\n }\n`\n\n/**\n * Represent hotkeys (a keyboard combination) with semantic `<kbd>` elements.\n *\n * @public\n */\nexport function Hotkeys(props: HotkeysProps & Omit<React.HTMLProps<HTMLElement>, 'as' | 'size'>) {\n const {fontSize, gap = 0.5, keys, padding, radius, ref, ...restProps} = props\n const spacing = _getArrayProp(gap)\n\n if (!keys || keys.length === 0) {\n return <></>\n }\n\n return (\n <StyledHotkeys data-ui=\"Hotkeys\" {...restProps} ref={ref}>\n <Inline as=\"span\" gap={spacing}>\n {keys.map((key, i) => (\n // oxlint-disable-next-line no-array-index-key\n <Key fontSize={fontSize} key={i} padding={padding} radius={radius}>\n {key}\n </Key>\n ))}\n </Inline>\n </StyledHotkeys>\n )\n}\n"],"mappings":"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"}
@@ -1,61 +0,0 @@
1
- import { s as EMPTY_RECORD } from "./helpers-C8xxXAQC.js";
2
- import { a as isHTMLElement, n as containsOrEqualsElement } from "./element-BYgCE_iK.js";
3
- import { n as LayerProvider, t as useLayer } from "./useLayer-jUJIz8mh.js";
4
- import { c } from "react/compiler-runtime";
5
- import { useEffect, useImperativeHandle, useRef } from "react";
6
- import { styled } from "styled-components";
7
- import { jsx } from "react/jsx-runtime";
8
- const StyledLayer = /* @__PURE__ */ styled.div.withConfig({
9
- displayName: "StyledLayer",
10
- componentId: "sc-xij3g-0"
11
- })({ position: "relative" });
12
- function LayerChildren(props) {
13
- let $ = c(23), children, forwardedRef, onActivate, onFocus, restProps, t0;
14
- $[0] === props ? (children = $[1], forwardedRef = $[2], onActivate = $[3], onFocus = $[4], restProps = $[5], t0 = $[6]) : ({children, onActivate, onFocus, ref: forwardedRef, style: t0, ...restProps} = props, $[0] = props, $[1] = children, $[2] = forwardedRef, $[3] = onActivate, $[4] = onFocus, $[5] = restProps, $[6] = t0);
15
- let style = t0 === void 0 ? EMPTY_RECORD : t0, { zIndex, isTopLayer } = useLayer(), lastFocusedRef = useRef(null), ref = useRef(null), isTopLayerRef = useRef(isTopLayer), t1;
16
- $[7] === Symbol.for("react.memo_cache_sentinel") ? (t1 = () => ref.current, $[7] = t1) : t1 = $[7], useImperativeHandle(forwardedRef, t1);
17
- let t2, t3;
18
- $[8] !== isTopLayer || $[9] !== onActivate ? (t2 = () => {
19
- isTopLayerRef.current !== isTopLayer && isTopLayer && onActivate?.({ activeElement: lastFocusedRef.current }), isTopLayerRef.current = isTopLayer;
20
- }, t3 = [isTopLayer, onActivate], $[8] = isTopLayer, $[9] = onActivate, $[10] = t2, $[11] = t3) : (t2 = $[10], t3 = $[11]), useEffect(t2, t3);
21
- let t4;
22
- $[12] !== isTopLayer || $[13] !== onFocus ? (t4 = (event) => {
23
- onFocus?.(event);
24
- let rootElement = ref.current, target = document.activeElement;
25
- !isTopLayer || !rootElement || !target || isHTMLElement(target) && containsOrEqualsElement(rootElement, target) && (lastFocusedRef.current = target);
26
- }, $[12] = isTopLayer, $[13] = onFocus, $[14] = t4) : t4 = $[14];
27
- let handleFocus = t4, t5;
28
- $[15] !== style || $[16] !== zIndex ? (t5 = {
29
- ...style,
30
- zIndex
31
- }, $[15] = style, $[16] = zIndex, $[17] = t5) : t5 = $[17];
32
- let t6;
33
- return $[18] !== children || $[19] !== handleFocus || $[20] !== restProps || $[21] !== t5 ? (t6 = /* @__PURE__ */ jsx(StyledLayer, {
34
- ...restProps,
35
- "data-ui": "Layer",
36
- onFocus: handleFocus,
37
- ref,
38
- style: t5,
39
- children
40
- }), $[18] = children, $[19] = handleFocus, $[20] = restProps, $[21] = t5, $[22] = t6) : t6 = $[22], t6;
41
- }
42
- /**
43
- * @public
44
- */
45
- function Layer(props) {
46
- let $ = c(10), children, restProps, t0;
47
- $[0] === props ? (children = $[1], restProps = $[2], t0 = $[3]) : ({children, zOffset: t0, ...restProps} = props, $[0] = props, $[1] = children, $[2] = restProps, $[3] = t0);
48
- let zOffset = t0 === void 0 ? 1 : t0, t1;
49
- $[4] !== children || $[5] !== restProps ? (t1 = /* @__PURE__ */ jsx(LayerChildren, {
50
- ...restProps,
51
- children
52
- }), $[4] = children, $[5] = restProps, $[6] = t1) : t1 = $[6];
53
- let t2;
54
- return $[7] !== t1 || $[8] !== zOffset ? (t2 = /* @__PURE__ */ jsx(LayerProvider, {
55
- zOffset,
56
- children: t1
57
- }), $[7] = t1, $[8] = zOffset, $[9] = t2) : t2 = $[9], t2;
58
- }
59
- export { Layer as t };
60
-
61
- //# sourceMappingURL=layer-DGn7KJIB.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"layer-DGn7KJIB.js","names":["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 )","{...style, zIndex}","<StyledLayer\n {...restProps}\n data-ui=\"Layer\"\n onFocus={handleFocus}\n ref={ref}\n style={{...style, zIndex}}\n >\n {children}\n </StyledLayer>","zOffset = 1","<LayerChildren {...restProps}>{children}</LayerChildren>","<LayerProvider zOffset={zOffset}>\n <LayerChildren {...restProps}>{children}</LayerChildren>\n </LayerProvider>"],"sources":["../src/core/utils/layer/layer.tsx"],"sourcesContent":["import {FocusEvent, useCallback, useEffect, useImperativeHandle, useRef} from 'react'\nimport {styled} from 'styled-components'\n\nimport {EMPTY_RECORD} from '../../constants'\nimport {containsOrEqualsElement, isHTMLElement} from '../../helpers/element'\nimport {LayerProvider} from './layerProvider'\nimport {useLayer} from './useLayer'\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\nconst StyledLayer = styled.div({position: 'relative'})\n\nfunction LayerChildren(props: LayerChildrenProps & Omit<React.HTMLProps<HTMLDivElement>, 'as'>) {\n const {\n children,\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 return (\n <StyledLayer\n {...restProps}\n data-ui=\"Layer\"\n onFocus={handleFocus}\n ref={ref}\n style={{...style, zIndex}}\n >\n {children}\n </StyledLayer>\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":";;;;;;;AAuBA,MAAM,cAAc,uBAAO,IAAA,WAAA;;;AAAI,CAAA,CAAA,CAAA,EAAC,UAAU,WAAU,CAAC;AAErD,SAAS,cAAc,OAAyE;gBAE5F,UAGK,cAFL,YACA,SAGG,WADHA;CAEE,AAAA,EAAA,OAAA,kHAPE,CACJ,UACA,YACA,SACA,KAAK,cACL,OAAA,IACA,GAAA,aACE;CAFF,IAAA,QAAA,OAAA,KAAA,IAAQ,eAARA,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,OAAA,cAAA,EAAA,OAG/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,KAAA,YAG/C,EAAA,KAAA,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;EAEpB,CAAC,cAAc,CAAC,eAAe,CAAC,UAEhC,cAAc,MAAM,KAAK,wBAAwB,aAAa,MAAM,MACtE,eAAe,UAAU;CAE7B,GALO,EAAA,MAAA,YALL,EAAA,MAAA;CAJJ,IAAM,cAAcC,IAwBTC;CAAI,AAAA,EAAA,QAAA,SAAA,EAAA,QAAO,UAAX,KAAA;EAAC,GAAG;EAAO;CAAM,GAAb,EAAA,MAAA,OAAO,EAAA,MAAA;CALpBC,IAAAA;CADF,OAQK,EAAA,QAAA,YAAA,EAAA,QAJQ,eAAA,EAAA,QAFL,aAAA,EAAA,QAIGD,MALT,KAAA,oBAAC,aAAD;EACE,GAAI;EACJ,WAAQ;EACR,SAAS;EACJ;EACL,OAAOA;EAEN;CACU,CAAA,GADV,EAAA,MAAA,UAJQ,EAAA,MAAA,aAFL,EAAA,MAAA,WAIGA,EAAAA,MAAAA,8BALTC;AAUJ;;;;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"}