@tent-official/react-walkthrough 1.0.6 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -72,7 +72,7 @@ Hook to register a walkthrough tour.
72
72
  | --- | --- | --- | --- |
73
73
  | `name` | `string` | **required** | Unique name for this walkthrough |
74
74
  | `steps` | `IWalkthroughStep[]` | **required** | Array of steps |
75
- | `storageKey` | `string` | `""` | Storage key prefix for localStorage |
75
+ | `storageSuffix` | `string` | `""` | Storage suffix for localStorage |
76
76
  | `dependsOn` | `string[]` | `[]` | Walkthrough names that must complete first |
77
77
  | `onWalkthroughComplete` | `(name: string) => void` | — | Callback when walkthrough completes |
78
78
  | `isShowSkip` | `boolean` | `true` | Show skip button |
@@ -81,9 +81,6 @@ Hook to register a walkthrough tour.
81
81
  | `prevLabel` | `string` | `"Back"` | Previous button label |
82
82
  | `skipLabel` | `string` | `"Skip"` | Skip button label |
83
83
  | `doneLabel` | `string` | `"Done ✓"` | Done button label (last step) |
84
- | `nextColor` | `string` | — | Custom next button color |
85
- | `prevColor` | `string` | — | Custom previous button color |
86
- | `skipColor` | `string` | — | Custom skip button color |
87
84
 
88
85
  **Returns:** `{ start: () => void }`
89
86
 
@@ -120,6 +117,9 @@ Place this component once at the root of your app. It renders via React Portal i
120
117
  | `$popoverBorderRadius` | `number` | `8` | Border radius of popover (px) |
121
118
  | `$popoverGap` | `number` | `12` | Gap between highlight and popover (px) |
122
119
  | `$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 |
120
+ | `$nextColor` | `string` | — | Custom next button color |
121
+ | `$prevColor` | `string` | — | Custom previous button color |
122
+ | `$skipColor` | `string` | — | Custom skip button color |
123
123
 
124
124
  ### `resetWalkthrough(options?)`
125
125
 
@@ -129,14 +129,14 @@ Reset walkthroughs so they can be replayed without page refresh.
129
129
  import { resetWalkthrough } from "@tent-official/react-walkthrough";
130
130
 
131
131
  resetWalkthrough({
132
- storageKey: "my-app",
132
+ storageSuffix: "my-app",
133
133
  walkthroughList: ["intro-tour", "feature-tour"],
134
134
  });
135
135
  ```
136
136
 
137
137
  | Option | Type | Default | Description |
138
138
  | --- | --- | --- | --- |
139
- | `storageKey` | `string` | `""` | Storage key prefix |
139
+ | `storageSuffix` | `string` | `""` | Storage suffix |
140
140
  | `walkthroughList` | `string[]` | `[]` | Names of walkthroughs to reset |
141
141
 
142
142
  ## Dependency Chains
@@ -147,14 +147,14 @@ You can create sequential walkthroughs using `dependsOn`:
147
147
  // This runs first
148
148
  useWalkthrough({
149
149
  name: "intro-tour",
150
- storageKey: "my-app",
150
+ storageSuffix: "my-app",
151
151
  steps: [/* ... */],
152
152
  });
153
153
 
154
154
  // This starts automatically after intro-tour completes
155
155
  useWalkthrough({
156
156
  name: "advanced-tour",
157
- storageKey: "my-app",
157
+ storageSuffix: "my-app",
158
158
  dependsOn: ["intro-tour"],
159
159
  steps: [/* ... */],
160
160
  });
package/dist/index.d.mts CHANGED
@@ -51,8 +51,8 @@ interface IWalkthroughStep {
51
51
  interface IUseWalkthroughOptions {
52
52
  /** Unique name for this walkthrough */
53
53
  name: string;
54
- /** Storage key prefix for localStorage. Walkthroughs sharing the same key share completion state */
55
- storageKey?: string;
54
+ /** Storage suffix for localStorage. Walkthroughs sharing the same suffix share completion state */
55
+ storageSuffix?: string;
56
56
  /** List of walkthrough names that must complete before this one starts */
57
57
  dependsOn?: string[];
58
58
  /** Array of steps for this walkthrough */
@@ -71,12 +71,6 @@ interface IUseWalkthroughOptions {
71
71
  skipLabel?: string;
72
72
  /** Label for the done button (last step). Default: "Done ✓" */
73
73
  doneLabel?: string;
74
- /** Custom color for the next button */
75
- nextColor?: string;
76
- /** Custom color for the previous button */
77
- prevColor?: string;
78
- /** Custom color for the skip button */
79
- skipColor?: string;
80
74
  }
81
75
  /**
82
76
  * Return value of the useWalkthrough hook.
@@ -97,13 +91,19 @@ interface IWalkthroughOverlayProps {
97
91
  $popoverGap?: number;
98
92
  /** Base animation speed (ms) used to calculate transition duration from distance. Default: 350 */
99
93
  $animationSpeed?: number;
94
+ /** Custom color for the next button */
95
+ $nextColor?: string;
96
+ /** Custom color for the previous button */
97
+ $prevColor?: string;
98
+ /** Custom color for the skip button */
99
+ $skipColor?: string;
100
100
  }
101
101
  /**
102
102
  * Options for the resetWalkthrough function.
103
103
  */
104
104
  interface IResetWalkthroughOptions {
105
- /** Storage key prefix matching the one used in useWalkthrough. Default: "" */
106
- storageKey?: string;
105
+ /** Storage suffix matching the one used in useWalkthrough. Default: "" */
106
+ storageSuffix?: string;
107
107
  /** List of walkthrough names to reset */
108
108
  walkthroughList?: string[];
109
109
  }
package/dist/index.d.ts CHANGED
@@ -51,8 +51,8 @@ interface IWalkthroughStep {
51
51
  interface IUseWalkthroughOptions {
52
52
  /** Unique name for this walkthrough */
53
53
  name: string;
54
- /** Storage key prefix for localStorage. Walkthroughs sharing the same key share completion state */
55
- storageKey?: string;
54
+ /** Storage suffix for localStorage. Walkthroughs sharing the same suffix share completion state */
55
+ storageSuffix?: string;
56
56
  /** List of walkthrough names that must complete before this one starts */
57
57
  dependsOn?: string[];
58
58
  /** Array of steps for this walkthrough */
@@ -71,12 +71,6 @@ interface IUseWalkthroughOptions {
71
71
  skipLabel?: string;
72
72
  /** Label for the done button (last step). Default: "Done ✓" */
73
73
  doneLabel?: string;
74
- /** Custom color for the next button */
75
- nextColor?: string;
76
- /** Custom color for the previous button */
77
- prevColor?: string;
78
- /** Custom color for the skip button */
79
- skipColor?: string;
80
74
  }
81
75
  /**
82
76
  * Return value of the useWalkthrough hook.
@@ -97,13 +91,19 @@ interface IWalkthroughOverlayProps {
97
91
  $popoverGap?: number;
98
92
  /** Base animation speed (ms) used to calculate transition duration from distance. Default: 350 */
99
93
  $animationSpeed?: number;
94
+ /** Custom color for the next button */
95
+ $nextColor?: string;
96
+ /** Custom color for the previous button */
97
+ $prevColor?: string;
98
+ /** Custom color for the skip button */
99
+ $skipColor?: string;
100
100
  }
101
101
  /**
102
102
  * Options for the resetWalkthrough function.
103
103
  */
104
104
  interface IResetWalkthroughOptions {
105
- /** Storage key prefix matching the one used in useWalkthrough. Default: "" */
106
- storageKey?: string;
105
+ /** Storage suffix matching the one used in useWalkthrough. Default: "" */
106
+ storageSuffix?: string;
107
107
  /** List of walkthrough names to reset */
108
108
  walkthroughList?: string[];
109
109
  }
package/dist/index.js CHANGED
@@ -25,34 +25,34 @@ var useGlobalState = () => {
25
25
  }, []);
26
26
  return state;
27
27
  };
