@korsolutions/guidon 1.0.22 → 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.
- package/dist/commonjs/hooks/useGuidonRef.js +20 -4
- package/dist/commonjs/hooks/useGuidonRef.js.map +1 -1
- package/dist/module/hooks/useGuidonRef.js +20 -4
- package/dist/module/hooks/useGuidonRef.js.map +1 -1
- package/dist/typescript/commonjs/hooks/useGuidonRef.d.ts.map +1 -1
- package/dist/typescript/module/hooks/useGuidonRef.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/hooks/useGuidonRef.ts +20 -4
|
@@ -58,6 +58,8 @@ 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);
|
|
@@ -122,22 +124,36 @@ function useGuidonRegister() {
|
|
|
122
124
|
}
|
|
123
125
|
});
|
|
124
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;
|
|
125
133
|
const register = (0, _react.useCallback)(targetId => {
|
|
126
|
-
|
|
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 => {
|
|
127
140
|
if (node) {
|
|
128
141
|
elementsRef.current.set(targetId, node);
|
|
129
142
|
const raf = requestAnimationFrame(() => {
|
|
130
|
-
|
|
143
|
+
measureRef.current(targetId, node);
|
|
131
144
|
});
|
|
132
145
|
rafRef.current.set(targetId, raf);
|
|
133
146
|
return;
|
|
134
147
|
}
|
|
135
148
|
elementsRef.current.delete(targetId);
|
|
136
|
-
|
|
149
|
+
unregisterTargetRef.current(targetId);
|
|
137
150
|
const raf = rafRef.current.get(targetId);
|
|
138
151
|
if (raf) cancelAnimationFrame(raf);
|
|
139
152
|
};
|
|
140
|
-
|
|
153
|
+
refCallbacksRef.current.set(targetId, callback);
|
|
154
|
+
return callback;
|
|
155
|
+
}, [] // No dependencies - callbacks are cached and use refs
|
|
156
|
+
);
|
|
141
157
|
|
|
142
158
|
// Re-measure all registered targets when guide becomes active or step changes
|
|
143
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","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","set","raf","requestAnimationFrame","delete","
|
|
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,6 +54,8 @@ 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);
|
|
@@ -118,22 +120,36 @@ export function useGuidonRegister() {
|
|
|
118
120
|
}
|
|
119
121
|
});
|
|
120
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;
|
|
121
129
|
const register = useCallback(targetId => {
|
|
122
|
-
|
|
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 => {
|
|
123
136
|
if (node) {
|
|
124
137
|
elementsRef.current.set(targetId, node);
|
|
125
138
|
const raf = requestAnimationFrame(() => {
|
|
126
|
-
|
|
139
|
+
measureRef.current(targetId, node);
|
|
127
140
|
});
|
|
128
141
|
rafRef.current.set(targetId, raf);
|
|
129
142
|
return;
|
|
130
143
|
}
|
|
131
144
|
elementsRef.current.delete(targetId);
|
|
132
|
-
|
|
145
|
+
unregisterTargetRef.current(targetId);
|
|
133
146
|
const raf = rafRef.current.get(targetId);
|
|
134
147
|
if (raf) cancelAnimationFrame(raf);
|
|
135
148
|
};
|
|
136
|
-
|
|
149
|
+
refCallbacksRef.current.set(targetId, callback);
|
|
150
|
+
return callback;
|
|
151
|
+
}, [] // No dependencies - callbacks are cached and use refs
|
|
152
|
+
);
|
|
137
153
|
|
|
138
154
|
// Re-measure all registered targets when guide becomes active or step changes
|
|
139
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","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","set","raf","requestAnimationFrame","delete","
|
|
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;
|
|
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;
|
|
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.
|
|
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,
|
|
@@ -165,27 +167,41 @@ export function useGuidonRegister() {
|
|
|
165
167
|
[registerTarget],
|
|
166
168
|
);
|
|
167
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
|
+
|
|
168
176
|
const register = useCallback(
|
|
169
177
|
(targetId: string) => {
|
|
170
|
-
|
|
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) => {
|
|
171
184
|
if (node) {
|
|
172
185
|
elementsRef.current.set(targetId, node);
|
|
173
186
|
|
|
174
187
|
const raf = requestAnimationFrame(() => {
|
|
175
|
-
|
|
188
|
+
measureRef.current(targetId, node);
|
|
176
189
|
});
|
|
177
190
|
|
|
178
191
|
rafRef.current.set(targetId, raf);
|
|
179
192
|
return;
|
|
180
193
|
}
|
|
181
194
|
elementsRef.current.delete(targetId);
|
|
182
|
-
|
|
195
|
+
unregisterTargetRef.current(targetId);
|
|
183
196
|
|
|
184
197
|
const raf = rafRef.current.get(targetId);
|
|
185
198
|
if (raf) cancelAnimationFrame(raf);
|
|
186
199
|
};
|
|
200
|
+
|
|
201
|
+
refCallbacksRef.current.set(targetId, callback);
|
|
202
|
+
return callback;
|
|
187
203
|
},
|
|
188
|
-
[
|
|
204
|
+
[], // No dependencies - callbacks are cached and use refs
|
|
189
205
|
);
|
|
190
206
|
|
|
191
207
|
// Re-measure all registered targets when guide becomes active or step changes
|