@tent-official/react-walkthrough 1.1.56 → 1.1.58
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 +9 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -536,6 +536,7 @@ var WalkthroughOverlay = ({
|
|
|
536
536
|
const nextBtnRef = react.useRef(null);
|
|
537
537
|
const popoverRef = react.useRef(null);
|
|
538
538
|
const [popoverPos, setPopoverPos] = react.useState(null);
|
|
539
|
+
const [popoverHidden, setPopoverHidden] = react.useState(false);
|
|
539
540
|
const displayStepRef = react.useRef(null);
|
|
540
541
|
const displayPosRef = react.useRef(null);
|
|
541
542
|
const [validSteps, setValidSteps] = react.useState([]);
|
|
@@ -663,6 +664,11 @@ var WalkthroughOverlay = ({
|
|
|
663
664
|
nextBtnRef.current.focus();
|
|
664
665
|
}
|
|
665
666
|
}, [activeTour == null ? void 0 : activeTour.currentStep, popoverPos]);
|
|
667
|
+
react.useEffect(() => {
|
|
668
|
+
if (popoverHidden && !isAnimating) {
|
|
669
|
+
setPopoverHidden(false);
|
|
670
|
+
}
|
|
671
|
+
}, [popoverHidden, isAnimating]);
|
|
666
672
|
if (!activeTour) return null;
|
|
667
673
|
if (_activeOverlayId !== null && _activeOverlayId !== instanceIdRef.current) {
|
|
668
674
|
return null;
|
|
@@ -756,6 +762,7 @@ var WalkthroughOverlay = ({
|
|
|
756
762
|
if (isLast) {
|
|
757
763
|
completeTour();
|
|
758
764
|
} else {
|
|
765
|
+
setPopoverHidden(true);
|
|
759
766
|
const nextStep = validSteps[currentValidPos + 1];
|
|
760
767
|
setGlobalState((s) => ({
|
|
761
768
|
...s,
|
|
@@ -765,6 +772,7 @@ var WalkthroughOverlay = ({
|
|
|
765
772
|
};
|
|
766
773
|
const prev = () => {
|
|
767
774
|
if (currentValidPos > 0) {
|
|
775
|
+
setPopoverHidden(true);
|
|
768
776
|
const prevStep = validSteps[currentValidPos - 1];
|
|
769
777
|
setGlobalState((s) => ({
|
|
770
778
|
...s,
|
|
@@ -777,7 +785,7 @@ var WalkthroughOverlay = ({
|
|
|
777
785
|
};
|
|
778
786
|
const popoverWidth = clampSize(step.width, window.innerWidth);
|
|
779
787
|
const popoverHeight = step.height ? clampSize(step.height, window.innerHeight) : void 0;
|
|
780
|
-
const popoverReady = popoverPos && !isAnimating;
|
|
788
|
+
const popoverReady = popoverPos && !isAnimating && !popoverHidden;
|
|
781
789
|
if (popoverReady) {
|
|
782
790
|
displayStepRef.current = {
|
|
783
791
|
step,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/index.js","../src/styles/index.js","../src/WalkthroughOverlay.js"],"names":["useState","useEffect","forwardRef","jsx","useRef","useCallback","el","_a","createPortal","jsxs","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { useState, useEffect } from \"react\";\n\nconst listeners = new Set();\nlet globalState = {\n activeTour: null,\n lastRect: null,\n};\n\nconst notify = () => {\n listeners.forEach((fn) => fn({ ...globalState }));\n};\n\nconst setGlobalState = (updater) => {\n globalState =\n typeof updater === \"function\"\n ? updater(globalState)\n : { ...globalState, ...updater };\n notify();\n};\n\nconst useGlobalState = () => {\n const [state, setState] = useState(globalState);\n useEffect(() => {\n const handler = (s) => setState(s);\n listeners.add(handler);\n return () => listeners.delete(handler);\n }, []);\n return state;\n};\n\nconst getStorageKey = (storageSuffix) => {\n return storageSuffix ? `walkthrough-done:${storageSuffix}` : \"walkthrough-done\";\n};\n\nconst getStorageData = (storageSuffix) => {\n try {\n return JSON.parse(localStorage.getItem(getStorageKey(storageSuffix)) || \"{}\");\n } catch {\n return {};\n }\n};\n\nconst markDone = (storageSuffix, name) => {\n const key = getStorageKey(storageSuffix);\n const data = getStorageData(storageSuffix);\n data[name] = true;\n localStorage.setItem(key, JSON.stringify(data));\n window.dispatchEvent(new Event(\"walkthrough-done\"));\n};\n\nconst isDone = (storageSuffix, name) => {\n const data = getStorageData(storageSuffix);\n return data[name] === true;\n};\n\nconst isAnyDepDone = (storageSuffix, deps) => {\n if (!deps || deps.length === 0) return true;\n return deps.some((d) => isDone(storageSuffix, d));\n};\n\nconst resetWalkthrough = ({ storageSuffix = \"\", walkthroughList = [] } = {}) => {\n const key = getStorageKey(storageSuffix);\n const data = getStorageData(storageSuffix);\n walkthroughList.forEach((n) => {\n delete data[n];\n });\n localStorage.setItem(key, JSON.stringify(data));\n // Clear last highlight position so replayed tours start fresh\n globalState = { ...globalState, lastRect: null };\n notify();\n window.dispatchEvent(new Event(\"walkthrough-done\"));\n};\n\nconst easeOutCubic = (t) => {\n return 1 - Math.pow(1 - t, 3);\n};\n\nconst lerp = (a, b, t) => {\n return a + (b - a) * t;\n};\n\nexport {\n globalState,\n setGlobalState,\n useGlobalState,\n markDone,\n isDone,\n isAnyDepDone,\n resetWalkthrough,\n easeOutCubic,\n lerp,\n};\n","import React, { forwardRef } from \"react\";\n\nconst STYLE_ID = \"wt-keyframes\";\n\nexport const injectKeyframes = () => {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = `\n @keyframes wt-pop-in {\n from { opacity: 0; transform: translateY(10px) scale(0.96); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes wt-fade-slide-in {\n from { opacity: 0; transform: translateX(12px); }\n to { opacity: 1; transform: translateX(0); }\n }\n .wt-overlay-wrap svg { display: block; width: 100%; height: 100%; }\n .wt-btn { border: none; border-radius: 8px; padding: 7px 16px; font-size: 13px; font-weight: 600; cursor: pointer; transition: all 0.15s ease; outline: none; font-family: inherit; }\n .wt-btn:hover { opacity: 0.85; }\n .wt-btn-next:hover { box-shadow: 0 4px 12px rgba(79,70,229,0.4); transform: translateY(-1px); }\n .wt-btn-next:active { transform: translateY(0); }\n `;\n document.head.appendChild(style);\n};\n\nexport const OverlayWrapper = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} className=\"wt-overlay-wrap\" style={{\n position: \"fixed\", inset: 0, zIndex: 10001,\n pointerEvents: \"none\", width: \"100vw\", height: \"100vh\", ...style,\n }} {...props}>{children}</div>\n));\n\nexport const ClickLayer = forwardRef(({ style, ...props }, ref) => (\n <div ref={ref} style={{\n position: \"fixed\", inset: 0, zIndex: 10000, cursor: \"default\", ...style,\n }} {...props} />\n));\n\nexport const PopoverContainer = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n position: \"fixed\", zIndex: 99999, background: \"#fff\",\n boxShadow: \"0 12px 40px rgba(0,0,0,0.18), 0 2px 10px rgba(0,0,0,0.06)\",\n animation: \"wt-pop-in 0.28s cubic-bezier(0.34, 1.56, 0.64, 1)\",\n ...style,\n }} {...props}>{children}</div>\n));\n\nexport const PopoverBody = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n animation: \"wt-fade-slide-in 0.3s ease-out\", ...style,\n }} {...props}>{children}</div>\n));\n\nexport const PopoverTitle = forwardRef(({ style, children, ...props }, ref) => (\n <h3 ref={ref} style={{\n fontSize: 15, fontWeight: 700, color: \"#1a1a2e\",\n margin: \"0 0 10px\", lineHeight: 1.3, whiteSpace: \"pre-line\", ...style,\n }} {...props}>{children}</h3>\n));\n\nexport const DescriptionScrollArea = forwardRef(({ $height, style, children, ...props }, ref) => {\n const extra = $height && $height !== \"auto\" ? {\n maxHeight: typeof $height === \"number\" ? $height : $height,\n overflowY: \"auto\",\n } : {};\n return <div ref={ref} style={{ ...extra, ...style }} {...props}>{children}</div>;\n});\n\nexport const DescriptionBlock = forwardRef(({ $direction = \"row\", style, children, ...props }, ref) => (\n <div ref={ref} style={{\n display: \"flex\", flexDirection: $direction,\n fontSize: 13, color: \"#666\", lineHeight: 1.6, margin: \"0 0 4px\",\n ...($direction === \"column\" ? { gap: 2 } : { alignItems: \"baseline\", gap: 4 }),\n ...style,\n }} {...props}>{children}</div>\n));\n\nexport const DescriptionTitle = forwardRef(({ style, children, ...props }, ref) => (\n <span ref={ref} style={{\n fontWeight: 600, color: \"#333\", whiteSpace: \"pre-line\", ...style,\n }} {...props}>{children}</span>\n));\n\nexport const PopoverFooter = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n marginTop: 16, gap: 8, ...style,\n }} {...props}>{children}</div>\n));\n\nexport const StepCounter = forwardRef(({ style, children, ...props }, ref) => (\n <span ref={ref} style={{\n fontSize: 13, fontWeight: 600, color: \"#a1a1aa\", ...style,\n }} {...props}>{children}</span>\n));\n\n\nexport const ButtonGroup = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{ display: \"flex\", gap: 6, ...style }} {...props}>{children}</div>\n));\n\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport {\n globalState,\n setGlobalState,\n useGlobalState,\n markDone,\n isDone,\n isAnyDepDone,\n resetWalkthrough,\n easeOutCubic,\n lerp,\n} from \"./utils\";\n\nimport {\n injectKeyframes,\n OverlayWrapper,\n ClickLayer,\n PopoverContainer,\n PopoverBody,\n PopoverTitle,\n DescriptionScrollArea,\n DescriptionBlock,\n DescriptionTitle,\n PopoverFooter,\n StepCounter,\n ButtonGroup,\n} from \"./styles\";\n\nexport { resetWalkthrough };\n\nconst resolveElId = (id) => (typeof id === \"string\" && id.startsWith(\"#\") ? id.slice(1) : id);\n\n// Singleton guard: only one WalkthroughOverlay instance should render at a time.\n// Each instance gets a unique ID on mount. The first instance to mount \"wins\" and\n// all subsequent instances return null until the first one unmounts.\nlet _overlayInstanceCounter = 0;\nlet _activeOverlayId = null;\n\nexport const useWalkthrough = ({\n name,\n storageSuffix = \"\",\n dependsOn = [],\n steps,\n delay = 0,\n onWalkthroughComplete,\n isShowSkip = true,\n isShowPrev = true,\n isShowStep = true,\n nextLabel = \"Next\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done\",\n containerElement,\n animationSpeed = 350,\n manualTotal,\n initialStep,\n}) => {\n const started = useRef(false);\n const onCompleteRef = useRef(onWalkthroughComplete);\n\n useEffect(() => {\n onCompleteRef.current = onWalkthroughComplete;\n }, [onWalkthroughComplete]);\n\n const start = useCallback(() => {\n if (isDone(storageSuffix, name) || started.current) return;\n started.current = true;\n setGlobalState({\n activeTour: {\n name,\n steps,\n delay,\n currentStep: 0,\n storageSuffix,\n onWalkthroughComplete: onCompleteRef.current,\n isShowSkip,\n isShowPrev,\n isShowStep,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n containerElement,\n animationSpeed,\n manualTotal,\n initialStep,\n },\n });\n }, [\n name,\n steps,\n delay,\n storageSuffix,\n isShowSkip,\n isShowPrev,\n isShowStep,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n containerElement,\n animationSpeed,\n manualTotal,\n initialStep,\n ]);\n\n useEffect(() => {\n const check = () => {\n if (isDone(storageSuffix, name)) return;\n started.current = false;\n if (isAnyDepDone(storageSuffix, dependsOn) && !globalState.activeTour) {\n start();\n }\n };\n\n check();\n\n window.addEventListener(\"walkthrough-done\", check);\n return () => window.removeEventListener(\"walkthrough-done\", check);\n }, [name, storageSuffix, dependsOn, start]);\n\n return { start };\n};\n\nconst calcTransitionMs = (from, to, baseMs) => {\n const dx = (to.left + to.width / 2) - (from.left + from.width / 2);\n const dy = (to.top + to.height / 2) - (from.top + from.height / 2);\n const dist = Math.sqrt(dx * dx + dy * dy);\n const diagonal = Math.sqrt(window.innerWidth ** 2 + window.innerHeight ** 2);\n const ratio = Math.min(dist / diagonal, 1);\n const minMs = baseMs * 0.5;\n return Math.round(minMs + ratio * baseMs);\n};\n\nconst waitForScrollEnd = (container, timeoutMs = 400) => {\n return new Promise((resolve) => {\n let resolved = false;\n let scrollEndTimer = null;\n\n const done = () => {\n if (resolved) return;\n resolved = true;\n container.removeEventListener(\"scroll\", onScroll);\n clearTimeout(fallbackTimer);\n clearTimeout(scrollEndTimer);\n resolve();\n };\n\n const onScroll = () => {\n clearTimeout(scrollEndTimer);\n scrollEndTimer = setTimeout(done, 120);\n };\n\n container.addEventListener(\"scroll\", onScroll);\n\n // Fallback: if no scroll event fires (element already visible), resolve quickly\n const fallbackTimer = setTimeout(done, timeoutMs);\n });\n};\n\nconst useAnimatedRect = (step, baseMs = 350, containerElement, isTourActive = true, tourName = null) => {\n const [displayRect, setDisplayRect] = useState(null);\n const [isAnimating, setIsAnimating] = useState(false);\n const targetRef = useRef(null);\n const currentRef = useRef(null);\n const rafRef = useRef(null);\n const scrollingRef = useRef(false);\n const cleanupRef = useRef(null);\n const prevTourNameRef = useRef(null);\n\n useEffect(() => {\n let cancelled = false;\n\n // Detect tour change: when tourName changes, seed currentRef from lastRect\n // so the highlight animates FROM the previous tour's last position.\n // This handles the case where dependsOn tours chain synchronously\n // (activeTour never becomes null between tours in the same render batch).\n if (tourName && tourName !== prevTourNameRef.current) {\n const savedRect = globalState.lastRect;\n if (savedRect && prevTourNameRef.current !== null) {\n // Only seed from lastRect when transitioning between tours (not on first mount)\n currentRef.current = { ...savedRect };\n // Clear display so highlight doesn't linger at old position during delay\n setDisplayRect(null);\n targetRef.current = null;\n }\n prevTourNameRef.current = tourName;\n }\n\n if (!step) {\n if (!isTourActive) {\n setDisplayRect(null);\n targetRef.current = null;\n currentRef.current = null;\n }\n // Otherwise keep last rect visible so overlay doesn't disappear between step transitions\n setIsAnimating(false);\n scrollingRef.current = false;\n return;\n }\n\n // If we have no starting position yet (first tour ever), try to pick up lastRect.\n if (!currentRef.current) {\n const savedRect = globalState.lastRect;\n if (savedRect) {\n currentRef.current = { ...savedRect };\n }\n }\n\n const containerEl = containerElement\n ? document.getElementById(resolveElId(containerElement))\n : null;\n\n const computeRect = (el) => {\n const r = el.getBoundingClientRect();\n const padding = step.padding ?? 8;\n // Use viewport-relative coords (no window.scrollY/scrollX) because\n // the overlay is position:fixed. This works correctly for elements\n // inside fixed-position containers (drawers, modals) and also for\n // normal page elements.\n return {\n top: r.top - padding,\n left: r.left - padding,\n width: r.width + padding * 2,\n height: r.height + padding * 2,\n };\n };\n\n const startAnimation = (newTarget) => {\n if (cancelled) return;\n\n targetRef.current = newTarget;\n\n if (!currentRef.current) {\n currentRef.current = newTarget;\n setDisplayRect(newTarget);\n setIsAnimating(false);\n return;\n }\n\n const from = { ...currentRef.current };\n const to = newTarget;\n const duration = calcTransitionMs(from, to, baseMs);\n const startTime = performance.now();\n\n setIsAnimating(true);\n\n const tick = (now) => {\n if (cancelled) return;\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = easeOutCubic(progress);\n\n const interpolated = {\n top: lerp(from.top, to.top, eased),\n left: lerp(from.left, to.left, eased),\n width: lerp(from.width, to.width, eased),\n height: lerp(from.height, to.height, eased),\n };\n\n currentRef.current = interpolated;\n setDisplayRect(interpolated);\n\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(tick);\n } else {\n currentRef.current = to;\n setDisplayRect(to);\n setIsAnimating(false);\n }\n };\n\n rafRef.current = requestAnimationFrame(tick);\n };\n\n // Shrink highlight to a tiny point at its center when element is not found.\n // This gives visual feedback that the tour is \"working\" rather than stuck.\n const shrinkHighlight = () => {\n if (!currentRef.current) return;\n const cur = currentRef.current;\n const centerX = cur.left + cur.width / 2;\n const centerY = cur.top + cur.height / 2;\n const shrunkRect = { top: centerY, left: centerX, width: 0, height: 0 };\n startAnimation(shrunkRect);\n };\n\n // Kick off the full flow for a found element: scroll → wait → compute → animate\n const runForElement = (el) => {\n if (cancelled) return;\n\n const compute = () => computeRect(el);\n\n // onLayout only runs AFTER scroll has settled — prevents flicker during scroll\n const onLayout = () => {\n if (scrollingRef.current) return;\n const updated = compute();\n targetRef.current = updated;\n currentRef.current = updated;\n setDisplayRect(updated);\n };\n\n // Mark as animating immediately so popover stays hidden during scroll+animate\n setIsAnimating(true);\n\n // Always use scrollIntoView — browser will scroll all scrollable ancestors\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\", inline: \"nearest\" });\n\n if (containerEl) {\n scrollingRef.current = true;\n waitForScrollEnd(containerEl, baseMs + 150).then(() => {\n scrollingRef.current = false;\n if (cancelled) return;\n startAnimation(compute());\n });\n } else {\n requestAnimationFrame(() => {\n if (cancelled) return;\n startAnimation(compute());\n });\n }\n\n window.addEventListener(\"resize\", onLayout);\n window.addEventListener(\"scroll\", onLayout, true);\n if (containerEl) containerEl.addEventListener(\"scroll\", onLayout);\n\n cleanupRef.current = () => {\n window.removeEventListener(\"resize\", onLayout);\n window.removeEventListener(\"scroll\", onLayout, true);\n if (containerEl) containerEl.removeEventListener(\"scroll\", onLayout);\n };\n };\n\n const el = document.getElementById(resolveElId(step.el));\n\n if (el) {\n // Element found immediately — proceed normally\n runForElement(el);\n } else {\n // Element not found — shrink highlight and wait for it to appear\n setIsAnimating(true);\n shrinkHighlight();\n\n const observer = new MutationObserver(() => {\n const found = document.getElementById(resolveElId(step.el));\n if (found) {\n observer.disconnect();\n if (!cancelled) runForElement(found);\n }\n });\n observer.observe(document.body, { childList: true, subtree: true });\n\n cleanupRef.current = () => observer.disconnect();\n }\n\n return () => {\n cancelled = true;\n scrollingRef.current = false;\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n if (cleanupRef.current) cleanupRef.current();\n };\n }, [step, containerElement, isTourActive, tourName]);\n\n return { rect: displayRect, isAnimating };\n};\n\nconst clampSize = (value, max) => {\n if (value === \"auto\" || value === undefined) return \"auto\";\n const num = typeof value === \"string\" ? parseInt(value, 10) : value;\n const clamped = Math.min(num, max - 12);\n return clamped;\n};\n\nconst EDGE_MARGIN = 8;\n\nconst computePopoverPosition = (rect, popoverW, popoverH, gap, preferred) => {\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n const clampLeft = (left) =>\n Math.max(EDGE_MARGIN, Math.min(left, vw - popoverW - EDGE_MARGIN));\n const clampTop = (top) =>\n Math.max(EDGE_MARGIN, Math.min(top, vh - popoverH - EDGE_MARGIN));\n\n const positions = {\n bottom: {\n top: rect.top + rect.height + gap,\n left: clampLeft(rect.left),\n },\n top: {\n top: rect.top - popoverH - gap,\n left: clampLeft(rect.left),\n },\n right: {\n top: clampTop(rect.top),\n left: rect.left + rect.width + gap,\n },\n left: {\n top: clampTop(rect.top),\n left: rect.left - popoverW - gap,\n },\n };\n\n const fitsInViewport = (pos) =>\n pos.top >= EDGE_MARGIN &&\n pos.left >= EDGE_MARGIN &&\n pos.top + popoverH <= vh - EDGE_MARGIN &&\n pos.left + popoverW <= vw - EDGE_MARGIN;\n\n if (preferred && positions[preferred] && fitsInViewport(positions[preferred])) {\n return positions[preferred];\n }\n\n const order = [\"bottom\", \"top\", \"right\", \"left\"];\n for (const dir of order) {\n if (fitsInViewport(positions[dir])) {\n return positions[dir];\n }\n }\n\n const spaceBottom = vh - (rect.top + rect.height + gap);\n const spaceTop = rect.top - gap;\n const spaceRight = vw - (rect.left + rect.width + gap);\n const spaceLeft = rect.left - gap;\n\n const best = [\n { dir: \"bottom\", space: spaceBottom },\n { dir: \"top\", space: spaceTop },\n { dir: \"right\", space: spaceRight },\n { dir: \"left\", space: spaceLeft },\n ].sort((a, b) => b.space - a.space)[0].dir;\n\n const fallback = positions[best];\n return {\n top: Math.max(EDGE_MARGIN, Math.min(fallback.top, vh - popoverH - EDGE_MARGIN)),\n left: Math.max(EDGE_MARGIN, Math.min(fallback.left, vw - popoverW - EDGE_MARGIN)),\n };\n};\n\n// Lazily create & prepend a dedicated container as the FIRST child of <body>.\n// Being first in DOM order means it sits before any Radix / 3rd-party portals,\n// and we stop pointer events from propagating so Radix never sees them.\nconst WT_CONTAINER_ID = \"wt-portal-root\";\nconst getPortalContainer = () => {\n if (typeof document === \"undefined\") return null;\n let container = document.getElementById(WT_CONTAINER_ID);\n if (!container) {\n container = document.createElement(\"div\");\n container.id = WT_CONTAINER_ID;\n container.style.cssText = \"position:absolute;top:0;left:0;z-index:2147483647;pointer-events:none;\";\n // Prepend so it's BEFORE any Radix portals in DOM\n document.body.prepend(container);\n }\n return container;\n};\n\n// Stop pointer / mouse / touch / focus events from bubbling out of the walkthrough\n// so that Radix's capture-phase \"outside click\" detection never fires.\nconst stopOutsideEvents = (e) => e.stopPropagation();\nconst portalEventHandlers = {\n onPointerDown: stopOutsideEvents,\n onPointerUp: stopOutsideEvents,\n onMouseDown: stopOutsideEvents,\n onMouseUp: stopOutsideEvents,\n onTouchStart: stopOutsideEvents,\n onFocusCapture: stopOutsideEvents,\n};\n\nexport const WalkthroughOverlay = ({\n $popoverPadding = 12,\n $popoverBorderRadius = 8,\n $popoverGap = 12,\n $popoverMinWidth = 275,\n nextColor,\n prevColor,\n skipColor,\n} = {}) => {\n injectKeyframes();\n const { activeTour } = useGlobalState();\n\n // Singleton guard: register this instance on mount, unregister on unmount.\n // The actual guard check is done AFTER all hooks (React rules of hooks).\n const instanceIdRef = useRef(null);\n if (instanceIdRef.current === null) {\n instanceIdRef.current = ++_overlayInstanceCounter;\n }\n\n useEffect(() => {\n const myId = instanceIdRef.current;\n if (_activeOverlayId === null) {\n _activeOverlayId = myId;\n }\n return () => {\n if (_activeOverlayId === myId) {\n _activeOverlayId = null;\n }\n };\n }, []);\n\n const nextBtnRef = useRef(null);\n const popoverRef = useRef(null);\n const [popoverPos, setPopoverPos] = useState(null);\n\n // Snapshot of the step content shown in the popover.\n // Only updates when the popover is ready (not animating), so the user\n // never sees content swap while the popover is still visible / fading out.\n const displayStepRef = useRef(null);\n const displayPosRef = useRef(null);\n\n const [validSteps, setValidSteps] = useState([]);\n const waitingForElsRef = useRef(false);\n\n useEffect(() => {\n if (!activeTour) {\n setValidSteps([]);\n waitingForElsRef.current = false;\n return;\n }\n\n waitingForElsRef.current = true;\n\n const compute = () =>\n activeTour.steps\n .map((s, i) => ({ ...s, _originalIdx: i }))\n .filter((s) => document.getElementById(resolveElId(s.el)));\n\n const found = compute();\n\n if (found.length > 0) {\n setValidSteps(found);\n return;\n }\n\n setValidSteps([]);\n\n const observer = new MutationObserver(() => {\n const updated = compute();\n if (updated.length > 0) {\n waitingForElsRef.current = false;\n setValidSteps(updated);\n observer.disconnect();\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n waitingForElsRef.current = false;\n };\n }, [activeTour]);\n\n const currentOriginalIdx = activeTour?.currentStep ?? 0;\n const currentValidPos = validSteps.findIndex(\n (s) => s._originalIdx === currentOriginalIdx,\n );\n\n const rawStep = currentValidPos !== -1 ? validSteps[currentValidPos] : null;\n\n // --- Delay logic (tour-level, once per tour) ---\n // Track which tour we already handled delay for, so switching tours always re-evaluates.\n const delayDoneForRef = useRef(null); // name of tour whose delay is done\n const [isDelaying, setIsDelaying] = useState(false);\n\n const currentTourName = activeTour?.name ?? null;\n\n useEffect(() => {\n if (!activeTour) {\n // Tour ended — reset\n delayDoneForRef.current = null;\n setIsDelaying(false);\n return;\n }\n\n // If we already handled delay for THIS tour — nothing to do\n if (delayDoneForRef.current === activeTour.name) return;\n\n const ms = activeTour.delay ?? 0;\n\n if (ms <= 0) {\n delayDoneForRef.current = activeTour.name;\n return;\n }\n\n // Start delaying: show overlay, block UI\n setIsDelaying(true);\n const timer = setTimeout(() => {\n delayDoneForRef.current = activeTour.name;\n setIsDelaying(false);\n }, ms);\n\n return () => clearTimeout(timer);\n }, [currentTourName, activeTour]);\n // --- end delay logic ---\n\n const step = isDelaying ? null : rawStep;\n const tourAnimationSpeed = activeTour?.animationSpeed ?? 350;\n const { rect, isAnimating } = useAnimatedRect(step, tourAnimationSpeed, activeTour?.containerElement, !!activeTour, activeTour?.name);\n\n const completeTour = useCallback(() => {\n if (!activeTour) return;\n const { storageSuffix: sk, name: n, onWalkthroughComplete: cb } = activeTour;\n // Save last highlight position so the next tour can animate FROM this point\n setGlobalState({ activeTour: null, lastRect: rect ? { ...rect } : null });\n markDone(sk, n);\n if (cb) cb(n);\n }, [activeTour, rect]);\n\n useEffect(() => {\n if (!activeTour) return;\n if (currentValidPos !== -1) return;\n if (waitingForElsRef.current) return;\n\n if (validSteps.length === 0) {\n completeTour();\n return;\n }\n\n const nextValid = validSteps.find(\n (s) => s._originalIdx > currentOriginalIdx,\n );\n\n if (nextValid) {\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: nextValid._originalIdx },\n }));\n } else {\n completeTour();\n }\n }, [\n activeTour,\n currentValidPos,\n currentOriginalIdx,\n validSteps,\n completeTour,\n ]);\n\n useEffect(() => {\n if (!popoverRef.current || !rect || !step || isAnimating) {\n setPopoverPos(null);\n return;\n }\n\n const targetEl = document.getElementById(resolveElId(step.el));\n if (!targetEl) {\n setPopoverPos(null);\n return;\n }\n\n const targetRect = targetEl.getBoundingClientRect();\n const inViewport =\n targetRect.bottom > 0 &&\n targetRect.top < window.innerHeight &&\n targetRect.right > 0 &&\n targetRect.left < window.innerWidth;\n\n if (!inViewport) {\n setPopoverPos(null);\n return;\n }\n\n const measured = popoverRef.current.getBoundingClientRect();\n const pos = computePopoverPosition(\n rect,\n measured.width,\n measured.height,\n $popoverGap,\n step.position,\n );\n setPopoverPos(pos);\n }, [rect, step, $popoverGap, isAnimating]);\n\n useEffect(() => {\n if (nextBtnRef.current) {\n nextBtnRef.current.focus();\n }\n }, [activeTour?.currentStep, popoverPos]);\n\n if (!activeTour) return null;\n\n // Singleton guard: if another instance already claimed the active slot, this one does nothing.\n // This check is placed after all hooks to comply with React rules of hooks.\n if (_activeOverlayId !== null && _activeOverlayId !== instanceIdRef.current) {\n return null;\n }\n\n // During delay: show overlay only (no highlight, no popover)\n if (isDelaying) {\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n />\n </svg>\n </OverlayWrapper>\n </div>,\n getPortalContainer(),\n );\n }\n\n // If no step and no rect at all, hide everything\n if (!step && !rect) return null;\n\n // If step is loading but we have a previous rect, keep overlay visible with last highlight\n // This prevents the overlay from disappearing during step transitions\n if (!step || !rect) {\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n {rect ? (\n <>\n <defs>\n <mask id=\"wt-mask\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n <rect\n x={rect.left}\n y={rect.top}\n width={rect.width}\n height={rect.height}\n rx={10}\n fill=\"black\"\n />\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n mask=\"url(#wt-mask)\"\n />\n </>\n ) : (\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n />\n )}\n </svg>\n </OverlayWrapper>\n </div>,\n getPortalContainer(),\n );\n }\n\n const totalSteps = validSteps.length;\n const isLast = currentValidPos === totalSteps - 1;\n\n // Display-only step counter values (manualTotal / initialStep)\n const displayInitialStep = activeTour.initialStep ?? 0;\n const displayCurrentStep = currentValidPos + 1 + displayInitialStep;\n const displayTotalSteps = activeTour.manualTotal ?? totalSteps;\n const borderRadius = step.borderRadius ?? 10;\n\n const {\n isShowSkip = true,\n isShowPrev = true,\n isShowStep = true,\n nextLabel: tourNextLabel = \"Next\",\n prevLabel: tourPrevLabel = \"Back\",\n skipLabel: tourSkipLabel = \"Skip\",\n doneLabel = \"Done\",\n } = activeTour;\n\n const nextLabel = step.nextLabel ?? tourNextLabel;\n const prevLabel = step.prevLabel ?? tourPrevLabel;\n const skipLabel = step.skipLabel ?? tourSkipLabel;\n\n const next = () => {\n if (step.isTriggerEl) {\n const triggerTarget = typeof step.isTriggerEl === \"string\"\n ? document.getElementById(resolveElId(step.isTriggerEl))\n : document.getElementById(resolveElId(step.el));\n if (triggerTarget) triggerTarget.click();\n }\n\n if (isLast) {\n completeTour();\n } else {\n const nextStep = validSteps[currentValidPos + 1];\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: nextStep._originalIdx },\n }));\n }\n };\n\n const prev = () => {\n if (currentValidPos > 0) {\n const prevStep = validSteps[currentValidPos - 1];\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: prevStep._originalIdx },\n }));\n }\n };\n\n const skip = () => {\n completeTour();\n };\n\n const popoverWidth = clampSize(step.width, window.innerWidth);\n const popoverHeight = step.height\n ? clampSize(step.height, window.innerHeight)\n : undefined;\n\n const popoverReady = popoverPos && !isAnimating;\n\n // Snapshot the popover content so it only updates when the popover is\n // actually visible. This prevents the user from seeing content swap\n // while the highlight is still animating to the next element.\n if (popoverReady) {\n displayStepRef.current = {\n step,\n nextLabel,\n prevLabel,\n skipLabel,\n isShowSkip,\n isShowPrev,\n isShowStep,\n doneLabel,\n isLast,\n currentValidPos,\n displayCurrentStep,\n displayTotalSteps,\n popoverHeight,\n };\n displayPosRef.current = currentValidPos;\n }\n\n const ds = displayStepRef.current;\n\n // When animating: render popover offscreen so it can be measured by the\n // position-calculation effect, but keep it invisible to the user.\n // When ready: show at the computed position with the pop-in animation.\n const popoverStyle = popoverReady\n ? {\n top: popoverPos.top,\n left: popoverPos.left,\n width: popoverWidth,\n minWidth: $popoverMinWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\n }\n : {\n position: \"fixed\",\n top: -9999,\n left: -9999,\n opacity: 0,\n pointerEvents: \"none\",\n width: popoverWidth,\n minWidth: $popoverMinWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\n animation: \"none\",\n };\n\n // Use snapshot content for the popover; fall back to live step if no snapshot yet (first render).\n const pStep = ds ? ds.step : step;\n const pNextLabel = ds ? ds.nextLabel : nextLabel;\n const pPrevLabel = ds ? ds.prevLabel : prevLabel;\n const pSkipLabel = ds ? ds.skipLabel : skipLabel;\n const pIsShowSkip = ds ? ds.isShowSkip : isShowSkip;\n const pIsShowPrev = ds ? ds.isShowPrev : isShowPrev;\n const pIsShowStep = ds ? ds.isShowStep : isShowStep;\n const pDoneLabel = ds ? ds.doneLabel : doneLabel;\n const pIsLast = ds ? ds.isLast : isLast;\n const pCurrentValidPos = ds ? ds.currentValidPos : currentValidPos;\n const pDisplayCurrentStep = ds ? ds.displayCurrentStep : displayCurrentStep;\n const pDisplayTotalSteps = ds ? ds.displayTotalSteps : displayTotalSteps;\n const pPopoverHeight = ds ? ds.popoverHeight : popoverHeight;\n\n const overlay = (\n <>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n <defs>\n <mask id=\"wt-mask\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n <rect\n x={rect.left}\n y={rect.top}\n width={rect.width}\n height={rect.height}\n rx={borderRadius}\n fill=\"black\"\n />\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n mask=\"url(#wt-mask)\"\n />\n </svg>\n </OverlayWrapper>\n\n <PopoverContainer ref={popoverRef} style={popoverStyle}>\n <PopoverBody>\n <div style={{display: \"flex\",flexDirection: \"row\", justifyContent: \"space-between\"}}>\n {pStep.title ? <PopoverTitle>{pStep.title}</PopoverTitle>:''}\n {(pStep.isShowStep ?? pIsShowStep) && (\n <span style={{color: \"#a1a1aa\" ,fontSize: \"12px\", fontWeight: \"400\"}}>{pDisplayCurrentStep}/{pDisplayTotalSteps}</span>\n )}\n </div>\n <DescriptionScrollArea $height={pPopoverHeight}>\n {Array.isArray(pStep.description) &&\n pStep.description.map((d, i) => (\n <DescriptionBlock key={i} $direction={d.direction}>\n {d.title && <DescriptionTitle>{d.title}: </DescriptionTitle>}\n <span style={{ whiteSpace: \"pre-line\" }}>{d.description}</span>\n </DescriptionBlock>\n ))}\n </DescriptionScrollArea>\n </PopoverBody>\n\n <PopoverFooter>\n <StepCounter>\n {pIsShowSkip && (\n <button\n className=\"wt-btn\"\n style={{ background: skipColor || \"transparent\", color: skipColor ? \"#fff\" : \"#a1a1aa\" }}\n onClick={skip}\n >\n {pSkipLabel}\n </button>\n )}\n </StepCounter>\n\n <ButtonGroup>\n {(pStep.isShowPrev ?? pIsShowPrev) && pCurrentValidPos > 0 && (\n <button\n className=\"wt-btn\"\n style={{ background: prevColor || \"#f4f4f5\", color: prevColor ? \"#fff\" : \"#3f3f46\" }}\n onClick={prev}\n >\n {pPrevLabel}\n </button>\n )}\n <button\n ref={nextBtnRef}\n className=\"wt-btn wt-btn-next\"\n style={{ background: nextColor || \"#000\", color: \"#fff\", boxShadow: \"0 2px 8px rgba(0,0,0,0.3)\" }}\n onClick={next}\n >\n {pIsLast ? pDoneLabel : pNextLabel}\n </button>\n </ButtonGroup>\n </PopoverFooter>\n </PopoverContainer>\n </>\n );\n\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n {overlay}\n </div>,\n getPortalContainer(),\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/index.js","../src/styles/index.js","../src/WalkthroughOverlay.js"],"names":["useState","useEffect","forwardRef","jsx","useRef","useCallback","el","_a","createPortal","jsxs","Fragment"],"mappings":"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","file":"index.js","sourcesContent":["import { useState, useEffect } from \"react\";\n\nconst listeners = new Set();\nlet globalState = {\n activeTour: null,\n lastRect: null,\n};\n\nconst notify = () => {\n listeners.forEach((fn) => fn({ ...globalState }));\n};\n\nconst setGlobalState = (updater) => {\n globalState =\n typeof updater === \"function\"\n ? updater(globalState)\n : { ...globalState, ...updater };\n notify();\n};\n\nconst useGlobalState = () => {\n const [state, setState] = useState(globalState);\n useEffect(() => {\n const handler = (s) => setState(s);\n listeners.add(handler);\n return () => listeners.delete(handler);\n }, []);\n return state;\n};\n\nconst getStorageKey = (storageSuffix) => {\n return storageSuffix ? `walkthrough-done:${storageSuffix}` : \"walkthrough-done\";\n};\n\nconst getStorageData = (storageSuffix) => {\n try {\n return JSON.parse(localStorage.getItem(getStorageKey(storageSuffix)) || \"{}\");\n } catch {\n return {};\n }\n};\n\nconst markDone = (storageSuffix, name) => {\n const key = getStorageKey(storageSuffix);\n const data = getStorageData(storageSuffix);\n data[name] = true;\n localStorage.setItem(key, JSON.stringify(data));\n window.dispatchEvent(new Event(\"walkthrough-done\"));\n};\n\nconst isDone = (storageSuffix, name) => {\n const data = getStorageData(storageSuffix);\n return data[name] === true;\n};\n\nconst isAnyDepDone = (storageSuffix, deps) => {\n if (!deps || deps.length === 0) return true;\n return deps.some((d) => isDone(storageSuffix, d));\n};\n\nconst resetWalkthrough = ({ storageSuffix = \"\", walkthroughList = [] } = {}) => {\n const key = getStorageKey(storageSuffix);\n const data = getStorageData(storageSuffix);\n walkthroughList.forEach((n) => {\n delete data[n];\n });\n localStorage.setItem(key, JSON.stringify(data));\n // Clear last highlight position so replayed tours start fresh\n globalState = { ...globalState, lastRect: null };\n notify();\n window.dispatchEvent(new Event(\"walkthrough-done\"));\n};\n\nconst easeOutCubic = (t) => {\n return 1 - Math.pow(1 - t, 3);\n};\n\nconst lerp = (a, b, t) => {\n return a + (b - a) * t;\n};\n\nexport {\n globalState,\n setGlobalState,\n useGlobalState,\n markDone,\n isDone,\n isAnyDepDone,\n resetWalkthrough,\n easeOutCubic,\n lerp,\n};\n","import React, { forwardRef } from \"react\";\n\nconst STYLE_ID = \"wt-keyframes\";\n\nexport const injectKeyframes = () => {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = `\n @keyframes wt-pop-in {\n from { opacity: 0; transform: translateY(10px) scale(0.96); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes wt-fade-slide-in {\n from { opacity: 0; transform: translateX(12px); }\n to { opacity: 1; transform: translateX(0); }\n }\n .wt-overlay-wrap svg { display: block; width: 100%; height: 100%; }\n .wt-btn { border: none; border-radius: 8px; padding: 7px 16px; font-size: 13px; font-weight: 600; cursor: pointer; transition: all 0.15s ease; outline: none; font-family: inherit; }\n .wt-btn:hover { opacity: 0.85; }\n .wt-btn-next:hover { box-shadow: 0 4px 12px rgba(79,70,229,0.4); transform: translateY(-1px); }\n .wt-btn-next:active { transform: translateY(0); }\n `;\n document.head.appendChild(style);\n};\n\nexport const OverlayWrapper = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} className=\"wt-overlay-wrap\" style={{\n position: \"fixed\", inset: 0, zIndex: 10001,\n pointerEvents: \"none\", width: \"100vw\", height: \"100vh\", ...style,\n }} {...props}>{children}</div>\n));\n\nexport const ClickLayer = forwardRef(({ style, ...props }, ref) => (\n <div ref={ref} style={{\n position: \"fixed\", inset: 0, zIndex: 10000, cursor: \"default\", ...style,\n }} {...props} />\n));\n\nexport const PopoverContainer = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n position: \"fixed\", zIndex: 99999, background: \"#fff\",\n boxShadow: \"0 12px 40px rgba(0,0,0,0.18), 0 2px 10px rgba(0,0,0,0.06)\",\n animation: \"wt-pop-in 0.28s cubic-bezier(0.34, 1.56, 0.64, 1)\",\n ...style,\n }} {...props}>{children}</div>\n));\n\nexport const PopoverBody = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n animation: \"wt-fade-slide-in 0.3s ease-out\", ...style,\n }} {...props}>{children}</div>\n));\n\nexport const PopoverTitle = forwardRef(({ style, children, ...props }, ref) => (\n <h3 ref={ref} style={{\n fontSize: 15, fontWeight: 700, color: \"#1a1a2e\",\n margin: \"0 0 10px\", lineHeight: 1.3, whiteSpace: \"pre-line\", ...style,\n }} {...props}>{children}</h3>\n));\n\nexport const DescriptionScrollArea = forwardRef(({ $height, style, children, ...props }, ref) => {\n const extra = $height && $height !== \"auto\" ? {\n maxHeight: typeof $height === \"number\" ? $height : $height,\n overflowY: \"auto\",\n } : {};\n return <div ref={ref} style={{ ...extra, ...style }} {...props}>{children}</div>;\n});\n\nexport const DescriptionBlock = forwardRef(({ $direction = \"row\", style, children, ...props }, ref) => (\n <div ref={ref} style={{\n display: \"flex\", flexDirection: $direction,\n fontSize: 13, color: \"#666\", lineHeight: 1.6, margin: \"0 0 4px\",\n ...($direction === \"column\" ? { gap: 2 } : { alignItems: \"baseline\", gap: 4 }),\n ...style,\n }} {...props}>{children}</div>\n));\n\nexport const DescriptionTitle = forwardRef(({ style, children, ...props }, ref) => (\n <span ref={ref} style={{\n fontWeight: 600, color: \"#333\", whiteSpace: \"pre-line\", ...style,\n }} {...props}>{children}</span>\n));\n\nexport const PopoverFooter = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n marginTop: 16, gap: 8, ...style,\n }} {...props}>{children}</div>\n));\n\nexport const StepCounter = forwardRef(({ style, children, ...props }, ref) => (\n <span ref={ref} style={{\n fontSize: 13, fontWeight: 600, color: \"#a1a1aa\", ...style,\n }} {...props}>{children}</span>\n));\n\n\nexport const ButtonGroup = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{ display: \"flex\", gap: 6, ...style }} {...props}>{children}</div>\n));\n\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport {\n globalState,\n setGlobalState,\n useGlobalState,\n markDone,\n isDone,\n isAnyDepDone,\n resetWalkthrough,\n easeOutCubic,\n lerp,\n} from \"./utils\";\n\nimport {\n injectKeyframes,\n OverlayWrapper,\n ClickLayer,\n PopoverContainer,\n PopoverBody,\n PopoverTitle,\n DescriptionScrollArea,\n DescriptionBlock,\n DescriptionTitle,\n PopoverFooter,\n StepCounter,\n ButtonGroup,\n} from \"./styles\";\n\nexport { resetWalkthrough };\n\nconst resolveElId = (id) => (typeof id === \"string\" && id.startsWith(\"#\") ? id.slice(1) : id);\n\n// Singleton guard: only one WalkthroughOverlay instance should render at a time.\n// Each instance gets a unique ID on mount. The first instance to mount \"wins\" and\n// all subsequent instances return null until the first one unmounts.\nlet _overlayInstanceCounter = 0;\nlet _activeOverlayId = null;\n\nexport const useWalkthrough = ({\n name,\n storageSuffix = \"\",\n dependsOn = [],\n steps,\n delay = 0,\n onWalkthroughComplete,\n isShowSkip = true,\n isShowPrev = true,\n isShowStep = true,\n nextLabel = \"Next\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done\",\n containerElement,\n animationSpeed = 350,\n manualTotal,\n initialStep,\n}) => {\n const started = useRef(false);\n const onCompleteRef = useRef(onWalkthroughComplete);\n\n useEffect(() => {\n onCompleteRef.current = onWalkthroughComplete;\n }, [onWalkthroughComplete]);\n\n const start = useCallback(() => {\n if (isDone(storageSuffix, name) || started.current) return;\n started.current = true;\n setGlobalState({\n activeTour: {\n name,\n steps,\n delay,\n currentStep: 0,\n storageSuffix,\n onWalkthroughComplete: onCompleteRef.current,\n isShowSkip,\n isShowPrev,\n isShowStep,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n containerElement,\n animationSpeed,\n manualTotal,\n initialStep,\n },\n });\n }, [\n name,\n steps,\n delay,\n storageSuffix,\n isShowSkip,\n isShowPrev,\n isShowStep,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n containerElement,\n animationSpeed,\n manualTotal,\n initialStep,\n ]);\n\n useEffect(() => {\n const check = () => {\n if (isDone(storageSuffix, name)) return;\n started.current = false;\n if (isAnyDepDone(storageSuffix, dependsOn) && !globalState.activeTour) {\n start();\n }\n };\n\n check();\n\n window.addEventListener(\"walkthrough-done\", check);\n return () => window.removeEventListener(\"walkthrough-done\", check);\n }, [name, storageSuffix, dependsOn, start]);\n\n return { start };\n};\n\nconst calcTransitionMs = (from, to, baseMs) => {\n const dx = (to.left + to.width / 2) - (from.left + from.width / 2);\n const dy = (to.top + to.height / 2) - (from.top + from.height / 2);\n const dist = Math.sqrt(dx * dx + dy * dy);\n const diagonal = Math.sqrt(window.innerWidth ** 2 + window.innerHeight ** 2);\n const ratio = Math.min(dist / diagonal, 1);\n const minMs = baseMs * 0.5;\n return Math.round(minMs + ratio * baseMs);\n};\n\nconst waitForScrollEnd = (container, timeoutMs = 400) => {\n return new Promise((resolve) => {\n let resolved = false;\n let scrollEndTimer = null;\n\n const done = () => {\n if (resolved) return;\n resolved = true;\n container.removeEventListener(\"scroll\", onScroll);\n clearTimeout(fallbackTimer);\n clearTimeout(scrollEndTimer);\n resolve();\n };\n\n const onScroll = () => {\n clearTimeout(scrollEndTimer);\n scrollEndTimer = setTimeout(done, 120);\n };\n\n container.addEventListener(\"scroll\", onScroll);\n\n // Fallback: if no scroll event fires (element already visible), resolve quickly\n const fallbackTimer = setTimeout(done, timeoutMs);\n });\n};\n\nconst useAnimatedRect = (step, baseMs = 350, containerElement, isTourActive = true, tourName = null) => {\n const [displayRect, setDisplayRect] = useState(null);\n const [isAnimating, setIsAnimating] = useState(false);\n const targetRef = useRef(null);\n const currentRef = useRef(null);\n const rafRef = useRef(null);\n const scrollingRef = useRef(false);\n const cleanupRef = useRef(null);\n const prevTourNameRef = useRef(null);\n\n useEffect(() => {\n let cancelled = false;\n\n // Detect tour change: when tourName changes, seed currentRef from lastRect\n // so the highlight animates FROM the previous tour's last position.\n // This handles the case where dependsOn tours chain synchronously\n // (activeTour never becomes null between tours in the same render batch).\n if (tourName && tourName !== prevTourNameRef.current) {\n const savedRect = globalState.lastRect;\n if (savedRect && prevTourNameRef.current !== null) {\n // Only seed from lastRect when transitioning between tours (not on first mount)\n currentRef.current = { ...savedRect };\n // Clear display so highlight doesn't linger at old position during delay\n setDisplayRect(null);\n targetRef.current = null;\n }\n prevTourNameRef.current = tourName;\n }\n\n if (!step) {\n if (!isTourActive) {\n setDisplayRect(null);\n targetRef.current = null;\n currentRef.current = null;\n }\n // Otherwise keep last rect visible so overlay doesn't disappear between step transitions\n setIsAnimating(false);\n scrollingRef.current = false;\n return;\n }\n\n // If we have no starting position yet (first tour ever), try to pick up lastRect.\n if (!currentRef.current) {\n const savedRect = globalState.lastRect;\n if (savedRect) {\n currentRef.current = { ...savedRect };\n }\n }\n\n const containerEl = containerElement\n ? document.getElementById(resolveElId(containerElement))\n : null;\n\n const computeRect = (el) => {\n const r = el.getBoundingClientRect();\n const padding = step.padding ?? 8;\n // Use viewport-relative coords (no window.scrollY/scrollX) because\n // the overlay is position:fixed. This works correctly for elements\n // inside fixed-position containers (drawers, modals) and also for\n // normal page elements.\n return {\n top: r.top - padding,\n left: r.left - padding,\n width: r.width + padding * 2,\n height: r.height + padding * 2,\n };\n };\n\n const startAnimation = (newTarget) => {\n if (cancelled) return;\n\n targetRef.current = newTarget;\n\n if (!currentRef.current) {\n currentRef.current = newTarget;\n setDisplayRect(newTarget);\n setIsAnimating(false);\n return;\n }\n\n const from = { ...currentRef.current };\n const to = newTarget;\n const duration = calcTransitionMs(from, to, baseMs);\n const startTime = performance.now();\n\n setIsAnimating(true);\n\n const tick = (now) => {\n if (cancelled) return;\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = easeOutCubic(progress);\n\n const interpolated = {\n top: lerp(from.top, to.top, eased),\n left: lerp(from.left, to.left, eased),\n width: lerp(from.width, to.width, eased),\n height: lerp(from.height, to.height, eased),\n };\n\n currentRef.current = interpolated;\n setDisplayRect(interpolated);\n\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(tick);\n } else {\n currentRef.current = to;\n setDisplayRect(to);\n setIsAnimating(false);\n }\n };\n\n rafRef.current = requestAnimationFrame(tick);\n };\n\n // Shrink highlight to a tiny point at its center when element is not found.\n // This gives visual feedback that the tour is \"working\" rather than stuck.\n const shrinkHighlight = () => {\n if (!currentRef.current) return;\n const cur = currentRef.current;\n const centerX = cur.left + cur.width / 2;\n const centerY = cur.top + cur.height / 2;\n const shrunkRect = { top: centerY, left: centerX, width: 0, height: 0 };\n startAnimation(shrunkRect);\n };\n\n // Kick off the full flow for a found element: scroll → wait → compute → animate\n const runForElement = (el) => {\n if (cancelled) return;\n\n const compute = () => computeRect(el);\n\n // onLayout only runs AFTER scroll has settled — prevents flicker during scroll\n const onLayout = () => {\n if (scrollingRef.current) return;\n const updated = compute();\n targetRef.current = updated;\n currentRef.current = updated;\n setDisplayRect(updated);\n };\n\n // Mark as animating immediately so popover stays hidden during scroll+animate\n setIsAnimating(true);\n\n // Always use scrollIntoView — browser will scroll all scrollable ancestors\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\", inline: \"nearest\" });\n\n if (containerEl) {\n scrollingRef.current = true;\n waitForScrollEnd(containerEl, baseMs + 150).then(() => {\n scrollingRef.current = false;\n if (cancelled) return;\n startAnimation(compute());\n });\n } else {\n requestAnimationFrame(() => {\n if (cancelled) return;\n startAnimation(compute());\n });\n }\n\n window.addEventListener(\"resize\", onLayout);\n window.addEventListener(\"scroll\", onLayout, true);\n if (containerEl) containerEl.addEventListener(\"scroll\", onLayout);\n\n cleanupRef.current = () => {\n window.removeEventListener(\"resize\", onLayout);\n window.removeEventListener(\"scroll\", onLayout, true);\n if (containerEl) containerEl.removeEventListener(\"scroll\", onLayout);\n };\n };\n\n const el = document.getElementById(resolveElId(step.el));\n\n if (el) {\n // Element found immediately — proceed normally\n runForElement(el);\n } else {\n // Element not found — shrink highlight and wait for it to appear\n setIsAnimating(true);\n shrinkHighlight();\n\n const observer = new MutationObserver(() => {\n const found = document.getElementById(resolveElId(step.el));\n if (found) {\n observer.disconnect();\n if (!cancelled) runForElement(found);\n }\n });\n observer.observe(document.body, { childList: true, subtree: true });\n\n cleanupRef.current = () => observer.disconnect();\n }\n\n return () => {\n cancelled = true;\n scrollingRef.current = false;\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n if (cleanupRef.current) cleanupRef.current();\n };\n }, [step, containerElement, isTourActive, tourName]);\n\n return { rect: displayRect, isAnimating };\n};\n\nconst clampSize = (value, max) => {\n if (value === \"auto\" || value === undefined) return \"auto\";\n const num = typeof value === \"string\" ? parseInt(value, 10) : value;\n const clamped = Math.min(num, max - 12);\n return clamped;\n};\n\nconst EDGE_MARGIN = 8;\n\nconst computePopoverPosition = (rect, popoverW, popoverH, gap, preferred) => {\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n const clampLeft = (left) =>\n Math.max(EDGE_MARGIN, Math.min(left, vw - popoverW - EDGE_MARGIN));\n const clampTop = (top) =>\n Math.max(EDGE_MARGIN, Math.min(top, vh - popoverH - EDGE_MARGIN));\n\n const positions = {\n bottom: {\n top: rect.top + rect.height + gap,\n left: clampLeft(rect.left),\n },\n top: {\n top: rect.top - popoverH - gap,\n left: clampLeft(rect.left),\n },\n right: {\n top: clampTop(rect.top),\n left: rect.left + rect.width + gap,\n },\n left: {\n top: clampTop(rect.top),\n left: rect.left - popoverW - gap,\n },\n };\n\n const fitsInViewport = (pos) =>\n pos.top >= EDGE_MARGIN &&\n pos.left >= EDGE_MARGIN &&\n pos.top + popoverH <= vh - EDGE_MARGIN &&\n pos.left + popoverW <= vw - EDGE_MARGIN;\n\n if (preferred && positions[preferred] && fitsInViewport(positions[preferred])) {\n return positions[preferred];\n }\n\n const order = [\"bottom\", \"top\", \"right\", \"left\"];\n for (const dir of order) {\n if (fitsInViewport(positions[dir])) {\n return positions[dir];\n }\n }\n\n const spaceBottom = vh - (rect.top + rect.height + gap);\n const spaceTop = rect.top - gap;\n const spaceRight = vw - (rect.left + rect.width + gap);\n const spaceLeft = rect.left - gap;\n\n const best = [\n { dir: \"bottom\", space: spaceBottom },\n { dir: \"top\", space: spaceTop },\n { dir: \"right\", space: spaceRight },\n { dir: \"left\", space: spaceLeft },\n ].sort((a, b) => b.space - a.space)[0].dir;\n\n const fallback = positions[best];\n return {\n top: Math.max(EDGE_MARGIN, Math.min(fallback.top, vh - popoverH - EDGE_MARGIN)),\n left: Math.max(EDGE_MARGIN, Math.min(fallback.left, vw - popoverW - EDGE_MARGIN)),\n };\n};\n\n// Lazily create & prepend a dedicated container as the FIRST child of <body>.\n// Being first in DOM order means it sits before any Radix / 3rd-party portals,\n// and we stop pointer events from propagating so Radix never sees them.\nconst WT_CONTAINER_ID = \"wt-portal-root\";\nconst getPortalContainer = () => {\n if (typeof document === \"undefined\") return null;\n let container = document.getElementById(WT_CONTAINER_ID);\n if (!container) {\n container = document.createElement(\"div\");\n container.id = WT_CONTAINER_ID;\n container.style.cssText = \"position:absolute;top:0;left:0;z-index:2147483647;pointer-events:none;\";\n // Prepend so it's BEFORE any Radix portals in DOM\n document.body.prepend(container);\n }\n return container;\n};\n\n// Stop pointer / mouse / touch / focus events from bubbling out of the walkthrough\n// so that Radix's capture-phase \"outside click\" detection never fires.\nconst stopOutsideEvents = (e) => e.stopPropagation();\nconst portalEventHandlers = {\n onPointerDown: stopOutsideEvents,\n onPointerUp: stopOutsideEvents,\n onMouseDown: stopOutsideEvents,\n onMouseUp: stopOutsideEvents,\n onTouchStart: stopOutsideEvents,\n onFocusCapture: stopOutsideEvents,\n};\n\nexport const WalkthroughOverlay = ({\n $popoverPadding = 12,\n $popoverBorderRadius = 8,\n $popoverGap = 12,\n $popoverMinWidth = 275,\n nextColor,\n prevColor,\n skipColor,\n} = {}) => {\n injectKeyframes();\n const { activeTour } = useGlobalState();\n\n // Singleton guard: register this instance on mount, unregister on unmount.\n // The actual guard check is done AFTER all hooks (React rules of hooks).\n const instanceIdRef = useRef(null);\n if (instanceIdRef.current === null) {\n instanceIdRef.current = ++_overlayInstanceCounter;\n }\n\n useEffect(() => {\n const myId = instanceIdRef.current;\n if (_activeOverlayId === null) {\n _activeOverlayId = myId;\n }\n return () => {\n if (_activeOverlayId === myId) {\n _activeOverlayId = null;\n }\n };\n }, []);\n\n const nextBtnRef = useRef(null);\n const popoverRef = useRef(null);\n const [popoverPos, setPopoverPos] = useState(null);\n\n // Explicitly hide the popover the instant the user clicks next/prev.\n // This avoids the 1-frame flash where step has changed but isAnimating\n // hasn't been set to true yet by the async useAnimatedRect effect.\n const [popoverHidden, setPopoverHidden] = useState(false);\n\n // Snapshot of the step content shown in the popover.\n // Only updates when the popover is ready (not animating), so the user\n // never sees content swap while the popover is still visible / fading out.\n const displayStepRef = useRef(null);\n const displayPosRef = useRef(null);\n\n const [validSteps, setValidSteps] = useState([]);\n const waitingForElsRef = useRef(false);\n\n useEffect(() => {\n if (!activeTour) {\n setValidSteps([]);\n waitingForElsRef.current = false;\n return;\n }\n\n waitingForElsRef.current = true;\n\n const compute = () =>\n activeTour.steps\n .map((s, i) => ({ ...s, _originalIdx: i }))\n .filter((s) => document.getElementById(resolveElId(s.el)));\n\n const found = compute();\n\n if (found.length > 0) {\n setValidSteps(found);\n return;\n }\n\n setValidSteps([]);\n\n const observer = new MutationObserver(() => {\n const updated = compute();\n if (updated.length > 0) {\n waitingForElsRef.current = false;\n setValidSteps(updated);\n observer.disconnect();\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n waitingForElsRef.current = false;\n };\n }, [activeTour]);\n\n const currentOriginalIdx = activeTour?.currentStep ?? 0;\n const currentValidPos = validSteps.findIndex(\n (s) => s._originalIdx === currentOriginalIdx,\n );\n\n const rawStep = currentValidPos !== -1 ? validSteps[currentValidPos] : null;\n\n // --- Delay logic (tour-level, once per tour) ---\n // Track which tour we already handled delay for, so switching tours always re-evaluates.\n const delayDoneForRef = useRef(null); // name of tour whose delay is done\n const [isDelaying, setIsDelaying] = useState(false);\n\n const currentTourName = activeTour?.name ?? null;\n\n useEffect(() => {\n if (!activeTour) {\n // Tour ended — reset\n delayDoneForRef.current = null;\n setIsDelaying(false);\n return;\n }\n\n // If we already handled delay for THIS tour — nothing to do\n if (delayDoneForRef.current === activeTour.name) return;\n\n const ms = activeTour.delay ?? 0;\n\n if (ms <= 0) {\n delayDoneForRef.current = activeTour.name;\n return;\n }\n\n // Start delaying: show overlay, block UI\n setIsDelaying(true);\n const timer = setTimeout(() => {\n delayDoneForRef.current = activeTour.name;\n setIsDelaying(false);\n }, ms);\n\n return () => clearTimeout(timer);\n }, [currentTourName, activeTour]);\n // --- end delay logic ---\n\n const step = isDelaying ? null : rawStep;\n const tourAnimationSpeed = activeTour?.animationSpeed ?? 350;\n const { rect, isAnimating } = useAnimatedRect(step, tourAnimationSpeed, activeTour?.containerElement, !!activeTour, activeTour?.name);\n\n const completeTour = useCallback(() => {\n if (!activeTour) return;\n const { storageSuffix: sk, name: n, onWalkthroughComplete: cb } = activeTour;\n // Save last highlight position so the next tour can animate FROM this point\n setGlobalState({ activeTour: null, lastRect: rect ? { ...rect } : null });\n markDone(sk, n);\n if (cb) cb(n);\n }, [activeTour, rect]);\n\n useEffect(() => {\n if (!activeTour) return;\n if (currentValidPos !== -1) return;\n if (waitingForElsRef.current) return;\n\n if (validSteps.length === 0) {\n completeTour();\n return;\n }\n\n const nextValid = validSteps.find(\n (s) => s._originalIdx > currentOriginalIdx,\n );\n\n if (nextValid) {\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: nextValid._originalIdx },\n }));\n } else {\n completeTour();\n }\n }, [\n activeTour,\n currentValidPos,\n currentOriginalIdx,\n validSteps,\n completeTour,\n ]);\n\n useEffect(() => {\n if (!popoverRef.current || !rect || !step || isAnimating) {\n setPopoverPos(null);\n return;\n }\n\n const targetEl = document.getElementById(resolveElId(step.el));\n if (!targetEl) {\n setPopoverPos(null);\n return;\n }\n\n const targetRect = targetEl.getBoundingClientRect();\n const inViewport =\n targetRect.bottom > 0 &&\n targetRect.top < window.innerHeight &&\n targetRect.right > 0 &&\n targetRect.left < window.innerWidth;\n\n if (!inViewport) {\n setPopoverPos(null);\n return;\n }\n\n const measured = popoverRef.current.getBoundingClientRect();\n const pos = computePopoverPosition(\n rect,\n measured.width,\n measured.height,\n $popoverGap,\n step.position,\n );\n setPopoverPos(pos);\n }, [rect, step, $popoverGap, isAnimating]);\n\n useEffect(() => {\n if (nextBtnRef.current) {\n nextBtnRef.current.focus();\n }\n }, [activeTour?.currentStep, popoverPos]);\n\n // Clear the explicit hide flag once the animation has finished.\n useEffect(() => {\n if (popoverHidden && !isAnimating) {\n setPopoverHidden(false);\n }\n }, [popoverHidden, isAnimating]);\n\n if (!activeTour) return null;\n\n // Singleton guard: if another instance already claimed the active slot, this one does nothing.\n // This check is placed after all hooks to comply with React rules of hooks.\n if (_activeOverlayId !== null && _activeOverlayId !== instanceIdRef.current) {\n return null;\n }\n\n // During delay: show overlay only (no highlight, no popover)\n if (isDelaying) {\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n />\n </svg>\n </OverlayWrapper>\n </div>,\n getPortalContainer(),\n );\n }\n\n // If no step and no rect at all, hide everything\n if (!step && !rect) return null;\n\n // If step is loading but we have a previous rect, keep overlay visible with last highlight\n // This prevents the overlay from disappearing during step transitions\n if (!step || !rect) {\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n {rect ? (\n <>\n <defs>\n <mask id=\"wt-mask\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n <rect\n x={rect.left}\n y={rect.top}\n width={rect.width}\n height={rect.height}\n rx={10}\n fill=\"black\"\n />\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n mask=\"url(#wt-mask)\"\n />\n </>\n ) : (\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n />\n )}\n </svg>\n </OverlayWrapper>\n </div>,\n getPortalContainer(),\n );\n }\n\n const totalSteps = validSteps.length;\n const isLast = currentValidPos === totalSteps - 1;\n\n // Display-only step counter values (manualTotal / initialStep)\n const displayInitialStep = activeTour.initialStep ?? 0;\n const displayCurrentStep = currentValidPos + 1 + displayInitialStep;\n const displayTotalSteps = activeTour.manualTotal ?? totalSteps;\n const borderRadius = step.borderRadius ?? 10;\n\n const {\n isShowSkip = true,\n isShowPrev = true,\n isShowStep = true,\n nextLabel: tourNextLabel = \"Next\",\n prevLabel: tourPrevLabel = \"Back\",\n skipLabel: tourSkipLabel = \"Skip\",\n doneLabel = \"Done\",\n } = activeTour;\n\n const nextLabel = step.nextLabel ?? tourNextLabel;\n const prevLabel = step.prevLabel ?? tourPrevLabel;\n const skipLabel = step.skipLabel ?? tourSkipLabel;\n\n const next = () => {\n if (step.isTriggerEl) {\n const triggerTarget = typeof step.isTriggerEl === \"string\"\n ? document.getElementById(resolveElId(step.isTriggerEl))\n : document.getElementById(resolveElId(step.el));\n if (triggerTarget) triggerTarget.click();\n }\n\n if (isLast) {\n completeTour();\n } else {\n setPopoverHidden(true);\n const nextStep = validSteps[currentValidPos + 1];\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: nextStep._originalIdx },\n }));\n }\n };\n\n const prev = () => {\n if (currentValidPos > 0) {\n setPopoverHidden(true);\n const prevStep = validSteps[currentValidPos - 1];\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: prevStep._originalIdx },\n }));\n }\n };\n\n const skip = () => {\n completeTour();\n };\n\n const popoverWidth = clampSize(step.width, window.innerWidth);\n const popoverHeight = step.height\n ? clampSize(step.height, window.innerHeight)\n : undefined;\n\n const popoverReady = popoverPos && !isAnimating && !popoverHidden;\n\n // Snapshot the popover content so it only updates when the popover is\n // actually visible. This prevents the user from seeing content swap\n // while the highlight is still animating to the next element.\n if (popoverReady) {\n displayStepRef.current = {\n step,\n nextLabel,\n prevLabel,\n skipLabel,\n isShowSkip,\n isShowPrev,\n isShowStep,\n doneLabel,\n isLast,\n currentValidPos,\n displayCurrentStep,\n displayTotalSteps,\n popoverHeight,\n };\n displayPosRef.current = currentValidPos;\n }\n\n const ds = displayStepRef.current;\n\n // When animating: render popover offscreen so it can be measured by the\n // position-calculation effect, but keep it invisible to the user.\n // When ready: show at the computed position with the pop-in animation.\n const popoverStyle = popoverReady\n ? {\n top: popoverPos.top,\n left: popoverPos.left,\n width: popoverWidth,\n minWidth: $popoverMinWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\n }\n : {\n position: \"fixed\",\n top: -9999,\n left: -9999,\n opacity: 0,\n pointerEvents: \"none\",\n width: popoverWidth,\n minWidth: $popoverMinWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\n animation: \"none\",\n };\n\n // Use snapshot content for the popover; fall back to live step if no snapshot yet (first render).\n const pStep = ds ? ds.step : step;\n const pNextLabel = ds ? ds.nextLabel : nextLabel;\n const pPrevLabel = ds ? ds.prevLabel : prevLabel;\n const pSkipLabel = ds ? ds.skipLabel : skipLabel;\n const pIsShowSkip = ds ? ds.isShowSkip : isShowSkip;\n const pIsShowPrev = ds ? ds.isShowPrev : isShowPrev;\n const pIsShowStep = ds ? ds.isShowStep : isShowStep;\n const pDoneLabel = ds ? ds.doneLabel : doneLabel;\n const pIsLast = ds ? ds.isLast : isLast;\n const pCurrentValidPos = ds ? ds.currentValidPos : currentValidPos;\n const pDisplayCurrentStep = ds ? ds.displayCurrentStep : displayCurrentStep;\n const pDisplayTotalSteps = ds ? ds.displayTotalSteps : displayTotalSteps;\n const pPopoverHeight = ds ? ds.popoverHeight : popoverHeight;\n\n const overlay = (\n <>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n <defs>\n <mask id=\"wt-mask\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n <rect\n x={rect.left}\n y={rect.top}\n width={rect.width}\n height={rect.height}\n rx={borderRadius}\n fill=\"black\"\n />\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n mask=\"url(#wt-mask)\"\n />\n </svg>\n </OverlayWrapper>\n\n <PopoverContainer ref={popoverRef} style={popoverStyle}>\n <PopoverBody>\n <div style={{display: \"flex\",flexDirection: \"row\", justifyContent: \"space-between\"}}>\n {pStep.title ? <PopoverTitle>{pStep.title}</PopoverTitle>:''}\n {(pStep.isShowStep ?? pIsShowStep) && (\n <span style={{color: \"#a1a1aa\" ,fontSize: \"12px\", fontWeight: \"400\"}}>{pDisplayCurrentStep}/{pDisplayTotalSteps}</span>\n )}\n </div>\n <DescriptionScrollArea $height={pPopoverHeight}>\n {Array.isArray(pStep.description) &&\n pStep.description.map((d, i) => (\n <DescriptionBlock key={i} $direction={d.direction}>\n {d.title && <DescriptionTitle>{d.title}: </DescriptionTitle>}\n <span style={{ whiteSpace: \"pre-line\" }}>{d.description}</span>\n </DescriptionBlock>\n ))}\n </DescriptionScrollArea>\n </PopoverBody>\n\n <PopoverFooter>\n <StepCounter>\n {pIsShowSkip && (\n <button\n className=\"wt-btn\"\n style={{ background: skipColor || \"transparent\", color: skipColor ? \"#fff\" : \"#a1a1aa\" }}\n onClick={skip}\n >\n {pSkipLabel}\n </button>\n )}\n </StepCounter>\n\n <ButtonGroup>\n {(pStep.isShowPrev ?? pIsShowPrev) && pCurrentValidPos > 0 && (\n <button\n className=\"wt-btn\"\n style={{ background: prevColor || \"#f4f4f5\", color: prevColor ? \"#fff\" : \"#3f3f46\" }}\n onClick={prev}\n >\n {pPrevLabel}\n </button>\n )}\n <button\n ref={nextBtnRef}\n className=\"wt-btn wt-btn-next\"\n style={{ background: nextColor || \"#000\", color: \"#fff\", boxShadow: \"0 2px 8px rgba(0,0,0,0.3)\" }}\n onClick={next}\n >\n {pIsLast ? pDoneLabel : pNextLabel}\n </button>\n </ButtonGroup>\n </PopoverFooter>\n </PopoverContainer>\n </>\n );\n\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n {overlay}\n </div>,\n getPortalContainer(),\n );\n};\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -534,6 +534,7 @@ var WalkthroughOverlay = ({
|
|
|
534
534
|
const nextBtnRef = useRef(null);
|
|
535
535
|
const popoverRef = useRef(null);
|
|
536
536
|
const [popoverPos, setPopoverPos] = useState(null);
|
|
537
|
+
const [popoverHidden, setPopoverHidden] = useState(false);
|
|
537
538
|
const displayStepRef = useRef(null);
|
|
538
539
|
const displayPosRef = useRef(null);
|
|
539
540
|
const [validSteps, setValidSteps] = useState([]);
|
|
@@ -661,6 +662,11 @@ var WalkthroughOverlay = ({
|
|
|
661
662
|
nextBtnRef.current.focus();
|
|
662
663
|
}
|
|
663
664
|
}, [activeTour == null ? void 0 : activeTour.currentStep, popoverPos]);
|
|
665
|
+
useEffect(() => {
|
|
666
|
+
if (popoverHidden && !isAnimating) {
|
|
667
|
+
setPopoverHidden(false);
|
|
668
|
+
}
|
|
669
|
+
}, [popoverHidden, isAnimating]);
|
|
664
670
|
if (!activeTour) return null;
|
|
665
671
|
if (_activeOverlayId !== null && _activeOverlayId !== instanceIdRef.current) {
|
|
666
672
|
return null;
|
|
@@ -754,6 +760,7 @@ var WalkthroughOverlay = ({
|
|
|
754
760
|
if (isLast) {
|
|
755
761
|
completeTour();
|
|
756
762
|
} else {
|
|
763
|
+
setPopoverHidden(true);
|
|
757
764
|
const nextStep = validSteps[currentValidPos + 1];
|
|
758
765
|
setGlobalState((s) => ({
|
|
759
766
|
...s,
|
|
@@ -763,6 +770,7 @@ var WalkthroughOverlay = ({
|
|
|
763
770
|
};
|
|
764
771
|
const prev = () => {
|
|
765
772
|
if (currentValidPos > 0) {
|
|
773
|
+
setPopoverHidden(true);
|
|
766
774
|
const prevStep = validSteps[currentValidPos - 1];
|
|
767
775
|
setGlobalState((s) => ({
|
|
768
776
|
...s,
|
|
@@ -775,7 +783,7 @@ var WalkthroughOverlay = ({
|
|
|
775
783
|
};
|
|
776
784
|
const popoverWidth = clampSize(step.width, window.innerWidth);
|
|
777
785
|
const popoverHeight = step.height ? clampSize(step.height, window.innerHeight) : void 0;
|
|
778
|
-
const popoverReady = popoverPos && !isAnimating;
|
|
786
|
+
const popoverReady = popoverPos && !isAnimating && !popoverHidden;
|
|
779
787
|
if (popoverReady) {
|
|
780
788
|
displayStepRef.current = {
|
|
781
789
|
step,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/index.js","../src/styles/index.js","../src/WalkthroughOverlay.js"],"names":["useEffect","useState","el","_a","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["import { useState, useEffect } from \"react\";\n\nconst listeners = new Set();\nlet globalState = {\n activeTour: null,\n lastRect: null,\n};\n\nconst notify = () => {\n listeners.forEach((fn) => fn({ ...globalState }));\n};\n\nconst setGlobalState = (updater) => {\n globalState =\n typeof updater === \"function\"\n ? updater(globalState)\n : { ...globalState, ...updater };\n notify();\n};\n\nconst useGlobalState = () => {\n const [state, setState] = useState(globalState);\n useEffect(() => {\n const handler = (s) => setState(s);\n listeners.add(handler);\n return () => listeners.delete(handler);\n }, []);\n return state;\n};\n\nconst getStorageKey = (storageSuffix) => {\n return storageSuffix ? `walkthrough-done:${storageSuffix}` : \"walkthrough-done\";\n};\n\nconst getStorageData = (storageSuffix) => {\n try {\n return JSON.parse(localStorage.getItem(getStorageKey(storageSuffix)) || \"{}\");\n } catch {\n return {};\n }\n};\n\nconst markDone = (storageSuffix, name) => {\n const key = getStorageKey(storageSuffix);\n const data = getStorageData(storageSuffix);\n data[name] = true;\n localStorage.setItem(key, JSON.stringify(data));\n window.dispatchEvent(new Event(\"walkthrough-done\"));\n};\n\nconst isDone = (storageSuffix, name) => {\n const data = getStorageData(storageSuffix);\n return data[name] === true;\n};\n\nconst isAnyDepDone = (storageSuffix, deps) => {\n if (!deps || deps.length === 0) return true;\n return deps.some((d) => isDone(storageSuffix, d));\n};\n\nconst resetWalkthrough = ({ storageSuffix = \"\", walkthroughList = [] } = {}) => {\n const key = getStorageKey(storageSuffix);\n const data = getStorageData(storageSuffix);\n walkthroughList.forEach((n) => {\n delete data[n];\n });\n localStorage.setItem(key, JSON.stringify(data));\n // Clear last highlight position so replayed tours start fresh\n globalState = { ...globalState, lastRect: null };\n notify();\n window.dispatchEvent(new Event(\"walkthrough-done\"));\n};\n\nconst easeOutCubic = (t) => {\n return 1 - Math.pow(1 - t, 3);\n};\n\nconst lerp = (a, b, t) => {\n return a + (b - a) * t;\n};\n\nexport {\n globalState,\n setGlobalState,\n useGlobalState,\n markDone,\n isDone,\n isAnyDepDone,\n resetWalkthrough,\n easeOutCubic,\n lerp,\n};\n","import React, { forwardRef } from \"react\";\n\nconst STYLE_ID = \"wt-keyframes\";\n\nexport const injectKeyframes = () => {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = `\n @keyframes wt-pop-in {\n from { opacity: 0; transform: translateY(10px) scale(0.96); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes wt-fade-slide-in {\n from { opacity: 0; transform: translateX(12px); }\n to { opacity: 1; transform: translateX(0); }\n }\n .wt-overlay-wrap svg { display: block; width: 100%; height: 100%; }\n .wt-btn { border: none; border-radius: 8px; padding: 7px 16px; font-size: 13px; font-weight: 600; cursor: pointer; transition: all 0.15s ease; outline: none; font-family: inherit; }\n .wt-btn:hover { opacity: 0.85; }\n .wt-btn-next:hover { box-shadow: 0 4px 12px rgba(79,70,229,0.4); transform: translateY(-1px); }\n .wt-btn-next:active { transform: translateY(0); }\n `;\n document.head.appendChild(style);\n};\n\nexport const OverlayWrapper = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} className=\"wt-overlay-wrap\" style={{\n position: \"fixed\", inset: 0, zIndex: 10001,\n pointerEvents: \"none\", width: \"100vw\", height: \"100vh\", ...style,\n }} {...props}>{children}</div>\n));\n\nexport const ClickLayer = forwardRef(({ style, ...props }, ref) => (\n <div ref={ref} style={{\n position: \"fixed\", inset: 0, zIndex: 10000, cursor: \"default\", ...style,\n }} {...props} />\n));\n\nexport const PopoverContainer = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n position: \"fixed\", zIndex: 99999, background: \"#fff\",\n boxShadow: \"0 12px 40px rgba(0,0,0,0.18), 0 2px 10px rgba(0,0,0,0.06)\",\n animation: \"wt-pop-in 0.28s cubic-bezier(0.34, 1.56, 0.64, 1)\",\n ...style,\n }} {...props}>{children}</div>\n));\n\nexport const PopoverBody = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n animation: \"wt-fade-slide-in 0.3s ease-out\", ...style,\n }} {...props}>{children}</div>\n));\n\nexport const PopoverTitle = forwardRef(({ style, children, ...props }, ref) => (\n <h3 ref={ref} style={{\n fontSize: 15, fontWeight: 700, color: \"#1a1a2e\",\n margin: \"0 0 10px\", lineHeight: 1.3, whiteSpace: \"pre-line\", ...style,\n }} {...props}>{children}</h3>\n));\n\nexport const DescriptionScrollArea = forwardRef(({ $height, style, children, ...props }, ref) => {\n const extra = $height && $height !== \"auto\" ? {\n maxHeight: typeof $height === \"number\" ? $height : $height,\n overflowY: \"auto\",\n } : {};\n return <div ref={ref} style={{ ...extra, ...style }} {...props}>{children}</div>;\n});\n\nexport const DescriptionBlock = forwardRef(({ $direction = \"row\", style, children, ...props }, ref) => (\n <div ref={ref} style={{\n display: \"flex\", flexDirection: $direction,\n fontSize: 13, color: \"#666\", lineHeight: 1.6, margin: \"0 0 4px\",\n ...($direction === \"column\" ? { gap: 2 } : { alignItems: \"baseline\", gap: 4 }),\n ...style,\n }} {...props}>{children}</div>\n));\n\nexport const DescriptionTitle = forwardRef(({ style, children, ...props }, ref) => (\n <span ref={ref} style={{\n fontWeight: 600, color: \"#333\", whiteSpace: \"pre-line\", ...style,\n }} {...props}>{children}</span>\n));\n\nexport const PopoverFooter = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n marginTop: 16, gap: 8, ...style,\n }} {...props}>{children}</div>\n));\n\nexport const StepCounter = forwardRef(({ style, children, ...props }, ref) => (\n <span ref={ref} style={{\n fontSize: 13, fontWeight: 600, color: \"#a1a1aa\", ...style,\n }} {...props}>{children}</span>\n));\n\n\nexport const ButtonGroup = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{ display: \"flex\", gap: 6, ...style }} {...props}>{children}</div>\n));\n\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport {\n globalState,\n setGlobalState,\n useGlobalState,\n markDone,\n isDone,\n isAnyDepDone,\n resetWalkthrough,\n easeOutCubic,\n lerp,\n} from \"./utils\";\n\nimport {\n injectKeyframes,\n OverlayWrapper,\n ClickLayer,\n PopoverContainer,\n PopoverBody,\n PopoverTitle,\n DescriptionScrollArea,\n DescriptionBlock,\n DescriptionTitle,\n PopoverFooter,\n StepCounter,\n ButtonGroup,\n} from \"./styles\";\n\nexport { resetWalkthrough };\n\nconst resolveElId = (id) => (typeof id === \"string\" && id.startsWith(\"#\") ? id.slice(1) : id);\n\n// Singleton guard: only one WalkthroughOverlay instance should render at a time.\n// Each instance gets a unique ID on mount. The first instance to mount \"wins\" and\n// all subsequent instances return null until the first one unmounts.\nlet _overlayInstanceCounter = 0;\nlet _activeOverlayId = null;\n\nexport const useWalkthrough = ({\n name,\n storageSuffix = \"\",\n dependsOn = [],\n steps,\n delay = 0,\n onWalkthroughComplete,\n isShowSkip = true,\n isShowPrev = true,\n isShowStep = true,\n nextLabel = \"Next\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done\",\n containerElement,\n animationSpeed = 350,\n manualTotal,\n initialStep,\n}) => {\n const started = useRef(false);\n const onCompleteRef = useRef(onWalkthroughComplete);\n\n useEffect(() => {\n onCompleteRef.current = onWalkthroughComplete;\n }, [onWalkthroughComplete]);\n\n const start = useCallback(() => {\n if (isDone(storageSuffix, name) || started.current) return;\n started.current = true;\n setGlobalState({\n activeTour: {\n name,\n steps,\n delay,\n currentStep: 0,\n storageSuffix,\n onWalkthroughComplete: onCompleteRef.current,\n isShowSkip,\n isShowPrev,\n isShowStep,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n containerElement,\n animationSpeed,\n manualTotal,\n initialStep,\n },\n });\n }, [\n name,\n steps,\n delay,\n storageSuffix,\n isShowSkip,\n isShowPrev,\n isShowStep,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n containerElement,\n animationSpeed,\n manualTotal,\n initialStep,\n ]);\n\n useEffect(() => {\n const check = () => {\n if (isDone(storageSuffix, name)) return;\n started.current = false;\n if (isAnyDepDone(storageSuffix, dependsOn) && !globalState.activeTour) {\n start();\n }\n };\n\n check();\n\n window.addEventListener(\"walkthrough-done\", check);\n return () => window.removeEventListener(\"walkthrough-done\", check);\n }, [name, storageSuffix, dependsOn, start]);\n\n return { start };\n};\n\nconst calcTransitionMs = (from, to, baseMs) => {\n const dx = (to.left + to.width / 2) - (from.left + from.width / 2);\n const dy = (to.top + to.height / 2) - (from.top + from.height / 2);\n const dist = Math.sqrt(dx * dx + dy * dy);\n const diagonal = Math.sqrt(window.innerWidth ** 2 + window.innerHeight ** 2);\n const ratio = Math.min(dist / diagonal, 1);\n const minMs = baseMs * 0.5;\n return Math.round(minMs + ratio * baseMs);\n};\n\nconst waitForScrollEnd = (container, timeoutMs = 400) => {\n return new Promise((resolve) => {\n let resolved = false;\n let scrollEndTimer = null;\n\n const done = () => {\n if (resolved) return;\n resolved = true;\n container.removeEventListener(\"scroll\", onScroll);\n clearTimeout(fallbackTimer);\n clearTimeout(scrollEndTimer);\n resolve();\n };\n\n const onScroll = () => {\n clearTimeout(scrollEndTimer);\n scrollEndTimer = setTimeout(done, 120);\n };\n\n container.addEventListener(\"scroll\", onScroll);\n\n // Fallback: if no scroll event fires (element already visible), resolve quickly\n const fallbackTimer = setTimeout(done, timeoutMs);\n });\n};\n\nconst useAnimatedRect = (step, baseMs = 350, containerElement, isTourActive = true, tourName = null) => {\n const [displayRect, setDisplayRect] = useState(null);\n const [isAnimating, setIsAnimating] = useState(false);\n const targetRef = useRef(null);\n const currentRef = useRef(null);\n const rafRef = useRef(null);\n const scrollingRef = useRef(false);\n const cleanupRef = useRef(null);\n const prevTourNameRef = useRef(null);\n\n useEffect(() => {\n let cancelled = false;\n\n // Detect tour change: when tourName changes, seed currentRef from lastRect\n // so the highlight animates FROM the previous tour's last position.\n // This handles the case where dependsOn tours chain synchronously\n // (activeTour never becomes null between tours in the same render batch).\n if (tourName && tourName !== prevTourNameRef.current) {\n const savedRect = globalState.lastRect;\n if (savedRect && prevTourNameRef.current !== null) {\n // Only seed from lastRect when transitioning between tours (not on first mount)\n currentRef.current = { ...savedRect };\n // Clear display so highlight doesn't linger at old position during delay\n setDisplayRect(null);\n targetRef.current = null;\n }\n prevTourNameRef.current = tourName;\n }\n\n if (!step) {\n if (!isTourActive) {\n setDisplayRect(null);\n targetRef.current = null;\n currentRef.current = null;\n }\n // Otherwise keep last rect visible so overlay doesn't disappear between step transitions\n setIsAnimating(false);\n scrollingRef.current = false;\n return;\n }\n\n // If we have no starting position yet (first tour ever), try to pick up lastRect.\n if (!currentRef.current) {\n const savedRect = globalState.lastRect;\n if (savedRect) {\n currentRef.current = { ...savedRect };\n }\n }\n\n const containerEl = containerElement\n ? document.getElementById(resolveElId(containerElement))\n : null;\n\n const computeRect = (el) => {\n const r = el.getBoundingClientRect();\n const padding = step.padding ?? 8;\n // Use viewport-relative coords (no window.scrollY/scrollX) because\n // the overlay is position:fixed. This works correctly for elements\n // inside fixed-position containers (drawers, modals) and also for\n // normal page elements.\n return {\n top: r.top - padding,\n left: r.left - padding,\n width: r.width + padding * 2,\n height: r.height + padding * 2,\n };\n };\n\n const startAnimation = (newTarget) => {\n if (cancelled) return;\n\n targetRef.current = newTarget;\n\n if (!currentRef.current) {\n currentRef.current = newTarget;\n setDisplayRect(newTarget);\n setIsAnimating(false);\n return;\n }\n\n const from = { ...currentRef.current };\n const to = newTarget;\n const duration = calcTransitionMs(from, to, baseMs);\n const startTime = performance.now();\n\n setIsAnimating(true);\n\n const tick = (now) => {\n if (cancelled) return;\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = easeOutCubic(progress);\n\n const interpolated = {\n top: lerp(from.top, to.top, eased),\n left: lerp(from.left, to.left, eased),\n width: lerp(from.width, to.width, eased),\n height: lerp(from.height, to.height, eased),\n };\n\n currentRef.current = interpolated;\n setDisplayRect(interpolated);\n\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(tick);\n } else {\n currentRef.current = to;\n setDisplayRect(to);\n setIsAnimating(false);\n }\n };\n\n rafRef.current = requestAnimationFrame(tick);\n };\n\n // Shrink highlight to a tiny point at its center when element is not found.\n // This gives visual feedback that the tour is \"working\" rather than stuck.\n const shrinkHighlight = () => {\n if (!currentRef.current) return;\n const cur = currentRef.current;\n const centerX = cur.left + cur.width / 2;\n const centerY = cur.top + cur.height / 2;\n const shrunkRect = { top: centerY, left: centerX, width: 0, height: 0 };\n startAnimation(shrunkRect);\n };\n\n // Kick off the full flow for a found element: scroll → wait → compute → animate\n const runForElement = (el) => {\n if (cancelled) return;\n\n const compute = () => computeRect(el);\n\n // onLayout only runs AFTER scroll has settled — prevents flicker during scroll\n const onLayout = () => {\n if (scrollingRef.current) return;\n const updated = compute();\n targetRef.current = updated;\n currentRef.current = updated;\n setDisplayRect(updated);\n };\n\n // Mark as animating immediately so popover stays hidden during scroll+animate\n setIsAnimating(true);\n\n // Always use scrollIntoView — browser will scroll all scrollable ancestors\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\", inline: \"nearest\" });\n\n if (containerEl) {\n scrollingRef.current = true;\n waitForScrollEnd(containerEl, baseMs + 150).then(() => {\n scrollingRef.current = false;\n if (cancelled) return;\n startAnimation(compute());\n });\n } else {\n requestAnimationFrame(() => {\n if (cancelled) return;\n startAnimation(compute());\n });\n }\n\n window.addEventListener(\"resize\", onLayout);\n window.addEventListener(\"scroll\", onLayout, true);\n if (containerEl) containerEl.addEventListener(\"scroll\", onLayout);\n\n cleanupRef.current = () => {\n window.removeEventListener(\"resize\", onLayout);\n window.removeEventListener(\"scroll\", onLayout, true);\n if (containerEl) containerEl.removeEventListener(\"scroll\", onLayout);\n };\n };\n\n const el = document.getElementById(resolveElId(step.el));\n\n if (el) {\n // Element found immediately — proceed normally\n runForElement(el);\n } else {\n // Element not found — shrink highlight and wait for it to appear\n setIsAnimating(true);\n shrinkHighlight();\n\n const observer = new MutationObserver(() => {\n const found = document.getElementById(resolveElId(step.el));\n if (found) {\n observer.disconnect();\n if (!cancelled) runForElement(found);\n }\n });\n observer.observe(document.body, { childList: true, subtree: true });\n\n cleanupRef.current = () => observer.disconnect();\n }\n\n return () => {\n cancelled = true;\n scrollingRef.current = false;\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n if (cleanupRef.current) cleanupRef.current();\n };\n }, [step, containerElement, isTourActive, tourName]);\n\n return { rect: displayRect, isAnimating };\n};\n\nconst clampSize = (value, max) => {\n if (value === \"auto\" || value === undefined) return \"auto\";\n const num = typeof value === \"string\" ? parseInt(value, 10) : value;\n const clamped = Math.min(num, max - 12);\n return clamped;\n};\n\nconst EDGE_MARGIN = 8;\n\nconst computePopoverPosition = (rect, popoverW, popoverH, gap, preferred) => {\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n const clampLeft = (left) =>\n Math.max(EDGE_MARGIN, Math.min(left, vw - popoverW - EDGE_MARGIN));\n const clampTop = (top) =>\n Math.max(EDGE_MARGIN, Math.min(top, vh - popoverH - EDGE_MARGIN));\n\n const positions = {\n bottom: {\n top: rect.top + rect.height + gap,\n left: clampLeft(rect.left),\n },\n top: {\n top: rect.top - popoverH - gap,\n left: clampLeft(rect.left),\n },\n right: {\n top: clampTop(rect.top),\n left: rect.left + rect.width + gap,\n },\n left: {\n top: clampTop(rect.top),\n left: rect.left - popoverW - gap,\n },\n };\n\n const fitsInViewport = (pos) =>\n pos.top >= EDGE_MARGIN &&\n pos.left >= EDGE_MARGIN &&\n pos.top + popoverH <= vh - EDGE_MARGIN &&\n pos.left + popoverW <= vw - EDGE_MARGIN;\n\n if (preferred && positions[preferred] && fitsInViewport(positions[preferred])) {\n return positions[preferred];\n }\n\n const order = [\"bottom\", \"top\", \"right\", \"left\"];\n for (const dir of order) {\n if (fitsInViewport(positions[dir])) {\n return positions[dir];\n }\n }\n\n const spaceBottom = vh - (rect.top + rect.height + gap);\n const spaceTop = rect.top - gap;\n const spaceRight = vw - (rect.left + rect.width + gap);\n const spaceLeft = rect.left - gap;\n\n const best = [\n { dir: \"bottom\", space: spaceBottom },\n { dir: \"top\", space: spaceTop },\n { dir: \"right\", space: spaceRight },\n { dir: \"left\", space: spaceLeft },\n ].sort((a, b) => b.space - a.space)[0].dir;\n\n const fallback = positions[best];\n return {\n top: Math.max(EDGE_MARGIN, Math.min(fallback.top, vh - popoverH - EDGE_MARGIN)),\n left: Math.max(EDGE_MARGIN, Math.min(fallback.left, vw - popoverW - EDGE_MARGIN)),\n };\n};\n\n// Lazily create & prepend a dedicated container as the FIRST child of <body>.\n// Being first in DOM order means it sits before any Radix / 3rd-party portals,\n// and we stop pointer events from propagating so Radix never sees them.\nconst WT_CONTAINER_ID = \"wt-portal-root\";\nconst getPortalContainer = () => {\n if (typeof document === \"undefined\") return null;\n let container = document.getElementById(WT_CONTAINER_ID);\n if (!container) {\n container = document.createElement(\"div\");\n container.id = WT_CONTAINER_ID;\n container.style.cssText = \"position:absolute;top:0;left:0;z-index:2147483647;pointer-events:none;\";\n // Prepend so it's BEFORE any Radix portals in DOM\n document.body.prepend(container);\n }\n return container;\n};\n\n// Stop pointer / mouse / touch / focus events from bubbling out of the walkthrough\n// so that Radix's capture-phase \"outside click\" detection never fires.\nconst stopOutsideEvents = (e) => e.stopPropagation();\nconst portalEventHandlers = {\n onPointerDown: stopOutsideEvents,\n onPointerUp: stopOutsideEvents,\n onMouseDown: stopOutsideEvents,\n onMouseUp: stopOutsideEvents,\n onTouchStart: stopOutsideEvents,\n onFocusCapture: stopOutsideEvents,\n};\n\nexport const WalkthroughOverlay = ({\n $popoverPadding = 12,\n $popoverBorderRadius = 8,\n $popoverGap = 12,\n $popoverMinWidth = 275,\n nextColor,\n prevColor,\n skipColor,\n} = {}) => {\n injectKeyframes();\n const { activeTour } = useGlobalState();\n\n // Singleton guard: register this instance on mount, unregister on unmount.\n // The actual guard check is done AFTER all hooks (React rules of hooks).\n const instanceIdRef = useRef(null);\n if (instanceIdRef.current === null) {\n instanceIdRef.current = ++_overlayInstanceCounter;\n }\n\n useEffect(() => {\n const myId = instanceIdRef.current;\n if (_activeOverlayId === null) {\n _activeOverlayId = myId;\n }\n return () => {\n if (_activeOverlayId === myId) {\n _activeOverlayId = null;\n }\n };\n }, []);\n\n const nextBtnRef = useRef(null);\n const popoverRef = useRef(null);\n const [popoverPos, setPopoverPos] = useState(null);\n\n // Snapshot of the step content shown in the popover.\n // Only updates when the popover is ready (not animating), so the user\n // never sees content swap while the popover is still visible / fading out.\n const displayStepRef = useRef(null);\n const displayPosRef = useRef(null);\n\n const [validSteps, setValidSteps] = useState([]);\n const waitingForElsRef = useRef(false);\n\n useEffect(() => {\n if (!activeTour) {\n setValidSteps([]);\n waitingForElsRef.current = false;\n return;\n }\n\n waitingForElsRef.current = true;\n\n const compute = () =>\n activeTour.steps\n .map((s, i) => ({ ...s, _originalIdx: i }))\n .filter((s) => document.getElementById(resolveElId(s.el)));\n\n const found = compute();\n\n if (found.length > 0) {\n setValidSteps(found);\n return;\n }\n\n setValidSteps([]);\n\n const observer = new MutationObserver(() => {\n const updated = compute();\n if (updated.length > 0) {\n waitingForElsRef.current = false;\n setValidSteps(updated);\n observer.disconnect();\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n waitingForElsRef.current = false;\n };\n }, [activeTour]);\n\n const currentOriginalIdx = activeTour?.currentStep ?? 0;\n const currentValidPos = validSteps.findIndex(\n (s) => s._originalIdx === currentOriginalIdx,\n );\n\n const rawStep = currentValidPos !== -1 ? validSteps[currentValidPos] : null;\n\n // --- Delay logic (tour-level, once per tour) ---\n // Track which tour we already handled delay for, so switching tours always re-evaluates.\n const delayDoneForRef = useRef(null); // name of tour whose delay is done\n const [isDelaying, setIsDelaying] = useState(false);\n\n const currentTourName = activeTour?.name ?? null;\n\n useEffect(() => {\n if (!activeTour) {\n // Tour ended — reset\n delayDoneForRef.current = null;\n setIsDelaying(false);\n return;\n }\n\n // If we already handled delay for THIS tour — nothing to do\n if (delayDoneForRef.current === activeTour.name) return;\n\n const ms = activeTour.delay ?? 0;\n\n if (ms <= 0) {\n delayDoneForRef.current = activeTour.name;\n return;\n }\n\n // Start delaying: show overlay, block UI\n setIsDelaying(true);\n const timer = setTimeout(() => {\n delayDoneForRef.current = activeTour.name;\n setIsDelaying(false);\n }, ms);\n\n return () => clearTimeout(timer);\n }, [currentTourName, activeTour]);\n // --- end delay logic ---\n\n const step = isDelaying ? null : rawStep;\n const tourAnimationSpeed = activeTour?.animationSpeed ?? 350;\n const { rect, isAnimating } = useAnimatedRect(step, tourAnimationSpeed, activeTour?.containerElement, !!activeTour, activeTour?.name);\n\n const completeTour = useCallback(() => {\n if (!activeTour) return;\n const { storageSuffix: sk, name: n, onWalkthroughComplete: cb } = activeTour;\n // Save last highlight position so the next tour can animate FROM this point\n setGlobalState({ activeTour: null, lastRect: rect ? { ...rect } : null });\n markDone(sk, n);\n if (cb) cb(n);\n }, [activeTour, rect]);\n\n useEffect(() => {\n if (!activeTour) return;\n if (currentValidPos !== -1) return;\n if (waitingForElsRef.current) return;\n\n if (validSteps.length === 0) {\n completeTour();\n return;\n }\n\n const nextValid = validSteps.find(\n (s) => s._originalIdx > currentOriginalIdx,\n );\n\n if (nextValid) {\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: nextValid._originalIdx },\n }));\n } else {\n completeTour();\n }\n }, [\n activeTour,\n currentValidPos,\n currentOriginalIdx,\n validSteps,\n completeTour,\n ]);\n\n useEffect(() => {\n if (!popoverRef.current || !rect || !step || isAnimating) {\n setPopoverPos(null);\n return;\n }\n\n const targetEl = document.getElementById(resolveElId(step.el));\n if (!targetEl) {\n setPopoverPos(null);\n return;\n }\n\n const targetRect = targetEl.getBoundingClientRect();\n const inViewport =\n targetRect.bottom > 0 &&\n targetRect.top < window.innerHeight &&\n targetRect.right > 0 &&\n targetRect.left < window.innerWidth;\n\n if (!inViewport) {\n setPopoverPos(null);\n return;\n }\n\n const measured = popoverRef.current.getBoundingClientRect();\n const pos = computePopoverPosition(\n rect,\n measured.width,\n measured.height,\n $popoverGap,\n step.position,\n );\n setPopoverPos(pos);\n }, [rect, step, $popoverGap, isAnimating]);\n\n useEffect(() => {\n if (nextBtnRef.current) {\n nextBtnRef.current.focus();\n }\n }, [activeTour?.currentStep, popoverPos]);\n\n if (!activeTour) return null;\n\n // Singleton guard: if another instance already claimed the active slot, this one does nothing.\n // This check is placed after all hooks to comply with React rules of hooks.\n if (_activeOverlayId !== null && _activeOverlayId !== instanceIdRef.current) {\n return null;\n }\n\n // During delay: show overlay only (no highlight, no popover)\n if (isDelaying) {\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n />\n </svg>\n </OverlayWrapper>\n </div>,\n getPortalContainer(),\n );\n }\n\n // If no step and no rect at all, hide everything\n if (!step && !rect) return null;\n\n // If step is loading but we have a previous rect, keep overlay visible with last highlight\n // This prevents the overlay from disappearing during step transitions\n if (!step || !rect) {\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n {rect ? (\n <>\n <defs>\n <mask id=\"wt-mask\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n <rect\n x={rect.left}\n y={rect.top}\n width={rect.width}\n height={rect.height}\n rx={10}\n fill=\"black\"\n />\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n mask=\"url(#wt-mask)\"\n />\n </>\n ) : (\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n />\n )}\n </svg>\n </OverlayWrapper>\n </div>,\n getPortalContainer(),\n );\n }\n\n const totalSteps = validSteps.length;\n const isLast = currentValidPos === totalSteps - 1;\n\n // Display-only step counter values (manualTotal / initialStep)\n const displayInitialStep = activeTour.initialStep ?? 0;\n const displayCurrentStep = currentValidPos + 1 + displayInitialStep;\n const displayTotalSteps = activeTour.manualTotal ?? totalSteps;\n const borderRadius = step.borderRadius ?? 10;\n\n const {\n isShowSkip = true,\n isShowPrev = true,\n isShowStep = true,\n nextLabel: tourNextLabel = \"Next\",\n prevLabel: tourPrevLabel = \"Back\",\n skipLabel: tourSkipLabel = \"Skip\",\n doneLabel = \"Done\",\n } = activeTour;\n\n const nextLabel = step.nextLabel ?? tourNextLabel;\n const prevLabel = step.prevLabel ?? tourPrevLabel;\n const skipLabel = step.skipLabel ?? tourSkipLabel;\n\n const next = () => {\n if (step.isTriggerEl) {\n const triggerTarget = typeof step.isTriggerEl === \"string\"\n ? document.getElementById(resolveElId(step.isTriggerEl))\n : document.getElementById(resolveElId(step.el));\n if (triggerTarget) triggerTarget.click();\n }\n\n if (isLast) {\n completeTour();\n } else {\n const nextStep = validSteps[currentValidPos + 1];\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: nextStep._originalIdx },\n }));\n }\n };\n\n const prev = () => {\n if (currentValidPos > 0) {\n const prevStep = validSteps[currentValidPos - 1];\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: prevStep._originalIdx },\n }));\n }\n };\n\n const skip = () => {\n completeTour();\n };\n\n const popoverWidth = clampSize(step.width, window.innerWidth);\n const popoverHeight = step.height\n ? clampSize(step.height, window.innerHeight)\n : undefined;\n\n const popoverReady = popoverPos && !isAnimating;\n\n // Snapshot the popover content so it only updates when the popover is\n // actually visible. This prevents the user from seeing content swap\n // while the highlight is still animating to the next element.\n if (popoverReady) {\n displayStepRef.current = {\n step,\n nextLabel,\n prevLabel,\n skipLabel,\n isShowSkip,\n isShowPrev,\n isShowStep,\n doneLabel,\n isLast,\n currentValidPos,\n displayCurrentStep,\n displayTotalSteps,\n popoverHeight,\n };\n displayPosRef.current = currentValidPos;\n }\n\n const ds = displayStepRef.current;\n\n // When animating: render popover offscreen so it can be measured by the\n // position-calculation effect, but keep it invisible to the user.\n // When ready: show at the computed position with the pop-in animation.\n const popoverStyle = popoverReady\n ? {\n top: popoverPos.top,\n left: popoverPos.left,\n width: popoverWidth,\n minWidth: $popoverMinWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\n }\n : {\n position: \"fixed\",\n top: -9999,\n left: -9999,\n opacity: 0,\n pointerEvents: \"none\",\n width: popoverWidth,\n minWidth: $popoverMinWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\n animation: \"none\",\n };\n\n // Use snapshot content for the popover; fall back to live step if no snapshot yet (first render).\n const pStep = ds ? ds.step : step;\n const pNextLabel = ds ? ds.nextLabel : nextLabel;\n const pPrevLabel = ds ? ds.prevLabel : prevLabel;\n const pSkipLabel = ds ? ds.skipLabel : skipLabel;\n const pIsShowSkip = ds ? ds.isShowSkip : isShowSkip;\n const pIsShowPrev = ds ? ds.isShowPrev : isShowPrev;\n const pIsShowStep = ds ? ds.isShowStep : isShowStep;\n const pDoneLabel = ds ? ds.doneLabel : doneLabel;\n const pIsLast = ds ? ds.isLast : isLast;\n const pCurrentValidPos = ds ? ds.currentValidPos : currentValidPos;\n const pDisplayCurrentStep = ds ? ds.displayCurrentStep : displayCurrentStep;\n const pDisplayTotalSteps = ds ? ds.displayTotalSteps : displayTotalSteps;\n const pPopoverHeight = ds ? ds.popoverHeight : popoverHeight;\n\n const overlay = (\n <>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n <defs>\n <mask id=\"wt-mask\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n <rect\n x={rect.left}\n y={rect.top}\n width={rect.width}\n height={rect.height}\n rx={borderRadius}\n fill=\"black\"\n />\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n mask=\"url(#wt-mask)\"\n />\n </svg>\n </OverlayWrapper>\n\n <PopoverContainer ref={popoverRef} style={popoverStyle}>\n <PopoverBody>\n <div style={{display: \"flex\",flexDirection: \"row\", justifyContent: \"space-between\"}}>\n {pStep.title ? <PopoverTitle>{pStep.title}</PopoverTitle>:''}\n {(pStep.isShowStep ?? pIsShowStep) && (\n <span style={{color: \"#a1a1aa\" ,fontSize: \"12px\", fontWeight: \"400\"}}>{pDisplayCurrentStep}/{pDisplayTotalSteps}</span>\n )}\n </div>\n <DescriptionScrollArea $height={pPopoverHeight}>\n {Array.isArray(pStep.description) &&\n pStep.description.map((d, i) => (\n <DescriptionBlock key={i} $direction={d.direction}>\n {d.title && <DescriptionTitle>{d.title}: </DescriptionTitle>}\n <span style={{ whiteSpace: \"pre-line\" }}>{d.description}</span>\n </DescriptionBlock>\n ))}\n </DescriptionScrollArea>\n </PopoverBody>\n\n <PopoverFooter>\n <StepCounter>\n {pIsShowSkip && (\n <button\n className=\"wt-btn\"\n style={{ background: skipColor || \"transparent\", color: skipColor ? \"#fff\" : \"#a1a1aa\" }}\n onClick={skip}\n >\n {pSkipLabel}\n </button>\n )}\n </StepCounter>\n\n <ButtonGroup>\n {(pStep.isShowPrev ?? pIsShowPrev) && pCurrentValidPos > 0 && (\n <button\n className=\"wt-btn\"\n style={{ background: prevColor || \"#f4f4f5\", color: prevColor ? \"#fff\" : \"#3f3f46\" }}\n onClick={prev}\n >\n {pPrevLabel}\n </button>\n )}\n <button\n ref={nextBtnRef}\n className=\"wt-btn wt-btn-next\"\n style={{ background: nextColor || \"#000\", color: \"#fff\", boxShadow: \"0 2px 8px rgba(0,0,0,0.3)\" }}\n onClick={next}\n >\n {pIsLast ? pDoneLabel : pNextLabel}\n </button>\n </ButtonGroup>\n </PopoverFooter>\n </PopoverContainer>\n </>\n );\n\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n {overlay}\n </div>,\n getPortalContainer(),\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/utils/index.js","../src/styles/index.js","../src/WalkthroughOverlay.js"],"names":["useEffect","useState","el","_a","jsx"],"mappings":"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","file":"index.mjs","sourcesContent":["import { useState, useEffect } from \"react\";\n\nconst listeners = new Set();\nlet globalState = {\n activeTour: null,\n lastRect: null,\n};\n\nconst notify = () => {\n listeners.forEach((fn) => fn({ ...globalState }));\n};\n\nconst setGlobalState = (updater) => {\n globalState =\n typeof updater === \"function\"\n ? updater(globalState)\n : { ...globalState, ...updater };\n notify();\n};\n\nconst useGlobalState = () => {\n const [state, setState] = useState(globalState);\n useEffect(() => {\n const handler = (s) => setState(s);\n listeners.add(handler);\n return () => listeners.delete(handler);\n }, []);\n return state;\n};\n\nconst getStorageKey = (storageSuffix) => {\n return storageSuffix ? `walkthrough-done:${storageSuffix}` : \"walkthrough-done\";\n};\n\nconst getStorageData = (storageSuffix) => {\n try {\n return JSON.parse(localStorage.getItem(getStorageKey(storageSuffix)) || \"{}\");\n } catch {\n return {};\n }\n};\n\nconst markDone = (storageSuffix, name) => {\n const key = getStorageKey(storageSuffix);\n const data = getStorageData(storageSuffix);\n data[name] = true;\n localStorage.setItem(key, JSON.stringify(data));\n window.dispatchEvent(new Event(\"walkthrough-done\"));\n};\n\nconst isDone = (storageSuffix, name) => {\n const data = getStorageData(storageSuffix);\n return data[name] === true;\n};\n\nconst isAnyDepDone = (storageSuffix, deps) => {\n if (!deps || deps.length === 0) return true;\n return deps.some((d) => isDone(storageSuffix, d));\n};\n\nconst resetWalkthrough = ({ storageSuffix = \"\", walkthroughList = [] } = {}) => {\n const key = getStorageKey(storageSuffix);\n const data = getStorageData(storageSuffix);\n walkthroughList.forEach((n) => {\n delete data[n];\n });\n localStorage.setItem(key, JSON.stringify(data));\n // Clear last highlight position so replayed tours start fresh\n globalState = { ...globalState, lastRect: null };\n notify();\n window.dispatchEvent(new Event(\"walkthrough-done\"));\n};\n\nconst easeOutCubic = (t) => {\n return 1 - Math.pow(1 - t, 3);\n};\n\nconst lerp = (a, b, t) => {\n return a + (b - a) * t;\n};\n\nexport {\n globalState,\n setGlobalState,\n useGlobalState,\n markDone,\n isDone,\n isAnyDepDone,\n resetWalkthrough,\n easeOutCubic,\n lerp,\n};\n","import React, { forwardRef } from \"react\";\n\nconst STYLE_ID = \"wt-keyframes\";\n\nexport const injectKeyframes = () => {\n if (typeof document === \"undefined\") return;\n if (document.getElementById(STYLE_ID)) return;\n const style = document.createElement(\"style\");\n style.id = STYLE_ID;\n style.textContent = `\n @keyframes wt-pop-in {\n from { opacity: 0; transform: translateY(10px) scale(0.96); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n @keyframes wt-fade-slide-in {\n from { opacity: 0; transform: translateX(12px); }\n to { opacity: 1; transform: translateX(0); }\n }\n .wt-overlay-wrap svg { display: block; width: 100%; height: 100%; }\n .wt-btn { border: none; border-radius: 8px; padding: 7px 16px; font-size: 13px; font-weight: 600; cursor: pointer; transition: all 0.15s ease; outline: none; font-family: inherit; }\n .wt-btn:hover { opacity: 0.85; }\n .wt-btn-next:hover { box-shadow: 0 4px 12px rgba(79,70,229,0.4); transform: translateY(-1px); }\n .wt-btn-next:active { transform: translateY(0); }\n `;\n document.head.appendChild(style);\n};\n\nexport const OverlayWrapper = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} className=\"wt-overlay-wrap\" style={{\n position: \"fixed\", inset: 0, zIndex: 10001,\n pointerEvents: \"none\", width: \"100vw\", height: \"100vh\", ...style,\n }} {...props}>{children}</div>\n));\n\nexport const ClickLayer = forwardRef(({ style, ...props }, ref) => (\n <div ref={ref} style={{\n position: \"fixed\", inset: 0, zIndex: 10000, cursor: \"default\", ...style,\n }} {...props} />\n));\n\nexport const PopoverContainer = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n position: \"fixed\", zIndex: 99999, background: \"#fff\",\n boxShadow: \"0 12px 40px rgba(0,0,0,0.18), 0 2px 10px rgba(0,0,0,0.06)\",\n animation: \"wt-pop-in 0.28s cubic-bezier(0.34, 1.56, 0.64, 1)\",\n ...style,\n }} {...props}>{children}</div>\n));\n\nexport const PopoverBody = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n animation: \"wt-fade-slide-in 0.3s ease-out\", ...style,\n }} {...props}>{children}</div>\n));\n\nexport const PopoverTitle = forwardRef(({ style, children, ...props }, ref) => (\n <h3 ref={ref} style={{\n fontSize: 15, fontWeight: 700, color: \"#1a1a2e\",\n margin: \"0 0 10px\", lineHeight: 1.3, whiteSpace: \"pre-line\", ...style,\n }} {...props}>{children}</h3>\n));\n\nexport const DescriptionScrollArea = forwardRef(({ $height, style, children, ...props }, ref) => {\n const extra = $height && $height !== \"auto\" ? {\n maxHeight: typeof $height === \"number\" ? $height : $height,\n overflowY: \"auto\",\n } : {};\n return <div ref={ref} style={{ ...extra, ...style }} {...props}>{children}</div>;\n});\n\nexport const DescriptionBlock = forwardRef(({ $direction = \"row\", style, children, ...props }, ref) => (\n <div ref={ref} style={{\n display: \"flex\", flexDirection: $direction,\n fontSize: 13, color: \"#666\", lineHeight: 1.6, margin: \"0 0 4px\",\n ...($direction === \"column\" ? { gap: 2 } : { alignItems: \"baseline\", gap: 4 }),\n ...style,\n }} {...props}>{children}</div>\n));\n\nexport const DescriptionTitle = forwardRef(({ style, children, ...props }, ref) => (\n <span ref={ref} style={{\n fontWeight: 600, color: \"#333\", whiteSpace: \"pre-line\", ...style,\n }} {...props}>{children}</span>\n));\n\nexport const PopoverFooter = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{\n display: \"flex\", alignItems: \"center\", justifyContent: \"space-between\",\n marginTop: 16, gap: 8, ...style,\n }} {...props}>{children}</div>\n));\n\nexport const StepCounter = forwardRef(({ style, children, ...props }, ref) => (\n <span ref={ref} style={{\n fontSize: 13, fontWeight: 600, color: \"#a1a1aa\", ...style,\n }} {...props}>{children}</span>\n));\n\n\nexport const ButtonGroup = forwardRef(({ style, children, ...props }, ref) => (\n <div ref={ref} style={{ display: \"flex\", gap: 6, ...style }} {...props}>{children}</div>\n));\n\n","import { useState, useEffect, useCallback, useRef } from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport {\n globalState,\n setGlobalState,\n useGlobalState,\n markDone,\n isDone,\n isAnyDepDone,\n resetWalkthrough,\n easeOutCubic,\n lerp,\n} from \"./utils\";\n\nimport {\n injectKeyframes,\n OverlayWrapper,\n ClickLayer,\n PopoverContainer,\n PopoverBody,\n PopoverTitle,\n DescriptionScrollArea,\n DescriptionBlock,\n DescriptionTitle,\n PopoverFooter,\n StepCounter,\n ButtonGroup,\n} from \"./styles\";\n\nexport { resetWalkthrough };\n\nconst resolveElId = (id) => (typeof id === \"string\" && id.startsWith(\"#\") ? id.slice(1) : id);\n\n// Singleton guard: only one WalkthroughOverlay instance should render at a time.\n// Each instance gets a unique ID on mount. The first instance to mount \"wins\" and\n// all subsequent instances return null until the first one unmounts.\nlet _overlayInstanceCounter = 0;\nlet _activeOverlayId = null;\n\nexport const useWalkthrough = ({\n name,\n storageSuffix = \"\",\n dependsOn = [],\n steps,\n delay = 0,\n onWalkthroughComplete,\n isShowSkip = true,\n isShowPrev = true,\n isShowStep = true,\n nextLabel = \"Next\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done\",\n containerElement,\n animationSpeed = 350,\n manualTotal,\n initialStep,\n}) => {\n const started = useRef(false);\n const onCompleteRef = useRef(onWalkthroughComplete);\n\n useEffect(() => {\n onCompleteRef.current = onWalkthroughComplete;\n }, [onWalkthroughComplete]);\n\n const start = useCallback(() => {\n if (isDone(storageSuffix, name) || started.current) return;\n started.current = true;\n setGlobalState({\n activeTour: {\n name,\n steps,\n delay,\n currentStep: 0,\n storageSuffix,\n onWalkthroughComplete: onCompleteRef.current,\n isShowSkip,\n isShowPrev,\n isShowStep,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n containerElement,\n animationSpeed,\n manualTotal,\n initialStep,\n },\n });\n }, [\n name,\n steps,\n delay,\n storageSuffix,\n isShowSkip,\n isShowPrev,\n isShowStep,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n containerElement,\n animationSpeed,\n manualTotal,\n initialStep,\n ]);\n\n useEffect(() => {\n const check = () => {\n if (isDone(storageSuffix, name)) return;\n started.current = false;\n if (isAnyDepDone(storageSuffix, dependsOn) && !globalState.activeTour) {\n start();\n }\n };\n\n check();\n\n window.addEventListener(\"walkthrough-done\", check);\n return () => window.removeEventListener(\"walkthrough-done\", check);\n }, [name, storageSuffix, dependsOn, start]);\n\n return { start };\n};\n\nconst calcTransitionMs = (from, to, baseMs) => {\n const dx = (to.left + to.width / 2) - (from.left + from.width / 2);\n const dy = (to.top + to.height / 2) - (from.top + from.height / 2);\n const dist = Math.sqrt(dx * dx + dy * dy);\n const diagonal = Math.sqrt(window.innerWidth ** 2 + window.innerHeight ** 2);\n const ratio = Math.min(dist / diagonal, 1);\n const minMs = baseMs * 0.5;\n return Math.round(minMs + ratio * baseMs);\n};\n\nconst waitForScrollEnd = (container, timeoutMs = 400) => {\n return new Promise((resolve) => {\n let resolved = false;\n let scrollEndTimer = null;\n\n const done = () => {\n if (resolved) return;\n resolved = true;\n container.removeEventListener(\"scroll\", onScroll);\n clearTimeout(fallbackTimer);\n clearTimeout(scrollEndTimer);\n resolve();\n };\n\n const onScroll = () => {\n clearTimeout(scrollEndTimer);\n scrollEndTimer = setTimeout(done, 120);\n };\n\n container.addEventListener(\"scroll\", onScroll);\n\n // Fallback: if no scroll event fires (element already visible), resolve quickly\n const fallbackTimer = setTimeout(done, timeoutMs);\n });\n};\n\nconst useAnimatedRect = (step, baseMs = 350, containerElement, isTourActive = true, tourName = null) => {\n const [displayRect, setDisplayRect] = useState(null);\n const [isAnimating, setIsAnimating] = useState(false);\n const targetRef = useRef(null);\n const currentRef = useRef(null);\n const rafRef = useRef(null);\n const scrollingRef = useRef(false);\n const cleanupRef = useRef(null);\n const prevTourNameRef = useRef(null);\n\n useEffect(() => {\n let cancelled = false;\n\n // Detect tour change: when tourName changes, seed currentRef from lastRect\n // so the highlight animates FROM the previous tour's last position.\n // This handles the case where dependsOn tours chain synchronously\n // (activeTour never becomes null between tours in the same render batch).\n if (tourName && tourName !== prevTourNameRef.current) {\n const savedRect = globalState.lastRect;\n if (savedRect && prevTourNameRef.current !== null) {\n // Only seed from lastRect when transitioning between tours (not on first mount)\n currentRef.current = { ...savedRect };\n // Clear display so highlight doesn't linger at old position during delay\n setDisplayRect(null);\n targetRef.current = null;\n }\n prevTourNameRef.current = tourName;\n }\n\n if (!step) {\n if (!isTourActive) {\n setDisplayRect(null);\n targetRef.current = null;\n currentRef.current = null;\n }\n // Otherwise keep last rect visible so overlay doesn't disappear between step transitions\n setIsAnimating(false);\n scrollingRef.current = false;\n return;\n }\n\n // If we have no starting position yet (first tour ever), try to pick up lastRect.\n if (!currentRef.current) {\n const savedRect = globalState.lastRect;\n if (savedRect) {\n currentRef.current = { ...savedRect };\n }\n }\n\n const containerEl = containerElement\n ? document.getElementById(resolveElId(containerElement))\n : null;\n\n const computeRect = (el) => {\n const r = el.getBoundingClientRect();\n const padding = step.padding ?? 8;\n // Use viewport-relative coords (no window.scrollY/scrollX) because\n // the overlay is position:fixed. This works correctly for elements\n // inside fixed-position containers (drawers, modals) and also for\n // normal page elements.\n return {\n top: r.top - padding,\n left: r.left - padding,\n width: r.width + padding * 2,\n height: r.height + padding * 2,\n };\n };\n\n const startAnimation = (newTarget) => {\n if (cancelled) return;\n\n targetRef.current = newTarget;\n\n if (!currentRef.current) {\n currentRef.current = newTarget;\n setDisplayRect(newTarget);\n setIsAnimating(false);\n return;\n }\n\n const from = { ...currentRef.current };\n const to = newTarget;\n const duration = calcTransitionMs(from, to, baseMs);\n const startTime = performance.now();\n\n setIsAnimating(true);\n\n const tick = (now) => {\n if (cancelled) return;\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / duration, 1);\n const eased = easeOutCubic(progress);\n\n const interpolated = {\n top: lerp(from.top, to.top, eased),\n left: lerp(from.left, to.left, eased),\n width: lerp(from.width, to.width, eased),\n height: lerp(from.height, to.height, eased),\n };\n\n currentRef.current = interpolated;\n setDisplayRect(interpolated);\n\n if (progress < 1) {\n rafRef.current = requestAnimationFrame(tick);\n } else {\n currentRef.current = to;\n setDisplayRect(to);\n setIsAnimating(false);\n }\n };\n\n rafRef.current = requestAnimationFrame(tick);\n };\n\n // Shrink highlight to a tiny point at its center when element is not found.\n // This gives visual feedback that the tour is \"working\" rather than stuck.\n const shrinkHighlight = () => {\n if (!currentRef.current) return;\n const cur = currentRef.current;\n const centerX = cur.left + cur.width / 2;\n const centerY = cur.top + cur.height / 2;\n const shrunkRect = { top: centerY, left: centerX, width: 0, height: 0 };\n startAnimation(shrunkRect);\n };\n\n // Kick off the full flow for a found element: scroll → wait → compute → animate\n const runForElement = (el) => {\n if (cancelled) return;\n\n const compute = () => computeRect(el);\n\n // onLayout only runs AFTER scroll has settled — prevents flicker during scroll\n const onLayout = () => {\n if (scrollingRef.current) return;\n const updated = compute();\n targetRef.current = updated;\n currentRef.current = updated;\n setDisplayRect(updated);\n };\n\n // Mark as animating immediately so popover stays hidden during scroll+animate\n setIsAnimating(true);\n\n // Always use scrollIntoView — browser will scroll all scrollable ancestors\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\", inline: \"nearest\" });\n\n if (containerEl) {\n scrollingRef.current = true;\n waitForScrollEnd(containerEl, baseMs + 150).then(() => {\n scrollingRef.current = false;\n if (cancelled) return;\n startAnimation(compute());\n });\n } else {\n requestAnimationFrame(() => {\n if (cancelled) return;\n startAnimation(compute());\n });\n }\n\n window.addEventListener(\"resize\", onLayout);\n window.addEventListener(\"scroll\", onLayout, true);\n if (containerEl) containerEl.addEventListener(\"scroll\", onLayout);\n\n cleanupRef.current = () => {\n window.removeEventListener(\"resize\", onLayout);\n window.removeEventListener(\"scroll\", onLayout, true);\n if (containerEl) containerEl.removeEventListener(\"scroll\", onLayout);\n };\n };\n\n const el = document.getElementById(resolveElId(step.el));\n\n if (el) {\n // Element found immediately — proceed normally\n runForElement(el);\n } else {\n // Element not found — shrink highlight and wait for it to appear\n setIsAnimating(true);\n shrinkHighlight();\n\n const observer = new MutationObserver(() => {\n const found = document.getElementById(resolveElId(step.el));\n if (found) {\n observer.disconnect();\n if (!cancelled) runForElement(found);\n }\n });\n observer.observe(document.body, { childList: true, subtree: true });\n\n cleanupRef.current = () => observer.disconnect();\n }\n\n return () => {\n cancelled = true;\n scrollingRef.current = false;\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n if (cleanupRef.current) cleanupRef.current();\n };\n }, [step, containerElement, isTourActive, tourName]);\n\n return { rect: displayRect, isAnimating };\n};\n\nconst clampSize = (value, max) => {\n if (value === \"auto\" || value === undefined) return \"auto\";\n const num = typeof value === \"string\" ? parseInt(value, 10) : value;\n const clamped = Math.min(num, max - 12);\n return clamped;\n};\n\nconst EDGE_MARGIN = 8;\n\nconst computePopoverPosition = (rect, popoverW, popoverH, gap, preferred) => {\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n const clampLeft = (left) =>\n Math.max(EDGE_MARGIN, Math.min(left, vw - popoverW - EDGE_MARGIN));\n const clampTop = (top) =>\n Math.max(EDGE_MARGIN, Math.min(top, vh - popoverH - EDGE_MARGIN));\n\n const positions = {\n bottom: {\n top: rect.top + rect.height + gap,\n left: clampLeft(rect.left),\n },\n top: {\n top: rect.top - popoverH - gap,\n left: clampLeft(rect.left),\n },\n right: {\n top: clampTop(rect.top),\n left: rect.left + rect.width + gap,\n },\n left: {\n top: clampTop(rect.top),\n left: rect.left - popoverW - gap,\n },\n };\n\n const fitsInViewport = (pos) =>\n pos.top >= EDGE_MARGIN &&\n pos.left >= EDGE_MARGIN &&\n pos.top + popoverH <= vh - EDGE_MARGIN &&\n pos.left + popoverW <= vw - EDGE_MARGIN;\n\n if (preferred && positions[preferred] && fitsInViewport(positions[preferred])) {\n return positions[preferred];\n }\n\n const order = [\"bottom\", \"top\", \"right\", \"left\"];\n for (const dir of order) {\n if (fitsInViewport(positions[dir])) {\n return positions[dir];\n }\n }\n\n const spaceBottom = vh - (rect.top + rect.height + gap);\n const spaceTop = rect.top - gap;\n const spaceRight = vw - (rect.left + rect.width + gap);\n const spaceLeft = rect.left - gap;\n\n const best = [\n { dir: \"bottom\", space: spaceBottom },\n { dir: \"top\", space: spaceTop },\n { dir: \"right\", space: spaceRight },\n { dir: \"left\", space: spaceLeft },\n ].sort((a, b) => b.space - a.space)[0].dir;\n\n const fallback = positions[best];\n return {\n top: Math.max(EDGE_MARGIN, Math.min(fallback.top, vh - popoverH - EDGE_MARGIN)),\n left: Math.max(EDGE_MARGIN, Math.min(fallback.left, vw - popoverW - EDGE_MARGIN)),\n };\n};\n\n// Lazily create & prepend a dedicated container as the FIRST child of <body>.\n// Being first in DOM order means it sits before any Radix / 3rd-party portals,\n// and we stop pointer events from propagating so Radix never sees them.\nconst WT_CONTAINER_ID = \"wt-portal-root\";\nconst getPortalContainer = () => {\n if (typeof document === \"undefined\") return null;\n let container = document.getElementById(WT_CONTAINER_ID);\n if (!container) {\n container = document.createElement(\"div\");\n container.id = WT_CONTAINER_ID;\n container.style.cssText = \"position:absolute;top:0;left:0;z-index:2147483647;pointer-events:none;\";\n // Prepend so it's BEFORE any Radix portals in DOM\n document.body.prepend(container);\n }\n return container;\n};\n\n// Stop pointer / mouse / touch / focus events from bubbling out of the walkthrough\n// so that Radix's capture-phase \"outside click\" detection never fires.\nconst stopOutsideEvents = (e) => e.stopPropagation();\nconst portalEventHandlers = {\n onPointerDown: stopOutsideEvents,\n onPointerUp: stopOutsideEvents,\n onMouseDown: stopOutsideEvents,\n onMouseUp: stopOutsideEvents,\n onTouchStart: stopOutsideEvents,\n onFocusCapture: stopOutsideEvents,\n};\n\nexport const WalkthroughOverlay = ({\n $popoverPadding = 12,\n $popoverBorderRadius = 8,\n $popoverGap = 12,\n $popoverMinWidth = 275,\n nextColor,\n prevColor,\n skipColor,\n} = {}) => {\n injectKeyframes();\n const { activeTour } = useGlobalState();\n\n // Singleton guard: register this instance on mount, unregister on unmount.\n // The actual guard check is done AFTER all hooks (React rules of hooks).\n const instanceIdRef = useRef(null);\n if (instanceIdRef.current === null) {\n instanceIdRef.current = ++_overlayInstanceCounter;\n }\n\n useEffect(() => {\n const myId = instanceIdRef.current;\n if (_activeOverlayId === null) {\n _activeOverlayId = myId;\n }\n return () => {\n if (_activeOverlayId === myId) {\n _activeOverlayId = null;\n }\n };\n }, []);\n\n const nextBtnRef = useRef(null);\n const popoverRef = useRef(null);\n const [popoverPos, setPopoverPos] = useState(null);\n\n // Explicitly hide the popover the instant the user clicks next/prev.\n // This avoids the 1-frame flash where step has changed but isAnimating\n // hasn't been set to true yet by the async useAnimatedRect effect.\n const [popoverHidden, setPopoverHidden] = useState(false);\n\n // Snapshot of the step content shown in the popover.\n // Only updates when the popover is ready (not animating), so the user\n // never sees content swap while the popover is still visible / fading out.\n const displayStepRef = useRef(null);\n const displayPosRef = useRef(null);\n\n const [validSteps, setValidSteps] = useState([]);\n const waitingForElsRef = useRef(false);\n\n useEffect(() => {\n if (!activeTour) {\n setValidSteps([]);\n waitingForElsRef.current = false;\n return;\n }\n\n waitingForElsRef.current = true;\n\n const compute = () =>\n activeTour.steps\n .map((s, i) => ({ ...s, _originalIdx: i }))\n .filter((s) => document.getElementById(resolveElId(s.el)));\n\n const found = compute();\n\n if (found.length > 0) {\n setValidSteps(found);\n return;\n }\n\n setValidSteps([]);\n\n const observer = new MutationObserver(() => {\n const updated = compute();\n if (updated.length > 0) {\n waitingForElsRef.current = false;\n setValidSteps(updated);\n observer.disconnect();\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n\n return () => {\n observer.disconnect();\n waitingForElsRef.current = false;\n };\n }, [activeTour]);\n\n const currentOriginalIdx = activeTour?.currentStep ?? 0;\n const currentValidPos = validSteps.findIndex(\n (s) => s._originalIdx === currentOriginalIdx,\n );\n\n const rawStep = currentValidPos !== -1 ? validSteps[currentValidPos] : null;\n\n // --- Delay logic (tour-level, once per tour) ---\n // Track which tour we already handled delay for, so switching tours always re-evaluates.\n const delayDoneForRef = useRef(null); // name of tour whose delay is done\n const [isDelaying, setIsDelaying] = useState(false);\n\n const currentTourName = activeTour?.name ?? null;\n\n useEffect(() => {\n if (!activeTour) {\n // Tour ended — reset\n delayDoneForRef.current = null;\n setIsDelaying(false);\n return;\n }\n\n // If we already handled delay for THIS tour — nothing to do\n if (delayDoneForRef.current === activeTour.name) return;\n\n const ms = activeTour.delay ?? 0;\n\n if (ms <= 0) {\n delayDoneForRef.current = activeTour.name;\n return;\n }\n\n // Start delaying: show overlay, block UI\n setIsDelaying(true);\n const timer = setTimeout(() => {\n delayDoneForRef.current = activeTour.name;\n setIsDelaying(false);\n }, ms);\n\n return () => clearTimeout(timer);\n }, [currentTourName, activeTour]);\n // --- end delay logic ---\n\n const step = isDelaying ? null : rawStep;\n const tourAnimationSpeed = activeTour?.animationSpeed ?? 350;\n const { rect, isAnimating } = useAnimatedRect(step, tourAnimationSpeed, activeTour?.containerElement, !!activeTour, activeTour?.name);\n\n const completeTour = useCallback(() => {\n if (!activeTour) return;\n const { storageSuffix: sk, name: n, onWalkthroughComplete: cb } = activeTour;\n // Save last highlight position so the next tour can animate FROM this point\n setGlobalState({ activeTour: null, lastRect: rect ? { ...rect } : null });\n markDone(sk, n);\n if (cb) cb(n);\n }, [activeTour, rect]);\n\n useEffect(() => {\n if (!activeTour) return;\n if (currentValidPos !== -1) return;\n if (waitingForElsRef.current) return;\n\n if (validSteps.length === 0) {\n completeTour();\n return;\n }\n\n const nextValid = validSteps.find(\n (s) => s._originalIdx > currentOriginalIdx,\n );\n\n if (nextValid) {\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: nextValid._originalIdx },\n }));\n } else {\n completeTour();\n }\n }, [\n activeTour,\n currentValidPos,\n currentOriginalIdx,\n validSteps,\n completeTour,\n ]);\n\n useEffect(() => {\n if (!popoverRef.current || !rect || !step || isAnimating) {\n setPopoverPos(null);\n return;\n }\n\n const targetEl = document.getElementById(resolveElId(step.el));\n if (!targetEl) {\n setPopoverPos(null);\n return;\n }\n\n const targetRect = targetEl.getBoundingClientRect();\n const inViewport =\n targetRect.bottom > 0 &&\n targetRect.top < window.innerHeight &&\n targetRect.right > 0 &&\n targetRect.left < window.innerWidth;\n\n if (!inViewport) {\n setPopoverPos(null);\n return;\n }\n\n const measured = popoverRef.current.getBoundingClientRect();\n const pos = computePopoverPosition(\n rect,\n measured.width,\n measured.height,\n $popoverGap,\n step.position,\n );\n setPopoverPos(pos);\n }, [rect, step, $popoverGap, isAnimating]);\n\n useEffect(() => {\n if (nextBtnRef.current) {\n nextBtnRef.current.focus();\n }\n }, [activeTour?.currentStep, popoverPos]);\n\n // Clear the explicit hide flag once the animation has finished.\n useEffect(() => {\n if (popoverHidden && !isAnimating) {\n setPopoverHidden(false);\n }\n }, [popoverHidden, isAnimating]);\n\n if (!activeTour) return null;\n\n // Singleton guard: if another instance already claimed the active slot, this one does nothing.\n // This check is placed after all hooks to comply with React rules of hooks.\n if (_activeOverlayId !== null && _activeOverlayId !== instanceIdRef.current) {\n return null;\n }\n\n // During delay: show overlay only (no highlight, no popover)\n if (isDelaying) {\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n />\n </svg>\n </OverlayWrapper>\n </div>,\n getPortalContainer(),\n );\n }\n\n // If no step and no rect at all, hide everything\n if (!step && !rect) return null;\n\n // If step is loading but we have a previous rect, keep overlay visible with last highlight\n // This prevents the overlay from disappearing during step transitions\n if (!step || !rect) {\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n {rect ? (\n <>\n <defs>\n <mask id=\"wt-mask\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n <rect\n x={rect.left}\n y={rect.top}\n width={rect.width}\n height={rect.height}\n rx={10}\n fill=\"black\"\n />\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n mask=\"url(#wt-mask)\"\n />\n </>\n ) : (\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n />\n )}\n </svg>\n </OverlayWrapper>\n </div>,\n getPortalContainer(),\n );\n }\n\n const totalSteps = validSteps.length;\n const isLast = currentValidPos === totalSteps - 1;\n\n // Display-only step counter values (manualTotal / initialStep)\n const displayInitialStep = activeTour.initialStep ?? 0;\n const displayCurrentStep = currentValidPos + 1 + displayInitialStep;\n const displayTotalSteps = activeTour.manualTotal ?? totalSteps;\n const borderRadius = step.borderRadius ?? 10;\n\n const {\n isShowSkip = true,\n isShowPrev = true,\n isShowStep = true,\n nextLabel: tourNextLabel = \"Next\",\n prevLabel: tourPrevLabel = \"Back\",\n skipLabel: tourSkipLabel = \"Skip\",\n doneLabel = \"Done\",\n } = activeTour;\n\n const nextLabel = step.nextLabel ?? tourNextLabel;\n const prevLabel = step.prevLabel ?? tourPrevLabel;\n const skipLabel = step.skipLabel ?? tourSkipLabel;\n\n const next = () => {\n if (step.isTriggerEl) {\n const triggerTarget = typeof step.isTriggerEl === \"string\"\n ? document.getElementById(resolveElId(step.isTriggerEl))\n : document.getElementById(resolveElId(step.el));\n if (triggerTarget) triggerTarget.click();\n }\n\n if (isLast) {\n completeTour();\n } else {\n setPopoverHidden(true);\n const nextStep = validSteps[currentValidPos + 1];\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: nextStep._originalIdx },\n }));\n }\n };\n\n const prev = () => {\n if (currentValidPos > 0) {\n setPopoverHidden(true);\n const prevStep = validSteps[currentValidPos - 1];\n setGlobalState((s) => ({\n ...s,\n activeTour: { ...s.activeTour, currentStep: prevStep._originalIdx },\n }));\n }\n };\n\n const skip = () => {\n completeTour();\n };\n\n const popoverWidth = clampSize(step.width, window.innerWidth);\n const popoverHeight = step.height\n ? clampSize(step.height, window.innerHeight)\n : undefined;\n\n const popoverReady = popoverPos && !isAnimating && !popoverHidden;\n\n // Snapshot the popover content so it only updates when the popover is\n // actually visible. This prevents the user from seeing content swap\n // while the highlight is still animating to the next element.\n if (popoverReady) {\n displayStepRef.current = {\n step,\n nextLabel,\n prevLabel,\n skipLabel,\n isShowSkip,\n isShowPrev,\n isShowStep,\n doneLabel,\n isLast,\n currentValidPos,\n displayCurrentStep,\n displayTotalSteps,\n popoverHeight,\n };\n displayPosRef.current = currentValidPos;\n }\n\n const ds = displayStepRef.current;\n\n // When animating: render popover offscreen so it can be measured by the\n // position-calculation effect, but keep it invisible to the user.\n // When ready: show at the computed position with the pop-in animation.\n const popoverStyle = popoverReady\n ? {\n top: popoverPos.top,\n left: popoverPos.left,\n width: popoverWidth,\n minWidth: $popoverMinWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\n }\n : {\n position: \"fixed\",\n top: -9999,\n left: -9999,\n opacity: 0,\n pointerEvents: \"none\",\n width: popoverWidth,\n minWidth: $popoverMinWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\n animation: \"none\",\n };\n\n // Use snapshot content for the popover; fall back to live step if no snapshot yet (first render).\n const pStep = ds ? ds.step : step;\n const pNextLabel = ds ? ds.nextLabel : nextLabel;\n const pPrevLabel = ds ? ds.prevLabel : prevLabel;\n const pSkipLabel = ds ? ds.skipLabel : skipLabel;\n const pIsShowSkip = ds ? ds.isShowSkip : isShowSkip;\n const pIsShowPrev = ds ? ds.isShowPrev : isShowPrev;\n const pIsShowStep = ds ? ds.isShowStep : isShowStep;\n const pDoneLabel = ds ? ds.doneLabel : doneLabel;\n const pIsLast = ds ? ds.isLast : isLast;\n const pCurrentValidPos = ds ? ds.currentValidPos : currentValidPos;\n const pDisplayCurrentStep = ds ? ds.displayCurrentStep : displayCurrentStep;\n const pDisplayTotalSteps = ds ? ds.displayTotalSteps : displayTotalSteps;\n const pPopoverHeight = ds ? ds.popoverHeight : popoverHeight;\n\n const overlay = (\n <>\n <ClickLayer />\n <OverlayWrapper>\n <svg>\n <defs>\n <mask id=\"wt-mask\">\n <rect x=\"0\" y=\"0\" width=\"100%\" height=\"100%\" fill=\"white\" />\n <rect\n x={rect.left}\n y={rect.top}\n width={rect.width}\n height={rect.height}\n rx={borderRadius}\n fill=\"black\"\n />\n </mask>\n </defs>\n <rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0,0,0,0.52)\"\n mask=\"url(#wt-mask)\"\n />\n </svg>\n </OverlayWrapper>\n\n <PopoverContainer ref={popoverRef} style={popoverStyle}>\n <PopoverBody>\n <div style={{display: \"flex\",flexDirection: \"row\", justifyContent: \"space-between\"}}>\n {pStep.title ? <PopoverTitle>{pStep.title}</PopoverTitle>:''}\n {(pStep.isShowStep ?? pIsShowStep) && (\n <span style={{color: \"#a1a1aa\" ,fontSize: \"12px\", fontWeight: \"400\"}}>{pDisplayCurrentStep}/{pDisplayTotalSteps}</span>\n )}\n </div>\n <DescriptionScrollArea $height={pPopoverHeight}>\n {Array.isArray(pStep.description) &&\n pStep.description.map((d, i) => (\n <DescriptionBlock key={i} $direction={d.direction}>\n {d.title && <DescriptionTitle>{d.title}: </DescriptionTitle>}\n <span style={{ whiteSpace: \"pre-line\" }}>{d.description}</span>\n </DescriptionBlock>\n ))}\n </DescriptionScrollArea>\n </PopoverBody>\n\n <PopoverFooter>\n <StepCounter>\n {pIsShowSkip && (\n <button\n className=\"wt-btn\"\n style={{ background: skipColor || \"transparent\", color: skipColor ? \"#fff\" : \"#a1a1aa\" }}\n onClick={skip}\n >\n {pSkipLabel}\n </button>\n )}\n </StepCounter>\n\n <ButtonGroup>\n {(pStep.isShowPrev ?? pIsShowPrev) && pCurrentValidPos > 0 && (\n <button\n className=\"wt-btn\"\n style={{ background: prevColor || \"#f4f4f5\", color: prevColor ? \"#fff\" : \"#3f3f46\" }}\n onClick={prev}\n >\n {pPrevLabel}\n </button>\n )}\n <button\n ref={nextBtnRef}\n className=\"wt-btn wt-btn-next\"\n style={{ background: nextColor || \"#000\", color: \"#fff\", boxShadow: \"0 2px 8px rgba(0,0,0,0.3)\" }}\n onClick={next}\n >\n {pIsLast ? pDoneLabel : pNextLabel}\n </button>\n </ButtonGroup>\n </PopoverFooter>\n </PopoverContainer>\n </>\n );\n\n return createPortal(\n <div {...portalEventHandlers} style={{ pointerEvents: \"auto\" }}>\n {overlay}\n </div>,\n getPortalContainer(),\n );\n};\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tent-official/react-walkthrough",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.58",
|
|
4
4
|
"description": "Lightweight React walkthrough/tour component with auto-positioning, dependency chains, and smooth animations",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|