@tamagui/animations-css 1.22.12 → 1.23.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.
@@ -21,6 +21,7 @@ __export(createAnimations_exports, {
21
21
  createAnimations: () => createAnimations
22
22
  });
23
23
  module.exports = __toCommonJS(createAnimations_exports);
24
+ var import_cubic_bezier_animator = require("@tamagui/cubic-bezier-animator");
24
25
  var import_use_presence = require("@tamagui/use-presence");
25
26
  var import_web = require("@tamagui/web");
26
27
  var import_react = require("react");
@@ -71,6 +72,7 @@ function createAnimations(animations) {
71
72
  const isEntering = !!state.unmounted;
72
73
  const isExiting = (presence == null ? void 0 : presence[0]) === false;
73
74
  const sendExitComplete = presence == null ? void 0 : presence[1];
75
+ const initialPositionRef = (0, import_web.useSafeRef)(null);
74
76
  const animationKey = Array.isArray(props.animation) ? props.animation[0] : props.animation;
75
77
  const animation = animations[animationKey];
76
78
  if (!animation) {
@@ -91,7 +93,32 @@ function createAnimations(animations) {
91
93
  node.addEventListener("transitioncancel", onFinishAnimation);
92
94
  };
93
95
  }, [sendExitComplete, isExiting]);
94
- style.transition = `${keys} ${animation}`;
96
+ (0, import_web.useIsomorphicLayoutEffect)(() => {
97
+ var _a;
98
+ if (!hostRef.current || !props.layout) {
99
+ return;
100
+ }
101
+ const boundingBox = (_a = hostRef.current) == null ? void 0 : _a.getBoundingClientRect();
102
+ if (isChanged(initialPositionRef.current, boundingBox)) {
103
+ const transform = invert(
104
+ hostRef.current,
105
+ boundingBox,
106
+ initialPositionRef.current
107
+ );
108
+ (0, import_cubic_bezier_animator.animate)({
109
+ from: transform,
110
+ to: { x: 0, y: 0, scaleX: 1, scaleY: 1 },
111
+ duration: 1e3,
112
+ onUpdate: ({ x, y, scaleX, scaleY }) => {
113
+ hostRef.current.style.transform = `translate(${x}px, ${y}px) scaleX(${scaleX}) scaleY(${scaleY})`;
114
+ },
115
+ // TODO: extract ease-in from string and convert/map it to a cubicBezier array
116
+ cubicBezier: [0, 1.38, 1, -0.41]
117
+ });
118
+ }
119
+ initialPositionRef.current = boundingBox;
120
+ });
121
+ style.transition = `${keys} ${animation}${props.layout ? ",width 0s, height 0s, margin 0s, padding 0s, transform" : ""}`;
95
122
  if (process.env.NODE_ENV === "development" && props["debug"]) {
96
123
  console.log("CSS animation", style, { isEntering, isExiting });
97
124
  }
@@ -101,6 +128,23 @@ function createAnimations(animations) {
101
128
  }
102
129
  };
103
130
  }
131
+ const isChanged = (initialBox, finalBox) => {
132
+ if (!initialBox || !finalBox)
133
+ return false;
134
+ return JSON.stringify(initialBox) !== JSON.stringify(finalBox);
135
+ };
136
+ const invert = (el, from, to) => {
137
+ const { x: fromX, y: fromY, width: fromWidth, height: fromHeight } = from;
138
+ const { x, y, width, height } = to;
139
+ const transform = {
140
+ x: x - fromX - (fromWidth - width) / 2,
141
+ y: y - fromY - (fromHeight - height) / 2,
142
+ scaleX: width / fromWidth,
143
+ scaleY: height / fromHeight
144
+ };
145
+ el.style.transform = `translate(${transform.x}px, ${transform.y}px) scaleX(${transform.scaleX}) scaleY(${transform.scaleY})`;
146
+ return transform;
147
+ };
104
148
  // Annotate the CommonJS export names for ESM import in node:
