@symbiote-native/angular 0.7.0 → 0.8.0

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.
Files changed (158) hide show
  1. package/README.md +3 -3
  2. package/build/angular/bootstrap.js +1 -1
  3. package/build/angular/bootstrap.js.map +1 -1
  4. package/build/angular/components/activity-indicator/index.android.js +7 -2
  5. package/build/angular/components/activity-indicator/index.android.js.map +1 -1
  6. package/build/angular/components/activity-indicator/index.ios.js +3 -1
  7. package/build/angular/components/activity-indicator/index.ios.js.map +1 -1
  8. package/build/angular/components/activity-indicator/shared.d.ts +1 -1
  9. package/build/angular/components/activity-indicator/shared.js +1 -1
  10. package/build/angular/components/activity-indicator/shared.js.map +1 -1
  11. package/build/angular/components/button.js +13 -5
  12. package/build/angular/components/button.js.map +1 -1
  13. package/build/angular/components/flat-list/index.d.ts +1 -1
  14. package/build/angular/components/flat-list/index.js +47 -14
  15. package/build/angular/components/flat-list/index.js.map +1 -1
  16. package/build/angular/components/image/index.android.js +4 -2
  17. package/build/angular/components/image/index.android.js.map +1 -1
  18. package/build/angular/components/image/index.ios.js +4 -2
  19. package/build/angular/components/image/index.ios.js.map +1 -1
  20. package/build/angular/components/image/shared.js +18 -6
  21. package/build/angular/components/image/shared.js.map +1 -1
  22. package/build/angular/components/image-background.js +22 -8
  23. package/build/angular/components/image-background.js.map +1 -1
  24. package/build/angular/components/input-accessory-view/index.js +7 -2
  25. package/build/angular/components/input-accessory-view/index.js.map +1 -1
  26. package/build/angular/components/keyboard-avoiding-view/index.d.ts +1 -0
  27. package/build/angular/components/keyboard-avoiding-view/index.js +39 -9
  28. package/build/angular/components/keyboard-avoiding-view/index.js.map +1 -1
  29. package/build/angular/components/modal/index.js +7 -2
  30. package/build/angular/components/modal/index.js.map +1 -1
  31. package/build/angular/components/pressable/index.d.ts +1 -1
  32. package/build/angular/components/pressable/index.js +6 -2
  33. package/build/angular/components/pressable/index.js.map +1 -1
  34. package/build/angular/components/refresh-control/index.js +3 -1
  35. package/build/angular/components/refresh-control/index.js.map +1 -1
  36. package/build/angular/components/safe-area-view/index.js +3 -1
  37. package/build/angular/components/safe-area-view/index.js.map +1 -1
  38. package/build/angular/components/scroll-view/index.android.js +44 -14
  39. package/build/angular/components/scroll-view/index.android.js.map +1 -1
  40. package/build/angular/components/scroll-view/index.ios.js +13 -5
  41. package/build/angular/components/scroll-view/index.ios.js.map +1 -1
  42. package/build/angular/components/scroll-view/projection.d.ts +32 -0
  43. package/build/angular/components/scroll-view/projection.js +212 -47
  44. package/build/angular/components/scroll-view/projection.js.map +1 -1
  45. package/build/angular/components/scroll-view/shared.js +28 -7
  46. package/build/angular/components/scroll-view/shared.js.map +1 -1
  47. package/build/angular/components/scroll-view/sticky-header.js +7 -3
  48. package/build/angular/components/scroll-view/sticky-header.js.map +1 -1
  49. package/build/angular/components/section-list/index.d.ts +6 -1
  50. package/build/angular/components/section-list/index.js +63 -18
  51. package/build/angular/components/section-list/index.js.map +1 -1
  52. package/build/angular/components/switch/index.android.js +17 -3
  53. package/build/angular/components/switch/index.android.js.map +1 -1
  54. package/build/angular/components/switch/index.ios.js +17 -3
  55. package/build/angular/components/switch/index.ios.js.map +1 -1
  56. package/build/angular/components/switch/shared.d.ts +1 -1
  57. package/build/angular/components/switch/shared.js +5 -2
  58. package/build/angular/components/switch/shared.js.map +1 -1
  59. package/build/angular/components/text-input.d.ts +1 -1
  60. package/build/angular/components/text-input.js +25 -5
  61. package/build/angular/components/text-input.js.map +1 -1
  62. package/build/angular/components/touchable/index.d.ts +29 -7
  63. package/build/angular/components/touchable/index.js +246 -69
  64. package/build/angular/components/touchable/index.js.map +1 -1
  65. package/build/angular/components/touchable-native-feedback/index.js +2 -2
  66. package/build/angular/components/touchable-native-feedback/index.js.map +1 -1
  67. package/build/angular/components/virtualized-list/directives.js +4 -0
  68. package/build/angular/components/virtualized-list/directives.js.map +1 -1
  69. package/build/angular/components/virtualized-list/index.d.ts +5 -2
  70. package/build/angular/components/virtualized-list/index.js +197 -60
  71. package/build/angular/components/virtualized-list/index.js.map +1 -1
  72. package/build/angular/components/virtualized-section-list/directives.js.map +1 -1
  73. package/build/angular/components/virtualized-section-list/index.d.ts +18 -1
  74. package/build/angular/components/virtualized-section-list/index.js +90 -21
  75. package/build/angular/components/virtualized-section-list/index.js.map +1 -1
  76. package/build/angular/components.d.ts +1 -1
  77. package/build/angular/components.js.map +1 -1
  78. package/build/angular/create-portal/index.js +5 -1
  79. package/build/angular/create-portal/index.js.map +1 -1
  80. package/build/angular/create-tunnel/index.js.map +1 -1
  81. package/build/angular/descriptor-to-angular/index.js +3 -1
  82. package/build/angular/descriptor-to-angular/index.js.map +1 -1
  83. package/build/angular/diagnostics.d.ts +33 -0
  84. package/build/angular/diagnostics.js +82 -0
  85. package/build/angular/diagnostics.js.map +1 -0
  86. package/build/angular/host-instance/index.js +1 -1
  87. package/build/angular/host-instance/index.js.map +1 -1
  88. package/build/angular/index.d.ts +5 -2
  89. package/build/angular/index.js +15 -1
  90. package/build/angular/index.js.map +1 -1
  91. package/build/angular/modules/animated/create-animated-component.js +27 -9
  92. package/build/angular/modules/animated/create-animated-component.js.map +1 -1
  93. package/build/angular/modules/app-registry/index.js.map +1 -1
  94. package/build/angular/modules/status-bar/index.js +1 -1
  95. package/build/angular/modules/status-bar/index.js.map +1 -1
  96. package/build/angular/primitives/index.d.ts +19 -2
  97. package/build/angular/primitives/index.js +39 -3
  98. package/build/angular/primitives/index.js.map +1 -1
  99. package/build/angular/primitives/shared.d.ts +9 -1
  100. package/build/angular/primitives/shared.js +49 -3
  101. package/build/angular/primitives/shared.js.map +1 -1
  102. package/build/angular/render/index.js +48 -5
  103. package/build/angular/render/index.js.map +1 -1
  104. package/build/angular/renderer/index.d.ts +1 -0
  105. package/build/angular/renderer/index.js +37 -2
  106. package/build/angular/renderer/index.js.map +1 -1
  107. package/build/angular/services/color-scheme.service.js.map +1 -1
  108. package/build/angular/services/window-dimensions.service.js +1 -1
  109. package/build/angular/services/window-dimensions.service.js.map +1 -1
  110. package/package.json +5 -5
  111. package/src/bootstrap.ts +4 -1
  112. package/src/components/activity-indicator/index.android.ts +7 -2
  113. package/src/components/activity-indicator/index.ios.ts +3 -1
  114. package/src/components/activity-indicator/shared.ts +32 -13
  115. package/src/components/button.ts +19 -6
  116. package/src/components/flat-list/index.ts +91 -29
  117. package/src/components/image/index.android.ts +9 -2
  118. package/src/components/image/index.ios.ts +9 -2
  119. package/src/components/image/shared.ts +58 -19
  120. package/src/components/image-background.ts +29 -10
  121. package/src/components/input-accessory-view/index.ts +27 -10
  122. package/src/components/keyboard-avoiding-view/index.ts +55 -15
  123. package/src/components/modal/index.ts +22 -8
  124. package/src/components/pressable/index.ts +51 -21
  125. package/src/components/refresh-control/index.ts +22 -8
  126. package/src/components/safe-area-view/index.ts +16 -7
  127. package/src/components/scroll-view/index.android.ts +31 -9
  128. package/src/components/scroll-view/index.ios.ts +17 -4
  129. package/src/components/scroll-view/projection.ts +290 -63
  130. package/src/components/scroll-view/shared.ts +93 -26
  131. package/src/components/scroll-view/sticky-header.ts +25 -8
  132. package/src/components/section-list/index.ts +61 -19
  133. package/src/components/switch/index.android.ts +14 -3
  134. package/src/components/switch/index.ios.ts +14 -3
  135. package/src/components/switch/shared.ts +15 -4
  136. package/src/components/text-input.ts +45 -13
  137. package/src/components/touchable/index.ts +296 -72
  138. package/src/components/touchable-native-feedback/index.ts +32 -10
  139. package/src/components/virtualized-list/directives.ts +19 -5
  140. package/src/components/virtualized-list/index.ts +274 -72
  141. package/src/components/virtualized-section-list/directives.ts +6 -3
  142. package/src/components/virtualized-section-list/index.ts +146 -34
  143. package/src/components.ts +4 -1
  144. package/src/create-portal/index.ts +8 -2
  145. package/src/create-tunnel/index.ts +3 -1
  146. package/src/descriptor-to-angular/index.ts +29 -8
  147. package/src/diagnostics.ts +138 -0
  148. package/src/host-instance/index.ts +9 -3
  149. package/src/index.ts +31 -2
  150. package/src/modules/animated/create-animated-component.ts +44 -15
  151. package/src/modules/app-registry/index.ts +3 -1
  152. package/src/modules/status-bar/index.ts +13 -4
  153. package/src/primitives/index.ts +46 -2
  154. package/src/primitives/shared.ts +70 -9
  155. package/src/render/index.ts +56 -6
  156. package/src/renderer/index.ts +76 -14
  157. package/src/services/color-scheme.service.ts +3 -1
  158. package/src/services/window-dimensions.service.ts +11 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/touchable-native-feedback/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/components/touchable-native-feedback/index.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@
