@symbiote-native/angular 0.6.2 → 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 (191) hide show
  1. package/README.md +3 -3
  2. package/bin/symbiote-angular-dev.cjs +20 -19
  3. package/build/angular/anchor-host-registry.js +2 -2
  4. package/build/angular/anchor-host-registry.js.map +1 -1
  5. package/build/angular/bootstrap.js +1 -1
  6. package/build/angular/bootstrap.js.map +1 -1
  7. package/build/angular/components/activity-indicator/index.android.d.ts +2 -1
  8. package/build/angular/components/activity-indicator/index.android.js +12 -4
  9. package/build/angular/components/activity-indicator/index.android.js.map +1 -1
  10. package/build/angular/components/activity-indicator/index.ios.d.ts +2 -1
  11. package/build/angular/components/activity-indicator/index.ios.js +8 -3
  12. package/build/angular/components/activity-indicator/index.ios.js.map +1 -1
  13. package/build/angular/components/activity-indicator/shared.d.ts +1 -1
  14. package/build/angular/components/activity-indicator/shared.js +4 -4
  15. package/build/angular/components/activity-indicator/shared.js.map +1 -1
  16. package/build/angular/components/button.d.ts +4 -2
  17. package/build/angular/components/button.js +41 -22
  18. package/build/angular/components/button.js.map +1 -1
  19. package/build/angular/components/flat-list/index.d.ts +6 -4
  20. package/build/angular/components/flat-list/index.js +80 -50
  21. package/build/angular/components/flat-list/index.js.map +1 -1
  22. package/build/angular/components/image/index.android.d.ts +8 -3
  23. package/build/angular/components/image/index.android.js +42 -10
  24. package/build/angular/components/image/index.android.js.map +1 -1
  25. package/build/angular/components/image/index.ios.d.ts +8 -3
  26. package/build/angular/components/image/index.ios.js +42 -10
  27. package/build/angular/components/image/index.ios.js.map +1 -1
  28. package/build/angular/components/image/shared.d.ts +4 -1
  29. package/build/angular/components/image/shared.js +51 -8
  30. package/build/angular/components/image/shared.js.map +1 -1
  31. package/build/angular/components/image-background.d.ts +2 -1
  32. package/build/angular/components/image-background.js +26 -10
  33. package/build/angular/components/image-background.js.map +1 -1
  34. package/build/angular/components/input-accessory-view/index.d.ts +9 -4
  35. package/build/angular/components/input-accessory-view/index.js +49 -10
  36. package/build/angular/components/input-accessory-view/index.js.map +1 -1
  37. package/build/angular/components/keyboard-avoiding-view/index.d.ts +3 -1
  38. package/build/angular/components/keyboard-avoiding-view/index.js +44 -12
  39. package/build/angular/components/keyboard-avoiding-view/index.js.map +1 -1
  40. package/build/angular/components/modal/index.d.ts +11 -8
  41. package/build/angular/components/modal/index.js +51 -29
  42. package/build/angular/components/modal/index.js.map +1 -1
  43. package/build/angular/components/pressable/index.d.ts +12 -6
  44. package/build/angular/components/pressable/index.js +66 -13
  45. package/build/angular/components/pressable/index.js.map +1 -1
  46. package/build/angular/components/refresh-control/index.d.ts +8 -4
  47. package/build/angular/components/refresh-control/index.js +54 -16
  48. package/build/angular/components/refresh-control/index.js.map +1 -1
  49. package/build/angular/components/safe-area-view/index.d.ts +9 -4
  50. package/build/angular/components/safe-area-view/index.js +48 -9
  51. package/build/angular/components/safe-area-view/index.js.map +1 -1
  52. package/build/angular/components/scroll-view/index.android.d.ts +2 -3
  53. package/build/angular/components/scroll-view/index.android.js +88 -61
  54. package/build/angular/components/scroll-view/index.android.js.map +1 -1
  55. package/build/angular/components/scroll-view/index.ios.d.ts +2 -3
  56. package/build/angular/components/scroll-view/index.ios.js +24 -18
  57. package/build/angular/components/scroll-view/index.ios.js.map +1 -1
  58. package/build/angular/components/scroll-view/projection.d.ts +35 -0
  59. package/build/angular/components/scroll-view/projection.js +279 -53
  60. package/build/angular/components/scroll-view/projection.js.map +1 -1
  61. package/build/angular/components/scroll-view/shared.d.ts +14 -5
  62. package/build/angular/components/scroll-view/shared.js +225 -75
  63. package/build/angular/components/scroll-view/shared.js.map +1 -1
  64. package/build/angular/components/scroll-view/sticky-header.js +21 -22
  65. package/build/angular/components/scroll-view/sticky-header.js.map +1 -1
  66. package/build/angular/components/section-list/index.d.ts +7 -1
  67. package/build/angular/components/section-list/index.js +91 -54
  68. package/build/angular/components/section-list/index.js.map +1 -1
  69. package/build/angular/components/switch/index.android.d.ts +7 -3
  70. package/build/angular/components/switch/index.android.js +52 -10
  71. package/build/angular/components/switch/index.android.js.map +1 -1
  72. package/build/angular/components/switch/index.ios.d.ts +7 -3
  73. package/build/angular/components/switch/index.ios.js +52 -10
  74. package/build/angular/components/switch/index.ios.js.map +1 -1
  75. package/build/angular/components/switch/shared.d.ts +13 -4
  76. package/build/angular/components/switch/shared.js +71 -7
  77. package/build/angular/components/switch/shared.js.map +1 -1
  78. package/build/angular/components/text-input.d.ts +11 -3
  79. package/build/angular/components/text-input.js +68 -8
  80. package/build/angular/components/text-input.js.map +1 -1
  81. package/build/angular/components/touchable/index.d.ts +40 -9
  82. package/build/angular/components/touchable/index.js +303 -67
  83. package/build/angular/components/touchable/index.js.map +1 -1
  84. package/build/angular/components/touchable-native-feedback/index.d.ts +6 -3
  85. package/build/angular/components/touchable-native-feedback/index.js +63 -27
  86. package/build/angular/components/touchable-native-feedback/index.js.map +1 -1
  87. package/build/angular/components/virtualized-list/directives.js +22 -18
  88. package/build/angular/components/virtualized-list/directives.js.map +1 -1
  89. package/build/angular/components/virtualized-list/index.d.ts +15 -4
  90. package/build/angular/components/virtualized-list/index.js +326 -94
  91. package/build/angular/components/virtualized-list/index.js.map +1 -1
  92. package/build/angular/components/virtualized-section-list/directives.js +12 -12
  93. package/build/angular/components/virtualized-section-list/directives.js.map +1 -1
  94. package/build/angular/components/virtualized-section-list/index.d.ts +19 -1
  95. package/build/angular/components/virtualized-section-list/index.js +93 -22
  96. package/build/angular/components/virtualized-section-list/index.js.map +1 -1
  97. package/build/angular/components.d.ts +2 -2
  98. package/build/angular/components.js +5 -0
  99. package/build/angular/components.js.map +1 -1
  100. package/build/angular/create-portal/index.js +34 -36
  101. package/build/angular/create-portal/index.js.map +1 -1
  102. package/build/angular/create-tunnel/index.js +19 -22
  103. package/build/angular/create-tunnel/index.js.map +1 -1
  104. package/build/angular/descriptor-to-angular/index.js +6 -4
  105. package/build/angular/descriptor-to-angular/index.js.map +1 -1
  106. package/build/angular/diagnostics.d.ts +33 -0
  107. package/build/angular/diagnostics.js +82 -0
  108. package/build/angular/diagnostics.js.map +1 -0
  109. package/build/angular/host-instance/index.js +1 -1
  110. package/build/angular/host-instance/index.js.map +1 -1
  111. package/build/angular/index.d.ts +9 -4
  112. package/build/angular/index.js +17 -3
  113. package/build/angular/index.js.map +1 -1
  114. package/build/angular/modules/animated/animated-leaf-binder.d.ts +1 -7
  115. package/build/angular/modules/animated/animated-leaf-binder.js +22 -72
  116. package/build/angular/modules/animated/animated-leaf-binder.js.map +1 -1
  117. package/build/angular/modules/animated/create-animated-component.d.ts +11 -6
  118. package/build/angular/modules/animated/create-animated-component.js +106 -55
  119. package/build/angular/modules/animated/create-animated-component.js.map +1 -1
  120. package/build/angular/modules/status-bar/index.js +4 -4
  121. package/build/angular/modules/status-bar/index.js.map +1 -1
  122. package/build/angular/primitives/index.d.ts +20 -3
  123. package/build/angular/primitives/index.js +84 -48
  124. package/build/angular/primitives/index.js.map +1 -1
  125. package/build/angular/primitives/shared.d.ts +48 -2
  126. package/build/angular/primitives/shared.js +158 -11
  127. package/build/angular/primitives/shared.js.map +1 -1
  128. package/build/angular/render/index.js +69 -38
  129. package/build/angular/render/index.js.map +1 -1
  130. package/build/angular/renderer/index.d.ts +1 -0
  131. package/build/angular/renderer/index.js +37 -2
  132. package/build/angular/renderer/index.js.map +1 -1
  133. package/build/angular/services/color-scheme.service.js +3 -3
  134. package/build/angular/services/color-scheme.service.js.map +1 -1
  135. package/build/angular/services/window-dimensions.service.js +4 -4
  136. package/build/angular/services/window-dimensions.service.js.map +1 -1
  137. package/package.json +10 -8
  138. package/src/anchor-host-registry.ts +2 -2
  139. package/src/bootstrap.ts +4 -1
  140. package/src/components/activity-indicator/index.android.ts +8 -1
  141. package/src/components/activity-indicator/index.ios.ts +4 -0
  142. package/src/components/activity-indicator/shared.ts +32 -13
  143. package/src/components/button.ts +46 -19
  144. package/src/components/flat-list/index.ts +122 -62
  145. package/src/components/image/index.android.ts +58 -7
  146. package/src/components/image/index.ios.ts +58 -7
  147. package/src/components/image/shared.ts +92 -21
  148. package/src/components/image-background.ts +29 -9
  149. package/src/components/input-accessory-view/index.ts +67 -12
  150. package/src/components/keyboard-avoiding-view/index.ts +61 -15
  151. package/src/components/modal/index.ts +72 -33
  152. package/src/components/pressable/index.ts +117 -28
  153. package/src/components/refresh-control/index.ts +74 -18
  154. package/src/components/safe-area-view/index.ts +64 -10
  155. package/src/components/scroll-view/index.android.ts +62 -47
  156. package/src/components/scroll-view/index.ios.ts +19 -17
  157. package/src/components/scroll-view/projection.ts +363 -64
  158. package/src/components/scroll-view/shared.ts +312 -90
  159. package/src/components/scroll-view/sticky-header.ts +36 -24
  160. package/src/components/section-list/index.ts +86 -53
  161. package/src/components/switch/index.android.ts +60 -8
  162. package/src/components/switch/index.ios.ts +60 -8
  163. package/src/components/switch/shared.ts +93 -6
  164. package/src/components/text-input.ts +95 -13
  165. package/src/components/touchable/index.ts +348 -64
  166. package/src/components/touchable-native-feedback/index.ts +94 -31
  167. package/src/components/virtualized-list/directives.ts +19 -5
  168. package/src/components/virtualized-list/index.ts +380 -85
  169. package/src/components/virtualized-section-list/directives.ts +6 -3
  170. package/src/components/virtualized-section-list/index.ts +146 -33
  171. package/src/components.ts +9 -1
  172. package/src/create-portal/index.ts +31 -31
  173. package/src/create-tunnel/index.ts +16 -17
  174. package/src/descriptor-to-angular/index.ts +29 -8
  175. package/src/diagnostics.ts +138 -0
  176. package/src/host-instance/index.ts +9 -3
  177. package/src/index.ts +61 -3
  178. package/src/modules/animated/animated-leaf-binder.ts +28 -77
  179. package/src/modules/animated/create-animated-component.ts +115 -47
  180. package/src/modules/app-registry/index.ts +9 -9
  181. package/src/modules/status-bar/index.ts +13 -4
  182. package/src/primitives/index.ts +47 -2
  183. package/src/primitives/shared.ts +170 -10
  184. package/src/render/index.ts +77 -39
  185. package/src/renderer/index.ts +76 -14
  186. package/src/services/color-scheme.service.ts +3 -1
  187. package/src/services/window-dimensions.service.ts +11 -4
  188. package/build/angular/modules/animated/animated-leaf-binder/index.d.ts +0 -14
  189. package/build/angular/modules/animated/animated-leaf-binder/index.js +0 -91
  190. package/build/angular/modules/animated/animated-leaf-binder/index.js.map +0 -1
  191. package/src/modules/animated/animated-leaf-binder/index.ts +0 -101
