react-native-morph-card 0.1.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/LICENSE +21 -0
- package/README.md +134 -0
- package/android/build.gradle +59 -0
- package/android/src/main/AndroidManifest.xml +3 -0
- package/android/src/main/java/com/melivalesca/morphcard/MorphCardModule.kt +120 -0
- package/android/src/main/java/com/melivalesca/morphcard/MorphCardPackage.kt +42 -0
- package/android/src/main/java/com/melivalesca/morphcard/MorphCardSourceManager.kt +40 -0
- package/android/src/main/java/com/melivalesca/morphcard/MorphCardSourceView.kt +755 -0
- package/android/src/main/java/com/melivalesca/morphcard/MorphCardTargetManager.kt +48 -0
- package/android/src/main/java/com/melivalesca/morphcard/MorphCardTargetView.kt +159 -0
- package/android/src/main/java/com/melivalesca/morphcard/MorphCardViewRegistry.kt +24 -0
- package/android/src/main/jni/CMakeLists.txt +62 -0
- package/common/cpp/react/renderer/components/morphcard/RNCMorphCardState.h +30 -0
- package/ios/Fabric/RNCMorphCardSourceComponentView.h +25 -0
- package/ios/Fabric/RNCMorphCardSourceComponentView.mm +582 -0
- package/ios/Fabric/RNCMorphCardTargetComponentView.h +20 -0
- package/ios/Fabric/RNCMorphCardTargetComponentView.mm +99 -0
- package/ios/RNCMorphCardModule.h +14 -0
- package/ios/RNCMorphCardModule.mm +126 -0
- package/ios/RNCMorphCardSource.h +23 -0
- package/ios/RNCMorphCardSource.m +144 -0
- package/ios/RNCMorphCardSourceManager.h +5 -0
- package/ios/RNCMorphCardSourceManager.m +17 -0
- package/ios/RNCMorphCardTarget.h +19 -0
- package/ios/RNCMorphCardTarget.m +27 -0
- package/ios/RNCMorphCardTargetManager.h +5 -0
- package/ios/RNCMorphCardTargetManager.m +16 -0
- package/ios/RNCMorphCardViewRegistry.h +35 -0
- package/ios/RNCMorphCardViewRegistry.m +40 -0
- package/lib/commonjs/MorphCard.types.js +6 -0
- package/lib/commonjs/MorphCard.types.js.map +1 -0
- package/lib/commonjs/MorphCardSource.js +95 -0
- package/lib/commonjs/MorphCardSource.js.map +1 -0
- package/lib/commonjs/MorphCardTarget.js +83 -0
- package/lib/commonjs/MorphCardTarget.js.map +1 -0
- package/lib/commonjs/index.js +45 -0
- package/lib/commonjs/index.js.map +1 -0
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/specs/NativeMorphCardModule.js +9 -0
- package/lib/commonjs/specs/NativeMorphCardModule.js.map +1 -0
- package/lib/commonjs/specs/NativeMorphCardSource.js +10 -0
- package/lib/commonjs/specs/NativeMorphCardSource.js.map +1 -0
- package/lib/commonjs/specs/NativeMorphCardTarget.js +10 -0
- package/lib/commonjs/specs/NativeMorphCardTarget.js.map +1 -0
- package/lib/commonjs/useMorphTarget.js +28 -0
- package/lib/commonjs/useMorphTarget.js.map +1 -0
- package/lib/module/MorphCard.types.js +4 -0
- package/lib/module/MorphCard.types.js.map +1 -0
- package/lib/module/MorphCardSource.js +85 -0
- package/lib/module/MorphCardSource.js.map +1 -0
- package/lib/module/MorphCardTarget.js +76 -0
- package/lib/module/MorphCardTarget.js.map +1 -0
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -0
- package/lib/module/package.json +1 -0
- package/lib/module/specs/NativeMorphCardModule.js +5 -0
- package/lib/module/specs/NativeMorphCardModule.js.map +1 -0
- package/lib/module/specs/NativeMorphCardSource.js +5 -0
- package/lib/module/specs/NativeMorphCardSource.js.map +1 -0
- package/lib/module/specs/NativeMorphCardTarget.js +5 -0
- package/lib/module/specs/NativeMorphCardTarget.js.map +1 -0
- package/lib/module/useMorphTarget.js +22 -0
- package/lib/module/useMorphTarget.js.map +1 -0
- package/lib/typescript/src/MorphCard.types.d.ts +29 -0
- package/lib/typescript/src/MorphCard.types.d.ts.map +1 -0
- package/lib/typescript/src/MorphCardSource.d.ts +35 -0
- package/lib/typescript/src/MorphCardSource.d.ts.map +1 -0
- package/lib/typescript/src/MorphCardTarget.d.ts +20 -0
- package/lib/typescript/src/MorphCardTarget.d.ts.map +1 -0
- package/lib/typescript/src/index.d.ts +6 -0
- package/lib/typescript/src/index.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeMorphCardModule.d.ts +14 -0
- package/lib/typescript/src/specs/NativeMorphCardModule.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeMorphCardSource.d.ts +13 -0
- package/lib/typescript/src/specs/NativeMorphCardSource.d.ts.map +1 -0
- package/lib/typescript/src/specs/NativeMorphCardTarget.d.ts +25 -0
- package/lib/typescript/src/specs/NativeMorphCardTarget.d.ts.map +1 -0
- package/lib/typescript/src/useMorphTarget.d.ts +16 -0
- package/lib/typescript/src/useMorphTarget.d.ts.map +1 -0
- package/package.json +101 -0
- package/react-native-morph-card.podspec +41 -0
- package/react-native.config.js +13 -0
- package/src/MorphCard.types.ts +29 -0
- package/src/MorphCardSource.tsx +105 -0
- package/src/MorphCardTarget.tsx +127 -0
- package/src/index.tsx +10 -0
- package/src/specs/NativeMorphCardModule.ts +21 -0
- package/src/specs/NativeMorphCardSource.ts +20 -0
- package/src/specs/NativeMorphCardTarget.ts +38 -0
- package/src/useMorphTarget.ts +21 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.MorphCardTarget = void 0;
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _reactNative = require("react-native");
|
|
9
|
+
var _NativeMorphCardModule = _interopRequireDefault(require("./specs/NativeMorphCardModule"));
|
|
10
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
12
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
13
|
+
let NativeTargetView;
|
|
14
|
+
try {
|
|
15
|
+
NativeTargetView = (0, _reactNative.requireNativeComponent)('RNCMorphCardTarget');
|
|
16
|
+
} catch {
|
|
17
|
+
NativeTargetView = _reactNative.View;
|
|
18
|
+
}
|
|
19
|
+
const MorphCardTarget = ({
|
|
20
|
+
sourceTag,
|
|
21
|
+
width,
|
|
22
|
+
height,
|
|
23
|
+
borderRadius,
|
|
24
|
+
contentOffsetY,
|
|
25
|
+
contentCentered,
|
|
26
|
+
style,
|
|
27
|
+
...rest
|
|
28
|
+
}) => {
|
|
29
|
+
const nativeRef = React.useRef(null);
|
|
30
|
+
const expandedRef = React.useRef(false);
|
|
31
|
+
const [sourceSize, setSourceSize] = React.useState(null);
|
|
32
|
+
|
|
33
|
+
// Fetch source size for auto-sizing when width/height not provided
|
|
34
|
+
React.useEffect(() => {
|
|
35
|
+
let cancelled = false;
|
|
36
|
+
if (sourceTag && (width == null || height == null)) {
|
|
37
|
+
_NativeMorphCardModule.default.getSourceSize(sourceTag).then(size => {
|
|
38
|
+
if (!cancelled) setSourceSize(size);
|
|
39
|
+
}).catch(() => {});
|
|
40
|
+
}
|
|
41
|
+
return () => {
|
|
42
|
+
cancelled = true;
|
|
43
|
+
};
|
|
44
|
+
}, [sourceTag, width, height]);
|
|
45
|
+
|
|
46
|
+
// Use onLayout to get resolved pixel dimensions, then trigger expand
|
|
47
|
+
const handleLayout = React.useCallback(e => {
|
|
48
|
+
if (expandedRef.current) return;
|
|
49
|
+
if (!sourceTag) return;
|
|
50
|
+
const {
|
|
51
|
+
width: lw,
|
|
52
|
+
height: lh
|
|
53
|
+
} = e.nativeEvent.layout;
|
|
54
|
+
const targetTag = (0, _reactNative.findNodeHandle)(nativeRef.current);
|
|
55
|
+
if (!targetTag) return;
|
|
56
|
+
expandedRef.current = true;
|
|
57
|
+
_NativeMorphCardModule.default.setTargetConfig(sourceTag, lw, lh, borderRadius != null ? borderRadius : -1, contentOffsetY ?? 0, contentCentered ?? false);
|
|
58
|
+
_NativeMorphCardModule.default.expand(sourceTag, targetTag);
|
|
59
|
+
}, [sourceTag, borderRadius, contentOffsetY, contentCentered]);
|
|
60
|
+
const sizeStyle = {};
|
|
61
|
+
if (width != null) {
|
|
62
|
+
sizeStyle.width = width;
|
|
63
|
+
} else if (sourceSize) {
|
|
64
|
+
sizeStyle.width = sourceSize.width;
|
|
65
|
+
}
|
|
66
|
+
if (height != null) {
|
|
67
|
+
sizeStyle.height = height;
|
|
68
|
+
} else if (sourceSize) {
|
|
69
|
+
sizeStyle.height = sourceSize.height;
|
|
70
|
+
}
|
|
71
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(NativeTargetView, {
|
|
72
|
+
ref: nativeRef,
|
|
73
|
+
sourceTag: sourceTag,
|
|
74
|
+
targetWidth: 0,
|
|
75
|
+
targetHeight: 0,
|
|
76
|
+
targetBorderRadius: borderRadius != null ? borderRadius : -1,
|
|
77
|
+
style: [style, sizeStyle],
|
|
78
|
+
onLayout: handleLayout,
|
|
79
|
+
...rest
|
|
80
|
+
});
|
|
81
|
+
};
|
|
82
|
+
exports.MorphCardTarget = MorphCardTarget;
|
|
83
|
+
//# sourceMappingURL=MorphCardTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","_interopRequireWildcard","require","_reactNative","_NativeMorphCardModule","_interopRequireDefault","_jsxRuntime","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","NativeTargetView","requireNativeComponent","View","MorphCardTarget","sourceTag","width","height","borderRadius","contentOffsetY","contentCentered","style","rest","nativeRef","useRef","expandedRef","sourceSize","setSourceSize","useState","useEffect","cancelled","NativeMorphCardModule","getSourceSize","then","size","catch","handleLayout","useCallback","current","lw","lh","nativeEvent","layout","targetTag","findNodeHandle","setTargetConfig","expand","sizeStyle","jsx","ref","targetWidth","targetHeight","targetBorderRadius","onLayout","exports"],"sourceRoot":"../../src","sources":["MorphCardTarget.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "MorphCardSource", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _MorphCardSource.MorphCardSource;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(exports, "MorphCardTarget", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () {
|
|
15
|
+
return _MorphCardTarget.MorphCardTarget;
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(exports, "getViewTag", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _MorphCardSource.getViewTag;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(exports, "morphCollapse", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return _MorphCardSource.morphCollapse;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
Object.defineProperty(exports, "morphExpand", {
|
|
31
|
+
enumerable: true,
|
|
32
|
+
get: function () {
|
|
33
|
+
return _MorphCardSource.morphExpand;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
Object.defineProperty(exports, "useMorphTarget", {
|
|
37
|
+
enumerable: true,
|
|
38
|
+
get: function () {
|
|
39
|
+
return _useMorphTarget.useMorphTarget;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
var _MorphCardSource = require("./MorphCardSource");
|
|
43
|
+
var _MorphCardTarget = require("./MorphCardTarget");
|
|
44
|
+
var _useMorphTarget = require("./useMorphTarget");
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_MorphCardSource","require","_MorphCardTarget","_useMorphTarget"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,gBAAA,GAAAC,OAAA;AAOA,IAAAC,gBAAA,GAAAD,OAAA;AAEA,IAAAE,eAAA,GAAAF,OAAA","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"commonjs"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _reactNative = require("react-native");
|
|
8
|
+
var _default = exports.default = _reactNative.TurboModuleRegistry.getEnforcing('RNCMorphCardModule');
|
|
9
|
+
//# sourceMappingURL=NativeMorphCardModule.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_default","exports","default","TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeMorphCardModule.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAAmD,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAmBpCC,gCAAmB,CAACC,YAAY,CAAO,oBAAoB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _codegenNativeComponent = _interopRequireDefault(require("react-native/Libraries/Utilities/codegenNativeComponent"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
var _default = exports.default = (0, _codegenNativeComponent.default)('RNCMorphCardSource');
|
|
10
|
+
//# sourceMappingURL=NativeMorphCardSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../../src","sources":["specs/NativeMorphCardSource.ts"],"mappings":";;;;;;AAMA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GAW9E,IAAAG,+BAAsB,EACnC,oBACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _codegenNativeComponent = _interopRequireDefault(require("react-native/Libraries/Utilities/codegenNativeComponent"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
var _default = exports.default = (0, _codegenNativeComponent.default)('RNCMorphCardTarget');
|
|
10
|
+
//# sourceMappingURL=NativeMorphCardTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sourceRoot":"../../../src","sources":["specs/NativeMorphCardTarget.ts"],"mappings":";;;;;;AAMA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GA6B9E,IAAAG,+BAAsB,EACnC,oBACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.useMorphTarget = useMorphTarget;
|
|
7
|
+
var React = _interopRequireWildcard(require("react"));
|
|
8
|
+
var _NativeMorphCardModule = _interopRequireDefault(require("./specs/NativeMorphCardModule"));
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
10
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
|
|
11
|
+
/**
|
|
12
|
+
* Hook for detail screens using MorphCardTarget.
|
|
13
|
+
*
|
|
14
|
+
* Returns a `dismiss()` that collapses the morph and navigates back.
|
|
15
|
+
*/
|
|
16
|
+
function useMorphTarget({
|
|
17
|
+
sourceTag,
|
|
18
|
+
navigation
|
|
19
|
+
}) {
|
|
20
|
+
const dismiss = React.useCallback(async () => {
|
|
21
|
+
await _NativeMorphCardModule.default.collapse(sourceTag);
|
|
22
|
+
navigation.goBack();
|
|
23
|
+
}, [sourceTag, navigation]);
|
|
24
|
+
return {
|
|
25
|
+
dismiss
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=useMorphTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","_interopRequireWildcard","require","_NativeMorphCardModule","_interopRequireDefault","e","__esModule","default","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useMorphTarget","sourceTag","navigation","dismiss","useCallback","NativeMorphCardModule","collapse","goBack"],"sourceRoot":"../../src","sources":["useMorphTarget.ts"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,sBAAA,GAAAC,sBAAA,CAAAF,OAAA;AAAkE,SAAAE,uBAAAC,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAJ,wBAAAI,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAR,uBAAA,YAAAA,CAAAI,CAAA,EAAAG,CAAA,SAAAA,CAAA,IAAAH,CAAA,IAAAA,CAAA,CAAAC,UAAA,SAAAD,CAAA,MAAAO,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAR,OAAA,EAAAF,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAS,CAAA,MAAAF,CAAA,GAAAJ,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAE,CAAA,CAAAI,GAAA,CAAAX,CAAA,UAAAO,CAAA,CAAAK,GAAA,CAAAZ,CAAA,GAAAO,CAAA,CAAAM,GAAA,CAAAb,CAAA,EAAAS,CAAA,gBAAAN,CAAA,IAAAH,CAAA,gBAAAG,CAAA,OAAAW,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAG,CAAA,OAAAK,CAAA,IAAAD,CAAA,GAAAS,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAG,CAAA,OAAAK,CAAA,CAAAI,GAAA,IAAAJ,CAAA,CAAAK,GAAA,IAAAN,CAAA,CAAAE,CAAA,EAAAN,CAAA,EAAAK,CAAA,IAAAC,CAAA,CAAAN,CAAA,IAAAH,CAAA,CAAAG,CAAA,WAAAM,CAAA,KAAAT,CAAA,EAAAG,CAAA;AAOlE;AACA;AACA;AACA;AACA;AACO,SAASgB,cAAcA,CAAC;EAAEC,SAAS;EAAEC;AAAkC,CAAC,EAAE;EAC/E,MAAMC,OAAO,GAAG3B,KAAK,CAAC4B,WAAW,CAAC,YAAY;IAC5C,MAAMC,8BAAqB,CAACC,QAAQ,CAACL,SAAS,CAAC;IAC/CC,UAAU,CAACK,MAAM,CAAC,CAAC;EACrB,CAAC,EAAE,CAACN,SAAS,EAAEC,UAAU,CAAC,CAAC;EAE3B,OAAO;IAAEC;EAAQ,CAAC;AACpB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../src","sources":["MorphCard.types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { Pressable, View, findNodeHandle } from 'react-native';
|
|
5
|
+
import NativeMorphCardModule from './specs/NativeMorphCardModule';
|
|
6
|
+
import NativeSourceViewSpec from './specs/NativeMorphCardSource';
|
|
7
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
8
|
+
const NativeSourceView = NativeSourceViewSpec ?? View;
|
|
9
|
+
export const MorphCardSource = ({
|
|
10
|
+
children,
|
|
11
|
+
duration = 300,
|
|
12
|
+
width,
|
|
13
|
+
height,
|
|
14
|
+
borderRadius,
|
|
15
|
+
backgroundColor,
|
|
16
|
+
scaleMode,
|
|
17
|
+
onPress,
|
|
18
|
+
ref
|
|
19
|
+
}) => {
|
|
20
|
+
const nativeRef = React.useRef(null);
|
|
21
|
+
React.useImperativeHandle(ref, () => nativeRef.current);
|
|
22
|
+
const style = {};
|
|
23
|
+
if (width != null) style.width = width;
|
|
24
|
+
if (height != null) style.height = height;
|
|
25
|
+
if (borderRadius != null) {
|
|
26
|
+
style.borderRadius = borderRadius;
|
|
27
|
+
style.overflow = 'hidden';
|
|
28
|
+
}
|
|
29
|
+
if (backgroundColor != null) style.backgroundColor = backgroundColor;
|
|
30
|
+
const handlePress = React.useCallback(() => {
|
|
31
|
+
if (!onPress) return;
|
|
32
|
+
const tag = findNodeHandle(nativeRef.current);
|
|
33
|
+
if (tag != null) {
|
|
34
|
+
// Create overlay immediately BEFORE navigation to prevent target screen flash
|
|
35
|
+
NativeMorphCardModule.prepareExpand(tag);
|
|
36
|
+
onPress(tag);
|
|
37
|
+
}
|
|
38
|
+
}, [onPress]);
|
|
39
|
+
const content = /*#__PURE__*/_jsx(NativeSourceView, {
|
|
40
|
+
ref: nativeRef,
|
|
41
|
+
duration: duration,
|
|
42
|
+
scaleMode: scaleMode,
|
|
43
|
+
cardBorderRadius: borderRadius,
|
|
44
|
+
style: style,
|
|
45
|
+
children: children
|
|
46
|
+
});
|
|
47
|
+
if (onPress) {
|
|
48
|
+
return /*#__PURE__*/_jsx(Pressable, {
|
|
49
|
+
onPress: handlePress,
|
|
50
|
+
children: content
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
return content;
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Get the native view tag from a ref. Useful for passing sourceTag
|
|
58
|
+
* to the detail screen via navigation params.
|
|
59
|
+
*/
|
|
60
|
+
export function getViewTag(viewRef) {
|
|
61
|
+
return findNodeHandle(viewRef.current);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Expand: background grows from card bounds to fullscreen while
|
|
66
|
+
* card snapshot moves to targetRef's position. Content fades in at the end.
|
|
67
|
+
*
|
|
68
|
+
* Call this AFTER navigating to the detail screen (so the target is mounted).
|
|
69
|
+
*/
|
|
70
|
+
export async function morphExpand(sourceRef, targetRef) {
|
|
71
|
+
const sourceTag = findNodeHandle(sourceRef.current);
|
|
72
|
+
const targetTag = findNodeHandle(targetRef.current);
|
|
73
|
+
if (!sourceTag || !targetTag) return false;
|
|
74
|
+
return NativeMorphCardModule.expand(sourceTag, targetTag);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Collapse: content fades out, background shrinks from fullscreen back
|
|
79
|
+
* to card bounds while card snapshot moves from target back to card position.
|
|
80
|
+
* Uses the target stored from the last expand call.
|
|
81
|
+
*/
|
|
82
|
+
export async function morphCollapse(sourceTag) {
|
|
83
|
+
return NativeMorphCardModule.collapse(sourceTag);
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=MorphCardSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","Pressable","View","findNodeHandle","NativeMorphCardModule","NativeSourceViewSpec","jsx","_jsx","NativeSourceView","MorphCardSource","children","duration","width","height","borderRadius","backgroundColor","scaleMode","onPress","ref","nativeRef","useRef","useImperativeHandle","current","style","overflow","handlePress","useCallback","tag","prepareExpand","content","cardBorderRadius","getViewTag","viewRef","morphExpand","sourceRef","targetRef","sourceTag","targetTag","expand","morphCollapse","collapse"],"sourceRoot":"../../src","sources":["MorphCardSource.tsx"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,SACEC,SAAS,EAGTC,IAAI,EACJC,cAAc,QACT,cAAc;AACrB,OAAOC,qBAAqB,MAAM,+BAA+B;AACjE,OAAOC,oBAAoB,MAAM,+BAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAEjE,MAAMC,gBAAgB,GAAGH,oBAAoB,IAAIH,IAAI;AAiBrD,OAAO,MAAMO,eAAe,GAAGA,CAAC;EAC9BC,QAAQ;EACRC,QAAQ,GAAG,GAAG;EACdC,KAAK;EACLC,MAAM;EACNC,YAAY;EACZC,eAAe;EACfC,SAAS;EACTC,OAAO;EACPC;AACoB,CAAC,KAAK;EAC1B,MAAMC,SAAS,GAAGnB,KAAK,CAACoB,MAAM,CAAM,IAAI,CAAC;EACzCpB,KAAK,CAACqB,mBAAmB,CAACH,GAAG,EAAE,MAAMC,SAAS,CAACG,OAAO,CAAC;EAEvD,MAAMC,KAAgB,GAAG,CAAC,CAAC;EAC3B,IAAIX,KAAK,IAAI,IAAI,EAAEW,KAAK,CAACX,KAAK,GAAGA,KAA2B;EAC5D,IAAIC,MAAM,IAAI,IAAI,EAAEU,KAAK,CAACV,MAAM,GAAGA,MAA6B;EAChE,IAAIC,YAAY,IAAI,IAAI,EAAE;IACxBS,KAAK,CAACT,YAAY,GAAGA,YAAY;IACjCS,KAAK,CAACC,QAAQ,GAAG,QAAQ;EAC3B;EACA,IAAIT,eAAe,IAAI,IAAI,EAAEQ,KAAK,CAACR,eAAe,GAAGA,eAAe;EACpE,MAAMU,WAAW,GAAGzB,KAAK,CAAC0B,WAAW,CAAC,MAAM;IAC1C,IAAI,CAACT,OAAO,EAAE;IACd,MAAMU,GAAG,GAAGxB,cAAc,CAACgB,SAAS,CAACG,OAAO,CAAC;IAC7C,IAAIK,GAAG,IAAI,IAAI,EAAE;MACf;MACAvB,qBAAqB,CAACwB,aAAa,CAACD,GAAG,CAAC;MACxCV,OAAO,CAACU,GAAG,CAAC;IACd;EACF,CAAC,EAAE,CAACV,OAAO,CAAC,CAAC;EAEb,MAAMY,OAAO,gBACXtB,IAAA,CAACC,gBAAgB;IAACU,GAAG,EAAEC,SAAU;IAACR,QAAQ,EAAEA,QAAS;IAACK,SAAS,EAAEA,SAAU;IAACc,gBAAgB,EAAEhB,YAAa;IAACS,KAAK,EAAEA,KAAM;IAAAb,QAAA,EACtHA;EAAQ,CACO,CACnB;EAED,IAAIO,OAAO,EAAE;IACX,oBAAOV,IAAA,CAACN,SAAS;MAACgB,OAAO,EAAEQ,WAAY;MAAAf,QAAA,EAAEmB;IAAO,CAAY,CAAC;EAC/D;EAEA,OAAOA,OAAO;AAChB,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,SAASE,UAAUA,CAACC,OAA6B,EAAiB;EACvE,OAAO7B,cAAc,CAAC6B,OAAO,CAACV,OAAO,CAAC;AACxC;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeW,WAAWA,CAC/BC,SAA+B,EAC/BC,SAA+B,EACb;EAClB,MAAMC,SAAS,GAAGjC,cAAc,CAAC+B,SAAS,CAACZ,OAAO,CAAC;EACnD,MAAMe,SAAS,GAAGlC,cAAc,CAACgC,SAAS,CAACb,OAAO,CAAC;EACnD,IAAI,CAACc,SAAS,IAAI,CAACC,SAAS,EAAE,OAAO,KAAK;EAC1C,OAAOjC,qBAAqB,CAACkC,MAAM,CAACF,SAAS,EAAEC,SAAS,CAAC;AAC3D;;AAEA;AACA;AACA;AACA;AACA;AACA,OAAO,eAAeE,aAAaA,CAACH,SAAiB,EAAoB;EACvE,OAAOhC,qBAAqB,CAACoC,QAAQ,CAACJ,SAAS,CAAC;AAClD","ignoreList":[]}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import { requireNativeComponent, View, findNodeHandle } from 'react-native';
|
|
5
|
+
import NativeMorphCardModule from './specs/NativeMorphCardModule';
|
|
6
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
|
+
let NativeTargetView;
|
|
8
|
+
try {
|
|
9
|
+
NativeTargetView = requireNativeComponent('RNCMorphCardTarget');
|
|
10
|
+
} catch {
|
|
11
|
+
NativeTargetView = View;
|
|
12
|
+
}
|
|
13
|
+
export const MorphCardTarget = ({
|
|
14
|
+
sourceTag,
|
|
15
|
+
width,
|
|
16
|
+
height,
|
|
17
|
+
borderRadius,
|
|
18
|
+
contentOffsetY,
|
|
19
|
+
contentCentered,
|
|
20
|
+
style,
|
|
21
|
+
...rest
|
|
22
|
+
}) => {
|
|
23
|
+
const nativeRef = React.useRef(null);
|
|
24
|
+
const expandedRef = React.useRef(false);
|
|
25
|
+
const [sourceSize, setSourceSize] = React.useState(null);
|
|
26
|
+
|
|
27
|
+
// Fetch source size for auto-sizing when width/height not provided
|
|
28
|
+
React.useEffect(() => {
|
|
29
|
+
let cancelled = false;
|
|
30
|
+
if (sourceTag && (width == null || height == null)) {
|
|
31
|
+
NativeMorphCardModule.getSourceSize(sourceTag).then(size => {
|
|
32
|
+
if (!cancelled) setSourceSize(size);
|
|
33
|
+
}).catch(() => {});
|
|
34
|
+
}
|
|
35
|
+
return () => {
|
|
36
|
+
cancelled = true;
|
|
37
|
+
};
|
|
38
|
+
}, [sourceTag, width, height]);
|
|
39
|
+
|
|
40
|
+
// Use onLayout to get resolved pixel dimensions, then trigger expand
|
|
41
|
+
const handleLayout = React.useCallback(e => {
|
|
42
|
+
if (expandedRef.current) return;
|
|
43
|
+
if (!sourceTag) return;
|
|
44
|
+
const {
|
|
45
|
+
width: lw,
|
|
46
|
+
height: lh
|
|
47
|
+
} = e.nativeEvent.layout;
|
|
48
|
+
const targetTag = findNodeHandle(nativeRef.current);
|
|
49
|
+
if (!targetTag) return;
|
|
50
|
+
expandedRef.current = true;
|
|
51
|
+
NativeMorphCardModule.setTargetConfig(sourceTag, lw, lh, borderRadius != null ? borderRadius : -1, contentOffsetY ?? 0, contentCentered ?? false);
|
|
52
|
+
NativeMorphCardModule.expand(sourceTag, targetTag);
|
|
53
|
+
}, [sourceTag, borderRadius, contentOffsetY, contentCentered]);
|
|
54
|
+
const sizeStyle = {};
|
|
55
|
+
if (width != null) {
|
|
56
|
+
sizeStyle.width = width;
|
|
57
|
+
} else if (sourceSize) {
|
|
58
|
+
sizeStyle.width = sourceSize.width;
|
|
59
|
+
}
|
|
60
|
+
if (height != null) {
|
|
61
|
+
sizeStyle.height = height;
|
|
62
|
+
} else if (sourceSize) {
|
|
63
|
+
sizeStyle.height = sourceSize.height;
|
|
64
|
+
}
|
|
65
|
+
return /*#__PURE__*/_jsx(NativeTargetView, {
|
|
66
|
+
ref: nativeRef,
|
|
67
|
+
sourceTag: sourceTag,
|
|
68
|
+
targetWidth: 0,
|
|
69
|
+
targetHeight: 0,
|
|
70
|
+
targetBorderRadius: borderRadius != null ? borderRadius : -1,
|
|
71
|
+
style: [style, sizeStyle],
|
|
72
|
+
onLayout: handleLayout,
|
|
73
|
+
...rest
|
|
74
|
+
});
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=MorphCardTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","requireNativeComponent","View","findNodeHandle","NativeMorphCardModule","jsx","_jsx","NativeTargetView","MorphCardTarget","sourceTag","width","height","borderRadius","contentOffsetY","contentCentered","style","rest","nativeRef","useRef","expandedRef","sourceSize","setSourceSize","useState","useEffect","cancelled","getSourceSize","then","size","catch","handleLayout","useCallback","e","current","lw","lh","nativeEvent","layout","targetTag","setTargetConfig","expand","sizeStyle","ref","targetWidth","targetHeight","targetBorderRadius","onLayout"],"sourceRoot":"../../src","sources":["MorphCardTarget.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MorphCardSource","morphExpand","morphCollapse","getViewTag","MorphCardTarget","useMorphTarget"],"sourceRoot":"../../src","sources":["index.tsx"],"mappings":";;AAAA,SACEA,eAAe,EACfC,WAAW,EACXC,aAAa,EACbC,UAAU,QACL,mBAAmB;AAE1B,SAASC,eAAe,QAAQ,mBAAmB;AAEnD,SAASC,cAAc,QAAQ,kBAAkB","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type":"module"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["TurboModuleRegistry","getEnforcing"],"sourceRoot":"../../../src","sources":["specs/NativeMorphCardModule.ts"],"mappings":";;AACA,SAASA,mBAAmB,QAAQ,cAAc;AAmBlD,eAAeA,mBAAmB,CAACC,YAAY,CAAO,oBAAoB,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["codegenNativeComponent"],"sourceRoot":"../../../src","sources":["specs/NativeMorphCardSource.ts"],"mappings":";;AAMA,OAAOA,sBAAsB,MAAM,yDAAyD;AAW5F,eAAeA,sBAAsB,CACnC,oBACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["codegenNativeComponent"],"sourceRoot":"../../../src","sources":["specs/NativeMorphCardTarget.ts"],"mappings":";;AAMA,OAAOA,sBAAsB,MAAM,yDAAyD;AA6B5F,eAAeA,sBAAsB,CACnC,oBACF,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import NativeMorphCardModule from './specs/NativeMorphCardModule';
|
|
5
|
+
/**
|
|
6
|
+
* Hook for detail screens using MorphCardTarget.
|
|
7
|
+
*
|
|
8
|
+
* Returns a `dismiss()` that collapses the morph and navigates back.
|
|
9
|
+
*/
|
|
10
|
+
export function useMorphTarget({
|
|
11
|
+
sourceTag,
|
|
12
|
+
navigation
|
|
13
|
+
}) {
|
|
14
|
+
const dismiss = React.useCallback(async () => {
|
|
15
|
+
await NativeMorphCardModule.collapse(sourceTag);
|
|
16
|
+
navigation.goBack();
|
|
17
|
+
}, [sourceTag, navigation]);
|
|
18
|
+
return {
|
|
19
|
+
dismiss
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=useMorphTarget.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["React","NativeMorphCardModule","useMorphTarget","sourceTag","navigation","dismiss","useCallback","collapse","goBack"],"sourceRoot":"../../src","sources":["useMorphTarget.ts"],"mappings":";;AAAA,OAAO,KAAKA,KAAK,MAAM,OAAO;AAC9B,OAAOC,qBAAqB,MAAM,+BAA+B;AAOjE;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAC;EAAEC,SAAS;EAAEC;AAAkC,CAAC,EAAE;EAC/E,MAAMC,OAAO,GAAGL,KAAK,CAACM,WAAW,CAAC,YAAY;IAC5C,MAAML,qBAAqB,CAACM,QAAQ,CAACJ,SAAS,CAAC;IAC/CC,UAAU,CAACI,MAAM,CAAC,CAAC;EACrB,CAAC,EAAE,CAACL,SAAS,EAAEC,UAAU,CAAC,CAAC;EAE3B,OAAO;IAAEC;EAAQ,CAAC;AACpB","ignoreList":[]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { ViewProps } from 'react-native';
|
|
2
|
+
export interface MorphCardProps extends ViewProps {
|
|
3
|
+
/**
|
|
4
|
+
* Duration of the morph animation in milliseconds. Defaults to 500.
|
|
5
|
+
*/
|
|
6
|
+
duration?: number;
|
|
7
|
+
/**
|
|
8
|
+
* Called when the expand animation begins.
|
|
9
|
+
*/
|
|
10
|
+
onMorphStart?: () => void;
|
|
11
|
+
/**
|
|
12
|
+
* Called when the expand animation completes.
|
|
13
|
+
*/
|
|
14
|
+
onMorphComplete?: () => void;
|
|
15
|
+
/**
|
|
16
|
+
* Called when the collapse animation completes.
|
|
17
|
+
*/
|
|
18
|
+
onDismissComplete?: () => void;
|
|
19
|
+
/**
|
|
20
|
+
* The collapsed card content.
|
|
21
|
+
*/
|
|
22
|
+
renderCollapsed: () => React.ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* The expanded fullscreen content.
|
|
25
|
+
*/
|
|
26
|
+
renderExpanded: (collapse: () => void) => React.ReactNode;
|
|
27
|
+
ref?: React.Ref<any>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=MorphCard.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MorphCard.types.d.ts","sourceRoot":"","sources":["../../../src/MorphCard.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,WAAW,cAAe,SAAQ,SAAS;IAC/C;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B;;OAEG;IACH,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B;;OAEG;IACH,eAAe,EAAE,MAAM,KAAK,CAAC,SAAS,CAAC;IACvC;;OAEG;IACH,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,IAAI,KAAK,KAAK,CAAC,SAAS,CAAC;IAC1D,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACtB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type DimensionValue } from 'react-native';
|
|
3
|
+
export type ScaleMode = 'aspectFill' | 'aspectFit' | 'stretch';
|
|
4
|
+
export interface MorphCardSourceProps {
|
|
5
|
+
ref?: React.Ref<any>;
|
|
6
|
+
duration?: number;
|
|
7
|
+
width?: DimensionValue;
|
|
8
|
+
height?: DimensionValue;
|
|
9
|
+
borderRadius?: number;
|
|
10
|
+
backgroundColor?: string;
|
|
11
|
+
/** How the snapshot scales in no-wrapper mode (no backgroundColor). Default: 'aspectFill' */
|
|
12
|
+
scaleMode?: ScaleMode;
|
|
13
|
+
onPress?: (sourceTag: number) => void;
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
}
|
|
16
|
+
export declare const MorphCardSource: ({ children, duration, width, height, borderRadius, backgroundColor, scaleMode, onPress, ref, }: MorphCardSourceProps) => React.JSX.Element;
|
|
17
|
+
/**
|
|
18
|
+
* Get the native view tag from a ref. Useful for passing sourceTag
|
|
19
|
+
* to the detail screen via navigation params.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getViewTag(viewRef: React.RefObject<any>): number | null;
|
|
22
|
+
/**
|
|
23
|
+
* Expand: background grows from card bounds to fullscreen while
|
|
24
|
+
* card snapshot moves to targetRef's position. Content fades in at the end.
|
|
25
|
+
*
|
|
26
|
+
* Call this AFTER navigating to the detail screen (so the target is mounted).
|
|
27
|
+
*/
|
|
28
|
+
export declare function morphExpand(sourceRef: React.RefObject<any>, targetRef: React.RefObject<any>): Promise<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Collapse: content fades out, background shrinks from fullscreen back
|
|
31
|
+
* to card bounds while card snapshot moves from target back to card position.
|
|
32
|
+
* Uses the target stored from the last expand call.
|
|
33
|
+
*/
|
|
34
|
+
export declare function morphCollapse(sourceTag: number): Promise<boolean>;
|
|
35
|
+
//# sourceMappingURL=MorphCardSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MorphCardSource.d.ts","sourceRoot":"","sources":["../../../src/MorphCardSource.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAGL,KAAK,cAAc,EAGpB,MAAM,cAAc,CAAC;AAMtB,MAAM,MAAM,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,oBAAoB;IACnC,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,6FAA6F;IAC7F,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,eAAO,MAAM,eAAe,GAAI,gGAU7B,oBAAoB,sBAiCtB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,CAEvE;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAC/B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,GAC9B,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEvE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { type StyleProp, type ViewStyle, type DimensionValue } from 'react-native';
|
|
3
|
+
export interface MorphCardTargetProps {
|
|
4
|
+
/** The sourceTag from route params — triggers expand on mount. */
|
|
5
|
+
sourceTag: number;
|
|
6
|
+
/** Optional width override (number or '100%'). If omitted, source width is used. */
|
|
7
|
+
width?: DimensionValue;
|
|
8
|
+
/** Optional height override (number or '100%'). If omitted, source height is used. */
|
|
9
|
+
height?: DimensionValue;
|
|
10
|
+
/** Optional border radius override. If omitted, source border radius is used. Set to 0 for no rounding. */
|
|
11
|
+
borderRadius?: number;
|
|
12
|
+
/** Vertical offset for the content snapshot inside the expanded wrapper (wrapper mode only). */
|
|
13
|
+
contentOffsetY?: number;
|
|
14
|
+
/** Center the content snapshot horizontally inside the expanded wrapper (wrapper mode only). */
|
|
15
|
+
contentCentered?: boolean;
|
|
16
|
+
/** Optional style for positioning (margin, position, etc). */
|
|
17
|
+
style?: StyleProp<ViewStyle>;
|
|
18
|
+
}
|
|
19
|
+
export declare const MorphCardTarget: ({ sourceTag, width, height, borderRadius, contentOffsetY, contentCentered, style, ...rest }: MorphCardTargetProps) => React.JSX.Element;
|
|
20
|
+
//# sourceMappingURL=MorphCardTarget.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MorphCardTarget.d.ts","sourceRoot":"","sources":["../../../src/MorphCardTarget.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAGL,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,cAAc,EAIpB,MAAM,cAAc,CAAC;AAkBtB,MAAM,WAAW,oBAAoB;IACnC,kEAAkE;IAClE,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,sFAAsF;IACtF,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,2GAA2G;IAC3G,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gGAAgG;IAChG,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gGAAgG;IAChG,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8DAA8D;IAC9D,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAED,eAAO,MAAM,eAAe,GAAI,6FAS7B,oBAAoB,sBAwEtB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { MorphCardSource, morphExpand, morphCollapse, getViewTag, } from './MorphCardSource';
|
|
2
|
+
export type { MorphCardSourceProps, ScaleMode } from './MorphCardSource';
|
|
3
|
+
export { MorphCardTarget } from './MorphCardTarget';
|
|
4
|
+
export type { MorphCardTargetProps } from './MorphCardTarget';
|
|
5
|
+
export { useMorphTarget } from './useMorphTarget';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TurboModule } from 'react-native';
|
|
2
|
+
export interface Spec extends TurboModule {
|
|
3
|
+
prepareExpand(sourceTag: number): void;
|
|
4
|
+
expand(sourceTag: number, targetTag: number): Promise<boolean>;
|
|
5
|
+
setTargetConfig(sourceTag: number, targetWidth: number, targetHeight: number, targetBorderRadius: number, contentOffsetY: number, contentCentered: boolean): void;
|
|
6
|
+
collapse(sourceTag: number): Promise<boolean>;
|
|
7
|
+
getSourceSize(sourceTag: number): Promise<{
|
|
8
|
+
width: number;
|
|
9
|
+
height: number;
|
|
10
|
+
}>;
|
|
11
|
+
}
|
|
12
|
+
declare const _default: Spec;
|
|
13
|
+
export default _default;
|
|
14
|
+
//# sourceMappingURL=NativeMorphCardModule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NativeMorphCardModule.d.ts","sourceRoot":"","sources":["../../../../src/specs/NativeMorphCardModule.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,WAAW,IAAK,SAAQ,WAAW;IACvC,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,eAAe,CACb,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,kBAAkB,EAAE,MAAM,EAC1B,cAAc,EAAE,MAAM,EACtB,eAAe,EAAE,OAAO,GACvB,IAAI,CAAC;IACR,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC9C,aAAa,CACX,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;;AAED,wBAA4E"}
|