@korsolutions/guidon 1.0.21 → 1.0.23

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.
@@ -58,22 +58,32 @@ function useGuidon() {
58
58
  function useGuidonRegister() {
59
59
  const elementsRef = (0, _react.useRef)(new Map());
60
60
  const rafRef = (0, _react.useRef)(new Map());
61
+ // Cache ref callbacks to prevent creating new functions on every call
62
+ const refCallbacksRef = (0, _react.useRef)(new Map());
61
63
  const registerTarget = (0, _store.useGuidonStore)(state => state.registerTarget);
62
64
  const unregisterTarget = (0, _store.useGuidonStore)(state => state.unregisterTarget);
63
65
  const isActive = (0, _store.useGuidonStore)(state => state.isActive);
64
66
  const config = (0, _store.useGuidonStore)(state => state.config);
65
67
  const currentStepIndex = (0, _store.useGuidonStore)(state => state.currentStepIndex);
68
+
69
+ // Use refs to avoid recreating callbacks when state changes (prevents infinite loop)
70
+ const isActiveRef = (0, _react.useRef)(isActive);
71
+ const configRef = (0, _react.useRef)(config);
72
+ isActiveRef.current = isActive;
73
+ configRef.current = config;
66
74
  const measure = (0, _react.useCallback)((targetId, node) => {
75
+ const currentIsActive = isActiveRef.current;
76
+ const currentConfig = configRef.current;
67
77
  console.log("[useGuidon] measure() called for:", targetId, {
68
78
  hasNode: !!node,
69
- isActive,
70
- hasConfig: !!config
79
+ isActive: currentIsActive,
80
+ hasConfig: !!currentConfig
71
81
  });
72
- if (!node || !isActive || !config) {
82
+ if (!node || !currentIsActive || !currentConfig) {
73
83
  console.log("[useGuidon] measure() early return - missing node, inactive, or no config");
74
84
  return;
75
85
  }
76
- const isTargetUsed = config.steps.some(step => step.targetId === targetId);
86
+ const isTargetUsed = currentConfig.steps.some(step => step.targetId === targetId);
77
87
  if (!isTargetUsed) {
78
88
  console.log("[useGuidon] measure() - target not in config steps:", targetId);
79
89
  return;
@@ -113,23 +123,37 @@ function useGuidonRegister() {
113
123
  });
114
124
  }
115
125
  });
116
- }, [isActive, config, registerTarget]);
126
+ }, [registerTarget]);
127
+
128
+ // Use refs for measure and unregisterTarget to avoid recreating callbacks
129
+ const measureRef = (0, _react.useRef)(measure);
130
+ const unregisterTargetRef = (0, _react.useRef)(unregisterTarget);
131
+ measureRef.current = measure;
132
+ unregisterTargetRef.current = unregisterTarget;
117
133
  const register = (0, _react.useCallback)(targetId => {
118
- return node => {
134
+ // Return cached callback if it exists
135
+ const cached = refCallbacksRef.current.get(targetId);
136
+ if (cached) return cached;
137
+
138
+ // Create and cache a new callback
139
+ const callback = node => {
119
140
  if (node) {
120
141
  elementsRef.current.set(targetId, node);
121
142
  const raf = requestAnimationFrame(() => {
122
- measure(targetId, node);
143
+ measureRef.current(targetId, node);
123
144
  });
124
145
  rafRef.current.set(targetId, raf);
125
146
  return;
126
147
  }
127
148
  elementsRef.current.delete(targetId);
128
- unregisterTarget(targetId);
149
+ unregisterTargetRef.current(targetId);
129
150
  const raf = rafRef.current.get(targetId);
130
151
  if (raf) cancelAnimationFrame(raf);
131
152
  };
132
- }, [measure, unregisterTarget]);
153
+ refCallbacksRef.current.set(targetId, callback);
154
+ return callback;
155
+ }, [] // No dependencies - callbacks are cached and use refs
156
+ );
133
157
 
134
158
  // Re-measure all registered targets when guide becomes active or step changes
