@sanity/ui 4.2.0 → 4.2.1

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 (39) hide show
  1. package/dist/{arrow-BmX6qbAS.js → arrow-D-raLuvE.js} +2 -2
  2. package/dist/{arrow-BmX6qbAS.js.map → arrow-D-raLuvE.js.map} +1 -1
  3. package/dist/autocomplete.d.ts.map +1 -1
  4. package/dist/autocomplete.js +118 -122
  5. package/dist/autocomplete.js.map +1 -1
  6. package/dist/breadcrumbs.js +4 -4
  7. package/dist/{button-BNyKSDyA.js → button-D8Ge5vTw.js} +4 -4
  8. package/dist/button-D8Ge5vTw.js.map +1 -0
  9. package/dist/{flex-DmbDG2ks.js → flex-JVQRW_e_.js} +2 -2
  10. package/dist/{flex-DmbDG2ks.js.map → flex-JVQRW_e_.js.map} +1 -1
  11. package/dist/{grid-6JSgMj1O.js → grid-Dw7q0_YV.js} +2 -2
  12. package/dist/{grid-6JSgMj1O.js.map → grid-Dw7q0_YV.js.map} +1 -1
  13. package/dist/{hotkeys-CaHsQlsO.js → hotkeys-DTjEz_u3.js} +3 -3
  14. package/dist/hotkeys-DTjEz_u3.js.map +1 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +106 -112
  17. package/dist/index.js.map +1 -1
  18. package/dist/{layer-Bl5R3uNR.js → layer-dwv5h6E7.js} +2 -2
  19. package/dist/{layer-Bl5R3uNR.js.map → layer-dwv5h6E7.js.map} +1 -1
  20. package/dist/menu.js +5 -5
  21. package/dist/{popover-B7-28L8y.js → popover-BngOa-um.js} +4 -4
  22. package/dist/{popover-B7-28L8y.js.map → popover-BngOa-um.js.map} +1 -1
  23. package/dist/popover.js +1 -1
  24. package/dist/{stack-rsNFPq2-.js → stack-Bue-701Y.js} +2 -2
  25. package/dist/{stack-rsNFPq2-.js.map → stack-Bue-701Y.js.map} +1 -1
  26. package/dist/styles.css +21 -12
  27. package/dist/{textInput-pSfQjkmx.js → textInput-C83gG7N5.js} +4 -4
  28. package/dist/{textInput-pSfQjkmx.js.map → textInput-C83gG7N5.js.map} +1 -1
  29. package/dist/toast.js +37 -43
  30. package/dist/toast.js.map +1 -1
  31. package/dist/tooltip.js +53 -49
  32. package/dist/tooltip.js.map +1 -1
  33. package/dist/useClickOutsideEvent-wGLGWBZN.js.map +1 -1
  34. package/dist/{useLayer-D1usxIE0.js → useLayer-ONr7wTUN.js} +52 -31
  35. package/dist/useLayer-ONr7wTUN.js.map +1 -0
  36. package/package.json +8 -8
  37. package/dist/button-BNyKSDyA.js.map +0 -1
  38. package/dist/hotkeys-CaHsQlsO.js.map +0 -1
  39. package/dist/useLayer-D1usxIE0.js.map +0 -1
package/dist/tooltip.js CHANGED
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { c as POPOVER_MOTION_PROPS, n as _getArrayProp } from "./helpers-C8xxXAQC.js";
3
- import { _ as useTheme_v2, d as createGlobalScopedContext, i as usePrefersReducedMotion, s as Card } from "./useLayer-D1usxIE0.js";
3
+ import { _ as useTheme_v2, d as createGlobalScopedContext, i as usePrefersReducedMotion, s as Card } from "./useLayer-ONr7wTUN.js";
4
4
  import { i as origin, n as AnimateActivity, r as getTransformOrigin, t as getElementRef } from "./getElementRef-Jw7gY0eV.js";
5
- import { a as useBoundaryElement, n as Portal, r as usePortal, t as Arrow } from "./arrow-BmX6qbAS.js";
6
- import { t as Layer } from "./layer-Bl5R3uNR.js";
5
+ import { a as useBoundaryElement, n as Portal, r as usePortal, t as Arrow } from "./arrow-D-raLuvE.js";
6
+ import { t as Layer } from "./layer-dwv5h6E7.js";
7
7
  import { c } from "react/compiler-runtime";
8
8
  import { clsx } from "clsx/lite";
9
9
  import { Activity, cloneElement, useContext, useEffect, useId, useImperativeHandle, useLayoutEffect, useRef, useState } from "react";
@@ -181,7 +181,7 @@ function useTooltipDelayGroup() {
181
181
  * @public
182
182
  */
183
183
  function Tooltip(props) {
184
- let $ = c(122), boundaryElementContext = useBoundaryElement(), { layer } = useTheme_v2(), { animate: t0, arrow: t1, boundaryElement: _boundaryElement, children: childProp, content, disabled, fallbackPlacements: _fallbackPlacementsProp, padding: t2, placement: t3, portal: portalProp, radius: t4, ref: forwardedRef, scheme, shadow: t5, zOffset: _zOffset, delay, ...restProps } = props, _animate = t0 !== void 0 && t0, arrowProp = t1 !== void 0 && t1, padding = t2 === void 0 ? 2 : t2, placementProp = t3 === void 0 ? "bottom" : t3, radius = t4 === void 0 ? 2 : t4, shadow = t5 === void 0 ? 2 : t5, boundaryElement = _boundaryElement ?? boundaryElementContext?.element, fallbackPlacementsProp = _fallbackPlacementsProp ?? DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? "bottom"], zOffset = _zOffset ?? layer.tooltip.zOffset, animate = !usePrefersReducedMotion() && _animate, t6;
184
+ let $ = c(125), boundaryElementContext = useBoundaryElement(), { layer } = useTheme_v2(), { animate: t0, arrow: t1, boundaryElement: _boundaryElement, children: childProp, content, disabled, fallbackPlacements: _fallbackPlacementsProp, padding: t2, placement: t3, portal: portalProp, radius: t4, ref: forwardedRef, scheme, shadow: t5, zOffset: _zOffset, delay, ...restProps } = props, _animate = t0 !== void 0 && t0, arrowProp = t1 !== void 0 && t1, padding = t2 === void 0 ? 2 : t2, placementProp = t3 === void 0 ? "bottom" : t3, radius = t4 === void 0 ? 2 : t4, shadow = t5 === void 0 ? 2 : t5, boundaryElement = _boundaryElement ?? boundaryElementContext?.element, fallbackPlacementsProp = _fallbackPlacementsProp ?? DEFAULT_FALLBACK_PLACEMENTS[props.placement ?? "bottom"], zOffset = _zOffset ?? layer.tooltip.zOffset, animate = !usePrefersReducedMotion() && _animate, t6;
185
185
  $[0] === fallbackPlacementsProp ? t6 = $[1] : (t6 = _getArrayProp(fallbackPlacementsProp), $[0] = fallbackPlacementsProp, $[1] = t6);
186
186
  let fallbackPlacements = t6, ref = useRef(null), [referenceElement, setReferenceElement] = useState(null), arrowRef = useRef(null), [tooltipMaxWidth, setTooltipMaxWidth] = useState(0), t7;
187
187
  $[2] === Symbol.for("react.memo_cache_sentinel") ? (t7 = () => ref.current, $[2] = t7) : t7 = $[2], useImperativeHandle(forwardedRef, t7);
@@ -261,39 +261,43 @@ function Tooltip(props) {
261
261
  handleIsOpenChange,
262
262
  showTooltip
263
263
  ], $[52] = content, $[53] = handleIsOpenChange, $[54] = showTooltip, $[55] = t22, $[56] = t23) : (t22 = $[55], t23 = $[56]), useEffect(t22, t23);