28
- var getStorageKey = (storageKey) => {
29
- return storageKey ? `walkthrough-done:${storageKey}` : "walkthrough-done";
28
+ var getStorageKey = (storageSuffix) => {
29
+ return storageSuffix ? `walkthrough-done:${storageSuffix}` : "walkthrough-done";
30
30
  };
31
- var getStorageData = (storageKey) => {
31
+ var getStorageData = (storageSuffix) => {
32
32
  try {
33
- return JSON.parse(localStorage.getItem(getStorageKey(storageKey)) || "{}");
33
+ return JSON.parse(localStorage.getItem(getStorageKey(storageSuffix)) || "{}");
34
34
  } catch (e) {
35
35
  return {};
36
36
  }
37
37
  };
38
- var markDone = (storageKey, name) => {
39
- const key = getStorageKey(storageKey);
40
- const data = getStorageData(storageKey);
38
+ var markDone = (storageSuffix, name) => {
39
+ const key = getStorageKey(storageSuffix);
40
+ const data = getStorageData(storageSuffix);
41
41
  data[name] = true;
42
42
  localStorage.setItem(key, JSON.stringify(data));
43
43
  window.dispatchEvent(new Event("walkthrough-done"));
44
44
  };
45
- var isDone = (storageKey, name) => {
46
- const data = getStorageData(storageKey);
45
+ var isDone = (storageSuffix, name) => {
46
+ const data = getStorageData(storageSuffix);
47
47
  return data[name] === true;
48
48
  };
49
- var isAnyDepDone = (storageKey, deps) => {
49
+ var isAnyDepDone = (storageSuffix, deps) => {
50
50
  if (!deps || deps.length === 0) return true;
51
- return deps.some((d) => isDone(storageKey, d));
51
+ return deps.some((d) => isDone(storageSuffix, d));
52
52
  };
53
- var resetWalkthrough = ({ storageKey = "", walkthroughList = [] } = {}) => {
54
- const key = getStorageKey(storageKey);
55
- const data = getStorageData(storageKey);
53
+ var resetWalkthrough = ({ storageSuffix = "", walkthroughList = [] } = {}) => {
54
+ const key = getStorageKey(storageSuffix);
55
+ const data = getStorageData(storageSuffix);
56
56
  walkthroughList.forEach((n) => {
57
57
  delete data[n];
58
58
  });
@@ -178,7 +178,7 @@ var ButtonGroup = react.forwardRef(({ style, children, ...props }, ref) => /* @_
178
178
  var resolveElId = (id) => typeof id === "string" && id.startsWith("#") ? id.slice(1) : id;
179
179
  var useWalkthrough = ({
180
180
  name,
181
- storageKey = "",
181
+ storageSuffix = "",
182
182
  dependsOn = [],
183
183
  steps,
184
184
  onWalkthroughComplete,
@@ -187,10 +187,7 @@ var useWalkthrough = ({
187
187
  nextLabel = "Next \u2192",
188
188
  prevLabel = "Back",
189
189
  skipLabel = "Skip",
190
- doneLabel = "Done \u2713",
191
- nextColor,
192
- prevColor,
193
- skipColor
190
+ doneLabel = "Done \u2713"
194
191
  }) => {
195
192
  const started = react.useRef(false);
196
193
  const onCompleteRef = react.useRef(onWalkthroughComplete);
@@ -198,52 +195,46 @@ var useWalkthrough = ({
198
195
  onCompleteRef.current = onWalkthroughComplete;
199
196
  }, [onWalkthroughComplete]);
200
197
  const start = react.useCallback(() => {
201
- if (isDone(storageKey, name) || started.current) return;
198
+ if (isDone(storageSuffix, name) || started.current) return;
202
199
  started.current = true;
203
200
  setGlobalState({
204
201
  activeTour: {
205
202
  name,
206
203
  steps,
207
204
  currentStep: 0,
208
- storageKey,
205
+ storageSuffix,
209
206
  onWalkthroughComplete: onCompleteRef.current,
210
207
  isShowSkip,
211
208
  isShowPrev,
212
209
  nextLabel,
213
210
  prevLabel,
214
211
  skipLabel,
215
- doneLabel,
216
- nextColor,
217
- prevColor,
218
- skipColor
212
+ doneLabel
219
213
  }
220
214
  });
221
215
  }, [
222
216
  name,
223
217
  steps,
224
- storageKey,
218
+ storageSuffix,
225
219
  isShowSkip,
226
220
  isShowPrev,
227
221
  nextLabel,
228
222
  prevLabel,
229
223
  skipLabel,
230
- doneLabel,
231
- nextColor,
232
- prevColor,
233
- skipColor
224
+ doneLabel
234
225
  ]);
235
226
  react.useEffect(() => {
236
227
  const check = () => {
237
- if (isDone(storageKey, name)) return;
228
+ if (isDone(storageSuffix, name)) return;
238
229
  started.current = false;
239
- if (isAnyDepDone(storageKey, dependsOn) && !globalState.activeTour) {
230
+ if (isAnyDepDone(storageSuffix, dependsOn) && !globalState.activeTour) {
240
231
  start();
241
232
  }
242
233
  };
243
234
  check();
244
235
  window.addEventListener("walkthrough-done", check);
245
236
  return () => window.removeEventListener("walkthrough-done", check);
246
- }, [name, storageKey, dependsOn, start]);
237
+ }, [name, storageSuffix, dependsOn, start]);
247
238
  return { start };
248
239
  };
249
240
  var calcTransitionMs = (from, to, baseMs) => {
@@ -263,7 +254,6 @@ var useAnimatedRect = (step, baseMs = 350) => {
263
254
  react.useEffect(() => {
264
255
  if (!step) {
265
256
  setDisplayRect(null);
266
- currentRef.current = null;
267
257
  targetRef.current = null;
268
258
  return;
269
259
  }
@@ -391,7 +381,10 @@ var WalkthroughOverlay = ({
391
381
  $popoverPadding = 12,
392
382
  $popoverBorderRadius = 8,
393
383
  $popoverGap = 12,
394
- $animationSpeed = 350
384
+ $animationSpeed = 350,
385
+ $nextColor,
386
+ $prevColor,
387
+ $skipColor
395
388
  } = {}) => {
396
389
  var _a, _b;
397
390
  injectKeyframes();
@@ -446,7 +439,6 @@ var WalkthroughOverlay = ({
446
439
  setDelayedStep(rawStep);
447
440
  return;
448
441
  }
449
- setDelayedStep(null);
450
442
  const timer = setTimeout(() => setDelayedStep(rawStep), ms);
451
443
  return () => clearTimeout(timer);
452
444
  }, [rawStep]);
@@ -454,7 +446,7 @@ var WalkthroughOverlay = ({
454
446
  const rect = useAnimatedRect(step, $animationSpeed);
455
447
  const completeTour = react.useCallback(() => {
456
448
  if (!activeTour) return;
457
- const { storageKey: sk, name: n, onWalkthroughComplete: cb } = activeTour;
449
+ const { storageSuffix: sk, name: n, onWalkthroughComplete: cb } = activeTour;
458
450
  setGlobalState({ activeTour: null });
459
451
  markDone(sk, n);
460
452
  if (cb) cb(n);
@@ -536,10 +528,7 @@ var WalkthroughOverlay = ({
536
528
  nextLabel = "Next \u2192",
537
529
  prevLabel = "Back",
538
530
  skipLabel = "Skip",
539
- doneLabel = "Done \u2713",
540
- nextColor,
541
- prevColor,
542
- skipColor
531
+ doneLabel = "Done \u2713"
543
532
  } = activeTour;
544
533
  const next = () => {
545
534
  if (step.isTriggerEl) {
@@ -626,14 +615,14 @@ var WalkthroughOverlay = ({
626
615
  totalSteps
627
616
  ] }),
628
617
  /* @__PURE__ */ jsxRuntime.jsxs(ButtonGroup, { children: [
629
- isShowSkip && /* @__PURE__ */ jsxRuntime.jsx(Button, { $variant: "skip", $skipColor: skipColor, onClick: skip, children: skipLabel }),
630
- isShowPrev && currentValidPos > 0 && /* @__PURE__ */ jsxRuntime.jsx(Button, { $variant: "prev", $prevColor: prevColor, onClick: prev, children: prevLabel }),
618
+ isShowSkip && /* @__PURE__ */ jsxRuntime.jsx(Button, { $variant: "skip", $skipColor, onClick: skip, children: skipLabel }),
619
+ isShowPrev && currentValidPos > 0 && /* @__PURE__ */ jsxRuntime.jsx(Button, { $variant: "prev", $prevColor, onClick: prev, children: prevLabel }),
631
620
  /* @__PURE__ */ jsxRuntime.jsx(
632
621
  Button,
633
622
  {
634
623
  ref: nextBtnRef,
635
624
  $variant: "next",
636
- $nextColor: nextColor,
625
+ $nextColor,
637
626
  onClick: next,
638
627
  children: isLast ? doneLabel : nextLabel
639
628
  }
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","_a","jsxs","Fragment","createPortal"],"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};\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 = (storageKey) => {\n return storageKey ? `walkthrough-done:${storageKey}` : \"walkthrough-done\";\n};\n\nconst getStorageData = (storageKey) => {\n try {\n return JSON.parse(localStorage.getItem(getStorageKey(storageKey)) || \"{}\");\n } catch {\n return {};\n }\n};\n\nconst markDone = (storageKey, name) => {\n const key = getStorageKey(storageKey);\n const data = getStorageData(storageKey);\n data[name] = true;\n localStorage.setItem(key, JSON.stringify(data));\n window.dispatchEvent(new Event(\"walkthrough-done\"));\n};\n\nconst isDone = (storageKey, name) => {\n const data = getStorageData(storageKey);\n return data[name] === true;\n};\n\nconst isAnyDepDone = (storageKey, deps) => {\n if (!deps || deps.length === 0) return true;\n return deps.some((d) => isDone(storageKey, d));\n};\n\nconst resetWalkthrough = ({ storageKey = \"\", walkthroughList = [] } = {}) => {\n const key = getStorageKey(storageKey);\n const data = getStorageData(storageKey);\n walkthroughList.forEach((n) => {\n delete data[n];\n });\n localStorage.setItem(key, JSON.stringify(data));\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: \"absolute\", 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, ...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: \"nowrap\", ...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 Button = forwardRef(({ $variant, $skipColor, $prevColor, $nextColor, style, children, ...props }, ref) => {\n let variantStyle = {};\n let className = \"wt-btn\";\n if ($variant === \"skip\") {\n variantStyle = { background: $skipColor || \"transparent\", color: $skipColor ? \"#fff\" : \"#a1a1aa\" };\n } else if ($variant === \"prev\") {\n variantStyle = { background: $prevColor || \"#f4f4f5\", color: $prevColor ? \"#fff\" : \"#3f3f46\" };\n } else if ($variant === \"next\") {\n className = \"wt-btn wt-btn-next\";\n variantStyle = { background: $nextColor || \"#4f46e5\", color: \"#fff\", boxShadow: \"0 2px 8px rgba(79,70,229,0.3)\" };\n }\n return <button ref={ref} className={className} style={{ ...variantStyle, ...style }} {...props}>{children}</button>;\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 Button,\n} from \"./styles\";\n\nexport { resetWalkthrough };\n\nconst resolveElId = (id) => (typeof id === \"string\" && id.startsWith(\"#\") ? id.slice(1) : id);\n\nexport const useWalkthrough = ({\n name,\n storageKey = \"\",\n dependsOn = [],\n steps,\n onWalkthroughComplete,\n isShowSkip = true,\n isShowPrev = true,\n nextLabel = \"Next →\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done ✓\",\n nextColor,\n prevColor,\n skipColor,\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(storageKey, name) || started.current) return;\n started.current = true;\n setGlobalState({\n activeTour: {\n name,\n steps,\n currentStep: 0,\n storageKey,\n onWalkthroughComplete: onCompleteRef.current,\n isShowSkip,\n isShowPrev,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n nextColor,\n prevColor,\n skipColor,\n },\n });\n }, [\n name,\n steps,\n storageKey,\n isShowSkip,\n isShowPrev,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n nextColor,\n prevColor,\n skipColor,\n ]);\n\n useEffect(() => {\n const check = () => {\n if (isDone(storageKey, name)) return;\n started.current = false;\n if (isAnyDepDone(storageKey, 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, storageKey, 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 useAnimatedRect = (step, baseMs = 350) => {\n const [displayRect, setDisplayRect] = useState(null);\n const targetRef = useRef(null);\n const currentRef = useRef(null);\n const rafRef = useRef(null);\n\n useEffect(() => {\n if (!step) {\n setDisplayRect(null);\n currentRef.current = null;\n targetRef.current = null;\n return;\n }\n\n const el = document.getElementById(resolveElId(step.el));\n if (!el) {\n setDisplayRect(null);\n return;\n }\n\n const compute = () => {\n const r = el.getBoundingClientRect();\n const padding = step.padding ?? 8;\n return {\n top: r.top - padding + window.scrollY,\n left: r.left - padding + window.scrollX,\n width: r.width + padding * 2,\n height: r.height + padding * 2,\n };\n };\n\n const newTarget = compute();\n targetRef.current = newTarget;\n\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\n if (!currentRef.current) {\n currentRef.current = newTarget;\n setDisplayRect(newTarget);\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 const tick = (now) => {\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 }\n };\n\n rafRef.current = requestAnimationFrame(tick);\n\n const onLayout = () => {\n const updated = compute();\n targetRef.current = updated;\n currentRef.current = updated;\n setDisplayRect(updated);\n };\n\n window.addEventListener(\"resize\", onLayout);\n window.addEventListener(\"scroll\", onLayout, true);\n\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", onLayout);\n window.removeEventListener(\"scroll\", onLayout, true);\n };\n }, [step]);\n\n return displayRect;\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\nexport const WalkthroughOverlay = ({\n $popoverPadding = 12,\n $popoverBorderRadius = 8,\n $popoverGap = 12,\n $animationSpeed = 350,\n} = {}) => {\n injectKeyframes();\n const { activeTour } = useGlobalState();\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 const [delayedStep, setDelayedStep] = useState(null);\n useEffect(() => {\n if (!rawStep) {\n setDelayedStep(null);\n return;\n }\n const ms = rawStep.delay ?? 0;\n if (ms <= 0) {\n setDelayedStep(rawStep);\n return;\n }\n setDelayedStep(null);\n const timer = setTimeout(() => setDelayedStep(rawStep), ms);\n return () => clearTimeout(timer);\n }, [rawStep]);\n\n const step = delayedStep;\n const rect = useAnimatedRect(step, $animationSpeed);\n\n const completeTour = useCallback(() => {\n if (!activeTour) return;\n const { storageKey: sk, name: n, onWalkthroughComplete: cb } = activeTour;\n setGlobalState({ activeTour: null });\n markDone(sk, n);\n if (cb) cb(n);\n }, [activeTour]);\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) {\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]);\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 || !step || !rect) return null;\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 nextLabel = \"Next →\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done ✓\",\n nextColor,\n prevColor,\n skipColor,\n } = activeTour;\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 popoverStyle = {\n top: popoverPos ? popoverPos.top : -9999,\n left: popoverPos ? popoverPos.left : -9999,\n visibility: popoverPos ? \"visible\" : \"hidden\",\n width: popoverWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\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 {step.title && <PopoverTitle>{step.title}</PopoverTitle>}\n\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>{d.description}</span>\n </DescriptionBlock>\n ))}\n </DescriptionScrollArea>\n </PopoverBody>\n\n <PopoverFooter>\n <StepCounter>\n {currentValidPos + 1}/{totalSteps}\n </StepCounter>\n\n <ButtonGroup>\n {isShowSkip && (\n <Button $variant=\"skip\" $skipColor={skipColor} onClick={skip}>\n {skipLabel}\n </Button>\n )}\n {isShowPrev && currentValidPos > 0 && (\n <Button $variant=\"prev\" $prevColor={prevColor} onClick={prev}>\n {prevLabel}\n </Button>\n )}\n <Button\n ref={nextBtnRef}\n $variant=\"next\"\n $nextColor={nextColor}\n onClick={next}\n >\n {isLast ? doneLabel : nextLabel}\n </Button>\n </ButtonGroup>\n </PopoverFooter>\n </PopoverContainer>\n </>\n );\n\n return createPortal(overlay, document.body);\n};\n"]}
1
+ {"version":3,"sources":["../src/utils/index.js","../src/styles/index.js","../src/WalkthroughOverlay.js"],"names":["useState","useEffect","forwardRef","jsx","useRef","useCallback","_a","jsxs","Fragment","createPortal"],"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};\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 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: \"absolute\", 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, ...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: \"nowrap\", ...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 Button = forwardRef(({ $variant, $skipColor, $prevColor, $nextColor, style, children, ...props }, ref) => {\n let variantStyle = {};\n let className = \"wt-btn\";\n if ($variant === \"skip\") {\n variantStyle = { background: $skipColor || \"transparent\", color: $skipColor ? \"#fff\" : \"#a1a1aa\" };\n } else if ($variant === \"prev\") {\n variantStyle = { background: $prevColor || \"#f4f4f5\", color: $prevColor ? \"#fff\" : \"#3f3f46\" };\n } else if ($variant === \"next\") {\n className = \"wt-btn wt-btn-next\";\n variantStyle = { background: $nextColor || \"#4f46e5\", color: \"#fff\", boxShadow: \"0 2px 8px rgba(79,70,229,0.3)\" };\n }\n return <button ref={ref} className={className} style={{ ...variantStyle, ...style }} {...props}>{children}</button>;\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 Button,\n} from \"./styles\";\n\nexport { resetWalkthrough };\n\nconst resolveElId = (id) => (typeof id === \"string\" && id.startsWith(\"#\") ? id.slice(1) : id);\n\nexport const useWalkthrough = ({\n name,\n storageSuffix = \"\",\n dependsOn = [],\n steps,\n onWalkthroughComplete,\n isShowSkip = true,\n isShowPrev = true,\n nextLabel = \"Next →\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done ✓\",\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 currentStep: 0,\n storageSuffix,\n onWalkthroughComplete: onCompleteRef.current,\n isShowSkip,\n isShowPrev,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n },\n });\n }, [\n name,\n steps,\n storageSuffix,\n isShowSkip,\n isShowPrev,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\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 useAnimatedRect = (step, baseMs = 350) => {\n const [displayRect, setDisplayRect] = useState(null);\n const targetRef = useRef(null);\n const currentRef = useRef(null);\n const rafRef = useRef(null);\n\n useEffect(() => {\n if (!step) {\n setDisplayRect(null);\n targetRef.current = null;\n return;\n }\n\n const el = document.getElementById(resolveElId(step.el));\n if (!el) {\n setDisplayRect(null);\n return;\n }\n\n const compute = () => {\n const r = el.getBoundingClientRect();\n const padding = step.padding ?? 8;\n return {\n top: r.top - padding + window.scrollY,\n left: r.left - padding + window.scrollX,\n width: r.width + padding * 2,\n height: r.height + padding * 2,\n };\n };\n\n const newTarget = compute();\n targetRef.current = newTarget;\n\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\n if (!currentRef.current) {\n currentRef.current = newTarget;\n setDisplayRect(newTarget);\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 const tick = (now) => {\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 }\n };\n\n rafRef.current = requestAnimationFrame(tick);\n\n const onLayout = () => {\n const updated = compute();\n targetRef.current = updated;\n currentRef.current = updated;\n setDisplayRect(updated);\n };\n\n window.addEventListener(\"resize\", onLayout);\n window.addEventListener(\"scroll\", onLayout, true);\n\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", onLayout);\n window.removeEventListener(\"scroll\", onLayout, true);\n };\n }, [step]);\n\n return displayRect;\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\nexport const WalkthroughOverlay = ({\n $popoverPadding = 12,\n $popoverBorderRadius = 8,\n $popoverGap = 12,\n $animationSpeed = 350,\n $nextColor,\n $prevColor,\n $skipColor,\n} = {}) => {\n injectKeyframes();\n const { activeTour } = useGlobalState();\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 const [delayedStep, setDelayedStep] = useState(null);\n useEffect(() => {\n if (!rawStep) {\n setDelayedStep(null);\n return;\n }\n const ms = rawStep.delay ?? 0;\n if (ms <= 0) {\n setDelayedStep(rawStep);\n return;\n }\n // Keep previous delayedStep visible during delay (don't set null)\n const timer = setTimeout(() => setDelayedStep(rawStep), ms);\n return () => clearTimeout(timer);\n }, [rawStep]);\n\n const step = delayedStep;\n const rect = useAnimatedRect(step, $animationSpeed);\n\n const completeTour = useCallback(() => {\n if (!activeTour) return;\n const { storageSuffix: sk, name: n, onWalkthroughComplete: cb } = activeTour;\n setGlobalState({ activeTour: null });\n markDone(sk, n);\n if (cb) cb(n);\n }, [activeTour]);\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) {\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]);\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 || !step || !rect) return null;\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 nextLabel = \"Next →\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done ✓\",\n } = activeTour;\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 popoverStyle = {\n top: popoverPos ? popoverPos.top : -9999,\n left: popoverPos ? popoverPos.left : -9999,\n visibility: popoverPos ? \"visible\" : \"hidden\",\n width: popoverWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\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 {step.title && <PopoverTitle>{step.title}</PopoverTitle>}\n\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>{d.description}</span>\n </DescriptionBlock>\n ))}\n </DescriptionScrollArea>\n </PopoverBody>\n\n <PopoverFooter>\n <StepCounter>\n {currentValidPos + 1}/{totalSteps}\n </StepCounter>\n\n <ButtonGroup>\n {isShowSkip && (\n <Button $variant=\"skip\" $skipColor={$skipColor} onClick={skip}>\n {skipLabel}\n </Button>\n )}\n {isShowPrev && currentValidPos > 0 && (\n <Button $variant=\"prev\" $prevColor={$prevColor} onClick={prev}>\n {prevLabel}\n </Button>\n )}\n <Button\n ref={nextBtnRef}\n $variant=\"next\"\n $nextColor={$nextColor}\n onClick={next}\n >\n {isLast ? doneLabel : nextLabel}\n </Button>\n </ButtonGroup>\n </PopoverFooter>\n </PopoverContainer>\n </>\n );\n\n return createPortal(overlay, document.body);\n};\n"]}
package/dist/index.mjs CHANGED
@@ -23,34 +23,34 @@ var useGlobalState = () => {
23
23
  }, []);
24
24
  return state;
25
25
  };
26
- var getStorageKey = (storageKey) => {
27
- return storageKey ? `walkthrough-done:${storageKey}` : "walkthrough-done";
26
+ var getStorageKey = (storageSuffix) => {
27
+ return storageSuffix ? `walkthrough-done:${storageSuffix}` : "walkthrough-done";
28
28
  };
29
- var getStorageData = (storageKey) => {
29
+ var getStorageData = (storageSuffix) => {
30
30
  try {
31
- return JSON.parse(localStorage.getItem(getStorageKey(storageKey)) || "{}");
31
+ return JSON.parse(localStorage.getItem(getStorageKey(storageSuffix)) || "{}");
32
32
  } catch (e) {
33
33
  return {};
34
34
  }
35
35
  };
36
- var markDone = (storageKey, name) => {
37
- const key = getStorageKey(storageKey);
38
- const data = getStorageData(storageKey);
36
+ var markDone = (storageSuffix, name) => {
37
+ const key = getStorageKey(storageSuffix);
38
+ const data = getStorageData(storageSuffix);
39
39
  data[name] = true;
40
40
  localStorage.setItem(key, JSON.stringify(data));
41
41
  window.dispatchEvent(new Event("walkthrough-done"));
42
42
  };
43
- var isDone = (storageKey, name) => {
44
- const data = getStorageData(storageKey);
43
+ var isDone = (storageSuffix, name) => {
44
+ const data = getStorageData(storageSuffix);
45
45
  return data[name] === true;
46
46
  };
47
- var isAnyDepDone = (storageKey, deps) => {
47
+ var isAnyDepDone = (storageSuffix, deps) => {
48
48
  if (!deps || deps.length === 0) return true;
49
- return deps.some((d) => isDone(storageKey, d));
49
+ return deps.some((d) => isDone(storageSuffix, d));
50
50
  };
51
- var resetWalkthrough = ({ storageKey = "", walkthroughList = [] } = {}) => {
52
- const key = getStorageKey(storageKey);
53
- const data = getStorageData(storageKey);
51
+ var resetWalkthrough = ({ storageSuffix = "", walkthroughList = [] } = {}) => {
52
+ const key = getStorageKey(storageSuffix);
53
+ const data = getStorageData(storageSuffix);
54
54
  walkthroughList.forEach((n) => {
55
55
  delete data[n];
56
56
  });
@@ -176,7 +176,7 @@ var ButtonGroup = forwardRef(({ style, children, ...props }, ref) => /* @__PURE_
176
176
  var resolveElId = (id) => typeof id === "string" && id.startsWith("#") ? id.slice(1) : id;
177
177
  var useWalkthrough = ({
178
178
  name,
179
- storageKey = "",
179
+ storageSuffix = "",
180
180
  dependsOn = [],
181
181
  steps,
182
182
  onWalkthroughComplete,
@@ -185,10 +185,7 @@ var useWalkthrough = ({
185
185
  nextLabel = "Next \u2192",
186
186
  prevLabel = "Back",
187
187
  skipLabel = "Skip",
188
- doneLabel = "Done \u2713",
189
- nextColor,
190
- prevColor,
191
- skipColor
188
+ doneLabel = "Done \u2713"
192
189
  }) => {
193
190
  const started = useRef(false);
194
191
  const onCompleteRef = useRef(onWalkthroughComplete);
@@ -196,52 +193,46 @@ var useWalkthrough = ({
196
193
  onCompleteRef.current = onWalkthroughComplete;
197
194
  }, [onWalkthroughComplete]);
198
195
  const start = useCallback(() => {
199
- if (isDone(storageKey, name) || started.current) return;
196
+ if (isDone(storageSuffix, name) || started.current) return;
200
197
  started.current = true;
201
198
  setGlobalState({
202
199
  activeTour: {
203
200
  name,
204
201
  steps,
205
202
  currentStep: 0,
206
- storageKey,
203
+ storageSuffix,
207
204
  onWalkthroughComplete: onCompleteRef.current,
208
205
  isShowSkip,
209
206
  isShowPrev,
210
207
  nextLabel,
211
208
  prevLabel,
212
209
  skipLabel,
213
- doneLabel,
214
- nextColor,
215
- prevColor,
216
- skipColor
210
+ doneLabel
217
211
  }
218
212
  });
219
213
  }, [
220
214
  name,
221
215
  steps,
222
- storageKey,
216
+ storageSuffix,
223
217
  isShowSkip,
224
218
  isShowPrev,
225
219
  nextLabel,
226
220
  prevLabel,
227
221
  skipLabel,
228
- doneLabel,
229
- nextColor,
230
- prevColor,
231
- skipColor
222
+ doneLabel
232
223
  ]);
233
224
  useEffect(() => {
234
225
  const check = () => {
235
- if (isDone(storageKey, name)) return;
226
+ if (isDone(storageSuffix, name)) return;
236
227
  started.current = false;
237
- if (isAnyDepDone(storageKey, dependsOn) && !globalState.activeTour) {
228
+ if (isAnyDepDone(storageSuffix, dependsOn) && !globalState.activeTour) {
238
229
  start();
239
230
  }
240
231
  };
241
232
  check();
242
233
  window.addEventListener("walkthrough-done", check);
243
234
  return () => window.removeEventListener("walkthrough-done", check);
244
- }, [name, storageKey, dependsOn, start]);
235
+ }, [name, storageSuffix, dependsOn, start]);
245
236
  return { start };
246
237
  };
247
238
  var calcTransitionMs = (from, to, baseMs) => {
@@ -261,7 +252,6 @@ var useAnimatedRect = (step, baseMs = 350) => {
261
252
  useEffect(() => {
262
253
  if (!step) {
263
254
  setDisplayRect(null);
264
- currentRef.current = null;
265
255
  targetRef.current = null;
266
256
  return;
267
257
  }
@@ -389,7 +379,10 @@ var WalkthroughOverlay = ({
389
379
  $popoverPadding = 12,
390
380
  $popoverBorderRadius = 8,
391
381
  $popoverGap = 12,
392
- $animationSpeed = 350
382
+ $animationSpeed = 350,
383
+ $nextColor,
384
+ $prevColor,
385
+ $skipColor
393
386
  } = {}) => {
394
387
  var _a, _b;
395
388
  injectKeyframes();
@@ -444,7 +437,6 @@ var WalkthroughOverlay = ({
444
437
  setDelayedStep(rawStep);
445
438
  return;
446
439
  }
447
- setDelayedStep(null);
448
440
  const timer = setTimeout(() => setDelayedStep(rawStep), ms);
449
441
  return () => clearTimeout(timer);
450
442
  }, [rawStep]);
@@ -452,7 +444,7 @@ var WalkthroughOverlay = ({
452
444
  const rect = useAnimatedRect(step, $animationSpeed);
453
445
  const completeTour = useCallback(() => {
454
446
  if (!activeTour) return;
455
- const { storageKey: sk, name: n, onWalkthroughComplete: cb } = activeTour;
447
+ const { storageSuffix: sk, name: n, onWalkthroughComplete: cb } = activeTour;
456
448
  setGlobalState({ activeTour: null });
457
449
  markDone(sk, n);
458
450
  if (cb) cb(n);
@@ -534,10 +526,7 @@ var WalkthroughOverlay = ({
534
526
  nextLabel = "Next \u2192",
535
527
  prevLabel = "Back",
536
528
  skipLabel = "Skip",
537
- doneLabel = "Done \u2713",
538
- nextColor,
539
- prevColor,
540
- skipColor
529
+ doneLabel = "Done \u2713"
541
530
  } = activeTour;
542
531
  const next = () => {
543
532
  if (step.isTriggerEl) {
@@ -624,14 +613,14 @@ var WalkthroughOverlay = ({
624
613
  totalSteps
625
614
  ] }),
626
615
  /* @__PURE__ */ jsxs(ButtonGroup, { children: [
627
- isShowSkip && /* @__PURE__ */ jsx(Button, { $variant: "skip", $skipColor: skipColor, onClick: skip, children: skipLabel }),
628
- isShowPrev && currentValidPos > 0 && /* @__PURE__ */ jsx(Button, { $variant: "prev", $prevColor: prevColor, onClick: prev, children: prevLabel }),
616
+ isShowSkip && /* @__PURE__ */ jsx(Button, { $variant: "skip", $skipColor, onClick: skip, children: skipLabel }),
617
+ isShowPrev && currentValidPos > 0 && /* @__PURE__ */ jsx(Button, { $variant: "prev", $prevColor, onClick: prev, children: prevLabel }),
629
618
  /* @__PURE__ */ jsx(
630
619
  Button,
631
620
  {
632
621
  ref: nextBtnRef,
633
622
  $variant: "next",
634
- $nextColor: nextColor,
623
+ $nextColor,
635
624
  onClick: next,
636
625
  children: isLast ? doneLabel : nextLabel
637
626
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/index.js","../src/styles/index.js","../src/WalkthroughOverlay.js"],"names":["useEffect","useState","_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};\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 = (storageKey) => {\n return storageKey ? `walkthrough-done:${storageKey}` : \"walkthrough-done\";\n};\n\nconst getStorageData = (storageKey) => {\n try {\n return JSON.parse(localStorage.getItem(getStorageKey(storageKey)) || \"{}\");\n } catch {\n return {};\n }\n};\n\nconst markDone = (storageKey, name) => {\n const key = getStorageKey(storageKey);\n const data = getStorageData(storageKey);\n data[name] = true;\n localStorage.setItem(key, JSON.stringify(data));\n window.dispatchEvent(new Event(\"walkthrough-done\"));\n};\n\nconst isDone = (storageKey, name) => {\n const data = getStorageData(storageKey);\n return data[name] === true;\n};\n\nconst isAnyDepDone = (storageKey, deps) => {\n if (!deps || deps.length === 0) return true;\n return deps.some((d) => isDone(storageKey, d));\n};\n\nconst resetWalkthrough = ({ storageKey = \"\", walkthroughList = [] } = {}) => {\n const key = getStorageKey(storageKey);\n const data = getStorageData(storageKey);\n walkthroughList.forEach((n) => {\n delete data[n];\n });\n localStorage.setItem(key, JSON.stringify(data));\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: \"absolute\", 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, ...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: \"nowrap\", ...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 Button = forwardRef(({ $variant, $skipColor, $prevColor, $nextColor, style, children, ...props }, ref) => {\n let variantStyle = {};\n let className = \"wt-btn\";\n if ($variant === \"skip\") {\n variantStyle = { background: $skipColor || \"transparent\", color: $skipColor ? \"#fff\" : \"#a1a1aa\" };\n } else if ($variant === \"prev\") {\n variantStyle = { background: $prevColor || \"#f4f4f5\", color: $prevColor ? \"#fff\" : \"#3f3f46\" };\n } else if ($variant === \"next\") {\n className = \"wt-btn wt-btn-next\";\n variantStyle = { background: $nextColor || \"#4f46e5\", color: \"#fff\", boxShadow: \"0 2px 8px rgba(79,70,229,0.3)\" };\n }\n return <button ref={ref} className={className} style={{ ...variantStyle, ...style }} {...props}>{children}</button>;\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 Button,\n} from \"./styles\";\n\nexport { resetWalkthrough };\n\nconst resolveElId = (id) => (typeof id === \"string\" && id.startsWith(\"#\") ? id.slice(1) : id);\n\nexport const useWalkthrough = ({\n name,\n storageKey = \"\",\n dependsOn = [],\n steps,\n onWalkthroughComplete,\n isShowSkip = true,\n isShowPrev = true,\n nextLabel = \"Next →\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done ✓\",\n nextColor,\n prevColor,\n skipColor,\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(storageKey, name) || started.current) return;\n started.current = true;\n setGlobalState({\n activeTour: {\n name,\n steps,\n currentStep: 0,\n storageKey,\n onWalkthroughComplete: onCompleteRef.current,\n isShowSkip,\n isShowPrev,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n nextColor,\n prevColor,\n skipColor,\n },\n });\n }, [\n name,\n steps,\n storageKey,\n isShowSkip,\n isShowPrev,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n nextColor,\n prevColor,\n skipColor,\n ]);\n\n useEffect(() => {\n const check = () => {\n if (isDone(storageKey, name)) return;\n started.current = false;\n if (isAnyDepDone(storageKey, 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, storageKey, 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 useAnimatedRect = (step, baseMs = 350) => {\n const [displayRect, setDisplayRect] = useState(null);\n const targetRef = useRef(null);\n const currentRef = useRef(null);\n const rafRef = useRef(null);\n\n useEffect(() => {\n if (!step) {\n setDisplayRect(null);\n currentRef.current = null;\n targetRef.current = null;\n return;\n }\n\n const el = document.getElementById(resolveElId(step.el));\n if (!el) {\n setDisplayRect(null);\n return;\n }\n\n const compute = () => {\n const r = el.getBoundingClientRect();\n const padding = step.padding ?? 8;\n return {\n top: r.top - padding + window.scrollY,\n left: r.left - padding + window.scrollX,\n width: r.width + padding * 2,\n height: r.height + padding * 2,\n };\n };\n\n const newTarget = compute();\n targetRef.current = newTarget;\n\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\n if (!currentRef.current) {\n currentRef.current = newTarget;\n setDisplayRect(newTarget);\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 const tick = (now) => {\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 }\n };\n\n rafRef.current = requestAnimationFrame(tick);\n\n const onLayout = () => {\n const updated = compute();\n targetRef.current = updated;\n currentRef.current = updated;\n setDisplayRect(updated);\n };\n\n window.addEventListener(\"resize\", onLayout);\n window.addEventListener(\"scroll\", onLayout, true);\n\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", onLayout);\n window.removeEventListener(\"scroll\", onLayout, true);\n };\n }, [step]);\n\n return displayRect;\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\nexport const WalkthroughOverlay = ({\n $popoverPadding = 12,\n $popoverBorderRadius = 8,\n $popoverGap = 12,\n $animationSpeed = 350,\n} = {}) => {\n injectKeyframes();\n const { activeTour } = useGlobalState();\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 const [delayedStep, setDelayedStep] = useState(null);\n useEffect(() => {\n if (!rawStep) {\n setDelayedStep(null);\n return;\n }\n const ms = rawStep.delay ?? 0;\n if (ms <= 0) {\n setDelayedStep(rawStep);\n return;\n }\n setDelayedStep(null);\n const timer = setTimeout(() => setDelayedStep(rawStep), ms);\n return () => clearTimeout(timer);\n }, [rawStep]);\n\n const step = delayedStep;\n const rect = useAnimatedRect(step, $animationSpeed);\n\n const completeTour = useCallback(() => {\n if (!activeTour) return;\n const { storageKey: sk, name: n, onWalkthroughComplete: cb } = activeTour;\n setGlobalState({ activeTour: null });\n markDone(sk, n);\n if (cb) cb(n);\n }, [activeTour]);\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) {\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]);\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 || !step || !rect) return null;\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 nextLabel = \"Next →\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done ✓\",\n nextColor,\n prevColor,\n skipColor,\n } = activeTour;\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 popoverStyle = {\n top: popoverPos ? popoverPos.top : -9999,\n left: popoverPos ? popoverPos.left : -9999,\n visibility: popoverPos ? \"visible\" : \"hidden\",\n width: popoverWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\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 {step.title && <PopoverTitle>{step.title}</PopoverTitle>}\n\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>{d.description}</span>\n </DescriptionBlock>\n ))}\n </DescriptionScrollArea>\n </PopoverBody>\n\n <PopoverFooter>\n <StepCounter>\n {currentValidPos + 1}/{totalSteps}\n </StepCounter>\n\n <ButtonGroup>\n {isShowSkip && (\n <Button $variant=\"skip\" $skipColor={skipColor} onClick={skip}>\n {skipLabel}\n </Button>\n )}\n {isShowPrev && currentValidPos > 0 && (\n <Button $variant=\"prev\" $prevColor={prevColor} onClick={prev}>\n {prevLabel}\n </Button>\n )}\n <Button\n ref={nextBtnRef}\n $variant=\"next\"\n $nextColor={nextColor}\n onClick={next}\n >\n {isLast ? doneLabel : nextLabel}\n </Button>\n </ButtonGroup>\n </PopoverFooter>\n </PopoverContainer>\n </>\n );\n\n return createPortal(overlay, document.body);\n};\n"]}
1
+ {"version":3,"sources":["../src/utils/index.js","../src/styles/index.js","../src/WalkthroughOverlay.js"],"names":["useEffect","useState","_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};\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 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: \"absolute\", 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, ...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: \"nowrap\", ...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 Button = forwardRef(({ $variant, $skipColor, $prevColor, $nextColor, style, children, ...props }, ref) => {\n let variantStyle = {};\n let className = \"wt-btn\";\n if ($variant === \"skip\") {\n variantStyle = { background: $skipColor || \"transparent\", color: $skipColor ? \"#fff\" : \"#a1a1aa\" };\n } else if ($variant === \"prev\") {\n variantStyle = { background: $prevColor || \"#f4f4f5\", color: $prevColor ? \"#fff\" : \"#3f3f46\" };\n } else if ($variant === \"next\") {\n className = \"wt-btn wt-btn-next\";\n variantStyle = { background: $nextColor || \"#4f46e5\", color: \"#fff\", boxShadow: \"0 2px 8px rgba(79,70,229,0.3)\" };\n }\n return <button ref={ref} className={className} style={{ ...variantStyle, ...style }} {...props}>{children}</button>;\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 Button,\n} from \"./styles\";\n\nexport { resetWalkthrough };\n\nconst resolveElId = (id) => (typeof id === \"string\" && id.startsWith(\"#\") ? id.slice(1) : id);\n\nexport const useWalkthrough = ({\n name,\n storageSuffix = \"\",\n dependsOn = [],\n steps,\n onWalkthroughComplete,\n isShowSkip = true,\n isShowPrev = true,\n nextLabel = \"Next →\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done ✓\",\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 currentStep: 0,\n storageSuffix,\n onWalkthroughComplete: onCompleteRef.current,\n isShowSkip,\n isShowPrev,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\n },\n });\n }, [\n name,\n steps,\n storageSuffix,\n isShowSkip,\n isShowPrev,\n nextLabel,\n prevLabel,\n skipLabel,\n doneLabel,\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 useAnimatedRect = (step, baseMs = 350) => {\n const [displayRect, setDisplayRect] = useState(null);\n const targetRef = useRef(null);\n const currentRef = useRef(null);\n const rafRef = useRef(null);\n\n useEffect(() => {\n if (!step) {\n setDisplayRect(null);\n targetRef.current = null;\n return;\n }\n\n const el = document.getElementById(resolveElId(step.el));\n if (!el) {\n setDisplayRect(null);\n return;\n }\n\n const compute = () => {\n const r = el.getBoundingClientRect();\n const padding = step.padding ?? 8;\n return {\n top: r.top - padding + window.scrollY,\n left: r.left - padding + window.scrollX,\n width: r.width + padding * 2,\n height: r.height + padding * 2,\n };\n };\n\n const newTarget = compute();\n targetRef.current = newTarget;\n\n el.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n\n if (!currentRef.current) {\n currentRef.current = newTarget;\n setDisplayRect(newTarget);\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 const tick = (now) => {\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 }\n };\n\n rafRef.current = requestAnimationFrame(tick);\n\n const onLayout = () => {\n const updated = compute();\n targetRef.current = updated;\n currentRef.current = updated;\n setDisplayRect(updated);\n };\n\n window.addEventListener(\"resize\", onLayout);\n window.addEventListener(\"scroll\", onLayout, true);\n\n return () => {\n if (rafRef.current) cancelAnimationFrame(rafRef.current);\n window.removeEventListener(\"resize\", onLayout);\n window.removeEventListener(\"scroll\", onLayout, true);\n };\n }, [step]);\n\n return displayRect;\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\nexport const WalkthroughOverlay = ({\n $popoverPadding = 12,\n $popoverBorderRadius = 8,\n $popoverGap = 12,\n $animationSpeed = 350,\n $nextColor,\n $prevColor,\n $skipColor,\n} = {}) => {\n injectKeyframes();\n const { activeTour } = useGlobalState();\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 const [delayedStep, setDelayedStep] = useState(null);\n useEffect(() => {\n if (!rawStep) {\n setDelayedStep(null);\n return;\n }\n const ms = rawStep.delay ?? 0;\n if (ms <= 0) {\n setDelayedStep(rawStep);\n return;\n }\n // Keep previous delayedStep visible during delay (don't set null)\n const timer = setTimeout(() => setDelayedStep(rawStep), ms);\n return () => clearTimeout(timer);\n }, [rawStep]);\n\n const step = delayedStep;\n const rect = useAnimatedRect(step, $animationSpeed);\n\n const completeTour = useCallback(() => {\n if (!activeTour) return;\n const { storageSuffix: sk, name: n, onWalkthroughComplete: cb } = activeTour;\n setGlobalState({ activeTour: null });\n markDone(sk, n);\n if (cb) cb(n);\n }, [activeTour]);\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) {\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]);\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 || !step || !rect) return null;\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 nextLabel = \"Next →\",\n prevLabel = \"Back\",\n skipLabel = \"Skip\",\n doneLabel = \"Done ✓\",\n } = activeTour;\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 popoverStyle = {\n top: popoverPos ? popoverPos.top : -9999,\n left: popoverPos ? popoverPos.left : -9999,\n visibility: popoverPos ? \"visible\" : \"hidden\",\n width: popoverWidth,\n padding: $popoverPadding,\n borderRadius: $popoverBorderRadius,\n fontFamily: \"inherit\",\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 {step.title && <PopoverTitle>{step.title}</PopoverTitle>}\n\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>{d.description}</span>\n </DescriptionBlock>\n ))}\n </DescriptionScrollArea>\n </PopoverBody>\n\n <PopoverFooter>\n <StepCounter>\n {currentValidPos + 1}/{totalSteps}\n </StepCounter>\n\n <ButtonGroup>\n {isShowSkip && (\n <Button $variant=\"skip\" $skipColor={$skipColor} onClick={skip}>\n {skipLabel}\n </Button>\n )}\n {isShowPrev && currentValidPos > 0 && (\n <Button $variant=\"prev\" $prevColor={$prevColor} onClick={prev}>\n {prevLabel}\n </Button>\n )}\n <Button\n ref={nextBtnRef}\n $variant=\"next\"\n $nextColor={$nextColor}\n onClick={next}\n >\n {isLast ? doneLabel : nextLabel}\n </Button>\n </ButtonGroup>\n </PopoverFooter>\n </PopoverContainer>\n </>\n );\n\n return createPortal(overlay, document.body);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tent-official/react-walkthrough",
3
- "version": "1.0.6",
3
+ "version": "1.1.0",
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",