105
149
  0 && (module.exports = {
106
150
  createAnimations
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createAnimations.tsx"],
4
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAA4B;AAC5B,iBAMO;AACP,mBAA0C;AAEnC,SAAS,iBAAmC,YAAmC;AACpF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IAEA,kBAAkB,SAA0C;AAC1D,YAAM,CAAC,KAAK,MAAM,QAAI,uBAAS,OAAO;AAEtC,aAAO;AAAA,QACL,cAAc;AACZ,iBAAO;AAAA,QACT;AAAA,QACA,WAAW;AACT,iBAAO;AAAA,QACT;AAAA,QACA,SAAS,MAAM;AACb,iBAAO,IAAI;AAAA,QACb;AAAA,QACA,OAAO;AAAA,QAAC;AAAA,MACV;AAAA,IACF;AAAA,IAEA,0BAA0B,EAAE,SAAS,MAAM,GAAG,SAAS;AAErD,gDAA0B,MAAM;AAC9B,YAAI,CAAC,QAAQ;AAAS;AACtB,cAAM,oBAAoB,CAAC,MAAuB;AAChD,kBAAQ,MAAM,SAAS,CAAC;AAAA,QAC1B;AAEA,cAAM,OAAO,QAAQ;AACrB,aAAK,iBAAiB,mBAAmB,iBAAiB;AAC1D,aAAK,iBAAiB,oBAAoB,iBAAiB;AAC3D,aAAK,iBAAiB,iBAAiB,iBAAiB;AACxD,eAAO,MAAM;AACX,eAAK,oBAAoB,mBAAmB,iBAAiB;AAC7D,eAAK,oBAAoB,oBAAoB,iBAAiB;AAC9D,eAAK,oBAAoB,iBAAiB,iBAAiB;AAAA,QAC7D;AAAA,MACF,GAAG,CAAC,SAAS,OAAO,CAAC;AAAA,IACvB;AAAA,IAEA,uBAAuB,KAAK,UAAU;AACpC,aAAO,SAAS,IAAI,SAAS,CAAC;AAAA,IAChC;AAAA,IAEA,eAAe,CAAC,EAAE,OAAO,UAAU,OAAO,OAAO,QAAQ,MAAM;AAC7D,YAAM,aAAa,CAAC,CAAC,MAAM;AAC3B,YAAM,aAAY,qCAAW,QAAO;AACpC,YAAM,mBAAmB,qCAAW;AACpC,YAAM,eAAe,MAAM,QAAQ,MAAM,SAAS,IAC9C,MAAM,UAAU,CAAC,IACjB,MAAM;AACV,YAAM,YAAY,WAAW,YAAmB;AAChD,UAAI,CAAC,WAAW;AACd,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,MAAM,cAAc,MAAM,YAAY,KAAK,GAAG,IAAI;AAE/D,gDAA0B,MAAM;AAC9B,YAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,QAAQ;AAAS;AACzD,cAAM,OAAO,QAAQ;AACrB,cAAM,oBAAoB,MAAM;AAC9B;AAAA,QACF;AACA,aAAK,iBAAiB,iBAAiB,iBAAiB;AACxD,aAAK,iBAAiB,oBAAoB,iBAAiB;AAC3D,eAAO,MAAM;AACX,eAAK,oBAAoB,iBAAiB,iBAAiB;AAC3D,eAAK,iBAAiB,oBAAoB,iBAAiB;AAAA,QAC7D;AAAA,MACF,GAAG,CAAC,kBAAkB,SAAS,CAAC;AAGhC,YAAM,aAAa,GAAG,QAAQ;AAE9B,UAAI,QAAQ,IAAI,aAAa,iBAAiB,MAAM,OAAO,GAAG;AAE5D,gBAAQ,IAAI,iBAAiB,OAAO,EAAE,YAAY,UAAU,CAAC;AAAA,MAC/D;AAEA,iBAAO,sBAAQ,MAAM;AACnB,eAAO,EAAE,MAAM;AAAA,MAEjB,GAAG,CAAC,KAAK,UAAU,KAAK,CAAC,CAAC;AAAA,IAC5B;AAAA,EACF;AACF;",
4
+ "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAAwB;AACxB,0BAA4B;AAC5B,iBAOO;AACP,mBAAkC;AAE3B,SAAS,iBAAmC,YAAmC;AACpF,SAAO;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IAEA,kBAAkB,SAA0C;AAC1D,YAAM,CAAC,KAAK,MAAM,QAAI,uBAAS,OAAO;AAEtC,aAAO;AAAA,QACL,cAAc;AACZ,iBAAO;AAAA,QACT;AAAA,QACA,WAAW;AACT,iBAAO;AAAA,QACT;AAAA,QACA,SAAS,MAAM;AACb,iBAAO,IAAI;AAAA,QACb;AAAA,QACA,OAAO;AAAA,QAAC;AAAA,MACV;AAAA,IACF;AAAA,IAEA,0BAA0B,EAAE,SAAS,MAAM,GAAG,SAAS;AAErD,gDAA0B,MAAM;AAC9B,YAAI,CAAC,QAAQ;AAAS;AACtB,cAAM,oBAAoB,CAAC,MAAuB;AAChD,kBAAQ,MAAM,SAAS,CAAC;AAAA,QAC1B;AAEA,cAAM,OAAO,QAAQ;AACrB,aAAK,iBAAiB,mBAAmB,iBAAiB;AAC1D,aAAK,iBAAiB,oBAAoB,iBAAiB;AAC3D,aAAK,iBAAiB,iBAAiB,iBAAiB;AACxD,eAAO,MAAM;AACX,eAAK,oBAAoB,mBAAmB,iBAAiB;AAC7D,eAAK,oBAAoB,oBAAoB,iBAAiB;AAC9D,eAAK,oBAAoB,iBAAiB,iBAAiB;AAAA,QAC7D;AAAA,MACF,GAAG,CAAC,SAAS,OAAO,CAAC;AAAA,IACvB;AAAA,IAEA,uBAAuB,KAAK,UAAU;AACpC,aAAO,SAAS,IAAI,SAAS,CAAC;AAAA,IAChC;AAAA,IAEA,eAAe,CAAC,EAAE,OAAO,UAAU,OAAO,OAAO,QAAQ,MAAM;AAC7D,YAAM,aAAa,CAAC,CAAC,MAAM;AAC3B,YAAM,aAAY,qCAAW,QAAO;AACpC,YAAM,mBAAmB,qCAAW;AACpC,YAAM,yBAAqB,uBAAgB,IAAI;AAC/C,YAAM,eAAe,MAAM,QAAQ,MAAM,SAAS,IAC9C,MAAM,UAAU,CAAC,IACjB,MAAM;AACV,YAAM,YAAY,WAAW,YAAmB;AAChD,UAAI,CAAC,WAAW;AACd,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,MAAM,cAAc,MAAM,YAAY,KAAK,GAAG,IAAI;AAE/D,gDAA0B,MAAM;AAC9B,YAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,QAAQ;AAAS;AACzD,cAAM,OAAO,QAAQ;AACrB,cAAM,oBAAoB,MAAM;AAC9B;AAAA,QACF;AACA,aAAK,iBAAiB,iBAAiB,iBAAiB;AACxD,aAAK,iBAAiB,oBAAoB,iBAAiB;AAC3D,eAAO,MAAM;AACX,eAAK,oBAAoB,iBAAiB,iBAAiB;AAC3D,eAAK,iBAAiB,oBAAoB,iBAAiB;AAAA,QAC7D;AAAA,MACF,GAAG,CAAC,kBAAkB,SAAS,CAAC;AAEhC,gDAA0B,MAAM;AAzFtC;AA0FQ,YAAI,CAAC,QAAQ,WAAW,CAAC,MAAM,QAAQ;AACrC;AAAA,QACF;AAEA,cAAM,eAAc,aAAQ,YAAR,mBAAiB;AACrC,YAAI,UAAU,mBAAmB,SAAS,WAAW,GAAG;AACtD,gBAAM,YAAY;AAAA,YAChB,QAAQ;AAAA,YACR;AAAA,YACA,mBAAmB;AAAA,UACrB;AAEA,oDAAQ;AAAA,YACN,MAAM;AAAA,YACN,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,QAAQ,GAAG,QAAQ,EAAE;AAAA,YACvC,UAAU;AAAA,YACV,UAAU,CAAC,EAAE,GAAG,GAAG,QAAQ,OAAO,MAAM;AAEtC,sBAAQ,QAAQ,MAAM,YAAY,aAAa,QAAQ,eAAe,kBAAkB;AAAA,YAK1F;AAAA;AAAA,YAEA,aAAa,CAAC,GAAG,MAAM,GAAG,KAAK;AAAA,UACjC,CAAC;AAAA,QACH;AACA,2BAAmB,UAAU;AAAA,MAC/B,CAAC;AAKD,YAAM,aAAa,GAAG,QAAQ,YAC5B,MAAM,SAAS,2DAA2D;AAG5E,UAAI,QAAQ,IAAI,aAAa,iBAAiB,MAAM,OAAO,GAAG;AAE5D,gBAAQ,IAAI,iBAAiB,OAAO,EAAE,YAAY,UAAU,CAAC;AAAA,MAC/D;AAEA,iBAAO,sBAAQ,MAAM;AACnB,eAAO,EAAE,MAAM;AAAA,MAEjB,GAAG,CAAC,KAAK,UAAU,KAAK,CAAC,CAAC;AAAA,IAC5B;AAAA,EACF;AACF;AAEA,MAAM,YAAY,CAAC,YAAiB,aAAkB;AAEpD,MAAI,CAAC,cAAc,CAAC;AAAU,WAAO;AAGrC,SAAO,KAAK,UAAU,UAAU,MAAM,KAAK,UAAU,QAAQ;AAC/D;AAEA,MAAM,SAAS,CAAC,IAAI,MAAM,OAAO;AAC/B,QAAM,EAAE,GAAG,OAAO,GAAG,OAAO,OAAO,WAAW,QAAQ,WAAW,IAAI;AACrE,QAAM,EAAE,GAAG,GAAG,OAAO,OAAO,IAAI;AAEhC,QAAM,YAAY;AAAA,IAChB,GAAG,IAAI,SAAS,YAAY,SAAS;AAAA,IACrC,GAAG,IAAI,SAAS,aAAa,UAAU;AAAA,IACvC,QAAQ,QAAQ;AAAA,IAChB,QAAQ,SAAS;AAAA,EACnB;AAEA,KAAG,MAAM,YAAY,aAAa,UAAU,QAAQ,UAAU,eAAe,UAAU,kBAAkB,UAAU;AAEnH,SAAO;AACT;",
5
5
  "names": []
6
6
  }
@@ -1,8 +1,10 @@
1
+ import { animate } from "@tamagui/cubic-bezier-animator";
1
2
  import { usePresence } from "@tamagui/use-presence";
2
3
  import {
3
4
  Stack,
4
5
  Text,
5
- useIsomorphicLayoutEffect
6
+ useIsomorphicLayoutEffect,
7
+ useSafeRef
6
8
  } from "@tamagui/web";
7
9
  import { useMemo, useState } from "react";
8
10
  function createAnimations(animations) {
@@ -52,6 +54,7 @@ function createAnimations(animations) {
52
54
  const isEntering = !!state.unmounted;
53
55
  const isExiting = (presence == null ? void 0 : presence[0]) === false;
54
56
  const sendExitComplete = presence == null ? void 0 : presence[1];
57
+ const initialPositionRef = useSafeRef(null);
55
58
  const animationKey = Array.isArray(props.animation) ? props.animation[0] : props.animation;
56
59
  const animation = animations[animationKey];
57
60
  if (!animation) {
@@ -72,7 +75,32 @@ function createAnimations(animations) {
72
75
  node.addEventListener("transitioncancel", onFinishAnimation);
73
76
  };
74
77
  }, [sendExitComplete, isExiting]);
75
- style.transition = `${keys} ${animation}`;
78
+ useIsomorphicLayoutEffect(() => {
79
+ var _a;
80
+ if (!hostRef.current || !props.layout) {
81
+ return;
82
+ }
83
+ const boundingBox = (_a = hostRef.current) == null ? void 0 : _a.getBoundingClientRect();
84
+ if (isChanged(initialPositionRef.current, boundingBox)) {
85
+ const transform = invert(
86
+ hostRef.current,
87
+ boundingBox,
88
+ initialPositionRef.current
89
+ );
90
+ animate({
91
+ from: transform,
92
+ to: { x: 0, y: 0, scaleX: 1, scaleY: 1 },
93
+ duration: 1e3,
94
+ onUpdate: ({ x, y, scaleX, scaleY }) => {
95
+ hostRef.current.style.transform = `translate(${x}px, ${y}px) scaleX(${scaleX}) scaleY(${scaleY})`;
96
+ },
97
+ // TODO: extract ease-in from string and convert/map it to a cubicBezier array
98
+ cubicBezier: [0, 1.38, 1, -0.41]
99
+ });
100
+ }
101
+ initialPositionRef.current = boundingBox;
102
+ });
103
+ style.transition = `${keys} ${animation}${props.layout ? ",width 0s, height 0s, margin 0s, padding 0s, transform" : ""}`;
76
104
  if (process.env.NODE_ENV === "development" && props["debug"]) {
77
105
  console.log("CSS animation", style, { isEntering, isExiting });
78
106
  }
@@ -82,6 +110,23 @@ function createAnimations(animations) {
82
110
  }
83
111
  };
84
112
  }
