@tent-official/react-walkthrough 1.1.47 → 1.1.48

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/README.md CHANGED
@@ -83,6 +83,7 @@ Hook to register a walkthrough tour.
83
83
  | `skipLabel` | `string` | `"Skip"` | Skip button label (can be overridden per step) |
84
84
  | `delay` | `number` | `0` | Delay in ms before highlighting the first step. During delay, a dark overlay is shown |
85
85
  | `doneLabel` | `string` | `"Done"` | Done button label (last step) |
86
+ | `animationSpeed` | `number` | `350` | Base animation speed (ms). Actual duration is calculated from distance — shorter distance = faster, longer distance = slower. Lower value = faster overall, higher = slower overall |
86
87
 
87
88
  **Returns:** `{ start: () => void }`
88
89
 
@@ -123,7 +124,6 @@ Place this component once at the root of your app. It renders via React Portal i
123
124
  | `$popoverBorderRadius` | `number` | `8` | Border radius of popover (px) |
124
125
  | `$popoverGap` | `number` | `12` | Gap between highlight and popover (px) |
125
126
  | `$popoverMinWidth` | `number` | `275` | Minimum width of the popover (px) |
126
- | `$animationSpeed` | `number` | `350` | Base animation speed (ms). Actual duration is calculated from distance — shorter distance = faster, longer distance = slower. Lower value = faster overall, higher = slower overall |
127
127
  | `nextColor` | `string` | `"#000"` | Custom next button color |
128
128
  | `prevColor` | `string` | — | Custom previous button color |
129
129
  | `skipColor` | `string` | — | Custom skip button color |
package/dist/index.d.mts CHANGED
@@ -85,6 +85,8 @@ interface IUseWalkthroughOptions {
85
85
  doneLabel?: string;
86
86
  /** DOM element ID of the scrollable container (e.g. a drawer or overflow div). When provided, the walkthrough will scroll within this container instead of the window. Supports "#id" or "id" format. */
87
87
  containerElement?: string;
88
+ /** Base animation speed (ms) used to calculate transition duration from distance. Default: 350 */
89
+ animationSpeed?: number;
88
90
  }
89
91
  /**
90
92
  * Return value of the useWalkthrough hook.
@@ -105,8 +107,6 @@ interface IWalkthroughOverlayProps {
105
107
  $popoverGap?: number;
106
108
  /** Minimum width of the popover (px). Default: 275 */
107
109
  $popoverMinWidth?: number;
108
- /** Base animation speed (ms) used to calculate transition duration from distance. Default: 350 */
109
- $animationSpeed?: number;
110
110
  /** Custom color for the next button */
111
111
  nextColor?: string;
112
112
  /** Custom color for the previous button */
package/dist/index.d.ts CHANGED
@@ -85,6 +85,8 @@ interface IUseWalkthroughOptions {
85
85
  doneLabel?: string;
86
86
  /** DOM element ID of the scrollable container (e.g. a drawer or overflow div). When provided, the walkthrough will scroll within this container instead of the window. Supports "#id" or "id" format. */
87
87
  containerElement?: string;
88
+ /** Base animation speed (ms) used to calculate transition duration from distance. Default: 350 */
89
+ animationSpeed?: number;
88
90
  }
89
91
  /**
90
92
  * Return value of the useWalkthrough hook.
@@ -105,8 +107,6 @@ interface IWalkthroughOverlayProps {
105
107
  $popoverGap?: number;
106
108
  /** Minimum width of the popover (px). Default: 275 */
107
109
  $popoverMinWidth?: number;
108
- /** Base animation speed (ms) used to calculate transition duration from distance. Default: 350 */
109
- $animationSpeed?: number;
110
110
  /** Custom color for the next button */
111
111
  nextColor?: string;
112
112
  /** Custom color for the previous button */
package/dist/index.js CHANGED
@@ -183,7 +183,8 @@ var useWalkthrough = ({
183
183
  prevLabel = "Back",
184
184
  skipLabel = "Skip",
185
185
  doneLabel = "Done",
186
- containerElement
186
+ containerElement,
187
+ animationSpeed = 350
187
188
  }) => {
188
189
  const started = react.useRef(false);
189
190
  const onCompleteRef = react.useRef(onWalkthroughComplete);
@@ -208,7 +209,8 @@ var useWalkthrough = ({
208
209
  prevLabel,
209
210
  skipLabel,
210
211
  doneLabel,
211
- containerElement
212
+ containerElement,
213
+ animationSpeed
212
214
  }
213
215
  });