264
- let t24, t25;
265
- $[57] !== handleIsOpenChange || $[58] !== showTooltip ? (t24 = () => {
264
+ let t24;
265
+ $[57] === handleIsOpenChange ? t24 = $[58] : (t24 = () => handleIsOpenChange(!1, !0), $[57] = handleIsOpenChange, $[58] = t24);
266
+ let onWindowEscape = useEffectEvent(t24), t25;
267
+ $[59] !== onWindowEscape || $[60] !== showTooltip ? (t25 = () => {
266
268
  if (!showTooltip) return;
267
269
  let handleWindowKeyDown = function handleWindowKeyDown(event) {
268
- event.key === "Escape" && handleIsOpenChange(!1, !0);
270
+ event.key === "Escape" && onWindowEscape();
269
271
  };
270
272
  return window.addEventListener("keydown", handleWindowKeyDown), () => {
271
273
  window.removeEventListener("keydown", handleWindowKeyDown);
272
274
  };
273
- }, t25 = [handleIsOpenChange, showTooltip], $[57] = handleIsOpenChange, $[58] = showTooltip, $[59] = t24, $[60] = t25) : (t24 = $[59], t25 = $[60]), useEffect(t24, t25);
275
+ }, $[59] = onWindowEscape, $[60] = showTooltip, $[61] = t25) : t25 = $[61];
274
276
  let t26;
275
- $[61] !== boundaryElement || $[62] !== portalElement?.offsetWidth ? (t26 = () => {
277
+ $[62] === showTooltip ? t26 = $[63] : (t26 = [showTooltip], $[62] = showTooltip, $[63] = t26), useEffect(t25, t26);
278
+ let t27;
279
+ $[64] !== boundaryElement || $[65] !== portalElement?.offsetWidth ? (t27 = () => {
276
280
  let availableWidths = [...boundaryElement ? [boundaryElement.offsetWidth] : [], portalElement?.offsetWidth || document.body.offsetWidth];
277
281
  setTooltipMaxWidth(Math.min(...availableWidths) - 8);
278
- }, $[61] = boundaryElement, $[62] = portalElement?.offsetWidth, $[63] = t26) : t26 = $[63];
279
- let t27;
280
- $[64] !== boundaryElement || $[65] !== portalElement ? (t27 = [boundaryElement, portalElement], $[64] = boundaryElement, $[65] = portalElement, $[66] = t27) : t27 = $[66], useLayoutEffect(t26, t27);
282
+ }, $[64] = boundaryElement, $[65] = portalElement?.offsetWidth, $[66] = t27) : t27 = $[66];
281
283
  let t28;