113
+ const isChanged = (initialBox, finalBox) => {
114
+ if (!initialBox || !finalBox)
115
+ return false;
116
+ return JSON.stringify(initialBox) !== JSON.stringify(finalBox);
117
+ };
118
+ const invert = (el, from, to) => {
119
+ const { x: fromX, y: fromY, width: fromWidth, height: fromHeight } = from;
120
+ const { x, y, width, height } = to;
121
+ const transform = {
122
+ x: x - fromX - (fromWidth - width) / 2,
123
+ y: y - fromY - (fromHeight - height) / 2,
124
+ scaleX: width / fromWidth,
125
+ scaleY: height / fromHeight
126
+ };
127
+ el.style.transform = `translate(${transform.x}px, ${transform.y}px) scaleX(${transform.scaleX}) scaleY(${transform.scaleY})`;
128
+ return transform;
129
+ };
85
130
  export {
86
131
  createAnimations
87
132
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createAnimations.tsx"],
4
- "mappings": "AAAA,SAAS,mBAAmB;AAC5B;AAAA,EAEE;AAAA,EACA;AAAA,EAEA;AAAA,OACK;AACP,SAAS,SAAiB,gBAAgB;AAEnC,SAAS,iBAAmC,YAAmC;AACpF,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IAEA,kBAAkB,SAA0C;AAC1D,YAAM,CAAC,KAAK,MAAM,IAAI,SAAS,OAAO;AAEtC,aAAO;AAAA,QACL,cAAc;AACZ,iBAAO;AAAA,QACT;AAAA,QACA,WAAW;AACT,iBAAO;AAAA,QACT;AAAA,QACA,SAAS,MAAM;AACb,iBAAO,IAAI;AAAA,QACb;AAAA,QACA,OAAO;AAAA,QAAC;AAAA,MACV;AAAA,IACF;AAAA,IAEA,0BAA0B,EAAE,SAAS,MAAM,GAAG,SAAS;AAErD,gCAA0B,MAAM;AAC9B,YAAI,CAAC,QAAQ;AAAS;AACtB,cAAM,oBAAoB,CAAC,MAAuB;AAChD,kBAAQ,MAAM,SAAS,CAAC;AAAA,QAC1B;AAEA,cAAM,OAAO,QAAQ;AACrB,aAAK,iBAAiB,mBAAmB,iBAAiB;AAC1D,aAAK,iBAAiB,oBAAoB,iBAAiB;AAC3D,aAAK,iBAAiB,iBAAiB,iBAAiB;AACxD,eAAO,MAAM;AACX,eAAK,oBAAoB,mBAAmB,iBAAiB;AAC7D,eAAK,oBAAoB,oBAAoB,iBAAiB;AAC9D,eAAK,oBAAoB,iBAAiB,iBAAiB;AAAA,QAC7D;AAAA,MACF,GAAG,CAAC,SAAS,OAAO,CAAC;AAAA,IACvB;AAAA,IAEA,uBAAuB,KAAK,UAAU;AACpC,aAAO,SAAS,IAAI,SAAS,CAAC;AAAA,IAChC;AAAA,IAEA,eAAe,CAAC,EAAE,OAAO,UAAU,OAAO,OAAO,QAAQ,MAAM;AAC7D,YAAM,aAAa,CAAC,CAAC,MAAM;AAC3B,YAAM,aAAY,qCAAW,QAAO;AACpC,YAAM,mBAAmB,qCAAW;AACpC,YAAM,eAAe,MAAM,QAAQ,MAAM,SAAS,IAC9C,MAAM,UAAU,CAAC,IACjB,MAAM;AACV,YAAM,YAAY,WAAW,YAAmB;AAChD,UAAI,CAAC,WAAW;AACd,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,MAAM,cAAc,MAAM,YAAY,KAAK,GAAG,IAAI;AAE/D,gCAA0B,MAAM;AAC9B,YAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,QAAQ;AAAS;AACzD,cAAM,OAAO,QAAQ;AACrB,cAAM,oBAAoB,MAAM;AAC9B;AAAA,QACF;AACA,aAAK,iBAAiB,iBAAiB,iBAAiB;AACxD,aAAK,iBAAiB,oBAAoB,iBAAiB;AAC3D,eAAO,MAAM;AACX,eAAK,oBAAoB,iBAAiB,iBAAiB;AAC3D,eAAK,iBAAiB,oBAAoB,iBAAiB;AAAA,QAC7D;AAAA,MACF,GAAG,CAAC,kBAAkB,SAAS,CAAC;AAGhC,YAAM,aAAa,GAAG,QAAQ;AAE9B,UAAI,QAAQ,IAAI,aAAa,iBAAiB,MAAM,OAAO,GAAG;AAE5D,gBAAQ,IAAI,iBAAiB,OAAO,EAAE,YAAY,UAAU,CAAC;AAAA,MAC/D;AAEA,aAAO,QAAQ,MAAM;AACnB,eAAO,EAAE,MAAM;AAAA,MAEjB,GAAG,CAAC,KAAK,UAAU,KAAK,CAAC,CAAC;AAAA,IAC5B;AAAA,EACF;AACF;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
@@ -1,8 +1,10 @@
1
+ import { animate } from "@tamagui/cubic-bezier-animator";
1
2
  import { usePresence } from "@tamagui/use-presence";
2
3
  import {
3
4
  Stack,
4
5
  Text,
5
- useIsomorphicLayoutEffect
6
+ useIsomorphicLayoutEffect,
7
+ useSafeRef
6
8
  } from "@tamagui/web";
7
9
  import { useMemo, useState } from "react";
8
10
  function createAnimations(animations) {
@@ -52,6 +54,7 @@ function createAnimations(animations) {
52
54
  const isEntering = !!state.unmounted;
53
55
  const isExiting = (presence == null ? void 0 : presence[0]) === false;
54
56
  const sendExitComplete = presence == null ? void 0 : presence[1];
57
+ const initialPositionRef = useSafeRef(null);
55
58
  const animationKey = Array.isArray(props.animation) ? props.animation[0] : props.animation;
56
59
  const animation = animations[animationKey];
57
60
  if (!animation) {
@@ -72,7 +75,32 @@ function createAnimations(animations) {
72
75
  node.addEventListener("transitioncancel", onFinishAnimation);
73
76
  };
74
77
  }, [sendExitComplete, isExiting]);
75
- style.transition = `${keys} ${animation}`;
78
+ useIsomorphicLayoutEffect(() => {
79
+ var _a;
80
+ if (!hostRef.current || !props.layout) {
81
+ return;
82
+ }
83
+ const boundingBox = (_a = hostRef.current) == null ? void 0 : _a.getBoundingClientRect();
84
+ if (isChanged(initialPositionRef.current, boundingBox)) {
85
+ const transform = invert(
86
+ hostRef.current,
87
+ boundingBox,
88
+ initialPositionRef.current
89
+ );
90
+ animate({
91
+ from: transform,
92
+ to: { x: 0, y: 0, scaleX: 1, scaleY: 1 },
93
+ duration: 1e3,
94
+ onUpdate: ({ x, y, scaleX, scaleY }) => {
95
+ hostRef.current.style.transform = `translate(${x}px, ${y}px) scaleX(${scaleX}) scaleY(${scaleY})`;
96
+ },
97
+ // TODO: extract ease-in from string and convert/map it to a cubicBezier array
98
+ cubicBezier: [0, 1.38, 1, -0.41]
99
+ });
100
+ }
101
+ initialPositionRef.current = boundingBox;
102
+ });
103
+ style.transition = `${keys} ${animation}${props.layout ? ",width 0s, height 0s, margin 0s, padding 0s, transform" : ""}`;
76
104
  if (process.env.NODE_ENV === "development" && props["debug"]) {
77
105
  console.log("CSS animation", style, { isEntering, isExiting });
78
106
  }
@@ -82,6 +110,23 @@ function createAnimations(animations) {
82
110
  }
83
111
  };
84
112
  }