214
216
  }, [
@@ -223,7 +225,8 @@ var useWalkthrough = ({
223
225
  prevLabel,
224
226
  skipLabel,
225
227
  doneLabel,
226
- containerElement
228
+ containerElement,
229
+ animationSpeed
227
230
  ]);
228
231
  react.useEffect(() => {
229
232
  const check = () => {
@@ -488,6 +491,41 @@ var getPortalContainer = () => {
488
491
  }
489
492
  return container;
490
493
  };
494
+ var INTERACTIVE_SELECTOR = [
495
+ "input",
496
+ "button",
497
+ "select",
498
+ "textarea",
499
+ "a[href]",
500
+ '[role="radio"]',
501
+ '[role="checkbox"]',
502
+ '[role="switch"]',
503
+ '[role="button"]',
504
+ '[role="menuitem"]',
505
+ '[role="option"]',
506
+ '[role="tab"]',
507
+ '[role="link"]'
508
+ ].join(",");
509
+ var triggerElement = (el) => {
510
+ if (el.matches(INTERACTIVE_SELECTOR)) {
511
+ dispatchFullClick(el);
512
+ return;
513
+ }
514
+ const child = el.querySelector(INTERACTIVE_SELECTOR);
515
+ if (child) {
516
+ dispatchFullClick(child);
517
+ return;
518
+ }
519
+ el.click();
520
+ };
521
+ var dispatchFullClick = (el) => {
522
+ const opts = { bubbles: true, cancelable: true, view: window };
523
+ el.dispatchEvent(new PointerEvent("pointerdown", opts));
524
+ el.dispatchEvent(new MouseEvent("mousedown", opts));
525
+ el.dispatchEvent(new PointerEvent("pointerup", opts));
526
+ el.dispatchEvent(new MouseEvent("mouseup", opts));
527
+ el.click();
528
+ };
491
529
  var stopOutsideEvents = (e) => e.stopPropagation();
492
530
  var portalEventHandlers = {
493
531
  onPointerDown: stopOutsideEvents,
@@ -502,12 +540,11 @@ var WalkthroughOverlay = ({
502
540
  $popoverBorderRadius = 8,
503
541
  $popoverGap = 12,
504
542
  $popoverMinWidth = 275,
505
- $animationSpeed = 350,
506
543
  nextColor,
507
544
  prevColor,
508
545
  skipColor
509
546
  } = {}) => {
510
- var _a, _b, _c, _d, _e, _f, _g, _h;
547
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
511
548
  injectKeyframes();
512
549
  const { activeTour } = useGlobalState();
513
550
  const instanceIdRef = react.useRef(null);
@@ -587,7 +624,8 @@ var WalkthroughOverlay = ({
587
624
  return () => clearTimeout(timer);
588
625
  }, [currentTourName, activeTour]);
589
626
  const step = isDelaying ? null : rawStep;
590
- const { rect, isAnimating } = useAnimatedRect(step, $animationSpeed, activeTour == null ? void 0 : activeTour.containerElement, !!activeTour, activeTour == null ? void 0 : activeTour.name);
627
+ const tourAnimationSpeed = (_c = activeTour == null ? void 0 : activeTour.animationSpeed) != null ? _c : 350;
628
+ const { rect, isAnimating } = useAnimatedRect(step, tourAnimationSpeed, activeTour == null ? void 0 : activeTour.containerElement, !!activeTour, activeTour == null ? void 0 : activeTour.name);
591
629
  const completeTour = react.useCallback(() => {
592
630
  if (!activeTour) return;
593
631
  const { storageSuffix: sk, name: n, onWalkthroughComplete: cb } = activeTour;
@@ -731,7 +769,7 @@ var WalkthroughOverlay = ({
731
769
  }
732
770
  const totalSteps = validSteps.length;
733
771
  const isLast = currentValidPos === totalSteps - 1;
734
- const borderRadius = (_c = step.borderRadius) != null ? _c : 10;
772
+ const borderRadius = (_d = step.borderRadius) != null ? _d : 10;
735
773
  const {
736
774
  isShowSkip = true,
737
775
  isShowPrev = true,
@@ -741,13 +779,13 @@ var WalkthroughOverlay = ({
741
779
  skipLabel: tourSkipLabel = "Skip",
742
780
  doneLabel = "Done"
743
781
  } = activeTour;
744
- const nextLabel = (_d = step.nextLabel) != null ? _d : tourNextLabel;
745
- const prevLabel = (_e = step.prevLabel) != null ? _e : tourPrevLabel;
746
- const skipLabel = (_f = step.skipLabel) != null ? _f : tourSkipLabel;
782
+ const nextLabel = (_e = step.nextLabel) != null ? _e : tourNextLabel;
783
+ const prevLabel = (_f = step.prevLabel) != null ? _f : tourPrevLabel;
784
+ const skipLabel = (_g = step.skipLabel) != null ? _g : tourSkipLabel;
747
785
  const next = () => {
748
786
  if (step.isTriggerEl) {
749
787
  const el = document.getElementById(resolveElId(step.el));
750
- if (el) el.click();
788
+ if (el) triggerElement(el);
751
789
  }
752
790
  if (isLast) {
753
791
  completeTour();
@@ -828,7 +866,7 @@ var WalkthroughOverlay = ({
828
866
  /* @__PURE__ */ jsxRuntime.jsxs(PopoverBody, { children: [
829
867
  /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "row", justifyContent: "space-between" }, children: [
830
868
  step.title ? /* @__PURE__ */ jsxRuntime.jsx(PopoverTitle, { children: step.title }) : "",
831
- ((_g = step.isShowStep) != null ? _g : isShowStep) && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: "#a1a1aa", fontSize: "12px", fontWeight: "400" }, children: [
869
+ ((_h = step.isShowStep) != null ? _h : isShowStep) && /* @__PURE__ */ jsxRuntime.jsxs("span", { style: { color: "#a1a1aa", fontSize: "12px", fontWeight: "400" }, children: [
832
870
  currentValidPos + 1,
833
871
  "/",
834
872
  totalSteps
@@ -853,7 +891,7 @@ var WalkthroughOverlay = ({
853
891
  }
854
892
  ) }),
855
893
  /* @__PURE__ */ jsxRuntime.jsxs(ButtonGroup, { children: [
856
- ((_h = step.isShowPrev) != null ? _h : isShowPrev) && currentValidPos > 0 && /* @__PURE__ */ jsxRuntime.jsx(
894
+ ((_i = step.isShowPrev) != null ? _i : isShowPrev) && currentValidPos > 0 && /* @__PURE__ */ jsxRuntime.jsx(
857
895
  "button",
858
896
  {
859
897
  className: "wt-btn",
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}) => {\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 },\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 ]);\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 $animationSpeed = 350,\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 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 { rect, isAnimating } = useAnimatedRect(step, $animationSpeed, 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 const [contentKey, setContentKey] = useState(0);\n const prevStepRef = useRef(null);\n\n useEffect(() => {\n const idx = activeTour?.currentStep ?? null;\n if (idx !== prevStepRef.current) {\n setContentKey((k) => k + 1);\n prevStepRef.current = idx;\n }\n }, [activeTour?.currentStep]);\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 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 el = document.getElementById(resolveElId(step.el));\n if (el) el.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 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 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 key={contentKey}>\n <div style={{display: \"flex\",flexDirection: \"row\", justifyContent: \"space-between\"}}>\n {step.title ? <PopoverTitle>{step.title}</PopoverTitle>:''}\n {(step.isShowStep ?? isShowStep) && (\n <span style={{color: \"#a1a1aa\" ,fontSize: \"12px\", fontWeight: \"400\"}}>{currentValidPos + 1}/{totalSteps}</span>\n )}\n </div>\n <DescriptionScrollArea $height={popoverHeight}>\n {Array.isArray(step.description) &&\n step.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 {isShowSkip && (\n <button\n className=\"wt-btn\"\n style={{ background: skipColor || \"transparent\", color: skipColor ? \"#fff\" : \"#a1a1aa\" }}\n onClick={skip}\n >\n {skipLabel}\n </button>\n )}\n </StepCounter>\n\n <ButtonGroup>\n {(step.isShowPrev ?? isShowPrev) && currentValidPos > 0 && (\n <button\n className=\"wt-btn\"\n style={{ background: prevColor || \"#f4f4f5\", color: prevColor ? \"#fff\" : \"#3f3f46\" }}\n onClick={prev}\n >\n {prevLabel}\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 {isLast ? doneLabel : nextLabel}\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}) => {\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 },\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 ]);\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// Selector for interactive elements that can be clicked inside a container.\n// Covers native form controls, links, and ARIA roles used by component libraries\n// (e.g. Radix, Ant Design, MUI).\nconst INTERACTIVE_SELECTOR = [\n 'input', 'button', 'select', 'textarea', 'a[href]',\n '[role=\"radio\"]', '[role=\"checkbox\"]', '[role=\"switch\"]',\n '[role=\"button\"]', '[role=\"menuitem\"]', '[role=\"option\"]',\n '[role=\"tab\"]', '[role=\"link\"]',\n].join(',');\n\n// Trigger a realistic click on an element.\n// For compound components (e.g. Radio groups), we find the first interactive\n// child and dispatch a full pointer-event sequence so that libraries like\n// Radix / Ant Design / MUI pick it up correctly.\nconst triggerElement = (el) => {\n // If the element itself is interactive, click it directly\n if (el.matches(INTERACTIVE_SELECTOR)) {\n dispatchFullClick(el);\n return;\n }\n\n // Try to find the first interactive child\n const child = el.querySelector(INTERACTIVE_SELECTOR);\n if (child) {\n dispatchFullClick(child);\n return;\n }\n\n // Fallback: click the element itself\n el.click();\n};\n\n// Dispatch a full pointer → mouse → click sequence so that libraries\n// listening for pointerdown/mousedown (Radix, etc.) respond correctly.\nconst dispatchFullClick = (el) => {\n const opts = { bubbles: true, cancelable: true, view: window };\n el.dispatchEvent(new PointerEvent(\"pointerdown\", opts));\n el.dispatchEvent(new MouseEvent(\"mousedown\", opts));\n el.dispatchEvent(new PointerEvent(\"pointerup\", opts));\n el.dispatchEvent(new MouseEvent(\"mouseup\", opts));\n el.click();\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 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 const [contentKey, setContentKey] = useState(0);\n const prevStepRef = useRef(null);\n\n useEffect(() => {\n const idx = activeTour?.currentStep ?? null;\n if (idx !== prevStepRef.current) {\n setContentKey((k) => k + 1);\n prevStepRef.current = idx;\n }\n }, [activeTour?.currentStep]);\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 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 el = document.getElementById(resolveElId(step.el));\n if (el) triggerElement(el);\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 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 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 key={contentKey}>\n <div style={{display: \"flex\",flexDirection: \"row\", justifyContent: \"space-between\"}}>\n {step.title ? <PopoverTitle>{step.title}</PopoverTitle>:''}\n {(step.isShowStep ?? isShowStep) && (\n <span style={{color: \"#a1a1aa\" ,fontSize: \"12px\", fontWeight: \"400\"}}>{currentValidPos + 1}/{totalSteps}</span>\n )}\n </div>\n <DescriptionScrollArea $height={popoverHeight}>\n {Array.isArray(step.description) &&\n step.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 {isShowSkip && (\n <button\n className=\"wt-btn\"\n style={{ background: skipColor || \"transparent\", color: skipColor ? \"#fff\" : \"#a1a1aa\" }}\n onClick={skip}\n >\n {skipLabel}\n </button>\n )}\n </StepCounter>\n\n <ButtonGroup>\n {(step.isShowPrev ?? isShowPrev) && currentValidPos > 0 && (\n <button\n className=\"wt-btn\"\n style={{ background: prevColor || \"#f4f4f5\", color: prevColor ? \"#fff\" : \"#3f3f46\" }}\n onClick={prev}\n >\n {prevLabel}\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 {isLast ? doneLabel : nextLabel}\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
@@ -181,7 +181,8 @@ var useWalkthrough = ({
181
181
  prevLabel = "Back",
182
182
  skipLabel = "Skip",
183
183
  doneLabel = "Done",
184
- containerElement
184
+ containerElement,
185
+ animationSpeed = 350
185
186
  }) => {
186
187
  const started = useRef(false);
187
188
  const onCompleteRef = useRef(onWalkthroughComplete);
@@ -206,7 +207,8 @@ var useWalkthrough = ({
206
207
  prevLabel,
207
208
  skipLabel,
208
209
  doneLabel,
209
- containerElement
210
+ containerElement,
211
+ animationSpeed
210
212
  }
211
213
  });
212
214
  }, [
@@ -221,7 +223,8 @@ var useWalkthrough = ({
221
223
  prevLabel,
222
224
  skipLabel,
223
225
  doneLabel,
224
- containerElement
226
+ containerElement,
227
+ animationSpeed
225
228
  ]);
226
229
  useEffect(() => {
227
230
  const check = () => {
@@ -486,6 +489,41 @@ var getPortalContainer = () => {
486
489
  }
487
490
  return container;
488
491
  };
492
+ var INTERACTIVE_SELECTOR = [
493
+ "input",
494
+ "button",
495
+ "select",
496
+ "textarea",
497
+ "a[href]",
498
+ '[role="radio"]',
499
+ '[role="checkbox"]',
500
+ '[role="switch"]',
501
+ '[role="button"]',
502
+ '[role="menuitem"]',
503
+ '[role="option"]',
504
+ '[role="tab"]',
505
+ '[role="link"]'
506
+ ].join(",");
507
+ var triggerElement = (el) => {
508
+ if (el.matches(INTERACTIVE_SELECTOR)) {
509
+ dispatchFullClick(el);
510
+ return;
511
+ }
512
+ const child = el.querySelector(INTERACTIVE_SELECTOR);
513
+ if (child) {
514
+ dispatchFullClick(child);
515
+ return;
516
+ }
517
+ el.click();
518
+ };
519
+ var dispatchFullClick = (el) => {
520
+ const opts = { bubbles: true, cancelable: true, view: window };
521
+ el.dispatchEvent(new PointerEvent("pointerdown", opts));
522
+ el.dispatchEvent(new MouseEvent("mousedown", opts));
523
+ el.dispatchEvent(new PointerEvent("pointerup", opts));
524
+ el.dispatchEvent(new MouseEvent("mouseup", opts));
525
+ el.click();
526
+ };
489
527
  var stopOutsideEvents = (e) => e.stopPropagation();
490
528
  var portalEventHandlers = {
491
529
  onPointerDown: stopOutsideEvents,
@@ -500,12 +538,11 @@ var WalkthroughOverlay = ({
500
538
  $popoverBorderRadius = 8,
501
539
  $popoverGap = 12,
502
540
  $popoverMinWidth = 275,
503
- $animationSpeed = 350,
504
541
  nextColor,
505
542
  prevColor,
506
543
  skipColor
507
544
  } = {}) => {
508
- var _a, _b, _c, _d, _e, _f, _g, _h;
545
+ var _a, _b, _c, _d, _e, _f, _g, _h, _i;
509
546
  injectKeyframes();
510
547
  const { activeTour } = useGlobalState();
511
548
  const instanceIdRef = useRef(null);
@@ -585,7 +622,8 @@ var WalkthroughOverlay = ({
585
622
  return () => clearTimeout(timer);
586
623
  }, [currentTourName, activeTour]);
587
624
  const step = isDelaying ? null : rawStep;
588
- const { rect, isAnimating } = useAnimatedRect(step, $animationSpeed, activeTour == null ? void 0 : activeTour.containerElement, !!activeTour, activeTour == null ? void 0 : activeTour.name);
625
+ const tourAnimationSpeed = (_c = activeTour == null ? void 0 : activeTour.animationSpeed) != null ? _c : 350;
626
+ const { rect, isAnimating } = useAnimatedRect(step, tourAnimationSpeed, activeTour == null ? void 0 : activeTour.containerElement, !!activeTour, activeTour == null ? void 0 : activeTour.name);
589
627
  const completeTour = useCallback(() => {
590
628
  if (!activeTour) return;
591
629
  const { storageSuffix: sk, name: n, onWalkthroughComplete: cb } = activeTour;
@@ -729,7 +767,7 @@ var WalkthroughOverlay = ({
729
767
  }
730
768
  const totalSteps = validSteps.length;
731
769
  const isLast = currentValidPos === totalSteps - 1;
732
- const borderRadius = (_c = step.borderRadius) != null ? _c : 10;
770
+ const borderRadius = (_d = step.borderRadius) != null ? _d : 10;
733
771
  const {
734
772
  isShowSkip = true,
735
773
  isShowPrev = true,
@@ -739,13 +777,13 @@ var WalkthroughOverlay = ({
739
777
  skipLabel: tourSkipLabel = "Skip",
740
778
  doneLabel = "Done"
741
779
  } = activeTour;
742
- const nextLabel = (_d = step.nextLabel) != null ? _d : tourNextLabel;
743
- const prevLabel = (_e = step.prevLabel) != null ? _e : tourPrevLabel;
744
- const skipLabel = (_f = step.skipLabel) != null ? _f : tourSkipLabel;
780
+ const nextLabel = (_e = step.nextLabel) != null ? _e : tourNextLabel;
781
+ const prevLabel = (_f = step.prevLabel) != null ? _f : tourPrevLabel;
782
+ const skipLabel = (_g = step.skipLabel) != null ? _g : tourSkipLabel;
745
783
  const next = () => {
746
784
  if (step.isTriggerEl) {
747
785
  const el = document.getElementById(resolveElId(step.el));
748
- if (el) el.click();
786
+ if (el) triggerElement(el);
749
787
  }
750
788
  if (isLast) {
751
789
  completeTour();
@@ -826,7 +864,7 @@ var WalkthroughOverlay = ({
826
864
  /* @__PURE__ */ jsxs(PopoverBody, { children: [
827
865
  /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "row", justifyContent: "space-between" }, children: [
828
866
  step.title ? /* @__PURE__ */ jsx(PopoverTitle, { children: step.title }) : "",
829
- ((_g = step.isShowStep) != null ? _g : isShowStep) && /* @__PURE__ */ jsxs("span", { style: { color: "#a1a1aa", fontSize: "12px", fontWeight: "400" }, children: [
867
+ ((_h = step.isShowStep) != null ? _h : isShowStep) && /* @__PURE__ */ jsxs("span", { style: { color: "#a1a1aa", fontSize: "12px", fontWeight: "400" }, children: [
830
868
  currentValidPos + 1,
831
869
  "/",
832
870
  totalSteps
@@ -851,7 +889,7 @@ var WalkthroughOverlay = ({
851
889
  }
852
890
  ) }),
853
891
  /* @__PURE__ */ jsxs(ButtonGroup, { children: [
854
- ((_h = step.isShowPrev) != null ? _h : isShowPrev) && currentValidPos > 0 && /* @__PURE__ */ jsx(
892
+ ((_i = step.isShowPrev) != null ? _i : isShowPrev) && currentValidPos > 0 && /* @__PURE__ */ jsx(
855
893
  "button",
856
894
  {
857
895
  className: "wt-btn",
@@ -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}) => {\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 },\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 ]);\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 $animationSpeed = 350,\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 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 { rect, isAnimating } = useAnimatedRect(step, $animationSpeed, 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 const [contentKey, setContentKey] = useState(0);\n const prevStepRef = useRef(null);\n\n useEffect(() => {\n const idx = activeTour?.currentStep ?? null;\n if (idx !== prevStepRef.current) {\n setContentKey((k) => k + 1);\n prevStepRef.current = idx;\n }\n }, [activeTour?.currentStep]);\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 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 el = document.getElementById(resolveElId(step.el));\n if (el) el.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 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 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 key={contentKey}>\n <div style={{display: \"flex\",flexDirection: \"row\", justifyContent: \"space-between\"}}>\n {step.title ? <PopoverTitle>{step.title}</PopoverTitle>:''}\n {(step.isShowStep ?? isShowStep) && (\n <span style={{color: \"#a1a1aa\" ,fontSize: \"12px\", fontWeight: \"400\"}}>{currentValidPos + 1}/{totalSteps}</span>\n )}\n </div>\n <DescriptionScrollArea $height={popoverHeight}>\n {Array.isArray(step.description) &&\n step.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 {isShowSkip && (\n <button\n className=\"wt-btn\"\n style={{ background: skipColor || \"transparent\", color: skipColor ? \"#fff\" : \"#a1a1aa\" }}\n onClick={skip}\n >\n {skipLabel}\n </button>\n )}\n </StepCounter>\n\n <ButtonGroup>\n {(step.isShowPrev ?? isShowPrev) && currentValidPos > 0 && (\n <button\n className=\"wt-btn\"\n style={{ background: prevColor || \"#f4f4f5\", color: prevColor ? \"#fff\" : \"#3f3f46\" }}\n onClick={prev}\n >\n {prevLabel}\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 {isLast ? doneLabel : nextLabel}\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}) => {\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 },\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 ]);\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// Selector for interactive elements that can be clicked inside a container.\n// Covers native form controls, links, and ARIA roles used by component libraries\n// (e.g. Radix, Ant Design, MUI).\nconst INTERACTIVE_SELECTOR = [\n 'input', 'button', 'select', 'textarea', 'a[href]',\n '[role=\"radio\"]', '[role=\"checkbox\"]', '[role=\"switch\"]',\n '[role=\"button\"]', '[role=\"menuitem\"]', '[role=\"option\"]',\n '[role=\"tab\"]', '[role=\"link\"]',\n].join(',');\n\n// Trigger a realistic click on an element.\n// For compound components (e.g. Radio groups), we find the first interactive\n// child and dispatch a full pointer-event sequence so that libraries like\n// Radix / Ant Design / MUI pick it up correctly.\nconst triggerElement = (el) => {\n // If the element itself is interactive, click it directly\n if (el.matches(INTERACTIVE_SELECTOR)) {\n dispatchFullClick(el);\n return;\n }\n\n // Try to find the first interactive child\n const child = el.querySelector(INTERACTIVE_SELECTOR);\n if (child) {\n dispatchFullClick(child);\n return;\n }\n\n // Fallback: click the element itself\n el.click();\n};\n\n// Dispatch a full pointer → mouse → click sequence so that libraries\n// listening for pointerdown/mousedown (Radix, etc.) respond correctly.\nconst dispatchFullClick = (el) => {\n const opts = { bubbles: true, cancelable: true, view: window };\n el.dispatchEvent(new PointerEvent(\"pointerdown\", opts));\n el.dispatchEvent(new MouseEvent(\"mousedown\", opts));\n el.dispatchEvent(new PointerEvent(\"pointerup\", opts));\n el.dispatchEvent(new MouseEvent(\"mouseup\", opts));\n el.click();\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 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 const [contentKey, setContentKey] = useState(0);\n const prevStepRef = useRef(null);\n\n useEffect(() => {\n const idx = activeTour?.currentStep ?? null;\n if (idx !== prevStepRef.current) {\n setContentKey((k) => k + 1);\n prevStepRef.current = idx;\n }\n }, [activeTour?.currentStep]);\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 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 el = document.getElementById(resolveElId(step.el));\n if (el) triggerElement(el);\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 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 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 key={contentKey}>\n <div style={{display: \"flex\",flexDirection: \"row\", justifyContent: \"space-between\"}}>\n {step.title ? <PopoverTitle>{step.title}</PopoverTitle>:''}\n {(step.isShowStep ?? isShowStep) && (\n <span style={{color: \"#a1a1aa\" ,fontSize: \"12px\", fontWeight: \"400\"}}>{currentValidPos + 1}/{totalSteps}</span>\n )}\n </div>\n <DescriptionScrollArea $height={popoverHeight}>\n {Array.isArray(step.description) &&\n step.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 {isShowSkip && (\n <button\n className=\"wt-btn\"\n style={{ background: skipColor || \"transparent\", color: skipColor ? \"#fff\" : \"#a1a1aa\" }}\n onClick={skip}\n >\n {skipLabel}\n </button>\n )}\n </StepCounter>\n\n <ButtonGroup>\n {(step.isShowPrev ?? isShowPrev) && currentValidPos > 0 && (\n <button\n className=\"wt-btn\"\n style={{ background: prevColor || \"#f4f4f5\", color: prevColor ? \"#fff\" : \"#3f3f46\" }}\n onClick={prev}\n >\n {prevLabel}\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 {isLast ? doneLabel : nextLabel}\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.47",
3
+ "version": "1.1.48",
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",