25
25
  // context change (no churn of the cell's own view across windowing recomputes).
26
26
  import { Directive, Input, TemplateRef, ViewContainerRef, inject, } from '@angular/core';
27
27
  import { dlog } from '@symbiote-native/engine';
28
+ import { countAngular } from '../../diagnostics';
28
29
  import * as i0 from "@angular/core";
29
30
  let vListOutletInstanceCounter = 0;
30
31
  function isRecord(value) {
@@ -103,6 +104,7 @@ export class VListOutletDirective {
103
104
  if (changes['templateRef'] !== undefined) {
104
105
  dlog(`Angular VListOutlet#${this.instanceId} templateRef CHANGED (was=${changes['templateRef'].previousValue !== undefined} now=${this.templateRef !== undefined}) -> clear + recreate`);
105
106
  this.viewContainer.clear();
107
+ countAngular('outletCreates');
106
108
  this.viewRef =
107
109
  this.templateRef === undefined
108
110
  ? null
@@ -110,12 +112,14 @@ export class VListOutletDirective {
110
112
  return;
111
113
  }
112
114
  if (this.viewRef !== null && this.context !== undefined) {
115
+ countAngular('outletUpdates');
113
116
  dlog(`Angular VListOutlet#${this.instanceId} context updated, markForCheck`);
114
117
  this.updateContext(this.viewRef.context, this.context);
115
118
  this.viewRef.markForCheck();
116
119
  }
117
120
  }
118
121
  ngOnDestroy() {
122
+ countAngular('outletDestroys');
119
123
  dlog(`Angular VListOutlet#${this.instanceId} destroyed`);
120
124
  this.viewContainer.clear();
121
125
  }
@@ -1 +1 @@
1
- {"version":3,"file":"directives.js","sourceRoot":"","sources":["../../../../src/components/virtualized-list/directives.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"directives.js","sourceRoot":"","sources":["../../../../src/components/virtualized-list/directives.ts"],"names":[],"mappings":"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"}
@@ -187,11 +187,13 @@ export declare class VirtualizedList<ItemT = unknown> implements IVirtualizedLis
187
187
  private readonly listState;
188
188
  private renderVersion;
189
189
  private readonly cellMeasures;
190
+ private cellContexts;
191
+ private nextCellContexts;
192
+ private cellContextEpoch;
190
193
  private readonly separatorOverrides;
191
194
  private viewableTimer;
192
195
  private batchTimer;
193
196
  private lastEffectSignature;
194
- private lastRenderSignature;
195
197
  private lastRecompute;
196
198
  private readonly cdr;
197
199
  private readonly elementRef;
@@ -216,7 +218,7 @@ export declare class VirtualizedList<ItemT = unknown> implements IVirtualizedLis
216
218
  private keyFor;
217
219
  private buildInputs;
218
220
  private dispatch;
219
- private renderSignature;
221
+ private isWindowSettled;
220
222
  private runEffects;
221
223
  ngOnChanges(): void;
222
224
  ngDoCheck(): void;
@@ -224,6 +226,7 @@ export declare class VirtualizedList<ItemT = unknown> implements IVirtualizedLis
224
226
  ngOnDestroy(): void;
225
227
  private recomputeView;
226
228
  private buildWindowCell;
229
+ private contextFor;
227
230
  private buildSeparatorContext;
228
231
  private spacerStyle;
229
232
  private cellMeasure;
@@ -24,11 +24,12 @@
24
24
  // Lists have no Descriptor render fn — the cell content is the framework's own children.
25
25
  // Cells/spacers are plain symbiote-view host elements.
26
26
  import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Input, Output, ViewChild, computed, inject, signal, } from '@angular/core';
27
- import { DEFAULT_END_REACHED_THRESHOLD, DEFAULT_INITIAL_NUM_TO_RENDER, DEFAULT_MAX_TO_RENDER_PER_BATCH, DEFAULT_START_REACHED_THRESHOLD, DEFAULT_UPDATE_CELLS_BATCHING_PERIOD, DEFAULT_WINDOW_SIZE, EMPTY_OFFSET, FIRST_INDEX, INVERTED_X_STYLE, INVERTED_Y_STYLE, buildListPlan, buildViewabilityPairs, createInitialListState, isSeparatorGapInRange, listEffectSignature, readLayoutLength, readScrollOffset, reduceList, resolveAccessibilityProps, resolveItemKey, } from '@symbiote-native/components';
27
+ import { DEFAULT_END_REACHED_THRESHOLD, DEFAULT_INITIAL_NUM_TO_RENDER, DEFAULT_MAX_TO_RENDER_PER_BATCH, DEFAULT_START_REACHED_THRESHOLD, DEFAULT_UPDATE_CELLS_BATCHING_PERIOD, DEFAULT_WINDOW_SIZE, EMPTY_OFFSET, FIRST_INDEX, INVERTED_X_STYLE, INVERTED_Y_STYLE, buildListPlan, buildViewabilityPairs, computeWindow, createInitialListState, isSeparatorGapInRange, listEffectSignature, readLayoutLength, readLayoutOffset, readScrollOffset, reduceList, resolveAccessibilityProps, resolveItemKey, } from '@symbiote-native/components';
28
28
  import { dlog, flattenStyle, } from '@symbiote-native/engine';
29
+ import { countAngular } from '../../diagnostics';
29
30
  import { ScrollView } from '../scroll-view';
30
31
  import { RefreshControl } from '../refresh-control';
31
- import { anchorHostStyle, SymbioteStyleInputDirective, ViewHost } from '../../primitives';
32
+ import { anchorHostStyle, SymbioteStyleInputDirective, ViewHost, } from '../../primitives';
32
33
  import { VListEmptyDirective, VListFooterDirective, VListHeaderDirective, VListItemDirective, VListOutletDirective, VListSeparatorDirective, } from './directives';
33
34
  import * as i0 from "@angular/core";
34
35
  import * as i1 from "../../primitives/shared";
@@ -162,6 +163,23 @@ export class VirtualizedList {
162
163
  listState = createInitialListState();
163
164
  renderVersion = EMPTY_OFFSET;
164
165
  cellMeasures = new Map();
166
+ // A cell's context object is the ONLY thing its stamped view reads, and VListOutletDirective
167
+ // refreshes that view whenever the object's IDENTITY changes. recomputeView runs on every frame
168
+ // the window moves, so minting a fresh context per cell made a four-row slide cost a refresh of
169
+ // EVERY cell in the window. MEASURED on PATH B geometry (544 entries, 320px viewport, RN
170
+ // defaults), per fling frame: 233-cell window, 4 cells genuinely entering, 228 outlet updates —
171
+ // each one a copyContextFields plus a markForCheck that walks to the root. Solid, same geometry,
172
+ // same shared reducer, same engine output: 4. Handing back the SAME object for a cell whose item
173
+ // and index did not move keeps `[vListOutletContext]` reference-equal, so ngOnChanges never fires
174
+ // for it. The fast adapters get this by construction — Solid's <For> is keyed on the cell KEY
175
+ // strings precisely so "the plan's freshly-built cell objects" cannot rebuild every row
176
+ // (adapters/solid/src/components/virtualized-list/shared.tsx, the cellKeys memo).
177
+ cellContexts = new Map();
178
+ nextCellContexts = new Map();
179
+ // Everything a cell's CONTENT can depend on that is not its own item identity. RN's contract for
180
+ // "re-render the cells, the data object itself did not change" is extraData; without it here an
181
+ // extraData flip would reuse every context and repaint nothing.
182
+ cellContextEpoch = undefined;
165
183
  separatorOverrides = new Map();
166
184
  // The adapter-owned debounce (minimumViewTime) and incremental-fill timers; the reducer only
167
185
  // hands back a delay.
@@ -169,9 +187,6 @@ export class VirtualizedList {
169
187
  batchTimer = null;
170
188
  // Dedupes the after-commit effects: they run only when the windowing signature changed.
171
189
  lastEffectSignature = '';
172
- // Dedupes dispatch's markForCheck against the RENDERED window (see dispatch below). Distinct from
173
- // lastEffectSignature, which gates the batch-fill timer and deliberately includes scrollOffset.
174
- lastRenderSignature = '';
175
190
  // Dedupes ngDoCheck's own recompute. WITHOUT this, recomputeView() unconditionally rebuilds
176
191
  // windowCells (and each cell's `separators` handle — fresh closures every call) on EVERY CD pass,
177
192
  // including ones triggered by something else entirely in the app. A fresh context object flows
@@ -266,7 +281,7 @@ export class VirtualizedList {
266
281
  return this.maxToRenderPerBatch ?? DEFAULT_MAX_TO_RENDER_PER_BATCH;
267
282
  }
268
283
  get updateCellsBatchingPeriodValue() {
269
- return this.updateCellsBatchingPeriod ?? DEFAULT_UPDATE_CELLS_BATCHING_PERIOD;
284
+ return (this.updateCellsBatchingPeriod ?? DEFAULT_UPDATE_CELLS_BATCHING_PERIOD);
270
285
  }
271
286
  get onEndReachedThresholdValue() {
272
287
  return this.onEndReachedThreshold ?? DEFAULT_END_REACHED_THRESHOLD;
@@ -278,6 +293,7 @@ export class VirtualizedList {
278
293
  // flow through it, which an @Output() can't carry), so this is a stable arrow field passed
279
294
  // straight to [onScroll]. onLayout is a real @Output() now, bound via (layout)="onLayoutTick($event)".
280
295
  onScrollTick = (event) => {
296
+ countAngular('scrollTicks');
281
297
  const offset = readScrollOffset(event, this.isHorizontal);
282
298
  if (offset === undefined)
283
299
  return;
@@ -352,20 +368,43 @@ export class VirtualizedList {
352
368
  if (!result.changed)
353
369
  return;
354
370
  this.renderVersion += 1;
355
- // The reducer reports `changed` for EVERY scroll offset - it has to, since the offset feeds
356
- // end-reached distance, viewability and the batch-fill timer, all handled above in runEffects.
357
- // The TEMPLATE reads none of those; it reads the window. Marking on the offset repainted the
358
- // whole ancestor chain 60 times a second on a sticky screen for a window that had not moved.
359
- const signature = this.renderSignature();
360
- if (signature === this.lastRenderSignature)
371
+ if (this.isWindowSettled(action))
361
372
  return;
362
- this.lastRenderSignature = signature;
373
+ countAngular('listMarks');
363
374
  this.cdr.markForCheck();
364
375
  }
365
- // The window, not the offset: exactly the metrics recomputeView turns into cells and spacers.
366
- renderSignature() {
376
+ // The reducer reports `changed` for EVERY scroll offset - it has to, since the offset feeds
377
+ // end-reached distance, viewability and the batch-fill timer, all handled by runEffects. The
378
+ // TEMPLATE reads none of those; it reads the window. Marking on the offset repainted the whole
379
+ // ancestor chain 60 times a second on a sticky screen for a window that had not moved.
380
+ //
381
+ // So the question here is "would a render leave the window exactly where it is", and it is asked
382
+ // of the state as it is NOW. It must NOT be answered by comparing the last-rendered window with
383
+ // the one before it: that window was derived from the PREVIOUS scroll offset, so once two
384
+ // consecutive derives agree the comparison reads "settled" for every offset that ever follows -
385
+ // no mark, no CD, no ngDoCheck, no refresh-metrics, so the window can never move again and the
386
+ // list goes permanently deaf mid-scroll (device: examples/angular Benchmark sticky path B froze
387
+ // at exactly the window the first viewport asked for, blank below it).
388
+ //
389
+ // computeWindow re-run over the CACHED offset table answers it directly. Two scans, no
390
+ // allocation - buildOffsets, the O(count) allocating half, still runs once per render only. It is
391
+ // the same function the render will use, so this cannot drift away from the window it predicts.
392
+ isWindowSettled(action) {
393
+ // A measurement rewrites the very offset table the prediction reads, so it has no cached
394
+ // geometry to answer from.
395
+ if (action.kind === 'measure')
396
+ return false;
367
397
  const m = this.listState.metrics;
368
- return `${m.first}|${m.last}|${m.count}|${m.total}`;
398
+ // Mid-fill: the committed window is still climbing toward target one batch step per render, and
399
+ // only a render advances it. Skipping the mark here is what stalls the incremental fill.
400
+ if (m.first !== m.target.first || m.last !== m.target.last)
401
+ return false;
402
+ const next = computeWindow(m.count, m.offsets, m.lengths, this.listState.scrollOffset, this.listState.viewportLength, this.windowSizeValue, this.initialNumToRenderValue);
403
+ const isSettled = next.first === m.target.first && next.last === m.target.last;
404
+ if (!isSettled)
405
+ dlog(`Angular VirtualizedList window moves [${m.first}, ${m.last}] -> ` +
406
+ `[${next.first}, ${next.last}] at offset ${this.listState.scrollOffset}`);
407
+ return isSettled;
369
408
  }
370
409
  runEffects(effects, inputs) {
371
410
  for (const effect of effects) {
@@ -377,7 +416,9 @@ export class VirtualizedList {
377
416
  this.endReached.emit({ distanceFromEnd: effect.distanceFromEnd });
378
417
  break;
379
418
  case 'fire-start-reached':
380
- this.startReached.emit({ distanceFromStart: effect.distanceFromStart });
419
+ this.startReached.emit({
420
+ distanceFromStart: effect.distanceFromStart,
421
+ });
381
422
  break;
382
423
  case 'fire-scroll-to-index-failed':
383
424
  this.scrollToIndexFailed.emit({
@@ -436,6 +477,7 @@ export class VirtualizedList {
436
477
  // grows exactly one step per meaningful CD. The projected templates (ContentChild) are resolved
437
478
  // from the second CD on; the first paint (count/viewport still 0) corrects on the layout-driven CD.
438
479
  ngDoCheck() {
480
+ countAngular('listChecks');
439
481
  const recomputeInputs = [
440
482
  this.data,
441
483
  this.extraData,
@@ -469,6 +511,7 @@ export class VirtualizedList {
469
511
  return;
470
512
  }
471
513
  // The single derive-per-CD: recompute the window off the current state before the view reads it.
514
+ countAngular('listRecomputes');
472
515
  reduceList(this.listState, { kind: 'refresh-metrics' }, this.buildInputs());
473
516
  this.recomputeView();
474
517
  }
@@ -492,7 +535,9 @@ export class VirtualizedList {
492
535
  this.itemCount = m.count;
493
536
  const hasHeader = this.headerDir !== undefined;
494
537
  const hasSeparators = this.separatorDir !== undefined;
495
- const stickySet = this.stickyHeaderIndices !== undefined ? new Set(this.stickyHeaderIndices) : undefined;
538
+ const stickySet = this.stickyHeaderIndices !== undefined
539
+ ? new Set(this.stickyHeaderIndices)
540
+ : undefined;
496
541
  this.resolvedContentContainerStyle = this.isHorizontal
497
542
  ? [this.contentContainerStyle, { width: m.total }]
498
543
  : this.contentContainerStyle;
@@ -512,9 +557,27 @@ export class VirtualizedList {
512
557
  ? undefined
513
558
  : {
514
559
  ...this.maintainVisibleContentPosition,
515
- minIndexForVisible: this.maintainVisibleContentPosition.minIndexForVisible + (hasHeader ? 1 : 0),
560
+ minIndexForVisible: this.maintainVisibleContentPosition.minIndexForVisible +
561
+ (hasHeader ? 1 : 0),
516
562
  };
563
+ // A change in anything a cell's content reads other than its own item invalidates every cached
564
+ // context: identity reuse is only sound while the reused object still describes the cell.
565
+ const epoch = [
566
+ this.data,
567
+ this.extraData,
568
+ this.getItem,
569
+ this.keyExtractor,
570
+ ];
571
+ const previousEpoch = this.cellContextEpoch;
572
+ this.cellContextEpoch = epoch;
573
+ if (previousEpoch === undefined ||
574
+ previousEpoch.length !== epoch.length ||
575
+ !previousEpoch.every((value, index) => value === epoch[index])) {
576
+ this.cellContexts.clear();
577
+ }
517
578
  if (m.count === FIRST_INDEX) {
579
+ this.cellContexts.clear();
580
+ this.nextCellContexts.clear();
518
581
  this.windowCells = [];
519
582
  this.forcedStickyCell = null;
520
583
  this.leadingSpacerStyle = null;
@@ -534,13 +597,17 @@ export class VirtualizedList {
534
597
  keyFor: this.keyFor,
535
598
  stickyIndices: stickySet,
536
599
  hasHeader,
537
- hasSeparators,
538
600
  });
539
601
  this.leadingSpacerStyle =
540
- plan.leadingExtent > EMPTY_OFFSET ? this.spacerStyle(plan.leadingExtent) : null;
541
- this.gapSpacerStyle = plan.gapExtent > EMPTY_OFFSET ? this.spacerStyle(plan.gapExtent) : null;
602
+ plan.leadingExtent > EMPTY_OFFSET
603
+ ? this.spacerStyle(plan.leadingExtent)
604
+ : null;
605
+ this.gapSpacerStyle =
606
+ plan.gapExtent > EMPTY_OFFSET ? this.spacerStyle(plan.gapExtent) : null;
542
607
  this.trailingSpacerStyle =
543
- plan.trailingExtent > EMPTY_OFFSET ? this.spacerStyle(plan.trailingExtent) : null;
608
+ plan.trailingExtent > EMPTY_OFFSET
609
+ ? this.spacerStyle(plan.trailingExtent)
610
+ : null;
544
611
  this.renderedStickyIndices =
545
612
  stickySet !== undefined && plan.stickyChildPositions.length > 0
546
613
  ? plan.stickyChildPositions
@@ -555,10 +622,19 @@ export class VirtualizedList {
555
622
  : null;
556
623
  const cells = [];
557
624
  for (const planned of plan.cells) {
558
- const includeSeparator = hasSeparators && planned.index < m.last;
625
+ // RN gates the separator on the last index of the DATA, not of the WINDOW
626
+ // (VirtualizedList.js:793 `const end = getItemCount(data) - 1`), and now that the separator
627
+ // lives INSIDE the measuring wrapper that distinction is load-bearing: gating on the window
628
+ // would make a cell's own measured height change as the window slides past it. Device-measured
629
+ // 2026-08-19 as a run of cells all shifting by exactly the divider's 1px.
630
+ const includeSeparator = hasSeparators && planned.index < m.count - 1;
559
631
  cells.push(this.buildWindowCell(planned.index, planned.key, includeSeparator));
560
632
  }
561
633
  this.windowCells = cells;
634
+ // Swap, don't prune: a cell that left the window is simply absent from the pass that just ran,
635
+ // so the old map is the garbage and the new one is exactly the live set.
636
+ this.cellContexts = this.nextCellContexts;
637
+ this.nextCellContexts = new Map();
562
638
  dlog(`Angular VirtualizedList window [${m.first}, ${m.last}] of ${m.count} ` +
563
639
  `(offset=${this.listState.scrollOffset}, viewport=${this.listState.viewportLength}, rendered=${cells.length})`);
564
640
  }
@@ -566,18 +642,32 @@ export class VirtualizedList {
566
642
  // separator context — so both plan.cells and plan.forcedStickyCell build identically.
567
643
  buildWindowCell(index, key, includeSeparator) {
568
644
  const item = this.getItem(this.data, index);
569
- const context = {
570
- $implicit: item,
571
- index,
572
- separators: this.makeSeparators(index),
573
- };
574
645
  return {
575
646
  key,
576
647
  index,
577
- context,
648
+ context: this.contextFor(key, index, item),
578
649
  measure: this.cellMeasure(index),
579
- separatorContext: includeSeparator ? this.buildSeparatorContext(index, item) : undefined,
650
+ separatorContext: includeSeparator
651
+ ? this.buildSeparatorContext(index, item)
652
+ : undefined,
653
+ };
654
+ }
655
+ // The context for one cell, reused by identity when the cell did not move. See cellContexts.
656
+ contextFor(key, index, item) {
657
+ const cached = this.cellContexts.get(key);
658
+ if (cached !== undefined &&
659
+ cached.$implicit === item &&
660
+ cached.index === index) {
661
+ this.nextCellContexts.set(key, cached);
662
+ return cached;
663
+ }
664
+ const context = {
665
+ $implicit: item,
666
+ index,
667
+ separators: this.makeSeparators(index),
580
668
  };
669
+ this.nextCellContexts.set(key, context);
670
+ return context;
581
671
  }
582
672
  buildSeparatorContext(index, item) {
583
673
  const overrides = this.separatorOverrides.get(index);
@@ -592,7 +682,9 @@ export class VirtualizedList {
592
682
  // arbitrary separator props); the typed fields above stay authoritative.
593
683
  if (overrides !== undefined) {
594
684
  for (const key of Object.keys(overrides)) {
595
- if (key === 'highlighted' || key === 'leadingItem' || key === 'trailingItem')
685
+ if (key === 'highlighted' ||
686
+ key === 'leadingItem' ||
687
+ key === 'trailingItem')
596
688
  continue;
597
689
  context[key] = overrides[key];
598
690
  }
@@ -610,10 +702,11 @@ export class VirtualizedList {
610
702
  const length = readLayoutLength(event, this.isHorizontal);
611
703
  if (length === undefined)
612
704
  return;
613
- dlog(`Angular VirtualizedList cell ${index} measured length=${length}`);
705
+ const offset = readLayoutOffset(event, this.isHorizontal);
706
+ dlog(`Angular VirtualizedList cell ${index} measured length=${length} offset=${offset ?? 'none'}`);
614
707
  // The reducer guards a fixed getItemLayout and a repeated length; a no-op leaves state and the
615
708
  // view untouched (dispatch marks for check only when something changed).
616
- this.dispatch({ kind: 'measure', index, length });
709
+ this.dispatch({ kind: 'measure', index, length, offset });
617
710
  };
618
711
  this.cellMeasures.set(index, measure);
619
712
  return measure;
@@ -625,13 +718,16 @@ export class VirtualizedList {
625
718
  measure(event);
626
719
  }
627
720
  isSymbioteEvent(value) {
628
- return typeof value === 'object' && value !== null && 'nativeEvent' in value;
721
+ return (typeof value === 'object' && value !== null && 'nativeEvent' in value);
629
722
  }
630
723
  mergeSeparator(gapIndex, patch) {
631
724
  const count = this.listState.metrics.count;
632
725
  if (!isSeparatorGapInRange(gapIndex, count))
633
726
  return;
634
- this.separatorOverrides.set(gapIndex, { ...this.separatorOverrides.get(gapIndex), ...patch });
727
+ this.separatorOverrides.set(gapIndex, {
728
+ ...this.separatorOverrides.get(gapIndex),
729
+ ...patch,
730
+ });
635
731
  this.cdr.markForCheck();
636
732
  }
637
733
  makeSeparators(index) {
@@ -679,7 +775,10 @@ export class VirtualizedList {
679
775
  });
680
776
  }
681
777
  scrollToEnd(params) {
682
- this.dispatch({ kind: 'scroll-to-end', animated: params?.animated ?? true });
778
+ this.dispatch({
779
+ kind: 'scroll-to-end',
780
+ animated: params?.animated ?? true,
781
+ });
683
782
  }
684
783
  flashScrollIndicators() {
685
784
  this.scrollView?.flashScrollIndicators();
@@ -729,12 +828,20 @@ export class VirtualizedList {
729
828
  [accessibilityValue]="foldedAccessibility().accessibilityValue"
730
829
  [accessibilityActions]="foldedAccessibility().accessibilityActions"
731
830
  [accessibilityLabelledBy]="foldedAccessibility().accessibilityLabelledBy"
732
- [importantForAccessibility]="foldedAccessibility().importantForAccessibility"
831
+ [importantForAccessibility]="
832
+ foldedAccessibility().importantForAccessibility
833
+ "
733
834
  [accessibilityLiveRegion]="foldedAccessibility().accessibilityLiveRegion"
734
835
  [screenReaderFocusable]="foldedAccessibility().screenReaderFocusable"
735
- [accessibilityViewIsModal]="foldedAccessibility().accessibilityViewIsModal"
736
- [accessibilityElementsHidden]="foldedAccessibility().accessibilityElementsHidden"
737
- [accessibilityIgnoresInvertColors]="foldedAccessibility().accessibilityIgnoresInvertColors"
836
+ [accessibilityViewIsModal]="
837
+ foldedAccessibility().accessibilityViewIsModal
838
+ "
839
+ [accessibilityElementsHidden]="
840
+ foldedAccessibility().accessibilityElementsHidden
841
+ "
842
+ [accessibilityIgnoresInvertColors]="
843
+ foldedAccessibility().accessibilityIgnoresInvertColors
844
+ "
738
845
  [accessibilityLanguage]="foldedAccessibility().accessibilityLanguage"
739
846
  [accessibilityRespondsToUserInteraction]="
740
847
  foldedAccessibility().accessibilityRespondsToUserInteraction
@@ -742,7 +849,9 @@ export class VirtualizedList {
742
849
  [accessibilityShowsLargeContentViewer]="
743
850
  foldedAccessibility().accessibilityShowsLargeContentViewer
744
851
  "
745
- [accessibilityLargeContentTitle]="foldedAccessibility().accessibilityLargeContentTitle"
852
+ [accessibilityLargeContentTitle]="
853
+ foldedAccessibility().accessibilityLargeContentTitle
854
+ "
746
855
  (accessibilityAction)="accessibilityActionTick($event)"
747
856
  (accessibilityTap)="accessibilityTapTick($event)"
748
857
  (magicTap)="magicTapTick($event)"
@@ -798,21 +907,29 @@ export class VirtualizedList {
798
907
  @if (gapSpacerStyle !== null) {
799
908
  <symbiote-view [style]="gapSpacerStyle"></symbiote-view>
800
909
  }
910
+ <!-- The separator sits INSIDE the measuring view, as RN's own cell renderer places it
911
+ (VirtualizedListCellRenderer.js:218-221). As a sibling it is an extra flex child, so
912
+ the chrome between two cells is gap + separator + gap while a spacer collapsing that
913
+ region replaces it with a single gap — every cell below the leading spacer then lands
914
+ short by (separator + gap) and the content jumps by that much whenever the window's
915
+ first index moves. Measured at exactly 17px on device 2026-08-19; see
916
+ .claude/rules/list-geometry-feedback-loop.md. -->
801
917
  @for (cell of windowCells; track cell.key) {
802
- <symbiote-view (layout)="handleCellLayout(cell.measure, $event)" [style]="cellStyle">
918
+ <symbiote-view
919
+ (layout)="handleCellLayout(cell.measure, $event)"
920
+ [style]="cellStyle"
921
+ >
803
922
  <ng-container
804
923
  [vListOutlet]="itemDir?.templateRef"
805
924
  [vListOutletContext]="cell.context"
806
925
  ></ng-container>
807
- </symbiote-view>
808
- @if (cell.separatorContext !== undefined) {
809
- <symbiote-view>
926
+ @if (cell.separatorContext !== undefined) {
810
927
  <ng-container
811
928
  [vListOutlet]="separatorDir?.templateRef"
812
929
  [vListOutletContext]="cell.separatorContext"
813
930
  ></ng-container>
814
- </symbiote-view>
815
- }
931
+ }
932
+ </symbiote-view>
816
933
  }
817
934
  @if (trailingSpacerStyle !== null) {
818
935
  <symbiote-view [style]="trailingSpacerStyle"></symbiote-view>
@@ -832,7 +949,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
832
949
  args: [{
833
950
  selector: 'VirtualizedList',
834
951
  standalone: true,
835
- hostDirectives: [{ directive: SymbioteStyleInputDirective, inputs: ['style'] }],
952
+ hostDirectives: [
953
+ { directive: SymbioteStyleInputDirective, inputs: ['style'] },
954
+ ],
836
955
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
837
956
  imports: [ScrollView, RefreshControl, VListOutletDirective, ViewHost],
838
957
  changeDetection: ChangeDetectionStrategy.OnPush,
@@ -851,12 +970,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
851
970
  [accessibilityValue]="foldedAccessibility().accessibilityValue"
852
971
  [accessibilityActions]="foldedAccessibility().accessibilityActions"
853
972
  [accessibilityLabelledBy]="foldedAccessibility().accessibilityLabelledBy"
854
- [importantForAccessibility]="foldedAccessibility().importantForAccessibility"
973
+ [importantForAccessibility]="
974
+ foldedAccessibility().importantForAccessibility
975
+ "
855
976
  [accessibilityLiveRegion]="foldedAccessibility().accessibilityLiveRegion"
856
977
  [screenReaderFocusable]="foldedAccessibility().screenReaderFocusable"
857
- [accessibilityViewIsModal]="foldedAccessibility().accessibilityViewIsModal"
858
- [accessibilityElementsHidden]="foldedAccessibility().accessibilityElementsHidden"
859
- [accessibilityIgnoresInvertColors]="foldedAccessibility().accessibilityIgnoresInvertColors"
978
+ [accessibilityViewIsModal]="
979
+ foldedAccessibility().accessibilityViewIsModal
980
+ "
981
+ [accessibilityElementsHidden]="
982
+ foldedAccessibility().accessibilityElementsHidden
983
+ "
984
+ [accessibilityIgnoresInvertColors]="
985
+ foldedAccessibility().accessibilityIgnoresInvertColors
986
+ "
860
987
  [accessibilityLanguage]="foldedAccessibility().accessibilityLanguage"
861
988
  [accessibilityRespondsToUserInteraction]="
862
989
  foldedAccessibility().accessibilityRespondsToUserInteraction
@@ -864,7 +991,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
864
991
  [accessibilityShowsLargeContentViewer]="
865
992
  foldedAccessibility().accessibilityShowsLargeContentViewer
866
993
  "
867
- [accessibilityLargeContentTitle]="foldedAccessibility().accessibilityLargeContentTitle"
994
+ [accessibilityLargeContentTitle]="
995
+ foldedAccessibility().accessibilityLargeContentTitle
996
+ "
868
997
  (accessibilityAction)="accessibilityActionTick($event)"
869
998
  (accessibilityTap)="accessibilityTapTick($event)"
870
999
  (magicTap)="magicTapTick($event)"
@@ -920,21 +1049,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
920
1049
  @if (gapSpacerStyle !== null) {
921
1050
  <symbiote-view [style]="gapSpacerStyle"></symbiote-view>
922
1051
  }
1052
+ <!-- The separator sits INSIDE the measuring view, as RN's own cell renderer places it
1053
+ (VirtualizedListCellRenderer.js:218-221). As a sibling it is an extra flex child, so
1054
+ the chrome between two cells is gap + separator + gap while a spacer collapsing that
1055
+ region replaces it with a single gap — every cell below the leading spacer then lands
1056
+ short by (separator + gap) and the content jumps by that much whenever the window's
1057
+ first index moves. Measured at exactly 17px on device 2026-08-19; see
1058
+ .claude/rules/list-geometry-feedback-loop.md. -->
923
1059
  @for (cell of windowCells; track cell.key) {
924
- <symbiote-view (layout)="handleCellLayout(cell.measure, $event)" [style]="cellStyle">
1060
+ <symbiote-view
1061
+ (layout)="handleCellLayout(cell.measure, $event)"
1062
+ [style]="cellStyle"
1063
+ >
925
1064
  <ng-container
926
1065
  [vListOutlet]="itemDir?.templateRef"
927
1066
  [vListOutletContext]="cell.context"
928
1067
  ></ng-container>
929
- </symbiote-view>
930
- @if (cell.separatorContext !== undefined) {
931
- <symbiote-view>
1068
+ @if (cell.separatorContext !== undefined) {
932
1069
  <ng-container
933
1070
  [vListOutlet]="separatorDir?.templateRef"
934
1071
  [vListOutletContext]="cell.separatorContext"
935
1072
  ></ng-container>
936
- </symbiote-view>
937
- }
1073
+ }
1074
+ </symbiote-view>
938
1075
  }
939
1076
  @if (trailingSpacerStyle !== null) {
940
1077
  <symbiote-view [style]="trailingSpacerStyle"></symbiote-view>