113
+ const isChanged = (initialBox, finalBox) => {
114
+ if (!initialBox || !finalBox)
115
+ return false;
116
+ return JSON.stringify(initialBox) !== JSON.stringify(finalBox);
117
+ };
118
+ const invert = (el, from, to) => {
119
+ const { x: fromX, y: fromY, width: fromWidth, height: fromHeight } = from;
120
+ const { x, y, width, height } = to;
121
+ const transform = {
122
+ x: x - fromX - (fromWidth - width) / 2,
123
+ y: y - fromY - (fromHeight - height) / 2,
124
+ scaleX: width / fromWidth,
125
+ scaleY: height / fromHeight
126
+ };
127
+ el.style.transform = `translate(${transform.x}px, ${transform.y}px) scaleX(${transform.scaleX}) scaleY(${transform.scaleY})`;
128
+ return transform;
129
+ };
85
130
  export {
86
131
  createAnimations
87
132
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/createAnimations.tsx"],
4
- "mappings": "AAAA,SAAS,mBAAmB;AAC5B;AAAA,EAEE;AAAA,EACA;AAAA,EAEA;AAAA,OACK;AACP,SAAS,SAAiB,gBAAgB;AAEnC,SAAS,iBAAmC,YAAmC;AACpF,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IAEA,kBAAkB,SAA0C;AAC1D,YAAM,CAAC,KAAK,MAAM,IAAI,SAAS,OAAO;AAEtC,aAAO;AAAA,QACL,cAAc;AACZ,iBAAO;AAAA,QACT;AAAA,QACA,WAAW;AACT,iBAAO;AAAA,QACT;AAAA,QACA,SAAS,MAAM;AACb,iBAAO,IAAI;AAAA,QACb;AAAA,QACA,OAAO;AAAA,QAAC;AAAA,MACV;AAAA,IACF;AAAA,IAEA,0BAA0B,EAAE,SAAS,MAAM,GAAG,SAAS;AAErD,gCAA0B,MAAM;AAC9B,YAAI,CAAC,QAAQ;AAAS;AACtB,cAAM,oBAAoB,CAAC,MAAuB;AAChD,kBAAQ,MAAM,SAAS,CAAC;AAAA,QAC1B;AAEA,cAAM,OAAO,QAAQ;AACrB,aAAK,iBAAiB,mBAAmB,iBAAiB;AAC1D,aAAK,iBAAiB,oBAAoB,iBAAiB;AAC3D,aAAK,iBAAiB,iBAAiB,iBAAiB;AACxD,eAAO,MAAM;AACX,eAAK,oBAAoB,mBAAmB,iBAAiB;AAC7D,eAAK,oBAAoB,oBAAoB,iBAAiB;AAC9D,eAAK,oBAAoB,iBAAiB,iBAAiB;AAAA,QAC7D;AAAA,MACF,GAAG,CAAC,SAAS,OAAO,CAAC;AAAA,IACvB;AAAA,IAEA,uBAAuB,KAAK,UAAU;AACpC,aAAO,SAAS,IAAI,SAAS,CAAC;AAAA,IAChC;AAAA,IAEA,eAAe,CAAC,EAAE,OAAO,UAAU,OAAO,OAAO,QAAQ,MAAM;AAC7D,YAAM,aAAa,CAAC,CAAC,MAAM;AAC3B,YAAM,aAAY,qCAAW,QAAO;AACpC,YAAM,mBAAmB,qCAAW;AACpC,YAAM,eAAe,MAAM,QAAQ,MAAM,SAAS,IAC9C,MAAM,UAAU,CAAC,IACjB,MAAM;AACV,YAAM,YAAY,WAAW,YAAmB;AAChD,UAAI,CAAC,WAAW;AACd,eAAO;AAAA,MACT;AAEA,YAAM,OAAO,MAAM,cAAc,MAAM,YAAY,KAAK,GAAG,IAAI;AAE/D,gCAA0B,MAAM;AAC9B,YAAI,CAAC,oBAAoB,CAAC,aAAa,CAAC,QAAQ;AAAS;AACzD,cAAM,OAAO,QAAQ;AACrB,cAAM,oBAAoB,MAAM;AAC9B;AAAA,QACF;AACA,aAAK,iBAAiB,iBAAiB,iBAAiB;AACxD,aAAK,iBAAiB,oBAAoB,iBAAiB;AAC3D,eAAO,MAAM;AACX,eAAK,oBAAoB,iBAAiB,iBAAiB;AAC3D,eAAK,iBAAiB,oBAAoB,iBAAiB;AAAA,QAC7D;AAAA,MACF,GAAG,CAAC,kBAAkB,SAAS,CAAC;AAGhC,YAAM,aAAa,GAAG,QAAQ;AAE9B,UAAI,QAAQ,IAAI,aAAa,iBAAiB,MAAM,OAAO,GAAG;AAE5D,gBAAQ,IAAI,iBAAiB,OAAO,EAAE,YAAY,UAAU,CAAC;AAAA,MAC/D;AAEA,aAAO,QAAQ,MAAM;AACnB,eAAO,EAAE,MAAM;AAAA,MAEjB,GAAG,CAAC,KAAK,UAAU,KAAK,CAAC,CAAC;AAAA,IAC5B;AAAA,EACF;AACF;",
4
+ "mappings": "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",
5
5
  "names": []
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tamagui/animations-css",
3
- "version": "1.22.12",
3
+ "version": "1.23.0",
4
4
  "source": "src/index.ts",
5
5
  "sideEffects": false,
6
6
  "license": "MIT",
@@ -13,11 +13,11 @@
13
13
  "dist"
14
14
  ],
