aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/client/views/nodes/trails/PresBox.scss4
-rw-r--r--src/client/views/nodes/trails/SlideEffect.scss18
-rw-r--r--src/client/views/nodes/trails/SlideEffect.tsx94
3 files changed, 95 insertions, 21 deletions
diff --git a/src/client/views/nodes/trails/PresBox.scss b/src/client/views/nodes/trails/PresBox.scss
index 43f9ec78e..c937730ab 100644
--- a/src/client/views/nodes/trails/PresBox.scss
+++ b/src/client/views/nodes/trails/PresBox.scss
@@ -8,13 +8,9 @@
}
.pres-chat {
- // padding: 8px;
display: flex;
flex-direction: column;
gap: 8px;
- // display: flex;
- // align-items: center;
- // gap: 16px;
}
.presBox-icon-list {
diff --git a/src/client/views/nodes/trails/SlideEffect.scss b/src/client/views/nodes/trails/SlideEffect.scss
new file mode 100644
index 000000000..7d2929225
--- /dev/null
+++ b/src/client/views/nodes/trails/SlideEffect.scss
@@ -0,0 +1,18 @@
+.flip-container {
+ display: flex;
+ align-items: center;
+ height: 100%;
+ justify-content: center;
+}
+
+.flip-side {
+ position: absolute;
+ // max-width: 500px;
+ // max-height: 500px;
+ // width: 350px;
+ // height: 200px;
+ will-change: transform, opacity;
+}
+
+.flip-back {
+}
diff --git a/src/client/views/nodes/trails/SlideEffect.tsx b/src/client/views/nodes/trails/SlideEffect.tsx
index e3423069b..eee52c3ec 100644
--- a/src/client/views/nodes/trails/SlideEffect.tsx
+++ b/src/client/views/nodes/trails/SlideEffect.tsx
@@ -12,7 +12,7 @@ interface Props {
}
// TODO: add visibility detector when the slide comes into view
-export default function SpringAnimation({ dir, friction, tension, mass, presEffect: presEffect, children }: Props) {
+export default function SpringAnimation({ dir, friction, tension, mass, presEffect, children }: Props) {
const [springs, api] = useSpring(
() => ({
from: {
@@ -154,7 +154,36 @@ export default function SpringAnimation({ dir, friction, tension, mass, presEffe
],
};
- const flipConfig = {};
+ // Flip
+ // const flipConfig = {
+ // from: {
+ // // opacity: 0,
+ // transform: `perspective(600px) rotateX(0deg)`,
+ // },
+ // to: {
+ // // opacity: 1,
+ // transform: `perspective(600px) rotateX(180deg)`,
+ // config: {
+ // tension: tension,
+ // friction: friction,
+ // mass: mass,
+ // },
+ // },
+ // };
+
+ const flipConfig = {
+ from: {
+ x: 0,
+ },
+ to: {
+ x: 180,
+ config: {
+ tension: tension,
+ friction: friction,
+ mass: mass,
+ },
+ },
+ };
const startAnimation = () => {
if (presEffect === PresEffect.Bounce) {
@@ -168,7 +197,51 @@ export default function SpringAnimation({ dir, friction, tension, mass, presEffe
}
};
- const flipRender = () => {};
+ // const flipRender = () => {
+ // return (
+ // <div className="flip-container">
+ // <animated.div className={'flip-side flip-back'} style={{ opacity: opacity.to(o => 1 - o), transform }} />
+ // <animated.div
+ // className={'flip-side flip-front'}
+ // style={{
+ // opacity,
+ // transform,
+ // rotateX: '180deg',
+ // }}>
+ // {children}
+ // </animated.div>
+ // </div>
+ // );
+ // };
+
+ const flipRender = () => {
+ return (
+ <div className="flip-container">
+ <animated.div className={'flip-side flip-back'} style={{ transform: to(springs.x, val => `perspective(600px) rotateX(${val}deg)`) }} />
+ <animated.div className={'flip-side flip-front'} style={{ transform: to(springs.x, val => `perspective(600px) rotateX(${val}deg)`), rotateX: '180deg' }}>
+ {children}
+ </animated.div>
+ </div>
+ );
+ };
+
+ const getRenderDoc = () => {
+ switch (presEffect) {
+ case PresEffect.Rotate:
+ return <animated.div style={{ transform: to(springs.x, val => `rotate(${val}deg)`) }}>{children}</animated.div>;
+ case PresEffect.Flip:
+ return flipRender();
+ default:
+ return (
+ <animated.div
+ style={{
+ ...springs,
+ }}>
+ {children}
+ </animated.div>
+ );
+ }
+ };
useEffect(() => {
// TODO: Control start with slide visibility instead
@@ -177,18 +250,5 @@ export default function SpringAnimation({ dir, friction, tension, mass, presEffe
}, 200);
}, []);
- return (
- <div>
- {presEffect !== PresEffect.Rotate ? (
- <animated.div
- style={{
- ...springs,
- }}>
- {children}
- </animated.div>
- ) : (
- <animated.div style={{ transform: to(springs.x, val => `rotate(${val}deg)`) }}>{children}</animated.div>
- )}
- </div>
- );
+ return <div>{getRenderDoc()}</div>;
}