@qontinui/ui-bridge-native 0.6.11 → 0.6.12

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.
@@ -270,6 +270,51 @@ export declare class NativeUIBridgeRegistry {
270
270
  * `registrationRoute` (app-wide registrations) are untouched.
271
271
  */
272
272
  markRouteOffscreen(route: string): void;
273
+ /**
274
+ * Re-measure every mounted-visible element's geometry via its stored React
275
+ * ref and write the fresh coordinates into the registry ("measure-on-
276
+ * snapshot").
277
+ *
278
+ * Why: element geometry is otherwise captured ONCE at mount time
279
+ * (`onLayout` + `measureInWindow` in `useUIElement`) and RN never re-fires
280
+ * `onLayout` on pure translation — scrolling a virtualized list
281
+ * (FlashList), recycling a cell, a keyboard shift or an orientation change
282
+ * all move elements WITHOUT updating the stored `state.layout`. Snapshot
283
+ * consumers (vision analyzers hit-testing `bbox`, coord-based tap) then
284
+ * operate on stale positions. Re-measuring at READ time is correct
285
+ * regardless of what moved the element and needs zero per-consumer wiring:
286
+ * every registry entry already stores its ref (see `registerElement`).
287
+ *
288
+ * Per-element outcomes:
289
+ * - non-zero dims → write a fresh full layout (same state shape as the
290
+ * mount-time measure loop in `useUIElement`); counted as `measured`.
291
+ * - zero dims AND the element previously had a non-null `state.layout` →
292
+ * the view collapsed / left the screen; clear to
293
+ * `{ visible: false, layout: null }` (same shape `markRouteOffscreen`
294
+ * writes); counted as `cleared`.
295
+ * - zero dims and it never had a layout → leave state untouched (element
296
+ * in the mount→first-onLayout gap; don't demote `likely-visible`);
297
+ * counted as `skipped`.
298
+ * - no ref / no callable `measureInWindow` (test fixtures, web) → leave
299
+ * untouched; counted as `skipped`.
300
+ *
301
+ * The whole sweep races an overall timeout (default 250 ms) so a dead ref
302
+ * whose `measureInWindow` never calls back can never hang a snapshot: the
303
+ * returned promise resolves at the deadline with whatever counts have
304
+ * accumulated. Late callbacks may still write state afterwards — harmless,
305
+ * freshest data wins. Never throws.
306
+ *
307
+ * Non-React core module on purpose — `measureInWindow` is duck-typed off
308
+ * the stored ref rather than imported from `react-native` (see the
309
+ * `projectBbox` doc comment for why this file must not import RN).
310
+ */
311
+ refreshMeasurements(options?: {
312
+ timeoutMs?: number;
313
+ }): Promise<{
314
+ measured: number;
315
+ cleared: number;
316
+ skipped: number;
317
+ }>;
273
318
  /**
274
319
  * Update element state
275
320
  */
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -562,6 +562,103 @@ var NativeUIBridgeRegistry = class {
562
562
  console.log(`[ui-bridge-native] Marked ${cleared} elements offscreen for route: ${route}`);
563
563
  }
564
564
  }