15
15
  "dependencies": {
16
- "@tamagui/use-presence": "1.22.12",
17
- "@tamagui/web": "1.22.12"
16
+ "@tamagui/use-presence": "1.23.0",
17
+ "@tamagui/web": "1.23.0"
18
18
  },
19
19
  "devDependencies": {
20
- "@tamagui/build": "1.22.12"
20
+ "@tamagui/build": "1.23.0"
21
21
  },
22
22
  "scripts": {
23
23
  "build": "tamagui-build",
@@ -1,3 +1,4 @@
1
+ import { animate } from '@tamagui/cubic-bezier-animator'
1
2
  import { usePresence } from '@tamagui/use-presence'
2
3
  import {
3
4
  AnimationDriver,
@@ -5,8 +6,9 @@ import {
5
6
  Text,
6
7
  UniversalAnimatedNumber,
7
8
  useIsomorphicLayoutEffect,
9
+ useSafeRef,
8
10
  } from '@tamagui/web'
9
- import { useMemo, useRef, useState } from 'react'
11
+ import { useMemo, useState } from 'react'
10
12
 
11
13
  export function createAnimations<A extends Object>(animations: A): AnimationDriver<A> {
12
14
  return {
@@ -60,6 +62,7 @@ export function createAnimations<A extends Object>(animations: A): AnimationDriv
60
62
  const isEntering = !!state.unmounted
61
63
  const isExiting = presence?.[0] === false
62
64
  const sendExitComplete = presence?.[1]
65
+ const initialPositionRef = useSafeRef<any>(null)
63
66
  const animationKey = Array.isArray(props.animation)
64
67
  ? props.animation[0]
65
68
  : props.animation
@@ -84,8 +87,44 @@ export function createAnimations<A extends Object>(animations: A): AnimationDriv
84
87
  }
85
88
  }, [sendExitComplete, isExiting])
86
89
 
90
+ useIsomorphicLayoutEffect(() => {
91
+ if (!hostRef.current || !props.layout) {
92
+ return
93
+ }
94
+ // @ts-ignore
95
+ const boundingBox = hostRef.current?.getBoundingClientRect()
96
+ if (isChanged(initialPositionRef.current, boundingBox)) {
97
+ const transform = invert(
98
+ hostRef.current,
99
+ boundingBox,
100
+ initialPositionRef.current
101
+ )
102
+
103
+ animate({
104
+ from: transform,
105
+ to: { x: 0, y: 0, scaleX: 1, scaleY: 1 },
106
+ duration: 1000,
107
+ onUpdate: ({ x, y, scaleX, scaleY }) => {
108
+ // @ts-ignore
109
+ hostRef.current.style.transform = `translate(${x}px, ${y}px) scaleX(${scaleX}) scaleY(${scaleY})`
110
+ // TODO: handle childRef inverse scale
111
+ // childRef.current.style.transform = `scaleX(${1 / scaleX}) scaleY(${
112
+ // 1 / scaleY
113
+ // })`
114
+ },
115
+ // TODO: extract ease-in from string and convert/map it to a cubicBezier array
116
+ cubicBezier: [0, 1.38, 1, -0.41],
117
+ })
118
+ }
119
+ initialPositionRef.current = boundingBox
120
+ })
121
+
87
122
  // add css transition
88
- style.transition = `${keys} ${animation}`
123
+ // TODO: we disabled the transform transition, because it will create issue for inverse function and animate function
124
+ // for non layout transform properties either use animate function or find a workaround to do it with css
125
+ style.transition = `${keys} ${animation}${
126
+ props.layout ? ',width 0s, height 0s, margin 0s, padding 0s, transform' : ''
127
+ }`
89
128
 
90
129
  if (process.env.NODE_ENV === 'development' && props['debug']) {
91
130
  // rome-ignore lint/nursery/noConsoleLog: ok
@@ -99,3 +138,27 @@ export function createAnimations<A extends Object>(animations: A): AnimationDriv
99
138
  },
100
139
  }