@@ -1,9 +1,34 @@
1
- import { AnimatedProps, dlog, isAnchor, reduceProps, routeProp, whenCommitted, createElement, appendChild, insertBefore, removeChild, } from '@symbiote-native/engine';
1
+ import { AnimatedProps, dlog, isDebug, isAnchor, reduceProps, routeProp, whenCommitted, createElement, appendChild, insertBefore, removeChild, } from '@symbiote-native/engine';
2
+ import { countAngular } from '../../diagnostics';
2
3
  import { createInitialStickyState, readLayoutNumber, reduceSticky, STICKY_HEADER_Z_INDEX, } from '@symbiote-native/components';
3
4
  import { descriptorFor } from '@symbiote-native/components';
4
5
  import { Platform } from '@symbiote-native/engine';
5
6
  const contentProjection = new WeakMap();
6
- const projectedWrappers = new WeakMap();
7
+ // Which controller owns a projected child. Keyed by EVERY projected child, not only the wrapped
8
+ // ones: sticky indices are positional, so a child removed behind the controller's back leaves a dead
9
+ // record that inflates every later child's paint index (see removeScrollViewProjectedChild). A
10
+ // windowed list recycles cells continuously, so that drift grows with scroll distance.
11
+ const projectedOwners = new WeakMap();
12
+ // Controllers with a coalesced sticky reconcile owed, drained once per change-detection pass by
13
+ // flushScrollViewProjections (see ScrollViewProjectionController.scheduleReconcile for why the
14
+ // flush must be synchronous rather than a microtask). A strong Set is correct here: an entry lives
15
+ // only from the mutation that queued it to the end of that same pass.
16
+ const pendingProjections = new Set();
17
+ /**
18
+ * Run every sticky reconcile owed by this change-detection pass. Wired to the renderer factory's
19
+ * `end()`, which Angular calls at the end of `ApplicationRef.tick` — after both channels that feed
20
+ * a projection controller have written (children through the renderer, `stickyHeaderIndices` through
21
+ * an `@Input`), and before the surface's microtask-coalesced commit runs.
22
+ */
23
+ export function flushScrollViewProjections() {
24
+ if (pendingProjections.size === 0)
25
+ return;
26
+ // Snapshot: a reconcile can wrap a record, and wrapping is itself a projected mutation.
27
+ const owed = [...pendingProjections];
28
+ pendingProjections.clear();
29
+ for (const controller of owed)
30
+ controller.flushReconcile();
31
+ }
7
32
  function createViewNode() {
8
33
  const descriptor = descriptorFor('symbiote-view');
9
34
  return createElement(descriptor.component, descriptor.isText);
@@ -12,7 +37,8 @@ function directNode(record) {
12
37
  return record.wrapper ?? record.child;
13
38
  }
14
39
  function isProjectedRefreshControl(node) {
15
- if (node.component === 'PullToRefreshView' || node.component === 'AndroidSwipeRefreshLayout') {
40
+ if (node.component === 'PullToRefreshView' ||
41
+ node.component === 'AndroidSwipeRefreshLayout') {
16
42
  return true;
17
43
  }
18
44
  // Angular public <RefreshControl> is an anchor host whose real native refresh node lives inside
@@ -26,6 +52,8 @@ function isProjectedRefreshControl(node) {
26
52
  // delay, rebuild ranges, cross-talk record) live there; this runner only EXECUTES the effects on the
27
53
  // engine node (build interpolation + wire listener, hold the debounce timer, re-apply the node props).
28
54
  // Because it owns the child index, it consumes the reducer's record-header-y effect for cross-talk.
55
+ // Diagnostic-only: a process-wide counter so each controller's log lines are attributable.
56
+ let projectionControllerSeq = 0;
29
57
  class StickyProjectionWrapper {
30
58
  controller;
31
59
  childIndex;
@@ -37,14 +65,19 @@ class StickyProjectionWrapper {
37
65
  cancelBind;
38
66
  listenerId;
39
67
  debounceTimer;
40
- constructor(controller, childIndex, node) {
68
+ constructor(controller,
69
+ // NOT readonly: a window step renumbers every paint index below it without changing which child
70
+ // this header is. See setChildIndex.
71
+ childIndex, node) {
41
72
  this.controller = controller;
42
73
  this.childIndex = childIndex;
43
74
  this.node = node;
44
- this.animatedTranslateY = this.controller.config.scrollAnimatedValue.interpolate({
45
- inputRange: [-1, 0],
46
- outputRange: [0, 0],
47
- });
75
+ this.animatedTranslateY =
76
+ this.controller.config.scrollAnimatedValue.interpolate({
77
+ inputRange: [-1, 0],
78
+ outputRange: [0, 0],
79
+ });
80
+ dlog(`STICKY[wrap] created index=${childIndex} scrollValueIsNative=${this.controller.config.scrollAnimatedValue.__isNative()}`);
48
81
  this.dispatch({ kind: 'inputs-changed' });
49
82
  }
50
83
  destroy() {
@@ -68,6 +101,24 @@ class StickyProjectionWrapper {
68
101
  rebuild() {
69
102
  this.dispatch({ kind: 'inputs-changed' });
70
103
  }
104
+ // A window step renumbers every paint index below it while the header itself is unchanged: same
105
+ // child, same measured layout, new position among the projected children. Recreating the wrapper
106
+ // for that throws away `measured`/`layoutY` so the header re-measures from scratch, and costs a
107
+ // native round trip per step (restoreDefaultValues + dropAnimatedNode out, a fresh interpolation +
108
+ // AnimatedProps in). Feed the new index to the SAME state machine and let the reducer's range
109
+ // guard decide whether anything must be rebuilt.
110
+ //
111
+ // Identity is the CHILD - it owns the record, the record owns this wrapper - never the position.
112
+ // Angular CDK's virtual scroll makes the same call: on a window move `_updateContext` writes
113
+ // `view.context.index = renderedRange.start + i` into the EXISTING view rather than recreating it,
114
+ // and its trackBy is offset by `renderedRange.start` so identity stays absolute
115
+ // (`cdk/scrolling/virtual-for-of.ts`).
116
+ setChildIndex(next) {
117
+ if (this.childIndex === next)
118
+ return;
119
+ this.childIndex = next;
120
+ this.dispatch({ kind: 'inputs-changed' });
121
+ }
71
122
  inputs() {
72
123
  return {
73
124
  os: Platform.OS,
@@ -84,7 +135,8 @@ class StickyProjectionWrapper {
84
135
  for (const effect of effects) {
85
136
  switch (effect.kind) {
86
137
  case 'rebuild-interpolation': {
87
- if (this.interpolation !== undefined && this.listenerId !== undefined) {
138
+ if (this.interpolation !== undefined &&
139
+ this.listenerId !== undefined) {
88
140
  this.interpolation.removeListener(this.listenerId);
89
141
  this.listenerId = undefined;
90
142
  }
@@ -96,7 +148,7 @@ class StickyProjectionWrapper {
96
148
  this.interpolation = next;
97
149
  this.animatedTranslateY = next;
98
150
  this.applyProps();
99
- dlog(`Angular ScrollView projection sticky index=${this.childIndex} measured=${this.state.measured} y=${this.state.layoutY}`);
151
+ dlog(`STICKY[wrap] rebuilt index=${this.childIndex} measured=${this.state.measured} y=${this.state.layoutY}`);
100
152
  break;
101
153
  }
102
154
  case 'schedule-debounce':
@@ -119,6 +171,7 @@ class StickyProjectionWrapper {
119
171
  onLayout = (event) => {
120
172
  const y = readLayoutNumber(event, 'y');
121
173
  const height = readLayoutNumber(event, 'height');
174
+ dlog(`STICKY[wrap] index=${this.childIndex} onLayout y=${y} height=${height}`);
122
175
  // Keep the previous value when a field is absent (RN sets state only on a defined read).
123
176
  this.dispatch({
124
177
  kind: 'layout',
@@ -126,7 +179,12 @@ class StickyProjectionWrapper {
126
179
  height: height ?? this.state.layoutHeight,
127
180
  });
128
181
  };
129
- animatedValueListener = ({ value }) => {
182
+ // The ONLY thing that drives the committed pin on this path: applyProps has no __makeNative(),
183
+ // so the wrapper is JS-driven end to end. If the scroll value has been made native up front the
184
+ // cascade to child listeners stops (AnimatedWithChildren.__callListeners skips children once
185
+ // isNative) and this never fires - the header then renders in place and never moves.
186
+ animatedValueListener = ({ value, }) => {
187
+ dlog(() => `STICKY[wrap] index=${this.childIndex} animated-tick value=${String(value)}`);
130
188
  if (typeof value === 'number')
131
189
  this.dispatch({ kind: 'animated-tick', value });
132
190
  };
@@ -137,7 +195,10 @@ class StickyProjectionWrapper {
137
195
  };
138
196
  const passthrough = this.state.translateY === null
139
197
  ? undefined
140
- : { transform: [{ translateY: this.state.translateY }], zIndex: STICKY_HEADER_Z_INDEX };
198
+ : {
199
+ transform: [{ translateY: this.state.translateY }],
200
+ zIndex: STICKY_HEADER_Z_INDEX,
201
+ };
141
202
  return {
142
203
  style: passthrough === undefined ? style : [style, passthrough],
143
204
  onLayout: this.onLayout,
@@ -147,15 +208,32 @@ class StickyProjectionWrapper {
147
208
  applyProps() {
148
209
  const props = this.props();
149
210
  const reduced = reduceProps(props);
211
+ // Thunk: applyProps is on the scroll-driven path (every animated-tick while the pin is
212
+ // JS-driven), and JSON.stringify of a reduced transform is not free.
213
+ dlog(() => `STICKY[wrap] index=${this.childIndex} applyProps translateY=${String(this.state.translateY)} ` +
214
+ `measured=${this.state.measured} layoutY=${this.state.layoutY} ` +
215
+ `scrollValueIsNative=${this.controller.config.scrollAnimatedValue.__isNative()} ` +
216
+ `reducedTransform=${JSON.stringify(reduced.transform ?? reduced.style)}`);
150
217
  for (const [key, value] of Object.entries(reduced))
151
218
  routeProp(this.node, key, value);
152
219
  const next = new AnimatedProps(props);
153
220
  next.__attach();
221
+ // No explicit __makeNative() here on purpose: __attach joins the leaf to the interpolation,
222
+ // which sits under the shared scroll value, and AnimatedWithChildren.__addChild promotes a
223
+ // child joining an ALREADY-native parent (graph.ts). So the pin is native exactly when the
224
+ // scroll value is - logged below, because "is this actually on the UI thread" is otherwise
225
+ // invisible until you read three files.
226
+ dlog(() => `STICKY[wrap] index=${this.childIndex} leaf attached isNative=${next.__isNative()} ` +
227
+ `interpolationIsNative=${this.animatedTranslateY.__isNative()} ` +
228
+ `scrollValueIsNative=${this.controller.config.scrollAnimatedValue.__isNative()}`);
154
229
  if (this.animatedProps !== undefined)
155
230
  this.animatedProps.__detach();
156
231
  this.animatedProps = next;
157
232
  this.cancelBind?.();
158
- this.cancelBind = whenCommitted(this.node, () => next.setNativeView(this.node));
233
+ this.cancelBind = whenCommitted(this.node, () => {
234
+ next.setNativeView(this.node);
235
+ dlog(`STICKY[wrap] index=${this.childIndex} setNativeView isNative=${next.__isNative()}`);
236
+ });
159
237
  }
160
238
  }
161
239
  export class ScrollViewProjectionController {
@@ -163,12 +241,58 @@ export class ScrollViewProjectionController {
163
241
  contentNode;
164
242
  records = [];
165
243
  headerLayoutYs = new Map();
244
+ // Diagnostic-only: one ScrollView can host several projection controllers over its lifetime,
245
+ // and an app has several ScrollViews at once. Without an id every log line below is
246
+ // indistinguishable between instances, which is what made a "logs never stop" report
247
+ // impossible to read as either a real loop or two lists warming up in turn.
248
+ instanceId = ++projectionControllerSeq;
249
+ reconcileSeq = 0;
250
+ isReconcilePending = false;
251
+ shouldNotifyAll = false;
166
252
  constructor(config) {
167
253
  this.config = config;
168
254
  }
169
255
  update(config) {
170
256
  this.config = config;
171
- this.reconcileStickyRecords();
257
+ // The one caller that must notify every wrapper: scrollViewHeight / invertStickyHeaders live in
258
+ // this config and reach the wrappers through nothing else.
259
+ this.scheduleReconcile(true);
260
+ }
261
+ /**
262
+ * Coalesce every reconcile request of one change-detection pass into a SINGLE walk.
263
+ *
264
+ * Cost is half the reason: the walk is O(records), so running it per projected mutation makes
265
+ * mounting M children O(M^2) - 801 children on the benchmark screen's PATH A. Correctness is the
266
+ * worse half. A windowed list feeds the controller through TWO channels that land at different
267
+ * moments in the same pass: children arrive through the renderer (insert/remove), while
268
+ * `stickyHeaderIndices` arrive as an ordinary `@Input` via `update()` from ngOnChanges. Reconciling
269
+ * on each mutation therefore guarantees at least one walk matching the NEW children against the
270
+ * OLD indices - and those indices are positions in the rendered child array
271
+ * (`stickyChildPositions`), which shift by 1-3 the moment VirtualizedList grows a leading spacer or
272
+ * a forced sticky cell. Every mismatch re-labels a header and re-parents engine nodes for nothing.
273
+ *
274
+ * The flush point is `RendererFactory2.end()`: the end of the pass, still SYNCHRONOUS. It must not
275
+ * be a microtask - engine mutations only `markDirty`, the commit is microtask-coalesced by the
276
+ * surface, and a reconcile queued after that commit mutates a tree nobody commits again. Headless
277
+ * the sticky wrapper then never reaches Fabric at all (six tests caught exactly this); on device it
278
+ * lands a frame late or not at all. `end()` runs inside `ApplicationRef.tick`, so it precedes every
279
+ * microtask queued during the pass.
280
+ */
281
+ scheduleReconcile(notifyAll = false) {
282
+ countAngular('projectionSchedules');
283
+ this.shouldNotifyAll ||= notifyAll;
284
+ if (this.isReconcilePending)
285
+ return;
286
+ this.isReconcilePending = true;
287
+ pendingProjections.add(this);
288
+ }
289
+ // Called by the renderer factory's end(). Public only for that seam.
290
+ flushReconcile() {
291
+ countAngular('projectionFlushes');
292
+ this.isReconcilePending = false;
293
+ const notifyAll = this.shouldNotifyAll;
294
+ this.shouldNotifyAll = false;
295
+ this.reconcileStickyRecords(notifyAll);
172
296
  }
173
297
  bindContentNode(node) {
174
298
  dlog(`Angular ScrollView projection bindContentNode node=${node.component} preExistingChildren=${node.children.length} recordsBefore=${this.records.length}`);
@@ -176,10 +300,16 @@ export class ScrollViewProjectionController {
176
300
  contentProjection.set(node, this);
177
301
  if (this.records.length === 0 && node.children.length > 0) {
178
302
  for (const child of [...node.children]) {
179
- this.records.push({ child, wrapper: undefined, sticky: undefined, stickyIndex: undefined });
303
+ this.records.push({
304
+ child,
305
+ wrapper: undefined,
306
+ sticky: undefined,
307
+ stickyIndex: undefined,
308
+ });
309
+ projectedOwners.set(child, this);
180
310
  }
181
311
  }
182
- this.reconcileStickyRecords();
312
+ this.scheduleReconcile();
183
313
  }
184
314
  appendProjectedChild(parent, child, insert) {
185
315
  dlog(`Angular ScrollView projection appendProjectedChild parent=${parent.component} child=${child.component} recordsBefore=${this.records.length}`);
@@ -193,8 +323,9 @@ export class ScrollViewProjectionController {
193
323
  stickyIndex: undefined,
194
324
  };
195
325
  this.records.push(record);
326
+ projectedOwners.set(child, this);
196
327
  this.insertRecord(parent, record, undefined, insert);
197
- this.reconcileStickyRecords();
328
+ this.scheduleReconcile();
198
329
  }
199
330
  insertProjectedChild(parent, child, beforeChild, insert) {
200
331
  dlog(`Angular ScrollView projection insertProjectedChild parent=${parent.component} child=${child.component} before=${beforeChild ? `${beforeChild.component}` : 'null'} recordsBefore=${this.records.length}`);
@@ -210,56 +341,104 @@ export class ScrollViewProjectionController {
210
341
  sticky: undefined,
211
342
  stickyIndex: undefined,
212
343
  };
213
- const index = beforeRecord === undefined ? this.records.length : this.records.indexOf(beforeRecord);
344
+ // An insert-BEFORE whose anchor is not a record degrades into an append, here and again in
345
+ // insertRecord below - silently, which is how an ordering fault stays invisible until the screen
346
+ // is already wrong. A list that only ever appends (the benchmark screen's PATH A) never hits it;
347
+ // a virtualized list recycling cells into the middle does.
348
+ if (beforeChild !== null && beforeRecord === undefined) {
349
+ dlog(() => `STICKY[proj#${this.instanceId}] ORDER insert-before anchor NOT a record ` +
350
+ `child=${child.component} before=${beforeChild.component} -> APPENDED to end`);
351
+ }
352
+ const index = beforeRecord === undefined
353
+ ? this.records.length
354
+ : this.records.indexOf(beforeRecord);
214
355
  this.records.splice(index, 0, record);
356
+ projectedOwners.set(child, this);
215
357
  this.insertRecord(parent, record, beforeRecord, insert);
216
- this.reconcileStickyRecords();
358
+ this.scheduleReconcile();
217
359
  }
218
360
  removeProjectedChild(child, remove) {
219
361
  const record = this.records.find(entry => entry.child === child || entry.wrapper === child);
220
362
  if (record === undefined || this.contentNode === undefined)
221
363
  return false;
222
364
  record.sticky?.destroy();
223
- projectedWrappers.delete(record.child);
365
+ projectedOwners.delete(record.child);
224
366
  const direct = directNode(record);
225
- if (direct.parent === this.contentNode)
226
- remove(this.contentNode, direct);
367
+ // The wrapper, when there is one, is the node actually parented to the content — detach
368
+ // whichever of the two carries the link, so a wrapped child never leaves its wrapper behind.
369
+ if (direct.parent !== undefined)
370
+ remove(direct.parent, direct);
227
371
  this.records.splice(this.records.indexOf(record), 1);
228
- this.reconcileStickyRecords();
372
+ this.scheduleReconcile();
229
373
  return true;
230
374
  }
231
375
  nextStickyHeaderY(index) {
232
376
  const stickyIndices = this.config.stickyHeaderIndices ?? [];
233
377
  const next = stickyIndices.find(entry => entry > index);
234
- return next === undefined ? undefined : this.headerLayoutYs.get(next);
378
+ const y = next === undefined ? undefined : this.headerLayoutYs.get(next);
379
+ dlog(`STICKY[proj] nextStickyHeaderY(index=${index}) next=${next} y=${y}`);
380
+ return y;
235
381
  }
236
382
  recordHeaderLayoutY(index, y) {
383
+ dlog(`STICKY[proj] recordHeaderLayoutY index=${index} y=${y}`);
237
384
  if (this.headerLayoutYs.get(index) === y)
238
385
  return;
239
386
  this.headerLayoutYs.set(index, y);
240
- for (const record of this.records)
241
- record.sticky?.rebuild();
387
+ // EXACTLY ONE wrapper reads this value. `nextStickyHeaderY(i)` returns the first sticky index
388
+ // greater than i, so `index` is the "next header" of the closest sticky index BELOW it and of
389
+ // no one else. Broadcasting to all of them instead cost O(N) per layout and O(N^2) to settle a
390
+ // screen - 200 headers answered "ranges unchanged, skipped rebuild" 199 times per layout event,
391
+ // 40 000 dispatches to lay out the benchmark screen's PATH A.
392
+ const stickyIndices = this.config.stickyHeaderIndices ?? [];
393
+ let previous;
394
+ // Same ascending-order assumption nextStickyHeaderY already makes.
395
+ for (const entry of stickyIndices) {
396
+ if (entry >= index)
397
+ break;
398
+ previous = entry;
399
+ }
400
+ if (previous === undefined)
401
+ return;
402
+ this.records
403
+ .find(record => record.stickyIndex === previous)
404
+ ?.sticky?.rebuild();
242
405
  }
243
406
  insertRecord(parent, record, beforeRecord, insert) {
244
407
  const before = beforeRecord === undefined ? undefined : directNode(beforeRecord);
245
- dlog(`Angular ScrollView projection insertRecord physicalParent=${parent.component} child=${record.child.component} before=${before ? before.component : 'undefined(append)'} parentIsContentNode=${parent === this.contentNode}`);
408
+ dlog(`STICKY[proj#${this.instanceId}] insertRecord child=${record.child.component} ` +
409
+ `before=${before ? before.component : 'append'} parentIsContentNode=${parent === this.contentNode}`);
246
410
  if (before === undefined)
247
411
  insert(parent, record.child);
248
412
  else
249
413
  insert(parent, record.child, before);
250
414
  }
251
- reconcileStickyRecords() {
415
+ // notifyAll re-dispatches every sticky wrapper's inputs. Only a CONFIG change needs that
416
+ // (scrollViewHeight / invertStickyHeaders arrive through update() and reach the wrappers nowhere
417
+ // else). An INSERT must not: this walk runs once per projected child, so notifying N wrappers on
418
+ // each of M inserts is M x N - 801 x 200 = 160 200 dispatches to mount the benchmark screen's
419
+ // PATH A, versus 70 x 3 = 210 on the canary, which is why only the big screen dies. The two input
420
+ // changes an insert can actually cause are covered without a broadcast: a shifted childIndex by
421
+ // the stickyIndex branch below, and a moved neighbour by recordHeaderLayoutY.
422
+ reconcileStickyRecords(notifyAll = false) {
252
423
  if (this.contentNode === undefined)
253
424
  return;
254
- dlog(`Angular ScrollView projection reconcile contentNode=${this.contentNode.component} records=${this.records.length} contentNodeActualChildren=${this.contentNode.children.length}`);
425
+ const seq = ++this.reconcileSeq;
426
+ dlog(() => `STICKY[proj#${this.instanceId}] reconcile#${seq} records=${this.records.length} ` +
427
+ `children=${this.contentNode?.children.length} sticky=${JSON.stringify(this.config.stickyHeaderIndices ?? [])}`);
255
428
  const stickyIndices = new Set(this.config.stickyHeaderIndices ?? []);
256
- if (this.config.customStickyHeaderComponent !== undefined && stickyIndices.size > 0) {
257
- dlog('Angular ScrollView projection uses built-in sticky wrapper; custom StickyHeaderComponent is explicit-composition only');
429
+ if (this.config.customStickyHeaderComponent !== undefined &&
430
+ stickyIndices.size > 0) {
431
+ dlog('STICKY[proj] uses built-in sticky wrapper; custom StickyHeaderComponent is explicit-composition only');
258
432
  }
259
433
  let paintIndex = 0;
260
434
  for (const record of [...this.records]) {
261
- if (this.config.excludeRefreshControl && isProjectedRefreshControl(record.child)) {
262
- this.removeProjectedChild(record.child, (parent, child) => removeChild(parent, child));
435
+ if (this.config.excludeRefreshControl &&
436
+ isProjectedRefreshControl(record.child)) {
437
+ // Removed INLINE, not through removeProjectedChild: that method ends with its own
438
+ // reconcileStickyRecords(), so calling it from inside this walk re-enters the walk while
439
+ // this.records is being spliced under it - one refresh control could then drive an
440
+ // unbounded recursion. Same removal, without the re-entry.
441
+ this.dropRecord(record);
263
442
  continue;
264
443
  }
265
444
  const countsAsChild = !isAnchor(record.child) && !isProjectedRefreshControl(record.child);
@@ -267,18 +446,50 @@ export class ScrollViewProjectionController {
267
446
  if (countsAsChild)
268
447
  paintIndex += 1;
269
448
  const shouldWrap = countsAsChild && stickyIndices.has(childIndex);
449
+ // Deliberately NOT logged per child per walk: reconcile runs on every projected insert, so
450
+ // that shape is O(children x inserts) and buries the few lines that carry information. Only
451
+ // a state TRANSITION is logged, below.
270
452
  if (shouldWrap && record.wrapper === undefined)
271
453
  this.wrapRecord(record, childIndex);
272
454
  else if (!shouldWrap && record.wrapper !== undefined)
273
455
  this.unwrapRecord(record);
274
456
  else if (shouldWrap && record.stickyIndex !== childIndex) {
275
- record.sticky?.destroy();
276
- record.sticky = new StickyProjectionWrapper(this, childIndex, directNode(record));
457
+ countAngular('stickyWrapperReuses');
458
+ record.sticky?.setChildIndex(childIndex);
277
459
  record.stickyIndex = childIndex;
278
460
  }
279
- else if (shouldWrap)
461
+ else if (shouldWrap && notifyAll)
280
462
  record.sticky?.rebuild();
281
463
  }
464
+ // `paintIndex` above is counted off RECORDS, but the screen paints `contentNode.children`. The
465
+ // reconcile line at the top prints only the two COUNTS, which stay equal under any permutation
466
+ // - so it can never see this. Once the orders diverge, every sticky index addresses the wrong
467
+ // child and each wrap moves another node, so the fault compounds with scroll distance instead
468
+ // of correcting itself. Guarded by isDebug because it walks both lists.
469
+ if (!isDebug())
470
+ return;
471
+ const expected = this.records.map(record => directNode(record));
472
+ const painted = this.contentNode?.children ?? [];
473
+ const at = expected.findIndex((node, index) => node !== painted[index]);
474
+ if (at >= 0 || expected.length !== painted.length) {
475
+ dlog(`STICKY[proj#${this.instanceId}] ORDER DIVERGED at ${at} ` +
476
+ `records=${expected.length} painted=${painted.length} ` +
477
+ `expected=${expected[at]?.component ?? 'none'} painted=${painted[at]?.component ?? 'none'}`);
478
+ }
479
+ }
480
+ // The removal half of removeProjectedChild, without its trailing reconcile - safe to call from
481
+ // inside the reconcile walk itself.
482
+ dropRecord(record) {
483
+ if (this.contentNode === undefined)
484
+ return;
485
+ record.sticky?.destroy();
486
+ projectedOwners.delete(record.child);
487
+ const direct = directNode(record);
488
+ if (direct.parent === this.contentNode)
489
+ removeChild(this.contentNode, direct);
490
+ const index = this.records.indexOf(record);
491
+ if (index !== -1)
492
+ this.records.splice(index, 1);
282
493
  }
283
494
  // Auto projection runs after Angular has already created projected child host nodes. At this
284
495
  // renderer boundary we can AOT-safely rearrange engine nodes, but we cannot instantiate an
@@ -291,24 +502,46 @@ export class ScrollViewProjectionController {
291
502
  if (this.contentNode === undefined)
292
503
  return;
293
504
  const wrapper = createViewNode();
294
- const currentParent = record.child.parent;
295
- const currentIndex = currentParent?.children.indexOf(record.child) ?? -1;
296
- if (currentParent === this.contentNode && currentIndex >= 0) {
297
- insertBefore(this.contentNode, wrapper, record.child);
298
- removeChild(this.contentNode, record.child);
299
- }
300
- else {
505
+ // The slot comes from `records`, the list that always knows where this record sits, never from
506
+ // the child's own current parent. Read off the child, a child not sitting DIRECTLY in the content
507
+ // has no slot to give up and the wrapper lands at the END - the wrapped cell jumps to the bottom
508
+ // of the scroll content, a silent reordering that compounds with scroll distance instead of
509
+ // correcting itself, and a windowed list reaches that state routinely. Angular CDK carries the
510
+ // same warning at its own insert site: insert AT the index, never insert-then-move, because an
511
+ // extra anchor node in between throws the move off (`cdk/scrolling/virtual-for-of.ts`,
512
+ // `_getEmbeddedViewArgs`) - and this file's tree is full of anchors.
513
+ //
514
+ // Order is load-bearing: place the wrapper at the slot FIRST, then move the child into it. The
515
+ // engine's appendChild detaches the child from its old parent, so the wrapper slides into the
516
+ // position the child vacates and no explicit removeChild is needed.
517
+ const after = this.nextDirectAfter(record);
518
+ if (after === undefined)
301
519
  appendChild(this.contentNode, wrapper);
302
- }
520
+ else
521
+ insertBefore(this.contentNode, wrapper, after);
303
522
  appendChild(wrapper, record.child);
304
523
  record.wrapper = wrapper;
524
+ countAngular('stickyWrapperCreates');
305
525
  record.sticky = new StickyProjectionWrapper(this, childIndex, wrapper);
306
526
  record.stickyIndex = childIndex;
307
- projectedWrappers.set(record.child, record);
527
+ dlog(`STICKY[proj#${this.instanceId}] WRAP child=${record.child.component} paintIndex=${childIndex}`);
528
+ }
529
+ // The painted node of the first record AFTER `record` that is actually parented to the content —
530
+ // i.e. the anchor the wrapper must be inserted before. Records whose node has not been inserted
531
+ // yet are skipped rather than treated as a slot: a record exists from the moment the renderer
532
+ // reports the child, which can precede its placement.
533
+ nextDirectAfter(record) {
534
+ for (let index = this.records.indexOf(record) + 1; index < this.records.length; index += 1) {
535
+ const node = directNode(this.records[index]);
536
+ if (node.parent === this.contentNode)
537
+ return node;
538
+ }
539
+ return undefined;
308
540
  }
309
541
  unwrapRecord(record) {
310
542
  if (this.contentNode === undefined || record.wrapper === undefined)
311
543
  return;
544
+ dlog(`STICKY[proj#${this.instanceId}] UNWRAP child=${record.child.component}`);
312
545
  record.sticky?.destroy();
313
546
  record.sticky = undefined;
314
547
  record.stickyIndex = undefined;
@@ -316,19 +549,12 @@ export class ScrollViewProjectionController {
316
549
  insertBefore(this.contentNode, record.child, wrapper);
317
550
  removeChild(this.contentNode, wrapper);
318
551
  record.wrapper = undefined;
319
- projectedWrappers.delete(record.child);
320
552
  }
321
553
  }
322
554
  export function getScrollViewProjection(node) {
323
555
  return contentProjection.get(node);
324
556
  }
325
557
  export function removeScrollViewProjectedChild(child, remove) {
326
- const record = projectedWrappers.get(child);
327
- if (record === undefined)
328
- return false;
329
- const controller = record.wrapper?.parent
330
- ? contentProjection.get(record.wrapper.parent)
331
- : undefined;
332
- return controller?.removeProjectedChild(child, remove) ?? false;
558
+ return (projectedOwners.get(child)?.removeProjectedChild(child, remove) ?? false);
333
559
  }
334
560
  //# sourceMappingURL=projection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../../src/components/scroll-view/projection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"projection.js","sourceRoot":"","sources":["../../../../src/components/scroll-view/projection.ts"],"names":[],"mappings":"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"}