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.
Files changed (90) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +134 -0
  3. package/android/build.gradle +59 -0
  4. package/android/src/main/AndroidManifest.xml +3 -0
  5. package/android/src/main/java/com/melivalesca/morphcard/MorphCardModule.kt +120 -0
  6. package/android/src/main/java/com/melivalesca/morphcard/MorphCardPackage.kt +42 -0
  7. package/android/src/main/java/com/melivalesca/morphcard/MorphCardSourceManager.kt +40 -0
  8. package/android/src/main/java/com/melivalesca/morphcard/MorphCardSourceView.kt +755 -0
  9. package/android/src/main/java/com/melivalesca/morphcard/MorphCardTargetManager.kt +48 -0
  10. package/android/src/main/java/com/melivalesca/morphcard/MorphCardTargetView.kt +159 -0
  11. package/android/src/main/java/com/melivalesca/morphcard/MorphCardViewRegistry.kt +24 -0
  12. package/android/src/main/jni/CMakeLists.txt +62 -0
  13. package/common/cpp/react/renderer/components/morphcard/RNCMorphCardState.h +30 -0
  14. package/ios/Fabric/RNCMorphCardSourceComponentView.h +25 -0
  15. package/ios/Fabric/RNCMorphCardSourceComponentView.mm +582 -0
  16. package/ios/Fabric/RNCMorphCardTargetComponentView.h +20 -0
  17. package/ios/Fabric/RNCMorphCardTargetComponentView.mm +99 -0
  18. package/ios/RNCMorphCardModule.h +14 -0
  19. package/ios/RNCMorphCardModule.mm +126 -0
  20. package/ios/RNCMorphCardSource.h +23 -0
  21. package/ios/RNCMorphCardSource.m +144 -0
  22. package/ios/RNCMorphCardSourceManager.h +5 -0
  23. package/ios/RNCMorphCardSourceManager.m +17 -0
  24. package/ios/RNCMorphCardTarget.h +19 -0
  25. package/ios/RNCMorphCardTarget.m +27 -0
  26. package/ios/RNCMorphCardTargetManager.h +5 -0
  27. package/ios/RNCMorphCardTargetManager.m +16 -0
  28. package/ios/RNCMorphCardViewRegistry.h +35 -0
  29. package/ios/RNCMorphCardViewRegistry.m +40 -0
  30. package/lib/commonjs/MorphCard.types.js +6 -0
  31. package/lib/commonjs/MorphCard.types.js.map +1 -0
  32. package/lib/commonjs/MorphCardSource.js +95 -0
  33. package/lib/commonjs/MorphCardSource.js.map +1 -0
  34. package/lib/commonjs/MorphCardTarget.js +83 -0
  35. package/lib/commonjs/MorphCardTarget.js.map +1 -0
  36. package/lib/commonjs/index.js +45 -0
  37. package/lib/commonjs/index.js.map +1 -0
  38. package/lib/commonjs/package.json +1 -0
  39. package/lib/commonjs/specs/NativeMorphCardModule.js +9 -0
  40. package/lib/commonjs/specs/NativeMorphCardModule.js.map +1 -0
  41. package/lib/commonjs/specs/NativeMorphCardSource.js +10 -0
  42. package/lib/commonjs/specs/NativeMorphCardSource.js.map +1 -0
  43. package/lib/commonjs/specs/NativeMorphCardTarget.js +10 -0
  44. package/lib/commonjs/specs/NativeMorphCardTarget.js.map +1 -0
  45. package/lib/commonjs/useMorphTarget.js +28 -0
  46. package/lib/commonjs/useMorphTarget.js.map +1 -0
  47. package/lib/module/MorphCard.types.js +4 -0
  48. package/lib/module/MorphCard.types.js.map +1 -0
  49. package/lib/module/MorphCardSource.js +85 -0
  50. package/lib/module/MorphCardSource.js.map +1 -0
  51. package/lib/module/MorphCardTarget.js +76 -0
  52. package/lib/module/MorphCardTarget.js.map +1 -0
  53. package/lib/module/index.js +6 -0
  54. package/lib/module/index.js.map +1 -0
  55. package/lib/module/package.json +1 -0
  56. package/lib/module/specs/NativeMorphCardModule.js +5 -0
  57. package/lib/module/specs/NativeMorphCardModule.js.map +1 -0
  58. package/lib/module/specs/NativeMorphCardSource.js +5 -0
  59. package/lib/module/specs/NativeMorphCardSource.js.map +1 -0
  60. package/lib/module/specs/NativeMorphCardTarget.js +5 -0
  61. package/lib/module/specs/NativeMorphCardTarget.js.map +1 -0
  62. package/lib/module/useMorphTarget.js +22 -0
  63. package/lib/module/useMorphTarget.js.map +1 -0
  64. package/lib/typescript/src/MorphCard.types.d.ts +29 -0
  65. package/lib/typescript/src/MorphCard.types.d.ts.map +1 -0
  66. package/lib/typescript/src/MorphCardSource.d.ts +35 -0
  67. package/lib/typescript/src/MorphCardSource.d.ts.map +1 -0
  68. package/lib/typescript/src/MorphCardTarget.d.ts +20 -0
  69. package/lib/typescript/src/MorphCardTarget.d.ts.map +1 -0
  70. package/lib/typescript/src/index.d.ts +6 -0
  71. package/lib/typescript/src/index.d.ts.map +1 -0
  72. package/lib/typescript/src/specs/NativeMorphCardModule.d.ts +14 -0
  73. package/lib/typescript/src/specs/NativeMorphCardModule.d.ts.map +1 -0
  74. package/lib/typescript/src/specs/NativeMorphCardSource.d.ts +13 -0
  75. package/lib/typescript/src/specs/NativeMorphCardSource.d.ts.map +1 -0
  76. package/lib/typescript/src/specs/NativeMorphCardTarget.d.ts +25 -0
  77. package/lib/typescript/src/specs/NativeMorphCardTarget.d.ts.map +1 -0
  78. package/lib/typescript/src/useMorphTarget.d.ts +16 -0
  79. package/lib/typescript/src/useMorphTarget.d.ts.map +1 -0
  80. package/package.json +101 -0
  81. package/react-native-morph-card.podspec +41 -0
  82. package/react-native.config.js +13 -0
  83. package/src/MorphCard.types.ts +29 -0
  84. package/src/MorphCardSource.tsx +105 -0
  85. package/src/MorphCardTarget.tsx +127 -0
  86. package/src/index.tsx +10 -0
  87. package/src/specs/NativeMorphCardModule.ts +21 -0
  88. package/src/specs/NativeMorphCardSource.ts +20 -0
  89. package/src/specs/NativeMorphCardTarget.ts +38 -0
  90. 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":";;;;;;AAAA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAUA,IAAAE,sBAAA,GAAAC,sBAAA,CAAAH,OAAA;AAAkE,IAAAI,WAAA,GAAAJ,OAAA;AAAA,SAAAG,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAAA,SAAAN,wBAAAM,CAAA,EAAAG,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAV,uBAAA,YAAAA,CAAAM,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;AAElE,IAAIgB,gBAOH;AAED,IAAI;EACFA,gBAAgB,GAAG,IAAAC,mCAAsB,EAAC,oBAAoB,CAAC;AACjE,CAAC,CAAC,MAAM;EACND,gBAAgB,GAAGE,iBAAI;AACzB;AAmBO,MAAMC,eAAe,GAAGA,CAAC;EAC9BC,SAAS;EACTC,KAAK;EACLC,MAAM;EACNC,YAAY;EACZC,cAAc;EACdC,eAAe;EACfC,KAAK;EACL,GAAGC;AACiB,CAAC,KAAK;EAC1B,MAAMC,SAAS,GAAGtC,KAAK,CAACuC,MAAM,CAAM,IAAI,CAAC;EACzC,MAAMC,WAAW,GAAGxC,KAAK,CAACuC,MAAM,CAAC,KAAK,CAAC;EACvC,MAAM,CAACE,UAAU,EAAEC,aAAa,CAAC,GAAG1C,KAAK,CAAC2C,QAAQ,CAGxC,IAAI,CAAC;;EAEf;EACA3C,KAAK,CAAC4C,SAAS,CAAC,MAAM;IACpB,IAAIC,SAAS,GAAG,KAAK;IACrB,IAAIf,SAAS,KAAKC,KAAK,IAAI,IAAI,IAAIC,MAAM,IAAI,IAAI,CAAC,EAAE;MAClDc,8BAAqB,CAACC,aAAa,CAACjB,SAAS,CAAC,CAC3CkB,IAAI,CAAEC,IAAuC,IAAK;QACjD,IAAI,CAACJ,SAAS,EAAEH,aAAa,CAACO,IAAI,CAAC;MACrC,CAAC,CAAC,CACDC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACpB;IACA,OAAO,MAAM;MACXL,SAAS,GAAG,IAAI;IAClB,CAAC;EACH,CAAC,EAAE,CAACf,SAAS,EAAEC,KAAK,EAAEC,MAAM,CAAC,CAAC;;EAE9B;EACA,MAAMmB,YAAY,GAAGnD,KAAK,CAACoD,WAAW,CACnC7C,CAAoB,IAAK;IACxB,IAAIiC,WAAW,CAACa,OAAO,EAAE;IACzB,IAAI,CAACvB,SAAS,EAAE;IAEhB,MAAM;MAAEC,KAAK,EAAEuB,EAAE;MAAEtB,MAAM,EAAEuB;IAAG,CAAC,GAAGhD,CAAC,CAACiD,WAAW,CAACC,MAAM;IACtD,MAAMC,SAAS,GAAG,IAAAC,2BAAc,EAACrB,SAAS,CAACe,OAAO,CAAC;IACnD,IAAI,CAACK,SAAS,EAAE;IAEhBlB,WAAW,CAACa,OAAO,GAAG,IAAI;IAE1BP,8BAAqB,CAACc,eAAe,CACnC9B,SAAS,EACTwB,EAAE,EACFC,EAAE,EACFtB,YAAY,IAAI,IAAI,GAAGA,YAAY,GAAG,CAAC,CAAC,EACxCC,cAAc,IAAI,CAAC,EACnBC,eAAe,IAAI,KACrB,CAAC;IACDW,8BAAqB,CAACe,MAAM,CAAC/B,SAAS,EAAE4B,SAAS,CAAC;EACpD,CAAC,EACD,CAAC5B,SAAS,EAAEG,YAAY,EAAEC,cAAc,EAAEC,eAAe,CAC3D,CAAC;EAED,MAAM2B,SAAoB,GAAG,CAAC,CAAC;EAC/B,IAAI/B,KAAK,IAAI,IAAI,EAAE;IACjB+B,SAAS,CAAC/B,KAAK,GAAGA,KAAK;EACzB,CAAC,MAAM,IAAIU,UAAU,EAAE;IACrBqB,SAAS,CAAC/B,KAAK,GAAGU,UAAU,CAACV,KAAK;EACpC;EACA,IAAIC,MAAM,IAAI,IAAI,EAAE;IAClB8B,SAAS,CAAC9B,MAAM,GAAGA,MAAM;EAC3B,CAAC,MAAM,IAAIS,UAAU,EAAE;IACrBqB,SAAS,CAAC9B,MAAM,GAAGS,UAAU,CAACT,MAAM;EACtC;EAEA,oBACE,IAAA1B,WAAA,CAAAyD,GAAA,EAACrC,gBAAgB;IACfsC,GAAG,EAAE1B,SAAU;IACfR,SAAS,EAAEA,SAAU;IACrBmC,WAAW,EAAE,CAAE;IACfC,YAAY,EAAE,CAAE;IAChBC,kBAAkB,EAAElC,YAAY,IAAI,IAAI,GAAGA,YAAY,GAAG,CAAC,CAAE;IAC7DG,KAAK,EAAE,CAACA,KAAK,EAAE0B,SAAS,CAAE;IAC1BM,QAAQ,EAAEjB,YAAa;IAAA,GACnBd;EAAI,CACT,CAAC;AAEN,CAAC;AAACgC,OAAA,CAAAxC,eAAA,GAAAA,eAAA","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,4 @@
