@korsolutions/guidon 1.0.34 → 1.0.36

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.
@@ -14,23 +14,69 @@ var _store = require("../store.js");
14
14
  */
15
15
 
16
16
  /**
17
- * Measure a native element using UIManager as fallback for composite components
18
- * (e.g., TouchableOpacity) that don't expose measureInWindow directly
17
+ * Measure a native element with multiple fallback methods for composite components
18
+ * and New Architecture (Fabric) support. Includes retry logic for timing issues.
19
19
  */
20
- function measureNativeElement(node, callback) {
21
- // Try direct measureInWindow first (works for View)
22
- if (typeof node.measureInWindow === "function") {
23
- node.measureInWindow(callback);
24
- return;
25
- }
26
-
27
- // Fallback: use findNodeHandle + UIManager for composite components
28
- const handle = (0, _reactNative.findNodeHandle)(node);
29
- if (handle) {
30
- _reactNative.UIManager.measureInWindow(handle, (x, y, width, height) => {
31
- callback(x, y, width, height);
32
- });
33
- }
20
+ function measureNativeElement(node, callback, retries = 3) {
21
+ const attemptMeasure = attemptsLeft => {
22
+ // Method 1: measureInWindow (works on View, preferred)
23
+ if (typeof node.measureInWindow === "function") {
24
+ node.measureInWindow((x, y, width, height) => {
25
+ if (width === 0 && height === 0 && attemptsLeft > 0) {
26
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
27
+ return;
28
+ }
29
+ callback(x, y, width, height);
30
+ });
31
+ return;
32
+ }
33
+
34
+ // Method 2: measure() - returns pageX/pageY (window coordinates)
35
+ if (typeof node.measure === "function") {
36
+ node.measure((_x, _y, width, height, pageX, pageY) => {
37
+ if (width === 0 && height === 0 && attemptsLeft > 0) {
38
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
39
+ return;
40
+ }
41
+ callback(pageX, pageY, width, height);
42
+ });
43
+ return;
44
+ }
45
+
46
+ // Method 3: unstable_getBoundingClientRect (Fabric - RN 0.71+)
47
+ if (typeof node.unstable_getBoundingClientRect === "function") {
48
+ const rect = node.unstable_getBoundingClientRect();
49
+ if (rect.width === 0 && rect.height === 0 && attemptsLeft > 0) {
50
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
51
+ return;
52
+ }
53
+ callback(rect.x, rect.y, rect.width, rect.height);
54
+ return;
55
+ }
56
+
57
+ // Method 4: Legacy fallback - findNodeHandle + UIManager (Old Architecture)
58
+ const handle = (0, _reactNative.findNodeHandle)(node);
59
+ if (handle) {
60
+ _reactNative.UIManager.measureInWindow(handle, (x, y, width, height) => {
61
+ if (width === 0 && height === 0 && attemptsLeft > 0) {
62
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
63
+ return;
64
+ }
65
+ callback(x, y, width, height);
66
+ });
67
+ return;
68
+ }
69
+
70
+ // Retry if handle is null (node might not be ready)
71
+ if (attemptsLeft > 0) {
72
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
73
+ return;
74
+ }
75
+ if (__DEV__) {
76
+ console.warn('[Guidon] Could not measure node. Component type:', node?.constructor?.name ?? 'unknown');
77
+ }
78
+ };
79
+ attemptMeasure(retries);
34
80
  }
35
81
 
36
82
  /**
@@ -80,6 +126,8 @@ function useGuidonRegister() {
80
126
  const rafRef = (0, _react.useRef)(new Map());
81
127
  // Cache ref callbacks to prevent creating new functions on every call
82
128
  const refCallbacksRef = (0, _react.useRef)(new Map());
129
+ // Track last measurements to avoid redundant store updates
130
+ const lastMeasurementsRef = (0, _react.useRef)(new Map());
83
131
  const registerTarget = (0, _store.useGuidonStore)(state => state.registerTarget);
84
132
  const unregisterTarget = (0, _store.useGuidonStore)(state => state.unregisterTarget);
85
133
  const isActive = (0, _store.useGuidonStore)(state => state.isActive);
@@ -120,6 +168,13 @@ function useGuidonRegister() {
120
168
  width: rect.width - paddingLeft - paddingRight - borderLeft - borderRight,
121
169
  height: rect.height - paddingTop - paddingBottom - borderTop - borderBottom
122
170
  };
171
+
172
+ // Skip update if measurements haven't changed (prevents infinite loops)
173
+ const key = `${Math.round(measurements.x)},${Math.round(measurements.y)},${Math.round(measurements.width)},${Math.round(measurements.height)}`;
174
+ if (lastMeasurementsRef.current.get(targetId) === key) {
175
+ return;
176
+ }
177
+ lastMeasurementsRef.current.set(targetId, key);
123
178
  registerTarget(targetId, measurements);
124
179
  return;
125
180
  }
@@ -127,6 +182,12 @@ function useGuidonRegister() {
127
182
  // Use helper that handles composite components (TouchableOpacity, etc.)
128
183
  measureNativeElement(node, (x, y, width, height) => {
129
184
  if (width > 0 && height > 0) {
185
+ // Skip update if measurements haven't changed (prevents infinite loops)
186
+ const key = `${Math.round(x)},${Math.round(y)},${Math.round(width)},${Math.round(height)}`;
187
+ if (lastMeasurementsRef.current.get(targetId) === key) {
188
+ return;
189
+ }
190
+ lastMeasurementsRef.current.set(targetId, key);
130
191
  registerTarget(targetId, {
131
192
  x,
132
193
  y,
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","_store","measureNativeElement","node","callback","measureInWindow","handle","findNodeHandle","UIManager","x","y","width","height","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","currentIsActive","currentConfig","isTargetUsed","steps","some","step","Platform","OS","style","getComputedStyle","paddingLeft","parseFloat","paddingRight","paddingTop","paddingBottom","borderLeft","borderLeftWidth","borderRight","borderRightWidth","borderTop","borderTopWidth","borderBottom","borderBottomWidth","measurements","scrollX","scrollY","measureRef","unregisterTargetRef","cached","get","set","raf","requestAnimationFrame","delete","cancelAnimationFrame","useEffect","currentStep","currentTargetId","shouldScroll","forEach","id","theme","scrollOptions","timer","setTimeout","clearTimeout","undefined","handler","addEventListener","removeEventListener","clear"],"sourceRoot":"../../../src","sources":["hooks/useGuidonRef.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","_store","measureNativeElement","node","callback","retries","attemptMeasure","attemptsLeft","measureInWindow","x","y","width","height","setTimeout","measure","_x","_y","pageX","pageY","unstable_getBoundingClientRect","rect","handle","findNodeHandle","UIManager","__DEV__","console","warn","constructor","name","isElementInViewport","el","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","lastMeasurementsRef","registerTarget","useGuidonStore","state","unregisterTarget","isActive","config","currentStepIndex","isActiveRef","configRef","current","useCallback","targetId","currentIsActive","currentConfig","isTargetUsed","steps","some","step","Platform","OS","style","getComputedStyle","paddingLeft","parseFloat","paddingRight","paddingTop","paddingBottom","borderLeft","borderLeftWidth","borderRight","borderRightWidth","borderTop","borderTopWidth","borderBottom","borderBottomWidth","measurements","scrollX","scrollY","key","Math","round","get","set","measureRef","unregisterTargetRef","cached","raf","requestAnimationFrame","delete","cancelAnimationFrame","useEffect","currentStep","currentTargetId","shouldScroll","forEach","id","theme","scrollOptions","timer","clearTimeout","undefined","handler","addEventListener","removeEventListener","clear"],"sourceRoot":"../../../src","sources":["hooks/useGuidonRef.ts"],"mappings":"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","ignoreList":[]}
@@ -10,23 +10,69 @@ import { useGuidonStore } from "../store.js";
10
10
  */
11
11
 
12
12
  /**
13
- * Measure a native element using UIManager as fallback for composite components
14
- * (e.g., TouchableOpacity) that don't expose measureInWindow directly
13
+ * Measure a native element with multiple fallback methods for composite components
14
+ * and New Architecture (Fabric) support. Includes retry logic for timing issues.
15
15
  */
16
- function measureNativeElement(node, callback) {
17
- // Try direct measureInWindow first (works for View)
18
- if (typeof node.measureInWindow === "function") {
19
- node.measureInWindow(callback);
20
- return;
21
- }
22
-
23
- // Fallback: use findNodeHandle + UIManager for composite components
24
- const handle = findNodeHandle(node);
25
- if (handle) {
26
- UIManager.measureInWindow(handle, (x, y, width, height) => {
27
- callback(x, y, width, height);
28
- });
29
- }
16
+ function measureNativeElement(node, callback, retries = 3) {
17
+ const attemptMeasure = attemptsLeft => {
18
+ // Method 1: measureInWindow (works on View, preferred)
19
+ if (typeof node.measureInWindow === "function") {
20
+ node.measureInWindow((x, y, width, height) => {
21
+ if (width === 0 && height === 0 && attemptsLeft > 0) {
22
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
23
+ return;
24
+ }
25
+ callback(x, y, width, height);
26
+ });
27
+ return;
28
+ }
29
+
30
+ // Method 2: measure() - returns pageX/pageY (window coordinates)
31
+ if (typeof node.measure === "function") {
32
+ node.measure((_x, _y, width, height, pageX, pageY) => {
33
+ if (width === 0 && height === 0 && attemptsLeft > 0) {
34
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
35
+ return;
36
+ }
37
+ callback(pageX, pageY, width, height);
38
+ });
39
+ return;
40
+ }
41
+
42
+ // Method 3: unstable_getBoundingClientRect (Fabric - RN 0.71+)
43
+ if (typeof node.unstable_getBoundingClientRect === "function") {
44
+ const rect = node.unstable_getBoundingClientRect();
45
+ if (rect.width === 0 && rect.height === 0 && attemptsLeft > 0) {
46
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
47
+ return;
48
+ }
49
+ callback(rect.x, rect.y, rect.width, rect.height);
50
+ return;
51
+ }
52
+
53
+ // Method 4: Legacy fallback - findNodeHandle + UIManager (Old Architecture)
54
+ const handle = findNodeHandle(node);
55
+ if (handle) {
56
+ UIManager.measureInWindow(handle, (x, y, width, height) => {
57
+ if (width === 0 && height === 0 && attemptsLeft > 0) {
58
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
59
+ return;
60
+ }
61
+ callback(x, y, width, height);
62
+ });
63
+ return;
64
+ }
65
+
66
+ // Retry if handle is null (node might not be ready)
67
+ if (attemptsLeft > 0) {
68
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
69
+ return;
70
+ }
71
+ if (__DEV__) {
72
+ console.warn('[Guidon] Could not measure node. Component type:', node?.constructor?.name ?? 'unknown');
73
+ }
74
+ };
75
+ attemptMeasure(retries);
30
76
  }
31
77
 
32
78
  /**
@@ -76,6 +122,8 @@ export function useGuidonRegister() {
76
122
  const rafRef = useRef(new Map());
77
123
  // Cache ref callbacks to prevent creating new functions on every call
78
124
  const refCallbacksRef = useRef(new Map());
125
+ // Track last measurements to avoid redundant store updates
126
+ const lastMeasurementsRef = useRef(new Map());
79
127
  const registerTarget = useGuidonStore(state => state.registerTarget);
80
128
  const unregisterTarget = useGuidonStore(state => state.unregisterTarget);
81
129
  const isActive = useGuidonStore(state => state.isActive);
@@ -116,6 +164,13 @@ export function useGuidonRegister() {
116
164
  width: rect.width - paddingLeft - paddingRight - borderLeft - borderRight,
117
165
  height: rect.height - paddingTop - paddingBottom - borderTop - borderBottom
118
166
  };
167
+
168
+ // Skip update if measurements haven't changed (prevents infinite loops)
169
+ const key = `${Math.round(measurements.x)},${Math.round(measurements.y)},${Math.round(measurements.width)},${Math.round(measurements.height)}`;
170
+ if (lastMeasurementsRef.current.get(targetId) === key) {
171
+ return;
172
+ }
173
+ lastMeasurementsRef.current.set(targetId, key);
119
174
  registerTarget(targetId, measurements);
120
175
  return;
121
176
  }
@@ -123,6 +178,12 @@ export function useGuidonRegister() {
123
178
  // Use helper that handles composite components (TouchableOpacity, etc.)
124
179
  measureNativeElement(node, (x, y, width, height) => {
125
180
  if (width > 0 && height > 0) {
181
+ // Skip update if measurements haven't changed (prevents infinite loops)
182
+ const key = `${Math.round(x)},${Math.round(y)},${Math.round(width)},${Math.round(height)}`;
183
+ if (lastMeasurementsRef.current.get(targetId) === key) {
184
+ return;
185
+ }
186
+ lastMeasurementsRef.current.set(targetId, key);
126
187
  registerTarget(targetId, {
127
188
  x,
128
189
  y,
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useRef","findNodeHandle","Platform","UIManager","useGuidonStore","measureNativeElement","node","callback","measureInWindow","handle","x","y","width","height","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","currentIsActive","currentConfig","isTargetUsed","steps","some","step","OS","style","getComputedStyle","paddingLeft","parseFloat","paddingRight","paddingTop","paddingBottom","borderLeft","borderLeftWidth","borderRight","borderRightWidth","borderTop","borderTopWidth","borderBottom","borderBottomWidth","measurements","scrollX","scrollY","measureRef","unregisterTargetRef","cached","get","set","raf","requestAnimationFrame","delete","cancelAnimationFrame","currentStep","currentTargetId","shouldScroll","forEach","id","theme","scrollOptions","timer","setTimeout","clearTimeout","undefined","handler","addEventListener","removeEventListener","clear"],"sourceRoot":"../../../src","sources":["hooks/useGuidonRef.ts"],"mappings":";;AAAA,SAASA,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACtD,SAASC,cAAc,EAAEC,QAAQ,EAAEC,SAAS,QAAQ,cAAc;AAClE,SAASC,cAAc,QAAQ,aAAU;;AAGzC;AACA;AACA;AACA;;AASA;AACA;AACA;AACA;AACA,SAASC,oBAAoBA,CAC3BC,IAAuB,EACvBC,QAAuE,EACjE;EACN;EACA,IAAI,OAAQD,IAAI,CAASE,eAAe,KAAK,UAAU,EAAE;IACtDF,IAAI,CAASE,eAAe,CAACD,QAAQ,CAAC;IACvC;EACF;;EAEA;EACA,MAAME,MAAM,GAAGR,cAAc,CAACK,IAAW,CAAC;EAC1C,IAAIG,MAAM,EAAE;IACVN,SAAS,CAACK,eAAe,CAACC,MAAM,EAAE,CAACC,CAAC,EAAEC,CAAC,EAAEC,KAAK,EAAEC,MAAM,KAAK;MACzDN,QAAQ,CAACG,CAAC,EAAEC,CAAC,EAAEC,KAAK,EAAEC,MAAM,CAAC;IAC/B,CAAC,CAAC;EACJ;AACF;;AAEA;AACA;AACA;AACA,SAASC,mBAAmBA,CAACC,EAAe,EAAW;EACrD,MAAMC,IAAI,GAAGD,EAAE,CAACE,qBAAqB,CAAC,CAAC;EACvC,OACED,IAAI,CAACE,GAAG,IAAI,CAAC,IACbF,IAAI,CAACG,IAAI,IAAI,CAAC,IACdH,IAAI,CAACI,MAAM,KAAKC,MAAM,CAACC,WAAW,IAAIC,QAAQ,CAACC,eAAe,CAACC,YAAY,CAAC,IAC5ET,IAAI,CAACU,KAAK,KAAKL,MAAM,CAACM,UAAU,IAAIJ,QAAQ,CAACC,eAAe,CAACI,WAAW,CAAC;AAE7E;;AAEA;AACA;AACA;AACA,SAASC,qBAAqBA,CAACd,EAAe,EAAEe,OAA6B,EAAQ;EACnF,IAAIhB,mBAAmB,CAACC,EAAE,CAAC,EAAE;EAE7BA,EAAE,CAACgB,cAAc,CAAC;IAChBC,QAAQ,EAAEF,OAAO,EAAEE,QAAQ,IAAI,QAAQ;IACvCC,KAAK,EAAEH,OAAO,EAAEG,KAAK,IAAI,QAAQ;IACjCC,MAAM,EAAEJ,OAAO,EAAEI,MAAM,IAAI;EAC7B,CAAC,CAAC;AACJ;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,SAASC,SAASA,CAAA,EAAG;EAC1B,MAAMC,QAAQ,GAAGC,iBAAiB,CAAC,CAAC;EACpC,OAAO;IAAED;EAAS,CAAC;AACrB;AAEA,OAAO,SAASC,iBAAiBA,CAAA,EAAG;EAClC,MAAMC,WAAW,GAAGtC,MAAM,CAAiC,IAAIuC,GAAG,CAAC,CAAC,CAAC;EACrE,MAAMC,MAAM,GAAGxC,MAAM,CAAsB,IAAIuC,GAAG,CAAC,CAAC,CAAC;EACrD;EACA,MAAME,eAAe,GAAGzC,MAAM,CAAwD,IAAIuC,GAAG,CAAC,CAAC,CAAC;EAEhG,MAAMG,cAAc,GAAGtC,cAAc,CAClCuC,KAAkB,IAAKA,KAAK,CAACD,cAChC,CAAC;EACD,MAAME,gBAAgB,GAAGxC,cAAc,CACpCuC,KAAkB,IAAKA,KAAK,CAACC,gBAChC,CAAC;EACD,MAAMC,QAAQ,GAAGzC,cAAc,CAAEuC,KAAK,IAAKA,KAAK,CAACE,QAAQ,CAAC;EAC1D,MAAMC,MAAM,GAAG1C,cAAc,CAAEuC,KAAK,IAAKA,KAAK,CAACG,MAAM,CAAC;EACtD,MAAMC,gBAAgB,GAAG3C,cAAc,CAAEuC,KAAK,IAAKA,KAAK,CAACI,gBAAgB,CAAC;;EAE1E;EACA,MAAMC,WAAW,GAAGhD,MAAM,CAAC6C,QAAQ,CAAC;EACpC,MAAMI,SAAS,GAAGjD,MAAM,CAAC8C,MAAM,CAAC;EAChCE,WAAW,CAACE,OAAO,GAAGL,QAAQ;EAC9BI,SAAS,CAACC,OAAO,GAAGJ,MAAM;EAE1B,MAAMK,OAAO,GAAGrD,WAAW,CACzB,CAACsD,QAAgB,EAAE9C,IAA8B,KAAK;IACpD,MAAM+C,eAAe,GAAGL,WAAW,CAACE,OAAO;IAC3C,MAAMI,aAAa,GAAGL,SAAS,CAACC,OAAO;IAEvC,IAAI,CAAC5C,IAAI,IAAI,CAAC+C,eAAe,IAAI,CAACC,aAAa,EAAE;MAC/C;IACF;IAEA,MAAMC,YAAY,GAAGD,aAAa,CAACE,KAAK,CAACC,IAAI,CAC1CC,IAAI,IAAKA,IAAI,CAACN,QAAQ,KAAKA,QAC9B,CAAC;IAED,IAAI,CAACG,YAAY,EAAE;MACjB;IACF;IAEA,IAAIrD,QAAQ,CAACyD,EAAE,KAAK,KAAK,EAAE;MACzB,MAAM5C,EAAE,GAAGT,IAA8B;MAEzC,IAAI,CAACS,EAAE,EAAEE,qBAAqB,EAAE;MAEhC,MAAMD,IAAI,GAAGD,EAAE,CAACE,qBAAqB,CAAC,CAAC;MACvC,MAAM2C,KAAK,GAAGvC,MAAM,CAACwC,gBAAgB,CAAC9C,EAAE,CAAC;MAEzC,MAAM+C,WAAW,GAAGC,UAAU,CAACH,KAAK,CAACE,WAAW,CAAC;MACjD,MAAME,YAAY,GAAGD,UAAU,CAACH,KAAK,CAACI,YAAY,CAAC;MACnD,MAAMC,UAAU,GAAGF,UAAU,CAACH,KAAK,CAACK,UAAU,CAAC;MAC/C,MAAMC,aAAa,GAAGH,UAAU,CAACH,KAAK,CAACM,aAAa,CAAC;MAErD,MAAMC,UAAU,GAAGJ,UAAU,CAACH,KAAK,CAACQ,eAAe,CAAC;MACpD,MAAMC,WAAW,GAAGN,UAAU,CAACH,KAAK,CAACU,gBAAgB,CAAC;MACtD,MAAMC,SAAS,GAAGR,UAAU,CAACH,KAAK,CAACY,cAAc,CAAC;MAClD,MAAMC,YAAY,GAAGV,UAAU,CAACH,KAAK,CAACc,iBAAiB,CAAC;MAExD,MAAMC,YAAY,GAAG;QACnBjE,CAAC,EAAEM,IAAI,CAACG,IAAI,GAAGE,MAAM,CAACuD,OAAO,GAAGT,UAAU,GAAGL,WAAW;QACxDnD,CAAC,EAAEK,IAAI,CAACE,GAAG,GAAGG,MAAM,CAACwD,OAAO,GAAGN,SAAS,GAAGN,UAAU;QACrDrD,KAAK,EACHI,IAAI,CAACJ,KAAK,GAAGkD,WAAW,GAAGE,YAAY,GAAGG,UAAU,GAAGE,WAAW;QACpExD,MAAM,EACJG,IAAI,CAACH,MAAM,GAAGoD,UAAU,GAAGC,aAAa,GAAGK,SAAS,GAAGE;MAC3D,CAAC;MACD/B,cAAc,CAACU,QAAQ,EAAEuB,YAAY,CAAC;MAEtC;IACF;;IAEA;IACAtE,oBAAoB,CAACC,IAAI,EAAE,CAACI,CAAC,EAAEC,CAAC,EAAEC,KAAK,EAAEC,MAAM,KAAK;MAClD,IAAID,KAAK,GAAG,CAAC,IAAIC,MAAM,GAAG,CAAC,EAAE;QAC3B6B,cAAc,CAACU,QAAQ,EAAE;UAAE1C,CAAC;UAAEC,CAAC;UAAEC,KAAK;UAAEC;QAAO,CAAC,CAAC;MACnD;IACF,CAAC,CAAC;EACJ,CAAC,EACD,CAAC6B,cAAc,CACjB,CAAC;;EAED;EACA,MAAMoC,UAAU,GAAG9E,MAAM,CAACmD,OAAO,CAAC;EAClC,MAAM4B,mBAAmB,GAAG/E,MAAM,CAAC4C,gBAAgB,CAAC;EACpDkC,UAAU,CAAC5B,OAAO,GAAGC,OAAO;EAC5B4B,mBAAmB,CAAC7B,OAAO,GAAGN,gBAAgB;EAE9C,MAAMR,QAAQ,GAAGtC,WAAW,CACzBsD,QAAgB,IAAK;IACpB;IACA,MAAM4B,MAAM,GAAGvC,eAAe,CAACS,OAAO,CAAC+B,GAAG,CAAC7B,QAAQ,CAAC;IACpD,IAAI4B,MAAM,EAAE,OAAOA,MAAM;;IAEzB;IACA,MAAMzE,QAAQ,GAAID,IAA8B,IAAK;MACnD,IAAIA,IAAI,EAAE;QACRgC,WAAW,CAACY,OAAO,CAACgC,GAAG,CAAC9B,QAAQ,EAAE9C,IAAI,CAAC;QAEvC,MAAM6E,GAAG,GAAGC,qBAAqB,CAAC,MAAM;UACtCN,UAAU,CAAC5B,OAAO,CAACE,QAAQ,EAAE9C,IAAI,CAAC;QACpC,CAAC,CAAC;QAEFkC,MAAM,CAACU,OAAO,CAACgC,GAAG,CAAC9B,QAAQ,EAAE+B,GAAG,CAAC;QACjC;MACF;MACA7C,WAAW,CAACY,OAAO,CAACmC,MAAM,CAACjC,QAAQ,CAAC;MACpC2B,mBAAmB,CAAC7B,OAAO,CAACE,QAAQ,CAAC;MAErC,MAAM+B,GAAG,GAAG3C,MAAM,CAACU,OAAO,CAAC+B,GAAG,CAAC7B,QAAQ,CAAC;MACxC,IAAI+B,GAAG,EAAE;QACPG,oBAAoB,CAACH,GAAG,CAAC;QACzB3C,MAAM,CAACU,OAAO,CAACmC,MAAM,CAACjC,QAAQ,CAAC;MACjC;IACF,CAAC;IAEDX,eAAe,CAACS,OAAO,CAACgC,GAAG,CAAC9B,QAAQ,EAAE7C,QAAQ,CAAC;IAC/C,OAAOA,QAAQ;EACjB,CAAC,EACD,EAAE,CAAE;EACN,CAAC;;EAED;EACA;EACAR,SAAS,CAAC,MAAM;IACd,IAAI,CAAC8C,QAAQ,IAAI,CAACC,MAAM,EAAE;;IAE1B;IACA,MAAMyC,WAAW,GAAGzC,MAAM,CAACU,KAAK,CAACT,gBAAgB,CAAC;IAClD,MAAMyC,eAAe,GAAGD,WAAW,EAAEnC,QAAQ;IAC7C,MAAMqC,YAAY,GAAGF,WAAW,EAAExD,cAAc,KAAK,KAAK;;IAE1D;IACAO,WAAW,CAACY,OAAO,CAACwC,OAAO,CAAC,CAACpF,IAAI,EAAEqF,EAAE,KAAK;MACxCP,qBAAqB,CAAC,MAAM;QAC1BN,UAAU,CAAC5B,OAAO,CAACyC,EAAE,EAAErF,IAAI,CAAC;;QAE5B;QACA,IACEJ,QAAQ,CAACyD,EAAE,KAAK,KAAK,IACrB8B,YAAY,IACZE,EAAE,KAAKH,eAAe,IACtBlF,IAAI,EACJ;UACA,MAAMS,EAAE,GAAGT,IAA8B;UACzCuB,qBAAqB,CAACd,EAAE,EAAE+B,MAAM,CAAC8C,KAAK,EAAEC,aAAa,CAAC;QACxD;MACF,CAAC,CAAC;IACJ,CAAC,CAAC;;IAEF;IACA;IACA,IAAI3F,QAAQ,CAACyD,EAAE,KAAK,KAAK,IAAI8B,YAAY,IAAID,eAAe,EAAE;MAC5D,MAAMM,KAAK,GAAGC,UAAU,CAAC,MAAM;QAC7B,MAAMzF,IAAI,GAAGgC,WAAW,CAACY,OAAO,CAAC+B,GAAG,CAACO,eAAe,CAAC;QACrD,IAAIlF,IAAI,EAAE;UACRwE,UAAU,CAAC5B,OAAO,CAACsC,eAAe,EAAElF,IAAI,CAAC;QAC3C;MACF,CAAC,EAAE,GAAG,CAAC;MACP,OAAO,MAAM0F,YAAY,CAACF,KAAK,CAAC;IAClC;IAEA,OAAOG,SAAS;EAClB,CAAC,EAAE,CAAClD,gBAAgB,EAAEF,QAAQ,EAAEC,MAAM,CAAC,CAAC;EAExC/C,SAAS,CAAC,MAAM;IACd,IAAIG,QAAQ,CAACyD,EAAE,KAAK,KAAK,IAAI,CAACd,QAAQ,EAAE;IAExC,MAAMqD,OAAO,GAAGA,CAAA,KAAM;MACpB5D,WAAW,CAACY,OAAO,CAACwC,OAAO,CAAC,CAACpF,IAAI,EAAEqF,EAAE,KAAK;QACxCb,UAAU,CAAC5B,OAAO,CAACyC,EAAE,EAAErF,IAAI,CAAC;MAC9B,CAAC,CAAC;IACJ,CAAC;IAEDe,MAAM,CAAC8E,gBAAgB,CAAC,QAAQ,EAAED,OAAO,EAAE,IAAI,CAAC;IAChD7E,MAAM,CAAC8E,gBAAgB,CAAC,QAAQ,EAAED,OAAO,CAAC;IAE1C,OAAO,MAAM;MACX7E,MAAM,CAAC+E,mBAAmB,CAAC,QAAQ,EAAEF,OAAO,EAAE,IAAI,CAAC;MACnD7E,MAAM,CAAC+E,mBAAmB,CAAC,QAAQ,EAAEF,OAAO,CAAC;IAC/C,CAAC;EACH,CAAC,EAAE,CAACrD,QAAQ,CAAC,CAAC;EAEd9C,SAAS,CAAC,MAAM;IACd,OAAO,MAAM;MACX0C,eAAe,CAACS,OAAO,CAACmD,KAAK,CAAC,CAAC;IACjC,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN,OAAOjE,QAAQ;AACjB","ignoreList":[]}
1
+ {"version":3,"names":["useCallback","useEffect","useRef","findNodeHandle","Platform","UIManager","useGuidonStore","measureNativeElement","node","callback","retries","attemptMeasure","attemptsLeft","measureInWindow","x","y","width","height","setTimeout","measure","_x","_y","pageX","pageY","unstable_getBoundingClientRect","rect","handle","__DEV__","console","warn","constructor","name","isElementInViewport","el","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","lastMeasurementsRef","registerTarget","state","unregisterTarget","isActive","config","currentStepIndex","isActiveRef","configRef","current","targetId","currentIsActive","currentConfig","isTargetUsed","steps","some","step","OS","style","getComputedStyle","paddingLeft","parseFloat","paddingRight","paddingTop","paddingBottom","borderLeft","borderLeftWidth","borderRight","borderRightWidth","borderTop","borderTopWidth","borderBottom","borderBottomWidth","measurements","scrollX","scrollY","key","Math","round","get","set","measureRef","unregisterTargetRef","cached","raf","requestAnimationFrame","delete","cancelAnimationFrame","currentStep","currentTargetId","shouldScroll","forEach","id","theme","scrollOptions","timer","clearTimeout","undefined","handler","addEventListener","removeEventListener","clear"],"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;AAmDF;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,SAAS;yBA4FV,MAAM,YAnF+B,iBAAiB,GAAG,IAAI,KAAK,IAAI;EANpF;AAED,wBAAgB,iBAAiB,eAuFlB,MAAM,YAnF+B,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAwLpF"}
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;AA6GF;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,SAAS;yBA6GV,MAAM,YAnGE,iBAAiB,GAAG,IAAI,KAAK,IAAI;EAPvD;AAED,wBAAgB,iBAAiB,eAwGlB,MAAM,YAnGE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAwMvD"}
@@ -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;AAmDF;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,SAAS;yBA4FV,MAAM,YAnF+B,iBAAiB,GAAG,IAAI,KAAK,IAAI;EANpF;AAED,wBAAgB,iBAAiB,eAuFlB,MAAM,YAnF+B,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAwLpF"}
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;AA6GF;;;;;;;;;;;;;;GAcG;AAEH,wBAAgB,SAAS;yBA6GV,MAAM,YAnGE,iBAAiB,GAAG,IAAI,KAAK,IAAI;EAPvD;AAED,wBAAgB,iBAAiB,eAwGlB,MAAM,YAnGE,iBAAiB,GAAG,IAAI,KAAK,IAAI,CAwMvD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@korsolutions/guidon",
3
- "version": "1.0.34",
3
+ "version": "1.0.36",
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>",
@@ -16,26 +16,80 @@ type MeasurableElement = {
16
16
  };
17
17
 
18
18
  /**
19
- * Measure a native element using UIManager as fallback for composite components
20
- * (e.g., TouchableOpacity) that don't expose measureInWindow directly
19
+ * Measure a native element with multiple fallback methods for composite components
20
+ * and New Architecture (Fabric) support. Includes retry logic for timing issues.
21
21
  */
22
22
  function measureNativeElement(
23
23
  node: MeasurableElement,
24
24
  callback: (x: number, y: number, width: number, height: number) => void,
25
+ retries = 3,
25
26
  ): void {
26
- // Try direct measureInWindow first (works for View)
27
- if (typeof (node as any).measureInWindow === "function") {
28
- (node as any).measureInWindow(callback);
29
- return;
30
- }
31
-
32
- // Fallback: use findNodeHandle + UIManager for composite components
33
- const handle = findNodeHandle(node as any);
34
- if (handle) {
35
- UIManager.measureInWindow(handle, (x, y, width, height) => {
36
- callback(x, y, width, height);
37
- });
38
- }
27
+ const attemptMeasure = (attemptsLeft: number) => {
28
+ // Method 1: measureInWindow (works on View, preferred)
29
+ if (typeof (node as any).measureInWindow === "function") {
30
+ (node as any).measureInWindow((x: number, y: number, width: number, height: number) => {
31
+ if (width === 0 && height === 0 && attemptsLeft > 0) {
32
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
33
+ return;
34
+ }
35
+ callback(x, y, width, height);
36
+ });
37
+ return;
38
+ }
39
+
40
+ // Method 2: measure() - returns pageX/pageY (window coordinates)
41
+ if (typeof (node as any).measure === "function") {
42
+ (node as any).measure(
43
+ (_x: number, _y: number, width: number, height: number, pageX: number, pageY: number) => {
44
+ if (width === 0 && height === 0 && attemptsLeft > 0) {
45
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
46
+ return;
47
+ }
48
+ callback(pageX, pageY, width, height);
49
+ }
50
+ );
51
+ return;
52
+ }
53
+
54
+ // Method 3: unstable_getBoundingClientRect (Fabric - RN 0.71+)
55
+ if (typeof (node as any).unstable_getBoundingClientRect === "function") {
56
+ const rect = (node as any).unstable_getBoundingClientRect();
57
+ if (rect.width === 0 && rect.height === 0 && attemptsLeft > 0) {
58
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
59
+ return;
60
+ }
61
+ callback(rect.x, rect.y, rect.width, rect.height);
62
+ return;
63
+ }
64
+
65
+ // Method 4: Legacy fallback - findNodeHandle + UIManager (Old Architecture)
66
+ const handle = findNodeHandle(node as any);
67
+ if (handle) {
68
+ UIManager.measureInWindow(handle, (x: number, y: number, width: number, height: number) => {
69
+ if (width === 0 && height === 0 && attemptsLeft > 0) {
70
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
71
+ return;
72
+ }
73
+ callback(x, y, width, height);
74
+ });
75
+ return;
76
+ }
77
+
78
+ // Retry if handle is null (node might not be ready)
79
+ if (attemptsLeft > 0) {
80
+ setTimeout(() => attemptMeasure(attemptsLeft - 1), 100);
81
+ return;
82
+ }
83
+
84
+ if (__DEV__) {
85
+ console.warn(
86
+ '[Guidon] Could not measure node. Component type:',
87
+ (node as any)?.constructor?.name ?? 'unknown'
88
+ );
89
+ }
90
+ };
91
+
92
+ attemptMeasure(retries);
39
93
  }
40
94
 
41
95
  /**
@@ -46,7 +100,8 @@ function isElementInViewport(el: HTMLElement): boolean {
46
100
  return (
47
101
  rect.top >= 0 &&
48
102
  rect.left >= 0 &&
49
- rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
103
+ rect.bottom <=
104
+ (window.innerHeight || document.documentElement.clientHeight) &&
50
105
  rect.right <= (window.innerWidth || document.documentElement.clientWidth)
51
106
  );
52
107
  }
@@ -54,7 +109,10 @@ function isElementInViewport(el: HTMLElement): boolean {
54
109
  /**
55
110
  * Scroll element into view (web only)
56
111
  */
57
- function scrollElementIntoView(el: HTMLElement, options?: GuidonScrollOptions): void {
112
+ function scrollElementIntoView(
113
+ el: HTMLElement,
114
+ options?: GuidonScrollOptions,
115
+ ): void {
58
116
  if (isElementInViewport(el)) return;
59
117
 
60
118
  el.scrollIntoView({
@@ -89,7 +147,11 @@ export function useGuidonRegister() {
89
147
  const elementsRef = useRef<Map<string, MeasurableElement>>(new Map());
90
148
  const rafRef = useRef<Map<string, number>>(new Map());
91
149
  // Cache ref callbacks to prevent creating new functions on every call
92
- const refCallbacksRef = useRef<Map<string, (node: MeasurableElement | null) => void>>(new Map());
150
+ const refCallbacksRef = useRef<
151
+ Map<string, (node: MeasurableElement | null) => void>
152
+ >(new Map());
153
+ // Track last measurements to avoid redundant store updates
154
+ const lastMeasurementsRef = useRef<Map<string, string>>(new Map());
93
155
 
94
156
  const registerTarget = useGuidonStore(
95
157
  (state: GuidonStore) => state.registerTarget,
@@ -150,6 +212,13 @@ export function useGuidonRegister() {
150
212
  height:
151
213
  rect.height - paddingTop - paddingBottom - borderTop - borderBottom,
152
214
  };
215
+
216
+ // Skip update if measurements haven't changed (prevents infinite loops)
217
+ const key = `${Math.round(measurements.x)},${Math.round(measurements.y)},${Math.round(measurements.width)},${Math.round(measurements.height)}`;
218
+ if (lastMeasurementsRef.current.get(targetId) === key) {
219
+ return;
220
+ }
221
+ lastMeasurementsRef.current.set(targetId, key);
153
222
  registerTarget(targetId, measurements);
154
223
 
155
224
  return;
@@ -158,6 +227,12 @@ export function useGuidonRegister() {
158
227
  // Use helper that handles composite components (TouchableOpacity, etc.)
159
228
  measureNativeElement(node, (x, y, width, height) => {
160
229
  if (width > 0 && height > 0) {
230
+ // Skip update if measurements haven't changed (prevents infinite loops)
231
+ const key = `${Math.round(x)},${Math.round(y)},${Math.round(width)},${Math.round(height)}`;
232
+ if (lastMeasurementsRef.current.get(targetId) === key) {
233
+ return;
234
+ }
235
+ lastMeasurementsRef.current.set(targetId, key);
161
236
  registerTarget(targetId, { x, y, width, height });
162
237
  }
163
238
  });