282
- $[67] === update ? t28 = $[68] : (t28 = (arrowEl) => {
284
+ $[67] !== boundaryElement || $[68] !== portalElement ? (t28 = [boundaryElement, portalElement], $[67] = boundaryElement, $[68] = portalElement, $[69] = t28) : t28 = $[69], useLayoutEffect(t27, t28);
285
+ let t29;
286
+ $[70] === update ? t29 = $[71] : (t29 = (arrowEl) => {
283
287
  arrowRef.current = arrowEl, update();
284
- }, $[67] = update, $[68] = t28);
285
- let setArrow = t28, t29;
286
- $[69] === refs ? t29 = $[70] : (t29 = (node) => {
288
+ }, $[70] = update, $[71] = t29);
289
+ let setArrow = t29, t30;
290
+ $[72] === refs ? t30 = $[73] : (t30 = (node) => {
287
291
  ref.current = node, refs.setFloating(node);
288
- }, $[69] = refs, $[70] = t29);
289
- let setFloating = t29, t30;
292
+ }, $[72] = refs, $[73] = t30);
293
+ let setFloating = t30, t31;
290
294
  bb0: {
291
295
  if (!childProp) {
292
- t30 = null;
296
+ t31 = null;
293
297
  break bb0;
294
298
  }
295
- let t31;
296
- $[71] !== childProp || $[72] !== handleBlur || $[73] !== handleClick || $[74] !== handleContextMenu || $[75] !== handleFocus || $[76] !== handleMouseEnter || $[77] !== handleMouseLeave ? (t31 = cloneElement(childProp, {
299
+ let t32;
300
+ $[74] !== childProp || $[75] !== handleBlur || $[76] !== handleClick || $[77] !== handleContextMenu || $[78] !== handleFocus || $[79] !== handleMouseEnter || $[80] !== handleMouseLeave ? (t32 = cloneElement(childProp, {
297
301
  onBlur: handleBlur,
298
302
  onFocus: handleFocus,
299
303
  onMouseEnter: handleMouseEnter,
@@ -301,23 +305,23 @@ function Tooltip(props) {
301
305
  onClick: handleClick,
302
306
  onContextMenu: handleContextMenu,
303
307
  ref: setReferenceElement
304
- }), $[71] = childProp, $[72] = handleBlur, $[73] = handleClick, $[74] = handleContextMenu, $[75] = handleFocus, $[76] = handleMouseEnter, $[77] = handleMouseLeave, $[78] = t31) : t31 = $[78], t30 = t31;
308
+ }), $[74] = childProp, $[75] = handleBlur, $[76] = handleClick, $[77] = handleContextMenu, $[78] = handleFocus, $[79] = handleMouseEnter, $[80] = handleMouseLeave, $[81] = t32) : t32 = $[81], t31 = t32;
305
309
  }
306
- let child = t30, t31;
307
- $[79] === childProp ? t31 = $[80] : (t31 = childProp ? getElementRef(childProp) : null, $[79] = childProp, $[80] = t31);
308
- let t32, t33;
309
- if ($[81] === referenceElement ? (t32 = $[82], t33 = $[83]) : (t32 = () => referenceElement, t33 = [referenceElement], $[81] = referenceElement, $[82] = t32, $[83] = t33), useImperativeHandle(t31, t32, t33), !child) {
310
- let t34;
311
- return $[84] === Symbol.for("react.memo_cache_sentinel") ? (t34 = /* @__PURE__ */ jsx(Fragment$1, {}), $[84] = t34) : t34 = $[84], t34;
310
+ let child = t31, t32;
311
+ $[82] === childProp ? t32 = $[83] : (t32 = childProp ? getElementRef(childProp) : null, $[82] = childProp, $[83] = t32);
312
+ let t33, t34;
313
+ if ($[84] === referenceElement ? (t33 = $[85], t34 = $[86]) : (t33 = () => referenceElement, t34 = [referenceElement], $[84] = referenceElement, $[85] = t33, $[86] = t34), useImperativeHandle(t32, t33, t34), !child) {
314
+ let t35;
315
+ return $[87] === Symbol.for("react.memo_cache_sentinel") ? (t35 = /* @__PURE__ */ jsx(Fragment$1, {}), $[87] = t35) : t35 = $[87], t35;
312
316
  }
313
317
  if (disabled) return child;
314
- let T0 = Layer, t35 = clsx(tooltipLayer, restProps.className), t36 = tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : void 0, t37;
315
- $[85] !== floatingStyles || $[86] !== t36 ? (t37 = {
318
+ let T0 = Layer, t36 = clsx(tooltipLayer, restProps.className), t37 = tooltipMaxWidth > 0 ? `${tooltipMaxWidth}px` : void 0, t38;
319
+ $[88] !== floatingStyles || $[89] !== t37 ? (t38 = {
316
320
  ...floatingStyles,
317
- maxWidth: t36
318
- }, $[85] = floatingStyles, $[86] = t36, $[87] = t37) : t37 = $[87];
319
- let t38;
320
- $[88] !== animate || $[89] !== arrowProp || $[90] !== arrowX || $[91] !== arrowY || $[92] !== content || $[93] !== originX || $[94] !== originY || $[95] !== padding || $[96] !== placement || $[97] !== radius || $[98] !== restProps || $[99] !== scheme || $[100] !== setArrow || $[101] !== setFloating || $[102] !== shadow ? (t38 = /* @__PURE__ */ jsx(TooltipCard, {
321
+ maxWidth: t37
322
+ }, $[88] = floatingStyles, $[89] = t37, $[90] = t38) : t38 = $[90];
323
+ let t39;
324
+ $[91] !== animate || $[92] !== arrowProp || $[93] !== arrowX || $[94] !== arrowY || $[95] !== content || $[96] !== originX || $[97] !== originY || $[98] !== padding || $[99] !== placement || $[100] !== radius || $[101] !== restProps || $[102] !== scheme || $[103] !== setArrow || $[104] !== setFloating || $[105] !== shadow ? (t39 = /* @__PURE__ */ jsx(TooltipCard, {
321
325
  ...restProps,
322
326
  animate,
323
327
  arrow: arrowProp,
@@ -333,33 +337,33 @@ function Tooltip(props) {
333
337
  scheme,
334
338
  shadow,
335
339
  children: content
336
- }), $[88] = animate, $[89] = arrowProp, $[90] = arrowX, $[91] = arrowY, $[92] = content, $[93] = originX, $[94] = originY, $[95] = padding, $[96] = placement, $[97] = radius, $[98] = restProps, $[99] = scheme, $[100] = setArrow, $[101] = setFloating, $[102] = shadow, $[103] = t38) : t38 = $[103];
337
- let t39;
338
- $[104] !== T0 || $[105] !== restProps || $[106] !== setFloating || $[107] !== t35 || $[108] !== t37 || $[109] !== t38 || $[110] !== zOffset ? (t39 = /* @__PURE__ */ jsx(T0, {
340
+ }), $[91] = animate, $[92] = arrowProp, $[93] = arrowX, $[94] = arrowY, $[95] = content, $[96] = originX, $[97] = originY, $[98] = padding, $[99] = placement, $[100] = radius, $[101] = restProps, $[102] = scheme, $[103] = setArrow, $[104] = setFloating, $[105] = shadow, $[106] = t39) : t39 = $[106];
341
+ let t40;
342
+ $[107] !== T0 || $[108] !== restProps || $[109] !== setFloating || $[110] !== t36 || $[111] !== t38 || $[112] !== t39 || $[113] !== zOffset ? (t40 = /* @__PURE__ */ jsx(T0, {
339
343
  "data-ui": "Tooltip",
340
344
  ...restProps,
341
- className: t35,
345
+ className: t36,
342
346
  ref: setFloating,
343
- style: t37,
347
+ style: t38,
344
348
  zOffset,
345
- children: t38
346
- }), $[104] = T0, $[105] = restProps, $[106] = setFloating, $[107] = t35, $[108] = t37, $[109] = t38, $[110] = zOffset, $[111] = t39) : t39 = $[111];
347
- let tooltip = t39, t40;
348
- $[112] !== portalProp || $[113] !== tooltip ? (t40 = portalProp ? /* @__PURE__ */ jsx(Portal, {
349
+ children: t39
350
+ }), $[107] = T0, $[108] = restProps, $[109] = setFloating, $[110] = t36, $[111] = t38, $[112] = t39, $[113] = zOffset, $[114] = t40) : t40 = $[114];
351
+ let tooltip = t40, t41;
352
+ $[115] !== portalProp || $[116] !== tooltip ? (t41 = portalProp ? /* @__PURE__ */ jsx(Portal, {
349
353
  __unstable_name: typeof portalProp == "string" ? portalProp : void 0,
350
354
  children: tooltip
351
- }) : tooltip, $[112] = portalProp, $[113] = tooltip, $[114] = t40) : t40 = $[114];
352
- let tooltipNode = t40, t41;
353
- $[115] !== animate || $[116] !== showTooltip || $[117] !== tooltipNode ? (t41 = animate ? /* @__PURE__ */ jsx(AnimateActivity, {
355
+ }) : tooltip, $[115] = portalProp, $[116] = tooltip, $[117] = t41) : t41 = $[117];
356
+ let tooltipNode = t41, t42;
357
+ $[118] !== animate || $[119] !== showTooltip || $[120] !== tooltipNode ? (t42 = animate ? /* @__PURE__ */ jsx(AnimateActivity, {
354
358
  layoutMode: "default",
355
359
  mode: showTooltip ? "visible" : "hidden",
356
360
  children: tooltipNode
357
361
  }) : /* @__PURE__ */ jsx(Activity, {
358
362
  mode: showTooltip ? "visible" : "hidden",
359
363
  children: tooltipNode
360
- }), $[115] = animate, $[116] = showTooltip, $[117] = tooltipNode, $[118] = t41) : t41 = $[118];
361
- let t42;
362
- return $[119] !== child || $[120] !== t41 ? (t42 = /* @__PURE__ */ jsxs(Fragment$1, { children: [t41, child] }), $[119] = child, $[120] = t41, $[121] = t42) : t42 = $[121], t42;
364
+ }), $[118] = animate, $[119] = showTooltip, $[120] = tooltipNode, $[121] = t42) : t42 = $[121];
365
+ let t43;
366
+ return $[122] !== child || $[123] !== t42 ? (t43 = /* @__PURE__ */ jsxs(Fragment$1, { children: [t42, child] }), $[122] = child, $[123] = t42, $[124] = t43) : t43 = $[124], t43;
363
367
  }
364
368
  function useMiddleware(t0) {
365
369
  let $ = c(17), { animate, arrowProp, arrowRef, boundaryElement, fallbackPlacements, rootBoundary } = t0, ret;
@@ -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]","getTransformOrigin(originX, originY)","{\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }","animate ? 'transform' : undefined","useMemo(\n () => ({\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }),\n [animate, originX, originY, style],\n )","{\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }","arrowX !== null ? arrowX : undefined","arrowY !== null ? arrowY : undefined","useMemo(\n () => ({\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }),\n [arrowX, arrowY],\n )","clsx(tooltipCard, className)","arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )","<MotionCard\n className={clsx(tooltipCard, className)}\n data-ui=\"Tooltip__card\"\n {...restProps}\n data-placement={placement}\n padding={padding}\n radius={radius}\n ref={ref}\n scheme={scheme}\n shadow={shadow}\n style={rootStyle}\n {...(animate ? POPOVER_MOTION_PROPS : undefined)}\n >\n {children}\n\n {arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )}\n </MotionCard>","animate ? POPOVER_MOTION_PROPS : undefined","_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 {getTransformOrigin} from '../../middleware/origin'\nimport {Placement} from '../../types/placement'\nimport {Radius} from '../../types/radius'\nimport {Arrow} from '../../utils/arrow/arrow'\nimport {Card} from '../card/card'\nimport {\n DEFAULT_TOOLTIP_ARROW_HEIGHT,\n DEFAULT_TOOLTIP_ARROW_RADIUS,\n DEFAULT_TOOLTIP_ARROW_WIDTH,\n} from './constants'\n\nimport {tooltipCard} from './tooltip.css'\n\nconst MotionCard = motion.create(Card)\n\n/**\n * @internal\n */\nexport function TooltipCard(\n props: {\n animate?: boolean\n arrow: boolean\n arrowRef: React.Ref<HTMLDivElement>\n arrowX?: number\n arrowY?: number\n originX?: number\n originY?: number\n padding?: number | number[]\n placement?: Placement\n radius?: Radius | Radius[]\n scheme?: ThemeColorSchemeKey\n shadow?: number | number[]\n } & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'width'>,\n) {\n const {\n animate,\n arrow,\n arrowRef,\n arrowX,\n arrowY,\n children,\n className,\n originX,\n originY,\n padding,\n placement,\n radius,\n ref,\n scheme,\n shadow,\n style,\n ...restProps\n } = props\n\n const rootStyle: CSSProperties = useMemo(\n () => ({\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }),\n [animate, originX, originY, style],\n )\n\n const arrowStyle: CSSProperties = useMemo(\n () => ({\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }),\n [arrowX, arrowY],\n )\n\n return (\n <MotionCard\n className={clsx(tooltipCard, className)}\n data-ui=\"Tooltip__card\"\n {...restProps}\n data-placement={placement}\n padding={padding}\n radius={radius}\n ref={ref}\n scheme={scheme}\n shadow={shadow}\n style={rootStyle}\n {...(animate ? POPOVER_MOTION_PROPS : undefined)}\n >\n {children}\n\n {arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )}\n </MotionCard>\n )\n}\n","import {createGlobalScopedContext} from '../../../lib/createGlobalScopedContext'\nimport {TooltipDelayGroupContextValue} from './types'\n\n/**\n * @beta\n */\nexport const TooltipDelayGroupContext =\n createGlobalScopedContext<TooltipDelayGroupContextValue | null>(\n '@sanity/ui/context/tooltipDelayGroup',\n null,\n )\n","import {useContext} from 'react'\n\nimport {TooltipDelayGroupContext} from './tooltipDelayGroupContext'\nimport {TooltipDelayGroupContextValue} from './types'\n\n/**\n * @beta\n */\nexport function useTooltipDelayGroup(): TooltipDelayGroupContextValue | null {\n const value = useContext(TooltipDelayGroupContext)\n\n return value\n}\n","import {\n arrow,\n autoUpdate,\n 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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"}
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]","getTransformOrigin(originX, originY)","{\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }","animate ? 'transform' : undefined","useMemo(\n () => ({\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }),\n [animate, originX, originY, style],\n )","{\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }","arrowX !== null ? arrowX : undefined","arrowY !== null ? arrowY : undefined","useMemo(\n () => ({\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }),\n [arrowX, arrowY],\n )","clsx(tooltipCard, className)","arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )","<MotionCard\n className={clsx(tooltipCard, className)}\n data-ui=\"Tooltip__card\"\n {...restProps}\n data-placement={placement}\n padding={padding}\n radius={radius}\n ref={ref}\n scheme={scheme}\n shadow={shadow}\n style={rootStyle}\n {...(animate ? POPOVER_MOTION_PROPS : undefined)}\n >\n {children}\n\n {arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )}\n </MotionCard>","animate ? POPOVER_MOTION_PROPS : undefined","_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]","() => handleIsOpenChange(false, true)","() => {\n // If the user clicks on escape key, close the tooltip.\n if (!showTooltip) return\n\n function handleWindowKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n onWindowEscape()\n }\n }\n\n window.addEventListener('keydown', handleWindowKeyDown)\n\n // oxlint-disable-next-line consistent-return\n return () => {\n window.removeEventListener('keydown', handleWindowKeyDown)\n }\n }","[showTooltip]","() => {\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 }","[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 {getTransformOrigin} from '../../middleware/origin'\nimport {Placement} from '../../types/placement'\nimport {Radius} from '../../types/radius'\nimport {Arrow} from '../../utils/arrow/arrow'\nimport {Card} from '../card/card'\nimport {\n DEFAULT_TOOLTIP_ARROW_HEIGHT,\n DEFAULT_TOOLTIP_ARROW_RADIUS,\n DEFAULT_TOOLTIP_ARROW_WIDTH,\n} from './constants'\n\nimport {tooltipCard} from './tooltip.css'\n\nconst MotionCard = motion.create(Card)\n\n/**\n * @internal\n */\nexport function TooltipCard(\n props: {\n animate?: boolean\n arrow: boolean\n arrowRef: React.Ref<HTMLDivElement>\n arrowX?: number\n arrowY?: number\n originX?: number\n originY?: number\n padding?: number | number[]\n placement?: Placement\n radius?: Radius | Radius[]\n scheme?: ThemeColorSchemeKey\n shadow?: number | number[]\n } & Omit<React.HTMLProps<HTMLDivElement>, 'as' | 'height' | 'width'>,\n) {\n const {\n animate,\n arrow,\n arrowRef,\n arrowX,\n arrowY,\n children,\n className,\n originX,\n originY,\n padding,\n placement,\n radius,\n ref,\n scheme,\n shadow,\n style,\n ...restProps\n } = props\n\n const rootStyle: CSSProperties = useMemo(\n () => ({\n transformOrigin: getTransformOrigin(originX, originY),\n willChange: animate ? 'transform' : undefined,\n ...style,\n }),\n [animate, originX, originY, style],\n )\n\n const arrowStyle: CSSProperties = useMemo(\n () => ({\n left: arrowX !== null ? arrowX : undefined,\n top: arrowY !== null ? arrowY : undefined,\n right: undefined,\n bottom: undefined,\n }),\n [arrowX, arrowY],\n )\n\n return (\n <MotionCard\n className={clsx(tooltipCard, className)}\n data-ui=\"Tooltip__card\"\n {...restProps}\n data-placement={placement}\n padding={padding}\n radius={radius}\n ref={ref}\n scheme={scheme}\n shadow={shadow}\n style={rootStyle}\n {...(animate ? POPOVER_MOTION_PROPS : undefined)}\n >\n {children}\n\n {arrow && (\n <Arrow\n ref={arrowRef}\n style={arrowStyle}\n width={DEFAULT_TOOLTIP_ARROW_WIDTH}\n height={DEFAULT_TOOLTIP_ARROW_HEIGHT}\n radius={DEFAULT_TOOLTIP_ARROW_RADIUS}\n />\n )}\n </MotionCard>\n )\n}\n","import {createGlobalScopedContext} from '../../../lib/createGlobalScopedContext'\nimport {TooltipDelayGroupContextValue} from './types'\n\n/**\n * @beta\n */\nexport const TooltipDelayGroupContext =\n createGlobalScopedContext<TooltipDelayGroupContextValue | null>(\n '@sanity/ui/context/tooltipDelayGroup',\n null,\n )\n","import {useContext} from 'react'\n\nimport {TooltipDelayGroupContext} from './tooltipDelayGroupContext'\nimport {TooltipDelayGroupContextValue} from './types'\n\n/**\n * @beta\n */\nexport function useTooltipDelayGroup(): TooltipDelayGroupContextValue | null {\n const value = useContext(TooltipDelayGroupContext)\n\n return value\n}\n","import {\n arrow,\n autoUpdate,\n 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 const onWindowEscape = useEffectEvent(() => handleIsOpenChange(false, true))\n\n useEffect(() => {\n // If the user clicks on escape key, close the tooltip.\n if (!showTooltip) return\n\n function handleWindowKeyDown(event: KeyboardEvent) {\n if (event.key === 'Escape') {\n onWindowEscape()\n }\n }\n\n window.addEventListener('keydown', handleWindowKeyDown)\n\n // oxlint-disable-next-line consistent-return\n return () => {\n window.removeEventListener('keydown', handleWindowKeyDown)\n }\n }, [showTooltip])\n\n // // 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 }, [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 +1 @@
1
- {"version":3,"file":"useClickOutsideEvent-wGLGWBZN.js","names":["() => EMPTY_ARRAY","elementsArg: () => ClickOutsideEventElements = () => EMPTY_ARRAY","(evt: MouseEvent) => {\n if (!listener) {\n return\n }\n\n const target = evt.target\n\n if (!(target instanceof Node)) {\n return\n }\n\n const resolvedBoundaryElement = boundaryElement?.()\n\n if (resolvedBoundaryElement && !resolvedBoundaryElement.contains(target)) {\n return\n }\n\n const elements = elementsArg().flat()\n\n for (const el of elements) {\n if (!el) continue\n\n if (target === el || el.contains(target)) {\n return\n }\n }\n\n listener(evt)\n }","() => {\n if (!hasListener) return undefined\n\n const handleEvent = (evt: MouseEvent) => onEvent(evt)\n\n document.addEventListener('mousedown', handleEvent)\n\n return () => {\n document.removeEventListener('mousedown', handleEvent)\n }\n // oxlint-disable-next-line react/exhaustive-effect-dependencies\n }","evt","[hasListener]"],"sources":["../src/core/hooks/useClickOutsideEvent.ts"],"sourcesContent":["import {useDebugValue, 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\nimport {EMPTY_ARRAY} from '../constants'\n\n/**\n * @public\n */\nexport type ClickOutsideEventListener = (event: MouseEvent) => void\n\n/**\n * @public\n */\nexport type ClickOutsideEventElements = (HTMLElement | null | (HTMLElement | null)[])[]\n\n/**\n * @public\n */\nexport function useClickOutsideEvent(\n listener: ClickOutsideEventListener | false | undefined,\n elementsArg: () => ClickOutsideEventElements = () => EMPTY_ARRAY,\n boundaryElement?: () => HTMLElement | null,\n): void {\n /**\n * The `useEffectEvent` hook allow us to always see the latest value of `listener`, `elementsArg` and `boundaryElement` without needing to\n * juggle `useState`, `useRef` and `useState` to make sure the `mousedown` event listener isn't constantly being added and removed.\n */\n const onEvent = useEffectEvent((evt: MouseEvent) => {\n if (!listener) {\n return\n }\n\n const target = evt.target\n\n if (!(target instanceof Node)) {\n return\n }\n\n const resolvedBoundaryElement = boundaryElement?.()\n\n if (resolvedBoundaryElement && !resolvedBoundaryElement.contains(target)) {\n return\n }\n\n const elements = elementsArg().flat()\n\n for (const el of elements) {\n if (!el) continue\n\n if (target === el || el.contains(target)) {\n return\n }\n }\n\n listener(evt)\n })\n\n const hasListener = Boolean(listener)\n\n useEffect(() => {\n if (!hasListener) return undefined\n\n const handleEvent = (evt: MouseEvent) => onEvent(evt)\n\n document.addEventListener('mousedown', handleEvent)\n\n return () => {\n document.removeEventListener('mousedown', handleEvent)\n }\n // oxlint-disable-next-line react/exhaustive-effect-dependencies\n }, [hasListener])\n\n useDebugValue(listener ? 'MouseDown On' : 'MouseDown Off')\n}\n"],"mappings":";;;;;;;AAwBA,SAAgB,qBACd,UAAA,IAEA,iBACM;eAFN,cAAA,OAAA,KAAA,IAA+CA,QAA/CC,IAO+BC;CAWG,AAAA,EAAA,OAAA,mBAAA,EAAA,OAMf,eAAA,EAAA,OAhBZ,YADwB,MAAC,QAAoB;EAClD,IAAI,CAAC,UACH;EAGF,IAAM,SAAS,IAAI;EAEnB,IAAI,EAAE,kBAAkB,OACtB;EAGF,IAAM,0BAA0B,kBAAkB;EAElD,IAAI,2BAA2B,CAAC,wBAAwB,SAAS,MAAM,GACrE;EAGF,IAAM,WAAW,YAAY,CAAC,CAAC,KAAK;EAEpC,KAAK,IAAM,MAAM,UACV,WAED,WAAW,MAAM,GAAG,SAAS,MAAM,IACrC;EAIJ,SAAS,GAAG;CACd,GAjBkC,EAAA,KAAA,iBAMf,EAAA,KAAA,aAhBZ,EAAA,KAAA;CADP,IAAM,UAAU,eAAeA,EA4B9B,GAEK,cAAc,EAAQ,UAElBC;CACH,AAAA,EAAA,OAAA,eAAA,EAAA,OAEoC,WAHjC,WAAM;EACd,IAAI,CAAC,aAAa;EAElB,IAAM,eAAe,UAAoB,QAAQC,KAAG;EAIpD,OAFA,SAAS,iBAAiB,aAAa,WAAW,SAErC;GACX,SAAS,oBAAoB,aAAa,WAAW;EACvD;CAEF,GAVO,EAAA,KAAA,aAEoC,EAAA,KAAA;CAQxCC,IAAAA;CAEH,AAFI,EAAA,OAAA,2BAAD,KAAA,CAAC,WAAW,GAAX,EAAA,KAAA,yBAXJ,UAAUF,IAWPE,EAAa,GAEhB,cAAc,WAAW,iBAAiB,eAAe;AAC3D;AArDiD,SAAA,QAAA;CAAM,OAAA"}
1
+ {"version":3,"file":"useClickOutsideEvent-wGLGWBZN.js","names":["() => EMPTY_ARRAY","elementsArg: () => ClickOutsideEventElements = () => EMPTY_ARRAY","(evt: MouseEvent) => {\n if (!listener) {\n return\n }\n\n const target = evt.target\n\n if (!(target instanceof Node)) {\n return\n }\n\n const resolvedBoundaryElement = boundaryElement?.()\n\n if (resolvedBoundaryElement && !resolvedBoundaryElement.contains(target)) {\n return\n }\n\n const elements = elementsArg().flat()\n\n for (const el of elements) {\n if (!el) continue\n\n if (target === el || el.contains(target)) {\n return\n }\n }\n\n listener(evt)\n }","() => {\n if (!hasListener) return undefined\n\n const handleEvent = (evt: MouseEvent) => onEvent(evt)\n\n document.addEventListener('mousedown', handleEvent)\n\n return () => {\n document.removeEventListener('mousedown', handleEvent)\n }\n }","evt","[hasListener]"],"sources":["../src/core/hooks/useClickOutsideEvent.ts"],"sourcesContent":["import {useDebugValue, 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\nimport {EMPTY_ARRAY} from '../constants'\n\n/**\n * @public\n */\nexport type ClickOutsideEventListener = (event: MouseEvent) => void\n\n/**\n * @public\n */\nexport type ClickOutsideEventElements = (HTMLElement | null | (HTMLElement | null)[])[]\n\n/**\n * @public\n */\nexport function useClickOutsideEvent(\n listener: ClickOutsideEventListener | false | undefined,\n elementsArg: () => ClickOutsideEventElements = () => EMPTY_ARRAY,\n boundaryElement?: () => HTMLElement | null,\n): void {\n /**\n * The `useEffectEvent` hook allow us to always see the latest value of `listener`, `elementsArg` and `boundaryElement` without needing to\n * juggle `useState`, `useRef` and `useState` to make sure the `mousedown` event listener isn't constantly being added and removed.\n */\n const onEvent = useEffectEvent((evt: MouseEvent) => {\n if (!listener) {\n return\n }\n\n const target = evt.target\n\n if (!(target instanceof Node)) {\n return\n }\n\n const resolvedBoundaryElement = boundaryElement?.()\n\n if (resolvedBoundaryElement && !resolvedBoundaryElement.contains(target)) {\n return\n }\n\n const elements = elementsArg().flat()\n\n for (const el of elements) {\n if (!el) continue\n\n if (target === el || el.contains(target)) {\n return\n }\n }\n\n listener(evt)\n })\n\n const hasListener = Boolean(listener)\n\n useEffect(() => {\n if (!hasListener) return undefined\n\n const handleEvent = (evt: MouseEvent) => onEvent(evt)\n\n document.addEventListener('mousedown', handleEvent)\n\n return () => {\n document.removeEventListener('mousedown', handleEvent)\n }\n }, [hasListener])\n\n useDebugValue(listener ? 'MouseDown On' : 'MouseDown Off')\n}\n"],"mappings":";;;;;;;AAwBA,SAAgB,qBACd,UAAA,IAEA,iBACM;eAFN,cAAA,OAAA,KAAA,IAA+CA,QAA/CC,IAO+BC;CAWG,AAAA,EAAA,OAAA,mBAAA,EAAA,OAMf,eAAA,EAAA,OAhBZ,YADwB,MAAC,QAAoB;EAClD,IAAI,CAAC,UACH;EAGF,IAAM,SAAS,IAAI;EAEnB,IAAI,EAAE,kBAAkB,OACtB;EAGF,IAAM,0BAA0B,kBAAkB;EAElD,IAAI,2BAA2B,CAAC,wBAAwB,SAAS,MAAM,GACrE;EAGF,IAAM,WAAW,YAAY,CAAC,CAAC,KAAK;EAEpC,KAAK,IAAM,MAAM,UACV,WAED,WAAW,MAAM,GAAG,SAAS,MAAM,IACrC;EAIJ,SAAS,GAAG;CACd,GAjBkC,EAAA,KAAA,iBAMf,EAAA,KAAA,aAhBZ,EAAA,KAAA;CADP,IAAM,UAAU,eAAeA,EA4B9B,GAEK,cAAc,EAAQ,UAElBC;CACH,AAAA,EAAA,OAAA,eAAA,EAAA,OAEoC,WAHjC,WAAM;EACd,IAAI,CAAC,aAAa;EAElB,IAAM,eAAe,UAAoB,QAAQC,KAAG;EAIpD,OAFA,SAAS,iBAAiB,aAAa,WAAW,SAErC;GACX,SAAS,oBAAoB,aAAa,WAAW;EACvD;CACF,GATO,EAAA,KAAA,aAEoC,EAAA,KAAA;CAOxCC,IAAAA;CAEH,AAFI,EAAA,OAAA,2BAAD,KAAA,CAAC,WAAW,GAAX,EAAA,KAAA,yBAVJ,UAAUF,IAUPE,EAAa,GAEhB,cAAc,WAAW,iBAAiB,eAAe;AAC3D;AApDiD,SAAA,QAAA;CAAM,OAAA"}
@@ -2,7 +2,7 @@ import { a as rem, i as _responsive, n as _getArrayProp, o as EMPTY_ARRAY, r as
2
2
  import { t as getTheme_v2 } from "./getTheme_v2-y09KqtEb.js";
3
3
  import { t as getScopedTheme } from "./getScopedTheme-C-sZsyAz.js";
4
4
  import { c } from "react/compiler-runtime";
5
- import { createContext, useContext, useDebugValue, useEffect, useState, useSyncExternalStore } from "react";
5
+ import { createContext, useContext, useDebugValue, useEffect, useReducer, useSyncExternalStore } from "react";
6
6
  import { ThemeProvider, css, styled, useTheme } from "styled-components";
7
7
  import { jsx } from "react/jsx-runtime";
8
8
  import { isValidElementType } from "react-is";
@@ -629,9 +629,9 @@ function useMatchMedia(mediaQueryString, getServerSnapshot) {
629
629
  * @public
630
630
  */
631
631
  function usePrefersReducedMotion(t0) {
632
- return useMatchMedia("(prefers-reduced-motion: reduce)", t0 === void 0 ? _temp$1 : t0);
632
+ return useMatchMedia("(prefers-reduced-motion: reduce)", t0 === void 0 ? _temp : t0);
633
633
  }
634
- function _temp$1() {
634
+ function _temp() {
635
635
  return !1;
636
636
  }
637
637
  function isRecord(value) {
@@ -643,55 +643,76 @@ function getLayerContext(contextValue) {
643
643
  if (contextValue.version === 0) return contextValue;
644
644
  throw Error("could not get layer context");
645
645
  }
646
- const LayerContext = createGlobalScopedContext("@sanity/ui/context/layer", null);
646
+ const LayerContext = createGlobalScopedContext("@sanity/ui/context/layer", null), initialLayerState = {
647
+ childLayers: /* @__PURE__ */ new Map(),
648
+ childrenWithoutLevel: 0
649
+ };
650
+ /** @internal */
651
+ function layerReducer(state, action) {
652
+ let { level } = action;
653
+ switch (action.type) {
654
+ case "child/register": {
655
+ if (level === void 0) return {
656
+ ...state,
657
+ childrenWithoutLevel: state.childrenWithoutLevel + 1
658
+ };
659
+ let childLayers = new Map(state.childLayers);
660
+ return childLayers.set(level, (childLayers.get(level) ?? 0) + 1), {
661
+ ...state,
662
+ childLayers
663
+ };
664
+ }
665
+ case "child/unregister": {
666
+ if (level === void 0) return {
667
+ ...state,
668
+ childrenWithoutLevel: state.childrenWithoutLevel - 1
669
+ };
670
+ let childLayers = new Map(state.childLayers), count = childLayers.get(level) ?? 0;
671
+ return count === 1 ? childLayers.delete(level) : childLayers.set(level, count - 1), {
672
+ ...state,
673
+ childLayers
674
+ };
675
+ }
676
+ default: return state;
677
+ }
678
+ }
647
679
  /**
648
680
  * @public
649
681
  */
650
682
  function LayerProvider(props) {
651
- let $ = c(20), { children, zOffset: t0 } = props, zOffsetProp = t0 === void 0 ? 0 : t0, parentContextValue = useContext(LayerContext), t1;
683
+ let $ = c(19), { children, zOffset: t0 } = props, zOffsetProp = t0 === void 0 ? 0 : t0, parentContextValue = useContext(LayerContext), t1;
652
684
  $[0] === parentContextValue ? t1 = $[1] : (t1 = parentContextValue && getLayerContext(parentContextValue), $[0] = parentContextValue, $[1] = t1);
653
685
  let parent = t1, parentRegisterChild = parent?.registerChild, level = (parent?.level ?? 0) + 1, t2;
654
686
  $[2] === zOffsetProp ? t2 = $[3] : (t2 = _getArrayProp(zOffsetProp), $[2] = zOffsetProp, $[3] = t2);
655
- let zOffset = t2, maxMediaIndex = zOffset.length - 1, mediaIndex = Math.min(useMediaIndex(), maxMediaIndex), zIndex = parent ? parent.zIndex + zOffset[mediaIndex] : zOffset[mediaIndex], t3;
656
- $[4] === Symbol.for("react.memo_cache_sentinel") ? (t3 = {}, $[4] = t3) : t3 = $[4];
657
- let [, setChildLayers] = useState(t3), [size, setSize] = useState(0), isTopLayer = size === 0, t4;
658
- $[5] === parentRegisterChild ? t4 = $[6] : (t4 = (childLevel) => {
687
+ let zOffset = t2, maxMediaIndex = zOffset.length - 1, mediaIndex = Math.min(useMediaIndex(), maxMediaIndex), zIndex = parent ? parent.zIndex + zOffset[mediaIndex] : zOffset[mediaIndex], [t3, dispatch] = useReducer(layerReducer, initialLayerState), { childLayers, childrenWithoutLevel } = t3, size = childLayers.size + childrenWithoutLevel, isTopLayer = size === 0, t4;
688
+ $[4] === parentRegisterChild ? t4 = $[5] : (t4 = (childLevel) => {
659
689
  let parentDispose = parentRegisterChild?.(childLevel);
660
- return childLevel === void 0 ? setSize(_temp) : setChildLayers((state) => {
661
- let prevLen = state[childLevel] ?? 0, nextState = {
662
- ...state,
663
- [childLevel]: prevLen + 1
664
- };
665
- return setSize(Object.keys(nextState).length), nextState;
690
+ return dispatch({
691
+ type: "child/register",
692
+ level: childLevel
666
693
  }), () => {
667
- childLevel === void 0 ? setSize(_temp2) : setChildLayers((state_0) => {
668
- let nextState_0 = { ...state_0 };
669
- return nextState_0[childLevel] === 1 ? (delete nextState_0[childLevel], setSize(Object.keys(nextState_0).length)) : nextState_0[childLevel] = nextState_0[childLevel] - 1, nextState_0;
694
+ dispatch({
695
+ type: "child/unregister",
696
+ level: childLevel
670
697
  }), parentDispose?.();
671
698
  };
672
- }, $[5] = parentRegisterChild, $[6] = t4);
699
+ }, $[4] = parentRegisterChild, $[5] = t4);
673
700
  let registerChild = t4, t5, t6;
674
- $[7] !== level || $[8] !== parentRegisterChild ? (t5 = () => parentRegisterChild?.(level), t6 = [level, parentRegisterChild], $[7] = level, $[8] = parentRegisterChild, $[9] = t5, $[10] = t6) : (t5 = $[9], t6 = $[10]), useEffect(t5, t6);
701
+ $[6] !== level || $[7] !== parentRegisterChild ? (t5 = () => parentRegisterChild?.(level), t6 = [level, parentRegisterChild], $[6] = level, $[7] = parentRegisterChild, $[8] = t5, $[9] = t6) : (t5 = $[8], t6 = $[9]), useEffect(t5, t6);
675
702
  let t7;
676
- $[11] !== isTopLayer || $[12] !== level || $[13] !== registerChild || $[14] !== size || $[15] !== zIndex ? (t7 = {
703
+ $[10] !== isTopLayer || $[11] !== level || $[12] !== registerChild || $[13] !== size || $[14] !== zIndex ? (t7 = {
677
704
  version: 0,
678
705
  isTopLayer,
679
706
  level,
680
707
  registerChild,
681
708
  size,
682
709
  zIndex
683
- }, $[11] = isTopLayer, $[12] = level, $[13] = registerChild, $[14] = size, $[15] = zIndex, $[16] = t7) : t7 = $[16];
710
+ }, $[10] = isTopLayer, $[11] = level, $[12] = registerChild, $[13] = size, $[14] = zIndex, $[15] = t7) : t7 = $[15];
684
711
  let value = t7, t8;
685
- return $[17] !== children || $[18] !== value ? (t8 = /* @__PURE__ */ jsx(LayerContext.Provider, {
712
+ return $[16] !== children || $[17] !== value ? (t8 = /* @__PURE__ */ jsx(LayerContext.Provider, {
686
713
  value,
687
714
  children
688
- }), $[17] = children, $[18] = value, $[19] = t8) : t8 = $[19], t8;
689
- }
690
- function _temp2(v_0) {
691
- return v_0 - 1;
692
- }
693
- function _temp(v) {
694
- return v + 1;
715
+ }), $[16] = children, $[17] = value, $[18] = t8) : t8 = $[18], t8;
695
716
  }
696
717
  /**
697
718
  * @public
@@ -709,4 +730,4 @@ function useLayer() {
709
730
  }
710
731
  export { useTheme_v2 as _, useMatchMedia as a, responsivePaddingStyle as b, ThemeColorProvider as c, createGlobalScopedContext as d, globalScope as f, useTheme$1 as g, _cardColorStyle as h, usePrefersReducedMotion as i, useRootTheme as l, focusRingStyle as m, LayerProvider as n, useMediaIndex as o, focusRingBorderStyle as p, isRecord as r, Card as s, useLayer as t, ThemeProvider$1 as u, responsiveRadiusStyle as v, flexItemStyle as x, Box as y };
711
732
 
712
- //# sourceMappingURL=useLayer-D1usxIE0.js.map
733
+ //# sourceMappingURL=useLayer-ONr7wTUN.js.map