135
159
  // This ensures targets from all hook instances get measured
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_store","isElementInViewport","el","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","scrollElementIntoView","options","scrollIntoView","behavior","block","inline","useGuidon","register","useGuidonRegister","elementsRef","useRef","Map","rafRef","registerTarget","useGuidonStore","state","unregisterTarget","isActive","config","currentStepIndex","measure","useCallback","targetId","node","console","log","hasNode","hasConfig","isTargetUsed","steps","some","step","Platform","OS","style","getComputedStyle","paddingLeft","parseFloat","paddingRight","paddingTop","paddingBottom","borderLeft","borderLeftWidth","borderRight","borderRightWidth","borderTop","borderTopWidth","borderBottom","borderBottomWidth","measurements","x","scrollX","y","scrollY","width","height","native","measureInWindow","current","set","raf","requestAnimationFrame","delete","get","cancelAnimationFrame","useEffect","Array","from","keys","currentStep","currentTargetId","shouldScroll","forEach","id","theme","scrollOptions","handler","addEventListener","removeEventListener"],"sourceRoot":"../../../src","sources":["hooks/useGuidonRef.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_store","isElementInViewport","el","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","scrollElementIntoView","options","scrollIntoView","behavior","block","inline","useGuidon","register","useGuidonRegister","elementsRef","useRef","Map","rafRef","refCallbacksRef","registerTarget","useGuidonStore","state","unregisterTarget","isActive","config","currentStepIndex","isActiveRef","configRef","current","measure","useCallback","targetId","node","currentIsActive","currentConfig","console","log","hasNode","hasConfig","isTargetUsed","steps","some","step","Platform","OS","style","getComputedStyle","paddingLeft","parseFloat","paddingRight","paddingTop","paddingBottom","borderLeft","borderLeftWidth","borderRight","borderRightWidth","borderTop","borderTopWidth","borderBottom","borderBottomWidth","measurements","x","scrollX","y","scrollY","width","height","native","measureInWindow","measureRef","unregisterTargetRef","cached","get","callback","set","raf","requestAnimationFrame","delete","cancelAnimationFrame","useEffect","Array","from","keys","currentStep","currentTargetId","shouldScroll","forEach","id","theme","scrollOptions","handler","addEventListener","removeEventListener"],"sourceRoot":"../../../src","sources":["hooks/useGuidonRef.ts"],"mappings":"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","ignoreList":[]}
@@ -54,22 +54,32 @@ export function useGuidon() {
54
54
  export function useGuidonRegister() {
55
55
  const elementsRef = useRef(new Map());
56
56
  const rafRef = useRef(new Map());
57
+ // Cache ref callbacks to prevent creating new functions on every call
58
+ const refCallbacksRef = useRef(new Map());
57
59
  const registerTarget = useGuidonStore(state => state.registerTarget);
58
60
  const unregisterTarget = useGuidonStore(state => state.unregisterTarget);
59
61
  const isActive = useGuidonStore(state => state.isActive);
60
62
  const config = useGuidonStore(state => state.config);
61
63
  const currentStepIndex = useGuidonStore(state => state.currentStepIndex);
64
+
65
+ // Use refs to avoid recreating callbacks when state changes (prevents infinite loop)
66
+ const isActiveRef = useRef(isActive);
67
+ const configRef = useRef(config);
68
+ isActiveRef.current = isActive;
69
+ configRef.current = config;
62
70
  const measure = useCallback((targetId, node) => {
71
+ const currentIsActive = isActiveRef.current;
72
+ const currentConfig = configRef.current;
63
73
  console.log("[useGuidon] measure() called for:", targetId, {
64
74
  hasNode: !!node,
65
- isActive,
66
- hasConfig: !!config
75
+ isActive: currentIsActive,
76
+ hasConfig: !!currentConfig
67
77
  });
68
- if (!node || !isActive || !config) {
78
+ if (!node || !currentIsActive || !currentConfig) {
69
79
  console.log("[useGuidon] measure() early return - missing node, inactive, or no config");
70
80
  return;
71
81
  }
72
- const isTargetUsed = config.steps.some(step => step.targetId === targetId);
82
+ const isTargetUsed = currentConfig.steps.some(step => step.targetId === targetId);
73
83
  if (!isTargetUsed) {
74
84
  console.log("[useGuidon] measure() - target not in config steps:", targetId);
75
85
  return;
@@ -109,23 +119,37 @@ export function useGuidonRegister() {
109
119
  });
110
120
  }
111
121
  });
112
- }, [isActive, config, registerTarget]);
122
+ }, [registerTarget]);
123
+
124
+ // Use refs for measure and unregisterTarget to avoid recreating callbacks
125
+ const measureRef = useRef(measure);
126
+ const unregisterTargetRef = useRef(unregisterTarget);
127
+ measureRef.current = measure;
128
+ unregisterTargetRef.current = unregisterTarget;
113
129
  const register = useCallback(targetId => {
114
- return node => {
130
+ // Return cached callback if it exists
131
+ const cached = refCallbacksRef.current.get(targetId);
132
+ if (cached) return cached;
133
+
134
+ // Create and cache a new callback
135
+ const callback = node => {
115
136
  if (node) {
116
137
  elementsRef.current.set(targetId, node);
117
138
  const raf = requestAnimationFrame(() => {
118
- measure(targetId, node);
139
+ measureRef.current(targetId, node);
119
140
  });
120
141
  rafRef.current.set(targetId, raf);
121
142
  return;
122
143
  }
123
144
  elementsRef.current.delete(targetId);
124
- unregisterTarget(targetId);
145
+ unregisterTargetRef.current(targetId);
125
146
  const raf = rafRef.current.get(targetId);
126
147
  if (raf) cancelAnimationFrame(raf);
127
148
  };
128
- }, [measure, unregisterTarget]);
149
+ refCallbacksRef.current.set(targetId, callback);
150
+ return callback;
151
+ }, [] // No dependencies - callbacks are cached and use refs
152
+ );
129
153
 