101
140
  }
141
+
142
+ const isChanged = (initialBox: any, finalBox: any) => {
143
+ // we just mounted, so we don't have complete data yet
144
+ if (!initialBox || !finalBox) return false
145
+
146
+ // deep compare the two boxes
147
+ return JSON.stringify(initialBox) !== JSON.stringify(finalBox)
148
+ }
149
+
150
+ const invert = (el, from, to) => {
151
+ const { x: fromX, y: fromY, width: fromWidth, height: fromHeight } = from
152
+ const { x, y, width, height } = to
153
+
154
+ const transform = {
155
+ x: x - fromX - (fromWidth - width) / 2,
156
+ y: y - fromY - (fromHeight - height) / 2,
157
+ scaleX: width / fromWidth,
158
+ scaleY: height / fromHeight,
159
+ }
160
+
161
+ el.style.transform = `translate(${transform.x}px, ${transform.y}px) scaleX(${transform.scaleX}) scaleY(${transform.scaleY})`
162
+
163
+ return transform
164
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"createAnimations.d.ts","sourceRoot":"","sources":["../src/createAnimations.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,eAAe,EAKhB,MAAM,cAAc,CAAA;AAGrB,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CA0FpF"}
1
+ {"version":3,"file":"createAnimations.d.ts","sourceRoot":"","sources":["../src/createAnimations.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EAMhB,MAAM,cAAc,CAAA;AAGrB,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CA+HpF"}