@ssaprt/tooltip 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENCE +5 -0
- package/README.md +1071 -0
- package/dist/index.css +344 -0
- package/dist/index.css.map +1 -0
- package/dist/index.d.mts +117 -0
- package/dist/index.d.ts +117 -0
- package/dist/index.js +2364 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +2355 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +48 -0
|
@@ -0,0 +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 MutableRefObject,\n ReactElement,\n Ref,\n RefCallback,\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 MutableRefObject<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 = false,\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\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,\n hideDelay,\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 interactive ? \"tooltip-container--interactive\" : 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\";\r\n\r\nimport { ThemeType } from \"../types/Theme.type\";\r\n\r\ntype PresetAnimation = NonNullable<ThemeType[\"animation\"]>;\r\n\r\ntype TooltipArrow = NonNullable<ThemeType[\"arrow\"]>;\r\n\r\ntype ArrowSize = NonNullable<TooltipArrow[\"size\"]>;\r\n\r\ntype ArrowWidth = NonNullable<TooltipArrow[\"width\"]>;\r\n\r\ntype CreateThemeOptions = {\r\n background: NonNullable<CSSProperties[\"background\"]>;\r\n color: NonNullable<CSSProperties[\"color\"]>;\r\n fontFamily?: CSSProperties[\"fontFamily\"];\r\n fontSize?: CSSProperties[\"fontSize\"];\r\n fontWeight?: CSSProperties[\"fontWeight\"];\r\n fontStyle?: CSSProperties[\"fontStyle\"];\r\n lineHeight?: CSSProperties[\"lineHeight\"];\r\n borderRadius?: CSSProperties[\"borderRadius\"];\r\n border?: CSSProperties[\"border\"];\r\n filter?: CSSProperties[\"filter\"];\r\n padding?: CSSProperties[\"padding\"];\r\n letterSpacing?: CSSProperties[\"letterSpacing\"];\r\n textShadow?: CSSProperties[\"textShadow\"];\r\n textTransform?: CSSProperties[\"textTransform\"];\r\n textAlign?: CSSProperties[\"textAlign\"];\r\n backdropFilter?: CSSProperties[\"backdropFilter\"];\r\n arrowSize?: ArrowSize;\r\n arrowWidth?: ArrowWidth;\r\n animation?: PresetAnimation;\r\n style?: CSSProperties;\r\n};\r\n\r\nconst animations = {\r\n soft: {\r\n show: \"fade\",\r\n hide: \"fade\",\r\n speed: \"160ms\",\r\n easing: \"ease-in-out\",\r\n },\r\n\r\n slide: {\r\n show: \"slide\",\r\n hide: \"fade\",\r\n speed: \"160ms\",\r\n easing: \"ease-out\",\r\n },\r\n\r\n pop: {\r\n show: \"scale\",\r\n hide: \"scale\",\r\n speed: \"170ms\",\r\n easing: \"cubic-bezier(0.22, 1, 0.36, 1)\",\r\n },\r\n\r\n bounce: {\r\n show: \"bounce\",\r\n hide: \"scale\",\r\n speed: \"240ms\",\r\n easing: \"cubic-bezier(0.34, 1.56, 0.64, 1)\",\r\n },\r\n\r\n flip: {\r\n show: \"flip\",\r\n hide: \"fade\",\r\n speed: \"210ms\",\r\n easing: \"cubic-bezier(0.22, 1, 0.36, 1)\",\r\n },\r\n\r\n blur: {\r\n show: \"blur\",\r\n hide: \"blur\",\r\n speed: \"200ms\",\r\n easing: \"ease-out\",\r\n },\r\n\r\n zoom: {\r\n show: \"zoom\",\r\n hide: \"zoom\",\r\n speed: \"170ms\",\r\n easing: \"ease-out\",\r\n },\r\n\r\n snap: {\r\n show: \"zoom\",\r\n hide: \"fade\",\r\n speed: \"110ms\",\r\n easing: \"steps(4, end)\",\r\n },\r\n\r\n instant: {\r\n show: \"none\",\r\n hide: \"none\",\r\n speed: \"1ms\",\r\n easing: \"linear\",\r\n },\r\n} satisfies Record<string, PresetAnimation>;\r\n\r\nconst createTheme = ({\r\n background,\r\n color,\r\n fontFamily = \"Inter, Arial, sans-serif\",\r\n fontSize = \"12px\",\r\n fontWeight = 500,\r\n fontStyle,\r\n lineHeight = 1.4,\r\n borderRadius = \"7px\",\r\n border,\r\n filter,\r\n padding = \"7px 12px\",\r\n letterSpacing,\r\n textShadow,\r\n textTransform,\r\n textAlign = \"center\",\r\n backdropFilter,\r\n arrowSize = \"7px\",\r\n arrowWidth = \"14px\",\r\n animation = animations.slide,\r\n style,\r\n}: CreateThemeOptions): ThemeType => {\r\n return {\r\n body: {\r\n background,\r\n filter,\r\n style: {\r\n color,\r\n fontFamily,\r\n fontSize,\r\n fontWeight,\r\n fontStyle,\r\n lineHeight,\r\n borderRadius,\r\n border,\r\n padding,\r\n letterSpacing,\r\n textShadow,\r\n textTransform,\r\n textAlign,\r\n backdropFilter,\r\n WebkitBackdropFilter: backdropFilter,\r\n ...style,\r\n },\r\n },\r\n\r\n arrow: {\r\n size: arrowSize,\r\n width: arrowWidth,\r\n },\r\n\r\n animation,\r\n };\r\n};\r\n\r\nexport const presets = {\r\n primary: createTheme({\r\n background: \"linear-gradient(135deg, #2563eb, #1d4ed8)\",\r\n color: \"#ffffff\",\r\n filter: \"drop-shadow(0 7px 12px rgba(37, 99, 235, 0.38))\",\r\n border: \"1px solid rgba(255, 255, 255, 0.18)\",\r\n borderRadius: \"8px\",\r\n }),\r\n\r\n secondary: createTheme({\r\n background: \"linear-gradient(135deg, #64748b, #475569)\",\r\n color: \"#ffffff\",\r\n filter: \"drop-shadow(0 7px 12px rgba(15, 23, 42, 0.3))\",\r\n border: \"1px solid rgba(255, 255, 255, 0.15)\",\r\n animation: animations.soft,\r\n }),\r\n\r\n dark: createTheme({\r\n background: \"linear-gradient(145deg, #18181b, #09090b)\",\r\n color: \"#fafafa\",\r\n border: \"1px solid #3f3f46\",\r\n borderRadius: \"10px\",\r\n filter: \"drop-shadow(0 11px 18px rgba(0, 0, 0, 0.56))\",\r\n animation: animations.pop,\r\n }),\r\n\r\n light: createTheme({\r\n background: \"linear-gradient(145deg, #ffffff, #f4f4f5)\",\r\n color: \"#18181b\",\r\n border: \"1px solid #d4d4d8\",\r\n borderRadius: \"10px\",\r\n filter: \"drop-shadow(0 9px 15px rgba(15, 23, 42, 0.18))\",\r\n animation: animations.soft,\r\n }),\r\n\r\n comic: createTheme({\r\n background: \"#fde047\",\r\n color: \"#18181b\",\r\n fontFamily: \"Comic Sans MS, Comic Sans, cursive\",\r\n fontSize: \"13px\",\r\n fontWeight: 700,\r\n border: \"3px solid #18181b\",\r\n borderRadius: \"12px\",\r\n filter: \"drop-shadow(5px 5px 0 #18181b)\",\r\n padding: \"8px 14px\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"20px\",\r\n animation: animations.bounce,\r\n }),\r\n\r\n manga: createTheme({\r\n background:\r\n \"radial-gradient(circle at 2px 2px, rgba(0, 0, 0, 0.2) 1px, transparent 1.5px) 0 0 / 6px 6px, #ffffff\",\r\n color: \"#000000\",\r\n fontFamily: \"Impact, Haettenschweiler, Arial Narrow Bold, sans-serif\",\r\n fontSize: \"13px\",\r\n fontWeight: 900,\r\n border: \"3px solid #000000\",\r\n borderRadius: \"18px 5px 18px 5px\",\r\n filter: \"drop-shadow(4px 4px 0 #000000)\",\r\n padding: \"9px 15px\",\r\n letterSpacing: \"0.04em\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"11px\",\r\n arrowWidth: \"17px\",\r\n animation: animations.snap,\r\n }),\r\n\r\n newspaper: createTheme({\r\n background:\r\n \"repeating-linear-gradient(0deg, rgba(68, 64, 60, 0.035) 0, rgba(68, 64, 60, 0.035) 1px, transparent 1px, transparent 4px), #f5f0e6\",\r\n color: \"#292524\",\r\n fontFamily: \"Times New Roman, Times, serif\",\r\n fontSize: \"13px\",\r\n fontWeight: 600,\r\n border: \"2px solid #44403c\",\r\n borderRadius: \"1px\",\r\n filter: \"drop-shadow(3px 4px 0 rgba(68, 64, 60, 0.28))\",\r\n padding: \"9px 15px\",\r\n letterSpacing: \"0.02em\",\r\n textAlign: \"left\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"18px\",\r\n animation: animations.soft,\r\n style: {\r\n fontVariantCaps: \"small-caps\",\r\n },\r\n }),\r\n\r\n stickyNote: createTheme({\r\n background:\r\n \"linear-gradient(145deg, #fff7a8 0%, #fde96b 70%, #e9cc42 100%)\",\r\n color: \"#4a3c00\",\r\n fontFamily: \"Comic Sans MS, cursive\",\r\n fontSize: \"13px\",\r\n fontWeight: 600,\r\n border: \"1px solid #d6b936\",\r\n borderRadius: \"3px 14px 5px 11px\",\r\n filter: \"drop-shadow(3px 6px 5px rgba(78, 65, 0, 0.28))\",\r\n padding: \"10px 15px\",\r\n textAlign: \"left\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"19px\",\r\n animation: animations.pop,\r\n }),\r\n\r\n blueprint: createTheme({\r\n background:\r\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\",\r\n color: \"#e0f2fe\",\r\n fontFamily: \"Courier New, Consolas, monospace\",\r\n fontSize: \"12px\",\r\n fontWeight: 600,\r\n border: \"2px dashed #7dd3fc\",\r\n borderRadius: \"2px\",\r\n filter: \"drop-shadow(0 0 7px rgba(56, 189, 248, 0.45))\",\r\n padding: \"9px 13px\",\r\n letterSpacing: \"0.05em\",\r\n textAlign: \"left\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"16px\",\r\n animation: animations.flip,\r\n style: {\r\n backgroundSize: \"12px 12px\",\r\n },\r\n }),\r\n\r\n terminal: createTheme({\r\n background: \"linear-gradient(180deg, #020617, #000000)\",\r\n color: \"#22c55e\",\r\n fontFamily: \"Consolas, Monaco, Courier New, monospace\",\r\n fontSize: \"12px\",\r\n fontWeight: 600,\r\n border: \"1px solid #22c55e\",\r\n borderRadius: \"3px\",\r\n filter: \"drop-shadow(0 0 5px rgba(34, 197, 94, 0.65))\",\r\n padding: \"8px 12px\",\r\n letterSpacing: \"0.035em\",\r\n textShadow: \"0 0 5px rgba(34, 197, 94, 0.9)\",\r\n textAlign: \"left\",\r\n arrowSize: \"7px\",\r\n arrowWidth: \"13px\",\r\n animation: animations.instant,\r\n }),\r\n\r\n crt: createTheme({\r\n background:\r\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)\",\r\n color: \"#86efac\",\r\n fontFamily: \"Lucida Console, Monaco, monospace\",\r\n fontSize: \"12px\",\r\n fontWeight: 600,\r\n border: \"2px solid #166534\",\r\n borderRadius: \"18px\",\r\n filter: \"drop-shadow(0 0 8px rgba(34, 197, 94, 0.5)) drop-shadow(0 0 18px rgba(34, 197, 94, 0.18))\",\r\n padding: \"10px 15px\",\r\n textShadow: \"0 0 6px rgba(134, 239, 172, 0.85)\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"18px\",\r\n animation: animations.blur,\r\n }),\r\n\r\n pixel: createTheme({\r\n background:\r\n \"linear-gradient(135deg, #4c1d95 25%, #581c87 25%, #581c87 50%, #4c1d95 50%, #4c1d95 75%, #581c87 75%) 0 0 / 8px 8px\",\r\n color: \"#fef08a\",\r\n fontFamily: \"Press Start 2P, Courier New, monospace\",\r\n fontSize: \"10px\",\r\n fontWeight: 700,\r\n lineHeight: 1.7,\r\n border: \"4px solid #fef08a\",\r\n borderRadius: \"0px\",\r\n filter: \"drop-shadow(6px 6px 0 #18181b)\",\r\n padding: \"10px 14px\",\r\n letterSpacing: \"0.03em\",\r\n textShadow: \"2px 2px 0 #18181b\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"10px\",\r\n arrowWidth: \"18px\",\r\n animation: animations.snap,\r\n }),\r\n\r\n arcade: createTheme({\r\n background:\r\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\",\r\n color: \"#ffffff\",\r\n fontFamily: \"Arial Black, Impact, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 900,\r\n border: \"2px solid #22d3ee\",\r\n borderRadius: \"12px\",\r\n filter: \"drop-shadow(3px 3px 0 #ec4899) drop-shadow(-3px -3px 0 #22d3ee)\",\r\n padding: \"9px 15px\",\r\n letterSpacing: \"0.07em\",\r\n textShadow: \"0 0 6px #22d3ee\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"18px\",\r\n animation: animations.bounce,\r\n }),\r\n\r\n cyberpunk: createTheme({\r\n background:\r\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)\",\r\n color: \"#18181b\",\r\n fontFamily: \"Impact, Arial Black, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 900,\r\n border: \"2px solid #22d3ee\",\r\n borderRadius: \"1px 12px 1px 12px\",\r\n filter: \"drop-shadow(5px 5px 0 #ec4899) drop-shadow(-2px -2px 0 #22d3ee)\",\r\n padding: \"9px 15px\",\r\n letterSpacing: \"0.08em\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"10px\",\r\n arrowWidth: \"21px\",\r\n animation: animations.flip,\r\n }),\r\n\r\n synthwave: createTheme({\r\n background:\r\n \"linear-gradient(180deg, rgba(15, 23, 42, 0.2), rgba(15, 23, 42, 0.75)), linear-gradient(135deg, #7c3aed, #db2777)\",\r\n color: \"#fdf4ff\",\r\n fontFamily: \"Trebuchet MS, Arial, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 700,\r\n border: \"2px solid #67e8f9\",\r\n borderRadius: \"16px 3px 16px 3px\",\r\n filter: \"drop-shadow(0 0 7px #ec4899) drop-shadow(0 0 14px rgba(103, 232, 249, 0.5))\",\r\n padding: \"9px 15px\",\r\n letterSpacing: \"0.07em\",\r\n textShadow: \"0 0 6px rgba(255, 255, 255, 0.7)\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"20px\",\r\n animation: animations.zoom,\r\n }),\r\n\r\n vaporwave: createTheme({\r\n background:\r\n \"linear-gradient(135deg, rgba(255, 255, 255, 0.2), transparent 50%), linear-gradient(135deg, #67e8f9, #f0abfc 52%, #f9a8d4)\",\r\n color: \"#4c1d95\",\r\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 700,\r\n border: \"2px solid #ffffff\",\r\n borderRadius: \"18px\",\r\n filter: \"drop-shadow(5px 6px 0 rgba(124, 58, 237, 0.42))\",\r\n padding: \"9px 16px\",\r\n letterSpacing: \"0.06em\",\r\n textShadow: \"1px 1px 0 rgba(255, 255, 255, 0.8)\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"21px\",\r\n animation: animations.bounce,\r\n }),\r\n\r\n hologram: createTheme({\r\n background:\r\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)), rgba(8, 47, 73, 0.72)\",\r\n color: \"#ecfeff\",\r\n fontFamily: \"Segoe UI, Arial, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 600,\r\n border: \"1px solid rgba(165, 243, 252, 0.75)\",\r\n borderRadius: \"14px\",\r\n filter: \"drop-shadow(0 0 7px rgba(34, 211, 238, 0.75)) drop-shadow(0 0 16px rgba(168, 85, 247, 0.4))\",\r\n padding: \"9px 15px\",\r\n letterSpacing: \"0.06em\",\r\n backdropFilter: \"blur(8px)\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"18px\",\r\n animation: animations.blur,\r\n }),\r\n\r\n glass: createTheme({\r\n background:\r\n \"linear-gradient(135deg, rgba(255, 255, 255, 0.22), rgba(255, 255, 255, 0.07)), rgba(15, 23, 42, 0.68)\",\r\n color: \"#f8fafc\",\r\n border: \"1px solid rgba(255, 255, 255, 0.34)\",\r\n borderRadius: \"16px\",\r\n filter: \"drop-shadow(0 12px 20px rgba(15, 23, 42, 0.38))\",\r\n padding: \"9px 15px\",\r\n backdropFilter: \"blur(16px)\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"18px\",\r\n animation: animations.blur,\r\n }),\r\n\r\n frost: createTheme({\r\n background:\r\n \"radial-gradient(circle at 15% 20%, rgba(255, 255, 255, 0.85), transparent 35%), linear-gradient(135deg, rgba(224, 242, 254, 0.92), rgba(186, 230, 253, 0.72))\",\r\n color: \"#075985\",\r\n fontWeight: 600,\r\n border: \"1px solid rgba(125, 211, 252, 0.9)\",\r\n borderRadius: \"18px\",\r\n filter: \"drop-shadow(0 8px 15px rgba(14, 116, 144, 0.24))\",\r\n padding: \"9px 15px\",\r\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.8)\",\r\n backdropFilter: \"blur(14px)\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"19px\",\r\n animation: animations.blur,\r\n }),\r\n\r\n clay: createTheme({\r\n background: \"linear-gradient(145deg, #f3d5bc, #d9a77d)\",\r\n color: \"#5b2d16\",\r\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 700,\r\n border: \"1px solid #c78f63\",\r\n borderRadius: \"24px\",\r\n filter: \"drop-shadow(7px 9px 10px rgba(91, 45, 22, 0.28)) drop-shadow(-3px -3px 5px rgba(255, 242, 229, 0.72))\",\r\n padding: \"10px 17px\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"22px\",\r\n animation: animations.pop,\r\n }),\r\n\r\n bubblegum: createTheme({\r\n background:\r\n \"radial-gradient(circle at 25% 15%, rgba(255, 255, 255, 0.55), transparent 28%), linear-gradient(135deg, #f9a8d4, #f472b6)\",\r\n color: \"#831843\",\r\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 700,\r\n border: \"2px solid #fdf2f8\",\r\n borderRadius: \"999px\",\r\n filter: \"drop-shadow(0 8px 12px rgba(219, 39, 119, 0.34))\",\r\n padding: \"9px 18px\",\r\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.8)\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"22px\",\r\n animation: animations.bounce,\r\n }),\r\n\r\n candy: createTheme({\r\n background:\r\n \"repeating-linear-gradient(135deg, #ffffff 0, #ffffff 8px, #ef4444 8px, #ef4444 16px)\",\r\n color: \"#991b1b\",\r\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 900,\r\n border: \"3px solid #991b1b\",\r\n borderRadius: \"16px\",\r\n filter: \"drop-shadow(4px 5px 0 rgba(127, 29, 29, 0.5))\",\r\n padding: \"9px 16px\",\r\n textShadow: \"1px 1px 0 #ffffff, -1px -1px 0 #ffffff\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"10px\",\r\n arrowWidth: \"22px\",\r\n animation: animations.bounce,\r\n }),\r\n\r\n watermelon: createTheme({\r\n background:\r\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%)\",\r\n color: \"#4c0519\",\r\n fontFamily: \"Trebuchet MS, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 800,\r\n border: \"2px solid #166534\",\r\n borderRadius: \"20px 20px 8px 8px\",\r\n filter: \"drop-shadow(0 8px 11px rgba(22, 101, 52, 0.32))\",\r\n padding: \"9px 16px 12px\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"22px\",\r\n animation: animations.pop,\r\n }),\r\n\r\n lemon: createTheme({\r\n background:\r\n \"radial-gradient(circle at 25% 25%, rgba(255, 255, 255, 0.65), transparent 22%), linear-gradient(135deg, #fef08a, #facc15)\",\r\n color: \"#713f12\",\r\n fontFamily: \"Arial Rounded MT Bold, Arial, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 800,\r\n border: \"2px dotted #a16207\",\r\n borderRadius: \"999px\",\r\n filter: \"drop-shadow(0 7px 10px rgba(202, 138, 4, 0.32))\",\r\n padding: \"8px 17px\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"22px\",\r\n animation: animations.bounce,\r\n }),\r\n\r\n lava: createTheme({\r\n background:\r\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)\",\r\n color: \"#fef3c7\",\r\n fontFamily: \"Impact, Arial Black, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 800,\r\n border: \"2px solid #f97316\",\r\n borderRadius: \"14px 4px 18px 6px\",\r\n filter: \"drop-shadow(0 0 7px rgba(249, 115, 22, 0.8)) drop-shadow(0 8px 15px rgba(69, 10, 10, 0.6))\",\r\n padding: \"9px 15px\",\r\n letterSpacing: \"0.04em\",\r\n textShadow: \"0 0 5px rgba(253, 186, 116, 0.8)\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"10px\",\r\n arrowWidth: \"19px\",\r\n animation: animations.zoom,\r\n }),\r\n\r\n ember: createTheme({\r\n background:\r\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\",\r\n color: \"#fed7aa\",\r\n fontFamily: \"Georgia, serif\",\r\n fontSize: \"13px\",\r\n fontWeight: 600,\r\n border: \"1px solid #c2410c\",\r\n borderRadius: \"8px 18px 8px 18px\",\r\n filter: \"drop-shadow(0 0 7px rgba(234, 88, 12, 0.5))\",\r\n padding: \"9px 15px\",\r\n textShadow: \"0 0 4px rgba(251, 146, 60, 0.7)\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"18px\",\r\n animation: animations.blur,\r\n }),\r\n\r\n toxic: createTheme({\r\n background:\r\n \"repeating-linear-gradient(135deg, rgba(0, 0, 0, 0.17) 0, rgba(0, 0, 0, 0.17) 5px, transparent 5px, transparent 10px), #a3e635\",\r\n color: \"#1a2e05\",\r\n fontFamily: \"Arial Black, Impact, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 900,\r\n border: \"3px solid #1a2e05\",\r\n borderRadius: \"2px 12px 2px 12px\",\r\n filter: \"drop-shadow(4px 5px 0 #365314)\",\r\n padding: \"9px 14px\",\r\n letterSpacing: \"0.08em\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"10px\",\r\n arrowWidth: \"20px\",\r\n animation: animations.snap,\r\n }),\r\n\r\n radioactive: createTheme({\r\n background:\r\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%)\",\r\n color: \"#ffffff\",\r\n fontFamily: \"Arial Black, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 900,\r\n border: \"3px solid #000000\",\r\n borderRadius: \"50%\",\r\n filter: \"drop-shadow(0 0 8px rgba(250, 204, 21, 0.7))\",\r\n padding: \"13px 18px\",\r\n letterSpacing: \"0.05em\",\r\n textShadow: \"2px 2px 0 #000000, -1px -1px 0 #000000\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"11px\",\r\n arrowWidth: \"21px\",\r\n animation: animations.zoom,\r\n }),\r\n\r\n hazard: createTheme({\r\n background:\r\n \"repeating-linear-gradient(135deg, #f97316 0, #f97316 10px, #18181b 10px, #18181b 20px)\",\r\n color: \"#ffffff\",\r\n fontFamily: \"Arial Black, Impact, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 900,\r\n border: \"3px solid #18181b\",\r\n borderRadius: \"4px\",\r\n filter: \"drop-shadow(5px 5px 0 rgba(24, 24, 27, 0.6))\",\r\n padding: \"9px 15px\",\r\n textShadow: \"2px 2px 0 #18181b, -1px -1px 0 #18181b\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"10px\",\r\n arrowWidth: \"20px\",\r\n animation: animations.snap,\r\n }),\r\n\r\n policeTape: createTheme({\r\n background:\r\n \"repeating-linear-gradient(135deg, #f8fafc 0, #f8fafc 11px, #2563eb 11px, #2563eb 22px)\",\r\n color: \"#172554\",\r\n fontFamily: \"Arial Narrow, Arial, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 900,\r\n border: \"3px solid #1e3a8a\",\r\n borderRadius: \"1px\",\r\n filter: \"drop-shadow(4px 5px 0 rgba(30, 58, 138, 0.42))\",\r\n padding: \"8px 15px\",\r\n letterSpacing: \"0.1em\",\r\n textShadow: \"1px 1px 0 #ffffff, -1px -1px 0 #ffffff\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"20px\",\r\n animation: animations.slide,\r\n }),\r\n\r\n construction: createTheme({\r\n background:\r\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)\",\r\n color: \"#fed7aa\",\r\n fontFamily: \"DIN Condensed, Arial Narrow, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 800,\r\n border: \"3px dashed #f97316\",\r\n borderRadius: \"3px\",\r\n filter: \"drop-shadow(5px 6px 0 rgba(24, 24, 27, 0.52))\",\r\n padding: \"9px 15px\",\r\n letterSpacing: \"0.07em\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"10px\",\r\n arrowWidth: \"20px\",\r\n animation: animations.flip,\r\n }),\r\n\r\n parchment: createTheme({\r\n background:\r\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)\",\r\n color: \"#5b3716\",\r\n fontFamily: \"Garamond, Georgia, serif\",\r\n fontSize: \"14px\",\r\n fontWeight: 600,\r\n border: \"2px solid #9a6b32\",\r\n borderRadius: \"14px 3px 12px 5px\",\r\n filter: \"drop-shadow(4px 6px 5px rgba(91, 55, 22, 0.3))\",\r\n padding: \"10px 16px\",\r\n textAlign: \"left\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"20px\",\r\n animation: animations.soft,\r\n }),\r\n\r\n pirateMap: createTheme({\r\n background:\r\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\",\r\n color: \"#422006\",\r\n fontFamily: \"Papyrus, Harrington, Georgia, serif\",\r\n fontSize: \"13px\",\r\n fontWeight: 700,\r\n border: \"2px dashed #78350f\",\r\n borderRadius: \"5px 17px 7px 12px\",\r\n filter: \"drop-shadow(4px 7px 5px rgba(66, 32, 6, 0.36))\",\r\n padding: \"10px 16px\",\r\n letterSpacing: \"0.025em\",\r\n textAlign: \"left\",\r\n arrowSize: \"10px\",\r\n arrowWidth: \"19px\",\r\n animation: animations.flip,\r\n }),\r\n\r\n royal: createTheme({\r\n background:\r\n \"radial-gradient(circle at 50% -20%, rgba(250, 204, 21, 0.5), transparent 46%), linear-gradient(135deg, #581c87, #2e1065)\",\r\n color: \"#fef3c7\",\r\n fontFamily: \"Palatino Linotype, Book Antiqua, serif\",\r\n fontSize: \"13px\",\r\n fontWeight: 700,\r\n border: \"2px solid #facc15\",\r\n borderRadius: \"6px 20px 6px 20px\",\r\n filter: \"drop-shadow(0 8px 14px rgba(46, 16, 101, 0.55)) drop-shadow(0 0 5px rgba(250, 204, 21, 0.4))\",\r\n padding: \"10px 17px\",\r\n letterSpacing: \"0.05em\",\r\n textShadow: \"0 1px 2px rgba(0, 0, 0, 0.7)\",\r\n arrowSize: \"10px\",\r\n arrowWidth: \"21px\",\r\n animation: animations.flip,\r\n style: {\r\n fontVariantCaps: \"small-caps\",\r\n },\r\n }),\r\n\r\n noir: createTheme({\r\n background:\r\n \"linear-gradient(115deg, #000000 0%, #27272a 48%, #09090b 52%, #000000 100%)\",\r\n color: \"#ffffff\",\r\n fontFamily: \"Helvetica Neue, Arial, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 700,\r\n border: \"1px solid #a1a1aa\",\r\n borderRadius: \"0px\",\r\n filter: \"drop-shadow(7px 9px 0 rgba(0, 0, 0, 0.6))\",\r\n padding: \"9px 15px\",\r\n letterSpacing: \"0.12em\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"16px\",\r\n animation: animations.soft,\r\n }),\r\n\r\n detective: createTheme({\r\n background:\r\n \"repeating-linear-gradient(0deg, rgba(68, 64, 60, 0.05) 0, rgba(68, 64, 60, 0.05) 1px, transparent 1px, transparent 5px), #d6c29f\",\r\n color: \"#292524\",\r\n fontFamily: \"Courier New, monospace\",\r\n fontSize: \"12px\",\r\n fontWeight: 700,\r\n border: \"2px solid #57534e\",\r\n borderRadius: \"2px\",\r\n filter: \"drop-shadow(5px 7px 0 rgba(68, 64, 60, 0.34))\",\r\n padding: \"10px 15px\",\r\n letterSpacing: \"0.04em\",\r\n textAlign: \"left\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"17px\",\r\n animation: animations.slide,\r\n }),\r\n\r\n dossier: createTheme({\r\n background:\r\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\",\r\n color: \"#3f2d1d\",\r\n fontFamily: \"Courier New, monospace\",\r\n fontSize: \"11px\",\r\n fontWeight: 800,\r\n border: \"2px solid #92400e\",\r\n borderRadius: \"1px 8px 1px 8px\",\r\n filter: \"drop-shadow(5px 7px 0 rgba(120, 53, 15, 0.35))\",\r\n padding: \"11px 16px\",\r\n letterSpacing: \"0.08em\",\r\n textTransform: \"uppercase\",\r\n textAlign: \"left\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"17px\",\r\n animation: animations.snap,\r\n }),\r\n\r\n medical: createTheme({\r\n background:\r\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\",\r\n color: \"#075985\",\r\n fontFamily: \"Arial, Helvetica, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 700,\r\n border: \"2px solid #38bdf8\",\r\n borderRadius: \"10px\",\r\n filter: \"drop-shadow(0 8px 12px rgba(14, 165, 233, 0.2))\",\r\n padding: \"9px 15px\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"18px\",\r\n animation: animations.soft,\r\n }),\r\n\r\n laboratory: createTheme({\r\n background:\r\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)\",\r\n color: \"#a5f3fc\",\r\n fontFamily: \"Roboto Mono, Consolas, monospace\",\r\n fontSize: \"11px\",\r\n fontWeight: 600,\r\n border: \"1px solid #22d3ee\",\r\n borderRadius: \"7px\",\r\n filter: \"drop-shadow(0 0 7px rgba(34, 211, 238, 0.45))\",\r\n padding: \"9px 14px\",\r\n letterSpacing: \"0.04em\",\r\n textAlign: \"left\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"16px\",\r\n animation: animations.blur,\r\n style: {\r\n backgroundSize: \"10px 10px\",\r\n },\r\n }),\r\n\r\n circuit: createTheme({\r\n background:\r\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\",\r\n color: \"#bbf7d0\",\r\n fontFamily: \"Consolas, monospace\",\r\n fontSize: \"11px\",\r\n fontWeight: 700,\r\n border: \"2px solid #22c55e\",\r\n borderRadius: \"5px\",\r\n filter: \"drop-shadow(0 0 7px rgba(34, 197, 94, 0.55))\",\r\n padding: \"9px 14px\",\r\n letterSpacing: \"0.05em\",\r\n textShadow: \"0 0 4px rgba(34, 197, 94, 0.75)\",\r\n arrowSize: \"8px\",\r\n arrowWidth: \"16px\",\r\n animation: animations.snap,\r\n }),\r\n\r\n galaxy: createTheme({\r\n background:\r\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\",\r\n color: \"#f5f3ff\",\r\n fontFamily: \"Trebuchet MS, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 600,\r\n border: \"1px solid #8b5cf6\",\r\n borderRadius: \"18px\",\r\n filter: \"drop-shadow(0 0 9px rgba(139, 92, 246, 0.62)) drop-shadow(0 9px 16px rgba(9, 5, 31, 0.6))\",\r\n padding: \"10px 16px\",\r\n textShadow: \"0 0 5px rgba(196, 181, 253, 0.8)\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"20px\",\r\n animation: animations.blur,\r\n }),\r\n\r\n aurora: createTheme({\r\n background:\r\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)\",\r\n color: \"#f0fdfa\",\r\n fontFamily: \"Segoe UI, Arial, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 600,\r\n border: \"1px solid rgba(153, 246, 228, 0.6)\",\r\n borderRadius: \"20px 8px 20px 8px\",\r\n filter: \"drop-shadow(0 10px 17px rgba(49, 46, 129, 0.48))\",\r\n padding: \"10px 16px\",\r\n backdropFilter: \"blur(8px)\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"21px\",\r\n animation: animations.blur,\r\n }),\r\n\r\n oceanDepths: createTheme({\r\n background:\r\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)\",\r\n color: \"#cffafe\",\r\n fontFamily: \"Trebuchet MS, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 600,\r\n border: \"1px solid #0e7490\",\r\n borderRadius: \"4px 20px 4px 20px\",\r\n filter: \"drop-shadow(0 10px 16px rgba(2, 6, 23, 0.56)) drop-shadow(0 0 6px rgba(34, 211, 238, 0.3))\",\r\n padding: \"10px 16px\",\r\n arrowSize: \"10px\",\r\n arrowWidth: \"19px\",\r\n animation: animations.slide,\r\n }),\r\n\r\n coralReef: createTheme({\r\n background:\r\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)\",\r\n color: \"#fff7ed\",\r\n fontFamily: \"Trebuchet MS, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 700,\r\n border: \"2px solid #fdba74\",\r\n borderRadius: \"18px 8px 14px 5px\",\r\n filter: \"drop-shadow(0 9px 14px rgba(14, 116, 144, 0.4))\",\r\n padding: \"9px 16px\",\r\n textShadow: \"0 1px 2px rgba(12, 74, 110, 0.8)\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"21px\",\r\n animation: animations.bounce,\r\n }),\r\n\r\n forest: createTheme({\r\n background:\r\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)\",\r\n color: \"#dcfce7\",\r\n fontFamily: \"Georgia, serif\",\r\n fontSize: \"13px\",\r\n fontWeight: 600,\r\n border: \"2px solid #4d7c0f\",\r\n borderRadius: \"13px 4px 17px 6px\",\r\n filter: \"drop-shadow(0 9px 14px rgba(5, 46, 22, 0.5))\",\r\n padding: \"9px 16px\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"19px\",\r\n animation: animations.slide,\r\n }),\r\n\r\n moss: createTheme({\r\n background:\r\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)\",\r\n color: \"#ecfccb\",\r\n fontFamily: \"Palatino Linotype, serif\",\r\n fontSize: \"13px\",\r\n fontWeight: 600,\r\n border: \"2px dotted #84cc16\",\r\n borderRadius: \"18px 7px 14px 10px\",\r\n filter: \"drop-shadow(0 8px 13px rgba(26, 46, 5, 0.5))\",\r\n padding: \"10px 16px\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"20px\",\r\n animation: animations.blur,\r\n }),\r\n\r\n desert: createTheme({\r\n background:\r\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)\",\r\n color: \"#78350f\",\r\n fontFamily: \"Georgia, serif\",\r\n fontSize: \"13px\",\r\n fontWeight: 700,\r\n border: \"2px solid #b45309\",\r\n borderRadius: \"22px 22px 7px 7px\",\r\n filter: \"drop-shadow(0 9px 13px rgba(180, 83, 9, 0.32))\",\r\n padding: \"10px 16px\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"21px\",\r\n animation: animations.soft,\r\n }),\r\n\r\n snow: createTheme({\r\n background:\r\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)\",\r\n color: \"#0c4a6e\",\r\n fontFamily: \"Helvetica Neue, Arial, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 600,\r\n border: \"2px solid #ffffff\",\r\n borderRadius: \"20px\",\r\n filter: \"drop-shadow(0 8px 13px rgba(14, 116, 144, 0.22))\",\r\n padding: \"10px 16px\",\r\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.9)\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"20px\",\r\n animation: animations.blur,\r\n }),\r\n\r\n chrome: createTheme({\r\n background:\r\n \"linear-gradient(180deg, #ffffff 0%, #a1a1aa 18%, #f4f4f5 38%, #52525b 52%, #d4d4d8 72%, #71717a 100%)\",\r\n color: \"#18181b\",\r\n fontFamily: \"Arial Black, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 900,\r\n border: \"2px solid #27272a\",\r\n borderRadius: \"10px\",\r\n filter: \"drop-shadow(0 8px 12px rgba(24, 24, 27, 0.45))\",\r\n padding: \"9px 16px\",\r\n letterSpacing: \"0.04em\",\r\n textShadow: \"0 1px 0 #ffffff\",\r\n textTransform: \"uppercase\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"20px\",\r\n animation: animations.flip,\r\n }),\r\n\r\n goldFoil: createTheme({\r\n background:\r\n \"linear-gradient(115deg, #713f12 0%, #facc15 18%, #fef08a 32%, #ca8a04 52%, #fef9c3 70%, #a16207 100%)\",\r\n color: \"#422006\",\r\n fontFamily: \"Palatino Linotype, serif\",\r\n fontSize: \"13px\",\r\n fontWeight: 800,\r\n border: \"2px solid #713f12\",\r\n borderRadius: \"5px 16px 5px 16px\",\r\n filter: \"drop-shadow(0 9px 14px rgba(113, 63, 18, 0.45))\",\r\n padding: \"10px 17px\",\r\n letterSpacing: \"0.04em\",\r\n textShadow: \"0 1px 0 rgba(255, 255, 255, 0.55)\",\r\n arrowSize: \"10px\",\r\n arrowWidth: \"21px\",\r\n animation: animations.flip,\r\n style: {\r\n fontVariantCaps: \"small-caps\",\r\n },\r\n }),\r\n\r\n bronze: createTheme({\r\n background:\r\n \"repeating-linear-gradient(115deg, rgba(255, 255, 255, 0.08) 0 1px, transparent 1px 5px), linear-gradient(135deg, #d97706, #78350f)\",\r\n color: \"#ffedd5\",\r\n fontFamily: \"Georgia, serif\",\r\n fontSize: \"13px\",\r\n fontWeight: 700,\r\n border: \"2px solid #fdba74\",\r\n borderRadius: \"8px\",\r\n filter: \"drop-shadow(0 9px 14px rgba(120, 53, 15, 0.5))\",\r\n padding: \"9px 16px\",\r\n textShadow: \"0 1px 2px rgba(66, 32, 6, 0.8)\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"19px\",\r\n animation: animations.pop,\r\n }),\r\n\r\n brutalist: createTheme({\r\n background: \"#ffffff\",\r\n color: \"#000000\",\r\n fontFamily: \"Arial Black, Helvetica, sans-serif\",\r\n fontSize: \"12px\",\r\n fontWeight: 900,\r\n border: \"4px solid #000000\",\r\n borderRadius: \"0px\",\r\n filter: \"drop-shadow(7px 7px 0 #ef4444)\",\r\n padding: \"10px 16px\",\r\n letterSpacing: \"-0.03em\",\r\n textTransform: \"uppercase\",\r\n textAlign: \"left\",\r\n arrowSize: \"11px\",\r\n arrowWidth: \"19px\",\r\n animation: animations.snap,\r\n }),\r\n\r\n chalkboard: createTheme({\r\n background:\r\n \"repeating-linear-gradient(175deg, rgba(255, 255, 255, 0.018) 0, rgba(255, 255, 255, 0.018) 2px, transparent 2px, transparent 7px), #163a2c\",\r\n color: \"#f5f5dc\",\r\n fontFamily: \"Comic Sans MS, Chalkboard, cursive\",\r\n fontSize: \"13px\",\r\n fontWeight: 600,\r\n border: \"3px solid #8b5e3c\",\r\n borderRadius: \"2px\",\r\n filter: \"drop-shadow(4px 6px 0 rgba(66, 32, 6, 0.45))\",\r\n padding: \"10px 16px\",\r\n letterSpacing: \"0.025em\",\r\n textShadow: \"0 0 2px rgba(255, 255, 255, 0.55)\",\r\n textAlign: \"left\",\r\n arrowSize: \"9px\",\r\n arrowWidth: \"18px\",\r\n animation: animations.soft,\r\n }),\r\n} satisfies Record<string, ThemeType>;\r\n\r\nexport type PresetsThemeType = keyof typeof presets;\r\n\r\nexport const presetThemeNames = Object.keys(presets) as PresetsThemeType[];\r\n\r\nexport const isPresetTheme = (\r\n value: string | undefined,\r\n): value is PresetsThemeType => {\r\n return Boolean(\r\n value && Object.prototype.hasOwnProperty.call(presets, value),\r\n );\r\n};\r\n","\"use client\";\n\nimport {\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;\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\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\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\n const hideTimerRef = useRef<number | null>(null);\n const firstFrameRef = useRef<number | null>(null);\n const secondFrameRef = useRef<number | null>(null);\n const phaseRef = useRef<TooltipPhase>(\"hidden\");\n const pendingHideRef = useRef(false);\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 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(\n preferredPlacement,\n rect,\n );\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 removeTooltip = useCallback(() => {\n clearHideTimer();\n clearEnterFrames();\n pendingHideRef.current = false;\n updatePhase(\"hidden\");\n }, [clearEnterFrames, clearHideTimer, 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 clearHideTimer();\n\n if (immediate) {\n runHide();\n return;\n }\n\n hideTimerRef.current = window.setTimeout(() => {\n hideTimerRef.current = null;\n runHide();\n }, resolvedHideDelay);\n },\n [clearHideTimer, resolvedHideDelay, runHide],\n );\n\n const showTooltip = useCallback(() => {\n if (!anchor || disabled) {\n return;\n }\n\n clearHideTimer();\n clearEnterFrames();\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 }, [anchor, clearEnterFrames, clearHideTimer, disabled, updatePhase]);\n\n const keepTooltipOpen = useCallback(() => {\n if (!interactive || disabled) {\n return;\n }\n\n clearHideTimer();\n pendingHideRef.current = false;\n\n if (phaseRef.current === \"leaving\") {\n updatePhase(\"visible\");\n }\n }, [clearHideTimer, disabled, interactive, updatePhase]);\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 if (!anchor) {\n removeTooltip();\n return;\n }\n\n const onPointerEnter = (event: PointerEvent) => {\n if (event.pointerType === \"touch\") {\n return;\n }\n\n showTooltip();\n };\n\n const onPointerLeave = (event: PointerEvent) => {\n if (event.pointerType === \"touch\") {\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n const tooltip = tooltipRef.current;\n\n if (\n interactive &&\n relatedTarget instanceof Node &&\n tooltip?.contains(relatedTarget)\n ) {\n keepTooltipOpen();\n return;\n }\n\n hideTooltip(false);\n };\n\n const onPointerDown = (event: PointerEvent) => {\n if (event.pointerType !== \"touch\") {\n return;\n }\n\n if (\n phaseRef.current === \"hidden\" ||\n phaseRef.current === \"leaving\"\n ) {\n showTooltip();\n } else {\n hideTooltip(true);\n }\n };\n\n const onFocusIn = () => {\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(\"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(\"focusin\", onFocusIn);\n anchor.removeEventListener(\"focusout\", onFocusOut);\n\n clearHideTimer();\n clearEnterFrames();\n };\n }, [\n anchor,\n clearEnterFrames,\n clearHideTimer,\n hideTooltip,\n interactive,\n keepTooltipOpen,\n removeTooltip,\n showTooltip,\n ]);\n\n useEffect(() => {\n if (!interactive || !mounted) {\n return;\n }\n\n const tooltip = tooltipRef.current;\n\n if (!tooltip) {\n return;\n }\n\n const onPointerEnter = (event: PointerEvent) => {\n if (event.pointerType === \"touch\") {\n return;\n }\n\n keepTooltipOpen();\n };\n\n const onPointerLeave = (event: PointerEvent) => {\n if (event.pointerType === \"touch\") {\n return;\n }\n\n const relatedTarget = event.relatedTarget;\n\n if (\n relatedTarget instanceof Node &&\n anchor?.contains(relatedTarget)\n ) {\n keepTooltipOpen();\n return;\n }\n\n hideTooltip(false);\n };\n\n const onFocusIn = () => {\n keepTooltipOpen();\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 mounted,\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 hideTooltip(true);\n };\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") {\n hideTooltip(true);\n }\n };\n\n document.addEventListener(\n \"pointerdown\",\n onDocumentPointerDown,\n true,\n );\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 }, [\n anchor,\n calculatePosition,\n hideTooltip,\n interactive,\n phase,\n ]);\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 { TooltipPlacement } 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};\n\ntype TooltipProviderProps = {\n children: ReactNode;\n defaultRenderPosition?: TooltipPlacement;\n selectTheme?: PresetsThemeType;\n customTheme?: ThemeType;\n animation?: TooltipAnimationOptions;\n};\n\nconst DEFAULT_TOOLTIP_VALUES: TooltipDefaults = {\n defaultRenderPosition: \"top\",\n selectTheme: \"primary\",\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}: TooltipProviderProps) => {\n const value = useMemo<TooltipDefaults>(() => {\n return {\n defaultRenderPosition,\n selectTheme,\n customTheme,\n animation,\n };\n }, [animation, customTheme, defaultRenderPosition, selectTheme]);\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"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ssaprt/tooltip",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A customizable React tooltip library with rich content, interactive tooltips, animations, SVG surfaces, and built-in themes.",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"module": "dist/index.mjs",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"sideEffects": [
|
|
9
|
+
"*.css",
|
|
10
|
+
"dist/*.css"
|
|
11
|
+
],
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.mjs",
|
|
16
|
+
"require": "./dist/index.js"
|
|
17
|
+
},
|
|
18
|
+
"./style.css": "./dist/index.css"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"README.md",
|
|
23
|
+
"LICENSE"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsup",
|
|
27
|
+
"dev": "tsup --watch",
|
|
28
|
+
"push": "npm run build && npx yalc push"
|
|
29
|
+
},
|
|
30
|
+
"keywords": [
|
|
31
|
+
"tooltip",
|
|
32
|
+
"react",
|
|
33
|
+
"next"
|
|
34
|
+
],
|
|
35
|
+
"author": "ssaprt (Denis Ukhan)",
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"type": "commonjs",
|
|
38
|
+
"peerDependencies": {
|
|
39
|
+
"react": ">=18"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/react": "^19.2.17",
|
|
43
|
+
"@types/react-dom": "^19.2.3",
|
|
44
|
+
"react": "^19.2.7",
|
|
45
|
+
"tsup": "^8.5.1",
|
|
46
|
+
"typescript": "^6.0.3"
|
|
47
|
+
}
|
|
48
|
+
}
|