130
154
  // Re-measure all registered targets when guide becomes active or step changes
131
155
  // This ensures targets from all hook instances get measured
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","Platform","useGuidonStore","isElementInViewport","el","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","scrollElementIntoView","options","scrollIntoView","behavior","block","inline","useGuidon","register","useGuidonRegister","elementsRef","Map","rafRef","registerTarget","state","unregisterTarget","isActive","config","currentStepIndex","measure","targetId","node","console","log","hasNode","hasConfig","isTargetUsed","steps","some","step","OS","style","getComputedStyle","paddingLeft","parseFloat","paddingRight","paddingTop","paddingBottom","borderLeft","borderLeftWidth","borderRight","borderRightWidth","borderTop","borderTopWidth","borderBottom","borderBottomWidth","measurements","x","scrollX","y","scrollY","width","height","native","measureInWindow","current","set","raf","requestAnimationFrame","delete","get","cancelAnimationFrame","Array","from","keys","currentStep","currentTargetId","shouldScroll","forEach","id","theme","scrollOptions","handler","addEventListener","removeEventListener"],"sourceRoot":"../../../src","sources":["hooks/useGuidonRef.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useRef","Platform","useGuidonStore","isElementInViewport","el","rect","getBoundingClientRect","top","left","bottom","window","innerHeight","document","documentElement","clientHeight","right","innerWidth","clientWidth","scrollElementIntoView","options","scrollIntoView","behavior","block","inline","useGuidon","register","useGuidonRegister","elementsRef","Map","rafRef","refCallbacksRef","registerTarget","state","unregisterTarget","isActive","config","currentStepIndex","isActiveRef","configRef","current","measure","targetId","node","currentIsActive","currentConfig","console","log","hasNode","hasConfig","isTargetUsed","steps","some","step","OS","style","getComputedStyle","paddingLeft","parseFloat","paddingRight","paddingTop","paddingBottom","borderLeft","borderLeftWidth","borderRight","borderRightWidth","borderTop","borderTopWidth","borderBottom","borderBottomWidth","measurements","x","scrollX","y","scrollY","width","height","native","measureInWindow","measureRef","unregisterTargetRef","cached","get","callback","set","raf","requestAnimationFrame","delete","cancelAnimationFrame","Array","from","keys","currentStep","currentTargetId","shouldScroll","forEach","id","theme","scrollOptions","handler","addEventListener","removeEventListener"],"sourceRoot":"../../../src","sources":["hooks/useGuidonRef.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useGuidonRef.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useGuidonRef.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,KAAK,iBAAiB,GAAG;IACvB,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC;IACtC,eAAe,CAAC,EAAE,CAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,KACpE,IAAI,CAAC;IACV,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC5D,CAAC;AA4BF;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,SAAS;yBAoGV,MAAM,YACD,iBAAiB,GAAG,IAAI;EAlG3C;AAED,wBAAgB,iBAAiB,eA+FlB,MAAM,YACD,iBAAiB,GAAG,IAAI,UA2E3C"}
1
+ {"version":3,"file":"useGuidonRef.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useGuidonRef.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,KAAK,iBAAiB,GAAG;IACvB,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC;IACtC,eAAe,CAAC,EAAE,CAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,KACpE,IAAI,CAAC;IACV,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC5D,CAAC;AA4BF;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,SAAS;yBAqHV,MAAM,YA5G+B,iBAAiB,GAAG,IAAI,KAAK,IAAI;EANpF;AAED,wBAAgB,iBAAiB,eAgHlB,MAAM,YA5G+B,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAgMpF"}
@@ -1 +1 @@
1
- {"version":3,"file":"useGuidonRef.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useGuidonRef.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,KAAK,iBAAiB,GAAG;IACvB,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC;IACtC,eAAe,CAAC,EAAE,CAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,KACpE,IAAI,CAAC;IACV,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC5D,CAAC;AA4BF;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,SAAS;yBAoGV,MAAM,YACD,iBAAiB,GAAG,IAAI;EAlG3C;AAED,wBAAgB,iBAAiB,eA+FlB,MAAM,YACD,iBAAiB,GAAG,IAAI,UA2E3C"}
1
+ {"version":3,"file":"useGuidonRef.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useGuidonRef.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,KAAK,iBAAiB,GAAG;IACvB,qBAAqB,CAAC,EAAE,MAAM,OAAO,CAAC;IACtC,eAAe,CAAC,EAAE,CAChB,QAAQ,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,KACpE,IAAI,CAAC;IACV,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,IAAI,CAAC;CAC5D,CAAC;AA4BF;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,SAAS;yBAqHV,MAAM,YA5G+B,iBAAiB,GAAG,IAAI,KAAK,IAAI;EANpF;AAED,wBAAgB,iBAAiB,eAgHlB,MAAM,YA5G+B,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAgMpF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@korsolutions/guidon",
3
- "version": "1.0.21",
3
+ "version": "1.0.23",
4
4
  "description": "A cross-platform walkthrough/onboarding component library for React Native with web support. Features spotlight effects, customizable tooltips, and flexible persistence options. ",
5
5
  "repository": "https://github.com/KorSoftwareSolutions/guidon.git",
6
6
  "author": "Christian Jimenez <christianjimenezfael@gmail.com>",
@@ -65,6 +65,8 @@ export function useGuidon() {
65
65
  export function useGuidonRegister() {
66
66
  const elementsRef = useRef<Map<string, MeasurableElement>>(new Map());
67
67
  const rafRef = useRef<Map<string, number>>(new Map());
68
+ // Cache ref callbacks to prevent creating new functions on every call
69
+ const refCallbacksRef = useRef<Map<string, (node: MeasurableElement | null) => void>>(new Map());
68
70
 
69
71
  const registerTarget = useGuidonStore(
70
72
  (state: GuidonStore) => state.registerTarget,
@@ -76,22 +78,31 @@ export function useGuidonRegister() {
76
78
  const config = useGuidonStore((state) => state.config);
77
79
  const currentStepIndex = useGuidonStore((state) => state.currentStepIndex);
78
80
 
81
+ // Use refs to avoid recreating callbacks when state changes (prevents infinite loop)
82
+ const isActiveRef = useRef(isActive);
83
+ const configRef = useRef(config);
84
+ isActiveRef.current = isActive;
85
+ configRef.current = config;
86
+
79
87
  const measure = useCallback(
80
88
  (targetId: string, node: MeasurableElement | null) => {
89
+ const currentIsActive = isActiveRef.current;
90
+ const currentConfig = configRef.current;
91
+
81
92
  console.log("[useGuidon] measure() called for:", targetId, {
82
93
  hasNode: !!node,
83
- isActive,
84
- hasConfig: !!config,
94
+ isActive: currentIsActive,
95
+ hasConfig: !!currentConfig,
85
96
  });
86
97
 
87
- if (!node || !isActive || !config) {
98
+ if (!node || !currentIsActive || !currentConfig) {
88
99
  console.log(
89
100
  "[useGuidon] measure() early return - missing node, inactive, or no config",
90
101
  );
91
102
  return;
92
103
  }
93
104
 
94
- const isTargetUsed = config.steps.some(
105
+ const isTargetUsed = currentConfig.steps.some(
95
106
  (step) => step.targetId === targetId,
96
107
  );
97
108
 
@@ -153,30 +164,44 @@ export function useGuidonRegister() {
153
164
  }
154
165
  });
155
166
  },
156
- [isActive, config, registerTarget],
167
+ [registerTarget],
157
168
  );
158
169
 
170
+ // Use refs for measure and unregisterTarget to avoid recreating callbacks
171
+ const measureRef = useRef(measure);
172
+ const unregisterTargetRef = useRef(unregisterTarget);
173
+ measureRef.current = measure;
174
+ unregisterTargetRef.current = unregisterTarget;
175
+
159
176
  const register = useCallback(
160
177
  (targetId: string) => {
161
- return (node: MeasurableElement | null) => {
178
+ // Return cached callback if it exists
179
+ const cached = refCallbacksRef.current.get(targetId);
180
+ if (cached) return cached;
181
+
182
+ // Create and cache a new callback
183
+ const callback = (node: MeasurableElement | null) => {
162
184
  if (node) {
163
185
  elementsRef.current.set(targetId, node);
164
186
 
165
187
  const raf = requestAnimationFrame(() => {
166
- measure(targetId, node);
188
+ measureRef.current(targetId, node);
167
189
  });
168
190
 
169
191
  rafRef.current.set(targetId, raf);
170
192
  return;
171
193
  }
172
194
  elementsRef.current.delete(targetId);
173
- unregisterTarget(targetId);
195
+ unregisterTargetRef.current(targetId);
174
196
 
175
197
  const raf = rafRef.current.get(targetId);
176
198
  if (raf) cancelAnimationFrame(raf);
177
199
  };
200
+
201
+ refCallbacksRef.current.set(targetId, callback);
202
+ return callback;
178
203
  },
179
- [measure, unregisterTarget],
204
+ [], // No dependencies - callbacks are cached and use refs
180
205
  );
181
206
 
182
207
  // Re-measure all registered targets when guide becomes active or step changes