@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.
- package/README.md +3 -3
- package/bin/symbiote-angular-dev.cjs +20 -19
- package/build/angular/anchor-host-registry.js +2 -2
- package/build/angular/anchor-host-registry.js.map +1 -1
- package/build/angular/bootstrap.js +1 -1
- package/build/angular/bootstrap.js.map +1 -1
- package/build/angular/components/activity-indicator/index.android.d.ts +2 -1
- package/build/angular/components/activity-indicator/index.android.js +12 -4
- package/build/angular/components/activity-indicator/index.android.js.map +1 -1
- package/build/angular/components/activity-indicator/index.ios.d.ts +2 -1
- package/build/angular/components/activity-indicator/index.ios.js +8 -3
- 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 +4 -4
- package/build/angular/components/activity-indicator/shared.js.map +1 -1
- package/build/angular/components/button.d.ts +4 -2
- package/build/angular/components/button.js +41 -22
- package/build/angular/components/button.js.map +1 -1
- package/build/angular/components/flat-list/index.d.ts +6 -4
- package/build/angular/components/flat-list/index.js +80 -50
- package/build/angular/components/flat-list/index.js.map +1 -1
- package/build/angular/components/image/index.android.d.ts +8 -3
- package/build/angular/components/image/index.android.js +42 -10
- package/build/angular/components/image/index.android.js.map +1 -1
- package/build/angular/components/image/index.ios.d.ts +8 -3
- package/build/angular/components/image/index.ios.js +42 -10
- package/build/angular/components/image/index.ios.js.map +1 -1
- package/build/angular/components/image/shared.d.ts +4 -1
- package/build/angular/components/image/shared.js +51 -8
- package/build/angular/components/image/shared.js.map +1 -1
- package/build/angular/components/image-background.d.ts +2 -1
- package/build/angular/components/image-background.js +26 -10
- package/build/angular/components/image-background.js.map +1 -1
- package/build/angular/components/input-accessory-view/index.d.ts +9 -4
- package/build/angular/components/input-accessory-view/index.js +49 -10
- package/build/angular/components/input-accessory-view/index.js.map +1 -1
- package/build/angular/components/keyboard-avoiding-view/index.d.ts +3 -1
- package/build/angular/components/keyboard-avoiding-view/index.js +44 -12
- package/build/angular/components/keyboard-avoiding-view/index.js.map +1 -1
- package/build/angular/components/modal/index.d.ts +11 -8
- package/build/angular/components/modal/index.js +51 -29
- package/build/angular/components/modal/index.js.map +1 -1
- package/build/angular/components/pressable/index.d.ts +12 -6
- package/build/angular/components/pressable/index.js +66 -13
- package/build/angular/components/pressable/index.js.map +1 -1
- package/build/angular/components/refresh-control/index.d.ts +8 -4
- package/build/angular/components/refresh-control/index.js +54 -16
- package/build/angular/components/refresh-control/index.js.map +1 -1
- package/build/angular/components/safe-area-view/index.d.ts +9 -4
- package/build/angular/components/safe-area-view/index.js +48 -9
- package/build/angular/components/safe-area-view/index.js.map +1 -1
- package/build/angular/components/scroll-view/index.android.d.ts +2 -3
- package/build/angular/components/scroll-view/index.android.js +88 -61
- package/build/angular/components/scroll-view/index.android.js.map +1 -1
- package/build/angular/components/scroll-view/index.ios.d.ts +2 -3
- package/build/angular/components/scroll-view/index.ios.js +24 -18
- package/build/angular/components/scroll-view/index.ios.js.map +1 -1
- package/build/angular/components/scroll-view/projection.d.ts +35 -0
- package/build/angular/components/scroll-view/projection.js +279 -53
- package/build/angular/components/scroll-view/projection.js.map +1 -1
- package/build/angular/components/scroll-view/shared.d.ts +14 -5
- package/build/angular/components/scroll-view/shared.js +225 -75
- package/build/angular/components/scroll-view/shared.js.map +1 -1
- package/build/angular/components/scroll-view/sticky-header.js +21 -22
- package/build/angular/components/scroll-view/sticky-header.js.map +1 -1
- package/build/angular/components/section-list/index.d.ts +7 -1
- package/build/angular/components/section-list/index.js +91 -54
- package/build/angular/components/section-list/index.js.map +1 -1
- package/build/angular/components/switch/index.android.d.ts +7 -3
- package/build/angular/components/switch/index.android.js +52 -10
- package/build/angular/components/switch/index.android.js.map +1 -1
- package/build/angular/components/switch/index.ios.d.ts +7 -3
- package/build/angular/components/switch/index.ios.js +52 -10
- package/build/angular/components/switch/index.ios.js.map +1 -1
- package/build/angular/components/switch/shared.d.ts +13 -4
- package/build/angular/components/switch/shared.js +71 -7
- package/build/angular/components/switch/shared.js.map +1 -1
- package/build/angular/components/text-input.d.ts +11 -3
- package/build/angular/components/text-input.js +68 -8
- package/build/angular/components/text-input.js.map +1 -1
- package/build/angular/components/touchable/index.d.ts +40 -9
- package/build/angular/components/touchable/index.js +303 -67
- package/build/angular/components/touchable/index.js.map +1 -1
- package/build/angular/components/touchable-native-feedback/index.d.ts +6 -3
- package/build/angular/components/touchable-native-feedback/index.js +63 -27
- package/build/angular/components/touchable-native-feedback/index.js.map +1 -1
- package/build/angular/components/virtualized-list/directives.js +22 -18
- package/build/angular/components/virtualized-list/directives.js.map +1 -1
- package/build/angular/components/virtualized-list/index.d.ts +15 -4
- package/build/angular/components/virtualized-list/index.js +326 -94
- package/build/angular/components/virtualized-list/index.js.map +1 -1
- package/build/angular/components/virtualized-section-list/directives.js +12 -12
- package/build/angular/components/virtualized-section-list/directives.js.map +1 -1
- package/build/angular/components/virtualized-section-list/index.d.ts +19 -1
- package/build/angular/components/virtualized-section-list/index.js +93 -22
- package/build/angular/components/virtualized-section-list/index.js.map +1 -1
- package/build/angular/components.d.ts +2 -2
- package/build/angular/components.js +5 -0
- package/build/angular/components.js.map +1 -1
- package/build/angular/create-portal/index.js +34 -36
- package/build/angular/create-portal/index.js.map +1 -1
- package/build/angular/create-tunnel/index.js +19 -22
- package/build/angular/create-tunnel/index.js.map +1 -1
- package/build/angular/descriptor-to-angular/index.js +6 -4
- 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 +9 -4
- package/build/angular/index.js +17 -3
- package/build/angular/index.js.map +1 -1
- package/build/angular/modules/animated/animated-leaf-binder.d.ts +1 -7
- package/build/angular/modules/animated/animated-leaf-binder.js +22 -72
- package/build/angular/modules/animated/animated-leaf-binder.js.map +1 -1
- package/build/angular/modules/animated/create-animated-component.d.ts +11 -6
- package/build/angular/modules/animated/create-animated-component.js +106 -55
- package/build/angular/modules/animated/create-animated-component.js.map +1 -1
- package/build/angular/modules/status-bar/index.js +4 -4
- package/build/angular/modules/status-bar/index.js.map +1 -1
- package/build/angular/primitives/index.d.ts +20 -3
- package/build/angular/primitives/index.js +84 -48
- package/build/angular/primitives/index.js.map +1 -1
- package/build/angular/primitives/shared.d.ts +48 -2
- package/build/angular/primitives/shared.js +158 -11
- package/build/angular/primitives/shared.js.map +1 -1
- package/build/angular/render/index.js +69 -38
- 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 +3 -3
- package/build/angular/services/color-scheme.service.js.map +1 -1
- package/build/angular/services/window-dimensions.service.js +4 -4
- package/build/angular/services/window-dimensions.service.js.map +1 -1
- package/package.json +10 -8
- package/src/anchor-host-registry.ts +2 -2
- package/src/bootstrap.ts +4 -1
- package/src/components/activity-indicator/index.android.ts +8 -1
- package/src/components/activity-indicator/index.ios.ts +4 -0
- package/src/components/activity-indicator/shared.ts +32 -13
- package/src/components/button.ts +46 -19
- package/src/components/flat-list/index.ts +122 -62
- package/src/components/image/index.android.ts +58 -7
- package/src/components/image/index.ios.ts +58 -7
- package/src/components/image/shared.ts +92 -21
- package/src/components/image-background.ts +29 -9
- package/src/components/input-accessory-view/index.ts +67 -12
- package/src/components/keyboard-avoiding-view/index.ts +61 -15
- package/src/components/modal/index.ts +72 -33
- package/src/components/pressable/index.ts +117 -28
- package/src/components/refresh-control/index.ts +74 -18
- package/src/components/safe-area-view/index.ts +64 -10
- package/src/components/scroll-view/index.android.ts +62 -47
- package/src/components/scroll-view/index.ios.ts +19 -17
- package/src/components/scroll-view/projection.ts +363 -64
- package/src/components/scroll-view/shared.ts +312 -90
- package/src/components/scroll-view/sticky-header.ts +36 -24
- package/src/components/section-list/index.ts +86 -53
- package/src/components/switch/index.android.ts +60 -8
- package/src/components/switch/index.ios.ts +60 -8
- package/src/components/switch/shared.ts +93 -6
- package/src/components/text-input.ts +95 -13
- package/src/components/touchable/index.ts +348 -64
- package/src/components/touchable-native-feedback/index.ts +94 -31
- package/src/components/virtualized-list/directives.ts +19 -5
- package/src/components/virtualized-list/index.ts +380 -85
- package/src/components/virtualized-section-list/directives.ts +6 -3
- package/src/components/virtualized-section-list/index.ts +146 -33
- package/src/components.ts +9 -1
- package/src/create-portal/index.ts +31 -31
- package/src/create-tunnel/index.ts +16 -17
- 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 +61 -3
- package/src/modules/animated/animated-leaf-binder.ts +28 -77
- package/src/modules/animated/create-animated-component.ts +115 -47
- package/src/modules/app-registry/index.ts +9 -9
- package/src/modules/status-bar/index.ts +13 -4
- package/src/primitives/index.ts +47 -2
- package/src/primitives/shared.ts +170 -10
- package/src/render/index.ts +77 -39
- 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
- package/build/angular/modules/animated/animated-leaf-binder/index.d.ts +0 -14
- package/build/angular/modules/animated/animated-leaf-binder/index.js +0 -91
- package/build/angular/modules/animated/animated-leaf-binder/index.js.map +0 -1
- package/src/modules/animated/animated-leaf-binder/index.ts +0 -101
|
@@ -1,91 +1,41 @@
|
|
|
1
|
-
//
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
// (
|
|
9
|
-
//
|
|
10
|
-
|
|
1
|
+
// Angular's binding of the shared AnimatedProps leaf lifecycle (core/engine's
|
|
2
|
+
// createAnimatedLeafLifecycle). The POLICY - when to rebuild, when to skip, attach-new-before-
|
|
3
|
+
// detach-old, native event rebinding - lives in the engine and is identical for every adapter;
|
|
4
|
+
// this class supplies only the two things that are genuinely Angular's: how the host node is
|
|
5
|
+
// resolved (a @ViewChild directive, not a ref), and the whenCommitted deferral its batched
|
|
6
|
+
// change detection forces.
|
|
7
|
+
//
|
|
8
|
+
// Pure Fabrication (GRASP): kept as its own class rather than folded into AnimatedComponentBase so
|
|
9
|
+
// AnimatedImage - which must extend ImageBase instead - gets the same wiring by composition rather
|
|
10
|
+
// than copy-paste.
|
|
11
|
+
import { createAnimatedLeafLifecycle, whenCommitted, } from '@symbiote-native/engine';
|
|
11
12
|
export class AnimatedLeafBinder {
|
|
12
13
|
resolveNode;
|
|
13
|
-
|
|
14
|
-
// The leaf currently wired into the value graph. Null until the first reconcile.
|
|
15
|
-
attached = null;
|
|
16
|
-
// The whenCommitted waiter for the current leaf's node binding, cancelled before the next.
|
|
17
|
-
cancelBind;
|
|
18
|
-
// Detachers for any Animated.event prop bound natively to the committed node (JS path: none).
|
|
19
|
-
eventDetachers = [];
|
|
14
|
+
lifecycle;
|
|
20
15
|
// `resolveNode` stays a caller-supplied resolver (not a constructor-captured node) so this
|
|
21
|
-
// class never needs to know HOW the host node is found
|
|
16
|
+
// class never needs to know HOW the host node is found - AnimatedComponentBase and
|
|
22
17
|
// AnimatedImage both resolve it the same way (resolveHostNode + isSymbioteNode over their
|
|
23
18
|
// own @ViewChild), but that's Angular DI state this binder has no business touching.
|
|
24
19
|
// `label` is purely diagnostic (dlog), mirroring the constructor.name the pre-extraction
|
|
25
20
|
// dlog call used.
|
|
26
21
|
constructor(resolveNode, label) {
|
|
27
22
|
this.resolveNode = resolveNode;
|
|
28
|
-
this.
|
|
23
|
+
this.lifecycle = createAnimatedLeafLifecycle(label);
|
|
29
24
|
}
|
|
30
|
-
//
|
|
31
|
-
//
|
|
32
|
-
//
|
|
33
|
-
//
|
|
34
|
-
//
|
|
35
|
-
//
|
|
25
|
+
// Only the NATIVE half is deferred through whenCommitted (which runs it NOW when the node is
|
|
26
|
+
// already committed - the steady state, and the only path a scroll frame takes). The leaf itself
|
|
27
|
+
// always joins the value graph synchronously: deferring THAT too put the build behind a
|
|
28
|
+
// canceller the next reconcile drops, so a component reconciling faster than it commits never
|
|
29
|
+
// attached anything and a sticky header's rebuilt interpolation never reached the graph.
|
|
30
|
+
// Regression-covered in leaf-attach-before-commit.test.ts.
|
|
36
31
|
reconcile(props, wantsNative) {
|
|
37
|
-
dlog(`${this.label} reconcile`);
|
|
38
|
-
const newLeaf = new AnimatedProps(props);
|
|
39
|
-
newLeaf.__attach();
|
|
40
|
-
if (this.attached !== null && this.attached !== newLeaf)
|
|
41
|
-
this.attached.__detach();
|
|
42
|
-
this.attached = newLeaf;
|
|
43
|
-
this.bindNode(newLeaf, props, wantsNative);
|
|
44
|
-
}
|
|
45
|
-
// Bind the leaf to the host's Fabric node THROUGH whenCommitted: under Angular's zoneless
|
|
46
|
-
// batched change detection the inner host's tag does not exist yet at ngAfterViewInit time
|
|
47
|
-
// (the same async-commit gotcha Vue documents), so binding eagerly would no-op. whenCommitted
|
|
48
|
-
// runs the action now if already committed, else after the commit that assigns the tag.
|
|
49
|
-
bindNode(leaf, props, wantsNative) {
|
|
50
|
-
this.cancelBind?.();
|
|
51
|
-
this.cancelBind = undefined;
|
|
52
32
|
const node = this.resolveNode();
|
|
53
|
-
|
|
54
|
-
return;
|
|
55
|
-
this.cancelBind = whenCommitted(node, () => {
|
|
56
|
-
leaf.setNativeView(node);
|
|
57
|
-
if (wantsNative)
|
|
58
|
-
leaf.__makeNative();
|
|
59
|
-
this.attachEvents(node, props);
|
|
60
|
-
});
|
|
61
|
-
}
|
|
62
|
-
// Native-attach any Animated.event prop (e.g. onScroll={Animated.event(…,{useNativeDriver:true})})
|
|
63
|
-
// to the committed node. attachNativeEventHandler no-ops (returns undefined) unless the prop is a
|
|
64
|
-
// native event handler with a committed tag, so the JS path stays the fallback. Rebound each
|
|
65
|
-
// reconcile so a new inline event re-attaches; detached first to avoid leaking the prior binding.
|
|
66
|
-
attachEvents(node, props) {
|
|
67
|
-
this.detachEvents();
|
|
68
|
-
for (const key of Object.keys(props)) {
|
|
69
|
-
const attachment = attachNativeEventHandler(node, key, props[key]);
|
|
70
|
-
if (attachment !== undefined)
|
|
71
|
-
this.eventDetachers.push(attachment.detach);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
detachEvents() {
|
|
75
|
-
for (const detach of this.eventDetachers)
|
|
76
|
-
detach();
|
|
77
|
-
this.eventDetachers = [];
|
|
33
|
+
this.lifecycle.reconcile(props, node, wantsNative, bind => node === null ? undefined : whenCommitted(node, bind));
|
|
78
34
|
}
|
|
79
35
|
// Tear down everything: cancel a still-pending bind, drop native event listeners, detach the
|
|
80
36
|
// current leaf from the value graph. Safe to call even if reconcile() was never called.
|
|
81
37
|
destroy() {
|
|
82
|
-
this.
|
|
83
|
-
this.cancelBind = undefined;
|
|
84
|
-
this.detachEvents();
|
|
85
|
-
if (this.attached !== null) {
|
|
86
|
-
this.attached.__detach();
|
|
87
|
-
this.attached = null;
|
|
88
|
-
}
|
|
38
|
+
this.lifecycle.teardown();
|
|
89
39
|
}
|
|
90
40
|
}
|
|
91
41
|
//# sourceMappingURL=animated-leaf-binder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"animated-leaf-binder.js","sourceRoot":"","sources":["../../../../src/modules/animated/animated-leaf-binder.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"animated-leaf-binder.js","sourceRoot":"","sources":["../../../../src/modules/animated/animated-leaf-binder.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,+FAA+F;AAC/F,+FAA+F;AAC/F,6FAA6F;AAC7F,2FAA2F;AAC3F,2BAA2B;AAC3B,EAAE;AACF,mGAAmG;AACnG,mGAAmG;AACnG,mBAAmB;AACnB,OAAO,EACL,2BAA2B,EAC3B,aAAa,GAGd,MAAM,yBAAyB,CAAC;AAEjC,MAAM,OAAO,kBAAkB;IAUV;IATF,SAAS,CAAyB;IAEnD,2FAA2F;IAC3F,mFAAmF;IACnF,0FAA0F;IAC1F,qFAAqF;IACrF,yFAAyF;IACzF,kBAAkB;IAClB,YACmB,WAAuC,EACxD,KAAa;QADI,gBAAW,GAAX,WAAW,CAA4B;QAGxD,IAAI,CAAC,SAAS,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,6FAA6F;IAC7F,iGAAiG;IACjG,wFAAwF;IACxF,8FAA8F;IAC9F,yFAAyF;IACzF,2DAA2D;IAC3D,SAAS,CAAC,KAA8B,EAAE,WAAoB;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,CACxD,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CACtD,CAAC;IACJ,CAAC;IAED,6FAA6F;IAC7F,wFAAwF;IACxF,OAAO;QACL,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC;CACF"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import { type AfterViewInit, type OnChanges, type OnDestroy, type Type } from '@angular/core';
|
|
1
|
+
import { type AfterViewInit, type DoCheck, type OnChanges, type OnDestroy, type Type } from '@angular/core';
|
|
2
2
|
import { FlatList } from '../../components/flat-list';
|
|
3
3
|
import { ImageBase } from '../../components/image/shared';
|
|
4
4
|
import { SectionList } from '../../components/section-list';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "../../primitives/shared";
|
|
6
7
|
export declare const ANIMATED_INPUTS: string[];
|
|
7
8
|
export declare const ANIMATED_IMAGE_INPUTS: string[];
|
|
8
|
-
export declare abstract class AnimatedComponentBase implements AfterViewInit, OnChanges, OnDestroy {
|
|
9
|
+
export declare abstract class AnimatedComponentBase implements AfterViewInit, DoCheck, OnChanges, OnDestroy {
|
|
9
10
|
style: unknown;
|
|
10
11
|
animatedProps: Record<string, unknown> | undefined;
|
|
11
12
|
passthroughAnimatedPropExplicitValues: unknown;
|
|
@@ -14,6 +15,8 @@ export declare abstract class AnimatedComponentBase implements AfterViewInit, On
|
|
|
14
15
|
private readonly leafBinder;
|
|
15
16
|
private viewReady;
|
|
16
17
|
get reducedProps(): Record<string, unknown>;
|
|
18
|
+
private readonly anchorStyle;
|
|
19
|
+
ngDoCheck(): void;
|
|
17
20
|
ngAfterViewInit(): void;
|
|
18
21
|
ngOnChanges(): void;
|
|
19
22
|
ngOnDestroy(): void;
|
|
@@ -25,11 +28,11 @@ export declare abstract class AnimatedComponentBase implements AfterViewInit, On
|
|
|
25
28
|
}
|
|
26
29
|
export declare class AnimatedView extends AnimatedComponentBase {
|
|
27
30
|
static ɵfac: i0.ɵɵFactoryDeclaration<AnimatedView, never>;
|
|
28
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AnimatedView, "AnimatedView, symbiote-animated-view", never, { "style": { "alias": "style"; "required": false; }; "animatedProps": { "alias": "animatedProps"; "required": false; }; "passthroughAnimatedPropExplicitValues": { "alias": "passthroughAnimatedPropExplicitValues"; "required": false; }; }, {}, never, ["*"], true,
|
|
31
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AnimatedView, "AnimatedView, symbiote-animated-view", never, { "style": { "alias": "style"; "required": false; }; "animatedProps": { "alias": "animatedProps"; "required": false; }; "passthroughAnimatedPropExplicitValues": { "alias": "passthroughAnimatedPropExplicitValues"; "required": false; }; }, {}, never, ["*"], true, [{ directive: typeof i1.SymbioteStyleInputDirective; inputs: { "style": "style"; }; outputs: {}; }]>;
|
|
29
32
|
}
|
|
30
33
|
export declare class AnimatedText extends AnimatedComponentBase {
|
|
31
34
|
static ɵfac: i0.ɵɵFactoryDeclaration<AnimatedText, never>;
|
|
32
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AnimatedText, "AnimatedText, symbiote-animated-text", never, { "style": { "alias": "style"; "required": false; }; "animatedProps": { "alias": "animatedProps"; "required": false; }; "passthroughAnimatedPropExplicitValues": { "alias": "passthroughAnimatedPropExplicitValues"; "required": false; }; }, {}, never, ["*"], true,
|
|
35
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AnimatedText, "AnimatedText, symbiote-animated-text", never, { "style": { "alias": "style"; "required": false; }; "animatedProps": { "alias": "animatedProps"; "required": false; }; "passthroughAnimatedPropExplicitValues": { "alias": "passthroughAnimatedPropExplicitValues"; "required": false; }; }, {}, never, ["*"], true, [{ directive: typeof i1.SymbioteStyleInputDirective; inputs: { "style": "style"; }; outputs: {}; }]>;
|
|
33
36
|
}
|
|
34
37
|
export declare class AnimatedImage extends ImageBase implements AfterViewInit, OnChanges, OnDestroy {
|
|
35
38
|
animatedProps: Record<string, unknown> | undefined;
|
|
@@ -39,6 +42,8 @@ export declare class AnimatedImage extends ImageBase implements AfterViewInit, O
|
|
|
39
42
|
private readonly leafBinder;
|
|
40
43
|
private viewReady;
|
|
41
44
|
get animatedImageProps(): Record<string, unknown>;
|
|
45
|
+
private readonly anchorStyle;
|
|
46
|
+
ngDoCheck(): void;
|
|
42
47
|
ngAfterViewInit(): void;
|
|
43
48
|
ngOnChanges(): void;
|
|
44
49
|
ngOnDestroy(): void;
|
|
@@ -46,13 +51,13 @@ export declare class AnimatedImage extends ImageBase implements AfterViewInit, O
|
|
|
46
51
|
private mergedProps;
|
|
47
52
|
private hostNode;
|
|
48
53
|
static ɵfac: i0.ɵɵFactoryDeclaration<AnimatedImage, never>;
|
|
49
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AnimatedImage, "AnimatedImage, symbiote-animated-image", never, { "source": { "alias": "source"; "required": false; }; "defaultSource": { "alias": "defaultSource"; "required": false; }; "loadingIndicatorSource": { "alias": "loadingIndicatorSource"; "required": false; }; "style": { "alias": "style"; "required": false; }; "resizeMode": { "alias": "resizeMode"; "required": false; }; "resizeMethod": { "alias": "resizeMethod"; "required": false; }; "tintColor": { "alias": "tintColor"; "required": false; }; "blurRadius": { "alias": "blurRadius"; "required": false; }; "capInsets": { "alias": "capInsets"; "required": false; }; "fadeDuration": { "alias": "fadeDuration"; "required": false; }; "progressiveRenderingEnabled": { "alias": "progressiveRenderingEnabled"; "required": false; }; "src": { "alias": "src"; "required": false; }; "srcSet": { "alias": "srcSet"; "required": false; }; "alt": { "alias": "alt"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "crossOrigin": { "alias": "crossOrigin"; "required": false; }; "referrerPolicy": { "alias": "referrerPolicy"; "required": false; }; "testID": { "alias": "testID"; "required": false; }; "nativeID": { "alias": "nativeID"; "required": false; }; "accessible": { "alias": "accessible"; "required": false; }; "accessibilityLabel": { "alias": "accessibilityLabel"; "required": false; }; "accessibilityHint": { "alias": "accessibilityHint"; "required": false; }; "accessibilityRole": { "alias": "accessibilityRole"; "required": false; }; "accessibilityState": { "alias": "accessibilityState"; "required": false; }; "accessibilityValue": { "alias": "accessibilityValue"; "required": false; }; "accessibilityActions": { "alias": "accessibilityActions"; "required": false; }; "accessibilityLabelledBy": { "alias": "accessibilityLabelledBy"; "required": false; }; "importantForAccessibility": { "alias": "importantForAccessibility"; "required": false; }; "accessibilityLiveRegion": { "alias": "accessibilityLiveRegion"; "required": false; }; "screenReaderFocusable": { "alias": "screenReaderFocusable"; "required": false; }; "accessibilityViewIsModal": { "alias": "accessibilityViewIsModal"; "required": false; }; "accessibilityElementsHidden": { "alias": "accessibilityElementsHidden"; "required": false; }; "accessibilityIgnoresInvertColors": { "alias": "accessibilityIgnoresInvertColors"; "required": false; }; "accessibilityLanguage": { "alias": "accessibilityLanguage"; "required": false; }; "accessibilityRespondsToUserInteraction": { "alias": "accessibilityRespondsToUserInteraction"; "required": false; }; "accessibilityShowsLargeContentViewer": { "alias": "accessibilityShowsLargeContentViewer"; "required": false; }; "accessibilityLargeContentTitle": { "alias": "accessibilityLargeContentTitle"; "required": false; }; "role": { "alias": "role"; "required": false; }; "ariaLabel": { "alias": "aria-label"; "required": false; }; "ariaLabelledBy": { "alias": "aria-labelledby"; "required": false; }; "ariaLive": { "alias": "aria-live"; "required": false; }; "ariaHidden": { "alias": "aria-hidden"; "required": false; }; "ariaBusy": { "alias": "aria-busy"; "required": false; }; "ariaChecked": { "alias": "aria-checked"; "required": false; }; "ariaDisabled": { "alias": "aria-disabled"; "required": false; }; "ariaExpanded": { "alias": "aria-expanded"; "required": false; }; "ariaSelected": { "alias": "aria-selected"; "required": false; }; "ariaModal": { "alias": "aria-modal"; "required": false; }; "ariaValueMax": { "alias": "aria-valuemax"; "required": false; }; "ariaValueMin": { "alias": "aria-valuemin"; "required": false; }; "ariaValueNow": { "alias": "aria-valuenow"; "required": false; }; "ariaValueText": { "alias": "aria-valuetext"; "required": false; }; "onAccessibilityAction": { "alias": "onAccessibilityAction"; "required": false; }; "onAccessibilityTap": { "alias": "onAccessibilityTap"; "required": false; }; "onMagicTap": { "alias": "onMagicTap"; "required": false; }; "onAccessibilityEscape": { "alias": "onAccessibilityEscape"; "required": false; }; "onLoadStart": { "alias": "onLoadStart"; "required": false; }; "onLoad": { "alias": "onLoad"; "required": false; }; "onLoadEnd": { "alias": "onLoadEnd"; "required": false; }; "onError": { "alias": "onError"; "required": false; }; "onProgress": { "alias": "onProgress"; "required": false; }; "onPartialLoad": { "alias": "onPartialLoad"; "required": false; }; "animatedProps": { "alias": "animatedProps"; "required": false; }; "passthroughAnimatedPropExplicitValues": { "alias": "passthroughAnimatedPropExplicitValues"; "required": false; }; }, { "accessibilityAction": "accessibilityAction"; "accessibilityTap": "accessibilityTap"; "magicTap": "magicTap"; "accessibilityEscape": "accessibilityEscape"; "loadStart": "loadStart"; "load": "load"; "loadEnd": "loadEnd"; "error": "error"; "progress": "progress"; "partialLoad": "partialLoad"; }, never, ["*"], true,
|
|
54
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AnimatedImage, "AnimatedImage, symbiote-animated-image", never, { "source": { "alias": "source"; "required": false; }; "defaultSource": { "alias": "defaultSource"; "required": false; }; "loadingIndicatorSource": { "alias": "loadingIndicatorSource"; "required": false; }; "style": { "alias": "style"; "required": false; }; "resizeMode": { "alias": "resizeMode"; "required": false; }; "resizeMethod": { "alias": "resizeMethod"; "required": false; }; "tintColor": { "alias": "tintColor"; "required": false; }; "blurRadius": { "alias": "blurRadius"; "required": false; }; "capInsets": { "alias": "capInsets"; "required": false; }; "fadeDuration": { "alias": "fadeDuration"; "required": false; }; "progressiveRenderingEnabled": { "alias": "progressiveRenderingEnabled"; "required": false; }; "src": { "alias": "src"; "required": false; }; "srcSet": { "alias": "srcSet"; "required": false; }; "alt": { "alias": "alt"; "required": false; }; "width": { "alias": "width"; "required": false; }; "height": { "alias": "height"; "required": false; }; "crossOrigin": { "alias": "crossOrigin"; "required": false; }; "referrerPolicy": { "alias": "referrerPolicy"; "required": false; }; "testID": { "alias": "testID"; "required": false; }; "nativeID": { "alias": "nativeID"; "required": false; }; "accessible": { "alias": "accessible"; "required": false; }; "accessibilityLabel": { "alias": "accessibilityLabel"; "required": false; }; "accessibilityHint": { "alias": "accessibilityHint"; "required": false; }; "accessibilityRole": { "alias": "accessibilityRole"; "required": false; }; "accessibilityState": { "alias": "accessibilityState"; "required": false; }; "accessibilityValue": { "alias": "accessibilityValue"; "required": false; }; "accessibilityActions": { "alias": "accessibilityActions"; "required": false; }; "accessibilityLabelledBy": { "alias": "accessibilityLabelledBy"; "required": false; }; "importantForAccessibility": { "alias": "importantForAccessibility"; "required": false; }; "accessibilityLiveRegion": { "alias": "accessibilityLiveRegion"; "required": false; }; "screenReaderFocusable": { "alias": "screenReaderFocusable"; "required": false; }; "accessibilityViewIsModal": { "alias": "accessibilityViewIsModal"; "required": false; }; "accessibilityElementsHidden": { "alias": "accessibilityElementsHidden"; "required": false; }; "accessibilityIgnoresInvertColors": { "alias": "accessibilityIgnoresInvertColors"; "required": false; }; "accessibilityLanguage": { "alias": "accessibilityLanguage"; "required": false; }; "accessibilityRespondsToUserInteraction": { "alias": "accessibilityRespondsToUserInteraction"; "required": false; }; "accessibilityShowsLargeContentViewer": { "alias": "accessibilityShowsLargeContentViewer"; "required": false; }; "accessibilityLargeContentTitle": { "alias": "accessibilityLargeContentTitle"; "required": false; }; "role": { "alias": "role"; "required": false; }; "ariaLabel": { "alias": "aria-label"; "required": false; }; "ariaLabelledBy": { "alias": "aria-labelledby"; "required": false; }; "ariaLive": { "alias": "aria-live"; "required": false; }; "ariaHidden": { "alias": "aria-hidden"; "required": false; }; "ariaBusy": { "alias": "aria-busy"; "required": false; }; "ariaChecked": { "alias": "aria-checked"; "required": false; }; "ariaDisabled": { "alias": "aria-disabled"; "required": false; }; "ariaExpanded": { "alias": "aria-expanded"; "required": false; }; "ariaSelected": { "alias": "aria-selected"; "required": false; }; "ariaModal": { "alias": "aria-modal"; "required": false; }; "ariaValueMax": { "alias": "aria-valuemax"; "required": false; }; "ariaValueMin": { "alias": "aria-valuemin"; "required": false; }; "ariaValueNow": { "alias": "aria-valuenow"; "required": false; }; "ariaValueText": { "alias": "aria-valuetext"; "required": false; }; "onAccessibilityAction": { "alias": "onAccessibilityAction"; "required": false; }; "onAccessibilityTap": { "alias": "onAccessibilityTap"; "required": false; }; "onMagicTap": { "alias": "onMagicTap"; "required": false; }; "onAccessibilityEscape": { "alias": "onAccessibilityEscape"; "required": false; }; "onLoadStart": { "alias": "onLoadStart"; "required": false; }; "onLoad": { "alias": "onLoad"; "required": false; }; "onLoadEnd": { "alias": "onLoadEnd"; "required": false; }; "onError": { "alias": "onError"; "required": false; }; "onProgress": { "alias": "onProgress"; "required": false; }; "onPartialLoad": { "alias": "onPartialLoad"; "required": false; }; "animatedProps": { "alias": "animatedProps"; "required": false; }; "passthroughAnimatedPropExplicitValues": { "alias": "passthroughAnimatedPropExplicitValues"; "required": false; }; }, { "accessibilityAction": "accessibilityAction"; "accessibilityTap": "accessibilityTap"; "magicTap": "magicTap"; "accessibilityEscape": "accessibilityEscape"; "loadStart": "loadStart"; "load": "load"; "loadEnd": "loadEnd"; "error": "error"; "progress": "progress"; "partialLoad": "partialLoad"; }, never, ["*"], true, [{ directive: typeof i1.SymbioteStyleInputDirective; inputs: { "style": "style"; }; outputs: {}; }]>;
|
|
50
55
|
}
|
|
51
56
|
export declare class AnimatedScrollView extends AnimatedComponentBase {
|
|
52
57
|
get reducedProps(): Record<string, unknown>;
|
|
53
58
|
get contentProps(): Record<string, unknown>;
|
|
54
59
|
static ɵfac: i0.ɵɵFactoryDeclaration<AnimatedScrollView, never>;
|
|
55
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<AnimatedScrollView, "AnimatedScrollView, symbiote-animated-scroll-view", never, { "style": { "alias": "style"; "required": false; }; "animatedProps": { "alias": "animatedProps"; "required": false; }; "passthroughAnimatedPropExplicitValues": { "alias": "passthroughAnimatedPropExplicitValues"; "required": false; }; }, {}, never, ["*"], true,
|
|
60
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<AnimatedScrollView, "AnimatedScrollView, symbiote-animated-scroll-view", never, { "style": { "alias": "style"; "required": false; }; "animatedProps": { "alias": "animatedProps"; "required": false; }; "passthroughAnimatedPropExplicitValues": { "alias": "passthroughAnimatedPropExplicitValues"; "required": false; }; }, {}, never, ["*"], true, [{ directive: typeof i1.SymbioteStyleInputDirective; inputs: { "style": "style"; }; outputs: {}; }]>;
|
|
56
61
|
}
|
|
57
62
|
export declare const AnimatedFlatList: typeof FlatList;
|
|
58
63
|
export declare const AnimatedSectionList: typeof SectionList;
|
|
@@ -1,32 +1,29 @@
|
|
|
1
|
-
// createAnimatedComponent for @symbiote-native/angular
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
//
|
|
10
|
-
// values for the first paint, bind the leaf to the committed host node, swap leaves on
|
|
11
|
-
// re-render, tear down on destroy) lives once in AnimatedComponentBase; only the per-host
|
|
12
|
-
// template differs.
|
|
1
|
+
// createAnimatedComponent for @symbiote-native/angular. React/Vue have a runtime HOC
|
|
2
|
+
// (`createAnimatedComponent(Component)` builds a fresh wrapped component on the fly); Angular
|
|
3
|
+
// can't — the AOT-under-Metro build compiles every @Component ahead of time and ships no JIT
|
|
4
|
+
// compiler to Hermes, so a runtime `Component({...})(class)` would throw. The AOT-safe
|
|
5
|
+
// equivalent is an EXPLICIT set of standalone components — AnimatedView / AnimatedText /
|
|
6
|
+
// AnimatedImage / AnimatedScrollView — each a thin @Component over the matching host primitive,
|
|
7
|
+
// sharing one abstract lifecycle base. The mechanism (build an AnimatedProps leaf, reduce
|
|
8
|
+
// animated props to current values for the first paint, bind the leaf to the committed host
|
|
9
|
+
// node, swap leaves on re-render, tear down on destroy) lives once in AnimatedComponentBase.
|
|
13
10
|
//
|
|
14
11
|
// The framework-agnostic half (reduceProps / readPassthroughStyle / resolveHostNode /
|
|
15
12
|
// AnimatedProps / attachNativeEventHandler / isNativeAnimatedAvailable) comes from
|
|
16
|
-
// @symbiote-native/engine, shared
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
|
|
20
|
-
import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, Directive, ElementRef, inject, ViewChild, } from '@angular/core';
|
|
13
|
+
// @symbiote-native/engine, shared with React and Vue. The per-frame path NEVER goes through
|
|
14
|
+
// Angular change detection: value.setValue / animation -> flushValue -> AnimatedProps.update()
|
|
15
|
+
// -> setNativeProps(node), same as the other adapters.
|
|
16
|
+
import { ChangeDetectionStrategy, Component, CUSTOM_ELEMENTS_SCHEMA, Directive, ElementRef, inject, signal, ViewChild, } from '@angular/core';
|
|
21
17
|
import { isNativeAnimatedAvailable, isSymbioteNode, reduceProps, readPassthroughStyle, resolveHostNode, } from '@symbiote-native/engine';
|
|
22
18
|
import { selectScrollIntrinsics } from '@symbiote-native/components';
|
|
23
19
|
import { Image, ScrollView, Text, View } from '../../components';
|
|
24
|
-
import { anchorHostStyle,
|
|
20
|
+
import { anchorHostStyle, ImageHost, ScrollViewHost, SymbioteHostPropsDirective, SymbioteStyleInputDirective, TextHost, ViewHost, } from '../../primitives';
|
|
25
21
|
import { FlatList } from '../../components/flat-list';
|
|
26
22
|
import { IMAGE_INPUTS, IMAGE_OUTPUTS, ImageBase, resolveImageProps, } from '../../components/image/shared';
|
|
27
23
|
import { SectionList } from '../../components/section-list';
|
|
28
24
|
import { AnimatedLeafBinder } from './animated-leaf-binder';
|
|
29
25
|
import * as i0 from "@angular/core";
|
|
26
|
+
import * as i1 from "../../primitives/shared";
|
|
30
27
|
// RN's prop carrying explicit (already-rasterized) values that override the animated prop in
|
|
31
28
|
// the COMMITTED props (sticky-header passthrough). Named once so the directive input and the
|
|
32
29
|
// reconcile agree.
|
|
@@ -34,11 +31,14 @@ const PASSTHROUGH_PROP = 'passthroughAnimatedPropExplicitValues';
|
|
|
34
31
|
// The inputs every animated wrapper accepts. `style` is the (possibly animated) style — the
|
|
35
32
|
// common path (TouchableOpacity passes `[style, { opacity }]`). `animatedProps` is the generic
|
|
36
33
|
// escape hatch for any OTHER prop that may hold an AnimatedNode or an Animated.event handler,
|
|
37
|
-
// plus static host props to forward (the React/Vue `rest`).
|
|
38
|
-
//
|
|
39
|
-
// Switch/Image), so they are inherited consistently.
|
|
34
|
+
// plus static host props to forward (the React/Vue `rest`). Each concrete @Component re-lists
|
|
35
|
+
// these (Angular's inputs-on-base convention, mirroring Switch/Image).
|
|
40
36
|
export const ANIMATED_INPUTS = ['style', 'animatedProps', PASSTHROUGH_PROP];
|
|
41
|
-
export const ANIMATED_IMAGE_INPUTS = [
|
|
37
|
+
export const ANIMATED_IMAGE_INPUTS = [
|
|
38
|
+
...IMAGE_INPUTS,
|
|
39
|
+
'animatedProps',
|
|
40
|
+
PASSTHROUGH_PROP,
|
|
41
|
+
];
|
|
42
42
|
// The shared lifecycle for every animated wrapper. Concrete subclasses add ONLY a @Component
|
|
43
43
|
// decorator (selector + the host-primitive template) — no behavior. Plain fields (no @Input
|
|
44
44
|
// here): the inputs are declared on each concrete via ANIMATED_INPUTS, the adapter convention.
|
|
@@ -71,11 +71,31 @@ export class AnimatedComponentBase {
|
|
|
71
71
|
const passthroughStyle = readPassthroughStyle(this.passthroughAnimatedPropExplicitValues);
|
|
72
72
|
if (passthroughStyle !== undefined) {
|
|
73
73
|
reduced['style'] =
|
|
74
|
-
reduced['style'] === undefined
|
|
74
|
+
reduced['style'] === undefined
|
|
75
|
+
? passthroughStyle
|
|
76
|
+
: [reduced['style'], passthroughStyle];
|
|
75
77
|
}
|
|
76
|
-
reduced['style'] = [
|
|
78
|
+
reduced['style'] = [this.anchorStyle(), reduced['style']];
|
|
77
79
|
return reduced;
|
|
78
80
|
}
|
|
81
|
+
// The anchor's class-derived style, polled rather than read live inside `reducedProps`.
|
|
82
|
+
//
|
|
83
|
+
// Two different writers land style on this component's anchor and NEITHER goes through
|
|
84
|
+
// ngOnChanges: `class=` / `[class.x]` / `[ngClass]` at the use site (via the renderer's
|
|
85
|
+
// addClass/removeClass -> commitClassStyle), and a `[style]` binding from a composing parent
|
|
86
|
+
// that Angular writes as a host property because `style` is not declared as an @Input here.
|
|
87
|
+
// Reading them live in the getter worked at CREATION only - nothing dirties THIS view when the
|
|
88
|
+
// anchor changes, so the getter was never re-read and the update was lost. Device-visible as a
|
|
89
|
+
// TouchableOpacity whose `class` toggled after mount never repainted.
|
|
90
|
+
//
|
|
91
|
+
// ngDoCheck runs during the PARENT's refresh even when this view is skipped, and the signal
|
|
92
|
+
// write is what then marks this view for refresh. `signal.set`'s own Object.is makes an
|
|
93
|
+
// unchanged poll a no-op, so a steady screen costs one property read per pass and nothing else.
|
|
94
|
+
anchorStyle = signal(undefined, /* @ts-ignore */
|
|
95
|
+
...(ngDevMode ? [{ debugName: "anchorStyle" }] : /* istanbul ignore next */ []));
|
|
96
|
+
ngDoCheck() {
|
|
97
|
+
this.anchorStyle.set(anchorHostStyle(this.elementRef));
|
|
98
|
+
}
|
|
79
99
|
ngAfterViewInit() {
|
|
80
100
|
this.viewReady = true;
|
|
81
101
|
this.reconcile();
|
|
@@ -105,7 +125,9 @@ export class AnimatedComponentBase {
|
|
|
105
125
|
// never disagree.
|
|
106
126
|
mergedProps() {
|
|
107
127
|
const base = this.animatedProps ?? {};
|
|
108
|
-
return this.style === undefined
|
|
128
|
+
return this.style === undefined
|
|
129
|
+
? { ...base }
|
|
130
|
+
: { ...base, style: this.style };
|
|
109
131
|
}
|
|
110
132
|
// The committed host node held by IDENTITY. resolveHostNode unwraps an imperative scroll
|
|
111
133
|
// handle to the underlying SymbioteNode (View / Text already hand back the node directly);
|
|
@@ -114,28 +136,31 @@ export class AnimatedComponentBase {
|
|
|
114
136
|
const resolved = resolveHostNode(this.hostDirective?.node);
|
|
115
137
|
return isSymbioteNode(resolved) ? resolved : null;
|
|
116
138
|
}
|
|
117
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
118
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.
|
|
139
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AnimatedComponentBase, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
140
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "22.0.8", type: AnimatedComponentBase, isStandalone: true, viewQueries: [{ propertyName: "hostDirective", first: true, predicate: SymbioteHostPropsDirective, descendants: true }], usesOnChanges: true, ngImport: i0 });
|
|
119
141
|
}
|
|
120
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
142
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AnimatedComponentBase, decorators: [{
|
|
121
143
|
type: Directive
|
|
122
144
|
}], propDecorators: { hostDirective: [{
|
|
123
145
|
type: ViewChild,
|
|
124
146
|
args: [SymbioteHostPropsDirective]
|
|
125
147
|
}] } });
|
|
126
148
|
export class AnimatedView extends AnimatedComponentBase {
|
|
127
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
128
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.
|
|
149
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AnimatedView, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
150
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AnimatedView, isStandalone: true, selector: "AnimatedView, symbiote-animated-view", inputs: { style: "style", animatedProps: "animatedProps", passthroughAnimatedPropExplicitValues: "passthroughAnimatedPropExplicitValues" }, usesInheritance: true, hostDirectives: [{ directive: i1.SymbioteStyleInputDirective, inputs: ["style", "style"] }], ngImport: i0, template: `
|
|
129
151
|
<symbiote-view [symbioteHostProps]="reducedProps">
|
|
130
152
|
<ng-content></ng-content>
|
|
131
153
|
</symbiote-view>
|
|
132
154
|
`, isInline: true, dependencies: [{ kind: "directive", type: SymbioteHostPropsDirective, selector: "[symbioteHostProps]", inputs: ["symbioteHostProps"], exportAs: ["symbioteHost"] }, { kind: "component", type: ViewHost, selector: "symbiote-view, View" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
133
155
|
}
|
|
134
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
156
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AnimatedView, decorators: [{
|
|
135
157
|
type: Component,
|
|
136
158
|
args: [{
|
|
137
159
|
selector: 'AnimatedView, symbiote-animated-view',
|
|
138
160
|
standalone: true,
|
|
161
|
+
hostDirectives: [
|
|
162
|
+
{ directive: SymbioteStyleInputDirective, inputs: ['style'] },
|
|
163
|
+
],
|
|
139
164
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
140
165
|
imports: [SymbioteHostPropsDirective, ViewHost],
|
|
141
166
|
inputs: ANIMATED_INPUTS,
|
|
@@ -148,18 +173,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
148
173
|
}]
|
|
149
174
|
}] });
|
|
150
175
|
export class AnimatedText extends AnimatedComponentBase {
|
|
151
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
152
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.
|
|
176
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AnimatedText, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
177
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AnimatedText, isStandalone: true, selector: "AnimatedText, symbiote-animated-text", inputs: { style: "style", animatedProps: "animatedProps", passthroughAnimatedPropExplicitValues: "passthroughAnimatedPropExplicitValues" }, usesInheritance: true, hostDirectives: [{ directive: i1.SymbioteStyleInputDirective, inputs: ["style", "style"] }], ngImport: i0, template: `
|
|
153
178
|
<symbiote-text [symbioteHostProps]="reducedProps">
|
|
154
179
|
<ng-content></ng-content>
|
|
155
180
|
</symbiote-text>
|
|
156
|
-
`, isInline: true, dependencies: [{ kind: "directive", type: SymbioteHostPropsDirective, selector: "[symbioteHostProps]", inputs: ["symbioteHostProps"], exportAs: ["symbioteHost"] }, { kind: "component", type: TextHost, selector: "symbiote-text, Text" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
181
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: SymbioteHostPropsDirective, selector: "[symbioteHostProps]", inputs: ["symbioteHostProps"], exportAs: ["symbioteHost"] }, { kind: "component", type: TextHost, selector: "symbiote-text, Text", inputs: ["ellipsizeMode", "allowFontScaling"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
157
182
|
}
|
|
158
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AnimatedText, decorators: [{
|
|
159
184
|
type: Component,
|
|
160
185
|
args: [{
|
|
161
186
|
selector: 'AnimatedText, symbiote-animated-text',
|
|
162
187
|
standalone: true,
|
|
188
|
+
hostDirectives: [
|
|
189
|
+
{ directive: SymbioteStyleInputDirective, inputs: ['style'] },
|
|
190
|
+
],
|
|
163
191
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
164
192
|
imports: [SymbioteHostPropsDirective, TextHost],
|
|
165
193
|
inputs: ANIMATED_INPUTS,
|
|
@@ -188,12 +216,32 @@ export class AnimatedImage extends ImageBase {
|
|
|
188
216
|
const passthroughStyle = readPassthroughStyle(this.passthroughAnimatedPropExplicitValues);
|
|
189
217
|
if (passthroughStyle !== undefined) {
|
|
190
218
|
reduced['style'] =
|
|
191
|
-
reduced['style'] === undefined
|
|
219
|
+
reduced['style'] === undefined
|
|
220
|
+
? passthroughStyle
|
|
221
|
+
: [reduced['style'], passthroughStyle];
|
|
192
222
|
}
|
|
193
223
|
const resolved = resolveImageProps(reduced);
|
|
194
224
|
resolved['style'] = [anchorHostStyle(this.elementRef), resolved['style']];
|
|
195
225
|
return resolved;
|
|
196
226
|
}
|
|
227
|
+
// The anchor's class-derived style, polled rather than read live inside `reducedProps`.
|
|
228
|
+
//
|
|
229
|
+
// Two different writers land style on this component's anchor and NEITHER goes through
|
|
230
|
+
// ngOnChanges: `class=` / `[class.x]` / `[ngClass]` at the use site (via the renderer's
|
|
231
|
+
// addClass/removeClass -> commitClassStyle), and a `[style]` binding from a composing parent
|
|
232
|
+
// that Angular writes as a host property because `style` is not declared as an @Input here.
|
|
233
|
+
// Reading them live in the getter worked at CREATION only - nothing dirties THIS view when the
|
|
234
|
+
// anchor changes, so the getter was never re-read and the update was lost. Device-visible as a
|
|
235
|
+
// TouchableOpacity whose `class` toggled after mount never repainted.
|
|
236
|
+
//
|
|
237
|
+
// ngDoCheck runs during the PARENT's refresh even when this view is skipped, and the signal
|
|
238
|
+
// write is what then marks this view for refresh. `signal.set`'s own Object.is makes an
|
|
239
|
+
// unchanged poll a no-op, so a steady screen costs one property read per pass and nothing else.
|
|
240
|
+
anchorStyle = signal(undefined, /* @ts-ignore */
|
|
241
|
+
...(ngDevMode ? [{ debugName: "anchorStyle" }] : /* istanbul ignore next */ []));
|
|
242
|
+
ngDoCheck() {
|
|
243
|
+
this.anchorStyle.set(anchorHostStyle(this.elementRef));
|
|
244
|
+
}
|
|
197
245
|
ngAfterViewInit() {
|
|
198
246
|
this.viewReady = true;
|
|
199
247
|
this.reconcile();
|
|
@@ -225,8 +273,8 @@ export class AnimatedImage extends ImageBase {
|
|
|
225
273
|
const resolved = resolveHostNode(this.hostDirective?.node);
|
|
226
274
|
return isSymbioteNode(resolved) ? resolved : null;
|
|
227
275
|
}
|
|
228
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
229
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.
|
|
276
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AnimatedImage, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
277
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AnimatedImage, isStandalone: true, selector: "AnimatedImage, symbiote-animated-image", inputs: { source: "source", defaultSource: "defaultSource", loadingIndicatorSource: "loadingIndicatorSource", style: "style", resizeMode: "resizeMode", resizeMethod: "resizeMethod", tintColor: "tintColor", blurRadius: "blurRadius", capInsets: "capInsets", fadeDuration: "fadeDuration", progressiveRenderingEnabled: "progressiveRenderingEnabled", src: "src", srcSet: "srcSet", alt: "alt", width: "width", height: "height", crossOrigin: "crossOrigin", referrerPolicy: "referrerPolicy", testID: "testID", nativeID: "nativeID", accessible: "accessible", accessibilityLabel: "accessibilityLabel", accessibilityHint: "accessibilityHint", accessibilityRole: "accessibilityRole", accessibilityState: "accessibilityState", accessibilityValue: "accessibilityValue", accessibilityActions: "accessibilityActions", accessibilityLabelledBy: "accessibilityLabelledBy", importantForAccessibility: "importantForAccessibility", accessibilityLiveRegion: "accessibilityLiveRegion", screenReaderFocusable: "screenReaderFocusable", accessibilityViewIsModal: "accessibilityViewIsModal", accessibilityElementsHidden: "accessibilityElementsHidden", accessibilityIgnoresInvertColors: "accessibilityIgnoresInvertColors", accessibilityLanguage: "accessibilityLanguage", accessibilityRespondsToUserInteraction: "accessibilityRespondsToUserInteraction", accessibilityShowsLargeContentViewer: "accessibilityShowsLargeContentViewer", accessibilityLargeContentTitle: "accessibilityLargeContentTitle", role: "role", ariaLabel: ["aria-label", "ariaLabel"], ariaLabelledBy: ["aria-labelledby", "ariaLabelledBy"], ariaLive: ["aria-live", "ariaLive"], ariaHidden: ["aria-hidden", "ariaHidden"], ariaBusy: ["aria-busy", "ariaBusy"], ariaChecked: ["aria-checked", "ariaChecked"], ariaDisabled: ["aria-disabled", "ariaDisabled"], ariaExpanded: ["aria-expanded", "ariaExpanded"], ariaSelected: ["aria-selected", "ariaSelected"], ariaModal: ["aria-modal", "ariaModal"], ariaValueMax: ["aria-valuemax", "ariaValueMax"], ariaValueMin: ["aria-valuemin", "ariaValueMin"], ariaValueNow: ["aria-valuenow", "ariaValueNow"], ariaValueText: ["aria-valuetext", "ariaValueText"], onAccessibilityAction: "onAccessibilityAction", onAccessibilityTap: "onAccessibilityTap", onMagicTap: "onMagicTap", onAccessibilityEscape: "onAccessibilityEscape", onLoadStart: "onLoadStart", onLoad: "onLoad", onLoadEnd: "onLoadEnd", onError: "onError", onProgress: "onProgress", onPartialLoad: "onPartialLoad", animatedProps: "animatedProps", passthroughAnimatedPropExplicitValues: "passthroughAnimatedPropExplicitValues" }, outputs: { accessibilityAction: "accessibilityAction", accessibilityTap: "accessibilityTap", magicTap: "magicTap", accessibilityEscape: "accessibilityEscape", loadStart: "loadStart", load: "load", loadEnd: "loadEnd", error: "error", progress: "progress", partialLoad: "partialLoad" }, viewQueries: [{ propertyName: "hostDirective", first: true, predicate: SymbioteHostPropsDirective, descendants: true }], usesInheritance: true, usesOnChanges: true, hostDirectives: [{ directive: i1.SymbioteStyleInputDirective, inputs: ["style", "style"] }], ngImport: i0, template: `
|
|
230
278
|
<symbiote-image
|
|
231
279
|
[symbioteHostProps]="animatedImageProps"
|
|
232
280
|
(accessibilityAction)="handleAccessibilityAction($event)"
|
|
@@ -244,11 +292,14 @@ export class AnimatedImage extends ImageBase {
|
|
|
244
292
|
</symbiote-image>
|
|
245
293
|
`, isInline: true, dependencies: [{ kind: "directive", type: SymbioteHostPropsDirective, selector: "[symbioteHostProps]", inputs: ["symbioteHostProps"], exportAs: ["symbioteHost"] }, { kind: "component", type: ImageHost, selector: "symbiote-image" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
246
294
|
}
|
|
247
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
295
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AnimatedImage, decorators: [{
|
|
248
296
|
type: Component,
|
|
249
297
|
args: [{
|
|
250
298
|
selector: 'AnimatedImage, symbiote-animated-image',
|
|
251
299
|
standalone: true,
|
|
300
|
+
hostDirectives: [
|
|
301
|
+
{ directive: SymbioteStyleInputDirective, inputs: ['style'] },
|
|
302
|
+
],
|
|
252
303
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
253
304
|
imports: [SymbioteHostPropsDirective, ImageHost],
|
|
254
305
|
inputs: ANIMATED_IMAGE_INPUTS,
|
|
@@ -278,20 +329,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.5", ngImpor
|
|
|
278
329
|
}] } });
|
|
279
330
|
export class AnimatedScrollView extends AnimatedComponentBase {
|
|
280
331
|
// RN defaults nested scrolling ON (ScrollView.js `nestedScrollEnabled ?? true`) — Android
|
|
281
|
-
// needs it explicit or a ScrollView
|
|
282
|
-
//
|
|
283
|
-
//
|
|
284
|
-
//
|
|
332
|
+
// needs it explicit or a nested ScrollView never receives touch (swallowed by the outer one;
|
|
333
|
+
// iOS doesn't gate on this). The real ScrollView component already defaults this
|
|
334
|
+
// (scroll-view/shared.ts), but AnimatedScrollView talks to the raw primitive directly and
|
|
335
|
+
// must apply it too.
|
|
285
336
|
//
|
|
286
|
-
// scrollViewBaseStyle (overflow: 'scroll' + the per-axis flexDirection) is the
|
|
287
|
-
//
|
|
288
|
-
//
|
|
289
|
-
//
|
|
290
|
-
//
|
|
291
|
-
//
|
|
292
|
-
// (symbiote-scroll-view/symbiote-scroll-content, not the horizontal variants), so
|
|
293
|
-
// selectScrollIntrinsics is always called with isHorizontal=false here — matching what the
|
|
294
|
-
// template can actually render.
|
|
337
|
+
// scrollViewBaseStyle (overflow: 'scroll' + the per-axis flexDirection) is the other thing the
|
|
338
|
+
// real ScrollView applies that this bespoke template used to skip — without it, iOS Fabric
|
|
339
|
+
// never clips content to the scroll view's frame (invisible on Android, whose native ViewGroup
|
|
340
|
+
// clips regardless of style). This wrapper has no `horizontal` input and its template is
|
|
341
|
+
// hardcoded to the vertical intrinsics, so selectScrollIntrinsics is always called with
|
|
342
|
+
// isHorizontal=false here, matching what the template can actually render.
|
|
295
343
|
get reducedProps() {
|
|
296
344
|
const reduced = super.reducedProps;
|
|
297
345
|
const { scrollViewBaseStyle } = selectScrollIntrinsics(false, undefined);
|
|
@@ -310,8 +358,8 @@ export class AnimatedScrollView extends AnimatedComponentBase {
|
|
|
310
358
|
const { contentStyle } = selectScrollIntrinsics(false, undefined);
|
|
311
359
|
return { style: contentStyle, collapsable: false };
|
|
312
360
|
}
|
|
313
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.
|
|
314
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.
|
|
361
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AnimatedScrollView, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
362
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "22.0.8", type: AnimatedScrollView, isStandalone: true, selector: "AnimatedScrollView, symbiote-animated-scroll-view", inputs: { style: "style", animatedProps: "animatedProps", passthroughAnimatedPropExplicitValues: "passthroughAnimatedPropExplicitValues" }, usesInheritance: true, hostDirectives: [{ directive: i1.SymbioteStyleInputDirective, inputs: ["style", "style"] }], ngImport: i0, template: `
|
|
315
363
|
<symbiote-scroll-view [symbioteHostProps]="reducedProps">
|
|
316
364
|
<symbiote-scroll-content [symbioteHostProps]="contentProps">
|
|
317
365
|
<ng-content></ng-content>
|
|
@@ -319,11 +367,14 @@ export class AnimatedScrollView extends AnimatedComponentBase {
|
|
|
319
367
|
</symbiote-scroll-view>
|
|
320
368
|
`, isInline: true, dependencies: [{ kind: "directive", type: SymbioteHostPropsDirective, selector: "[symbioteHostProps]", inputs: ["symbioteHostProps"], exportAs: ["symbioteHost"] }, { kind: "component", type: ScrollViewHost, selector: "symbiote-scroll-view" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
321
369
|
}
|
|
322
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.
|
|
370
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImport: i0, type: AnimatedScrollView, decorators: [{
|
|
323
371
|
type: Component,
|
|
324
372
|
args: [{
|
|
325
373
|
selector: 'AnimatedScrollView, symbiote-animated-scroll-view',
|
|
326
374
|
standalone: true,
|
|
375
|
+
hostDirectives: [
|
|
376
|
+
{ directive: SymbioteStyleInputDirective, inputs: ['style'] },
|
|
377
|
+
],
|
|
327
378
|
schemas: [CUSTOM_ELEMENTS_SCHEMA],
|
|
328
379
|
imports: [SymbioteHostPropsDirective, ScrollViewHost],
|
|
329
380
|
inputs: ANIMATED_INPUTS,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-animated-component.js","sourceRoot":"","sources":["../../../../src/modules/animated/create-animated-component.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"create-animated-component.js","sourceRoot":"","sources":["../../../../src/modules/animated/create-animated-component.ts"],"names":[],"mappings":"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"}
|