@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.
- package/README.md +3 -3
- package/build/angular/bootstrap.js +1 -1
- package/build/angular/bootstrap.js.map +1 -1
- package/build/angular/components/activity-indicator/index.android.js +7 -2
- package/build/angular/components/activity-indicator/index.android.js.map +1 -1
- package/build/angular/components/activity-indicator/index.ios.js +3 -1
- package/build/angular/components/activity-indicator/index.ios.js.map +1 -1
- package/build/angular/components/activity-indicator/shared.d.ts +1 -1
- package/build/angular/components/activity-indicator/shared.js +1 -1
- package/build/angular/components/activity-indicator/shared.js.map +1 -1
- package/build/angular/components/button.js +13 -5
- package/build/angular/components/button.js.map +1 -1
- package/build/angular/components/flat-list/index.d.ts +1 -1
- package/build/angular/components/flat-list/index.js +47 -14
- package/build/angular/components/flat-list/index.js.map +1 -1
- package/build/angular/components/image/index.android.js +4 -2
- package/build/angular/components/image/index.android.js.map +1 -1
- package/build/angular/components/image/index.ios.js +4 -2
- package/build/angular/components/image/index.ios.js.map +1 -1
- package/build/angular/components/image/shared.js +18 -6
- package/build/angular/components/image/shared.js.map +1 -1
- package/build/angular/components/image-background.js +22 -8
- package/build/angular/components/image-background.js.map +1 -1
- package/build/angular/components/input-accessory-view/index.js +7 -2
- package/build/angular/components/input-accessory-view/index.js.map +1 -1
- package/build/angular/components/keyboard-avoiding-view/index.d.ts +1 -0
- package/build/angular/components/keyboard-avoiding-view/index.js +39 -9
- package/build/angular/components/keyboard-avoiding-view/index.js.map +1 -1
- package/build/angular/components/modal/index.js +7 -2
- package/build/angular/components/modal/index.js.map +1 -1
- package/build/angular/components/pressable/index.d.ts +1 -1
- package/build/angular/components/pressable/index.js +6 -2
- package/build/angular/components/pressable/index.js.map +1 -1
- package/build/angular/components/refresh-control/index.js +3 -1
- package/build/angular/components/refresh-control/index.js.map +1 -1
- package/build/angular/components/safe-area-view/index.js +3 -1
- package/build/angular/components/safe-area-view/index.js.map +1 -1
- package/build/angular/components/scroll-view/index.android.js +44 -14
- package/build/angular/components/scroll-view/index.android.js.map +1 -1
- package/build/angular/components/scroll-view/index.ios.js +13 -5
- package/build/angular/components/scroll-view/index.ios.js.map +1 -1
- package/build/angular/components/scroll-view/projection.d.ts +32 -0
- package/build/angular/components/scroll-view/projection.js +212 -47
- package/build/angular/components/scroll-view/projection.js.map +1 -1
- package/build/angular/components/scroll-view/shared.js +28 -7
- package/build/angular/components/scroll-view/shared.js.map +1 -1
- package/build/angular/components/scroll-view/sticky-header.js +7 -3
- package/build/angular/components/scroll-view/sticky-header.js.map +1 -1
- package/build/angular/components/section-list/index.d.ts +6 -1
- package/build/angular/components/section-list/index.js +63 -18
- package/build/angular/components/section-list/index.js.map +1 -1
- package/build/angular/components/switch/index.android.js +17 -3
- package/build/angular/components/switch/index.android.js.map +1 -1
- package/build/angular/components/switch/index.ios.js +17 -3
- package/build/angular/components/switch/index.ios.js.map +1 -1
- package/build/angular/components/switch/shared.d.ts +1 -1
- package/build/angular/components/switch/shared.js +5 -2
- package/build/angular/components/switch/shared.js.map +1 -1
- package/build/angular/components/text-input.d.ts +1 -1
- package/build/angular/components/text-input.js +25 -5
- package/build/angular/components/text-input.js.map +1 -1
- package/build/angular/components/touchable/index.d.ts +29 -7
- package/build/angular/components/touchable/index.js +246 -69
- package/build/angular/components/touchable/index.js.map +1 -1
- package/build/angular/components/touchable-native-feedback/index.js +2 -2
- package/build/angular/components/touchable-native-feedback/index.js.map +1 -1
- package/build/angular/components/virtualized-list/directives.js +4 -0
- package/build/angular/components/virtualized-list/directives.js.map +1 -1
- package/build/angular/components/virtualized-list/index.d.ts +5 -2
- package/build/angular/components/virtualized-list/index.js +197 -60
- package/build/angular/components/virtualized-list/index.js.map +1 -1
- package/build/angular/components/virtualized-section-list/directives.js.map +1 -1
- package/build/angular/components/virtualized-section-list/index.d.ts +18 -1
- package/build/angular/components/virtualized-section-list/index.js +90 -21
- package/build/angular/components/virtualized-section-list/index.js.map +1 -1
- package/build/angular/components.d.ts +1 -1
- package/build/angular/components.js.map +1 -1
- package/build/angular/create-portal/index.js +5 -1
- package/build/angular/create-portal/index.js.map +1 -1
- package/build/angular/create-tunnel/index.js.map +1 -1
- package/build/angular/descriptor-to-angular/index.js +3 -1
- package/build/angular/descriptor-to-angular/index.js.map +1 -1
- package/build/angular/diagnostics.d.ts +33 -0
- package/build/angular/diagnostics.js +82 -0
- package/build/angular/diagnostics.js.map +1 -0
- package/build/angular/host-instance/index.js +1 -1
- package/build/angular/host-instance/index.js.map +1 -1
- package/build/angular/index.d.ts +5 -2
- package/build/angular/index.js +15 -1
- package/build/angular/index.js.map +1 -1
- package/build/angular/modules/animated/create-animated-component.js +27 -9
- package/build/angular/modules/animated/create-animated-component.js.map +1 -1
- package/build/angular/modules/app-registry/index.js.map +1 -1
- package/build/angular/modules/status-bar/index.js +1 -1
- package/build/angular/modules/status-bar/index.js.map +1 -1
- package/build/angular/primitives/index.d.ts +19 -2
- package/build/angular/primitives/index.js +39 -3
- package/build/angular/primitives/index.js.map +1 -1
- package/build/angular/primitives/shared.d.ts +9 -1
- package/build/angular/primitives/shared.js +49 -3
- package/build/angular/primitives/shared.js.map +1 -1
- package/build/angular/render/index.js +48 -5
- package/build/angular/render/index.js.map +1 -1
- package/build/angular/renderer/index.d.ts +1 -0
- package/build/angular/renderer/index.js +37 -2
- package/build/angular/renderer/index.js.map +1 -1
- package/build/angular/services/color-scheme.service.js.map +1 -1
- package/build/angular/services/window-dimensions.service.js +1 -1
- package/build/angular/services/window-dimensions.service.js.map +1 -1
- package/package.json +5 -5
- package/src/bootstrap.ts +4 -1
- package/src/components/activity-indicator/index.android.ts +7 -2
- package/src/components/activity-indicator/index.ios.ts +3 -1
- package/src/components/activity-indicator/shared.ts +32 -13
- package/src/components/button.ts +19 -6
- package/src/components/flat-list/index.ts +91 -29
- package/src/components/image/index.android.ts +9 -2
- package/src/components/image/index.ios.ts +9 -2
- package/src/components/image/shared.ts +58 -19
- package/src/components/image-background.ts +29 -10
- package/src/components/input-accessory-view/index.ts +27 -10
- package/src/components/keyboard-avoiding-view/index.ts +55 -15
- package/src/components/modal/index.ts +22 -8
- package/src/components/pressable/index.ts +51 -21
- package/src/components/refresh-control/index.ts +22 -8
- package/src/components/safe-area-view/index.ts +16 -7
- package/src/components/scroll-view/index.android.ts +31 -9
- package/src/components/scroll-view/index.ios.ts +17 -4
- package/src/components/scroll-view/projection.ts +290 -63
- package/src/components/scroll-view/shared.ts +93 -26
- package/src/components/scroll-view/sticky-header.ts +25 -8
- package/src/components/section-list/index.ts +61 -19
- package/src/components/switch/index.android.ts +14 -3
- package/src/components/switch/index.ios.ts +14 -3
- package/src/components/switch/shared.ts +15 -4
- package/src/components/text-input.ts +45 -13
- package/src/components/touchable/index.ts +296 -72
- package/src/components/touchable-native-feedback/index.ts +32 -10
- package/src/components/virtualized-list/directives.ts +19 -5
- package/src/components/virtualized-list/index.ts +274 -72
- package/src/components/virtualized-section-list/directives.ts +6 -3
- package/src/components/virtualized-section-list/index.ts +146 -34
- package/src/components.ts +4 -1
- package/src/create-portal/index.ts +8 -2
- package/src/create-tunnel/index.ts +3 -1
- package/src/descriptor-to-angular/index.ts +29 -8
- package/src/diagnostics.ts +138 -0
- package/src/host-instance/index.ts +9 -3
- package/src/index.ts +31 -2
- package/src/modules/animated/create-animated-component.ts +44 -15
- package/src/modules/app-registry/index.ts +3 -1
- package/src/modules/status-bar/index.ts +13 -4
- package/src/primitives/index.ts +46 -2
- package/src/primitives/shared.ts +70 -9
- package/src/render/index.ts +56 -6
- package/src/renderer/index.ts +76 -14
- package/src/services/color-scheme.service.ts +3 -1
- package/src/services/window-dimensions.service.ts +11 -4
|
@@ -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
|
-
|
|
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' ||
|
|
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
|
|
@@ -39,14 +65,18 @@ class StickyProjectionWrapper {
|
|
|
39
65
|
cancelBind;
|
|
40
66
|
listenerId;
|
|
41
67
|
debounceTimer;
|
|
42
|
-
constructor(controller,
|
|
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) {
|
|
43
72
|
this.controller = controller;
|
|
44
73
|
this.childIndex = childIndex;
|
|
45
74
|
this.node = node;
|
|
46
|
-
this.animatedTranslateY =
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
75
|
+
this.animatedTranslateY =
|
|
76
|
+
this.controller.config.scrollAnimatedValue.interpolate({
|
|
77
|
+
inputRange: [-1, 0],
|
|
78
|
+
outputRange: [0, 0],
|
|
79
|
+
});
|
|
50
80
|
dlog(`STICKY[wrap] created index=${childIndex} scrollValueIsNative=${this.controller.config.scrollAnimatedValue.__isNative()}`);
|
|
51
81
|
this.dispatch({ kind: 'inputs-changed' });
|
|
52
82
|
}
|
|
@@ -71,6 +101,24 @@ class StickyProjectionWrapper {
|
|
|
71
101
|
rebuild() {
|
|
72
102
|
this.dispatch({ kind: 'inputs-changed' });
|
|
73
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
|
+
}
|
|
74
122
|
inputs() {
|
|
75
123
|
return {
|
|
76
124
|
os: Platform.OS,
|
|
@@ -87,7 +135,8 @@ class StickyProjectionWrapper {
|
|
|
87
135
|
for (const effect of effects) {
|
|
88
136
|
switch (effect.kind) {
|
|
89
137
|
case 'rebuild-interpolation': {
|
|
90
|
-
if (this.interpolation !== undefined &&
|
|
138
|
+
if (this.interpolation !== undefined &&
|
|
139
|
+
this.listenerId !== undefined) {
|
|
91
140
|
this.interpolation.removeListener(this.listenerId);
|
|
92
141
|
this.listenerId = undefined;
|
|
93
142
|
}
|
|
@@ -134,7 +183,7 @@ class StickyProjectionWrapper {
|
|
|
134
183
|
// so the wrapper is JS-driven end to end. If the scroll value has been made native up front the
|
|
135
184
|
// cascade to child listeners stops (AnimatedWithChildren.__callListeners skips children once
|
|
136
185
|
// isNative) and this never fires - the header then renders in place and never moves.
|
|
137
|
-
animatedValueListener = ({ value }) => {
|
|
186
|
+
animatedValueListener = ({ value, }) => {
|
|
138
187
|
dlog(() => `STICKY[wrap] index=${this.childIndex} animated-tick value=${String(value)}`);
|
|
139
188
|
if (typeof value === 'number')
|
|
140
189
|
this.dispatch({ kind: 'animated-tick', value });
|
|
@@ -146,7 +195,10 @@ class StickyProjectionWrapper {
|
|
|
146
195
|
};
|
|
147
196
|
const passthrough = this.state.translateY === null
|
|
148
197
|
? undefined
|
|
149
|
-
: {
|
|
198
|
+
: {
|
|
199
|
+
transform: [{ translateY: this.state.translateY }],
|
|
200
|
+
zIndex: STICKY_HEADER_Z_INDEX,
|
|
201
|
+
};
|
|
150
202
|
return {
|
|
151
203
|
style: passthrough === undefined ? style : [style, passthrough],
|
|
152
204
|
onLayout: this.onLayout,
|
|
@@ -195,12 +247,52 @@ export class ScrollViewProjectionController {
|
|
|
195
247
|
// impossible to read as either a real loop or two lists warming up in turn.
|
|
196
248
|
instanceId = ++projectionControllerSeq;
|
|
197
249
|
reconcileSeq = 0;
|
|
250
|
+
isReconcilePending = false;
|
|
251
|
+
shouldNotifyAll = false;
|
|
198
252
|
constructor(config) {
|
|
199
253
|
this.config = config;
|
|
200
254
|
}
|
|
201
255
|
update(config) {
|
|
202
256
|
this.config = config;
|
|
203
|
-
|
|
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);
|
|
204
296
|
}
|
|
205
297
|
bindContentNode(node) {
|
|
206
298
|
dlog(`Angular ScrollView projection bindContentNode node=${node.component} preExistingChildren=${node.children.length} recordsBefore=${this.records.length}`);
|
|
@@ -208,10 +300,16 @@ export class ScrollViewProjectionController {
|
|
|
208
300
|
contentProjection.set(node, this);
|
|
209
301
|
if (this.records.length === 0 && node.children.length > 0) {
|
|
210
302
|
for (const child of [...node.children]) {
|
|
211
|
-
this.records.push({
|
|
303
|
+
this.records.push({
|
|
304
|
+
child,
|
|
305
|
+
wrapper: undefined,
|
|
306
|
+
sticky: undefined,
|
|
307
|
+
stickyIndex: undefined,
|
|
308
|
+
});
|
|
309
|
+
projectedOwners.set(child, this);
|
|
212
310
|
}
|
|
213
311
|
}
|
|
214
|
-
this.
|
|
312
|
+
this.scheduleReconcile();
|
|
215
313
|
}
|
|
216
314
|
appendProjectedChild(parent, child, insert) {
|
|
217
315
|
dlog(`Angular ScrollView projection appendProjectedChild parent=${parent.component} child=${child.component} recordsBefore=${this.records.length}`);
|
|
@@ -225,8 +323,9 @@ export class ScrollViewProjectionController {
|
|
|
225
323
|
stickyIndex: undefined,
|
|
226
324
|
};
|
|
227
325
|
this.records.push(record);
|
|
326
|
+
projectedOwners.set(child, this);
|
|
228
327
|
this.insertRecord(parent, record, undefined, insert);
|
|
229
|
-
this.
|
|
328
|
+
this.scheduleReconcile();
|
|
230
329
|
}
|
|
231
330
|
insertProjectedChild(parent, child, beforeChild, insert) {
|
|
232
331
|
dlog(`Angular ScrollView projection insertProjectedChild parent=${parent.component} child=${child.component} before=${beforeChild ? `${beforeChild.component}` : 'null'} recordsBefore=${this.records.length}`);
|
|
@@ -242,22 +341,35 @@ export class ScrollViewProjectionController {
|
|
|
242
341
|
sticky: undefined,
|
|
243
342
|
stickyIndex: undefined,
|
|
244
343
|
};
|
|
245
|
-
|
|
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);
|
|
246
355
|
this.records.splice(index, 0, record);
|
|
356
|
+
projectedOwners.set(child, this);
|
|
247
357
|
this.insertRecord(parent, record, beforeRecord, insert);
|
|
248
|
-
this.
|
|
358
|
+
this.scheduleReconcile();
|
|
249
359
|
}
|
|
250
360
|
removeProjectedChild(child, remove) {
|
|
251
361
|
const record = this.records.find(entry => entry.child === child || entry.wrapper === child);
|
|
252
362
|
if (record === undefined || this.contentNode === undefined)
|
|
253
363
|
return false;
|
|
254
364
|
record.sticky?.destroy();
|
|
255
|
-
|
|
365
|
+
projectedOwners.delete(record.child);
|
|
256
366
|
const direct = directNode(record);
|
|
257
|
-
|
|
258
|
-
|
|
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);
|
|
259
371
|
this.records.splice(this.records.indexOf(record), 1);
|
|
260
|
-
this.
|
|
372
|
+
this.scheduleReconcile();
|
|
261
373
|
return true;
|
|
262
374
|
}
|
|
263
375
|
nextStickyHeaderY(index) {
|
|
@@ -272,8 +384,24 @@ export class ScrollViewProjectionController {
|
|
|
272
384
|
if (this.headerLayoutYs.get(index) === y)
|
|
273
385
|
return;
|
|
274
386
|
this.headerLayoutYs.set(index, y);
|
|
275
|
-
|
|
276
|
-
|
|
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();
|
|
277
405
|
}
|
|
278
406
|
insertRecord(parent, record, beforeRecord, insert) {
|
|
279
407
|
const before = beforeRecord === undefined ? undefined : directNode(beforeRecord);
|
|
@@ -284,19 +412,28 @@ export class ScrollViewProjectionController {
|
|
|
284
412
|
else
|
|
285
413
|
insert(parent, record.child, before);
|
|
286
414
|
}
|
|
287
|
-
|
|
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) {
|
|
288
423
|
if (this.contentNode === undefined)
|
|
289
424
|
return;
|
|
290
425
|
const seq = ++this.reconcileSeq;
|
|
291
426
|
dlog(() => `STICKY[proj#${this.instanceId}] reconcile#${seq} records=${this.records.length} ` +
|
|
292
427
|
`children=${this.contentNode?.children.length} sticky=${JSON.stringify(this.config.stickyHeaderIndices ?? [])}`);
|
|
293
428
|
const stickyIndices = new Set(this.config.stickyHeaderIndices ?? []);
|
|
294
|
-
if (this.config.customStickyHeaderComponent !== undefined &&
|
|
429
|
+
if (this.config.customStickyHeaderComponent !== undefined &&
|
|
430
|
+
stickyIndices.size > 0) {
|
|
295
431
|
dlog('STICKY[proj] uses built-in sticky wrapper; custom StickyHeaderComponent is explicit-composition only');
|
|
296
432
|
}
|
|
297
433
|
let paintIndex = 0;
|
|
298
434
|
for (const record of [...this.records]) {
|
|
299
|
-
if (this.config.excludeRefreshControl &&
|
|
435
|
+
if (this.config.excludeRefreshControl &&
|
|
436
|
+
isProjectedRefreshControl(record.child)) {
|
|
300
437
|
// Removed INLINE, not through removeProjectedChild: that method ends with its own
|
|
301
438
|
// reconcileStickyRecords(), so calling it from inside this walk re-enters the walk while
|
|
302
439
|
// this.records is being spliced under it - one refresh control could then drive an
|
|
@@ -317,13 +454,28 @@ export class ScrollViewProjectionController {
|
|
|
317
454
|
else if (!shouldWrap && record.wrapper !== undefined)
|
|
318
455
|
this.unwrapRecord(record);
|
|
319
456
|
else if (shouldWrap && record.stickyIndex !== childIndex) {
|
|
320
|
-
|
|
321
|
-
record.sticky
|
|
457
|
+
countAngular('stickyWrapperReuses');
|
|
458
|
+
record.sticky?.setChildIndex(childIndex);
|
|
322
459
|
record.stickyIndex = childIndex;
|
|
323
460
|
}
|
|
324
|
-
else if (shouldWrap)
|
|
461
|
+
else if (shouldWrap && notifyAll)
|
|
325
462
|
record.sticky?.rebuild();
|
|
326
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
|
+
}
|
|
327
479
|
}
|
|
328
480
|
// The removal half of removeProjectedChild, without its trailing reconcile - safe to call from
|
|
329
481
|
// inside the reconcile walk itself.
|
|
@@ -331,7 +483,7 @@ export class ScrollViewProjectionController {
|
|
|
331
483
|
if (this.contentNode === undefined)
|
|
332
484
|
return;
|
|
333
485
|
record.sticky?.destroy();
|
|
334
|
-
|
|
486
|
+
projectedOwners.delete(record.child);
|
|
335
487
|
const direct = directNode(record);
|
|
336
488
|
if (direct.parent === this.contentNode)
|
|
337
489
|
removeChild(this.contentNode, direct);
|
|
@@ -350,22 +502,42 @@ export class ScrollViewProjectionController {
|
|
|
350
502
|
if (this.contentNode === undefined)
|
|
351
503
|
return;
|
|
352
504
|
const wrapper = createViewNode();
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
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)
|
|
360
519
|
appendChild(this.contentNode, wrapper);
|
|
361
|
-
|
|
520
|
+
else
|
|
521
|
+
insertBefore(this.contentNode, wrapper, after);
|
|
362
522
|
appendChild(wrapper, record.child);
|
|
363
523
|
record.wrapper = wrapper;
|
|
524
|
+
countAngular('stickyWrapperCreates');
|
|
364
525
|
record.sticky = new StickyProjectionWrapper(this, childIndex, wrapper);
|
|
365
526
|
record.stickyIndex = childIndex;
|
|
366
|
-
projectedWrappers.set(record.child, record);
|
|
367
527
|
dlog(`STICKY[proj#${this.instanceId}] WRAP child=${record.child.component} paintIndex=${childIndex}`);
|
|
368
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;
|
|
540
|
+
}
|
|
369
541
|
unwrapRecord(record) {
|
|
370
542
|
if (this.contentNode === undefined || record.wrapper === undefined)
|
|
371
543
|
return;
|
|
@@ -377,19 +549,12 @@ export class ScrollViewProjectionController {
|
|
|
377
549
|
insertBefore(this.contentNode, record.child, wrapper);
|
|
378
550
|
removeChild(this.contentNode, wrapper);
|
|
379
551
|
record.wrapper = undefined;
|
|
380
|
-
projectedWrappers.delete(record.child);
|
|
381
552
|
}
|
|
382
553
|
}
|
|
383
554
|
export function getScrollViewProjection(node) {
|
|
384
555
|
return contentProjection.get(node);
|
|
385
556
|
}
|
|
386
557
|
export function removeScrollViewProjectedChild(child, remove) {
|
|
387
|
-
|
|
388
|
-
if (record === undefined)
|
|
389
|
-
return false;
|
|
390
|
-
const controller = record.wrapper?.parent
|
|
391
|
-
? contentProjection.get(record.wrapper.parent)
|
|
392
|
-
: undefined;
|
|
393
|
-
return controller?.removeProjectedChild(child, remove) ?? false;
|
|
558
|
+
return (projectedOwners.get(child)?.removeProjectedChild(child, remove) ?? false);
|
|
394
559
|
}
|
|
395
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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"}
|
|
@@ -350,7 +350,8 @@ export class ScrollViewBase {
|
|
|
350
350
|
return value;
|
|
351
351
|
}
|
|
352
352
|
get hasStickyHeaders() {
|
|
353
|
-
return this.stickyHeaderIndices !== undefined &&
|
|
353
|
+
return (this.stickyHeaderIndices !== undefined &&
|
|
354
|
+
this.stickyHeaderIndices.length > 0);
|
|
354
355
|
}
|
|
355
356
|
// A class-name string resolves through the shared registry before it reaches
|
|
356
357
|
// selectScrollIntrinsics, which only understands style objects/arrays.
|
|
@@ -360,8 +361,7 @@ export class ScrollViewBase {
|
|
|
360
361
|
: this.contentContainerStyle;
|
|
361
362
|
}
|
|
362
363
|
get scrollViewBaseStyle() {
|
|
363
|
-
return selectScrollIntrinsics(this.isHorizontal, this.resolvedContentContainerStyle)
|
|
364
|
-
.scrollViewBaseStyle;
|
|
364
|
+
return selectScrollIntrinsics(this.isHorizontal, this.resolvedContentContainerStyle).scrollViewBaseStyle;
|
|
365
365
|
}
|
|
366
366
|
// Bridges non-reactive @Input fields into the reactive graph, so a computed() can memoize a
|
|
367
367
|
// bag derived from them. Signal inputs would make this unnecessary, but `input()` is visible
|
|
@@ -576,8 +576,12 @@ export class ScrollViewBase {
|
|
|
576
576
|
contentProps = computed(() => {
|
|
577
577
|
this.inputsRevision();
|
|
578
578
|
const { contentStyle } = selectScrollIntrinsics(this.isHorizontal, this.resolvedContentContainerStyle);
|
|
579
|
-
const bag = {
|
|
580
|
-
|
|
579
|
+
const bag = {
|
|
580
|
+
style: contentStyle,
|
|
581
|
+
collapsable: false,
|
|
582
|
+
};
|
|
583
|
+
if (this.maintainVisibleContentPosition !== undefined ||
|
|
584
|
+
this.snapToAlignment !== undefined) {
|
|
581
585
|
bag.collapsableChildren = false;
|
|
582
586
|
}
|
|
583
587
|
bag.onLayout = this.handleContentLayout;
|
|
@@ -612,7 +616,9 @@ export class ScrollViewBase {
|
|
|
612
616
|
this.cachedStickyOnScrollSource = userOnScroll;
|
|
613
617
|
this.cachedStickyOnScrollHandler = animatedEvent([{ nativeEvent: { contentOffset: { y: this.scrollAnimatedValue } } }], userOnScroll === undefined
|
|
614
618
|
? undefined
|
|
615
|
-
: {
|
|
619
|
+
: {
|
|
620
|
+
listener: (...args) => forwardScrollEvent(userOnScroll, args),
|
|
621
|
+
});
|
|
616
622
|
}
|
|
617
623
|
return this.cachedStickyOnScrollHandler;
|
|
618
624
|
}
|
|
@@ -657,6 +663,20 @@ export class ScrollViewBase {
|
|
|
657
663
|
// actually moved, so `signal.set`'s own Object.is check makes an unchanged poll dirty nothing.
|
|
658
664
|
ngDoCheck() {
|
|
659
665
|
this.anchorStyle.set(anchorHostStyle(this.elementRef));
|
|
666
|
+
// The attach can want a node that does not exist yet, and nothing else would ask again.
|
|
667
|
+
// ngOnChanges covers "indices arrived late"; it does NOT cover "indices arrived late AND the host
|
|
668
|
+
// node had not committed yet", which is exactly what a VirtualizedList does - it derives
|
|
669
|
+
// stickyHeaderIndices from the measured window, so they land after this component's
|
|
670
|
+
// ngAfterViewInit and before its host node resolves. Device-diagnosed 2026-08-18 on
|
|
671
|
+
// examples/angular BenchmarkScreen STICKY PATH B, whose log ends on `attachSticky NOT attaching
|
|
672
|
+
// (wantsAttach=true hasNode=false)` - sticky never turned on, while PATH A (literal indices in
|
|
673
|
+
// the template) worked because ngAfterViewInit already saw a node. Retried ONLY from that stuck
|
|
674
|
+
// state, so a settled ScrollView pays nothing per check. Device-verified the same day.
|
|
675
|
+
// Not covered headless: sticky-native-attach.test.ts's late-indices case has its node resolved by
|
|
676
|
+
// the time the indices land, and the deferred-creation ordering under `@if` never rendered the
|
|
677
|
+
// ScrollView at all.
|
|
678
|
+
if (this.stickyAttachedEnabled && this.stickyAttachedNode === null)
|
|
679
|
+
this.attachSticky();
|
|
660
680
|
}
|
|
661
681
|
// The projected RefreshControl is a @ContentChild, not an @Input, so ngOnChanges never fires when
|
|
662
682
|
// one is added or removed at the use site - and `excludeRefreshControl` decides whether the
|
|
@@ -701,7 +721,8 @@ export class ScrollViewBase {
|
|
|
701
721
|
// Nothing that decides the attach has changed - return rather than detach and rebind the
|
|
702
722
|
// native scroll event, which every unrelated @Input change would otherwise churn now that
|
|
703
723
|
// ngOnChanges drives this too.
|
|
704
|
-
if (wantsAttach === this.stickyAttachedEnabled &&
|
|
724
|
+
if (wantsAttach === this.stickyAttachedEnabled &&
|
|
725
|
+
node === this.stickyAttachedNode) {
|
|
705
726
|
dlog('STICKY[sv] attachSticky skipped (nothing about the attach changed)');
|
|
706
727
|
return;
|
|
707
728
|
}
|