565
+ /**
566
+ * Re-measure every mounted-visible element's geometry via its stored React
567
+ * ref and write the fresh coordinates into the registry ("measure-on-
568
+ * snapshot").
569
+ *
570
+ * Why: element geometry is otherwise captured ONCE at mount time
571
+ * (`onLayout` + `measureInWindow` in `useUIElement`) and RN never re-fires
572
+ * `onLayout` on pure translation — scrolling a virtualized list
573
+ * (FlashList), recycling a cell, a keyboard shift or an orientation change
574
+ * all move elements WITHOUT updating the stored `state.layout`. Snapshot
575
+ * consumers (vision analyzers hit-testing `bbox`, coord-based tap) then
576
+ * operate on stale positions. Re-measuring at READ time is correct
577
+ * regardless of what moved the element and needs zero per-consumer wiring:
578
+ * every registry entry already stores its ref (see `registerElement`).
579
+ *
580
+ * Per-element outcomes:
581
+ * - non-zero dims → write a fresh full layout (same state shape as the
582
+ * mount-time measure loop in `useUIElement`); counted as `measured`.
583
+ * - zero dims AND the element previously had a non-null `state.layout` →
584
+ * the view collapsed / left the screen; clear to
585
+ * `{ visible: false, layout: null }` (same shape `markRouteOffscreen`
586
+ * writes); counted as `cleared`.
587
+ * - zero dims and it never had a layout → leave state untouched (element
588
+ * in the mount→first-onLayout gap; don't demote `likely-visible`);
589
+ * counted as `skipped`.
590
+ * - no ref / no callable `measureInWindow` (test fixtures, web) → leave
591
+ * untouched; counted as `skipped`.
592
+ *
593
+ * The whole sweep races an overall timeout (default 250 ms) so a dead ref
594
+ * whose `measureInWindow` never calls back can never hang a snapshot: the
595
+ * returned promise resolves at the deadline with whatever counts have
596
+ * accumulated. Late callbacks may still write state afterwards — harmless,
597
+ * freshest data wins. Never throws.
598
+ *
599
+ * Non-React core module on purpose — `measureInWindow` is duck-typed off
600
+ * the stored ref rather than imported from `react-native` (see the
601
+ * `projectBbox` doc comment for why this file must not import RN).
602
+ */
603
+ async refreshMeasurements(options) {
604
+ const timeoutMs = typeof options?.timeoutMs === "number" && Number.isFinite(options.timeoutMs) && options.timeoutMs > 0 ? options.timeoutMs : 250;
605
+ const counts = { measured: 0, cleared: 0, skipped: 0 };
606
+ const pending = [];
607
+ for (const element of this.getMountedVisibleElements()) {
608
+ const node = element.ref?.current;
609
+ if (!node || typeof node.measureInWindow !== "function") {
610
+ counts.skipped++;
611
+ continue;
612
+ }
613
+ const id = element.id;
614
+ pending.push(
615
+ new Promise((resolve) => {
616
+ let settled = false;
617
+ try {
618
+ node.measureInWindow((pageX, pageY, w, h) => {
619
+ if (settled) return;
620
+ settled = true;
621
+ try {
622
+ if (w > 0 && h > 0) {
623
+ this.updateElementState(id, {
624
+ mounted: true,
625
+ visible: true,
626
+ enabled: true,
627
+ focused: false,
628
+ layout: { x: pageX, y: pageY, width: w, height: h, pageX, pageY }
629
+ });
630
+ counts.measured++;
631
+ } else if (this.elements.get(id)?.getState().layout != null) {
632
+ this.updateElementState(id, { visible: false, layout: null });
633
+ counts.cleared++;
634
+ } else {
635
+ counts.skipped++;
636
+ }
637
+ } finally {
638
+ resolve();
639
+ }
640
+ });
641
+ } catch {
642
+ if (!settled) {
643
+ settled = true;
644
+ counts.skipped++;
645
+ resolve();
646
+ }
647
+ }
648
+ })
649
+ );
650
+ }
651
+ if (pending.length > 0) {
652
+ await new Promise((resolve) => {
653
+ const timer = setTimeout(resolve, timeoutMs);
654
+ void Promise.all(pending).then(() => {
655
+ clearTimeout(timer);
656
+ resolve();
657
+ });
658
+ });
659
+ }
660
+ return counts;
661
+ }
565
662
  /**
566
663
  * Update element state
567
664
  */
@@ -2596,6 +2693,7 @@ function createServerHandlers(registry, executor, config) {
2596
2693
  return {
2597
2694
  // Elements
2598
2695
  getElements: async (ctx) => {
2696
+ await registry.refreshMeasurements();
2599
2697
  const visibleOnly = ctx.query?.visibleOnly === "true" || ctx.body?.visibleOnly === true;
2600
2698
  const forRoute = ctx.query?.route || ctx.body?.route;
2601
2699
  let allElements = visibleOnly ? registry.getMountedVisibleElements() : registry.getAllElements();
@@ -2789,6 +2887,7 @@ function createServerHandlers(registry, executor, config) {
2789
2887
  });
2790
2888
  },
2791
2889
  getSnapshot: async (ctx) => {
2890
+ await registry.refreshMeasurements();
2792
2891
  const visibleOnly = ctx.query?.visibleOnly === "true" || ctx.body?.visibleOnly === true;
2793
2892
  const currentRouteOnly = ctx.query?.currentRouteOnly === "true" || ctx.body?.currentRouteOnly === true;
2794
2893
  const snapshot = registry.createSnapshot(void 0, { visibleOnly, currentRouteOnly });
@@ -3104,6 +3203,7 @@ function createServerHandlers(registry, executor, config) {
3104
3203
  // that don't measure (the fallback only matches single-rooted screens but
3105
3204
  // is good enough for the unit suite).
3106
3205
  tapAt: async (ctx) => {
3206
+ await registry.refreshMeasurements();
3107
3207
  const body = ctx.body;
3108
3208
  const x = body?.x;
3109
3209
  const y = body?.y;
@@ -3311,7 +3411,7 @@ function createServerHandlers(registry, executor, config) {
3311
3411
  };
3312
3412
  if (config?.appInfo) {
3313
3413
  response.uiBridge = {
3314
- version: "0.6.11",
3414
+ version: "0.6.12",
3315
3415
  ...config.appInfo,
3316
3416
  capabilities: ["elements", "components", "actions", "design"],
3317
3417
  elementCount: stats.elements,
@@ -6103,7 +6203,7 @@ function useUIElement(options) {
6103
6203
  unregisterRef.current();
6104
6204
  }
6105
6205
  };
6106
- }, [autoRegister, bridge]);
6206
+ }, [autoRegister, bridge, id]);
6107
6207
  react.useEffect(() => {
6108
6208
  if (!bridge || !registered) return;
6109
6209
  const node = ref.current;