@tent-official/react-walkthrough 1.0.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -4,34 +4,34 @@ import { ReactNode, ReactPortal } from 'react';
4
4
  * Position of the popover relative to the target element.
5
5
  * If the preferred position doesn't fit in the viewport, it will auto-fallback.
6
6
  */
7
- type PopoverPosition = "top" | "bottom" | "left" | "right";
7
+ type TPopoverPosition = "top" | "bottom" | "left" | "right";
8
8
  /**
9
9
  * Direction for description block layout.
10
10
  */
11
- type DescriptionDirection = "row" | "column";
11
+ type TDescriptionDirection = "row" | "column";
12
12
  /**
13
13
  * A single description block within a step.
14
14
  */
15
- interface StepDescription {
15
+ interface IStepDescription {
16
16
  /** Optional title for this description block */
17
17
  title?: string;
18
18
  /** Description text or React node */
19
19
  description: ReactNode;
20
20
  /** Layout direction for this block */
21
- direction?: DescriptionDirection;
21
+ direction?: TDescriptionDirection;
22
22
  }
23
23
  /**
24
24
  * A single step in a walkthrough tour.
25
25
  */
26
- interface WalkthroughStep {
26
+ interface IWalkthroughStep {
27
27
  /** The DOM element ID to highlight */
28
28
  el: string;
29
29
  /** Title displayed at the top of the popover */
30
30
  title?: string;
31
31
  /** Array of description blocks */
32
- description: StepDescription[];
32
+ description: IStepDescription[];
33
33
  /** Preferred popover position. Auto-positioned if omitted or if preferred doesn't fit */
34
- position?: PopoverPosition;
34
+ position?: TPopoverPosition;
35
35
  /** Padding around the highlighted element (px). Default: 8 */
36
36
  padding?: number;
37
37
  /** Border radius of the highlight cutout (px). Default: 10 */
@@ -46,7 +46,7 @@ interface WalkthroughStep {
46
46
  /**
47
47
  * Options for the useWalkthrough hook.
48
48
  */
49
- interface UseWalkthroughOptions {
49
+ interface IUseWalkthroughOptions {
50
50
  /** Unique name for this walkthrough */
51
51
  name: string;
52
52
  /** Storage key prefix for localStorage. Walkthroughs sharing the same key share completion state */
@@ -54,7 +54,7 @@ interface UseWalkthroughOptions {
54
54
  /** List of walkthrough names that must complete before this one starts */
55
55
  dependsOn?: string[];
56
56
  /** Array of steps for this walkthrough */
57
- steps: WalkthroughStep[];
57
+ steps: IWalkthroughStep[];
58
58
  /** Callback fired when the walkthrough completes (either finished or skipped) */
59
59
  onWalkthroughComplete?: (name: string) => void;
60
60
  /** Show the skip button. Default: true */
@@ -79,14 +79,14 @@ interface UseWalkthroughOptions {
79
79
  /**
80
80
  * Return value of the useWalkthrough hook.
81
81
  */
82
- interface UseWalkthroughReturn {
82
+ interface IUseWalkthroughReturn {
83
83
  /** Manually start the walkthrough (respects isDone and dependsOn checks) */
84
84
  start: () => void;
85
85
  }
86
86
  /**
87
87
  * Props for the WalkthroughOverlay component.
88
88
  */
89
- interface WalkthroughOverlayProps {
89
+ interface IWalkthroughOverlayProps {
90
90
  /** Inner padding of the popover (px). Default: 12 */
91
91
  $popoverPadding?: number;
92
92
  /** Border radius of the popover (px). Default: 8 */
@@ -101,7 +101,7 @@ interface WalkthroughOverlayProps {
101
101
  /**
102
102
  * Options for the resetWalkthrough function.
103
103
  */
104
- interface ResetWalkthroughOptions {
104
+ interface IResetWalkthroughOptions {
105
105
  /** Storage key prefix matching the one used in useWalkthrough. Default: "" */
106
106
  storageKey?: string;
107
107
  /** List of walkthrough names to reset */
@@ -110,15 +110,15 @@ interface ResetWalkthroughOptions {
110
110
  /**
111
111
  * Reset specified walkthroughs so they can be replayed without page refresh.
112
112
  */
113
- declare function resetWalkthrough(options?: ResetWalkthroughOptions): void;
113
+ declare function resetWalkthrough(options?: IResetWalkthroughOptions): void;
114
114
  /**
115
115
  * Hook to register and control a walkthrough tour.
116
116
  */
117
- declare function useWalkthrough(options: UseWalkthroughOptions): UseWalkthroughReturn;
117
+ declare function useWalkthrough(options: IUseWalkthroughOptions): IUseWalkthroughReturn;
118
118
  /**
119
119
  * Overlay component that renders the walkthrough spotlight, popover, and controls.
120
120
  * Place this once at the root of your app.
121
121
  */
122
- declare function WalkthroughOverlay(props?: WalkthroughOverlayProps): ReactPortal | null;
122
+ declare function WalkthroughOverlay(props?: IWalkthroughOverlayProps): ReactPortal | null;
123
123
 
124
- export { type DescriptionDirection, type PopoverPosition, type ResetWalkthroughOptions, type StepDescription, type UseWalkthroughOptions, type UseWalkthroughReturn, WalkthroughOverlay, type WalkthroughOverlayProps, type WalkthroughStep, resetWalkthrough, useWalkthrough };
124
+ export { type IResetWalkthroughOptions, type IStepDescription, type IUseWalkthroughOptions, type IUseWalkthroughReturn, type IWalkthroughOverlayProps, type IWalkthroughStep, type TDescriptionDirection, type TPopoverPosition, WalkthroughOverlay, resetWalkthrough, useWalkthrough };
package/dist/index.d.ts CHANGED
@@ -4,34 +4,34 @@ import { ReactNode, ReactPortal } from 'react';
4
4
  * Position of the popover relative to the target element.
5
5
  * If the preferred position doesn't fit in the viewport, it will auto-fallback.
6
6
  */
7
- type PopoverPosition = "top" | "bottom" | "left" | "right";
7
+ type TPopoverPosition = "top" | "bottom" | "left" | "right";
8
8
  /**
9
9
  * Direction for description block layout.
10
10
  */
11
- type DescriptionDirection = "row" | "column";
11
+ type TDescriptionDirection = "row" | "column";
12
12
  /**
13
13
  * A single description block within a step.
14
14
  */
15
- interface StepDescription {
15
+ interface IStepDescription {
16
16
  /** Optional title for this description block */
17
17
  title?: string;
18
18
  /** Description text or React node */
19
19
  description: ReactNode;
20
20
  /** Layout direction for this block */
21
- direction?: DescriptionDirection;
21
+ direction?: TDescriptionDirection;
22
22
  }
23
23
  /**
24
24
  * A single step in a walkthrough tour.
25
25
  */
26
- interface WalkthroughStep {
26
+ interface IWalkthroughStep {
27
27
  /** The DOM element ID to highlight */
28
28
  el: string;
29
29
  /** Title displayed at the top of the popover */
30
30
  title?: string;
31
31
  /** Array of description blocks */
32
- description: StepDescription[];
32
+ description: IStepDescription[];
33
33
  /** Preferred popover position. Auto-positioned if omitted or if preferred doesn't fit */
34
- position?: PopoverPosition;
34
+ position?: TPopoverPosition;
35
35
  /** Padding around the highlighted element (px). Default: 8 */
36
36
  padding?: number;
37
37
  /** Border radius of the highlight cutout (px). Default: 10 */
@@ -46,7 +46,7 @@ interface WalkthroughStep {
46
46
  /**
47
47
  * Options for the useWalkthrough hook.
48
48
  */
49
- interface UseWalkthroughOptions {
49
+ interface IUseWalkthroughOptions {
50
50
  /** Unique name for this walkthrough */
51
51
  name: string;
52
52
  /** Storage key prefix for localStorage. Walkthroughs sharing the same key share completion state */
@@ -54,7 +54,7 @@ interface UseWalkthroughOptions {
54
54
  /** List of walkthrough names that must complete before this one starts */
55
55
  dependsOn?: string[];
56
56
  /** Array of steps for this walkthrough */
57
- steps: WalkthroughStep[];
57
+ steps: IWalkthroughStep[];
58
58
  /** Callback fired when the walkthrough completes (either finished or skipped) */
59
59
  onWalkthroughComplete?: (name: string) => void;
60
60
  /** Show the skip button. Default: true */
@@ -79,14 +79,14 @@ interface UseWalkthroughOptions {
79
79
  /**
80
80
  * Return value of the useWalkthrough hook.
81
81
  */
82
- interface UseWalkthroughReturn {
82
+ interface IUseWalkthroughReturn {
83
83
  /** Manually start the walkthrough (respects isDone and dependsOn checks) */
84
84
  start: () => void;
85
85
  }
86
86
  /**
87
87
  * Props for the WalkthroughOverlay component.
88
88
  */
89
- interface WalkthroughOverlayProps {
89
+ interface IWalkthroughOverlayProps {
90
90
  /** Inner padding of the popover (px). Default: 12 */
91
91
  $popoverPadding?: number;
92
92
  /** Border radius of the popover (px). Default: 8 */
@@ -101,7 +101,7 @@ interface WalkthroughOverlayProps {
101
101
  /**
102
102
  * Options for the resetWalkthrough function.
103
103
  */
104
- interface ResetWalkthroughOptions {
104
+ interface IResetWalkthroughOptions {
105
105
  /** Storage key prefix matching the one used in useWalkthrough. Default: "" */
106
106
  storageKey?: string;
107
107
  /** List of walkthrough names to reset */
@@ -110,15 +110,15 @@ interface ResetWalkthroughOptions {
110
110
  /**
111
111
  * Reset specified walkthroughs so they can be replayed without page refresh.
112
112
  */
113
- declare function resetWalkthrough(options?: ResetWalkthroughOptions): void;
113
+ declare function resetWalkthrough(options?: IResetWalkthroughOptions): void;
114
114
  /**
115
115
  * Hook to register and control a walkthrough tour.
116
116
  */
117
- declare function useWalkthrough(options: UseWalkthroughOptions): UseWalkthroughReturn;
117
+ declare function useWalkthrough(options: IUseWalkthroughOptions): IUseWalkthroughReturn;
118
118
  /**
119
119
  * Overlay component that renders the walkthrough spotlight, popover, and controls.
120
120
  * Place this once at the root of your app.
121
121
  */
122
- declare function WalkthroughOverlay(props?: WalkthroughOverlayProps): ReactPortal | null;
122
+ declare function WalkthroughOverlay(props?: IWalkthroughOverlayProps): ReactPortal | null;
123
123
 
124
- export { type DescriptionDirection, type PopoverPosition, type ResetWalkthroughOptions, type StepDescription, type UseWalkthroughOptions, type UseWalkthroughReturn, WalkthroughOverlay, type WalkthroughOverlayProps, type WalkthroughStep, resetWalkthrough, useWalkthrough };
124
+ export { type IResetWalkthroughOptions, type IStepDescription, type IUseWalkthroughOptions, type IUseWalkthroughReturn, type IWalkthroughOverlayProps, type IWalkthroughStep, type TDescriptionDirection, type TPopoverPosition, WalkthroughOverlay, resetWalkthrough, useWalkthrough };
package/dist/index.js CHANGED
@@ -2,12 +2,12 @@
2
2
 
3
3
  var react = require('react');
4
4
  var reactDom = require('react-dom');
5
- var styled = require('styled-components');
5
+ var pkg = require('styled-components');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
 
8
8
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
9
 
10
- var styled__default = /*#__PURE__*/_interopDefault(styled);
10
+ var pkg__default = /*#__PURE__*/_interopDefault(pkg);
11
11
 
12
12
  // src/WalkthroughOverlay.js
13
13
  var listeners = /* @__PURE__ */ new Set();
@@ -70,7 +70,9 @@ var easeOutCubic = (t) => {
70
70
  var lerp = (a, b, t) => {
71
71
  return a + (b - a) * t;
72
72
  };
73
- var popIn = styled.keyframes`
73
+ var { keyframes, css } = pkg__default.default;
74
+ var styled = pkg__default.default;
75
+ var popIn = keyframes`
74
76
  from {
75
77
  opacity: 0;
76
78
  transform: translateY(10px) scale(0.96);
@@ -80,7 +82,7 @@ var popIn = styled.keyframes`
80
82
  transform: translateY(0) scale(1);
81
83
  }
82
84
  `;
83
- var fadeSlideIn = styled.keyframes`
85
+ var fadeSlideIn = keyframes`
84
86
  from {
85
87
  opacity: 0;
86
88
  transform: translateX(12px);
@@ -90,7 +92,7 @@ var fadeSlideIn = styled.keyframes`
90
92
  transform: translateX(0);
91
93
  }
92
94
  `;
93
- var OverlayWrapper = styled__default.default.div`
95
+ var OverlayWrapper = styled.div`
94
96
  position: fixed;
95
97
  inset: 0;
96
98
  z-index: 10001;
@@ -103,13 +105,13 @@ var OverlayWrapper = styled__default.default.div`
103
105
  height: 100%;
104
106
  }
105
107
  `;
106
- var ClickLayer = styled__default.default.div`
108
+ var ClickLayer = styled.div`
107
109
  position: fixed;
108
110
  inset: 0;
109
111
  z-index: 10000;
110
112
  cursor: default;
111
113
  `;
112
- var PopoverContainer = styled__default.default.div`
114
+ var PopoverContainer = styled.div`
113
115
  position: absolute;
114
116
  z-index: 99999;
115
117
  background: #fff;
@@ -118,23 +120,23 @@ var PopoverContainer = styled__default.default.div`
118
120
  0 2px 10px rgba(0, 0, 0, 0.06);
119
121
  animation: ${popIn} 0.28s cubic-bezier(0.34, 1.56, 0.64, 1);
120
122
  `;
121
- var PopoverBody = styled__default.default.div`
123
+ var PopoverBody = styled.div`
122
124
  animation: ${fadeSlideIn} 0.3s ease-out;
123
125
  `;
124
- var PopoverTitle = styled__default.default.h3`
126
+ var PopoverTitle = styled.h3`
125
127
  font-size: 15px;
126
128
  font-weight: 700;
127
129
  color: #1a1a2e;
128
130
  margin: 0 0 10px;
129
131
  line-height: 1.3;
130
132
  `;
131
- var DescriptionScrollArea = styled__default.default.div`
132
- ${({ $height }) => $height && $height !== "auto" ? styled.css`
133
+ var DescriptionScrollArea = styled.div`
134
+ ${({ $height }) => $height && $height !== "auto" ? css`
133
135
  max-height: ${typeof $height === "number" ? `${$height}px` : $height};
134
136
  overflow-y: auto;
135
137
  ` : ""}
136
138
  `;
137
- var DescriptionBlock = styled__default.default.div`
139
+ var DescriptionBlock = styled.div`
138
140
  display: flex;
139
141
  flex-direction: ${({ $direction = "row" }) => $direction};
140
142
  font-size: 13px;
@@ -142,35 +144,35 @@ var DescriptionBlock = styled__default.default.div`
142
144
  line-height: 1.6;
143
145
  margin: 0 0 4px;
144
146
 
145
- ${({ $direction }) => $direction === "column" ? styled.css`
147
+ ${({ $direction }) => $direction === "column" ? css`
146
148
  gap: 2px;
147
- ` : styled.css`
149
+ ` : css`
148
150
  align-items: baseline;
149
151
  gap: 4px;
150
152
  `}
151
153
  `;
152
- var DescriptionTitle = styled__default.default.span`
154
+ var DescriptionTitle = styled.span`
153
155
  font-weight: 600;
154
156
  color: #333;
155
157
  white-space: nowrap;
156
158
  `;
157
- var PopoverFooter = styled__default.default.div`
159
+ var PopoverFooter = styled.div`
158
160
  display: flex;
159
161
  align-items: center;
160
162
  justify-content: space-between;
161
163
  margin-top: 16px;
162
164
  gap: 8px;
163
165
  `;
164
- var StepCounter = styled__default.default.span`
166
+ var StepCounter = styled.span`
165
167
  font-size: 13px;
166
168
  font-weight: 600;
167
169
  color: #a1a1aa;
168
170
  `;
169
- var ButtonGroup = styled__default.default.div`
171
+ var ButtonGroup = styled.div`
170
172
  display: flex;
171
173
  gap: 6px;
172
174
  `;
173
- var Button = styled__default.default.button`
175
+ var Button = styled.button`
174
176
  border: none;
175
177
  border-radius: 8px;
176
178
  padding: 7px 16px;
@@ -180,7 +182,7 @@ var Button = styled__default.default.button`
180
182
  transition: all 0.15s ease;
181
183
  outline: none;
182
184
 
183
- ${(p) => p.$variant === "skip" && styled.css`
185
+ ${(p) => p.$variant === "skip" && css`
184
186
  background: ${p.$skipColor || "transparent"};
185
187
  color: ${p.$skipColor ? "#fff" : "#a1a1aa"};
186
188
  &:hover {
@@ -188,7 +190,7 @@ var Button = styled__default.default.button`
188
190
  }
189
191
  `}
190
192
 
191
- ${(p) => p.$variant === "prev" && styled.css`
193
+ ${(p) => p.$variant === "prev" && css`
192
194
  background: ${p.$prevColor || "#f4f4f5"};
193
195
  color: ${p.$prevColor ? "#fff" : "#3f3f46"};
194
196
  &:hover {
@@ -196,7 +198,7 @@ var Button = styled__default.default.button`
196
198
  }
197
199
  `}
198
200
 
199
- ${(p) => p.$variant === "next" && styled.css`
201
+ ${(p) => p.$variant === "next" && css`
200
202
  background: ${p.$nextColor || "#4f46e5"};
201
203
  color: #fff;
202
204
  box-shadow: 0 2px 8px rgba(79, 70, 229, 0.3);
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","keyframes","styled","css","useRef","useCallback","_a","jsxs","Fragment","jsx","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 styled, { keyframes, css } from \"styled-components\";\n\nconst popIn = keyframes`\n from {\n opacity: 0;\n transform: translateY(10px) scale(0.96);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n`;\n\nconst fadeSlideIn = keyframes`\n from {\n opacity: 0;\n transform: translateX(12px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\nexport const OverlayWrapper = styled.div`\n position: fixed;\n inset: 0;\n z-index: 10001;\n pointer-events: none;\n width: 100vw;\n height: 100vh;\n\n & svg {\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const ClickLayer = styled.div`\n position: fixed;\n inset: 0;\n z-index: 10000;\n cursor: default;\n`;\n\nexport const PopoverContainer = styled.div`\n position: absolute;\n z-index: 99999;\n background: #fff;\n box-shadow:\n 0 12px 40px rgba(0, 0, 0, 0.18),\n 0 2px 10px rgba(0, 0, 0, 0.06);\n animation: ${popIn} 0.28s cubic-bezier(0.34, 1.56, 0.64, 1);\n`;\n\nexport const PopoverBody = styled.div`\n animation: ${fadeSlideIn} 0.3s ease-out;\n`;\n\nexport const PopoverTitle = styled.h3`\n font-size: 15px;\n font-weight: 700;\n color: #1a1a2e;\n margin: 0 0 10px;\n line-height: 1.3;\n`;\n\nexport const DescriptionScrollArea = styled.div`\n ${({ $height }) =>\n $height && $height !== \"auto\"\n ? css`\n max-height: ${typeof $height === \"number\" ? `${$height}px` : $height};\n overflow-y: auto;\n `\n : \"\"}\n`;\n\nexport const DescriptionBlock = styled.div`\n display: flex;\n flex-direction: ${({ $direction = \"row\" }) => $direction};\n font-size: 13px;\n color: #666;\n line-height: 1.6;\n margin: 0 0 4px;\n\n ${({ $direction }) =>\n $direction === \"column\"\n ? css`\n gap: 2px;\n `\n : css`\n align-items: baseline;\n gap: 4px;\n `}\n`;\n\nexport const DescriptionTitle = styled.span`\n font-weight: 600;\n color: #333;\n white-space: nowrap;\n`;\n\nexport const PopoverFooter = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 16px;\n gap: 8px;\n`;\n\nexport const StepCounter = styled.span`\n font-size: 13px;\n font-weight: 600;\n color: #a1a1aa;\n`;\n\nexport const ButtonGroup = styled.div`\n display: flex;\n gap: 6px;\n`;\n\nexport const Button = styled.button`\n border: none;\n border-radius: 8px;\n padding: 7px 16px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.15s ease;\n outline: none;\n\n ${(p) =>\n p.$variant === \"skip\" &&\n css`\n background: ${p.$skipColor || \"transparent\"};\n color: ${p.$skipColor ? \"#fff\" : \"#a1a1aa\"};\n &:hover {\n opacity: 0.8;\n }\n `}\n\n ${(p) =>\n p.$variant === \"prev\" &&\n css`\n background: ${p.$prevColor || \"#f4f4f5\"};\n color: ${p.$prevColor ? \"#fff\" : \"#3f3f46\"};\n &:hover {\n opacity: 0.8;\n }\n `}\n\n ${(p) =>\n p.$variant === \"next\" &&\n css`\n background: ${p.$nextColor || \"#4f46e5\"};\n color: #fff;\n box-shadow: 0 2px 8px rgba(79, 70, 229, 0.3);\n &:hover {\n opacity: 0.9;\n box-shadow: 0 4px 12px rgba(79, 70, 229, 0.4);\n transform: translateY(-1px);\n }\n &:active {\n transform: translateY(0);\n }\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 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\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 useAnimatedRect = (step, transitionMs = 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(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 startTime = performance.now();\n\n const tick = (now) => {\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / transitionMs, 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 $fontFamily,\n $animationSpeed = 350,\n} = {}) => {\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(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 step = currentValidPos !== -1 ? validSteps[currentValidPos] : null;\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(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(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:\n $fontFamily ||\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\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","pkg","useRef","useCallback","_a","jsxs","Fragment","jsx","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 pkg from \"styled-components\";\nconst { keyframes, css } = pkg;\nconst styled = pkg;\n\nconst popIn = keyframes`\n from {\n opacity: 0;\n transform: translateY(10px) scale(0.96);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n`;\n\nconst fadeSlideIn = keyframes`\n from {\n opacity: 0;\n transform: translateX(12px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\nexport const OverlayWrapper = styled.div`\n position: fixed;\n inset: 0;\n z-index: 10001;\n pointer-events: none;\n width: 100vw;\n height: 100vh;\n\n & svg {\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const ClickLayer = styled.div`\n position: fixed;\n inset: 0;\n z-index: 10000;\n cursor: default;\n`;\n\nexport const PopoverContainer = styled.div`\n position: absolute;\n z-index: 99999;\n background: #fff;\n box-shadow:\n 0 12px 40px rgba(0, 0, 0, 0.18),\n 0 2px 10px rgba(0, 0, 0, 0.06);\n animation: ${popIn} 0.28s cubic-bezier(0.34, 1.56, 0.64, 1);\n`;\n\nexport const PopoverBody = styled.div`\n animation: ${fadeSlideIn} 0.3s ease-out;\n`;\n\nexport const PopoverTitle = styled.h3`\n font-size: 15px;\n font-weight: 700;\n color: #1a1a2e;\n margin: 0 0 10px;\n line-height: 1.3;\n`;\n\nexport const DescriptionScrollArea = styled.div`\n ${({ $height }) =>\n $height && $height !== \"auto\"\n ? css`\n max-height: ${typeof $height === \"number\" ? `${$height}px` : $height};\n overflow-y: auto;\n `\n : \"\"}\n`;\n\nexport const DescriptionBlock = styled.div`\n display: flex;\n flex-direction: ${({ $direction = \"row\" }) => $direction};\n font-size: 13px;\n color: #666;\n line-height: 1.6;\n margin: 0 0 4px;\n\n ${({ $direction }) =>\n $direction === \"column\"\n ? css`\n gap: 2px;\n `\n : css`\n align-items: baseline;\n gap: 4px;\n `}\n`;\n\nexport const DescriptionTitle = styled.span`\n font-weight: 600;\n color: #333;\n white-space: nowrap;\n`;\n\nexport const PopoverFooter = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 16px;\n gap: 8px;\n`;\n\nexport const StepCounter = styled.span`\n font-size: 13px;\n font-weight: 600;\n color: #a1a1aa;\n`;\n\nexport const ButtonGroup = styled.div`\n display: flex;\n gap: 6px;\n`;\n\nexport const Button = styled.button`\n border: none;\n border-radius: 8px;\n padding: 7px 16px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.15s ease;\n outline: none;\n\n ${(p) =>\n p.$variant === \"skip\" &&\n css`\n background: ${p.$skipColor || \"transparent\"};\n color: ${p.$skipColor ? \"#fff\" : \"#a1a1aa\"};\n &:hover {\n opacity: 0.8;\n }\n `}\n\n ${(p) =>\n p.$variant === \"prev\" &&\n css`\n background: ${p.$prevColor || \"#f4f4f5\"};\n color: ${p.$prevColor ? \"#fff\" : \"#3f3f46\"};\n &:hover {\n opacity: 0.8;\n }\n `}\n\n ${(p) =>\n p.$variant === \"next\" &&\n css`\n background: ${p.$nextColor || \"#4f46e5\"};\n color: #fff;\n box-shadow: 0 2px 8px rgba(79, 70, 229, 0.3);\n &:hover {\n opacity: 0.9;\n box-shadow: 0 4px 12px rgba(79, 70, 229, 0.4);\n transform: translateY(-1px);\n }\n &:active {\n transform: translateY(0);\n }\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 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\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 useAnimatedRect = (step, transitionMs = 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(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 startTime = performance.now();\n\n const tick = (now) => {\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / transitionMs, 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 $fontFamily,\n $animationSpeed = 350,\n} = {}) => {\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(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 step = currentValidPos !== -1 ? validSteps[currentValidPos] : null;\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(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(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:\n $fontFamily ||\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\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
@@ -1,6 +1,6 @@
1
1
  import { useRef, useEffect, useCallback, useState } from 'react';
2
2
  import { createPortal } from 'react-dom';
3
- import styled, { keyframes, css } from 'styled-components';
3
+ import pkg from 'styled-components';
4
4
  import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
5
5
 
6
6
  // src/WalkthroughOverlay.js
@@ -64,6 +64,8 @@ var easeOutCubic = (t) => {
64
64
  var lerp = (a, b, t) => {
65
65
  return a + (b - a) * t;
66
66
  };
67
+ var { keyframes, css } = pkg;
68
+ var styled = pkg;
67
69
  var popIn = keyframes`
68
70
  from {
69
71
  opacity: 0;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/utils/index.js","../src/styles/index.js","../src/WalkthroughOverlay.js"],"names":["useEffect","useState","_a"],"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 styled, { keyframes, css } from \"styled-components\";\n\nconst popIn = keyframes`\n from {\n opacity: 0;\n transform: translateY(10px) scale(0.96);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n`;\n\nconst fadeSlideIn = keyframes`\n from {\n opacity: 0;\n transform: translateX(12px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\nexport const OverlayWrapper = styled.div`\n position: fixed;\n inset: 0;\n z-index: 10001;\n pointer-events: none;\n width: 100vw;\n height: 100vh;\n\n & svg {\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const ClickLayer = styled.div`\n position: fixed;\n inset: 0;\n z-index: 10000;\n cursor: default;\n`;\n\nexport const PopoverContainer = styled.div`\n position: absolute;\n z-index: 99999;\n background: #fff;\n box-shadow:\n 0 12px 40px rgba(0, 0, 0, 0.18),\n 0 2px 10px rgba(0, 0, 0, 0.06);\n animation: ${popIn} 0.28s cubic-bezier(0.34, 1.56, 0.64, 1);\n`;\n\nexport const PopoverBody = styled.div`\n animation: ${fadeSlideIn} 0.3s ease-out;\n`;\n\nexport const PopoverTitle = styled.h3`\n font-size: 15px;\n font-weight: 700;\n color: #1a1a2e;\n margin: 0 0 10px;\n line-height: 1.3;\n`;\n\nexport const DescriptionScrollArea = styled.div`\n ${({ $height }) =>\n $height && $height !== \"auto\"\n ? css`\n max-height: ${typeof $height === \"number\" ? `${$height}px` : $height};\n overflow-y: auto;\n `\n : \"\"}\n`;\n\nexport const DescriptionBlock = styled.div`\n display: flex;\n flex-direction: ${({ $direction = \"row\" }) => $direction};\n font-size: 13px;\n color: #666;\n line-height: 1.6;\n margin: 0 0 4px;\n\n ${({ $direction }) =>\n $direction === \"column\"\n ? css`\n gap: 2px;\n `\n : css`\n align-items: baseline;\n gap: 4px;\n `}\n`;\n\nexport const DescriptionTitle = styled.span`\n font-weight: 600;\n color: #333;\n white-space: nowrap;\n`;\n\nexport const PopoverFooter = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 16px;\n gap: 8px;\n`;\n\nexport const StepCounter = styled.span`\n font-size: 13px;\n font-weight: 600;\n color: #a1a1aa;\n`;\n\nexport const ButtonGroup = styled.div`\n display: flex;\n gap: 6px;\n`;\n\nexport const Button = styled.button`\n border: none;\n border-radius: 8px;\n padding: 7px 16px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.15s ease;\n outline: none;\n\n ${(p) =>\n p.$variant === \"skip\" &&\n css`\n background: ${p.$skipColor || \"transparent\"};\n color: ${p.$skipColor ? \"#fff\" : \"#a1a1aa\"};\n &:hover {\n opacity: 0.8;\n }\n `}\n\n ${(p) =>\n p.$variant === \"prev\" &&\n css`\n background: ${p.$prevColor || \"#f4f4f5\"};\n color: ${p.$prevColor ? \"#fff\" : \"#3f3f46\"};\n &:hover {\n opacity: 0.8;\n }\n `}\n\n ${(p) =>\n p.$variant === \"next\" &&\n css`\n background: ${p.$nextColor || \"#4f46e5\"};\n color: #fff;\n box-shadow: 0 2px 8px rgba(79, 70, 229, 0.3);\n &:hover {\n opacity: 0.9;\n box-shadow: 0 4px 12px rgba(79, 70, 229, 0.4);\n transform: translateY(-1px);\n }\n &:active {\n transform: translateY(0);\n }\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 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\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 useAnimatedRect = (step, transitionMs = 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(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 startTime = performance.now();\n\n const tick = (now) => {\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / transitionMs, 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 $fontFamily,\n $animationSpeed = 350,\n} = {}) => {\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(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 step = currentValidPos !== -1 ? validSteps[currentValidPos] : null;\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(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(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:\n $fontFamily ||\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\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"],"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 pkg from \"styled-components\";\nconst { keyframes, css } = pkg;\nconst styled = pkg;\n\nconst popIn = keyframes`\n from {\n opacity: 0;\n transform: translateY(10px) scale(0.96);\n }\n to {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n`;\n\nconst fadeSlideIn = keyframes`\n from {\n opacity: 0;\n transform: translateX(12px);\n }\n to {\n opacity: 1;\n transform: translateX(0);\n }\n`;\n\nexport const OverlayWrapper = styled.div`\n position: fixed;\n inset: 0;\n z-index: 10001;\n pointer-events: none;\n width: 100vw;\n height: 100vh;\n\n & svg {\n width: 100%;\n height: 100%;\n }\n`;\n\nexport const ClickLayer = styled.div`\n position: fixed;\n inset: 0;\n z-index: 10000;\n cursor: default;\n`;\n\nexport const PopoverContainer = styled.div`\n position: absolute;\n z-index: 99999;\n background: #fff;\n box-shadow:\n 0 12px 40px rgba(0, 0, 0, 0.18),\n 0 2px 10px rgba(0, 0, 0, 0.06);\n animation: ${popIn} 0.28s cubic-bezier(0.34, 1.56, 0.64, 1);\n`;\n\nexport const PopoverBody = styled.div`\n animation: ${fadeSlideIn} 0.3s ease-out;\n`;\n\nexport const PopoverTitle = styled.h3`\n font-size: 15px;\n font-weight: 700;\n color: #1a1a2e;\n margin: 0 0 10px;\n line-height: 1.3;\n`;\n\nexport const DescriptionScrollArea = styled.div`\n ${({ $height }) =>\n $height && $height !== \"auto\"\n ? css`\n max-height: ${typeof $height === \"number\" ? `${$height}px` : $height};\n overflow-y: auto;\n `\n : \"\"}\n`;\n\nexport const DescriptionBlock = styled.div`\n display: flex;\n flex-direction: ${({ $direction = \"row\" }) => $direction};\n font-size: 13px;\n color: #666;\n line-height: 1.6;\n margin: 0 0 4px;\n\n ${({ $direction }) =>\n $direction === \"column\"\n ? css`\n gap: 2px;\n `\n : css`\n align-items: baseline;\n gap: 4px;\n `}\n`;\n\nexport const DescriptionTitle = styled.span`\n font-weight: 600;\n color: #333;\n white-space: nowrap;\n`;\n\nexport const PopoverFooter = styled.div`\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-top: 16px;\n gap: 8px;\n`;\n\nexport const StepCounter = styled.span`\n font-size: 13px;\n font-weight: 600;\n color: #a1a1aa;\n`;\n\nexport const ButtonGroup = styled.div`\n display: flex;\n gap: 6px;\n`;\n\nexport const Button = styled.button`\n border: none;\n border-radius: 8px;\n padding: 7px 16px;\n font-size: 13px;\n font-weight: 600;\n cursor: pointer;\n transition: all 0.15s ease;\n outline: none;\n\n ${(p) =>\n p.$variant === \"skip\" &&\n css`\n background: ${p.$skipColor || \"transparent\"};\n color: ${p.$skipColor ? \"#fff\" : \"#a1a1aa\"};\n &:hover {\n opacity: 0.8;\n }\n `}\n\n ${(p) =>\n p.$variant === \"prev\" &&\n css`\n background: ${p.$prevColor || \"#f4f4f5\"};\n color: ${p.$prevColor ? \"#fff\" : \"#3f3f46\"};\n &:hover {\n opacity: 0.8;\n }\n `}\n\n ${(p) =>\n p.$variant === \"next\" &&\n css`\n background: ${p.$nextColor || \"#4f46e5\"};\n color: #fff;\n box-shadow: 0 2px 8px rgba(79, 70, 229, 0.3);\n &:hover {\n opacity: 0.9;\n box-shadow: 0 4px 12px rgba(79, 70, 229, 0.4);\n transform: translateY(-1px);\n }\n &:active {\n transform: translateY(0);\n }\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 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\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 useAnimatedRect = (step, transitionMs = 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(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 startTime = performance.now();\n\n const tick = (now) => {\n const elapsed = now - startTime;\n const progress = Math.min(elapsed / transitionMs, 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 $fontFamily,\n $animationSpeed = 350,\n} = {}) => {\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(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 step = currentValidPos !== -1 ? validSteps[currentValidPos] : null;\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(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(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:\n $fontFamily ||\n '-apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif',\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.0",
3
+ "version": "1.0.1",
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",