1
+ "use strict";
2
+
3
+ export {};
4
+ //# sourceMappingURL=MorphCard.types.js.map
@@ -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,6 @@
1
+ "use strict";
2
+
3
+ export { MorphCardSource, morphExpand, morphCollapse, getViewTag } from './MorphCardSource';
4
+ export { MorphCardTarget } from './MorphCardTarget';
5
+ export { useMorphTarget } from './useMorphTarget';
6
+ //# sourceMappingURL=index.js.map
@@ -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,5 @@
1
+ "use strict";
2
+
3
+ import { TurboModuleRegistry } from 'react-native';
4
+ export default TurboModuleRegistry.getEnforcing('RNCMorphCardModule');
5
+ //# sourceMappingURL=NativeMorphCardModule.js.map
@@ -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,5 @@
1
+ "use strict";
2
+
3
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
4
+ export default codegenNativeComponent('RNCMorphCardSource');
5
+ //# sourceMappingURL=NativeMorphCardSource.js.map
@@ -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,5 @@
1
+ "use strict";
2
+
3
+ import codegenNativeComponent from 'react-native/Libraries/Utilities/codegenNativeComponent';
4
+ export default codegenNativeComponent('RNCMorphCardTarget');
5
+ //# sourceMappingURL=NativeMorphCardTarget.js.map
@@ -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"}