@ssaprt/tooltip 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +25 -42
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +25 -42
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/Tooltip.tsx","../src/config/presets.ts","../src/hooks/useTooltip.ts","../src/utils/tooltipTheme.ts","../src/components/TooltipProvider.tsx","../src/components/TooltipSurface.tsx"],"sourcesContent":["import {\n AnimationEvent,\n Children,\n cloneElement,\n CSSProperties,\n ReactElement,\n Ref,\n RefCallback,\n RefObject,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { presets } from \"src/config/presets\";\nimport { useTooltip } from \"src/hooks/useTooltip\";\nimport { TooltipInterface } from \"src/types/Tooltip.interface\";\nimport { TooltipAnimationType } from \"src/types/TooltipAnimation.type\";\nimport { mergeThemes, resolveThemeStyles } from \"src/utils/tooltipTheme\";\n\nimport { useTooltipDefaults } from \"./TooltipProvider\";\nimport { TooltipSurface } from \"./TooltipSurface\";\n\nimport \"../css/tooltip.css\";\n\ntype TooltipContainerStyle = CSSProperties & {\n \"--tooltip-bg\"?: CSSProperties[\"background\"];\n \"--tooltip-color\"?: CSSProperties[\"color\"];\n \"--tooltip-arrow-size\"?: string;\n \"--tooltip-arrow-width\"?: string;\n \"--tooltip-animation-speed\"?: string;\n \"--tooltip-animation-easing\"?: string;\n};\n\ntype RefableElementProps = {\n ref?: Ref<HTMLElement>;\n};\n\nconst DEFAULT_SHOW_ANIMATION: TooltipAnimationType = \"slide\";\nconst DEFAULT_HIDE_ANIMATION: TooltipAnimationType = \"fade\";\n\nconst assignRef = <T,>(ref: Ref<T> | undefined, value: T | null) => {\n if (typeof ref === \"function\") {\n ref(value);\n return;\n }\n\n if (ref) {\n (ref as RefObject<T | null>).current = value;\n }\n};\n\nexport const Tooltip = ({\n content,\n children,\n position,\n selectTheme,\n customTheme,\n animation,\n disabled = false,\n interactive,\n hideDelay,\n}: TooltipInterface) => {\n const defaults = useTooltipDefaults();\n const markerRef = useRef<HTMLSpanElement>(null);\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n\n const trigger = children\n ? (Children.only(children) as ReactElement<RefableElementProps>)\n : null;\n\n const triggerRef = trigger?.props.ref;\n\n const setTriggerRef = useCallback<RefCallback<HTMLElement>>(\n (node) => {\n assignRef(triggerRef, node);\n setAnchor(node);\n },\n [triggerRef],\n );\n\n useLayoutEffect(() => {\n if (trigger) {\n return;\n }\n\n const marker = markerRef.current;\n const parent = marker?.parentElement ?? null;\n\n setAnchor(parent);\n\n return () => {\n setAnchor(null);\n };\n }, [trigger]);\n\n const inheritedTheme = useMemo(() => {\n return mergeThemes(presets[defaults.selectTheme], defaults.customTheme);\n }, [defaults.customTheme, defaults.selectTheme]);\n\n const theme = useMemo(() => {\n if (selectTheme) {\n return mergeThemes(presets[selectTheme], customTheme);\n }\n\n return mergeThemes(inheritedTheme, customTheme);\n }, [customTheme, inheritedTheme, selectTheme]);\n\n const resolvedThemeStyles = useMemo(() => {\n return resolveThemeStyles(theme);\n }, [theme]);\n\n const localThemeAnimation = selectTheme\n ? theme.animation\n : customTheme?.animation;\n\n const showAnimation =\n animation?.show ??\n localThemeAnimation?.show ??\n defaults.animation?.show ??\n inheritedTheme.animation?.show ??\n DEFAULT_SHOW_ANIMATION;\n\n const hideAnimation =\n animation?.hide ??\n localThemeAnimation?.hide ??\n defaults.animation?.hide ??\n inheritedTheme.animation?.hide ??\n DEFAULT_HIDE_ANIMATION;\n\n const animationSpeed =\n animation?.speed ??\n localThemeAnimation?.speed ??\n defaults.animation?.speed ??\n inheritedTheme.animation?.speed ??\n \"120ms\";\n\n const animationEasing =\n animation?.easing ??\n localThemeAnimation?.easing ??\n defaults.animation?.easing ??\n inheritedTheme.animation?.easing ??\n \"ease-in-out\";\n\n const preferredPlacement = position ?? defaults.defaultRenderPosition;\n const resolvedInteractive = interactive ?? defaults.interactive;\n const resolvedHideDelay = hideDelay ?? defaults.hideDelay;\n\n const {\n shouldRender,\n phase,\n placement,\n position: tooltipPosition,\n tooltipRef,\n bodyRef,\n onAnimationEnd,\n } = useTooltip({\n anchor,\n preferredPlacement,\n disabled: disabled || content === null || content === undefined,\n interactive: resolvedInteractive,\n hideDelay: resolvedHideDelay,\n });\n\n const arrowSize = theme.arrow?.size ?? \"6px\";\n const arrowWidth = theme.arrow?.width ?? `calc(${arrowSize} * 2)`;\n\n const containerStyle: TooltipContainerStyle = {\n \"--tooltip-bg\": resolvedThemeStyles.background,\n \"--tooltip-color\": resolvedThemeStyles.color,\n \"--tooltip-arrow-size\": arrowSize,\n \"--tooltip-arrow-width\": arrowWidth,\n \"--tooltip-animation-speed\": animationSpeed,\n \"--tooltip-animation-easing\": animationEasing,\n ...tooltipPosition,\n };\n\n const arrowOffset = String(\n tooltipPosition[\"--tooltip-arrow-offset\"] ?? \"50%\",\n );\n\n const handleAnimationEnd = (event: AnimationEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) {\n return;\n }\n\n onAnimationEnd();\n };\n\n const triggerElement = trigger ? (\n cloneElement(trigger, {\n ref: setTriggerRef,\n })\n ) : (\n <span ref={markerRef} hidden aria-hidden=\"true\" />\n );\n\n const portal =\n shouldRender && typeof document !== \"undefined\"\n ? createPortal(\n <div\n ref={tooltipRef}\n className={[\n \"tooltip-container\",\n `tooltip-container--${placement}`,\n `tooltip-container--phase-${phase}`,\n `tooltip-container--show-${showAnimation}`,\n `tooltip-container--hide-${hideAnimation}`,\n resolvedInteractive\n ? \"tooltip-container--interactive\"\n : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={containerStyle}\n >\n <div\n ref={bodyRef}\n className=\"tooltip-body\"\n onAnimationEnd={handleAnimationEnd}\n >\n <TooltipSurface\n bodyRef={bodyRef}\n placement={placement}\n arrowOffset={arrowOffset}\n surfaceStyle={resolvedThemeStyles.surfaceStyle}\n fillStyle={resolvedThemeStyles.fillStyle}\n filter={resolvedThemeStyles.filter}\n />\n\n <div\n className={[\n \"tooltip-body__content\",\n theme.body?.className,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={resolvedThemeStyles.contentStyle}\n >\n {content}\n </div>\n </div>\n </div>,\n document.body,\n )\n : null;\n\n return (\n <>\n {triggerElement}\n {portal}\n </>\n );\n};\n","import { CSSProperties } from \"react\";\n\nimport { ThemeType } from \"../types/Theme.type\";\n\ntype PresetAnimation = NonNullable<ThemeType[\"animation\"]>;\n\ntype TooltipArrow = NonNullable<ThemeType[\"arrow\"]>;\n\ntype ArrowSize = NonNullable<TooltipArrow[\"size\"]>;\n\ntype ArrowWidth = NonNullable<TooltipArrow[\"width\"]>;\n\ntype CreateThemeOptions = {\n background: NonNullable<CSSProperties[\"background\"]>;\n color: NonNullable<CSSProperties[\"color\"]>;\n fontFamily?: CSSProperties[\"fontFamily\"];\n fontSize?: CSSProperties[\"fontSize\"];\n fontWeight?: CSSProperties[\"fontWeight\"];\n fontStyle?: CSSProperties[\"fontStyle\"];\n lineHeight?: CSSProperties[\"lineHeight\"];\n borderRadius?: CSSProperties[\"borderRadius\"];\n border?: CSSProperties[\"border\"];\n filter?: CSSProperties[\"filter\"];\n padding?: CSSProperties[\"padding\"];\n letterSpacing?: CSSProperties[\"letterSpacing\"];\n textShadow?: CSSProperties[\"textShadow\"];\n textTransform?: CSSProperties[\"textTransform\"];\n textAlign?: CSSProperties[\"textAlign\"];\n backdropFilter?: CSSProperties[\"backdropFilter\"];\n arrowSize?: ArrowSize;\n arrowWidth?: ArrowWidth;\n animation?: PresetAnimation;\n style?: CSSProperties;\n};\n\nconst animations = {\n soft: {\n show: \"fade\",\n hide: \"fade\",\n speed: \"160ms\",\n easing: \"ease-in-out\",\n },\n\n slide: {\n show: \"slide\",\n hide: \"fade\",\n speed: \"160ms\",\n easing: \"ease-out\",\n },\n\n pop: {\n show: \"scale\",\n hide: \"scale\",\n speed: \"170ms\",\n easing: \"cubic-bezier(0.22, 1, 0.36, 1)\",\n },\n\n bounce: {\n show: \"bounce\",\n hide: \"scale\",\n speed: \"240ms\",\n easing: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n },\n\n flip: {\n show: \"flip\",\n hide: \"fade\",\n speed: \"210ms\",\n easing: \"cubic-bezier(0.22, 1, 0.36, 1)\",\n },\n\n blur: {\n show: \"blur\",\n hide: \"blur\",\n speed: \"200ms\",\n easing: \"ease-out\",\n },\n\n zoom: {\n show: \"zoom\",\n hide: \"zoom\",\n speed: \"170ms\",\n easing: \"ease-out\",\n },\n\n snap: {\n show: \"zoom\",\n hide: \"fade\",\n speed: \"110ms\",\n easing: \"steps(4, end)\",\n },\n\n instant: {\n show: \"none\",\n hide: \"none\",\n speed: \"1ms\",\n easing: \"linear\",\n },\n} satisfies Record<string, PresetAnimation>;\n\nconst createTheme = ({\n background,\n color,\n fontFamily = \"Inter, Arial, sans-serif\",\n fontSize = \"12px\",\n fontWeight = 500,\n fontStyle,\n lineHeight = 1.4,\n borderRadius = \"7px\",\n border,\n filter,\n padding = \"7px 12px\",\n letterSpacing,\n textShadow,\n textTransform,\n textAlign = \"center\",\n backdropFilter,\n arrowSize = \"7px\",\n arrowWidth = \"14px\",\n animation = animations.slide,\n style,\n}: CreateThemeOptions): ThemeType => {\n return {\n body: {\n background,\n filter,\n style: {\n color,\n fontFamily,\n fontSize,\n fontWeight,\n fontStyle,\n lineHeight,\n borderRadius,\n border,\n padding,\n letterSpacing,\n textShadow,\n textTransform,\n textAlign,\n backdropFilter,\n WebkitBackdropFilter: backdropFilter,\n ...style,\n },\n },\n\n arrow: {\n size: arrowSize,\n width: arrowWidth,\n },\n\n animation,\n };\n};\n\nexport const presets = {\n primary: createTheme({\n background: \"linear-gradient(135deg, #2563eb, #1d4ed8)\",\n color: \"#ffffff\",\n filter: \"drop-shadow(0 7px 12px rgba(37, 99, 235, 0.38))\",\n border: \"1px solid rgba(255, 255, 255, 0.18)\",\n borderRadius: \"8px\",\n }),\n\n secondary: createTheme({\n background: \"linear-gradient(135deg, #64748b, #475569)\",\n color: \"#ffffff\",\n filter: \"drop-shadow(0 7px 12px rgba(15, 23, 42, 0.3))\",\n border: \"1px solid rgba(255, 255, 255, 0.15)\",\n animation: animations.soft,\n }),\n\n dark: createTheme({\n background: \"linear-gradient(145deg, #18181b, #09090b)\",\n color: \"#fafafa\",\n border: \"1px solid #3f3f46\",\n borderRadius: \"10px\",\n filter: \"drop-shadow(0 11px 18px rgba(0, 0, 0, 0.56))\",\n animation: animations.pop,\n }),\n\n light: createTheme({\n background: \"linear-gradient(145deg, #ffffff, #f4f4f5)\",\n color: \"#18181b\",\n border: \"1px solid #d4d4d8\",\n borderRadius: \"10px\",\n filter: \"drop-shadow(0 9px 15px rgba(15, 23, 42, 0.18))\",\n animation: animations.soft,\n }),\n\n comic: createTheme({\n background: \"#fde047\",\n color: \"#18181b\",\n fontFamily: \"Comic Sans MS, Comic Sans, cursive\",\n fontSize: \"13px\",\n fontWeight: 700,\n border: \"3px solid #18181b\",\n borderRadius: \"12px\",\n filter: \"drop-shadow(5px 5px 0 #18181b)\",\n padding: \"8px 14px\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.bounce,\n }),\n\n manga: createTheme({\n background:\n \"radial-gradient(circle at 2px 2px, rgba(0, 0, 0, 0.2) 1px, transparent 1.5px) 0 0 / 6px 6px, #ffffff\",\n color: \"#000000\",\n fontFamily: \"Impact, Haettenschweiler, Arial Narrow Bold, sans-serif\",\n fontSize: \"13px\",\n fontWeight: 900,\n border: \"3px solid #000000\",\n borderRadius: \"18px 5px 18px 5px\",\n filter: \"drop-shadow(4px 4px 0 #000000)\",\n padding: \"9px 15px\",\n letterSpacing: \"0.04em\",\n textTransform: \"uppercase\",\n arrowSize: \"11px\",\n arrowWidth: \"17px\",\n animation: animations.snap,\n }),\n\n newspaper: createTheme({\n background:\n \"repeating-linear-gradient(0deg, rgba(68, 64, 60, 0.035) 0, rgba(68, 64, 60, 0.035) 1px, transparent 1px, transparent 4px), #f5f0e6\",\n color: \"#292524\",\n fontFamily: \"Times New Roman, Times, serif\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"2px solid #44403c\",\n borderRadius: \"1px\",\n filter: \"drop-shadow(3px 4px 0 rgba(68, 64, 60, 0.28))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.02em\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"18px\",\n animation: animations.soft,\n style: {\n fontVariantCaps: \"small-caps\",\n },\n }),\n\n stickyNote: createTheme({\n background:\n \"linear-gradient(145deg, #fff7a8 0%, #fde96b 70%, #e9cc42 100%)\",\n color: \"#4a3c00\",\n fontFamily: \"Comic Sans MS, cursive\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"1px solid #d6b936\",\n borderRadius: \"3px 14px 5px 11px\",\n filter: \"drop-shadow(3px 6px 5px rgba(78, 65, 0, 0.28))\",\n padding: \"10px 15px\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"19px\",\n animation: animations.pop,\n }),\n\n blueprint: createTheme({\n background:\n \"linear-gradient(rgba(147, 197, 253, 0.15) 1px, transparent 1px), linear-gradient(90deg, rgba(147, 197, 253, 0.15) 1px, transparent 1px), #0c4a6e\",\n color: \"#e0f2fe\",\n fontFamily: \"Courier New, Consolas, monospace\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"2px dashed #7dd3fc\",\n borderRadius: \"2px\",\n filter: \"drop-shadow(0 0 7px rgba(56, 189, 248, 0.45))\",\n padding: \"9px 13px\",\n letterSpacing: \"0.05em\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"16px\",\n animation: animations.flip,\n style: {\n backgroundSize: \"12px 12px\",\n },\n }),\n\n terminal: createTheme({\n background: \"linear-gradient(180deg, #020617, #000000)\",\n color: \"#22c55e\",\n fontFamily: \"Consolas, Monaco, Courier New, monospace\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"1px solid #22c55e\",\n borderRadius: \"3px\",\n filter: \"drop-shadow(0 0 5px rgba(34, 197, 94, 0.65))\",\n padding: \"8px 12px\",\n letterSpacing: \"0.035em\",\n textShadow: \"0 0 5px rgba(34, 197, 94, 0.9)\",\n textAlign: \"left\",\n arrowSize: \"7px\",\n arrowWidth: \"13px\",\n animation: animations.instant,\n }),\n\n crt: createTheme({\n background:\n \"repeating-linear-gradient(0deg, rgba(34, 197, 94, 0.08) 0, rgba(34, 197, 94, 0.08) 1px, transparent 1px, transparent 3px), radial-gradient(circle at center, #07150b, #000000)\",\n color: \"#86efac\",\n fontFamily: \"Lucida Console, Monaco, monospace\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"2px solid #166534\",\n borderRadius: \"18px\",\n filter: \"drop-shadow(0 0 8px rgba(34, 197, 94, 0.5)) drop-shadow(0 0 18px rgba(34, 197, 94, 0.18))\",\n padding: \"10px 15px\",\n textShadow: \"0 0 6px rgba(134, 239, 172, 0.85)\",\n arrowSize: \"8px\",\n arrowWidth: \"18px\",\n animation: animations.blur,\n }),\n\n pixel: createTheme({\n background:\n \"linear-gradient(135deg, #4c1d95 25%, #581c87 25%, #581c87 50%, #4c1d95 50%, #4c1d95 75%, #581c87 75%) 0 0 / 8px 8px\",\n color: \"#fef08a\",\n fontFamily: \"Press Start 2P, Courier New, monospace\",\n fontSize: \"10px\",\n fontWeight: 700,\n lineHeight: 1.7,\n border: \"4px solid #fef08a\",\n borderRadius: \"0px\",\n filter: \"drop-shadow(6px 6px 0 #18181b)\",\n padding: \"10px 14px\",\n letterSpacing: \"0.03em\",\n textShadow: \"2px 2px 0 #18181b\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"18px\",\n animation: animations.snap,\n }),\n\n arcade: createTheme({\n background:\n \"radial-gradient(circle at 20% 0%, rgba(34, 211, 238, 0.45), transparent 38%), radial-gradient(circle at 90% 100%, rgba(236, 72, 153, 0.55), transparent 45%), #150629\",\n color: \"#ffffff\",\n fontFamily: \"Arial Black, Impact, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"2px solid #22d3ee\",\n borderRadius: \"12px\",\n filter: \"drop-shadow(3px 3px 0 #ec4899) drop-shadow(-3px -3px 0 #22d3ee)\",\n padding: \"9px 15px\",\n letterSpacing: \"0.07em\",\n textShadow: \"0 0 6px #22d3ee\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"18px\",\n animation: animations.bounce,\n }),\n\n cyberpunk: createTheme({\n background:\n \"repeating-linear-gradient(135deg, rgba(0, 0, 0, 0.12) 0, rgba(0, 0, 0, 0.12) 5px, transparent 5px, transparent 10px), linear-gradient(135deg, #fde047, #facc15)\",\n color: \"#18181b\",\n fontFamily: \"Impact, Arial Black, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"2px solid #22d3ee\",\n borderRadius: \"1px 12px 1px 12px\",\n filter: \"drop-shadow(5px 5px 0 #ec4899) drop-shadow(-2px -2px 0 #22d3ee)\",\n padding: \"9px 15px\",\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"21px\",\n animation: animations.flip,\n }),\n\n synthwave: createTheme({\n background:\n \"linear-gradient(180deg, rgba(15, 23, 42, 0.2), rgba(15, 23, 42, 0.75)), linear-gradient(135deg, #7c3aed, #db2777)\",\n color: \"#fdf4ff\",\n fontFamily: \"Trebuchet MS, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #67e8f9\",\n borderRadius: \"16px 3px 16px 3px\",\n filter: \"drop-shadow(0 0 7px #ec4899) drop-shadow(0 0 14px rgba(103, 232, 249, 0.5))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.07em\",\n textShadow: \"0 0 6px rgba(255, 255, 255, 0.7)\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.zoom,\n }),\n\n vaporwave: createTheme({\n background:\n \"linear-gradient(135deg, rgba(255, 255, 255, 0.2), transparent 50%), linear-gradient(135deg, #67e8f9, #f0abfc 52%, #f9a8d4)\",\n color: \"#4c1d95\",\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #ffffff\",\n borderRadius: \"18px\",\n filter: \"drop-shadow(5px 6px 0 rgba(124, 58, 237, 0.42))\",\n padding: \"9px 16px\",\n letterSpacing: \"0.06em\",\n textShadow: \"1px 1px 0 rgba(255, 255, 255, 0.8)\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"21px\",\n animation: animations.bounce,\n }),\n\n hologram: createTheme({\n background:\n \"linear-gradient(115deg, rgba(34, 211, 238, 0.42), rgba(168, 85, 247, 0.35), rgba(236, 72, 153, 0.35), rgba(34, 211, 238, 0.42)), linear-gradient(135deg, #082f49, #312e81)\",\n color: \"#ecfeff\",\n fontFamily: \"Segoe UI, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"1px solid rgba(165, 243, 252, 0.75)\",\n borderRadius: \"14px\",\n filter: \"drop-shadow(0 0 7px rgba(34, 211, 238, 0.75)) drop-shadow(0 0 16px rgba(168, 85, 247, 0.4))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.06em\",\n arrowSize: \"8px\",\n arrowWidth: \"18px\",\n animation: animations.blur,\n }),\n\n glass: createTheme({\n background:\n \"linear-gradient(135deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0.07)), linear-gradient(135deg, #1e293b, #0f172a)\",\n color: \"#f8fafc\",\n border: \"1px solid rgba(255, 255, 255, 0.34)\",\n borderRadius: \"16px\",\n filter: \"drop-shadow(0 12px 20px rgba(15, 23, 42, 0.38))\",\n padding: \"9px 15px\",\n arrowSize: \"8px\",\n arrowWidth: \"18px\",\n animation: animations.blur,\n }),\n\n frost: createTheme({\n background:\n \"radial-gradient(circle at 15% 20%, rgba(255, 255, 255, 0.85), transparent 35%), linear-gradient(135deg, #e0f2fe, #bae6fd)\",\n color: \"#075985\",\n fontWeight: 600,\n border: \"1px solid rgba(125, 211, 252, 0.9)\",\n borderRadius: \"18px\",\n filter: \"drop-shadow(0 8px 15px rgba(14, 116, 144, 0.24))\",\n padding: \"9px 15px\",\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.8)\",\n arrowSize: \"8px\",\n arrowWidth: \"19px\",\n animation: animations.blur,\n }),\n\n clay: createTheme({\n background: \"linear-gradient(145deg, #f3d5bc, #d9a77d)\",\n color: \"#5b2d16\",\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"1px solid #c78f63\",\n borderRadius: \"24px\",\n filter: \"drop-shadow(7px 9px 10px rgba(91, 45, 22, 0.28)) drop-shadow(-3px -3px 5px rgba(255, 242, 229, 0.72))\",\n padding: \"10px 17px\",\n arrowSize: \"9px\",\n arrowWidth: \"22px\",\n animation: animations.pop,\n }),\n\n bubblegum: createTheme({\n background:\n \"radial-gradient(circle at 25% 15%, rgba(255, 255, 255, 0.55), transparent 28%), linear-gradient(135deg, #f9a8d4, #f472b6)\",\n color: \"#831843\",\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #fdf2f8\",\n borderRadius: \"999px\",\n filter: \"drop-shadow(0 8px 12px rgba(219, 39, 119, 0.34))\",\n padding: \"9px 18px\",\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.8)\",\n arrowSize: \"9px\",\n arrowWidth: \"22px\",\n animation: animations.bounce,\n }),\n\n candy: createTheme({\n background:\n \"repeating-linear-gradient(135deg, #ffffff 0, #ffffff 8px, #ef4444 8px, #ef4444 16px)\",\n color: \"#991b1b\",\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"3px solid #991b1b\",\n borderRadius: \"16px\",\n filter: \"drop-shadow(4px 5px 0 rgba(127, 29, 29, 0.5))\",\n padding: \"9px 16px\",\n textShadow: \"1px 1px 0 #ffffff, -1px -1px 0 #ffffff\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"22px\",\n animation: animations.bounce,\n }),\n\n watermelon: createTheme({\n background:\n \"radial-gradient(ellipse at 22% 30%, #111827 0 2px, transparent 3px), radial-gradient(ellipse at 72% 68%, #111827 0 2px, transparent 3px), linear-gradient(180deg, #fb7185 0%, #f43f5e 72%, #f8fafc 72%, #f8fafc 82%, #22c55e 82%)\",\n color: \"#4c0519\",\n fontFamily: \"Trebuchet MS, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 800,\n border: \"2px solid #166534\",\n borderRadius: \"20px 20px 8px 8px\",\n filter: \"drop-shadow(0 8px 11px rgba(22, 101, 52, 0.32))\",\n padding: \"9px 16px 12px\",\n arrowSize: \"9px\",\n arrowWidth: \"22px\",\n animation: animations.pop,\n }),\n\n lemon: createTheme({\n background:\n \"radial-gradient(circle at 25% 25%, rgba(255, 255, 255, 0.65), transparent 22%), linear-gradient(135deg, #fef08a, #facc15)\",\n color: \"#713f12\",\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 800,\n border: \"2px dotted #a16207\",\n borderRadius: \"999px\",\n filter: \"drop-shadow(0 7px 10px rgba(202, 138, 4, 0.32))\",\n padding: \"8px 17px\",\n arrowSize: \"9px\",\n arrowWidth: \"22px\",\n animation: animations.bounce,\n }),\n\n lava: createTheme({\n background:\n \"radial-gradient(circle at 18% 20%, #facc15 0, #f97316 8%, transparent 22%), radial-gradient(circle at 78% 70%, #ef4444 0, #7f1d1d 18%, transparent 34%), linear-gradient(135deg, #450a0a, #09090b)\",\n color: \"#fef3c7\",\n fontFamily: \"Impact, Arial Black, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 800,\n border: \"2px solid #f97316\",\n borderRadius: \"14px 4px 18px 6px\",\n filter: \"drop-shadow(0 0 7px rgba(249, 115, 22, 0.8)) drop-shadow(0 8px 15px rgba(69, 10, 10, 0.6))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.04em\",\n textShadow: \"0 0 5px rgba(253, 186, 116, 0.8)\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"19px\",\n animation: animations.zoom,\n }),\n\n ember: createTheme({\n background:\n \"radial-gradient(circle at 15% 40%, rgba(251, 146, 60, 0.72), transparent 22%), radial-gradient(circle at 75% 20%, rgba(239, 68, 68, 0.48), transparent 25%), #291208\",\n color: \"#fed7aa\",\n fontFamily: \"Georgia, serif\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"1px solid #c2410c\",\n borderRadius: \"8px 18px 8px 18px\",\n filter: \"drop-shadow(0 0 7px rgba(234, 88, 12, 0.5))\",\n padding: \"9px 15px\",\n textShadow: \"0 0 4px rgba(251, 146, 60, 0.7)\",\n arrowSize: \"9px\",\n arrowWidth: \"18px\",\n animation: animations.blur,\n }),\n\n toxic: createTheme({\n background:\n \"repeating-linear-gradient(135deg, rgba(0, 0, 0, 0.17) 0, rgba(0, 0, 0, 0.17) 5px, transparent 5px, transparent 10px), #a3e635\",\n color: \"#1a2e05\",\n fontFamily: \"Arial Black, Impact, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"3px solid #1a2e05\",\n borderRadius: \"2px 12px 2px 12px\",\n filter: \"drop-shadow(4px 5px 0 #365314)\",\n padding: \"9px 14px\",\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"20px\",\n animation: animations.snap,\n }),\n\n radioactive: createTheme({\n background:\n \"conic-gradient(from 45deg at 50% 50%, #facc15 0 12.5%, #18181b 12.5% 25%, #facc15 25% 37.5%, #18181b 37.5% 50%, #facc15 50% 62.5%, #18181b 62.5% 75%, #facc15 75% 87.5%, #18181b 87.5%)\",\n color: \"#ffffff\",\n fontFamily: \"Arial Black, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"3px solid #000000\",\n borderRadius: \"50%\",\n filter: \"drop-shadow(0 0 8px rgba(250, 204, 21, 0.7))\",\n padding: \"13px 18px\",\n letterSpacing: \"0.05em\",\n textShadow: \"2px 2px 0 #000000, -1px -1px 0 #000000\",\n textTransform: \"uppercase\",\n arrowSize: \"11px\",\n arrowWidth: \"21px\",\n animation: animations.zoom,\n }),\n\n hazard: createTheme({\n background:\n \"repeating-linear-gradient(135deg, #f97316 0, #f97316 10px, #18181b 10px, #18181b 20px)\",\n color: \"#ffffff\",\n fontFamily: \"Arial Black, Impact, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"3px solid #18181b\",\n borderRadius: \"4px\",\n filter: \"drop-shadow(5px 5px 0 rgba(24, 24, 27, 0.6))\",\n padding: \"9px 15px\",\n textShadow: \"2px 2px 0 #18181b, -1px -1px 0 #18181b\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"20px\",\n animation: animations.snap,\n }),\n\n policeTape: createTheme({\n background:\n \"repeating-linear-gradient(135deg, #f8fafc 0, #f8fafc 11px, #2563eb 11px, #2563eb 22px)\",\n color: \"#172554\",\n fontFamily: \"Arial Narrow, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"3px solid #1e3a8a\",\n borderRadius: \"1px\",\n filter: \"drop-shadow(4px 5px 0 rgba(30, 58, 138, 0.42))\",\n padding: \"8px 15px\",\n letterSpacing: \"0.1em\",\n textShadow: \"1px 1px 0 #ffffff, -1px -1px 0 #ffffff\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.slide,\n }),\n\n construction: createTheme({\n background:\n \"repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.045) 0, rgba(255, 255, 255, 0.045) 1px, transparent 1px, transparent 7px), linear-gradient(135deg, #52525b, #27272a)\",\n color: \"#fed7aa\",\n fontFamily: \"DIN Condensed, Arial Narrow, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 800,\n border: \"3px dashed #f97316\",\n borderRadius: \"3px\",\n filter: \"drop-shadow(5px 6px 0 rgba(24, 24, 27, 0.52))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.07em\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"20px\",\n animation: animations.flip,\n }),\n\n parchment: createTheme({\n background:\n \"radial-gradient(circle at 12% 20%, rgba(120, 83, 36, 0.12), transparent 20%), radial-gradient(circle at 82% 70%, rgba(120, 83, 36, 0.16), transparent 25%), linear-gradient(135deg, #f5deb3, #e7c78e)\",\n color: \"#5b3716\",\n fontFamily: \"Garamond, Georgia, serif\",\n fontSize: \"14px\",\n fontWeight: 600,\n border: \"2px solid #9a6b32\",\n borderRadius: \"14px 3px 12px 5px\",\n filter: \"drop-shadow(4px 6px 5px rgba(91, 55, 22, 0.3))\",\n padding: \"10px 16px\",\n textAlign: \"left\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.soft,\n }),\n\n pirateMap: createTheme({\n background:\n \"radial-gradient(circle at 75% 25%, transparent 0 6px, rgba(127, 29, 29, 0.55) 7px 8px, transparent 9px), repeating-radial-gradient(circle at 15% 85%, rgba(120, 83, 36, 0.08) 0 2px, transparent 2px 9px), #e7c78e\",\n color: \"#422006\",\n fontFamily: \"Papyrus, Harrington, Georgia, serif\",\n fontSize: \"13px\",\n fontWeight: 700,\n border: \"2px dashed #78350f\",\n borderRadius: \"5px 17px 7px 12px\",\n filter: \"drop-shadow(4px 7px 5px rgba(66, 32, 6, 0.36))\",\n padding: \"10px 16px\",\n letterSpacing: \"0.025em\",\n textAlign: \"left\",\n arrowSize: \"10px\",\n arrowWidth: \"19px\",\n animation: animations.flip,\n }),\n\n royal: createTheme({\n background:\n \"radial-gradient(circle at 50% -20%, rgba(250, 204, 21, 0.5), transparent 46%), linear-gradient(135deg, #581c87, #2e1065)\",\n color: \"#fef3c7\",\n fontFamily: \"Palatino Linotype, Book Antiqua, serif\",\n fontSize: \"13px\",\n fontWeight: 700,\n border: \"2px solid #facc15\",\n borderRadius: \"6px 20px 6px 20px\",\n filter: \"drop-shadow(0 8px 14px rgba(46, 16, 101, 0.55)) drop-shadow(0 0 5px rgba(250, 204, 21, 0.4))\",\n padding: \"10px 17px\",\n letterSpacing: \"0.05em\",\n textShadow: \"0 1px 2px rgba(0, 0, 0, 0.7)\",\n arrowSize: \"10px\",\n arrowWidth: \"21px\",\n animation: animations.flip,\n style: {\n fontVariantCaps: \"small-caps\",\n },\n }),\n\n noir: createTheme({\n background:\n \"linear-gradient(115deg, #000000 0%, #27272a 48%, #09090b 52%, #000000 100%)\",\n color: \"#ffffff\",\n fontFamily: \"Helvetica Neue, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"1px solid #a1a1aa\",\n borderRadius: \"0px\",\n filter: \"drop-shadow(7px 9px 0 rgba(0, 0, 0, 0.6))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.12em\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"16px\",\n animation: animations.soft,\n }),\n\n detective: createTheme({\n background:\n \"repeating-linear-gradient(0deg, rgba(68, 64, 60, 0.05) 0, rgba(68, 64, 60, 0.05) 1px, transparent 1px, transparent 5px), #d6c29f\",\n color: \"#292524\",\n fontFamily: \"Courier New, monospace\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #57534e\",\n borderRadius: \"2px\",\n filter: \"drop-shadow(5px 7px 0 rgba(68, 64, 60, 0.34))\",\n padding: \"10px 15px\",\n letterSpacing: \"0.04em\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"17px\",\n animation: animations.slide,\n }),\n\n dossier: createTheme({\n background:\n \"linear-gradient(90deg, rgba(127, 29, 29, 0.15) 0 4px, transparent 4px), repeating-linear-gradient(0deg, transparent 0 14px, rgba(120, 83, 36, 0.13) 14px 15px), #e7d7b5\",\n color: \"#3f2d1d\",\n fontFamily: \"Courier New, monospace\",\n fontSize: \"11px\",\n fontWeight: 800,\n border: \"2px solid #92400e\",\n borderRadius: \"1px 8px 1px 8px\",\n filter: \"drop-shadow(5px 7px 0 rgba(120, 53, 15, 0.35))\",\n padding: \"11px 16px\",\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"17px\",\n animation: animations.snap,\n }),\n\n medical: createTheme({\n background:\n \"linear-gradient(90deg, transparent 44%, rgba(14, 165, 233, 0.08) 44% 56%, transparent 56%), linear-gradient(0deg, transparent 44%, rgba(14, 165, 233, 0.08) 44% 56%, transparent 56%), #f8fafc\",\n color: \"#075985\",\n fontFamily: \"Arial, Helvetica, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #38bdf8\",\n borderRadius: \"10px\",\n filter: \"drop-shadow(0 8px 12px rgba(14, 165, 233, 0.2))\",\n padding: \"9px 15px\",\n arrowSize: \"8px\",\n arrowWidth: \"18px\",\n animation: animations.soft,\n }),\n\n laboratory: createTheme({\n background:\n \"linear-gradient(rgba(34, 211, 238, 0.09) 1px, transparent 1px), linear-gradient(90deg, rgba(34, 211, 238, 0.09) 1px, transparent 1px), linear-gradient(135deg, #082f49, #0f172a)\",\n color: \"#a5f3fc\",\n fontFamily: \"Roboto Mono, Consolas, monospace\",\n fontSize: \"11px\",\n fontWeight: 600,\n border: \"1px solid #22d3ee\",\n borderRadius: \"7px\",\n filter: \"drop-shadow(0 0 7px rgba(34, 211, 238, 0.45))\",\n padding: \"9px 14px\",\n letterSpacing: \"0.04em\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"16px\",\n animation: animations.blur,\n style: {\n backgroundSize: \"10px 10px\",\n },\n }),\n\n circuit: createTheme({\n background:\n \"linear-gradient(90deg, transparent 48%, rgba(34, 197, 94, 0.2) 48% 52%, transparent 52%) 0 0 / 18px 18px, linear-gradient(0deg, transparent 48%, rgba(34, 197, 94, 0.2) 48% 52%, transparent 52%) 0 0 / 18px 18px, radial-gradient(circle at 9px 9px, #22c55e 0 1.5px, transparent 2px) 0 0 / 18px 18px, #052e16\",\n color: \"#bbf7d0\",\n fontFamily: \"Consolas, monospace\",\n fontSize: \"11px\",\n fontWeight: 700,\n border: \"2px solid #22c55e\",\n borderRadius: \"5px\",\n filter: \"drop-shadow(0 0 7px rgba(34, 197, 94, 0.55))\",\n padding: \"9px 14px\",\n letterSpacing: \"0.05em\",\n textShadow: \"0 0 4px rgba(34, 197, 94, 0.75)\",\n arrowSize: \"8px\",\n arrowWidth: \"16px\",\n animation: animations.snap,\n }),\n\n galaxy: createTheme({\n background:\n \"radial-gradient(circle at 12% 25%, #ffffff 0 1px, transparent 1.5px), radial-gradient(circle at 76% 18%, #c4b5fd 0 1px, transparent 1.5px), radial-gradient(circle at 63% 78%, #ffffff 0 1.2px, transparent 1.8px), radial-gradient(circle at 28% 72%, rgba(236, 72, 153, 0.55), transparent 22%), radial-gradient(circle at 70% 20%, rgba(99, 102, 241, 0.55), transparent 32%), #09051f\",\n color: \"#f5f3ff\",\n fontFamily: \"Trebuchet MS, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"1px solid #8b5cf6\",\n borderRadius: \"18px\",\n filter: \"drop-shadow(0 0 9px rgba(139, 92, 246, 0.62)) drop-shadow(0 9px 16px rgba(9, 5, 31, 0.6))\",\n padding: \"10px 16px\",\n textShadow: \"0 0 5px rgba(196, 181, 253, 0.8)\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.blur,\n }),\n\n aurora: createTheme({\n background:\n \"radial-gradient(ellipse at 15% 0%, rgba(45, 212, 191, 0.85), transparent 45%), radial-gradient(ellipse at 90% 100%, rgba(217, 70, 239, 0.72), transparent 50%), linear-gradient(135deg, #0f172a, #312e81)\",\n color: \"#f0fdfa\",\n fontFamily: \"Segoe UI, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"1px solid rgba(153, 246, 228, 0.6)\",\n borderRadius: \"20px 8px 20px 8px\",\n filter: \"drop-shadow(0 10px 17px rgba(49, 46, 129, 0.48))\",\n padding: \"10px 16px\",\n arrowSize: \"9px\",\n arrowWidth: \"21px\",\n animation: animations.blur,\n }),\n\n oceanDepths: createTheme({\n background:\n \"radial-gradient(circle at 20% 10%, rgba(34, 211, 238, 0.32), transparent 32%), radial-gradient(circle at 80% 90%, rgba(14, 116, 144, 0.42), transparent 36%), linear-gradient(160deg, #083344, #020617)\",\n color: \"#cffafe\",\n fontFamily: \"Trebuchet MS, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"1px solid #0e7490\",\n borderRadius: \"4px 20px 4px 20px\",\n filter: \"drop-shadow(0 10px 16px rgba(2, 6, 23, 0.56)) drop-shadow(0 0 6px rgba(34, 211, 238, 0.3))\",\n padding: \"10px 16px\",\n arrowSize: \"10px\",\n arrowWidth: \"19px\",\n animation: animations.slide,\n }),\n\n coralReef: createTheme({\n background:\n \"radial-gradient(circle at 15% 100%, rgba(251, 113, 133, 0.75), transparent 30%), radial-gradient(circle at 90% 0%, rgba(45, 212, 191, 0.72), transparent 34%), linear-gradient(135deg, #0e7490, #155e75)\",\n color: \"#fff7ed\",\n fontFamily: \"Trebuchet MS, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #fdba74\",\n borderRadius: \"18px 8px 14px 5px\",\n filter: \"drop-shadow(0 9px 14px rgba(14, 116, 144, 0.4))\",\n padding: \"9px 16px\",\n textShadow: \"0 1px 2px rgba(12, 74, 110, 0.8)\",\n arrowSize: \"9px\",\n arrowWidth: \"21px\",\n animation: animations.bounce,\n }),\n\n forest: createTheme({\n background:\n \"radial-gradient(ellipse at 20% 20%, rgba(74, 222, 128, 0.18), transparent 30%), repeating-linear-gradient(115deg, rgba(255, 255, 255, 0.025) 0 2px, transparent 2px 7px), linear-gradient(135deg, #14532d, #052e16)\",\n color: \"#dcfce7\",\n fontFamily: \"Georgia, serif\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"2px solid #4d7c0f\",\n borderRadius: \"13px 4px 17px 6px\",\n filter: \"drop-shadow(0 9px 14px rgba(5, 46, 22, 0.5))\",\n padding: \"9px 16px\",\n arrowSize: \"9px\",\n arrowWidth: \"19px\",\n animation: animations.slide,\n }),\n\n moss: createTheme({\n background:\n \"radial-gradient(circle at 20% 30%, rgba(190, 242, 100, 0.16) 0 3px, transparent 4px), radial-gradient(circle at 72% 65%, rgba(132, 204, 22, 0.14) 0 4px, transparent 5px), linear-gradient(135deg, #3f6212, #1a2e05)\",\n color: \"#ecfccb\",\n fontFamily: \"Palatino Linotype, serif\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"2px dotted #84cc16\",\n borderRadius: \"18px 7px 14px 10px\",\n filter: \"drop-shadow(0 8px 13px rgba(26, 46, 5, 0.5))\",\n padding: \"10px 16px\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.blur,\n }),\n\n desert: createTheme({\n background:\n \"radial-gradient(ellipse at 20% 120%, #f59e0b 0 35%, transparent 36%), radial-gradient(ellipse at 85% 110%, #d97706 0 40%, transparent 41%), linear-gradient(180deg, #fde68a, #fbbf24)\",\n color: \"#78350f\",\n fontFamily: \"Georgia, serif\",\n fontSize: \"13px\",\n fontWeight: 700,\n border: \"2px solid #b45309\",\n borderRadius: \"22px 22px 7px 7px\",\n filter: \"drop-shadow(0 9px 13px rgba(180, 83, 9, 0.32))\",\n padding: \"10px 16px\",\n arrowSize: \"9px\",\n arrowWidth: \"21px\",\n animation: animations.soft,\n }),\n\n snow: createTheme({\n background:\n \"radial-gradient(circle at 15% 25%, #ffffff 0 2px, transparent 2.5px), radial-gradient(circle at 75% 65%, #ffffff 0 1.5px, transparent 2px), linear-gradient(135deg, #e0f2fe, #bae6fd)\",\n color: \"#0c4a6e\",\n fontFamily: \"Helvetica Neue, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"2px solid #ffffff\",\n borderRadius: \"20px\",\n filter: \"drop-shadow(0 8px 13px rgba(14, 116, 144, 0.22))\",\n padding: \"10px 16px\",\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.9)\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.blur,\n }),\n\n chrome: createTheme({\n background:\n \"linear-gradient(180deg, #ffffff 0%, #a1a1aa 18%, #f4f4f5 38%, #52525b 52%, #d4d4d8 72%, #71717a 100%)\",\n color: \"#18181b\",\n fontFamily: \"Arial Black, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"2px solid #27272a\",\n borderRadius: \"10px\",\n filter: \"drop-shadow(0 8px 12px rgba(24, 24, 27, 0.45))\",\n padding: \"9px 16px\",\n letterSpacing: \"0.04em\",\n textShadow: \"0 1px 0 #ffffff\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.flip,\n }),\n\n goldFoil: createTheme({\n background:\n \"linear-gradient(115deg, #713f12 0%, #facc15 18%, #fef08a 32%, #ca8a04 52%, #fef9c3 70%, #a16207 100%)\",\n color: \"#422006\",\n fontFamily: \"Palatino Linotype, serif\",\n fontSize: \"13px\",\n fontWeight: 800,\n border: \"2px solid #713f12\",\n borderRadius: \"5px 16px 5px 16px\",\n filter: \"drop-shadow(0 9px 14px rgba(113, 63, 18, 0.45))\",\n padding: \"10px 17px\",\n letterSpacing: \"0.04em\",\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.55)\",\n arrowSize: \"10px\",\n arrowWidth: \"21px\",\n animation: animations.flip,\n style: {\n fontVariantCaps: \"small-caps\",\n },\n }),\n\n bronze: createTheme({\n background:\n \"repeating-linear-gradient(115deg, rgba(255, 255, 255, 0.08) 0 1px, transparent 1px 5px), linear-gradient(135deg, #d97706, #78350f)\",\n color: \"#ffedd5\",\n fontFamily: \"Georgia, serif\",\n fontSize: \"13px\",\n fontWeight: 700,\n border: \"2px solid #fdba74\",\n borderRadius: \"8px\",\n filter: \"drop-shadow(0 9px 14px rgba(120, 53, 15, 0.5))\",\n padding: \"9px 16px\",\n textShadow: \"0 1px 2px rgba(66, 32, 6, 0.8)\",\n arrowSize: \"9px\",\n arrowWidth: \"19px\",\n animation: animations.pop,\n }),\n\n brutalist: createTheme({\n background: \"#ffffff\",\n color: \"#000000\",\n fontFamily: \"Arial Black, Helvetica, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"4px solid #000000\",\n borderRadius: \"0px\",\n filter: \"drop-shadow(7px 7px 0 #ef4444)\",\n padding: \"10px 16px\",\n letterSpacing: \"-0.03em\",\n textTransform: \"uppercase\",\n textAlign: \"left\",\n arrowSize: \"11px\",\n arrowWidth: \"19px\",\n animation: animations.snap,\n }),\n\n chalkboard: createTheme({\n background:\n \"repeating-linear-gradient(175deg, rgba(255, 255, 255, 0.018) 0, rgba(255, 255, 255, 0.018) 2px, transparent 2px, transparent 7px), #163a2c\",\n color: \"#f5f5dc\",\n fontFamily: \"Comic Sans MS, Chalkboard, cursive\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"3px solid #8b5e3c\",\n borderRadius: \"2px\",\n filter: \"drop-shadow(4px 6px 0 rgba(66, 32, 6, 0.45))\",\n padding: \"10px 16px\",\n letterSpacing: \"0.025em\",\n textShadow: \"0 0 2px rgba(255, 255, 255, 0.55)\",\n textAlign: \"left\",\n arrowSize: \"9px\",\n arrowWidth: \"18px\",\n animation: animations.soft,\n }),\n} satisfies Record<string, ThemeType>;\n\nexport type PresetsThemeType = keyof typeof presets;\n\nexport const presetThemeNames = Object.keys(presets) as PresetsThemeType[];\n\nexport const isPresetTheme = (\n value: string | undefined,\n): value is PresetsThemeType => {\n return Boolean(\n value && Object.prototype.hasOwnProperty.call(presets, value),\n );\n};\n","import {\n CSSProperties,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { TooltipPlacement } from \"src/types/Tooltip.interface\";\n\nconst DEFAULT_HIDE_DELAY = 120;\nconst DEFAULT_INTERACTIVE_HIDE_DELAY = 240;\nconst VIEWPORT_PADDING = 8;\nconst DEFAULT_ARROW_SIZE = 6;\nconst DEFAULT_TOOLTIP_GAP = 10;\nconst ARROW_EDGE_OFFSET = 10;\nconst INTERACTIVE_DIRECT_PADDING = 4;\nconst INTERACTIVE_BRIDGE_PADDING = 8;\nconst INTERACTIVE_BRIDGE_TIMEOUT = 700;\nconst INTERACTIVE_RECHECK_INTERVAL = 50;\nconst TOUCH_MOVE_THRESHOLD = 10;\nconst TOUCH_MAX_TAP_DURATION = 600;\nconst TOUCH_FOCUS_SUPPRESSION = 700;\n\nexport type TooltipPhase =\n | \"hidden\"\n | \"preparing\"\n | \"entering\"\n | \"visible\"\n | \"leaving\";\n\ntype TooltipPositionStyle = CSSProperties & {\n \"--tooltip-arrow-offset\": string;\n};\n\ntype UseTooltipOptions = {\n anchor: HTMLElement | null;\n preferredPlacement: TooltipPlacement;\n disabled?: boolean;\n interactive?: boolean;\n hideDelay?: number;\n};\n\ntype Point = {\n x: number;\n y: number;\n};\n\ntype PointerSnapshot = Point & {\n pointerType: string;\n};\n\ntype TouchGesture = {\n pointerId: number;\n startX: number;\n startY: number;\n startedAt: number;\n moved: boolean;\n cancelled: boolean;\n};\n\ntype InteractivePointerArea = \"direct\" | \"bridge\" | \"outside\";\n\ntype TooltipOwner = symbol;\n\ntype InputModality = \"keyboard\" | \"pointer\";\n\ntype ActiveTooltipSession = {\n owner: TooltipOwner;\n interactive: boolean;\n protectsPoint: (point: Point) => boolean;\n close: () => void;\n};\n\nlet activeTooltipSession: ActiveTooltipSession | null = null;\nlet inputModality: InputModality = \"pointer\";\nlet inputModalitySubscribers = 0;\n\nconst handleGlobalPointerDown = () => {\n inputModality = \"pointer\";\n};\n\nconst keyboardFocusKeys = new Set([\n \"Tab\",\n \"Enter\",\n \" \",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n]);\n\nconst handleGlobalKeyDown = (event: KeyboardEvent) => {\n if (\n event.metaKey ||\n event.ctrlKey ||\n event.altKey ||\n !keyboardFocusKeys.has(event.key)\n ) {\n return;\n }\n\n inputModality = \"keyboard\";\n};\n\nconst subscribeInputModality = () => {\n inputModalitySubscribers += 1;\n\n if (inputModalitySubscribers !== 1) {\n return;\n }\n\n document.addEventListener(\"pointerdown\", handleGlobalPointerDown, true);\n document.addEventListener(\"keydown\", handleGlobalKeyDown, true);\n};\n\nconst unsubscribeInputModality = () => {\n inputModalitySubscribers = Math.max(0, inputModalitySubscribers - 1);\n\n if (inputModalitySubscribers !== 0) {\n return;\n }\n\n document.removeEventListener(\"pointerdown\", handleGlobalPointerDown, true);\n document.removeEventListener(\"keydown\", handleGlobalKeyDown, true);\n};\n\nconst requestTooltipActivation = (\n session: ActiveTooltipSession,\n point?: Point,\n) => {\n const currentSession = activeTooltipSession;\n\n if (currentSession && currentSession.owner !== session.owner) {\n if (\n point &&\n currentSession.interactive &&\n currentSession.protectsPoint(point)\n ) {\n return false;\n }\n\n currentSession.close();\n }\n\n activeTooltipSession = session;\n\n return true;\n};\n\nconst clearTooltipActivation = (owner: TooltipOwner) => {\n if (activeTooltipSession?.owner === owner) {\n activeTooltipSession = null;\n }\n};\n\nconst oppositePlacement: Record<TooltipPlacement, TooltipPlacement> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n};\n\nconst clamp = (value: number, min: number, max: number) => {\n const resolvedMax = Math.max(min, max);\n\n return Math.min(Math.max(value, min), resolvedMax);\n};\n\nconst isPointInsideRect = (point: Point, rect: DOMRect, padding = 0) => {\n return (\n point.x >= rect.left - padding &&\n point.x <= rect.right + padding &&\n point.y >= rect.top - padding &&\n point.y <= rect.bottom + padding\n );\n};\n\nconst isPointOnSegment = (point: Point, start: Point, end: Point) => {\n const cross =\n (point.y - start.y) * (end.x - start.x) -\n (point.x - start.x) * (end.y - start.y);\n\n if (Math.abs(cross) > 0.001) {\n return false;\n }\n\n return (\n point.x >= Math.min(start.x, end.x) &&\n point.x <= Math.max(start.x, end.x) &&\n point.y >= Math.min(start.y, end.y) &&\n point.y <= Math.max(start.y, end.y)\n );\n};\n\nconst isPointInsidePolygon = (point: Point, polygon: Point[]) => {\n let inside = false;\n\n for (\n let currentIndex = 0, previousIndex = polygon.length - 1;\n currentIndex < polygon.length;\n previousIndex = currentIndex, currentIndex += 1\n ) {\n const current = polygon[currentIndex];\n const previous = polygon[previousIndex];\n\n if (isPointOnSegment(point, previous, current)) {\n return true;\n }\n\n const crosses =\n current.y > point.y !== previous.y > point.y &&\n point.x <\n ((previous.x - current.x) * (point.y - current.y)) /\n (previous.y - current.y) +\n current.x;\n\n if (crosses) {\n inside = !inside;\n }\n }\n\n return inside;\n};\n\nconst createInteractiveBridge = (\n anchorRect: DOMRect,\n tooltipRect: DOMRect,\n placement: TooltipPlacement,\n) => {\n const padding = INTERACTIVE_BRIDGE_PADDING;\n\n if (placement === \"top\") {\n return [\n {\n x: tooltipRect.left - padding,\n y: tooltipRect.bottom - padding,\n },\n {\n x: tooltipRect.right + padding,\n y: tooltipRect.bottom - padding,\n },\n {\n x: anchorRect.right + padding,\n y: anchorRect.top + padding,\n },\n {\n x: anchorRect.left - padding,\n y: anchorRect.top + padding,\n },\n ];\n }\n\n if (placement === \"bottom\") {\n return [\n {\n x: anchorRect.left - padding,\n y: anchorRect.bottom - padding,\n },\n {\n x: anchorRect.right + padding,\n y: anchorRect.bottom - padding,\n },\n {\n x: tooltipRect.right + padding,\n y: tooltipRect.top + padding,\n },\n {\n x: tooltipRect.left - padding,\n y: tooltipRect.top + padding,\n },\n ];\n }\n\n if (placement === \"left\") {\n return [\n {\n x: tooltipRect.right - padding,\n y: tooltipRect.top - padding,\n },\n {\n x: anchorRect.left + padding,\n y: anchorRect.top - padding,\n },\n {\n x: anchorRect.left + padding,\n y: anchorRect.bottom + padding,\n },\n {\n x: tooltipRect.right - padding,\n y: tooltipRect.bottom + padding,\n },\n ];\n }\n\n return [\n {\n x: anchorRect.right - padding,\n y: anchorRect.top - padding,\n },\n {\n x: tooltipRect.left + padding,\n y: tooltipRect.top - padding,\n },\n {\n x: tooltipRect.left + padding,\n y: tooltipRect.bottom + padding,\n },\n {\n x: anchorRect.right - padding,\n y: anchorRect.bottom + padding,\n },\n ];\n};\n\nexport const useTooltip = ({\n anchor,\n preferredPlacement,\n disabled = false,\n interactive = false,\n hideDelay,\n}: UseTooltipOptions) => {\n const tooltipRef = useRef<HTMLDivElement>(null);\n const bodyRef = useRef<HTMLDivElement>(null);\n const ownerRef = useRef<TooltipOwner>(Symbol(\"tooltip\"));\n\n const hideTimerRef = useRef<number | null>(null);\n const firstFrameRef = useRef<number | null>(null);\n const secondFrameRef = useRef<number | null>(null);\n const interactiveFrameRef = useRef<number | null>(null);\n const phaseRef = useRef<TooltipPhase>(\"hidden\");\n const pendingHideRef = useRef(false);\n const interactiveBridgeDeadlineRef = useRef(0);\n const pointerRef = useRef<PointerSnapshot>({\n x: Number.NaN,\n y: Number.NaN,\n pointerType: \"\",\n });\n const interactiveAreaAtPointRef = useRef<\n (point: Point) => InteractivePointerArea\n >(() => \"outside\");\n const touchGestureRef = useRef<TouchGesture | null>(null);\n const suppressFocusUntilRef = useRef(0);\n\n const [mounted, setMounted] = useState(false);\n const [phase, setPhase] = useState<TooltipPhase>(\"hidden\");\n const [placement, setPlacement] =\n useState<TooltipPlacement>(preferredPlacement);\n const [showVersion, setShowVersion] = useState(0);\n const [position, setPosition] = useState<TooltipPositionStyle>({\n top: \"0px\",\n left: \"0px\",\n \"--tooltip-arrow-offset\": \"50%\",\n });\n\n const resolvedHideDelay =\n hideDelay ??\n (interactive ? DEFAULT_INTERACTIVE_HIDE_DELAY : DEFAULT_HIDE_DELAY);\n\n const updatePhase = useCallback((nextPhase: TooltipPhase) => {\n phaseRef.current = nextPhase;\n setPhase(nextPhase);\n }, []);\n\n const clearHideTimer = useCallback(() => {\n if (hideTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }, []);\n\n const clearEnterFrames = useCallback(() => {\n if (firstFrameRef.current !== null) {\n window.cancelAnimationFrame(firstFrameRef.current);\n firstFrameRef.current = null;\n }\n\n if (secondFrameRef.current !== null) {\n window.cancelAnimationFrame(secondFrameRef.current);\n secondFrameRef.current = null;\n }\n }, []);\n\n const clearInteractiveFrame = useCallback(() => {\n if (interactiveFrameRef.current === null) {\n return;\n }\n\n window.cancelAnimationFrame(interactiveFrameRef.current);\n interactiveFrameRef.current = null;\n }, []);\n\n const getAvailableSpace = useCallback(\n (currentPlacement: TooltipPlacement, rect: DOMRect) => {\n switch (currentPlacement) {\n case \"top\":\n return rect.top - VIEWPORT_PADDING;\n\n case \"bottom\":\n return window.innerHeight - rect.bottom - VIEWPORT_PADDING;\n\n case \"left\":\n return rect.left - VIEWPORT_PADDING;\n\n case \"right\":\n return window.innerWidth - rect.right - VIEWPORT_PADDING;\n }\n },\n [],\n );\n\n const calculatePosition = useCallback(() => {\n const tooltip = tooltipRef.current;\n const body = bodyRef.current;\n\n if (!anchor || !tooltip || !body) {\n return;\n }\n\n const rect = anchor.getBoundingClientRect();\n const computedStyle = window.getComputedStyle(tooltip);\n\n const arrowSize =\n Number.parseFloat(\n computedStyle.getPropertyValue(\"--tooltip-arrow-size\"),\n ) || DEFAULT_ARROW_SIZE;\n\n const tooltipGap =\n Number.parseFloat(\n computedStyle.getPropertyValue(\"--tooltip-gap\"),\n ) || DEFAULT_TOOLTIP_GAP;\n\n const bodyWidth = body.offsetWidth;\n const bodyHeight = body.offsetHeight;\n const distance = arrowSize + tooltipGap;\n const opposite = oppositePlacement[preferredPlacement];\n\n const getRequiredSpace = (currentPlacement: TooltipPlacement) => {\n if (currentPlacement === \"top\" || currentPlacement === \"bottom\") {\n return bodyHeight + distance;\n }\n\n return bodyWidth + distance;\n };\n\n const preferredAvailable = getAvailableSpace(preferredPlacement, rect);\n const preferredRequired = getRequiredSpace(preferredPlacement);\n\n let nextPlacement = preferredPlacement;\n\n if (preferredAvailable < preferredRequired) {\n const oppositeAvailable = getAvailableSpace(opposite, rect);\n const oppositeRequired = getRequiredSpace(opposite);\n\n if (\n oppositeAvailable >= oppositeRequired ||\n oppositeAvailable > preferredAvailable\n ) {\n nextPlacement = opposite;\n }\n }\n\n const anchorCenterX = rect.left + rect.width / 2;\n const anchorCenterY = rect.top + rect.height / 2;\n\n let top = 0;\n let left = 0;\n let arrowOffset = \"50%\";\n\n if (nextPlacement === \"top\") {\n top = rect.top - bodyHeight - distance;\n left = anchorCenterX - bodyWidth / 2;\n }\n\n if (nextPlacement === \"bottom\") {\n top = rect.bottom + distance;\n left = anchorCenterX - bodyWidth / 2;\n }\n\n if (nextPlacement === \"left\") {\n top = anchorCenterY - bodyHeight / 2;\n left = rect.left - bodyWidth - distance;\n }\n\n if (nextPlacement === \"right\") {\n top = anchorCenterY - bodyHeight / 2;\n left = rect.right + distance;\n }\n\n const maxLeft = window.innerWidth - bodyWidth - VIEWPORT_PADDING;\n const maxTop = window.innerHeight - bodyHeight - VIEWPORT_PADDING;\n\n left = clamp(left, VIEWPORT_PADDING, maxLeft);\n top = clamp(top, VIEWPORT_PADDING, maxTop);\n\n if (nextPlacement === \"top\" || nextPlacement === \"bottom\") {\n const offset = clamp(\n anchorCenterX - left,\n ARROW_EDGE_OFFSET,\n bodyWidth - ARROW_EDGE_OFFSET,\n );\n\n arrowOffset = `${offset}px`;\n }\n\n if (nextPlacement === \"left\" || nextPlacement === \"right\") {\n const offset = clamp(\n anchorCenterY - top,\n ARROW_EDGE_OFFSET,\n bodyHeight - ARROW_EDGE_OFFSET,\n );\n\n arrowOffset = `${offset}px`;\n }\n\n setPlacement(nextPlacement);\n setPosition({\n top: `${top}px`,\n left: `${left}px`,\n \"--tooltip-arrow-offset\": arrowOffset,\n });\n }, [anchor, getAvailableSpace, preferredPlacement]);\n\n const isFocusInsideTooltipRegion = useCallback(() => {\n if (\n !anchor ||\n typeof document === \"undefined\" ||\n inputModality !== \"keyboard\"\n ) {\n return false;\n }\n\n const activeElement = document.activeElement;\n const tooltip = tooltipRef.current;\n\n if (!(activeElement instanceof Node)) {\n return false;\n }\n\n return (\n anchor.contains(activeElement) ||\n Boolean(interactive && tooltip?.contains(activeElement))\n );\n }, [anchor, interactive]);\n\n const getInteractivePointerAreaAtPoint = useCallback(\n (point: Point): InteractivePointerArea => {\n if (!interactive || !anchor) {\n return \"outside\";\n }\n\n const tooltip = tooltipRef.current;\n\n if (\n !tooltip ||\n !Number.isFinite(point.x) ||\n !Number.isFinite(point.y)\n ) {\n return \"outside\";\n }\n\n const anchorRect = anchor.getBoundingClientRect();\n const tooltipRect = tooltip.getBoundingClientRect();\n\n if (\n isPointInsideRect(\n point,\n anchorRect,\n INTERACTIVE_DIRECT_PADDING,\n ) ||\n isPointInsideRect(\n point,\n tooltipRect,\n INTERACTIVE_DIRECT_PADDING,\n )\n ) {\n return \"direct\";\n }\n\n const bridge = createInteractiveBridge(\n anchorRect,\n tooltipRect,\n placement,\n );\n\n return isPointInsidePolygon(point, bridge) ? \"bridge\" : \"outside\";\n },\n [anchor, interactive, placement],\n );\n\n useLayoutEffect(() => {\n interactiveAreaAtPointRef.current = getInteractivePointerAreaAtPoint;\n }, [getInteractivePointerAreaAtPoint]);\n\n const getInteractivePointerArea =\n useCallback((): InteractivePointerArea => {\n const pointer = pointerRef.current;\n\n if (\n (pointer.pointerType !== \"mouse\" &&\n pointer.pointerType !== \"pen\") ||\n !Number.isFinite(pointer.x) ||\n !Number.isFinite(pointer.y)\n ) {\n return \"outside\";\n }\n\n return getInteractivePointerAreaAtPoint({\n x: pointer.x,\n y: pointer.y,\n });\n }, [getInteractivePointerAreaAtPoint]);\n\n const removeTooltip = useCallback(() => {\n clearHideTimer();\n clearEnterFrames();\n clearInteractiveFrame();\n pendingHideRef.current = false;\n interactiveBridgeDeadlineRef.current = 0;\n clearTooltipActivation(ownerRef.current);\n setMounted(false);\n updatePhase(\"hidden\");\n }, [clearEnterFrames, clearHideTimer, clearInteractiveFrame, updatePhase]);\n\n const runHide = useCallback(() => {\n const currentPhase = phaseRef.current;\n\n if (currentPhase === \"hidden\" || currentPhase === \"leaving\") {\n return;\n }\n\n if (currentPhase === \"preparing\") {\n removeTooltip();\n return;\n }\n\n if (currentPhase === \"entering\") {\n pendingHideRef.current = true;\n return;\n }\n\n updatePhase(\"leaving\");\n }, [removeTooltip, updatePhase]);\n\n const hideTooltip = useCallback(\n (immediate = false) => {\n if (immediate) {\n clearHideTimer();\n interactiveBridgeDeadlineRef.current = 0;\n runHide();\n return;\n }\n\n if (hideTimerRef.current !== null) {\n return;\n }\n\n const attemptHide = () => {\n hideTimerRef.current = null;\n\n if (isFocusInsideTooltipRegion()) {\n interactiveBridgeDeadlineRef.current = 0;\n return;\n }\n\n if (interactive) {\n const pointerArea = getInteractivePointerArea();\n\n if (pointerArea === \"direct\") {\n interactiveBridgeDeadlineRef.current = 0;\n return;\n }\n\n if (pointerArea === \"bridge\") {\n const now = window.performance.now();\n\n if (interactiveBridgeDeadlineRef.current === 0) {\n interactiveBridgeDeadlineRef.current =\n now + INTERACTIVE_BRIDGE_TIMEOUT;\n }\n\n const remaining =\n interactiveBridgeDeadlineRef.current - now;\n\n if (remaining > 0) {\n hideTimerRef.current = window.setTimeout(\n attemptHide,\n Math.min(\n INTERACTIVE_RECHECK_INTERVAL,\n remaining,\n ),\n );\n return;\n }\n }\n }\n\n interactiveBridgeDeadlineRef.current = 0;\n runHide();\n };\n\n hideTimerRef.current = window.setTimeout(\n attemptHide,\n resolvedHideDelay,\n );\n },\n [\n clearHideTimer,\n getInteractivePointerArea,\n interactive,\n isFocusInsideTooltipRegion,\n resolvedHideDelay,\n runHide,\n ],\n );\n\n const showTooltip = useCallback(\n (activationPoint?: Point) => {\n if (!anchor || disabled) {\n return;\n }\n\n const activated = requestTooltipActivation(\n {\n owner: ownerRef.current,\n interactive,\n protectsPoint: (point) => {\n if (phaseRef.current === \"hidden\") {\n return false;\n }\n\n return (\n interactiveAreaAtPointRef.current(point) !==\n \"outside\"\n );\n },\n close: () => {\n hideTooltip(true);\n },\n },\n activationPoint,\n );\n\n if (!activated) {\n return;\n }\n\n clearHideTimer();\n clearEnterFrames();\n interactiveBridgeDeadlineRef.current = 0;\n pendingHideRef.current = false;\n setMounted(true);\n\n if (\n phaseRef.current === \"entering\" ||\n phaseRef.current === \"visible\"\n ) {\n return;\n }\n\n updatePhase(\"preparing\");\n setShowVersion((value) => value + 1);\n },\n [\n anchor,\n clearEnterFrames,\n clearHideTimer,\n disabled,\n hideTooltip,\n interactive,\n updatePhase,\n ],\n );\n\n const keepTooltipOpen = useCallback(() => {\n if (!interactive || disabled) {\n return;\n }\n\n clearHideTimer();\n interactiveBridgeDeadlineRef.current = 0;\n pendingHideRef.current = false;\n\n if (phaseRef.current === \"leaving\") {\n updatePhase(\"visible\");\n }\n }, [clearHideTimer, disabled, interactive, updatePhase]);\n\n const processInteractivePointer = useCallback(() => {\n if (!interactive || disabled || phaseRef.current === \"hidden\") {\n return;\n }\n\n if (isFocusInsideTooltipRegion()) {\n keepTooltipOpen();\n return;\n }\n\n const pointerArea = getInteractivePointerArea();\n\n if (pointerArea === \"direct\") {\n keepTooltipOpen();\n return;\n }\n\n if (pointerArea === \"bridge\") {\n if (interactiveBridgeDeadlineRef.current === 0) {\n interactiveBridgeDeadlineRef.current =\n window.performance.now() + INTERACTIVE_BRIDGE_TIMEOUT;\n }\n\n hideTooltip(false);\n return;\n }\n\n interactiveBridgeDeadlineRef.current = 0;\n hideTooltip(false);\n }, [\n disabled,\n getInteractivePointerArea,\n hideTooltip,\n interactive,\n isFocusInsideTooltipRegion,\n keepTooltipOpen,\n ]);\n\n const scheduleInteractivePointerProcessing = useCallback(() => {\n if (interactiveFrameRef.current !== null) {\n return;\n }\n\n interactiveFrameRef.current = window.requestAnimationFrame(() => {\n interactiveFrameRef.current = null;\n processInteractivePointer();\n });\n }, [processInteractivePointer]);\n\n const onAnimationEnd = useCallback(() => {\n const currentPhase = phaseRef.current;\n\n if (currentPhase === \"entering\") {\n if (pendingHideRef.current) {\n pendingHideRef.current = false;\n updatePhase(\"leaving\");\n return;\n }\n\n updatePhase(\"visible\");\n return;\n }\n\n if (currentPhase === \"leaving\") {\n removeTooltip();\n }\n }, [removeTooltip, updatePhase]);\n\n useLayoutEffect(() => {\n if (phase !== \"preparing\" || !anchor) {\n return;\n }\n\n calculatePosition();\n\n firstFrameRef.current = window.requestAnimationFrame(() => {\n firstFrameRef.current = null;\n\n secondFrameRef.current = window.requestAnimationFrame(() => {\n secondFrameRef.current = null;\n\n if (!anchor || phaseRef.current !== \"preparing\") {\n return;\n }\n\n updatePhase(\"entering\");\n });\n });\n\n return clearEnterFrames;\n }, [\n anchor,\n calculatePosition,\n clearEnterFrames,\n phase,\n showVersion,\n updatePhase,\n ]);\n\n useEffect(() => {\n subscribeInputModality();\n\n return () => {\n unsubscribeInputModality();\n clearTooltipActivation(ownerRef.current);\n };\n }, []);\n\n useEffect(() => {\n if (!anchor) {\n removeTooltip();\n return;\n }\n\n const updatePointer = (event: PointerEvent) => {\n pointerRef.current = {\n x: event.clientX,\n y: event.clientY,\n pointerType: event.pointerType,\n };\n };\n\n const onPointerEnter = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType === \"touch\") {\n return;\n }\n\n showTooltip({\n x: event.clientX,\n y: event.clientY,\n });\n };\n\n const onPointerLeave = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType === \"touch\") {\n return;\n }\n\n if (interactive) {\n interactiveBridgeDeadlineRef.current =\n window.performance.now() + INTERACTIVE_BRIDGE_TIMEOUT;\n hideTooltip(false);\n scheduleInteractivePointerProcessing();\n return;\n }\n\n hideTooltip(false);\n };\n\n const onPointerDown = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType !== \"touch\") {\n return;\n }\n\n const now = window.performance.now();\n\n touchGestureRef.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startedAt: now,\n moved: false,\n cancelled: false,\n };\n suppressFocusUntilRef.current = now + TOUCH_FOCUS_SUPPRESSION;\n };\n\n const onPointerMove = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType !== \"touch\") {\n return;\n }\n\n const gesture = touchGestureRef.current;\n\n if (!gesture || gesture.pointerId !== event.pointerId) {\n return;\n }\n\n const distance = Math.hypot(\n event.clientX - gesture.startX,\n event.clientY - gesture.startY,\n );\n\n if (distance <= TOUCH_MOVE_THRESHOLD) {\n return;\n }\n\n gesture.moved = true;\n suppressFocusUntilRef.current =\n window.performance.now() + TOUCH_FOCUS_SUPPRESSION;\n hideTooltip(true);\n };\n\n const onPointerUp = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType !== \"touch\") {\n return;\n }\n\n const gesture = touchGestureRef.current;\n touchGestureRef.current = null;\n\n if (!gesture || gesture.pointerId !== event.pointerId) {\n return;\n }\n\n const now = window.performance.now();\n const distance = Math.hypot(\n event.clientX - gesture.startX,\n event.clientY - gesture.startY,\n );\n const duration = now - gesture.startedAt;\n\n suppressFocusUntilRef.current = now + TOUCH_FOCUS_SUPPRESSION;\n\n if (\n gesture.cancelled ||\n gesture.moved ||\n distance > TOUCH_MOVE_THRESHOLD ||\n duration > TOUCH_MAX_TAP_DURATION\n ) {\n return;\n }\n\n if (\n phaseRef.current === \"hidden\" ||\n phaseRef.current === \"leaving\"\n ) {\n showTooltip({\n x: event.clientX,\n y: event.clientY,\n });\n } else {\n hideTooltip(true);\n }\n };\n\n const onPointerCancel = (event: PointerEvent) => {\n if (event.pointerType !== \"touch\") {\n return;\n }\n\n const gesture = touchGestureRef.current;\n\n if (!gesture || gesture.pointerId !== event.pointerId) {\n return;\n }\n\n gesture.cancelled = true;\n touchGestureRef.current = null;\n suppressFocusUntilRef.current =\n window.performance.now() + TOUCH_FOCUS_SUPPRESSION;\n hideTooltip(true);\n };\n\n const onFocusIn = () => {\n if (window.performance.now() < suppressFocusUntilRef.current) {\n return;\n }\n\n showTooltip();\n };\n\n const onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget;\n const tooltip = tooltipRef.current;\n\n if (\n relatedTarget instanceof Node &&\n (anchor.contains(relatedTarget) ||\n (interactive && tooltip?.contains(relatedTarget)))\n ) {\n return;\n }\n\n hideTooltip(false);\n };\n\n anchor.addEventListener(\"pointerenter\", onPointerEnter);\n anchor.addEventListener(\"pointerleave\", onPointerLeave);\n anchor.addEventListener(\"pointerdown\", onPointerDown);\n anchor.addEventListener(\"pointermove\", onPointerMove);\n anchor.addEventListener(\"pointerup\", onPointerUp);\n anchor.addEventListener(\"pointercancel\", onPointerCancel);\n anchor.addEventListener(\"focusin\", onFocusIn);\n anchor.addEventListener(\"focusout\", onFocusOut);\n\n return () => {\n anchor.removeEventListener(\"pointerenter\", onPointerEnter);\n anchor.removeEventListener(\"pointerleave\", onPointerLeave);\n anchor.removeEventListener(\"pointerdown\", onPointerDown);\n anchor.removeEventListener(\"pointermove\", onPointerMove);\n anchor.removeEventListener(\"pointerup\", onPointerUp);\n anchor.removeEventListener(\"pointercancel\", onPointerCancel);\n anchor.removeEventListener(\"focusin\", onFocusIn);\n anchor.removeEventListener(\"focusout\", onFocusOut);\n\n touchGestureRef.current = null;\n clearHideTimer();\n clearEnterFrames();\n clearInteractiveFrame();\n };\n }, [\n anchor,\n clearEnterFrames,\n clearHideTimer,\n clearInteractiveFrame,\n hideTooltip,\n interactive,\n removeTooltip,\n scheduleInteractivePointerProcessing,\n showTooltip,\n ]);\n\n useEffect(() => {\n if (!interactive || phase === \"hidden\") {\n return;\n }\n\n const tooltip = tooltipRef.current;\n\n if (!tooltip) {\n return;\n }\n\n const updatePointer = (event: PointerEvent) => {\n pointerRef.current = {\n x: event.clientX,\n y: event.clientY,\n pointerType: event.pointerType,\n };\n };\n\n const onPointerEnter = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType === \"touch\") {\n return;\n }\n\n keepTooltipOpen();\n };\n\n const onPointerLeave = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType === \"touch\") {\n return;\n }\n\n interactiveBridgeDeadlineRef.current =\n window.performance.now() + INTERACTIVE_BRIDGE_TIMEOUT;\n hideTooltip(false);\n scheduleInteractivePointerProcessing();\n };\n\n const onFocusIn = () => {\n if (inputModality === \"keyboard\") {\n keepTooltipOpen();\n }\n };\n\n const onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget;\n\n if (\n relatedTarget instanceof Node &&\n (tooltip.contains(relatedTarget) ||\n anchor?.contains(relatedTarget))\n ) {\n return;\n }\n\n hideTooltip(false);\n };\n\n tooltip.addEventListener(\"pointerenter\", onPointerEnter);\n tooltip.addEventListener(\"pointerleave\", onPointerLeave);\n tooltip.addEventListener(\"focusin\", onFocusIn);\n tooltip.addEventListener(\"focusout\", onFocusOut);\n\n return () => {\n tooltip.removeEventListener(\"pointerenter\", onPointerEnter);\n tooltip.removeEventListener(\"pointerleave\", onPointerLeave);\n tooltip.removeEventListener(\"focusin\", onFocusIn);\n tooltip.removeEventListener(\"focusout\", onFocusOut);\n };\n }, [\n anchor,\n hideTooltip,\n interactive,\n keepTooltipOpen,\n phase,\n scheduleInteractivePointerProcessing,\n ]);\n\n useEffect(() => {\n if (!interactive || phase === \"hidden\") {\n return;\n }\n\n const onDocumentPointerMove = (event: PointerEvent) => {\n if (event.pointerType === \"touch\") {\n return;\n }\n\n pointerRef.current = {\n x: event.clientX,\n y: event.clientY,\n pointerType: event.pointerType,\n };\n\n scheduleInteractivePointerProcessing();\n };\n\n document.addEventListener(\"pointermove\", onDocumentPointerMove, {\n passive: true,\n });\n\n return () => {\n document.removeEventListener(\"pointermove\", onDocumentPointerMove);\n clearInteractiveFrame();\n };\n }, [\n clearInteractiveFrame,\n interactive,\n phase,\n scheduleInteractivePointerProcessing,\n ]);\n\n useEffect(() => {\n if (!anchor || phase === \"hidden\") {\n return;\n }\n\n const onDocumentPointerDown = (event: PointerEvent) => {\n const target = event.target;\n const tooltip = tooltipRef.current;\n\n if (\n target instanceof Node &&\n (anchor.contains(target) ||\n (interactive && tooltip?.contains(target)))\n ) {\n return;\n }\n\n touchGestureRef.current = null;\n hideTooltip(true);\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n hideTooltip(true);\n }\n };\n\n document.addEventListener(\"pointerdown\", onDocumentPointerDown, true);\n document.addEventListener(\"keydown\", onKeyDown);\n\n window.addEventListener(\"resize\", calculatePosition);\n window.addEventListener(\"scroll\", calculatePosition, true);\n\n return () => {\n document.removeEventListener(\n \"pointerdown\",\n onDocumentPointerDown,\n true,\n );\n document.removeEventListener(\"keydown\", onKeyDown);\n\n window.removeEventListener(\"resize\", calculatePosition);\n window.removeEventListener(\"scroll\", calculatePosition, true);\n };\n }, [anchor, calculatePosition, hideTooltip, interactive, phase]);\n\n useLayoutEffect(() => {\n if (phase === \"hidden\") {\n return;\n }\n\n const body = bodyRef.current;\n\n if (!body) {\n return;\n }\n\n const resizeObserver = new ResizeObserver(calculatePosition);\n\n resizeObserver.observe(body);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [calculatePosition, phase]);\n\n useEffect(() => {\n if (!disabled) {\n return;\n }\n\n hideTooltip(true);\n }, [disabled, hideTooltip]);\n\n return {\n shouldRender: mounted,\n phase,\n placement,\n position,\n tooltipRef,\n bodyRef,\n calculatePosition,\n onAnimationEnd,\n };\n};\n","import { CSSProperties } from \"react\";\n\nimport { ThemeType } from \"src/types/Theme.type\";\n\ntype Defined<T> = Exclude<T, undefined>;\ntype BorderWidthValue = Defined<CSSProperties[\"borderTopWidth\"]>;\ntype BorderStyleValue = Defined<CSSProperties[\"borderTopStyle\"]>;\ntype BorderColorValue = Defined<CSSProperties[\"borderTopColor\"]>;\ntype BorderRadiusValue = Defined<CSSProperties[\"borderTopLeftRadius\"]>;\ntype Quad<T> = [T | undefined, T | undefined, T | undefined, T | undefined];\n\ntype ParsedBorder = {\n width?: BorderWidthValue;\n style?: BorderStyleValue;\n color?: BorderColorValue;\n};\n\nexport type TooltipSurfaceStyle = Pick<\n CSSProperties,\n | \"borderTopWidth\"\n | \"borderRightWidth\"\n | \"borderBottomWidth\"\n | \"borderLeftWidth\"\n | \"borderTopStyle\"\n | \"borderRightStyle\"\n | \"borderBottomStyle\"\n | \"borderLeftStyle\"\n | \"borderTopColor\"\n | \"borderRightColor\"\n | \"borderBottomColor\"\n | \"borderLeftColor\"\n | \"borderTopLeftRadius\"\n | \"borderTopRightRadius\"\n | \"borderBottomRightRadius\"\n | \"borderBottomLeftRadius\"\n>;\n\nexport type ResolvedThemeStyles = {\n background: CSSProperties[\"background\"];\n color: CSSProperties[\"color\"];\n contentStyle: CSSProperties;\n surfaceStyle: TooltipSurfaceStyle;\n fillStyle: CSSProperties;\n filter?: CSSProperties[\"filter\"];\n};\n\nconst BORDER_STYLE_VALUES = new Set<BorderStyleValue>([\n \"none\",\n \"hidden\",\n \"dotted\",\n \"dashed\",\n \"solid\",\n \"double\",\n \"groove\",\n \"ridge\",\n \"inset\",\n \"outset\",\n \"inherit\",\n \"initial\",\n \"revert\",\n \"revert-layer\",\n \"unset\",\n]);\n\nconst splitCssTokens = (value: string) => {\n const tokens: string[] = [];\n let current = \"\";\n let depth = 0;\n\n for (const character of value.trim()) {\n if (character === \"(\") {\n depth += 1;\n }\n\n if (character === \")\") {\n depth = Math.max(0, depth - 1);\n }\n\n if (/\\s/.test(character) && depth === 0) {\n if (current.trim()) {\n tokens.push(current.trim());\n }\n\n current = \"\";\n continue;\n }\n\n current += character;\n }\n\n if (current.trim()) {\n tokens.push(current.trim());\n }\n\n return tokens;\n};\n\nconst splitOutsideParentheses = (value: string, separator: string) => {\n const result: string[] = [];\n let current = \"\";\n let depth = 0;\n\n for (const character of value) {\n if (character === \"(\") {\n depth += 1;\n }\n\n if (character === \")\") {\n depth = Math.max(0, depth - 1);\n }\n\n if (character === separator && depth === 0) {\n if (current.trim()) {\n result.push(current.trim());\n }\n\n current = \"\";\n continue;\n }\n\n current += character;\n }\n\n if (current.trim()) {\n result.push(current.trim());\n }\n\n return result;\n};\n\nconst expandQuad = <T,>(values: T[]): Quad<T> => {\n if (values.length === 0) {\n return [undefined, undefined, undefined, undefined];\n }\n\n if (values.length === 1) {\n return [values[0], values[0], values[0], values[0]];\n }\n\n if (values.length === 2) {\n return [values[0], values[1], values[0], values[1]];\n }\n\n if (values.length === 3) {\n return [values[0], values[1], values[2], values[1]];\n }\n\n return [values[0], values[1], values[2], values[3]];\n};\n\nconst isBorderWidthToken = (value: string) => {\n return (\n value === \"thin\" ||\n value === \"medium\" ||\n value === \"thick\" ||\n value === \"0\" ||\n value === \"inherit\" ||\n value === \"initial\" ||\n value === \"revert\" ||\n value === \"revert-layer\" ||\n value === \"unset\" ||\n /^-?(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|vh|vw|vmin|vmax|%)?$/.test(value) ||\n value.startsWith(\"calc(\") ||\n value.startsWith(\"var(\")\n );\n};\n\nconst isBorderStyleToken = (value: string): value is BorderStyleValue => {\n return BORDER_STYLE_VALUES.has(value as BorderStyleValue);\n};\n\nconst parseBorder = (\n value:\n | CSSProperties[\"border\"]\n | CSSProperties[\"borderTop\"]\n | CSSProperties[\"borderRight\"]\n | CSSProperties[\"borderBottom\"]\n | CSSProperties[\"borderLeft\"],\n): ParsedBorder => {\n if (typeof value !== \"string\" || !value.trim()) {\n return {};\n }\n\n const tokens = splitCssTokens(value);\n const widthToken = tokens.find(isBorderWidthToken);\n const styleToken = tokens.find(isBorderStyleToken);\n const colorTokens = tokens.filter((token) => {\n return token !== widthToken && token !== styleToken;\n });\n\n return {\n width: widthToken ? (widthToken as BorderWidthValue) : undefined,\n style: styleToken,\n color: colorTokens.length\n ? (colorTokens.join(\" \") as BorderColorValue)\n : undefined,\n };\n};\n\nconst expandBorderWidths = (\n value: CSSProperties[\"borderWidth\"] | BorderWidthValue,\n): Quad<BorderWidthValue> => {\n if (value === undefined) {\n return [undefined, undefined, undefined, undefined];\n }\n\n if (typeof value === \"number\") {\n return [value, value, value, value];\n }\n\n return expandQuad(\n splitCssTokens(String(value)).map((token) => token as BorderWidthValue),\n );\n};\n\nconst expandBorderStyles = (\n value: CSSProperties[\"borderStyle\"] | BorderStyleValue,\n): Quad<BorderStyleValue> => {\n if (value === undefined) {\n return [undefined, undefined, undefined, undefined];\n }\n\n return expandQuad(splitCssTokens(String(value)).filter(isBorderStyleToken));\n};\n\nconst expandBorderColors = (\n value: CSSProperties[\"borderColor\"] | BorderColorValue,\n): Quad<BorderColorValue> => {\n if (value === undefined) {\n return [undefined, undefined, undefined, undefined];\n }\n\n return expandQuad(\n splitCssTokens(String(value)).map((token) => token as BorderColorValue),\n );\n};\n\nconst expandBorderRadii = (\n value: CSSProperties[\"borderRadius\"],\n): Quad<BorderRadiusValue> => {\n if (value === undefined) {\n return [undefined, undefined, undefined, undefined];\n }\n\n if (typeof value === \"number\") {\n return [value, value, value, value];\n }\n\n const parts = splitOutsideParentheses(String(value), \"/\");\n const horizontal = expandQuad(\n splitCssTokens(parts[0] ?? \"\").map(\n (token) => token as BorderRadiusValue,\n ),\n );\n\n if (!parts[1]) {\n return horizontal;\n }\n\n const vertical = expandQuad(\n splitCssTokens(parts[1]).map((token) => token as BorderRadiusValue),\n );\n\n return horizontal.map((horizontalRadius, index) => {\n const verticalRadius = vertical[index];\n\n if (horizontalRadius === undefined) {\n return undefined;\n }\n\n if (\n verticalRadius === undefined ||\n verticalRadius === horizontalRadius\n ) {\n return horizontalRadius;\n }\n\n return `${horizontalRadius} ${verticalRadius}` as BorderRadiusValue;\n }) as Quad<BorderRadiusValue>;\n};\n\nconst resolveSurfaceStyle = (style: CSSProperties): TooltipSurfaceStyle => {\n const border = parseBorder(style.border);\n const borderTop = parseBorder(style.borderTop);\n const borderRight = parseBorder(style.borderRight);\n const borderBottom = parseBorder(style.borderBottom);\n const borderLeft = parseBorder(style.borderLeft);\n const widths = expandBorderWidths(style.borderWidth ?? border.width);\n const styles = expandBorderStyles(style.borderStyle ?? border.style);\n const colors = expandBorderColors(style.borderColor ?? border.color);\n const radii = expandBorderRadii(style.borderRadius);\n\n return {\n borderTopWidth: style.borderTopWidth ?? borderTop.width ?? widths[0],\n borderRightWidth:\n style.borderRightWidth ?? borderRight.width ?? widths[1],\n borderBottomWidth:\n style.borderBottomWidth ?? borderBottom.width ?? widths[2],\n borderLeftWidth: style.borderLeftWidth ?? borderLeft.width ?? widths[3],\n borderTopStyle: style.borderTopStyle ?? borderTop.style ?? styles[0],\n borderRightStyle:\n style.borderRightStyle ?? borderRight.style ?? styles[1],\n borderBottomStyle:\n style.borderBottomStyle ?? borderBottom.style ?? styles[2],\n borderLeftStyle: style.borderLeftStyle ?? borderLeft.style ?? styles[3],\n borderTopColor: style.borderTopColor ?? borderTop.color ?? colors[0],\n borderRightColor:\n style.borderRightColor ?? borderRight.color ?? colors[1],\n borderBottomColor:\n style.borderBottomColor ?? borderBottom.color ?? colors[2],\n borderLeftColor: style.borderLeftColor ?? borderLeft.color ?? colors[3],\n borderTopLeftRadius: style.borderTopLeftRadius ?? radii[0],\n borderTopRightRadius: style.borderTopRightRadius ?? radii[1],\n borderBottomRightRadius: style.borderBottomRightRadius ?? radii[2],\n borderBottomLeftRadius: style.borderBottomLeftRadius ?? radii[3],\n };\n};\n\nconst splitShadowTokens = (value: string) => {\n const tokens: string[] = [];\n let current = \"\";\n let depth = 0;\n\n for (const character of value.trim()) {\n if (character === \"(\") {\n depth += 1;\n }\n\n if (character === \")\") {\n depth = Math.max(0, depth - 1);\n }\n\n if (/\\s/.test(character) && depth === 0) {\n if (current.trim()) {\n tokens.push(current.trim());\n }\n\n current = \"\";\n continue;\n }\n\n current += character;\n }\n\n if (current.trim()) {\n tokens.push(current.trim());\n }\n\n return tokens;\n};\n\nconst isShadowLengthToken = (value: string) => {\n return (\n value === \"0\" ||\n /^-?(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|vh|vw|vmin|vmax|%)?$/.test(value) ||\n value.startsWith(\"calc(\") ||\n value.startsWith(\"var(\")\n );\n};\n\nconst isShadowColorToken = (value: string) => {\n return (\n value.startsWith(\"#\") ||\n value.startsWith(\"rgb(\") ||\n value.startsWith(\"rgba(\") ||\n value.startsWith(\"hsl(\") ||\n value.startsWith(\"hsla(\") ||\n value.startsWith(\"oklch(\") ||\n value.startsWith(\"oklab(\") ||\n value.startsWith(\"lab(\") ||\n value.startsWith(\"lch(\") ||\n value.startsWith(\"color(\") ||\n value.startsWith(\"color-mix(\") ||\n value.startsWith(\"var(\") ||\n /^[a-zA-Z]+$/.test(value)\n );\n};\n\nconst boxShadowToDropShadow = (\n boxShadow?: CSSProperties[\"boxShadow\"],\n): CSSProperties[\"filter\"] | undefined => {\n if (\n typeof boxShadow !== \"string\" ||\n !boxShadow.trim() ||\n boxShadow.trim() === \"none\"\n ) {\n return undefined;\n }\n\n const shadows = splitOutsideParentheses(boxShadow, \",\");\n const filters = shadows\n .map((shadow) => {\n const tokens = splitShadowTokens(shadow);\n\n if (tokens.includes(\"inset\")) {\n return null;\n }\n\n const lengths = tokens.filter(isShadowLengthToken);\n\n if (lengths.length < 2) {\n return null;\n }\n\n const color = tokens.find((token) => {\n return (\n token !== \"inset\" &&\n !isShadowLengthToken(token) &&\n isShadowColorToken(token)\n );\n });\n\n const offsetX = lengths[0];\n const offsetY = lengths[1];\n const blur = lengths[2] ?? \"0px\";\n\n return `drop-shadow(${offsetX} ${offsetY} ${blur} ${\n color ?? \"rgba(0, 0, 0, 0.25)\"\n })`;\n })\n .filter((value): value is string => {\n return value !== null;\n });\n\n return filters.length ? filters.join(\" \") : undefined;\n};\n\nexport const mergeThemes = (\n presetTheme: ThemeType,\n customTheme?: ThemeType,\n): ThemeType => {\n if (!customTheme) {\n return presetTheme;\n }\n\n return {\n ...presetTheme,\n ...customTheme,\n body: {\n ...presetTheme.body,\n ...customTheme.body,\n style: {\n ...presetTheme.body?.style,\n ...customTheme.body?.style,\n },\n background:\n customTheme.body?.background ?? presetTheme.body?.background,\n filter: customTheme.body?.filter ?? presetTheme.body?.filter,\n className:\n customTheme.body?.className ?? presetTheme.body?.className,\n },\n arrow: {\n ...presetTheme.arrow,\n ...customTheme.arrow,\n },\n animation: {\n ...presetTheme.animation,\n ...customTheme.animation,\n },\n };\n};\n\nexport const resolveThemeStyles = (\n theme: ThemeType,\n): ResolvedThemeStyles => {\n const bodyStyle = theme.body?.style ?? {};\n const surfaceStyle = resolveSurfaceStyle(bodyStyle);\n\n const {\n background,\n backgroundColor,\n backgroundImage,\n border,\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n borderWidth,\n borderStyle,\n borderColor,\n borderTopWidth,\n borderRightWidth,\n borderBottomWidth,\n borderLeftWidth,\n borderTopStyle,\n borderRightStyle,\n borderBottomStyle,\n borderLeftStyle,\n borderTopColor,\n borderRightColor,\n borderBottomColor,\n borderLeftColor,\n borderRadius,\n borderTopLeftRadius,\n borderTopRightRadius,\n borderBottomRightRadius,\n borderBottomLeftRadius,\n boxShadow,\n filter,\n backdropFilter,\n WebkitBackdropFilter,\n color,\n ...contentStyle\n } = bodyStyle;\n\n const resolvedBackground =\n theme.body?.background ??\n background ??\n backgroundImage ??\n backgroundColor ??\n \"var(--global-color-link)\";\n\n const resolvedColor = color ?? \"var(--global-bg-color)\";\n const resolvedFilter =\n theme.body?.filter ?? filter ?? boxShadowToDropShadow(boxShadow);\n\n return {\n background: resolvedBackground,\n color: resolvedColor,\n contentStyle,\n surfaceStyle,\n fillStyle: {\n backdropFilter,\n WebkitBackdropFilter,\n },\n filter: resolvedFilter,\n };\n};\n","import { createContext, ReactNode, useContext, useMemo } from \"react\";\n\nimport { PresetsThemeType } from \"src/config/presets\";\nimport { ThemeType } from \"src/types/Theme.type\";\nimport {\n TooltipPlacement,\n TooltipProviderInterface,\n} from \"src/types/Tooltip.interface\";\nimport { TooltipAnimationOptions } from \"src/types/TooltipAnimation.type\";\n\ntype TooltipDefaults = {\n defaultRenderPosition: TooltipPlacement;\n selectTheme: PresetsThemeType;\n customTheme?: ThemeType;\n animation?: TooltipAnimationOptions;\n interactive: boolean;\n hideDelay?: number;\n};\n\ntype TooltipProviderProps = TooltipProviderInterface & {\n children: ReactNode;\n};\n\nconst DEFAULT_TOOLTIP_VALUES: TooltipDefaults = {\n defaultRenderPosition: \"top\",\n selectTheme: \"primary\",\n interactive: false,\n};\n\nconst TooltipContext = createContext<TooltipDefaults>(DEFAULT_TOOLTIP_VALUES);\n\nexport const TooltipProvider = ({\n children,\n defaultRenderPosition = DEFAULT_TOOLTIP_VALUES.defaultRenderPosition,\n selectTheme = DEFAULT_TOOLTIP_VALUES.selectTheme,\n customTheme,\n animation,\n interactive = DEFAULT_TOOLTIP_VALUES.interactive,\n hideDelay,\n}: TooltipProviderProps) => {\n const value = useMemo<TooltipDefaults>(() => {\n return {\n defaultRenderPosition,\n selectTheme,\n customTheme,\n animation,\n interactive,\n hideDelay,\n };\n }, [\n animation,\n customTheme,\n defaultRenderPosition,\n hideDelay,\n interactive,\n selectTheme,\n ]);\n\n return (\n <TooltipContext.Provider value={value}>\n {children}\n </TooltipContext.Provider>\n );\n};\n\nexport const useTooltipDefaults = () => {\n return useContext(TooltipContext);\n};\n","import {\n CSSProperties,\n RefObject,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { TooltipPlacement } from \"src/types/Tooltip.interface\";\n\ntype TooltipSurfaceProps = {\n bodyRef: RefObject<HTMLDivElement | null>;\n placement: TooltipPlacement;\n arrowOffset: string;\n surfaceStyle?: CSSProperties;\n fillStyle?: CSSProperties;\n filter?: CSSProperties[\"filter\"];\n};\n\ntype CornerRadii = {\n topLeft: number;\n topRight: number;\n bottomRight: number;\n bottomLeft: number;\n};\n\ntype SurfaceMetrics = {\n width: number;\n height: number;\n left: number;\n top: number;\n path: string;\n strokeWidth: number;\n strokeColor: string;\n strokeDasharray?: string;\n strokeLinecap?: \"butt\" | \"round\" | \"square\";\n};\n\ntype SurfaceFillStyle = CSSProperties & {\n WebkitMaskImage?: string;\n WebkitMaskPosition?: string;\n WebkitMaskRepeat?: string;\n WebkitMaskSize?: string;\n};\n\nconst EMPTY_METRICS: SurfaceMetrics = {\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n path: \"\",\n strokeWidth: 0,\n strokeColor: \"transparent\",\n};\n\nconst clamp = (value: number, min: number, max: number) => {\n return Math.min(Math.max(value, min), Math.max(min, max));\n};\n\nconst resolveCssLength = (value: string, base: number) => {\n const normalized = value.trim();\n\n if (!normalized) {\n return 0;\n }\n\n if (normalized.endsWith(\"%\")) {\n return base * (Number.parseFloat(normalized) / 100);\n }\n\n const parsed = Number.parseFloat(normalized);\n\n return Number.isFinite(parsed) ? parsed : 0;\n};\n\nconst resolveCornerRadius = (value: string, width: number, height: number) => {\n const parts = value.trim().split(/\\s+/).filter(Boolean);\n\n const horizontal = resolveCssLength(parts[0] ?? \"0\", width);\n const vertical = resolveCssLength(parts[1] ?? parts[0] ?? \"0\", height);\n\n return Math.min(horizontal, vertical);\n};\n\nconst normalizeRadii = (\n radii: CornerRadii,\n width: number,\n height: number,\n): CornerRadii => {\n const top = radii.topLeft + radii.topRight;\n const bottom = radii.bottomLeft + radii.bottomRight;\n const left = radii.topLeft + radii.bottomLeft;\n const right = radii.topRight + radii.bottomRight;\n\n const scale = Math.min(\n 1,\n top > 0 ? width / top : 1,\n bottom > 0 ? width / bottom : 1,\n left > 0 ? height / left : 1,\n right > 0 ? height / right : 1,\n );\n\n return {\n topLeft: radii.topLeft * scale,\n topRight: radii.topRight * scale,\n bottomRight: radii.bottomRight * scale,\n bottomLeft: radii.bottomLeft * scale,\n };\n};\n\nconst resolveArrowOffset = (value: string, edgeLength: number) => {\n const normalized = value.trim();\n\n if (normalized.endsWith(\"%\")) {\n return edgeLength * (Number.parseFloat(normalized) / 100);\n }\n\n const parsed = Number.parseFloat(normalized);\n\n return Number.isFinite(parsed) ? parsed : edgeLength / 2;\n};\n\nconst createSurfacePath = ({\n placement,\n bodyWidth,\n bodyHeight,\n arrowHeight,\n arrowWidth,\n requestedArrowOffset,\n radii,\n}: {\n placement: TooltipPlacement;\n bodyWidth: number;\n bodyHeight: number;\n arrowHeight: number;\n arrowWidth: number;\n requestedArrowOffset: number;\n radii: CornerRadii;\n}) => {\n let x0 = 0;\n let y0 = 0;\n let x1 = bodyWidth;\n let y1 = bodyHeight;\n\n let width = bodyWidth;\n let height = bodyHeight;\n let left = 0;\n let top = 0;\n\n if (placement === \"top\") {\n height += arrowHeight;\n }\n\n if (placement === \"bottom\") {\n y0 = arrowHeight;\n y1 = arrowHeight + bodyHeight;\n height += arrowHeight;\n top = -arrowHeight;\n }\n\n if (placement === \"left\") {\n width += arrowHeight;\n }\n\n if (placement === \"right\") {\n x0 = arrowHeight;\n x1 = arrowHeight + bodyWidth;\n width += arrowHeight;\n left = -arrowHeight;\n }\n\n let edgeLength = bodyWidth;\n let edgeStartRadius = radii.bottomLeft;\n let edgeEndRadius = radii.bottomRight;\n\n if (placement === \"bottom\") {\n edgeStartRadius = radii.topLeft;\n edgeEndRadius = radii.topRight;\n }\n\n if (placement === \"left\") {\n edgeLength = bodyHeight;\n edgeStartRadius = radii.topRight;\n edgeEndRadius = radii.bottomRight;\n }\n\n if (placement === \"right\") {\n edgeLength = bodyHeight;\n edgeStartRadius = radii.topLeft;\n edgeEndRadius = radii.bottomLeft;\n }\n\n const availableStraightEdge = Math.max(\n 0,\n edgeLength - edgeStartRadius - edgeEndRadius - 2,\n );\n\n const arrowHalf = Math.min(arrowWidth / 2, availableStraightEdge / 2);\n const minArrowCenter = edgeStartRadius + arrowHalf + 1;\n const maxArrowCenter = edgeLength - edgeEndRadius - arrowHalf - 1;\n\n const arrowCenter =\n minArrowCenter <= maxArrowCenter\n ? clamp(requestedArrowOffset, minArrowCenter, maxArrowCenter)\n : edgeLength / 2;\n\n const tl = radii.topLeft;\n const tr = radii.topRight;\n const br = radii.bottomRight;\n const bl = radii.bottomLeft;\n\n let path = \"\";\n\n if (placement === \"top\") {\n path = [\n `M ${x0 + tl} ${y0}`,\n `H ${x1 - tr}`,\n `Q ${x1} ${y0} ${x1} ${y0 + tr}`,\n `V ${y1 - br}`,\n `Q ${x1} ${y1} ${x1 - br} ${y1}`,\n `H ${arrowCenter + arrowHalf}`,\n `L ${arrowCenter} ${y1 + arrowHeight}`,\n `L ${arrowCenter - arrowHalf} ${y1}`,\n `H ${x0 + bl}`,\n `Q ${x0} ${y1} ${x0} ${y1 - bl}`,\n `V ${y0 + tl}`,\n `Q ${x0} ${y0} ${x0 + tl} ${y0}`,\n \"Z\",\n ].join(\" \");\n }\n\n if (placement === \"bottom\") {\n path = [\n `M ${x0 + tl} ${y0}`,\n `H ${arrowCenter - arrowHalf}`,\n `L ${arrowCenter} ${y0 - arrowHeight}`,\n `L ${arrowCenter + arrowHalf} ${y0}`,\n `H ${x1 - tr}`,\n `Q ${x1} ${y0} ${x1} ${y0 + tr}`,\n `V ${y1 - br}`,\n `Q ${x1} ${y1} ${x1 - br} ${y1}`,\n `H ${x0 + bl}`,\n `Q ${x0} ${y1} ${x0} ${y1 - bl}`,\n `V ${y0 + tl}`,\n `Q ${x0} ${y0} ${x0 + tl} ${y0}`,\n \"Z\",\n ].join(\" \");\n }\n\n if (placement === \"left\") {\n path = [\n `M ${x0 + tl} ${y0}`,\n `H ${x1 - tr}`,\n `Q ${x1} ${y0} ${x1} ${y0 + tr}`,\n `V ${arrowCenter - arrowHalf}`,\n `L ${x1 + arrowHeight} ${arrowCenter}`,\n `L ${x1} ${arrowCenter + arrowHalf}`,\n `V ${y1 - br}`,\n `Q ${x1} ${y1} ${x1 - br} ${y1}`,\n `H ${x0 + bl}`,\n `Q ${x0} ${y1} ${x0} ${y1 - bl}`,\n `V ${y0 + tl}`,\n `Q ${x0} ${y0} ${x0 + tl} ${y0}`,\n \"Z\",\n ].join(\" \");\n }\n\n if (placement === \"right\") {\n path = [\n `M ${x0 + tl} ${y0}`,\n `H ${x1 - tr}`,\n `Q ${x1} ${y0} ${x1} ${y0 + tr}`,\n `V ${y1 - br}`,\n `Q ${x1} ${y1} ${x1 - br} ${y1}`,\n `H ${x0 + bl}`,\n `Q ${x0} ${y1} ${x0} ${y1 - bl}`,\n `V ${arrowCenter + arrowHalf}`,\n `L ${x0 - arrowHeight} ${arrowCenter}`,\n `L ${x0} ${arrowCenter - arrowHalf}`,\n `V ${y0 + tl}`,\n `Q ${x0} ${y0} ${x0 + tl} ${y0}`,\n \"Z\",\n ].join(\" \");\n }\n\n return {\n width,\n height,\n left,\n top,\n path,\n };\n};\n\nconst getStrokeConfig = (computedStyle: CSSStyleDeclaration) => {\n const widths = [\n Number.parseFloat(computedStyle.borderTopWidth) || 0,\n Number.parseFloat(computedStyle.borderRightWidth) || 0,\n Number.parseFloat(computedStyle.borderBottomWidth) || 0,\n Number.parseFloat(computedStyle.borderLeftWidth) || 0,\n ];\n\n const styles = [\n computedStyle.borderTopStyle,\n computedStyle.borderRightStyle,\n computedStyle.borderBottomStyle,\n computedStyle.borderLeftStyle,\n ];\n\n const colors = [\n computedStyle.borderTopColor,\n computedStyle.borderRightColor,\n computedStyle.borderBottomColor,\n computedStyle.borderLeftColor,\n ];\n\n const activeIndexes = widths\n .map((width, index) => ({\n width,\n index,\n }))\n .filter(({ width, index }) => {\n return (\n width > 0 &&\n styles[index] !== \"none\" &&\n styles[index] !== \"hidden\"\n );\n });\n\n if (!activeIndexes.length) {\n return {\n strokeWidth: 0,\n strokeColor: \"transparent\",\n strokeDasharray: undefined,\n strokeLinecap: undefined,\n };\n }\n\n const active = activeIndexes.reduce((largest, current) => {\n return current.width > largest.width ? current : largest;\n });\n\n const strokeWidth = active.width;\n const strokeStyle = styles[active.index];\n const strokeColor = colors[active.index];\n\n if (strokeStyle === \"dashed\") {\n return {\n strokeWidth,\n strokeColor,\n strokeDasharray: `${strokeWidth * 3} ${strokeWidth * 2}`,\n strokeLinecap: \"butt\" as const,\n };\n }\n\n if (strokeStyle === \"dotted\") {\n return {\n strokeWidth,\n strokeColor,\n strokeDasharray: `${strokeWidth} ${strokeWidth * 1.6}`,\n strokeLinecap: \"round\" as const,\n };\n }\n\n return {\n strokeWidth,\n strokeColor,\n strokeDasharray: undefined,\n strokeLinecap: \"round\" as const,\n };\n};\n\nconst createMaskImage = (width: number, height: number, path: string) => {\n const svg = [\n '<svg xmlns=\"http://www.w3.org/2000/svg\"',\n ` viewBox=\"0 0 ${width} ${height}\"`,\n ` width=\"${width}\"`,\n ` height=\"${height}\">`,\n `<path fill=\"white\" d=\"${path}\"/>`,\n \"</svg>\",\n ].join(\"\");\n\n return `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\")`;\n};\n\nexport const TooltipSurface = ({\n bodyRef,\n placement,\n arrowOffset,\n surfaceStyle,\n fillStyle,\n filter,\n}: TooltipSurfaceProps) => {\n const surfaceProbeRef = useRef<HTMLDivElement>(null);\n const arrowProbeRef = useRef<HTMLDivElement>(null);\n const [metrics, setMetrics] = useState<SurfaceMetrics>(EMPTY_METRICS);\n\n useLayoutEffect(() => {\n const body = bodyRef.current;\n const surfaceProbe = surfaceProbeRef.current;\n const arrowProbe = arrowProbeRef.current;\n\n if (!body || !surfaceProbe || !arrowProbe) {\n return;\n }\n\n const update = () => {\n const bodyWidth = body.offsetWidth;\n const bodyHeight = body.offsetHeight;\n\n if (bodyWidth <= 0 || bodyHeight <= 0) {\n return;\n }\n\n surfaceProbe.style.width = `${bodyWidth}px`;\n surfaceProbe.style.height = `${bodyHeight}px`;\n\n const surfaceComputedStyle = window.getComputedStyle(surfaceProbe);\n const arrowComputedStyle = window.getComputedStyle(arrowProbe);\n\n const arrowHeight =\n Number.parseFloat(arrowComputedStyle.height) || 6;\n const arrowWidth =\n Number.parseFloat(arrowComputedStyle.width) || arrowHeight * 2;\n\n const radii = normalizeRadii(\n {\n topLeft: resolveCornerRadius(\n surfaceComputedStyle.borderTopLeftRadius,\n bodyWidth,\n bodyHeight,\n ),\n topRight: resolveCornerRadius(\n surfaceComputedStyle.borderTopRightRadius,\n bodyWidth,\n bodyHeight,\n ),\n bottomRight: resolveCornerRadius(\n surfaceComputedStyle.borderBottomRightRadius,\n bodyWidth,\n bodyHeight,\n ),\n bottomLeft: resolveCornerRadius(\n surfaceComputedStyle.borderBottomLeftRadius,\n bodyWidth,\n bodyHeight,\n ),\n },\n bodyWidth,\n bodyHeight,\n );\n\n const requestedArrowOffset = resolveArrowOffset(\n arrowOffset,\n placement === \"top\" || placement === \"bottom\"\n ? bodyWidth\n : bodyHeight,\n );\n\n const surface = createSurfacePath({\n placement,\n bodyWidth,\n bodyHeight,\n arrowHeight,\n arrowWidth,\n requestedArrowOffset,\n radii,\n });\n\n const stroke = getStrokeConfig(surfaceComputedStyle);\n const nextMetrics: SurfaceMetrics = {\n ...surface,\n ...stroke,\n };\n\n setMetrics((current) => {\n if (\n current.width === nextMetrics.width &&\n current.height === nextMetrics.height &&\n current.left === nextMetrics.left &&\n current.top === nextMetrics.top &&\n current.path === nextMetrics.path &&\n current.strokeWidth === nextMetrics.strokeWidth &&\n current.strokeColor === nextMetrics.strokeColor &&\n current.strokeDasharray === nextMetrics.strokeDasharray &&\n current.strokeLinecap === nextMetrics.strokeLinecap\n ) {\n return current;\n }\n\n return nextMetrics;\n });\n };\n\n update();\n\n const resizeObserver = new ResizeObserver(update);\n\n resizeObserver.observe(body);\n window.addEventListener(\"resize\", update);\n\n return () => {\n resizeObserver.disconnect();\n window.removeEventListener(\"resize\", update);\n };\n }, [arrowOffset, bodyRef, placement, surfaceStyle]);\n\n const maskImage = metrics.path\n ? createMaskImage(metrics.width, metrics.height, metrics.path)\n : undefined;\n\n const resolvedFillStyle: SurfaceFillStyle = {\n ...fillStyle,\n maskImage,\n maskPosition: \"0 0\",\n maskRepeat: \"no-repeat\",\n maskSize: \"100% 100%\",\n WebkitMaskImage: maskImage,\n WebkitMaskPosition: \"0 0\",\n WebkitMaskRepeat: \"no-repeat\",\n WebkitMaskSize: \"100% 100%\",\n };\n\n return (\n <>\n <div\n ref={surfaceProbeRef}\n className=\"tooltip-surface-probe\"\n style={surfaceStyle}\n />\n\n <div ref={arrowProbeRef} className=\"tooltip-arrow-probe\" />\n\n {metrics.path ? (\n <div\n className=\"tooltip-surface\"\n style={{\n width: metrics.width,\n height: metrics.height,\n left: metrics.left,\n top: metrics.top,\n filter,\n }}\n aria-hidden=\"true\"\n >\n <div\n className=\"tooltip-surface__fill\"\n style={resolvedFillStyle}\n />\n\n {metrics.strokeWidth > 0 ? (\n <svg\n className=\"tooltip-surface__stroke\"\n width={metrics.width}\n height={metrics.height}\n viewBox={`0 0 ${metrics.width} ${metrics.height}`}\n >\n <path\n d={metrics.path}\n fill=\"none\"\n stroke={metrics.strokeColor}\n strokeWidth={metrics.strokeWidth}\n strokeDasharray={metrics.strokeDasharray}\n strokeLinecap={metrics.strokeLinecap}\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n ) : null}\n </div>\n ) : null}\n </>\n );\n};\n"],"mappings":"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","names":["useCallback","useLayoutEffect","useMemo","useRef","useState","useLayoutEffect","useRef","useState","jsx","clamp","Fragment","jsx","jsxs","useRef","useState","useCallback","useLayoutEffect","useMemo"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/Tooltip.tsx","../src/config/presets.ts","../src/hooks/useTooltip.ts","../src/utils/tooltipTheme.ts","../src/components/TooltipProvider.tsx","../src/components/TooltipSurface.tsx"],"sourcesContent":["import {\n AnimationEvent,\n Children,\n cloneElement,\n CSSProperties,\n ReactElement,\n Ref,\n RefCallback,\n RefObject,\n useCallback,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { presets } from \"src/config/presets\";\nimport { useTooltip } from \"src/hooks/useTooltip\";\nimport { TooltipInterface } from \"src/types/Tooltip.interface\";\nimport { TooltipAnimationType } from \"src/types/TooltipAnimation.type\";\nimport { mergeThemes, resolveThemeStyles } from \"src/utils/tooltipTheme\";\n\nimport { useTooltipDefaults } from \"./TooltipProvider\";\nimport { TooltipSurface } from \"./TooltipSurface\";\n\nimport \"../css/tooltip.css\";\n\ntype TooltipContainerStyle = CSSProperties & {\n \"--tooltip-bg\"?: CSSProperties[\"background\"];\n \"--tooltip-color\"?: CSSProperties[\"color\"];\n \"--tooltip-arrow-size\"?: string;\n \"--tooltip-arrow-width\"?: string;\n \"--tooltip-animation-speed\"?: string;\n \"--tooltip-animation-easing\"?: string;\n};\n\ntype RefableElementProps = {\n ref?: Ref<HTMLElement>;\n};\n\nconst DEFAULT_SHOW_ANIMATION: TooltipAnimationType = \"slide\";\nconst DEFAULT_HIDE_ANIMATION: TooltipAnimationType = \"fade\";\n\nconst assignRef = <T,>(ref: Ref<T> | undefined, value: T | null) => {\n if (typeof ref === \"function\") {\n ref(value);\n return;\n }\n\n if (ref) {\n (ref as RefObject<T | null>).current = value;\n }\n};\n\nexport const Tooltip = ({\n content,\n children,\n position,\n selectTheme,\n customTheme,\n animation,\n disabled = false,\n interactive,\n hideDelay,\n}: TooltipInterface) => {\n const defaults = useTooltipDefaults();\n const markerRef = useRef<HTMLSpanElement>(null);\n const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n\n const trigger = children\n ? (Children.only(children) as ReactElement<RefableElementProps>)\n : null;\n\n const triggerRef = trigger?.props.ref;\n\n const setTriggerRef = useCallback<RefCallback<HTMLElement>>(\n (node) => {\n assignRef(triggerRef, node);\n setAnchor(node);\n },\n [triggerRef],\n );\n\n useLayoutEffect(() => {\n if (trigger) {\n return;\n }\n\n const marker = markerRef.current;\n const parent = marker?.parentElement ?? null;\n\n setAnchor(parent);\n\n return () => {\n setAnchor(null);\n };\n }, [trigger]);\n\n const inheritedTheme = useMemo(() => {\n return mergeThemes(presets[defaults.selectTheme], defaults.customTheme);\n }, [defaults.customTheme, defaults.selectTheme]);\n\n const theme = useMemo(() => {\n if (selectTheme) {\n return mergeThemes(presets[selectTheme], customTheme);\n }\n\n return mergeThemes(inheritedTheme, customTheme);\n }, [customTheme, inheritedTheme, selectTheme]);\n\n const resolvedThemeStyles = useMemo(() => {\n return resolveThemeStyles(theme);\n }, [theme]);\n\n const localThemeAnimation = selectTheme\n ? theme.animation\n : customTheme?.animation;\n\n const showAnimation =\n animation?.show ??\n localThemeAnimation?.show ??\n defaults.animation?.show ??\n inheritedTheme.animation?.show ??\n DEFAULT_SHOW_ANIMATION;\n\n const hideAnimation =\n animation?.hide ??\n localThemeAnimation?.hide ??\n defaults.animation?.hide ??\n inheritedTheme.animation?.hide ??\n DEFAULT_HIDE_ANIMATION;\n\n const animationSpeed =\n animation?.speed ??\n localThemeAnimation?.speed ??\n defaults.animation?.speed ??\n inheritedTheme.animation?.speed ??\n \"120ms\";\n\n const animationEasing =\n animation?.easing ??\n localThemeAnimation?.easing ??\n defaults.animation?.easing ??\n inheritedTheme.animation?.easing ??\n \"ease-in-out\";\n\n const preferredPlacement = position ?? defaults.defaultRenderPosition;\n const resolvedInteractive = interactive ?? defaults.interactive;\n const resolvedHideDelay = hideDelay ?? defaults.hideDelay;\n\n const {\n shouldRender,\n phase,\n placement,\n position: tooltipPosition,\n tooltipRef,\n bodyRef,\n onAnimationEnd,\n } = useTooltip({\n anchor,\n preferredPlacement,\n disabled: disabled || content === null || content === undefined,\n interactive: resolvedInteractive,\n hideDelay: resolvedHideDelay,\n });\n\n const arrowSize = theme.arrow?.size ?? \"6px\";\n const arrowWidth = theme.arrow?.width ?? `calc(${arrowSize} * 2)`;\n\n const containerStyle: TooltipContainerStyle = {\n \"--tooltip-bg\": resolvedThemeStyles.background,\n \"--tooltip-color\": resolvedThemeStyles.color,\n \"--tooltip-arrow-size\": arrowSize,\n \"--tooltip-arrow-width\": arrowWidth,\n \"--tooltip-animation-speed\": animationSpeed,\n \"--tooltip-animation-easing\": animationEasing,\n ...tooltipPosition,\n };\n\n const arrowOffset = String(\n tooltipPosition[\"--tooltip-arrow-offset\"] ?? \"50%\",\n );\n\n const handleAnimationEnd = (event: AnimationEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) {\n return;\n }\n\n onAnimationEnd();\n };\n\n const triggerElement = trigger ? (\n cloneElement(trigger, {\n ref: setTriggerRef,\n })\n ) : (\n <span ref={markerRef} hidden aria-hidden=\"true\" />\n );\n\n const portal =\n shouldRender && typeof document !== \"undefined\"\n ? createPortal(\n <div\n ref={tooltipRef}\n className={[\n \"tooltip-container\",\n `tooltip-container--${placement}`,\n `tooltip-container--phase-${phase}`,\n `tooltip-container--show-${showAnimation}`,\n `tooltip-container--hide-${hideAnimation}`,\n resolvedInteractive\n ? \"tooltip-container--interactive\"\n : null,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={containerStyle}\n >\n <div\n ref={bodyRef}\n className=\"tooltip-body\"\n onAnimationEnd={handleAnimationEnd}\n >\n <TooltipSurface\n bodyRef={bodyRef}\n placement={placement}\n arrowOffset={arrowOffset}\n surfaceStyle={resolvedThemeStyles.surfaceStyle}\n fillStyle={resolvedThemeStyles.fillStyle}\n filter={resolvedThemeStyles.filter}\n />\n\n <div\n className={[\n \"tooltip-body__content\",\n theme.body?.className,\n ]\n .filter(Boolean)\n .join(\" \")}\n style={resolvedThemeStyles.contentStyle}\n >\n {content}\n </div>\n </div>\n </div>,\n document.body,\n )\n : null;\n\n return (\n <>\n {triggerElement}\n {portal}\n </>\n );\n};\n","import { CSSProperties } from \"react\";\n\nimport { ThemeType } from \"../types/Theme.type\";\n\ntype PresetAnimation = NonNullable<ThemeType[\"animation\"]>;\n\ntype TooltipArrow = NonNullable<ThemeType[\"arrow\"]>;\n\ntype ArrowSize = NonNullable<TooltipArrow[\"size\"]>;\n\ntype ArrowWidth = NonNullable<TooltipArrow[\"width\"]>;\n\ntype CreateThemeOptions = {\n background: NonNullable<CSSProperties[\"background\"]>;\n color: NonNullable<CSSProperties[\"color\"]>;\n fontFamily?: CSSProperties[\"fontFamily\"];\n fontSize?: CSSProperties[\"fontSize\"];\n fontWeight?: CSSProperties[\"fontWeight\"];\n fontStyle?: CSSProperties[\"fontStyle\"];\n lineHeight?: CSSProperties[\"lineHeight\"];\n borderRadius?: CSSProperties[\"borderRadius\"];\n border?: CSSProperties[\"border\"];\n filter?: CSSProperties[\"filter\"];\n padding?: CSSProperties[\"padding\"];\n letterSpacing?: CSSProperties[\"letterSpacing\"];\n textShadow?: CSSProperties[\"textShadow\"];\n textTransform?: CSSProperties[\"textTransform\"];\n textAlign?: CSSProperties[\"textAlign\"];\n backdropFilter?: CSSProperties[\"backdropFilter\"];\n arrowSize?: ArrowSize;\n arrowWidth?: ArrowWidth;\n animation?: PresetAnimation;\n style?: CSSProperties;\n};\n\nconst animations = {\n soft: {\n show: \"fade\",\n hide: \"fade\",\n speed: \"160ms\",\n easing: \"ease-in-out\",\n },\n\n slide: {\n show: \"slide\",\n hide: \"fade\",\n speed: \"160ms\",\n easing: \"ease-out\",\n },\n\n pop: {\n show: \"scale\",\n hide: \"scale\",\n speed: \"170ms\",\n easing: \"cubic-bezier(0.22, 1, 0.36, 1)\",\n },\n\n bounce: {\n show: \"bounce\",\n hide: \"scale\",\n speed: \"240ms\",\n easing: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\n },\n\n flip: {\n show: \"flip\",\n hide: \"fade\",\n speed: \"210ms\",\n easing: \"cubic-bezier(0.22, 1, 0.36, 1)\",\n },\n\n blur: {\n show: \"blur\",\n hide: \"blur\",\n speed: \"200ms\",\n easing: \"ease-out\",\n },\n\n zoom: {\n show: \"zoom\",\n hide: \"zoom\",\n speed: \"170ms\",\n easing: \"ease-out\",\n },\n\n snap: {\n show: \"zoom\",\n hide: \"fade\",\n speed: \"110ms\",\n easing: \"steps(4, end)\",\n },\n\n instant: {\n show: \"none\",\n hide: \"none\",\n speed: \"1ms\",\n easing: \"linear\",\n },\n} satisfies Record<string, PresetAnimation>;\n\nconst createTheme = ({\n background,\n color,\n fontFamily = \"Inter, Arial, sans-serif\",\n fontSize = \"12px\",\n fontWeight = 500,\n fontStyle,\n lineHeight = 1.4,\n borderRadius = \"7px\",\n border,\n filter,\n padding = \"7px 12px\",\n letterSpacing,\n textShadow,\n textTransform,\n textAlign = \"center\",\n backdropFilter,\n arrowSize = \"7px\",\n arrowWidth = \"14px\",\n animation = animations.slide,\n style,\n}: CreateThemeOptions): ThemeType => {\n return {\n body: {\n background,\n filter,\n style: {\n color,\n fontFamily,\n fontSize,\n fontWeight,\n fontStyle,\n lineHeight,\n borderRadius,\n border,\n padding,\n letterSpacing,\n textShadow,\n textTransform,\n textAlign,\n backdropFilter,\n WebkitBackdropFilter: backdropFilter,\n ...style,\n },\n },\n\n arrow: {\n size: arrowSize,\n width: arrowWidth,\n },\n\n animation,\n };\n};\n\nexport const presets = {\n primary: createTheme({\n background: \"linear-gradient(135deg, #2563eb, #1d4ed8)\",\n color: \"#ffffff\",\n filter: \"drop-shadow(0 7px 12px rgba(37, 99, 235, 0.38))\",\n border: \"1px solid rgba(255, 255, 255, 0.18)\",\n borderRadius: \"8px\",\n }),\n\n secondary: createTheme({\n background: \"linear-gradient(135deg, #64748b, #475569)\",\n color: \"#ffffff\",\n filter: \"drop-shadow(0 7px 12px rgba(15, 23, 42, 0.3))\",\n border: \"1px solid rgba(255, 255, 255, 0.15)\",\n animation: animations.soft,\n }),\n\n dark: createTheme({\n background: \"linear-gradient(145deg, #18181b, #09090b)\",\n color: \"#fafafa\",\n border: \"1px solid #3f3f46\",\n borderRadius: \"10px\",\n filter: \"drop-shadow(0 11px 18px rgba(0, 0, 0, 0.56))\",\n animation: animations.pop,\n }),\n\n light: createTheme({\n background: \"linear-gradient(145deg, #ffffff, #f4f4f5)\",\n color: \"#18181b\",\n border: \"1px solid #d4d4d8\",\n borderRadius: \"10px\",\n filter: \"drop-shadow(0 9px 15px rgba(15, 23, 42, 0.18))\",\n animation: animations.soft,\n }),\n\n comic: createTheme({\n background: \"#fde047\",\n color: \"#18181b\",\n fontFamily: \"Comic Sans MS, Comic Sans, cursive\",\n fontSize: \"13px\",\n fontWeight: 700,\n border: \"3px solid #18181b\",\n borderRadius: \"12px\",\n filter: \"drop-shadow(5px 5px 0 #18181b)\",\n padding: \"8px 14px\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.bounce,\n }),\n\n manga: createTheme({\n background: \"linear-gradient(145deg, #ffffff, #f4f4f5)\",\n color: \"#000000\",\n fontFamily: \"Impact, Haettenschweiler, Arial Narrow Bold, sans-serif\",\n fontSize: \"13px\",\n fontWeight: 900,\n border: \"3px solid #000000\",\n borderRadius: \"10px 3px 10px 3px\",\n padding: \"9px 15px\",\n letterSpacing: \"0.04em\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"17px\",\n animation: animations.pop,\n }),\n\n newspaper: createTheme({\n background:\n \"repeating-linear-gradient(0deg, rgba(68, 64, 60, 0.035) 0, rgba(68, 64, 60, 0.035) 1px, transparent 1px, transparent 4px), #f5f0e6\",\n color: \"#292524\",\n fontFamily: \"Times New Roman, Times, serif\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"2px solid #44403c\",\n borderRadius: \"1px\",\n filter: \"drop-shadow(3px 4px 0 rgba(68, 64, 60, 0.28))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.02em\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"18px\",\n animation: animations.soft,\n style: {\n fontVariantCaps: \"small-caps\",\n },\n }),\n\n stickyNote: createTheme({\n background:\n \"linear-gradient(145deg, #fff7a8 0%, #fde96b 70%, #e9cc42 100%)\",\n color: \"#4a3c00\",\n fontFamily: \"Comic Sans MS, cursive\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"1px solid #d6b936\",\n borderRadius: \"3px 14px 5px 11px\",\n filter: \"drop-shadow(3px 6px 5px rgba(78, 65, 0, 0.28))\",\n padding: \"10px 15px\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"19px\",\n animation: animations.pop,\n }),\n\n blueprint: createTheme({\n background:\n \"linear-gradient(rgba(147, 197, 253, 0.15) 1px, transparent 1px), linear-gradient(90deg, rgba(147, 197, 253, 0.15) 1px, transparent 1px), #0c4a6e\",\n color: \"#e0f2fe\",\n fontFamily: \"Courier New, Consolas, monospace\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"2px dashed #7dd3fc\",\n borderRadius: \"2px\",\n filter: \"drop-shadow(0 0 7px rgba(56, 189, 248, 0.45))\",\n padding: \"9px 13px\",\n letterSpacing: \"0.05em\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"16px\",\n animation: animations.flip,\n style: {\n backgroundSize: \"12px 12px\",\n },\n }),\n\n terminal: createTheme({\n background: \"#020a04\",\n color: \"#4ade80\",\n fontFamily: \"Consolas, Monaco, Courier New, monospace\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"1px solid #22c55e\",\n borderRadius: \"3px\",\n padding: \"8px 12px\",\n letterSpacing: \"0.035em\",\n textAlign: \"left\",\n arrowSize: \"7px\",\n arrowWidth: \"13px\",\n animation: animations.soft,\n }),\n\n crt: createTheme({\n background: \"linear-gradient(180deg, #07150b, #020804)\",\n color: \"#86efac\",\n fontFamily: \"Lucida Console, Monaco, monospace\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"2px solid #166534\",\n borderRadius: \"12px\",\n padding: \"10px 15px\",\n arrowSize: \"8px\",\n arrowWidth: \"18px\",\n animation: animations.soft,\n }),\n\n pixel: createTheme({\n background: \"linear-gradient(135deg, #4c1d95, #581c87)\",\n color: \"#fef08a\",\n fontFamily: \"Courier New, monospace\",\n fontSize: \"10px\",\n fontWeight: 700,\n lineHeight: 1.7,\n border: \"4px solid #fef08a\",\n borderRadius: \"0px\",\n padding: \"10px 14px\",\n letterSpacing: \"0.03em\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"18px\",\n animation: animations.pop,\n }),\n\n arcade: createTheme({\n background:\n \"radial-gradient(circle at 20% 0%, rgba(34, 211, 238, 0.45), transparent 38%), radial-gradient(circle at 90% 100%, rgba(236, 72, 153, 0.55), transparent 45%), #150629\",\n color: \"#ffffff\",\n fontFamily: \"Arial Black, Impact, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"2px solid #22d3ee\",\n borderRadius: \"12px\",\n filter: \"drop-shadow(3px 3px 0 #ec4899) drop-shadow(-3px -3px 0 #22d3ee)\",\n padding: \"9px 15px\",\n letterSpacing: \"0.07em\",\n textShadow: \"0 0 6px #22d3ee\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"18px\",\n animation: animations.bounce,\n }),\n\n cyberpunk: createTheme({\n background:\n \"repeating-linear-gradient(135deg, rgba(0, 0, 0, 0.12) 0, rgba(0, 0, 0, 0.12) 5px, transparent 5px, transparent 10px), linear-gradient(135deg, #fde047, #facc15)\",\n color: \"#18181b\",\n fontFamily: \"Impact, Arial Black, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"2px solid #22d3ee\",\n borderRadius: \"1px 12px 1px 12px\",\n filter: \"drop-shadow(5px 5px 0 #ec4899) drop-shadow(-2px -2px 0 #22d3ee)\",\n padding: \"9px 15px\",\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"21px\",\n animation: animations.flip,\n }),\n\n synthwave: createTheme({\n background:\n \"linear-gradient(180deg, rgba(15, 23, 42, 0.2), rgba(15, 23, 42, 0.75)), linear-gradient(135deg, #7c3aed, #db2777)\",\n color: \"#fdf4ff\",\n fontFamily: \"Trebuchet MS, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #67e8f9\",\n borderRadius: \"16px 3px 16px 3px\",\n filter: \"drop-shadow(0 0 7px #ec4899) drop-shadow(0 0 14px rgba(103, 232, 249, 0.5))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.07em\",\n textShadow: \"0 0 6px rgba(255, 255, 255, 0.7)\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.zoom,\n }),\n\n vaporwave: createTheme({\n background:\n \"linear-gradient(135deg, rgba(255, 255, 255, 0.2), transparent 50%), linear-gradient(135deg, #67e8f9, #f0abfc 52%, #f9a8d4)\",\n color: \"#4c1d95\",\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #ffffff\",\n borderRadius: \"18px\",\n filter: \"drop-shadow(5px 6px 0 rgba(124, 58, 237, 0.42))\",\n padding: \"9px 16px\",\n letterSpacing: \"0.06em\",\n textShadow: \"1px 1px 0 rgba(255, 255, 255, 0.8)\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"21px\",\n animation: animations.bounce,\n }),\n\n hologram: createTheme({\n background:\n \"linear-gradient(115deg, rgba(34, 211, 238, 0.42), rgba(168, 85, 247, 0.35), rgba(236, 72, 153, 0.35), rgba(34, 211, 238, 0.42)), linear-gradient(135deg, #082f49, #312e81)\",\n color: \"#ecfeff\",\n fontFamily: \"Segoe UI, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"1px solid rgba(165, 243, 252, 0.75)\",\n borderRadius: \"14px\",\n filter: \"drop-shadow(0 0 7px rgba(34, 211, 238, 0.75)) drop-shadow(0 0 16px rgba(168, 85, 247, 0.4))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.06em\",\n arrowSize: \"8px\",\n arrowWidth: \"18px\",\n animation: animations.blur,\n }),\n\n glass: createTheme({\n background:\n \"linear-gradient(135deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0.07)), linear-gradient(135deg, #1e293b, #0f172a)\",\n color: \"#f8fafc\",\n border: \"1px solid rgba(255, 255, 255, 0.34)\",\n borderRadius: \"16px\",\n filter: \"drop-shadow(0 12px 20px rgba(15, 23, 42, 0.38))\",\n padding: \"9px 15px\",\n arrowSize: \"8px\",\n arrowWidth: \"18px\",\n animation: animations.blur,\n }),\n\n frost: createTheme({\n background:\n \"radial-gradient(circle at 15% 20%, rgba(255, 255, 255, 0.85), transparent 35%), linear-gradient(135deg, #e0f2fe, #bae6fd)\",\n color: \"#075985\",\n fontWeight: 600,\n border: \"1px solid rgba(125, 211, 252, 0.9)\",\n borderRadius: \"18px\",\n filter: \"drop-shadow(0 8px 15px rgba(14, 116, 144, 0.24))\",\n padding: \"9px 15px\",\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.8)\",\n arrowSize: \"8px\",\n arrowWidth: \"19px\",\n animation: animations.blur,\n }),\n\n clay: createTheme({\n background: \"linear-gradient(145deg, #f3d5bc, #d9a77d)\",\n color: \"#5b2d16\",\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"1px solid #c78f63\",\n borderRadius: \"24px\",\n filter: \"drop-shadow(7px 9px 10px rgba(91, 45, 22, 0.28)) drop-shadow(-3px -3px 5px rgba(255, 242, 229, 0.72))\",\n padding: \"10px 17px\",\n arrowSize: \"9px\",\n arrowWidth: \"22px\",\n animation: animations.pop,\n }),\n\n bubblegum: createTheme({\n background:\n \"radial-gradient(circle at 25% 15%, rgba(255, 255, 255, 0.55), transparent 28%), linear-gradient(135deg, #f9a8d4, #f472b6)\",\n color: \"#831843\",\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #fdf2f8\",\n borderRadius: \"999px\",\n filter: \"drop-shadow(0 8px 12px rgba(219, 39, 119, 0.34))\",\n padding: \"9px 18px\",\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.8)\",\n arrowSize: \"9px\",\n arrowWidth: \"22px\",\n animation: animations.bounce,\n }),\n\n candy: createTheme({\n background:\n \"repeating-linear-gradient(135deg, #ffffff 0, #ffffff 8px, #ef4444 8px, #ef4444 16px)\",\n color: \"#991b1b\",\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"3px solid #991b1b\",\n borderRadius: \"16px\",\n filter: \"drop-shadow(4px 5px 0 rgba(127, 29, 29, 0.5))\",\n padding: \"9px 16px\",\n textShadow: \"1px 1px 0 #ffffff, -1px -1px 0 #ffffff\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"22px\",\n animation: animations.bounce,\n }),\n\n watermelon: createTheme({\n background:\n \"radial-gradient(ellipse at 22% 30%, #111827 0 2px, transparent 3px), radial-gradient(ellipse at 72% 68%, #111827 0 2px, transparent 3px), linear-gradient(180deg, #fb7185 0%, #f43f5e 72%, #f8fafc 72%, #f8fafc 82%, #22c55e 82%)\",\n color: \"#4c0519\",\n fontFamily: \"Trebuchet MS, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 800,\n border: \"2px solid #166534\",\n borderRadius: \"20px 20px 8px 8px\",\n filter: \"drop-shadow(0 8px 11px rgba(22, 101, 52, 0.32))\",\n padding: \"9px 16px 12px\",\n arrowSize: \"9px\",\n arrowWidth: \"22px\",\n animation: animations.pop,\n }),\n\n lemon: createTheme({\n background:\n \"radial-gradient(circle at 25% 25%, rgba(255, 255, 255, 0.65), transparent 22%), linear-gradient(135deg, #fef08a, #facc15)\",\n color: \"#713f12\",\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 800,\n border: \"2px dotted #a16207\",\n borderRadius: \"999px\",\n filter: \"drop-shadow(0 7px 10px rgba(202, 138, 4, 0.32))\",\n padding: \"8px 17px\",\n arrowSize: \"9px\",\n arrowWidth: \"22px\",\n animation: animations.bounce,\n }),\n\n lava: createTheme({\n background:\n \"radial-gradient(circle at 18% 20%, #facc15 0, #f97316 8%, transparent 22%), radial-gradient(circle at 78% 70%, #ef4444 0, #7f1d1d 18%, transparent 34%), linear-gradient(135deg, #450a0a, #09090b)\",\n color: \"#fef3c7\",\n fontFamily: \"Impact, Arial Black, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 800,\n border: \"2px solid #f97316\",\n borderRadius: \"14px 4px 18px 6px\",\n filter: \"drop-shadow(0 0 7px rgba(249, 115, 22, 0.8)) drop-shadow(0 8px 15px rgba(69, 10, 10, 0.6))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.04em\",\n textShadow: \"0 0 5px rgba(253, 186, 116, 0.8)\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"19px\",\n animation: animations.zoom,\n }),\n\n ember: createTheme({\n background:\n \"radial-gradient(circle at 15% 40%, rgba(251, 146, 60, 0.72), transparent 22%), radial-gradient(circle at 75% 20%, rgba(239, 68, 68, 0.48), transparent 25%), #291208\",\n color: \"#fed7aa\",\n fontFamily: \"Georgia, serif\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"1px solid #c2410c\",\n borderRadius: \"8px 18px 8px 18px\",\n filter: \"drop-shadow(0 0 7px rgba(234, 88, 12, 0.5))\",\n padding: \"9px 15px\",\n textShadow: \"0 0 4px rgba(251, 146, 60, 0.7)\",\n arrowSize: \"9px\",\n arrowWidth: \"18px\",\n animation: animations.blur,\n }),\n\n toxic: createTheme({\n background: \"linear-gradient(135deg, #bef264, #84cc16)\",\n color: \"#1a2e05\",\n fontFamily: \"Arial Black, Impact, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"3px solid #1a2e05\",\n borderRadius: \"3px 10px 3px 10px\",\n padding: \"9px 14px\",\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"20px\",\n animation: animations.pop,\n }),\n\n radioactive: createTheme({\n background:\n \"conic-gradient(from 45deg at 50% 50%, #facc15 0 12.5%, #18181b 12.5% 25%, #facc15 25% 37.5%, #18181b 37.5% 50%, #facc15 50% 62.5%, #18181b 62.5% 75%, #facc15 75% 87.5%, #18181b 87.5%)\",\n color: \"#ffffff\",\n fontFamily: \"Arial Black, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"3px solid #000000\",\n borderRadius: \"50%\",\n filter: \"drop-shadow(0 0 8px rgba(250, 204, 21, 0.7))\",\n padding: \"13px 18px\",\n letterSpacing: \"0.05em\",\n textShadow: \"2px 2px 0 #000000, -1px -1px 0 #000000\",\n textTransform: \"uppercase\",\n arrowSize: \"11px\",\n arrowWidth: \"21px\",\n animation: animations.zoom,\n }),\n\n hazard: createTheme({\n background: \"linear-gradient(135deg, #fb923c, #ea580c)\",\n color: \"#ffffff\",\n fontFamily: \"Arial Black, Impact, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"3px solid #18181b\",\n borderRadius: \"4px\",\n padding: \"9px 15px\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"20px\",\n animation: animations.pop,\n }),\n\n policeTape: createTheme({\n background:\n \"repeating-linear-gradient(135deg, #f8fafc 0, #f8fafc 11px, #2563eb 11px, #2563eb 22px)\",\n color: \"#172554\",\n fontFamily: \"Arial Narrow, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"3px solid #1e3a8a\",\n borderRadius: \"1px\",\n filter: \"drop-shadow(4px 5px 0 rgba(30, 58, 138, 0.42))\",\n padding: \"8px 15px\",\n letterSpacing: \"0.1em\",\n textShadow: \"1px 1px 0 #ffffff, -1px -1px 0 #ffffff\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.slide,\n }),\n\n construction: createTheme({\n background:\n \"repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.045) 0, rgba(255, 255, 255, 0.045) 1px, transparent 1px, transparent 7px), linear-gradient(135deg, #52525b, #27272a)\",\n color: \"#fed7aa\",\n fontFamily: \"DIN Condensed, Arial Narrow, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 800,\n border: \"3px dashed #f97316\",\n borderRadius: \"3px\",\n filter: \"drop-shadow(5px 6px 0 rgba(24, 24, 27, 0.52))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.07em\",\n textTransform: \"uppercase\",\n arrowSize: \"10px\",\n arrowWidth: \"20px\",\n animation: animations.flip,\n }),\n\n parchment: createTheme({\n background:\n \"radial-gradient(circle at 12% 20%, rgba(120, 83, 36, 0.12), transparent 20%), radial-gradient(circle at 82% 70%, rgba(120, 83, 36, 0.16), transparent 25%), linear-gradient(135deg, #f5deb3, #e7c78e)\",\n color: \"#5b3716\",\n fontFamily: \"Garamond, Georgia, serif\",\n fontSize: \"14px\",\n fontWeight: 600,\n border: \"2px solid #9a6b32\",\n borderRadius: \"14px 3px 12px 5px\",\n filter: \"drop-shadow(4px 6px 5px rgba(91, 55, 22, 0.3))\",\n padding: \"10px 16px\",\n textAlign: \"left\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.soft,\n }),\n\n pirateMap: createTheme({\n background:\n \"radial-gradient(circle at 75% 25%, transparent 0 6px, rgba(127, 29, 29, 0.55) 7px 8px, transparent 9px), repeating-radial-gradient(circle at 15% 85%, rgba(120, 83, 36, 0.08) 0 2px, transparent 2px 9px), #e7c78e\",\n color: \"#422006\",\n fontFamily: \"Papyrus, Harrington, Georgia, serif\",\n fontSize: \"13px\",\n fontWeight: 700,\n border: \"2px dashed #78350f\",\n borderRadius: \"5px 17px 7px 12px\",\n filter: \"drop-shadow(4px 7px 5px rgba(66, 32, 6, 0.36))\",\n padding: \"10px 16px\",\n letterSpacing: \"0.025em\",\n textAlign: \"left\",\n arrowSize: \"10px\",\n arrowWidth: \"19px\",\n animation: animations.flip,\n }),\n\n royal: createTheme({\n background:\n \"radial-gradient(circle at 50% -20%, rgba(250, 204, 21, 0.5), transparent 46%), linear-gradient(135deg, #581c87, #2e1065)\",\n color: \"#fef3c7\",\n fontFamily: \"Palatino Linotype, Book Antiqua, serif\",\n fontSize: \"13px\",\n fontWeight: 700,\n border: \"2px solid #facc15\",\n borderRadius: \"6px 20px 6px 20px\",\n filter: \"drop-shadow(0 8px 14px rgba(46, 16, 101, 0.55)) drop-shadow(0 0 5px rgba(250, 204, 21, 0.4))\",\n padding: \"10px 17px\",\n letterSpacing: \"0.05em\",\n textShadow: \"0 1px 2px rgba(0, 0, 0, 0.7)\",\n arrowSize: \"10px\",\n arrowWidth: \"21px\",\n animation: animations.flip,\n style: {\n fontVariantCaps: \"small-caps\",\n },\n }),\n\n noir: createTheme({\n background:\n \"linear-gradient(115deg, #000000 0%, #27272a 48%, #09090b 52%, #000000 100%)\",\n color: \"#ffffff\",\n fontFamily: \"Helvetica Neue, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"1px solid #a1a1aa\",\n borderRadius: \"0px\",\n filter: \"drop-shadow(7px 9px 0 rgba(0, 0, 0, 0.6))\",\n padding: \"9px 15px\",\n letterSpacing: \"0.12em\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"16px\",\n animation: animations.soft,\n }),\n\n detective: createTheme({\n background:\n \"repeating-linear-gradient(0deg, rgba(68, 64, 60, 0.05) 0, rgba(68, 64, 60, 0.05) 1px, transparent 1px, transparent 5px), #d6c29f\",\n color: \"#292524\",\n fontFamily: \"Courier New, monospace\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #57534e\",\n borderRadius: \"2px\",\n filter: \"drop-shadow(5px 7px 0 rgba(68, 64, 60, 0.34))\",\n padding: \"10px 15px\",\n letterSpacing: \"0.04em\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"17px\",\n animation: animations.slide,\n }),\n\n dossier: createTheme({\n background: \"linear-gradient(180deg, #f2e5c8, #dfc99f)\",\n color: \"#3f2d1d\",\n fontFamily: \"Courier New, monospace\",\n fontSize: \"11px\",\n fontWeight: 800,\n border: \"2px solid #92400e\",\n borderRadius: \"2px 7px 2px 7px\",\n padding: \"11px 16px\",\n letterSpacing: \"0.08em\",\n textTransform: \"uppercase\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"17px\",\n animation: animations.soft,\n }),\n\n medical: createTheme({\n background:\n \"linear-gradient(90deg, transparent 44%, rgba(14, 165, 233, 0.08) 44% 56%, transparent 56%), linear-gradient(0deg, transparent 44%, rgba(14, 165, 233, 0.08) 44% 56%, transparent 56%), #f8fafc\",\n color: \"#075985\",\n fontFamily: \"Arial, Helvetica, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #38bdf8\",\n borderRadius: \"10px\",\n filter: \"drop-shadow(0 8px 12px rgba(14, 165, 233, 0.2))\",\n padding: \"9px 15px\",\n arrowSize: \"8px\",\n arrowWidth: \"18px\",\n animation: animations.soft,\n }),\n\n laboratory: createTheme({\n background:\n \"linear-gradient(rgba(34, 211, 238, 0.09) 1px, transparent 1px), linear-gradient(90deg, rgba(34, 211, 238, 0.09) 1px, transparent 1px), linear-gradient(135deg, #082f49, #0f172a)\",\n color: \"#a5f3fc\",\n fontFamily: \"Roboto Mono, Consolas, monospace\",\n fontSize: \"11px\",\n fontWeight: 600,\n border: \"1px solid #22d3ee\",\n borderRadius: \"7px\",\n filter: \"drop-shadow(0 0 7px rgba(34, 211, 238, 0.45))\",\n padding: \"9px 14px\",\n letterSpacing: \"0.04em\",\n textAlign: \"left\",\n arrowSize: \"8px\",\n arrowWidth: \"16px\",\n animation: animations.blur,\n style: {\n backgroundSize: \"10px 10px\",\n },\n }),\n\n circuit: createTheme({\n background: \"linear-gradient(135deg, #052e16, #022c22)\",\n color: \"#bbf7d0\",\n fontFamily: \"Consolas, monospace\",\n fontSize: \"11px\",\n fontWeight: 700,\n border: \"2px solid #22c55e\",\n borderRadius: \"5px\",\n padding: \"9px 14px\",\n letterSpacing: \"0.05em\",\n arrowSize: \"8px\",\n arrowWidth: \"16px\",\n animation: animations.soft,\n }),\n\n galaxy: createTheme({\n background:\n \"radial-gradient(circle at 12% 25%, #ffffff 0 1px, transparent 1.5px), radial-gradient(circle at 76% 18%, #c4b5fd 0 1px, transparent 1.5px), radial-gradient(circle at 63% 78%, #ffffff 0 1.2px, transparent 1.8px), radial-gradient(circle at 28% 72%, rgba(236, 72, 153, 0.55), transparent 22%), radial-gradient(circle at 70% 20%, rgba(99, 102, 241, 0.55), transparent 32%), #09051f\",\n color: \"#f5f3ff\",\n fontFamily: \"Trebuchet MS, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"1px solid #8b5cf6\",\n borderRadius: \"18px\",\n filter: \"drop-shadow(0 0 9px rgba(139, 92, 246, 0.62)) drop-shadow(0 9px 16px rgba(9, 5, 31, 0.6))\",\n padding: \"10px 16px\",\n textShadow: \"0 0 5px rgba(196, 181, 253, 0.8)\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.blur,\n }),\n\n aurora: createTheme({\n background:\n \"radial-gradient(ellipse at 15% 0%, rgba(45, 212, 191, 0.85), transparent 45%), radial-gradient(ellipse at 90% 100%, rgba(217, 70, 239, 0.72), transparent 50%), linear-gradient(135deg, #0f172a, #312e81)\",\n color: \"#f0fdfa\",\n fontFamily: \"Segoe UI, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"1px solid rgba(153, 246, 228, 0.6)\",\n borderRadius: \"20px 8px 20px 8px\",\n filter: \"drop-shadow(0 10px 17px rgba(49, 46, 129, 0.48))\",\n padding: \"10px 16px\",\n arrowSize: \"9px\",\n arrowWidth: \"21px\",\n animation: animations.blur,\n }),\n\n oceanDepths: createTheme({\n background:\n \"radial-gradient(circle at 20% 10%, rgba(34, 211, 238, 0.32), transparent 32%), radial-gradient(circle at 80% 90%, rgba(14, 116, 144, 0.42), transparent 36%), linear-gradient(160deg, #083344, #020617)\",\n color: \"#cffafe\",\n fontFamily: \"Trebuchet MS, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"1px solid #0e7490\",\n borderRadius: \"4px 20px 4px 20px\",\n filter: \"drop-shadow(0 10px 16px rgba(2, 6, 23, 0.56)) drop-shadow(0 0 6px rgba(34, 211, 238, 0.3))\",\n padding: \"10px 16px\",\n arrowSize: \"10px\",\n arrowWidth: \"19px\",\n animation: animations.slide,\n }),\n\n coralReef: createTheme({\n background:\n \"radial-gradient(circle at 15% 100%, rgba(251, 113, 133, 0.75), transparent 30%), radial-gradient(circle at 90% 0%, rgba(45, 212, 191, 0.72), transparent 34%), linear-gradient(135deg, #0e7490, #155e75)\",\n color: \"#fff7ed\",\n fontFamily: \"Trebuchet MS, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 700,\n border: \"2px solid #fdba74\",\n borderRadius: \"18px 8px 14px 5px\",\n filter: \"drop-shadow(0 9px 14px rgba(14, 116, 144, 0.4))\",\n padding: \"9px 16px\",\n textShadow: \"0 1px 2px rgba(12, 74, 110, 0.8)\",\n arrowSize: \"9px\",\n arrowWidth: \"21px\",\n animation: animations.bounce,\n }),\n\n forest: createTheme({\n background:\n \"radial-gradient(ellipse at 20% 20%, rgba(74, 222, 128, 0.18), transparent 30%), repeating-linear-gradient(115deg, rgba(255, 255, 255, 0.025) 0 2px, transparent 2px 7px), linear-gradient(135deg, #14532d, #052e16)\",\n color: \"#dcfce7\",\n fontFamily: \"Georgia, serif\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"2px solid #4d7c0f\",\n borderRadius: \"13px 4px 17px 6px\",\n filter: \"drop-shadow(0 9px 14px rgba(5, 46, 22, 0.5))\",\n padding: \"9px 16px\",\n arrowSize: \"9px\",\n arrowWidth: \"19px\",\n animation: animations.slide,\n }),\n\n moss: createTheme({\n background:\n \"radial-gradient(circle at 20% 30%, rgba(190, 242, 100, 0.16) 0 3px, transparent 4px), radial-gradient(circle at 72% 65%, rgba(132, 204, 22, 0.14) 0 4px, transparent 5px), linear-gradient(135deg, #3f6212, #1a2e05)\",\n color: \"#ecfccb\",\n fontFamily: \"Palatino Linotype, serif\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"2px dotted #84cc16\",\n borderRadius: \"18px 7px 14px 10px\",\n filter: \"drop-shadow(0 8px 13px rgba(26, 46, 5, 0.5))\",\n padding: \"10px 16px\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.blur,\n }),\n\n desert: createTheme({\n background:\n \"radial-gradient(ellipse at 20% 120%, #f59e0b 0 35%, transparent 36%), radial-gradient(ellipse at 85% 110%, #d97706 0 40%, transparent 41%), linear-gradient(180deg, #fde68a, #fbbf24)\",\n color: \"#78350f\",\n fontFamily: \"Georgia, serif\",\n fontSize: \"13px\",\n fontWeight: 700,\n border: \"2px solid #b45309\",\n borderRadius: \"22px 22px 7px 7px\",\n filter: \"drop-shadow(0 9px 13px rgba(180, 83, 9, 0.32))\",\n padding: \"10px 16px\",\n arrowSize: \"9px\",\n arrowWidth: \"21px\",\n animation: animations.soft,\n }),\n\n snow: createTheme({\n background:\n \"radial-gradient(circle at 15% 25%, #ffffff 0 2px, transparent 2.5px), radial-gradient(circle at 75% 65%, #ffffff 0 1.5px, transparent 2px), linear-gradient(135deg, #e0f2fe, #bae6fd)\",\n color: \"#0c4a6e\",\n fontFamily: \"Helvetica Neue, Arial, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 600,\n border: \"2px solid #ffffff\",\n borderRadius: \"20px\",\n filter: \"drop-shadow(0 8px 13px rgba(14, 116, 144, 0.22))\",\n padding: \"10px 16px\",\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.9)\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.blur,\n }),\n\n chrome: createTheme({\n background:\n \"linear-gradient(180deg, #ffffff 0%, #a1a1aa 18%, #f4f4f5 38%, #52525b 52%, #d4d4d8 72%, #71717a 100%)\",\n color: \"#18181b\",\n fontFamily: \"Arial Black, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"2px solid #27272a\",\n borderRadius: \"10px\",\n filter: \"drop-shadow(0 8px 12px rgba(24, 24, 27, 0.45))\",\n padding: \"9px 16px\",\n letterSpacing: \"0.04em\",\n textShadow: \"0 1px 0 #ffffff\",\n textTransform: \"uppercase\",\n arrowSize: \"9px\",\n arrowWidth: \"20px\",\n animation: animations.flip,\n }),\n\n goldFoil: createTheme({\n background:\n \"linear-gradient(115deg, #713f12 0%, #facc15 18%, #fef08a 32%, #ca8a04 52%, #fef9c3 70%, #a16207 100%)\",\n color: \"#422006\",\n fontFamily: \"Palatino Linotype, serif\",\n fontSize: \"13px\",\n fontWeight: 800,\n border: \"2px solid #713f12\",\n borderRadius: \"5px 16px 5px 16px\",\n filter: \"drop-shadow(0 9px 14px rgba(113, 63, 18, 0.45))\",\n padding: \"10px 17px\",\n letterSpacing: \"0.04em\",\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.55)\",\n arrowSize: \"10px\",\n arrowWidth: \"21px\",\n animation: animations.flip,\n style: {\n fontVariantCaps: \"small-caps\",\n },\n }),\n\n bronze: createTheme({\n background:\n \"repeating-linear-gradient(115deg, rgba(255, 255, 255, 0.08) 0 1px, transparent 1px 5px), linear-gradient(135deg, #d97706, #78350f)\",\n color: \"#ffedd5\",\n fontFamily: \"Georgia, serif\",\n fontSize: \"13px\",\n fontWeight: 700,\n border: \"2px solid #fdba74\",\n borderRadius: \"8px\",\n filter: \"drop-shadow(0 9px 14px rgba(120, 53, 15, 0.5))\",\n padding: \"9px 16px\",\n textShadow: \"0 1px 2px rgba(66, 32, 6, 0.8)\",\n arrowSize: \"9px\",\n arrowWidth: \"19px\",\n animation: animations.pop,\n }),\n\n brutalist: createTheme({\n background: \"#ffffff\",\n color: \"#000000\",\n fontFamily: \"Arial Black, Helvetica, sans-serif\",\n fontSize: \"12px\",\n fontWeight: 900,\n border: \"4px solid #000000\",\n borderRadius: \"0px\",\n padding: \"10px 16px\",\n letterSpacing: \"-0.03em\",\n textTransform: \"uppercase\",\n textAlign: \"left\",\n arrowSize: \"11px\",\n arrowWidth: \"19px\",\n animation: animations.pop,\n }),\n\n chalkboard: createTheme({\n background: \"linear-gradient(145deg, #183f30, #102a21)\",\n color: \"#f5f5dc\",\n fontFamily: \"Comic Sans MS, Chalkboard, cursive\",\n fontSize: \"13px\",\n fontWeight: 600,\n border: \"3px solid #8b5e3c\",\n borderRadius: \"2px\",\n padding: \"10px 16px\",\n letterSpacing: \"0.025em\",\n textAlign: \"left\",\n arrowSize: \"9px\",\n arrowWidth: \"18px\",\n animation: animations.soft,\n }),\n} satisfies Record<string, ThemeType>;\n\nexport type PresetsThemeType = keyof typeof presets;\n\nexport const presetThemeNames = Object.keys(presets) as PresetsThemeType[];\n\nexport const isPresetTheme = (\n value: string | undefined,\n): value is PresetsThemeType => {\n return Boolean(\n value && Object.prototype.hasOwnProperty.call(presets, value),\n );\n};\n","import {\n CSSProperties,\n useCallback,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { TooltipPlacement } from \"src/types/Tooltip.interface\";\n\nconst DEFAULT_HIDE_DELAY = 120;\nconst DEFAULT_INTERACTIVE_HIDE_DELAY = 240;\nconst VIEWPORT_PADDING = 8;\nconst DEFAULT_ARROW_SIZE = 6;\nconst DEFAULT_TOOLTIP_GAP = 10;\nconst ARROW_EDGE_OFFSET = 10;\nconst INTERACTIVE_DIRECT_PADDING = 4;\nconst INTERACTIVE_BRIDGE_PADDING = 8;\nconst INTERACTIVE_BRIDGE_TIMEOUT = 700;\nconst INTERACTIVE_RECHECK_INTERVAL = 50;\nconst TOUCH_MOVE_THRESHOLD = 10;\nconst TOUCH_MAX_TAP_DURATION = 600;\nconst TOUCH_FOCUS_SUPPRESSION = 700;\n\nexport type TooltipPhase =\n | \"hidden\"\n | \"preparing\"\n | \"entering\"\n | \"visible\"\n | \"leaving\";\n\ntype TooltipPositionStyle = CSSProperties & {\n \"--tooltip-arrow-offset\": string;\n};\n\ntype UseTooltipOptions = {\n anchor: HTMLElement | null;\n preferredPlacement: TooltipPlacement;\n disabled?: boolean;\n interactive?: boolean;\n hideDelay?: number;\n};\n\ntype Point = {\n x: number;\n y: number;\n};\n\ntype PointerSnapshot = Point & {\n pointerType: string;\n};\n\ntype TouchGesture = {\n pointerId: number;\n startX: number;\n startY: number;\n startedAt: number;\n moved: boolean;\n cancelled: boolean;\n};\n\ntype InteractivePointerArea = \"direct\" | \"bridge\" | \"outside\";\n\ntype TooltipOwner = symbol;\n\ntype InputModality = \"keyboard\" | \"pointer\";\n\ntype ActiveTooltipSession = {\n owner: TooltipOwner;\n interactive: boolean;\n protectsPoint: (point: Point) => boolean;\n close: () => void;\n};\n\nlet activeTooltipSession: ActiveTooltipSession | null = null;\nlet inputModality: InputModality = \"pointer\";\nlet inputModalitySubscribers = 0;\n\nconst handleGlobalPointerDown = () => {\n inputModality = \"pointer\";\n};\n\nconst keyboardFocusKeys = new Set([\n \"Tab\",\n \"Enter\",\n \" \",\n \"ArrowUp\",\n \"ArrowDown\",\n \"ArrowLeft\",\n \"ArrowRight\",\n \"Home\",\n \"End\",\n \"PageUp\",\n \"PageDown\",\n]);\n\nconst handleGlobalKeyDown = (event: KeyboardEvent) => {\n if (\n event.metaKey ||\n event.ctrlKey ||\n event.altKey ||\n !keyboardFocusKeys.has(event.key)\n ) {\n return;\n }\n\n inputModality = \"keyboard\";\n};\n\nconst subscribeInputModality = () => {\n inputModalitySubscribers += 1;\n\n if (inputModalitySubscribers !== 1) {\n return;\n }\n\n document.addEventListener(\"pointerdown\", handleGlobalPointerDown, true);\n document.addEventListener(\"keydown\", handleGlobalKeyDown, true);\n};\n\nconst unsubscribeInputModality = () => {\n inputModalitySubscribers = Math.max(0, inputModalitySubscribers - 1);\n\n if (inputModalitySubscribers !== 0) {\n return;\n }\n\n document.removeEventListener(\"pointerdown\", handleGlobalPointerDown, true);\n document.removeEventListener(\"keydown\", handleGlobalKeyDown, true);\n};\n\nconst requestTooltipActivation = (\n session: ActiveTooltipSession,\n point?: Point,\n) => {\n const currentSession = activeTooltipSession;\n\n if (currentSession && currentSession.owner !== session.owner) {\n if (\n point &&\n currentSession.interactive &&\n currentSession.protectsPoint(point)\n ) {\n return false;\n }\n\n currentSession.close();\n }\n\n activeTooltipSession = session;\n\n return true;\n};\n\nconst clearTooltipActivation = (owner: TooltipOwner) => {\n if (activeTooltipSession?.owner === owner) {\n activeTooltipSession = null;\n }\n};\n\nconst oppositePlacement: Record<TooltipPlacement, TooltipPlacement> = {\n top: \"bottom\",\n bottom: \"top\",\n left: \"right\",\n right: \"left\",\n};\n\nconst clamp = (value: number, min: number, max: number) => {\n const resolvedMax = Math.max(min, max);\n\n return Math.min(Math.max(value, min), resolvedMax);\n};\n\nconst isPointInsideRect = (point: Point, rect: DOMRect, padding = 0) => {\n return (\n point.x >= rect.left - padding &&\n point.x <= rect.right + padding &&\n point.y >= rect.top - padding &&\n point.y <= rect.bottom + padding\n );\n};\n\nconst isPointOnSegment = (point: Point, start: Point, end: Point) => {\n const cross =\n (point.y - start.y) * (end.x - start.x) -\n (point.x - start.x) * (end.y - start.y);\n\n if (Math.abs(cross) > 0.001) {\n return false;\n }\n\n return (\n point.x >= Math.min(start.x, end.x) &&\n point.x <= Math.max(start.x, end.x) &&\n point.y >= Math.min(start.y, end.y) &&\n point.y <= Math.max(start.y, end.y)\n );\n};\n\nconst isPointInsidePolygon = (point: Point, polygon: Point[]) => {\n let inside = false;\n\n for (\n let currentIndex = 0, previousIndex = polygon.length - 1;\n currentIndex < polygon.length;\n previousIndex = currentIndex, currentIndex += 1\n ) {\n const current = polygon[currentIndex];\n const previous = polygon[previousIndex];\n\n if (isPointOnSegment(point, previous, current)) {\n return true;\n }\n\n const crosses =\n current.y > point.y !== previous.y > point.y &&\n point.x <\n ((previous.x - current.x) * (point.y - current.y)) /\n (previous.y - current.y) +\n current.x;\n\n if (crosses) {\n inside = !inside;\n }\n }\n\n return inside;\n};\n\nconst createInteractiveBridge = (\n anchorRect: DOMRect,\n tooltipRect: DOMRect,\n placement: TooltipPlacement,\n) => {\n const padding = INTERACTIVE_BRIDGE_PADDING;\n\n if (placement === \"top\") {\n return [\n {\n x: tooltipRect.left - padding,\n y: tooltipRect.bottom - padding,\n },\n {\n x: tooltipRect.right + padding,\n y: tooltipRect.bottom - padding,\n },\n {\n x: anchorRect.right + padding,\n y: anchorRect.top + padding,\n },\n {\n x: anchorRect.left - padding,\n y: anchorRect.top + padding,\n },\n ];\n }\n\n if (placement === \"bottom\") {\n return [\n {\n x: anchorRect.left - padding,\n y: anchorRect.bottom - padding,\n },\n {\n x: anchorRect.right + padding,\n y: anchorRect.bottom - padding,\n },\n {\n x: tooltipRect.right + padding,\n y: tooltipRect.top + padding,\n },\n {\n x: tooltipRect.left - padding,\n y: tooltipRect.top + padding,\n },\n ];\n }\n\n if (placement === \"left\") {\n return [\n {\n x: tooltipRect.right - padding,\n y: tooltipRect.top - padding,\n },\n {\n x: anchorRect.left + padding,\n y: anchorRect.top - padding,\n },\n {\n x: anchorRect.left + padding,\n y: anchorRect.bottom + padding,\n },\n {\n x: tooltipRect.right - padding,\n y: tooltipRect.bottom + padding,\n },\n ];\n }\n\n return [\n {\n x: anchorRect.right - padding,\n y: anchorRect.top - padding,\n },\n {\n x: tooltipRect.left + padding,\n y: tooltipRect.top - padding,\n },\n {\n x: tooltipRect.left + padding,\n y: tooltipRect.bottom + padding,\n },\n {\n x: anchorRect.right - padding,\n y: anchorRect.bottom + padding,\n },\n ];\n};\n\nexport const useTooltip = ({\n anchor,\n preferredPlacement,\n disabled = false,\n interactive = false,\n hideDelay,\n}: UseTooltipOptions) => {\n const tooltipRef = useRef<HTMLDivElement>(null);\n const bodyRef = useRef<HTMLDivElement>(null);\n const ownerRef = useRef<TooltipOwner>(Symbol(\"tooltip\"));\n\n const hideTimerRef = useRef<number | null>(null);\n const firstFrameRef = useRef<number | null>(null);\n const secondFrameRef = useRef<number | null>(null);\n const interactiveFrameRef = useRef<number | null>(null);\n const phaseRef = useRef<TooltipPhase>(\"hidden\");\n const pendingHideRef = useRef(false);\n const interactiveBridgeDeadlineRef = useRef(0);\n const pointerRef = useRef<PointerSnapshot>({\n x: Number.NaN,\n y: Number.NaN,\n pointerType: \"\",\n });\n const interactiveAreaAtPointRef = useRef<\n (point: Point) => InteractivePointerArea\n >(() => \"outside\");\n const touchGestureRef = useRef<TouchGesture | null>(null);\n const suppressFocusUntilRef = useRef(0);\n\n const [mounted, setMounted] = useState(false);\n const [phase, setPhase] = useState<TooltipPhase>(\"hidden\");\n const [placement, setPlacement] =\n useState<TooltipPlacement>(preferredPlacement);\n const [showVersion, setShowVersion] = useState(0);\n const [position, setPosition] = useState<TooltipPositionStyle>({\n top: \"0px\",\n left: \"0px\",\n \"--tooltip-arrow-offset\": \"50%\",\n });\n\n const resolvedHideDelay =\n hideDelay ??\n (interactive ? DEFAULT_INTERACTIVE_HIDE_DELAY : DEFAULT_HIDE_DELAY);\n\n const updatePhase = useCallback((nextPhase: TooltipPhase) => {\n phaseRef.current = nextPhase;\n setPhase(nextPhase);\n }, []);\n\n const clearHideTimer = useCallback(() => {\n if (hideTimerRef.current === null) {\n return;\n }\n\n window.clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }, []);\n\n const clearEnterFrames = useCallback(() => {\n if (firstFrameRef.current !== null) {\n window.cancelAnimationFrame(firstFrameRef.current);\n firstFrameRef.current = null;\n }\n\n if (secondFrameRef.current !== null) {\n window.cancelAnimationFrame(secondFrameRef.current);\n secondFrameRef.current = null;\n }\n }, []);\n\n const clearInteractiveFrame = useCallback(() => {\n if (interactiveFrameRef.current === null) {\n return;\n }\n\n window.cancelAnimationFrame(interactiveFrameRef.current);\n interactiveFrameRef.current = null;\n }, []);\n\n const getAvailableSpace = useCallback(\n (currentPlacement: TooltipPlacement, rect: DOMRect) => {\n switch (currentPlacement) {\n case \"top\":\n return rect.top - VIEWPORT_PADDING;\n\n case \"bottom\":\n return window.innerHeight - rect.bottom - VIEWPORT_PADDING;\n\n case \"left\":\n return rect.left - VIEWPORT_PADDING;\n\n case \"right\":\n return window.innerWidth - rect.right - VIEWPORT_PADDING;\n }\n },\n [],\n );\n\n const calculatePosition = useCallback(() => {\n const tooltip = tooltipRef.current;\n const body = bodyRef.current;\n\n if (!anchor || !tooltip || !body) {\n return;\n }\n\n const rect = anchor.getBoundingClientRect();\n const computedStyle = window.getComputedStyle(tooltip);\n\n const arrowSize =\n Number.parseFloat(\n computedStyle.getPropertyValue(\"--tooltip-arrow-size\"),\n ) || DEFAULT_ARROW_SIZE;\n\n const tooltipGap =\n Number.parseFloat(\n computedStyle.getPropertyValue(\"--tooltip-gap\"),\n ) || DEFAULT_TOOLTIP_GAP;\n\n const bodyWidth = body.offsetWidth;\n const bodyHeight = body.offsetHeight;\n const distance = arrowSize + tooltipGap;\n const opposite = oppositePlacement[preferredPlacement];\n\n const getRequiredSpace = (currentPlacement: TooltipPlacement) => {\n if (currentPlacement === \"top\" || currentPlacement === \"bottom\") {\n return bodyHeight + distance;\n }\n\n return bodyWidth + distance;\n };\n\n const preferredAvailable = getAvailableSpace(preferredPlacement, rect);\n const preferredRequired = getRequiredSpace(preferredPlacement);\n\n let nextPlacement = preferredPlacement;\n\n if (preferredAvailable < preferredRequired) {\n const oppositeAvailable = getAvailableSpace(opposite, rect);\n const oppositeRequired = getRequiredSpace(opposite);\n\n if (\n oppositeAvailable >= oppositeRequired ||\n oppositeAvailable > preferredAvailable\n ) {\n nextPlacement = opposite;\n }\n }\n\n const anchorCenterX = rect.left + rect.width / 2;\n const anchorCenterY = rect.top + rect.height / 2;\n\n let top = 0;\n let left = 0;\n let arrowOffset = \"50%\";\n\n if (nextPlacement === \"top\") {\n top = rect.top - bodyHeight - distance;\n left = anchorCenterX - bodyWidth / 2;\n }\n\n if (nextPlacement === \"bottom\") {\n top = rect.bottom + distance;\n left = anchorCenterX - bodyWidth / 2;\n }\n\n if (nextPlacement === \"left\") {\n top = anchorCenterY - bodyHeight / 2;\n left = rect.left - bodyWidth - distance;\n }\n\n if (nextPlacement === \"right\") {\n top = anchorCenterY - bodyHeight / 2;\n left = rect.right + distance;\n }\n\n const maxLeft = window.innerWidth - bodyWidth - VIEWPORT_PADDING;\n const maxTop = window.innerHeight - bodyHeight - VIEWPORT_PADDING;\n\n left = clamp(left, VIEWPORT_PADDING, maxLeft);\n top = clamp(top, VIEWPORT_PADDING, maxTop);\n\n if (nextPlacement === \"top\" || nextPlacement === \"bottom\") {\n const offset = clamp(\n anchorCenterX - left,\n ARROW_EDGE_OFFSET,\n bodyWidth - ARROW_EDGE_OFFSET,\n );\n\n arrowOffset = `${offset}px`;\n }\n\n if (nextPlacement === \"left\" || nextPlacement === \"right\") {\n const offset = clamp(\n anchorCenterY - top,\n ARROW_EDGE_OFFSET,\n bodyHeight - ARROW_EDGE_OFFSET,\n );\n\n arrowOffset = `${offset}px`;\n }\n\n setPlacement(nextPlacement);\n setPosition({\n top: `${top}px`,\n left: `${left}px`,\n \"--tooltip-arrow-offset\": arrowOffset,\n });\n }, [anchor, getAvailableSpace, preferredPlacement]);\n\n const isFocusInsideTooltipRegion = useCallback(() => {\n if (\n !anchor ||\n typeof document === \"undefined\" ||\n inputModality !== \"keyboard\"\n ) {\n return false;\n }\n\n const activeElement = document.activeElement;\n const tooltip = tooltipRef.current;\n\n if (!(activeElement instanceof Node)) {\n return false;\n }\n\n return (\n anchor.contains(activeElement) ||\n Boolean(interactive && tooltip?.contains(activeElement))\n );\n }, [anchor, interactive]);\n\n const getInteractivePointerAreaAtPoint = useCallback(\n (point: Point): InteractivePointerArea => {\n if (!interactive || !anchor) {\n return \"outside\";\n }\n\n const tooltip = tooltipRef.current;\n\n if (\n !tooltip ||\n !Number.isFinite(point.x) ||\n !Number.isFinite(point.y)\n ) {\n return \"outside\";\n }\n\n const anchorRect = anchor.getBoundingClientRect();\n const tooltipRect = tooltip.getBoundingClientRect();\n\n if (\n isPointInsideRect(\n point,\n anchorRect,\n INTERACTIVE_DIRECT_PADDING,\n ) ||\n isPointInsideRect(\n point,\n tooltipRect,\n INTERACTIVE_DIRECT_PADDING,\n )\n ) {\n return \"direct\";\n }\n\n const bridge = createInteractiveBridge(\n anchorRect,\n tooltipRect,\n placement,\n );\n\n return isPointInsidePolygon(point, bridge) ? \"bridge\" : \"outside\";\n },\n [anchor, interactive, placement],\n );\n\n useLayoutEffect(() => {\n interactiveAreaAtPointRef.current = getInteractivePointerAreaAtPoint;\n }, [getInteractivePointerAreaAtPoint]);\n\n const getInteractivePointerArea =\n useCallback((): InteractivePointerArea => {\n const pointer = pointerRef.current;\n\n if (\n (pointer.pointerType !== \"mouse\" &&\n pointer.pointerType !== \"pen\") ||\n !Number.isFinite(pointer.x) ||\n !Number.isFinite(pointer.y)\n ) {\n return \"outside\";\n }\n\n return getInteractivePointerAreaAtPoint({\n x: pointer.x,\n y: pointer.y,\n });\n }, [getInteractivePointerAreaAtPoint]);\n\n const removeTooltip = useCallback(() => {\n clearHideTimer();\n clearEnterFrames();\n clearInteractiveFrame();\n pendingHideRef.current = false;\n interactiveBridgeDeadlineRef.current = 0;\n clearTooltipActivation(ownerRef.current);\n updatePhase(\"hidden\");\n }, [clearEnterFrames, clearHideTimer, clearInteractiveFrame, updatePhase]);\n\n const runHide = useCallback(() => {\n const currentPhase = phaseRef.current;\n\n if (currentPhase === \"hidden\" || currentPhase === \"leaving\") {\n return;\n }\n\n if (currentPhase === \"preparing\") {\n removeTooltip();\n return;\n }\n\n if (currentPhase === \"entering\") {\n pendingHideRef.current = true;\n return;\n }\n\n updatePhase(\"leaving\");\n }, [removeTooltip, updatePhase]);\n\n const hideTooltip = useCallback(\n (immediate = false) => {\n if (immediate) {\n clearHideTimer();\n interactiveBridgeDeadlineRef.current = 0;\n runHide();\n return;\n }\n\n if (hideTimerRef.current !== null) {\n return;\n }\n\n const attemptHide = () => {\n hideTimerRef.current = null;\n\n if (isFocusInsideTooltipRegion()) {\n interactiveBridgeDeadlineRef.current = 0;\n return;\n }\n\n if (interactive) {\n const pointerArea = getInteractivePointerArea();\n\n if (pointerArea === \"direct\") {\n interactiveBridgeDeadlineRef.current = 0;\n return;\n }\n\n if (pointerArea === \"bridge\") {\n const now = window.performance.now();\n\n if (interactiveBridgeDeadlineRef.current === 0) {\n interactiveBridgeDeadlineRef.current =\n now + INTERACTIVE_BRIDGE_TIMEOUT;\n }\n\n const remaining =\n interactiveBridgeDeadlineRef.current - now;\n\n if (remaining > 0) {\n hideTimerRef.current = window.setTimeout(\n attemptHide,\n Math.min(\n INTERACTIVE_RECHECK_INTERVAL,\n remaining,\n ),\n );\n return;\n }\n }\n }\n\n interactiveBridgeDeadlineRef.current = 0;\n runHide();\n };\n\n hideTimerRef.current = window.setTimeout(\n attemptHide,\n resolvedHideDelay,\n );\n },\n [\n clearHideTimer,\n getInteractivePointerArea,\n interactive,\n isFocusInsideTooltipRegion,\n resolvedHideDelay,\n runHide,\n ],\n );\n\n const showTooltip = useCallback(\n (activationPoint?: Point) => {\n if (!anchor || disabled) {\n return;\n }\n\n const activated = requestTooltipActivation(\n {\n owner: ownerRef.current,\n interactive,\n protectsPoint: (point) => {\n if (phaseRef.current === \"hidden\") {\n return false;\n }\n\n return (\n interactiveAreaAtPointRef.current(point) !==\n \"outside\"\n );\n },\n close: () => {\n hideTooltip(true);\n },\n },\n activationPoint,\n );\n\n if (!activated) {\n return;\n }\n\n clearHideTimer();\n clearEnterFrames();\n interactiveBridgeDeadlineRef.current = 0;\n pendingHideRef.current = false;\n setMounted(true);\n\n if (\n phaseRef.current === \"entering\" ||\n phaseRef.current === \"visible\"\n ) {\n return;\n }\n\n updatePhase(\"preparing\");\n setShowVersion((value) => value + 1);\n },\n [\n anchor,\n clearEnterFrames,\n clearHideTimer,\n disabled,\n hideTooltip,\n interactive,\n updatePhase,\n ],\n );\n\n const keepTooltipOpen = useCallback(() => {\n if (!interactive || disabled) {\n return;\n }\n\n clearHideTimer();\n interactiveBridgeDeadlineRef.current = 0;\n pendingHideRef.current = false;\n\n if (phaseRef.current === \"leaving\") {\n updatePhase(\"visible\");\n }\n }, [clearHideTimer, disabled, interactive, updatePhase]);\n\n const processInteractivePointer = useCallback(() => {\n if (!interactive || disabled || phaseRef.current === \"hidden\") {\n return;\n }\n\n if (isFocusInsideTooltipRegion()) {\n keepTooltipOpen();\n return;\n }\n\n const pointerArea = getInteractivePointerArea();\n\n if (pointerArea === \"direct\") {\n keepTooltipOpen();\n return;\n }\n\n if (pointerArea === \"bridge\") {\n if (interactiveBridgeDeadlineRef.current === 0) {\n interactiveBridgeDeadlineRef.current =\n window.performance.now() + INTERACTIVE_BRIDGE_TIMEOUT;\n }\n\n hideTooltip(false);\n return;\n }\n\n interactiveBridgeDeadlineRef.current = 0;\n hideTooltip(false);\n }, [\n disabled,\n getInteractivePointerArea,\n hideTooltip,\n interactive,\n isFocusInsideTooltipRegion,\n keepTooltipOpen,\n ]);\n\n const scheduleInteractivePointerProcessing = useCallback(() => {\n if (interactiveFrameRef.current !== null) {\n return;\n }\n\n interactiveFrameRef.current = window.requestAnimationFrame(() => {\n interactiveFrameRef.current = null;\n processInteractivePointer();\n });\n }, [processInteractivePointer]);\n\n const onAnimationEnd = useCallback(() => {\n const currentPhase = phaseRef.current;\n\n if (currentPhase === \"entering\") {\n if (pendingHideRef.current) {\n pendingHideRef.current = false;\n updatePhase(\"leaving\");\n return;\n }\n\n updatePhase(\"visible\");\n return;\n }\n\n if (currentPhase === \"leaving\") {\n removeTooltip();\n }\n }, [removeTooltip, updatePhase]);\n\n useLayoutEffect(() => {\n if (phase !== \"preparing\" || !anchor) {\n return;\n }\n\n calculatePosition();\n\n firstFrameRef.current = window.requestAnimationFrame(() => {\n firstFrameRef.current = null;\n\n secondFrameRef.current = window.requestAnimationFrame(() => {\n secondFrameRef.current = null;\n\n if (!anchor || phaseRef.current !== \"preparing\") {\n return;\n }\n\n updatePhase(\"entering\");\n });\n });\n\n return clearEnterFrames;\n }, [\n anchor,\n calculatePosition,\n clearEnterFrames,\n phase,\n showVersion,\n updatePhase,\n ]);\n\n useEffect(() => {\n subscribeInputModality();\n\n return () => {\n unsubscribeInputModality();\n clearTooltipActivation(ownerRef.current);\n };\n }, []);\n\n useEffect(() => {\n if (!anchor) {\n removeTooltip();\n return;\n }\n\n const updatePointer = (event: PointerEvent) => {\n pointerRef.current = {\n x: event.clientX,\n y: event.clientY,\n pointerType: event.pointerType,\n };\n };\n\n const onPointerEnter = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType === \"touch\") {\n return;\n }\n\n showTooltip({\n x: event.clientX,\n y: event.clientY,\n });\n };\n\n const onPointerLeave = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType === \"touch\") {\n return;\n }\n\n if (interactive) {\n interactiveBridgeDeadlineRef.current =\n window.performance.now() + INTERACTIVE_BRIDGE_TIMEOUT;\n hideTooltip(false);\n scheduleInteractivePointerProcessing();\n return;\n }\n\n hideTooltip(false);\n };\n\n const onPointerDown = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType !== \"touch\") {\n return;\n }\n\n const now = window.performance.now();\n\n touchGestureRef.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n startedAt: now,\n moved: false,\n cancelled: false,\n };\n suppressFocusUntilRef.current = now + TOUCH_FOCUS_SUPPRESSION;\n };\n\n const onPointerMove = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType !== \"touch\") {\n return;\n }\n\n const gesture = touchGestureRef.current;\n\n if (!gesture || gesture.pointerId !== event.pointerId) {\n return;\n }\n\n const distance = Math.hypot(\n event.clientX - gesture.startX,\n event.clientY - gesture.startY,\n );\n\n if (distance <= TOUCH_MOVE_THRESHOLD) {\n return;\n }\n\n gesture.moved = true;\n suppressFocusUntilRef.current =\n window.performance.now() + TOUCH_FOCUS_SUPPRESSION;\n hideTooltip(true);\n };\n\n const onPointerUp = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType !== \"touch\") {\n return;\n }\n\n const gesture = touchGestureRef.current;\n touchGestureRef.current = null;\n\n if (!gesture || gesture.pointerId !== event.pointerId) {\n return;\n }\n\n const now = window.performance.now();\n const distance = Math.hypot(\n event.clientX - gesture.startX,\n event.clientY - gesture.startY,\n );\n const duration = now - gesture.startedAt;\n\n suppressFocusUntilRef.current = now + TOUCH_FOCUS_SUPPRESSION;\n\n if (\n gesture.cancelled ||\n gesture.moved ||\n distance > TOUCH_MOVE_THRESHOLD ||\n duration > TOUCH_MAX_TAP_DURATION\n ) {\n return;\n }\n\n if (\n phaseRef.current === \"hidden\" ||\n phaseRef.current === \"leaving\"\n ) {\n showTooltip({\n x: event.clientX,\n y: event.clientY,\n });\n } else {\n hideTooltip(true);\n }\n };\n\n const onPointerCancel = (event: PointerEvent) => {\n if (event.pointerType !== \"touch\") {\n return;\n }\n\n const gesture = touchGestureRef.current;\n\n if (!gesture || gesture.pointerId !== event.pointerId) {\n return;\n }\n\n gesture.cancelled = true;\n touchGestureRef.current = null;\n suppressFocusUntilRef.current =\n window.performance.now() + TOUCH_FOCUS_SUPPRESSION;\n hideTooltip(true);\n };\n\n const onFocusIn = () => {\n if (window.performance.now() < suppressFocusUntilRef.current) {\n return;\n }\n\n showTooltip();\n };\n\n const onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget;\n const tooltip = tooltipRef.current;\n\n if (\n relatedTarget instanceof Node &&\n (anchor.contains(relatedTarget) ||\n (interactive && tooltip?.contains(relatedTarget)))\n ) {\n return;\n }\n\n hideTooltip(false);\n };\n\n anchor.addEventListener(\"pointerenter\", onPointerEnter);\n anchor.addEventListener(\"pointerleave\", onPointerLeave);\n anchor.addEventListener(\"pointerdown\", onPointerDown);\n anchor.addEventListener(\"pointermove\", onPointerMove);\n anchor.addEventListener(\"pointerup\", onPointerUp);\n anchor.addEventListener(\"pointercancel\", onPointerCancel);\n anchor.addEventListener(\"focusin\", onFocusIn);\n anchor.addEventListener(\"focusout\", onFocusOut);\n\n return () => {\n anchor.removeEventListener(\"pointerenter\", onPointerEnter);\n anchor.removeEventListener(\"pointerleave\", onPointerLeave);\n anchor.removeEventListener(\"pointerdown\", onPointerDown);\n anchor.removeEventListener(\"pointermove\", onPointerMove);\n anchor.removeEventListener(\"pointerup\", onPointerUp);\n anchor.removeEventListener(\"pointercancel\", onPointerCancel);\n anchor.removeEventListener(\"focusin\", onFocusIn);\n anchor.removeEventListener(\"focusout\", onFocusOut);\n\n touchGestureRef.current = null;\n clearHideTimer();\n clearEnterFrames();\n clearInteractiveFrame();\n };\n }, [\n anchor,\n clearEnterFrames,\n clearHideTimer,\n clearInteractiveFrame,\n hideTooltip,\n interactive,\n removeTooltip,\n scheduleInteractivePointerProcessing,\n showTooltip,\n ]);\n\n useEffect(() => {\n if (!interactive || phase === \"hidden\") {\n return;\n }\n\n const tooltip = tooltipRef.current;\n\n if (!tooltip) {\n return;\n }\n\n const updatePointer = (event: PointerEvent) => {\n pointerRef.current = {\n x: event.clientX,\n y: event.clientY,\n pointerType: event.pointerType,\n };\n };\n\n const onPointerEnter = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType === \"touch\") {\n return;\n }\n\n keepTooltipOpen();\n };\n\n const onPointerLeave = (event: PointerEvent) => {\n updatePointer(event);\n\n if (event.pointerType === \"touch\") {\n return;\n }\n\n interactiveBridgeDeadlineRef.current =\n window.performance.now() + INTERACTIVE_BRIDGE_TIMEOUT;\n hideTooltip(false);\n scheduleInteractivePointerProcessing();\n };\n\n const onFocusIn = () => {\n if (inputModality === \"keyboard\") {\n keepTooltipOpen();\n }\n };\n\n const onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget;\n\n if (\n relatedTarget instanceof Node &&\n (tooltip.contains(relatedTarget) ||\n anchor?.contains(relatedTarget))\n ) {\n return;\n }\n\n hideTooltip(false);\n };\n\n tooltip.addEventListener(\"pointerenter\", onPointerEnter);\n tooltip.addEventListener(\"pointerleave\", onPointerLeave);\n tooltip.addEventListener(\"focusin\", onFocusIn);\n tooltip.addEventListener(\"focusout\", onFocusOut);\n\n return () => {\n tooltip.removeEventListener(\"pointerenter\", onPointerEnter);\n tooltip.removeEventListener(\"pointerleave\", onPointerLeave);\n tooltip.removeEventListener(\"focusin\", onFocusIn);\n tooltip.removeEventListener(\"focusout\", onFocusOut);\n };\n }, [\n anchor,\n hideTooltip,\n interactive,\n keepTooltipOpen,\n phase,\n scheduleInteractivePointerProcessing,\n ]);\n\n useEffect(() => {\n if (!interactive || phase === \"hidden\") {\n return;\n }\n\n const onDocumentPointerMove = (event: PointerEvent) => {\n if (event.pointerType === \"touch\") {\n return;\n }\n\n pointerRef.current = {\n x: event.clientX,\n y: event.clientY,\n pointerType: event.pointerType,\n };\n\n scheduleInteractivePointerProcessing();\n };\n\n document.addEventListener(\"pointermove\", onDocumentPointerMove, {\n passive: true,\n });\n\n return () => {\n document.removeEventListener(\"pointermove\", onDocumentPointerMove);\n clearInteractiveFrame();\n };\n }, [\n clearInteractiveFrame,\n interactive,\n phase,\n scheduleInteractivePointerProcessing,\n ]);\n\n useEffect(() => {\n if (!anchor || phase === \"hidden\") {\n return;\n }\n\n const onDocumentPointerDown = (event: PointerEvent) => {\n const target = event.target;\n const tooltip = tooltipRef.current;\n\n if (\n target instanceof Node &&\n (anchor.contains(target) ||\n (interactive && tooltip?.contains(target)))\n ) {\n return;\n }\n\n touchGestureRef.current = null;\n hideTooltip(true);\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n hideTooltip(true);\n }\n };\n\n document.addEventListener(\"pointerdown\", onDocumentPointerDown, true);\n document.addEventListener(\"keydown\", onKeyDown);\n\n window.addEventListener(\"resize\", calculatePosition);\n window.addEventListener(\"scroll\", calculatePosition, true);\n\n return () => {\n document.removeEventListener(\n \"pointerdown\",\n onDocumentPointerDown,\n true,\n );\n document.removeEventListener(\"keydown\", onKeyDown);\n\n window.removeEventListener(\"resize\", calculatePosition);\n window.removeEventListener(\"scroll\", calculatePosition, true);\n };\n }, [anchor, calculatePosition, hideTooltip, interactive, phase]);\n\n useLayoutEffect(() => {\n if (phase === \"hidden\") {\n return;\n }\n\n const body = bodyRef.current;\n\n if (!body) {\n return;\n }\n\n const resizeObserver = new ResizeObserver(calculatePosition);\n\n resizeObserver.observe(body);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [calculatePosition, phase]);\n\n useEffect(() => {\n if (!disabled) {\n return;\n }\n\n hideTooltip(true);\n }, [disabled, hideTooltip]);\n\n return {\n shouldRender: mounted,\n phase,\n placement,\n position,\n tooltipRef,\n bodyRef,\n calculatePosition,\n onAnimationEnd,\n };\n};\n","import { CSSProperties } from \"react\";\n\nimport { ThemeType } from \"src/types/Theme.type\";\n\ntype Defined<T> = Exclude<T, undefined>;\ntype BorderWidthValue = Defined<CSSProperties[\"borderTopWidth\"]>;\ntype BorderStyleValue = Defined<CSSProperties[\"borderTopStyle\"]>;\ntype BorderColorValue = Defined<CSSProperties[\"borderTopColor\"]>;\ntype BorderRadiusValue = Defined<CSSProperties[\"borderTopLeftRadius\"]>;\ntype Quad<T> = [T | undefined, T | undefined, T | undefined, T | undefined];\n\ntype ParsedBorder = {\n width?: BorderWidthValue;\n style?: BorderStyleValue;\n color?: BorderColorValue;\n};\n\nexport type TooltipSurfaceStyle = Pick<\n CSSProperties,\n | \"borderTopWidth\"\n | \"borderRightWidth\"\n | \"borderBottomWidth\"\n | \"borderLeftWidth\"\n | \"borderTopStyle\"\n | \"borderRightStyle\"\n | \"borderBottomStyle\"\n | \"borderLeftStyle\"\n | \"borderTopColor\"\n | \"borderRightColor\"\n | \"borderBottomColor\"\n | \"borderLeftColor\"\n | \"borderTopLeftRadius\"\n | \"borderTopRightRadius\"\n | \"borderBottomRightRadius\"\n | \"borderBottomLeftRadius\"\n>;\n\nexport type ResolvedThemeStyles = {\n background: CSSProperties[\"background\"];\n color: CSSProperties[\"color\"];\n contentStyle: CSSProperties;\n surfaceStyle: TooltipSurfaceStyle;\n fillStyle: CSSProperties;\n filter?: CSSProperties[\"filter\"];\n};\n\nconst BORDER_STYLE_VALUES = new Set<BorderStyleValue>([\n \"none\",\n \"hidden\",\n \"dotted\",\n \"dashed\",\n \"solid\",\n \"double\",\n \"groove\",\n \"ridge\",\n \"inset\",\n \"outset\",\n \"inherit\",\n \"initial\",\n \"revert\",\n \"revert-layer\",\n \"unset\",\n]);\n\nconst splitCssTokens = (value: string) => {\n const tokens: string[] = [];\n let current = \"\";\n let depth = 0;\n\n for (const character of value.trim()) {\n if (character === \"(\") {\n depth += 1;\n }\n\n if (character === \")\") {\n depth = Math.max(0, depth - 1);\n }\n\n if (/\\s/.test(character) && depth === 0) {\n if (current.trim()) {\n tokens.push(current.trim());\n }\n\n current = \"\";\n continue;\n }\n\n current += character;\n }\n\n if (current.trim()) {\n tokens.push(current.trim());\n }\n\n return tokens;\n};\n\nconst splitOutsideParentheses = (value: string, separator: string) => {\n const result: string[] = [];\n let current = \"\";\n let depth = 0;\n\n for (const character of value) {\n if (character === \"(\") {\n depth += 1;\n }\n\n if (character === \")\") {\n depth = Math.max(0, depth - 1);\n }\n\n if (character === separator && depth === 0) {\n if (current.trim()) {\n result.push(current.trim());\n }\n\n current = \"\";\n continue;\n }\n\n current += character;\n }\n\n if (current.trim()) {\n result.push(current.trim());\n }\n\n return result;\n};\n\nconst expandQuad = <T,>(values: T[]): Quad<T> => {\n if (values.length === 0) {\n return [undefined, undefined, undefined, undefined];\n }\n\n if (values.length === 1) {\n return [values[0], values[0], values[0], values[0]];\n }\n\n if (values.length === 2) {\n return [values[0], values[1], values[0], values[1]];\n }\n\n if (values.length === 3) {\n return [values[0], values[1], values[2], values[1]];\n }\n\n return [values[0], values[1], values[2], values[3]];\n};\n\nconst isBorderWidthToken = (value: string) => {\n return (\n value === \"thin\" ||\n value === \"medium\" ||\n value === \"thick\" ||\n value === \"0\" ||\n value === \"inherit\" ||\n value === \"initial\" ||\n value === \"revert\" ||\n value === \"revert-layer\" ||\n value === \"unset\" ||\n /^-?(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|vh|vw|vmin|vmax|%)?$/.test(value) ||\n value.startsWith(\"calc(\") ||\n value.startsWith(\"var(\")\n );\n};\n\nconst isBorderStyleToken = (value: string): value is BorderStyleValue => {\n return BORDER_STYLE_VALUES.has(value as BorderStyleValue);\n};\n\nconst parseBorder = (\n value:\n | CSSProperties[\"border\"]\n | CSSProperties[\"borderTop\"]\n | CSSProperties[\"borderRight\"]\n | CSSProperties[\"borderBottom\"]\n | CSSProperties[\"borderLeft\"],\n): ParsedBorder => {\n if (typeof value !== \"string\" || !value.trim()) {\n return {};\n }\n\n const tokens = splitCssTokens(value);\n const widthToken = tokens.find(isBorderWidthToken);\n const styleToken = tokens.find(isBorderStyleToken);\n const colorTokens = tokens.filter((token) => {\n return token !== widthToken && token !== styleToken;\n });\n\n return {\n width: widthToken ? (widthToken as BorderWidthValue) : undefined,\n style: styleToken,\n color: colorTokens.length\n ? (colorTokens.join(\" \") as BorderColorValue)\n : undefined,\n };\n};\n\nconst expandBorderWidths = (\n value: CSSProperties[\"borderWidth\"] | BorderWidthValue,\n): Quad<BorderWidthValue> => {\n if (value === undefined) {\n return [undefined, undefined, undefined, undefined];\n }\n\n if (typeof value === \"number\") {\n return [value, value, value, value];\n }\n\n return expandQuad(\n splitCssTokens(String(value)).map((token) => token as BorderWidthValue),\n );\n};\n\nconst expandBorderStyles = (\n value: CSSProperties[\"borderStyle\"] | BorderStyleValue,\n): Quad<BorderStyleValue> => {\n if (value === undefined) {\n return [undefined, undefined, undefined, undefined];\n }\n\n return expandQuad(splitCssTokens(String(value)).filter(isBorderStyleToken));\n};\n\nconst expandBorderColors = (\n value: CSSProperties[\"borderColor\"] | BorderColorValue,\n): Quad<BorderColorValue> => {\n if (value === undefined) {\n return [undefined, undefined, undefined, undefined];\n }\n\n return expandQuad(\n splitCssTokens(String(value)).map((token) => token as BorderColorValue),\n );\n};\n\nconst expandBorderRadii = (\n value: CSSProperties[\"borderRadius\"],\n): Quad<BorderRadiusValue> => {\n if (value === undefined) {\n return [undefined, undefined, undefined, undefined];\n }\n\n if (typeof value === \"number\") {\n return [value, value, value, value];\n }\n\n const parts = splitOutsideParentheses(String(value), \"/\");\n const horizontal = expandQuad(\n splitCssTokens(parts[0] ?? \"\").map(\n (token) => token as BorderRadiusValue,\n ),\n );\n\n if (!parts[1]) {\n return horizontal;\n }\n\n const vertical = expandQuad(\n splitCssTokens(parts[1]).map((token) => token as BorderRadiusValue),\n );\n\n return horizontal.map((horizontalRadius, index) => {\n const verticalRadius = vertical[index];\n\n if (horizontalRadius === undefined) {\n return undefined;\n }\n\n if (\n verticalRadius === undefined ||\n verticalRadius === horizontalRadius\n ) {\n return horizontalRadius;\n }\n\n return `${horizontalRadius} ${verticalRadius}` as BorderRadiusValue;\n }) as Quad<BorderRadiusValue>;\n};\n\nconst resolveSurfaceStyle = (style: CSSProperties): TooltipSurfaceStyle => {\n const border = parseBorder(style.border);\n const borderTop = parseBorder(style.borderTop);\n const borderRight = parseBorder(style.borderRight);\n const borderBottom = parseBorder(style.borderBottom);\n const borderLeft = parseBorder(style.borderLeft);\n const widths = expandBorderWidths(style.borderWidth ?? border.width);\n const styles = expandBorderStyles(style.borderStyle ?? border.style);\n const colors = expandBorderColors(style.borderColor ?? border.color);\n const radii = expandBorderRadii(style.borderRadius);\n\n return {\n borderTopWidth: style.borderTopWidth ?? borderTop.width ?? widths[0],\n borderRightWidth:\n style.borderRightWidth ?? borderRight.width ?? widths[1],\n borderBottomWidth:\n style.borderBottomWidth ?? borderBottom.width ?? widths[2],\n borderLeftWidth: style.borderLeftWidth ?? borderLeft.width ?? widths[3],\n borderTopStyle: style.borderTopStyle ?? borderTop.style ?? styles[0],\n borderRightStyle:\n style.borderRightStyle ?? borderRight.style ?? styles[1],\n borderBottomStyle:\n style.borderBottomStyle ?? borderBottom.style ?? styles[2],\n borderLeftStyle: style.borderLeftStyle ?? borderLeft.style ?? styles[3],\n borderTopColor: style.borderTopColor ?? borderTop.color ?? colors[0],\n borderRightColor:\n style.borderRightColor ?? borderRight.color ?? colors[1],\n borderBottomColor:\n style.borderBottomColor ?? borderBottom.color ?? colors[2],\n borderLeftColor: style.borderLeftColor ?? borderLeft.color ?? colors[3],\n borderTopLeftRadius: style.borderTopLeftRadius ?? radii[0],\n borderTopRightRadius: style.borderTopRightRadius ?? radii[1],\n borderBottomRightRadius: style.borderBottomRightRadius ?? radii[2],\n borderBottomLeftRadius: style.borderBottomLeftRadius ?? radii[3],\n };\n};\n\nconst splitShadowTokens = (value: string) => {\n const tokens: string[] = [];\n let current = \"\";\n let depth = 0;\n\n for (const character of value.trim()) {\n if (character === \"(\") {\n depth += 1;\n }\n\n if (character === \")\") {\n depth = Math.max(0, depth - 1);\n }\n\n if (/\\s/.test(character) && depth === 0) {\n if (current.trim()) {\n tokens.push(current.trim());\n }\n\n current = \"\";\n continue;\n }\n\n current += character;\n }\n\n if (current.trim()) {\n tokens.push(current.trim());\n }\n\n return tokens;\n};\n\nconst isShadowLengthToken = (value: string) => {\n return (\n value === \"0\" ||\n /^-?(?:\\d+|\\d*\\.\\d+)(?:px|rem|em|vh|vw|vmin|vmax|%)?$/.test(value) ||\n value.startsWith(\"calc(\") ||\n value.startsWith(\"var(\")\n );\n};\n\nconst isShadowColorToken = (value: string) => {\n return (\n value.startsWith(\"#\") ||\n value.startsWith(\"rgb(\") ||\n value.startsWith(\"rgba(\") ||\n value.startsWith(\"hsl(\") ||\n value.startsWith(\"hsla(\") ||\n value.startsWith(\"oklch(\") ||\n value.startsWith(\"oklab(\") ||\n value.startsWith(\"lab(\") ||\n value.startsWith(\"lch(\") ||\n value.startsWith(\"color(\") ||\n value.startsWith(\"color-mix(\") ||\n value.startsWith(\"var(\") ||\n /^[a-zA-Z]+$/.test(value)\n );\n};\n\nconst boxShadowToDropShadow = (\n boxShadow?: CSSProperties[\"boxShadow\"],\n): CSSProperties[\"filter\"] | undefined => {\n if (\n typeof boxShadow !== \"string\" ||\n !boxShadow.trim() ||\n boxShadow.trim() === \"none\"\n ) {\n return undefined;\n }\n\n const shadows = splitOutsideParentheses(boxShadow, \",\");\n const filters = shadows\n .map((shadow) => {\n const tokens = splitShadowTokens(shadow);\n\n if (tokens.includes(\"inset\")) {\n return null;\n }\n\n const lengths = tokens.filter(isShadowLengthToken);\n\n if (lengths.length < 2) {\n return null;\n }\n\n const color = tokens.find((token) => {\n return (\n token !== \"inset\" &&\n !isShadowLengthToken(token) &&\n isShadowColorToken(token)\n );\n });\n\n const offsetX = lengths[0];\n const offsetY = lengths[1];\n const blur = lengths[2] ?? \"0px\";\n\n return `drop-shadow(${offsetX} ${offsetY} ${blur} ${\n color ?? \"rgba(0, 0, 0, 0.25)\"\n })`;\n })\n .filter((value): value is string => {\n return value !== null;\n });\n\n return filters.length ? filters.join(\" \") : undefined;\n};\n\nexport const mergeThemes = (\n presetTheme: ThemeType,\n customTheme?: ThemeType,\n): ThemeType => {\n if (!customTheme) {\n return presetTheme;\n }\n\n return {\n ...presetTheme,\n ...customTheme,\n body: {\n ...presetTheme.body,\n ...customTheme.body,\n style: {\n ...presetTheme.body?.style,\n ...customTheme.body?.style,\n },\n background:\n customTheme.body?.background ?? presetTheme.body?.background,\n filter: customTheme.body?.filter ?? presetTheme.body?.filter,\n className:\n customTheme.body?.className ?? presetTheme.body?.className,\n },\n arrow: {\n ...presetTheme.arrow,\n ...customTheme.arrow,\n },\n animation: {\n ...presetTheme.animation,\n ...customTheme.animation,\n },\n };\n};\n\nexport const resolveThemeStyles = (\n theme: ThemeType,\n): ResolvedThemeStyles => {\n const bodyStyle = theme.body?.style ?? {};\n const surfaceStyle = resolveSurfaceStyle(bodyStyle);\n\n const {\n background,\n backgroundColor,\n backgroundImage,\n border,\n borderTop,\n borderRight,\n borderBottom,\n borderLeft,\n borderWidth,\n borderStyle,\n borderColor,\n borderTopWidth,\n borderRightWidth,\n borderBottomWidth,\n borderLeftWidth,\n borderTopStyle,\n borderRightStyle,\n borderBottomStyle,\n borderLeftStyle,\n borderTopColor,\n borderRightColor,\n borderBottomColor,\n borderLeftColor,\n borderRadius,\n borderTopLeftRadius,\n borderTopRightRadius,\n borderBottomRightRadius,\n borderBottomLeftRadius,\n boxShadow,\n filter,\n backdropFilter,\n WebkitBackdropFilter,\n color,\n ...contentStyle\n } = bodyStyle;\n\n const resolvedBackground =\n theme.body?.background ??\n background ??\n backgroundImage ??\n backgroundColor ??\n \"var(--global-color-link)\";\n\n const resolvedColor = color ?? \"var(--global-bg-color)\";\n const resolvedFilter =\n theme.body?.filter ?? filter ?? boxShadowToDropShadow(boxShadow);\n\n return {\n background: resolvedBackground,\n color: resolvedColor,\n contentStyle,\n surfaceStyle,\n fillStyle: {\n backdropFilter,\n WebkitBackdropFilter,\n },\n filter: resolvedFilter,\n };\n};\n","import { createContext, ReactNode, useContext, useMemo } from \"react\";\n\nimport { PresetsThemeType } from \"src/config/presets\";\nimport { ThemeType } from \"src/types/Theme.type\";\nimport {\n TooltipPlacement,\n TooltipProviderInterface,\n} from \"src/types/Tooltip.interface\";\nimport { TooltipAnimationOptions } from \"src/types/TooltipAnimation.type\";\n\ntype TooltipDefaults = {\n defaultRenderPosition: TooltipPlacement;\n selectTheme: PresetsThemeType;\n customTheme?: ThemeType;\n animation?: TooltipAnimationOptions;\n interactive: boolean;\n hideDelay?: number;\n};\n\ntype TooltipProviderProps = TooltipProviderInterface & {\n children: ReactNode;\n};\n\nconst DEFAULT_TOOLTIP_VALUES: TooltipDefaults = {\n defaultRenderPosition: \"top\",\n selectTheme: \"primary\",\n interactive: false,\n};\n\nconst TooltipContext = createContext<TooltipDefaults>(DEFAULT_TOOLTIP_VALUES);\n\nexport const TooltipProvider = ({\n children,\n defaultRenderPosition = DEFAULT_TOOLTIP_VALUES.defaultRenderPosition,\n selectTheme = DEFAULT_TOOLTIP_VALUES.selectTheme,\n customTheme,\n animation,\n interactive = DEFAULT_TOOLTIP_VALUES.interactive,\n hideDelay,\n}: TooltipProviderProps) => {\n const value = useMemo<TooltipDefaults>(() => {\n return {\n defaultRenderPosition,\n selectTheme,\n customTheme,\n animation,\n interactive,\n hideDelay,\n };\n }, [\n animation,\n customTheme,\n defaultRenderPosition,\n hideDelay,\n interactive,\n selectTheme,\n ]);\n\n return (\n <TooltipContext.Provider value={value}>\n {children}\n </TooltipContext.Provider>\n );\n};\n\nexport const useTooltipDefaults = () => {\n return useContext(TooltipContext);\n};\n","import {\n CSSProperties,\n RefObject,\n useLayoutEffect,\n useRef,\n useState,\n} from \"react\";\n\nimport { TooltipPlacement } from \"src/types/Tooltip.interface\";\n\ntype TooltipSurfaceProps = {\n bodyRef: RefObject<HTMLDivElement | null>;\n placement: TooltipPlacement;\n arrowOffset: string;\n surfaceStyle?: CSSProperties;\n fillStyle?: CSSProperties;\n filter?: CSSProperties[\"filter\"];\n};\n\ntype CornerRadii = {\n topLeft: number;\n topRight: number;\n bottomRight: number;\n bottomLeft: number;\n};\n\ntype SurfaceMetrics = {\n width: number;\n height: number;\n left: number;\n top: number;\n path: string;\n strokeWidth: number;\n strokeColor: string;\n strokeDasharray?: string;\n strokeLinecap?: \"butt\" | \"round\" | \"square\";\n};\n\ntype SurfaceFillStyle = CSSProperties & {\n WebkitMaskImage?: string;\n WebkitMaskPosition?: string;\n WebkitMaskRepeat?: string;\n WebkitMaskSize?: string;\n};\n\nconst EMPTY_METRICS: SurfaceMetrics = {\n width: 0,\n height: 0,\n left: 0,\n top: 0,\n path: \"\",\n strokeWidth: 0,\n strokeColor: \"transparent\",\n};\n\nconst clamp = (value: number, min: number, max: number) => {\n return Math.min(Math.max(value, min), Math.max(min, max));\n};\n\nconst resolveCssLength = (value: string, base: number) => {\n const normalized = value.trim();\n\n if (!normalized) {\n return 0;\n }\n\n if (normalized.endsWith(\"%\")) {\n return base * (Number.parseFloat(normalized) / 100);\n }\n\n const parsed = Number.parseFloat(normalized);\n\n return Number.isFinite(parsed) ? parsed : 0;\n};\n\nconst resolveCornerRadius = (value: string, width: number, height: number) => {\n const parts = value.trim().split(/\\s+/).filter(Boolean);\n\n const horizontal = resolveCssLength(parts[0] ?? \"0\", width);\n const vertical = resolveCssLength(parts[1] ?? parts[0] ?? \"0\", height);\n\n return Math.min(horizontal, vertical);\n};\n\nconst normalizeRadii = (\n radii: CornerRadii,\n width: number,\n height: number,\n): CornerRadii => {\n const top = radii.topLeft + radii.topRight;\n const bottom = radii.bottomLeft + radii.bottomRight;\n const left = radii.topLeft + radii.bottomLeft;\n const right = radii.topRight + radii.bottomRight;\n\n const scale = Math.min(\n 1,\n top > 0 ? width / top : 1,\n bottom > 0 ? width / bottom : 1,\n left > 0 ? height / left : 1,\n right > 0 ? height / right : 1,\n );\n\n return {\n topLeft: radii.topLeft * scale,\n topRight: radii.topRight * scale,\n bottomRight: radii.bottomRight * scale,\n bottomLeft: radii.bottomLeft * scale,\n };\n};\n\nconst resolveArrowOffset = (value: string, edgeLength: number) => {\n const normalized = value.trim();\n\n if (normalized.endsWith(\"%\")) {\n return edgeLength * (Number.parseFloat(normalized) / 100);\n }\n\n const parsed = Number.parseFloat(normalized);\n\n return Number.isFinite(parsed) ? parsed : edgeLength / 2;\n};\n\nconst createSurfacePath = ({\n placement,\n bodyWidth,\n bodyHeight,\n arrowHeight,\n arrowWidth,\n requestedArrowOffset,\n radii,\n}: {\n placement: TooltipPlacement;\n bodyWidth: number;\n bodyHeight: number;\n arrowHeight: number;\n arrowWidth: number;\n requestedArrowOffset: number;\n radii: CornerRadii;\n}) => {\n let x0 = 0;\n let y0 = 0;\n let x1 = bodyWidth;\n let y1 = bodyHeight;\n\n let width = bodyWidth;\n let height = bodyHeight;\n let left = 0;\n let top = 0;\n\n if (placement === \"top\") {\n height += arrowHeight;\n }\n\n if (placement === \"bottom\") {\n y0 = arrowHeight;\n y1 = arrowHeight + bodyHeight;\n height += arrowHeight;\n top = -arrowHeight;\n }\n\n if (placement === \"left\") {\n width += arrowHeight;\n }\n\n if (placement === \"right\") {\n x0 = arrowHeight;\n x1 = arrowHeight + bodyWidth;\n width += arrowHeight;\n left = -arrowHeight;\n }\n\n let edgeLength = bodyWidth;\n let edgeStartRadius = radii.bottomLeft;\n let edgeEndRadius = radii.bottomRight;\n\n if (placement === \"bottom\") {\n edgeStartRadius = radii.topLeft;\n edgeEndRadius = radii.topRight;\n }\n\n if (placement === \"left\") {\n edgeLength = bodyHeight;\n edgeStartRadius = radii.topRight;\n edgeEndRadius = radii.bottomRight;\n }\n\n if (placement === \"right\") {\n edgeLength = bodyHeight;\n edgeStartRadius = radii.topLeft;\n edgeEndRadius = radii.bottomLeft;\n }\n\n const availableStraightEdge = Math.max(\n 0,\n edgeLength - edgeStartRadius - edgeEndRadius - 2,\n );\n\n const arrowHalf = Math.min(arrowWidth / 2, availableStraightEdge / 2);\n const minArrowCenter = edgeStartRadius + arrowHalf + 1;\n const maxArrowCenter = edgeLength - edgeEndRadius - arrowHalf - 1;\n\n const arrowCenter =\n minArrowCenter <= maxArrowCenter\n ? clamp(requestedArrowOffset, minArrowCenter, maxArrowCenter)\n : edgeLength / 2;\n\n const tl = radii.topLeft;\n const tr = radii.topRight;\n const br = radii.bottomRight;\n const bl = radii.bottomLeft;\n\n let path = \"\";\n\n if (placement === \"top\") {\n path = [\n `M ${x0 + tl} ${y0}`,\n `H ${x1 - tr}`,\n `Q ${x1} ${y0} ${x1} ${y0 + tr}`,\n `V ${y1 - br}`,\n `Q ${x1} ${y1} ${x1 - br} ${y1}`,\n `H ${arrowCenter + arrowHalf}`,\n `L ${arrowCenter} ${y1 + arrowHeight}`,\n `L ${arrowCenter - arrowHalf} ${y1}`,\n `H ${x0 + bl}`,\n `Q ${x0} ${y1} ${x0} ${y1 - bl}`,\n `V ${y0 + tl}`,\n `Q ${x0} ${y0} ${x0 + tl} ${y0}`,\n \"Z\",\n ].join(\" \");\n }\n\n if (placement === \"bottom\") {\n path = [\n `M ${x0 + tl} ${y0}`,\n `H ${arrowCenter - arrowHalf}`,\n `L ${arrowCenter} ${y0 - arrowHeight}`,\n `L ${arrowCenter + arrowHalf} ${y0}`,\n `H ${x1 - tr}`,\n `Q ${x1} ${y0} ${x1} ${y0 + tr}`,\n `V ${y1 - br}`,\n `Q ${x1} ${y1} ${x1 - br} ${y1}`,\n `H ${x0 + bl}`,\n `Q ${x0} ${y1} ${x0} ${y1 - bl}`,\n `V ${y0 + tl}`,\n `Q ${x0} ${y0} ${x0 + tl} ${y0}`,\n \"Z\",\n ].join(\" \");\n }\n\n if (placement === \"left\") {\n path = [\n `M ${x0 + tl} ${y0}`,\n `H ${x1 - tr}`,\n `Q ${x1} ${y0} ${x1} ${y0 + tr}`,\n `V ${arrowCenter - arrowHalf}`,\n `L ${x1 + arrowHeight} ${arrowCenter}`,\n `L ${x1} ${arrowCenter + arrowHalf}`,\n `V ${y1 - br}`,\n `Q ${x1} ${y1} ${x1 - br} ${y1}`,\n `H ${x0 + bl}`,\n `Q ${x0} ${y1} ${x0} ${y1 - bl}`,\n `V ${y0 + tl}`,\n `Q ${x0} ${y0} ${x0 + tl} ${y0}`,\n \"Z\",\n ].join(\" \");\n }\n\n if (placement === \"right\") {\n path = [\n `M ${x0 + tl} ${y0}`,\n `H ${x1 - tr}`,\n `Q ${x1} ${y0} ${x1} ${y0 + tr}`,\n `V ${y1 - br}`,\n `Q ${x1} ${y1} ${x1 - br} ${y1}`,\n `H ${x0 + bl}`,\n `Q ${x0} ${y1} ${x0} ${y1 - bl}`,\n `V ${arrowCenter + arrowHalf}`,\n `L ${x0 - arrowHeight} ${arrowCenter}`,\n `L ${x0} ${arrowCenter - arrowHalf}`,\n `V ${y0 + tl}`,\n `Q ${x0} ${y0} ${x0 + tl} ${y0}`,\n \"Z\",\n ].join(\" \");\n }\n\n return {\n width,\n height,\n left,\n top,\n path,\n };\n};\n\nconst getStrokeConfig = (computedStyle: CSSStyleDeclaration) => {\n const widths = [\n Number.parseFloat(computedStyle.borderTopWidth) || 0,\n Number.parseFloat(computedStyle.borderRightWidth) || 0,\n Number.parseFloat(computedStyle.borderBottomWidth) || 0,\n Number.parseFloat(computedStyle.borderLeftWidth) || 0,\n ];\n\n const styles = [\n computedStyle.borderTopStyle,\n computedStyle.borderRightStyle,\n computedStyle.borderBottomStyle,\n computedStyle.borderLeftStyle,\n ];\n\n const colors = [\n computedStyle.borderTopColor,\n computedStyle.borderRightColor,\n computedStyle.borderBottomColor,\n computedStyle.borderLeftColor,\n ];\n\n const activeIndexes = widths\n .map((width, index) => ({\n width,\n index,\n }))\n .filter(({ width, index }) => {\n return (\n width > 0 &&\n styles[index] !== \"none\" &&\n styles[index] !== \"hidden\"\n );\n });\n\n if (!activeIndexes.length) {\n return {\n strokeWidth: 0,\n strokeColor: \"transparent\",\n strokeDasharray: undefined,\n strokeLinecap: undefined,\n };\n }\n\n const active = activeIndexes.reduce((largest, current) => {\n return current.width > largest.width ? current : largest;\n });\n\n const strokeWidth = active.width;\n const strokeStyle = styles[active.index];\n const strokeColor = colors[active.index];\n\n if (strokeStyle === \"dashed\") {\n return {\n strokeWidth,\n strokeColor,\n strokeDasharray: `${strokeWidth * 3} ${strokeWidth * 2}`,\n strokeLinecap: \"butt\" as const,\n };\n }\n\n if (strokeStyle === \"dotted\") {\n return {\n strokeWidth,\n strokeColor,\n strokeDasharray: `${strokeWidth} ${strokeWidth * 1.6}`,\n strokeLinecap: \"round\" as const,\n };\n }\n\n return {\n strokeWidth,\n strokeColor,\n strokeDasharray: undefined,\n strokeLinecap: \"round\" as const,\n };\n};\n\nconst createMaskImage = (width: number, height: number, path: string) => {\n const svg = [\n '<svg xmlns=\"http://www.w3.org/2000/svg\"',\n ` viewBox=\"0 0 ${width} ${height}\"`,\n ` width=\"${width}\"`,\n ` height=\"${height}\">`,\n `<path fill=\"white\" d=\"${path}\"/>`,\n \"</svg>\",\n ].join(\"\");\n\n return `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\")`;\n};\n\nexport const TooltipSurface = ({\n bodyRef,\n placement,\n arrowOffset,\n surfaceStyle,\n fillStyle,\n filter,\n}: TooltipSurfaceProps) => {\n const surfaceProbeRef = useRef<HTMLDivElement>(null);\n const arrowProbeRef = useRef<HTMLDivElement>(null);\n const [metrics, setMetrics] = useState<SurfaceMetrics>(EMPTY_METRICS);\n\n useLayoutEffect(() => {\n const body = bodyRef.current;\n const surfaceProbe = surfaceProbeRef.current;\n const arrowProbe = arrowProbeRef.current;\n\n if (!body || !surfaceProbe || !arrowProbe) {\n return;\n }\n\n const update = () => {\n const bodyWidth = body.offsetWidth;\n const bodyHeight = body.offsetHeight;\n\n if (bodyWidth <= 0 || bodyHeight <= 0) {\n return;\n }\n\n surfaceProbe.style.width = `${bodyWidth}px`;\n surfaceProbe.style.height = `${bodyHeight}px`;\n\n const surfaceComputedStyle = window.getComputedStyle(surfaceProbe);\n const arrowComputedStyle = window.getComputedStyle(arrowProbe);\n\n const arrowHeight =\n Number.parseFloat(arrowComputedStyle.height) || 6;\n const arrowWidth =\n Number.parseFloat(arrowComputedStyle.width) || arrowHeight * 2;\n\n const radii = normalizeRadii(\n {\n topLeft: resolveCornerRadius(\n surfaceComputedStyle.borderTopLeftRadius,\n bodyWidth,\n bodyHeight,\n ),\n topRight: resolveCornerRadius(\n surfaceComputedStyle.borderTopRightRadius,\n bodyWidth,\n bodyHeight,\n ),\n bottomRight: resolveCornerRadius(\n surfaceComputedStyle.borderBottomRightRadius,\n bodyWidth,\n bodyHeight,\n ),\n bottomLeft: resolveCornerRadius(\n surfaceComputedStyle.borderBottomLeftRadius,\n bodyWidth,\n bodyHeight,\n ),\n },\n bodyWidth,\n bodyHeight,\n );\n\n const requestedArrowOffset = resolveArrowOffset(\n arrowOffset,\n placement === \"top\" || placement === \"bottom\"\n ? bodyWidth\n : bodyHeight,\n );\n\n const surface = createSurfacePath({\n placement,\n bodyWidth,\n bodyHeight,\n arrowHeight,\n arrowWidth,\n requestedArrowOffset,\n radii,\n });\n\n const stroke = getStrokeConfig(surfaceComputedStyle);\n const nextMetrics: SurfaceMetrics = {\n ...surface,\n ...stroke,\n };\n\n setMetrics((current) => {\n if (\n current.width === nextMetrics.width &&\n current.height === nextMetrics.height &&\n current.left === nextMetrics.left &&\n current.top === nextMetrics.top &&\n current.path === nextMetrics.path &&\n current.strokeWidth === nextMetrics.strokeWidth &&\n current.strokeColor === nextMetrics.strokeColor &&\n current.strokeDasharray === nextMetrics.strokeDasharray &&\n current.strokeLinecap === nextMetrics.strokeLinecap\n ) {\n return current;\n }\n\n return nextMetrics;\n });\n };\n\n update();\n\n const resizeObserver = new ResizeObserver(update);\n\n resizeObserver.observe(body);\n window.addEventListener(\"resize\", update);\n\n return () => {\n resizeObserver.disconnect();\n window.removeEventListener(\"resize\", update);\n };\n }, [arrowOffset, bodyRef, placement, surfaceStyle]);\n\n const maskImage = metrics.path\n ? createMaskImage(metrics.width, metrics.height, metrics.path)\n : undefined;\n\n const resolvedFillStyle: SurfaceFillStyle = {\n ...fillStyle,\n maskImage,\n maskPosition: \"0 0\",\n maskRepeat: \"no-repeat\",\n maskSize: \"100% 100%\",\n WebkitMaskImage: maskImage,\n WebkitMaskPosition: \"0 0\",\n WebkitMaskRepeat: \"no-repeat\",\n WebkitMaskSize: \"100% 100%\",\n };\n\n return (\n <>\n <div\n ref={surfaceProbeRef}\n className=\"tooltip-surface-probe\"\n style={surfaceStyle}\n />\n\n <div ref={arrowProbeRef} className=\"tooltip-arrow-probe\" />\n\n {metrics.path ? (\n <div\n className=\"tooltip-surface\"\n style={{\n width: metrics.width,\n height: metrics.height,\n left: metrics.left,\n top: metrics.top,\n filter,\n }}\n aria-hidden=\"true\"\n >\n <div\n className=\"tooltip-surface__fill\"\n style={resolvedFillStyle}\n />\n\n {metrics.strokeWidth > 0 ? (\n <svg\n className=\"tooltip-surface__stroke\"\n width={metrics.width}\n height={metrics.height}\n viewBox={`0 0 ${metrics.width} ${metrics.height}`}\n >\n <path\n d={metrics.path}\n fill=\"none\"\n stroke={metrics.strokeColor}\n strokeWidth={metrics.strokeWidth}\n strokeDasharray={metrics.strokeDasharray}\n strokeLinecap={metrics.strokeLinecap}\n strokeLinejoin=\"round\"\n vectorEffect=\"non-scaling-stroke\"\n />\n </svg>\n ) : null}\n </div>\n ) : null}\n </>\n );\n};\n"],"mappings":"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","names":["useCallback","useLayoutEffect","useMemo","useRef","useState","useLayoutEffect","useRef","useState","jsx","clamp","Fragment","jsx","jsxs","useRef","useState","useCallback","useLayoutEffect","useMemo"]}
|