@evatril/video-templates 2.0.7 → 2.0.9
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/package.json +1 -1
- package/public/video-images/03022026-bg-2.webp +0 -0
- package/public/video-images/03022026-bg-3.webp +0 -0
- package/public/video-images/03022026-bg-4.webp +0 -0
- package/public/video-images/03022026-bg-5.webp +0 -0
- package/public/video-images/03022026-bg.webp +0 -0
- package/public/video-images/03022026-krishnaradha-2.webp +0 -0
- package/public/video-images/03022026-krishnaradha-4.webp +0 -0
- package/public/video-images/03022026-krishnaradha-5.webp +0 -0
- package/public/video-images/03022026-krishnaradha.webp +0 -0
- package/public/video-images/28012026-BottomLeftFlower.webp +0 -0
- package/public/video-images/28012026-BottomRightFlower.webp +0 -0
- package/public/video-images/28012026-FlowerBorder.webp +0 -0
- package/public/video-images/28012026-Ganesh.webp +0 -0
- package/public/video-images/28012026-TopBorder.webp +0 -0
- package/public/video-images/28012026-TopLeftFlower.webp +0 -0
- package/public/video-images/28012026-TopRightFlower.webp +0 -0
- package/public/video-images/28012026-bg.webp +0 -0
- package/public/video-images/28012026-border.webp +0 -0
- package/public/video-images/28012026-frame.webp +0 -0
- package/public/video-images/wedding2.mp3 +0 -0
- package/src/Invitations/Elements/BlowingLeaves28012026.jsx +68 -0
- package/src/Invitations/Elements/Butterflies20012026.jsx +1 -1
- package/src/Invitations/Elements/CornerFlipTransition05022026.jsx +45 -0
- package/src/Invitations/Elements/DucksFrame05022026.jsx +38 -0
- package/src/Invitations/Elements/FloatingFlowersBottom.jsx +70 -0
- package/src/Invitations/Elements/FlowerReveal_TL_BR_28012026.jsx +114 -0
- package/src/Invitations/Elements/FlowerReveal_TR_BL_28012026.jsx +116 -0
- package/src/Invitations/Elements/GaneshBorder28012026.jsx +95 -0
- package/src/Invitations/Elements/GaneshGoldenHalo.jsx +90 -0
- package/src/Invitations/Elements/HangingJumar05022026.jsx +40 -0
- package/src/Invitations/Elements/HangingLamp05022026.jsx +40 -0
- package/src/Invitations/Elements/HeartDraw28012026.jsx +51 -0
- package/src/Invitations/Elements/HeartFlight28012026.jsx +72 -0
- package/src/Invitations/Elements/HoldSlide.jsx +54 -0
- package/src/Invitations/Elements/LetterReveal28012026.jsx +47 -0
- package/src/Invitations/Elements/OpeningGate20012026.jsx +2 -2
- package/src/Invitations/Elements/PageFlipTransition.jsx +180 -0
- package/src/Invitations/Elements/{SmoothRevealFromTop.jsx → SmoothRevealFromTop20012026.jsx} +1 -1
- package/src/Invitations/Elements/WordReveal28012026.jsx +94 -0
- package/src/Invitations/Frames/F03022026_01.jsx +214 -0
- package/src/Invitations/Frames/F03022026_02.jsx +313 -0
- package/src/Invitations/Frames/F03022026_03.jsx +332 -0
- package/src/Invitations/Frames/F03022026_04.jsx +298 -0
- package/src/Invitations/Frames/F03022026_05.jsx +235 -0
- package/src/Invitations/Frames/F05022026_01.jsx +173 -0
- package/src/Invitations/Frames/F05022026_02.jsx +387 -0
- package/src/Invitations/Frames/F05022026_03.jsx +328 -0
- package/src/Invitations/Frames/F05022026_04.jsx +140 -0
- package/src/Invitations/Frames/F20012026_01.jsx +0 -2
- package/src/Invitations/Frames/F20012026_02.jsx +8 -8
- package/src/Invitations/Frames/F20012026_03.jsx +8 -8
- package/src/Invitations/Frames/F28012026_01.jsx +51 -0
- package/src/Invitations/Frames/F28012026_02.jsx +246 -0
- package/src/Invitations/Frames/F28012026_03.jsx +268 -0
- package/src/Invitations/Frames/F28012026_04.jsx +275 -0
- package/src/Invitations/Frames/F28012026_05.jsx +179 -0
- package/src/Invitations/Themes/T03022026_01.jsx +269 -0
- package/src/Invitations/Themes/T05022026_01.jsx +259 -0
- package/src/Invitations/Themes/T20012026_01.jsx +74 -21
- package/src/Invitations/Themes/T28012026_01.jsx +241 -0
- package/src/compositions.jsx +29 -2
- package/src/index.js +4 -1
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
AbsoluteFill,
|
|
4
|
+
Img,
|
|
5
|
+
useCurrentFrame,
|
|
6
|
+
useVideoConfig,
|
|
7
|
+
interpolate,
|
|
8
|
+
Easing,
|
|
9
|
+
staticFile,
|
|
10
|
+
} from "remotion";
|
|
11
|
+
import { WordReveal28012026 } from "../Elements/WordReveal28012026";
|
|
12
|
+
import { HangingLamp05022026 } from "../Elements/HangingLamp05022026";
|
|
13
|
+
|
|
14
|
+
export const F05022026_04 = ({
|
|
15
|
+
familyMember,
|
|
16
|
+
}) => {
|
|
17
|
+
const frame = useCurrentFrame();
|
|
18
|
+
const { fps, durationInFrames } = useVideoConfig();
|
|
19
|
+
|
|
20
|
+
const plateStart = fps * 3.5;
|
|
21
|
+
|
|
22
|
+
const plateX = interpolate(
|
|
23
|
+
frame,
|
|
24
|
+
[plateStart, plateStart + 40],
|
|
25
|
+
[900, 0], // comes from right
|
|
26
|
+
{
|
|
27
|
+
easing: Easing.out(Easing.cubic),
|
|
28
|
+
extrapolateLeft: "clamp",
|
|
29
|
+
extrapolateRight: "clamp",
|
|
30
|
+
}
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
const plateOpacity = interpolate(frame, [plateStart, plateStart + 30], [0, 1], {
|
|
34
|
+
extrapolateLeft: "clamp",
|
|
35
|
+
extrapolateRight: "clamp",
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
// Last 1 second family message exit
|
|
39
|
+
const textExitStart = durationInFrames - fps * 2;
|
|
40
|
+
|
|
41
|
+
// Fade out
|
|
42
|
+
const familyOpacity = interpolate(
|
|
43
|
+
frame,
|
|
44
|
+
[textExitStart, durationInFrames],
|
|
45
|
+
[1, 0],
|
|
46
|
+
{
|
|
47
|
+
extrapolateLeft: "clamp",
|
|
48
|
+
extrapolateRight: "clamp",
|
|
49
|
+
easing: Easing.out(Easing.cubic),
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
// Small upward move
|
|
54
|
+
const familyY = interpolate(
|
|
55
|
+
frame,
|
|
56
|
+
[textExitStart, durationInFrames],
|
|
57
|
+
[0, -40],
|
|
58
|
+
{
|
|
59
|
+
extrapolateLeft: "clamp",
|
|
60
|
+
extrapolateRight: "clamp",
|
|
61
|
+
easing: Easing.out(Easing.cubic),
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
// Peacock head shake (small rotation)
|
|
67
|
+
const headShake = Math.sin(frame / 10) * 3;
|
|
68
|
+
|
|
69
|
+
// Tiny breathing float
|
|
70
|
+
const peacockFloat = Math.sin(frame / 25) * 4;
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<AbsoluteFill style={{ overflow: "hidden" }}>
|
|
74
|
+
<HangingLamp05022026 side="left" offset={-50} />
|
|
75
|
+
<HangingLamp05022026 side="right" offset={-50} />
|
|
76
|
+
<HangingLamp05022026 side="left" offset={0} />
|
|
77
|
+
<HangingLamp05022026 side="right" offset={0} />
|
|
78
|
+
|
|
79
|
+
<Img
|
|
80
|
+
src={staticFile("video-images/05022026-Nameplate.webp")}
|
|
81
|
+
style={{
|
|
82
|
+
position: "absolute",
|
|
83
|
+
right: 60,
|
|
84
|
+
bottom: -450,
|
|
85
|
+
transform: `translateX(${plateX}px)`,
|
|
86
|
+
opacity: plateOpacity,
|
|
87
|
+
width: 800,
|
|
88
|
+
maxWidth: "90%",
|
|
89
|
+
}}
|
|
90
|
+
/>
|
|
91
|
+
|
|
92
|
+
<Img
|
|
93
|
+
src={staticFile("video-images/05022026-LeftPeacock.webp")}
|
|
94
|
+
style={{
|
|
95
|
+
position: "absolute",
|
|
96
|
+
left: -100,
|
|
97
|
+
bottom: -120,
|
|
98
|
+
width: 600,
|
|
99
|
+
maxWidth: "90%",
|
|
100
|
+
transform: `
|
|
101
|
+
translateY(${peacockFloat}px)
|
|
102
|
+
rotate(${headShake}deg)
|
|
103
|
+
`,
|
|
104
|
+
transformOrigin: "70% 25%", // head/neck area
|
|
105
|
+
}}
|
|
106
|
+
/>
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
<div
|
|
110
|
+
style={{
|
|
111
|
+
position: "absolute",
|
|
112
|
+
top: "30%",
|
|
113
|
+
left: "50%",
|
|
114
|
+
transform: `translateX(-50%) translateY(${familyY}px)`,
|
|
115
|
+
width: "100%",
|
|
116
|
+
textAlign: "center",
|
|
117
|
+
opacity: familyOpacity,
|
|
118
|
+
}}
|
|
119
|
+
>
|
|
120
|
+
<div
|
|
121
|
+
style={{
|
|
122
|
+
maxWidth: "60%",
|
|
123
|
+
margin: "0 auto",
|
|
124
|
+
}}
|
|
125
|
+
>
|
|
126
|
+
<WordReveal28012026
|
|
127
|
+
text={familyMember}
|
|
128
|
+
start={20}
|
|
129
|
+
fontSize={70}
|
|
130
|
+
color="#CDB89A"
|
|
131
|
+
fontFamily="Dancing Script"
|
|
132
|
+
letterSpacing="3px"
|
|
133
|
+
lineHeight="1.2"
|
|
134
|
+
fontWeight="600"
|
|
135
|
+
/>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
</AbsoluteFill>
|
|
139
|
+
);
|
|
140
|
+
};
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
|
|
12
12
|
import { SideTrees20012026 } from "../Elements/SideTrees20012026.jsx";
|
|
13
13
|
import { PeacockDance20012026 } from "../Elements/PeacockDance20012026.jsx";
|
|
14
|
-
import {
|
|
14
|
+
import { SmoothRevealFromTop20012026 } from "../Elements/SmoothRevealFromTop20012026.jsx";
|
|
15
15
|
|
|
16
16
|
export const F20012026_02 = ({
|
|
17
17
|
firstName,
|
|
@@ -103,7 +103,7 @@ export const F20012026_02 = ({
|
|
|
103
103
|
color: "#4A3A2A",
|
|
104
104
|
fontSize: 40,
|
|
105
105
|
letterSpacing: 2,
|
|
106
|
-
...
|
|
106
|
+
...SmoothRevealFromTop20012026({ frame, startFrame: DETAILS_START, delay: 0 }),
|
|
107
107
|
}}
|
|
108
108
|
>
|
|
109
109
|
{invitationMessage}
|
|
@@ -116,7 +116,7 @@ export const F20012026_02 = ({
|
|
|
116
116
|
color: "#7A1E2E",
|
|
117
117
|
fontSize: 60,
|
|
118
118
|
letterSpacing: 3,
|
|
119
|
-
...
|
|
119
|
+
...SmoothRevealFromTop20012026({ frame, startFrame: DETAILS_START, delay: 25 }),
|
|
120
120
|
}}
|
|
121
121
|
>
|
|
122
122
|
{firstName}
|
|
@@ -128,7 +128,7 @@ export const F20012026_02 = ({
|
|
|
128
128
|
color: "#B87A6A",
|
|
129
129
|
fontSize: 35,
|
|
130
130
|
maxWidth:"70%",
|
|
131
|
-
...
|
|
131
|
+
...SmoothRevealFromTop20012026({ frame, startFrame: DETAILS_START, delay: 50 }),
|
|
132
132
|
}}
|
|
133
133
|
>
|
|
134
134
|
{firstSideNote}
|
|
@@ -139,7 +139,7 @@ export const F20012026_02 = ({
|
|
|
139
139
|
fontSize: 40,
|
|
140
140
|
color: "#C9A24D",
|
|
141
141
|
letterSpacing: 6,
|
|
142
|
-
...
|
|
142
|
+
...SmoothRevealFromTop20012026({ frame, startFrame: DETAILS_START, delay: 70 }),
|
|
143
143
|
}}
|
|
144
144
|
>
|
|
145
145
|
❁ ❁ ❁
|
|
@@ -152,7 +152,7 @@ export const F20012026_02 = ({
|
|
|
152
152
|
color: "#7A1E2E",
|
|
153
153
|
fontSize: 60,
|
|
154
154
|
letterSpacing: 3,
|
|
155
|
-
...
|
|
155
|
+
...SmoothRevealFromTop20012026({ frame, startFrame: DETAILS_START, delay: 95 }),
|
|
156
156
|
}}
|
|
157
157
|
>
|
|
158
158
|
{secondName}
|
|
@@ -164,7 +164,7 @@ export const F20012026_02 = ({
|
|
|
164
164
|
color: "#B87A6A",
|
|
165
165
|
fontSize: 35,
|
|
166
166
|
maxWidth:"70%",
|
|
167
|
-
...
|
|
167
|
+
...SmoothRevealFromTop20012026({ frame, startFrame: DETAILS_START, delay: 120 }),
|
|
168
168
|
}}
|
|
169
169
|
>
|
|
170
170
|
{secondSideNote}
|
|
@@ -173,7 +173,7 @@ export const F20012026_02 = ({
|
|
|
173
173
|
<div
|
|
174
174
|
style={{
|
|
175
175
|
textAlign: "center",
|
|
176
|
-
...
|
|
176
|
+
...SmoothRevealFromTop20012026({ frame, startFrame: DETAILS_START, delay: 145 }),
|
|
177
177
|
}}
|
|
178
178
|
>
|
|
179
179
|
<div
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
} from "remotion";
|
|
11
11
|
|
|
12
12
|
import { GroomBrideLoveScene20012026 } from "../Elements/GroomBrideLoveScene20012026.jsx";
|
|
13
|
-
import {
|
|
13
|
+
import { SmoothRevealFromTop20012026 } from "../Elements/SmoothRevealFromTop20012026.jsx"
|
|
14
14
|
|
|
15
15
|
export const F20012026_03 = ({
|
|
16
16
|
eventDateTime,
|
|
@@ -130,7 +130,7 @@ export const F20012026_03 = ({
|
|
|
130
130
|
whiteSpace: "normal",
|
|
131
131
|
wordBreak: "break-word",
|
|
132
132
|
overflowWrap: "break-word",
|
|
133
|
-
...
|
|
133
|
+
...SmoothRevealFromTop20012026({
|
|
134
134
|
frame,
|
|
135
135
|
startFrame: DETAILS_START,
|
|
136
136
|
delay: 0,
|
|
@@ -152,7 +152,7 @@ export const F20012026_03 = ({
|
|
|
152
152
|
whiteSpace: "normal",
|
|
153
153
|
wordBreak: "break-word",
|
|
154
154
|
overflowWrap: "break-word",
|
|
155
|
-
...
|
|
155
|
+
...SmoothRevealFromTop20012026({
|
|
156
156
|
frame,
|
|
157
157
|
startFrame: DETAILS_START,
|
|
158
158
|
delay: 25,
|
|
@@ -173,7 +173,7 @@ export const F20012026_03 = ({
|
|
|
173
173
|
whiteSpace: "normal",
|
|
174
174
|
wordBreak: "break-word",
|
|
175
175
|
overflowWrap: "break-word",
|
|
176
|
-
...
|
|
176
|
+
...SmoothRevealFromTop20012026({
|
|
177
177
|
frame,
|
|
178
178
|
startFrame: DETAILS_START,
|
|
179
179
|
delay: 50,
|
|
@@ -197,7 +197,7 @@ export const F20012026_03 = ({
|
|
|
197
197
|
whiteSpace: "normal",
|
|
198
198
|
wordBreak: "break-word",
|
|
199
199
|
overflowWrap: "break-word",
|
|
200
|
-
...
|
|
200
|
+
...SmoothRevealFromTop20012026({
|
|
201
201
|
frame,
|
|
202
202
|
startFrame: DETAILS_START,
|
|
203
203
|
delay: 70,
|
|
@@ -220,7 +220,7 @@ export const F20012026_03 = ({
|
|
|
220
220
|
whiteSpace: "normal",
|
|
221
221
|
wordBreak: "break-word",
|
|
222
222
|
overflowWrap: "break-word",
|
|
223
|
-
...
|
|
223
|
+
...SmoothRevealFromTop20012026({
|
|
224
224
|
frame,
|
|
225
225
|
startFrame: DETAILS_START,
|
|
226
226
|
delay: 95,
|
|
@@ -241,7 +241,7 @@ export const F20012026_03 = ({
|
|
|
241
241
|
whiteSpace: "normal",
|
|
242
242
|
wordBreak: "break-word",
|
|
243
243
|
overflowWrap: "break-word",
|
|
244
|
-
...
|
|
244
|
+
...SmoothRevealFromTop20012026({
|
|
245
245
|
frame,
|
|
246
246
|
startFrame: DETAILS_START,
|
|
247
247
|
delay: 115,
|
|
@@ -265,7 +265,7 @@ export const F20012026_03 = ({
|
|
|
265
265
|
whiteSpace: "normal",
|
|
266
266
|
wordBreak: "break-word",
|
|
267
267
|
overflowWrap: "break-word",
|
|
268
|
-
...
|
|
268
|
+
...SmoothRevealFromTop20012026({
|
|
269
269
|
frame,
|
|
270
270
|
startFrame: DETAILS_START,
|
|
271
271
|
delay: 125,
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
AbsoluteFill,
|
|
4
|
+
} from "remotion";
|
|
5
|
+
import { FlowerReveal_TR_BL_28012026 } from "../Elements/FlowerReveal_TR_BL_28012026";
|
|
6
|
+
import { GaneshBorder28012026 } from "../Elements/GaneshBorder28012026";
|
|
7
|
+
import { BlowingLeaves28012026 } from "../Elements/BlowingLeaves28012026";
|
|
8
|
+
import { WordReveal28012026 } from "../Elements/WordReveal28012026";
|
|
9
|
+
|
|
10
|
+
export const F28012026_01 = ({
|
|
11
|
+
welcomeMessage,
|
|
12
|
+
}) => {
|
|
13
|
+
return (
|
|
14
|
+
<AbsoluteFill style={{ overflow: "hidden" }}>
|
|
15
|
+
<FlowerReveal_TR_BL_28012026 />
|
|
16
|
+
<GaneshBorder28012026 />
|
|
17
|
+
<BlowingLeaves28012026 startAfter={2} />
|
|
18
|
+
|
|
19
|
+
<div
|
|
20
|
+
style={{
|
|
21
|
+
position: "absolute",
|
|
22
|
+
bottom: "2%",
|
|
23
|
+
right: "6%",
|
|
24
|
+
maxWidth: "50%",
|
|
25
|
+
textAlign: "right",
|
|
26
|
+
}}
|
|
27
|
+
>
|
|
28
|
+
<h1
|
|
29
|
+
style={{
|
|
30
|
+
fontFamily: "Dancing Script",
|
|
31
|
+
letterSpacing: 3,
|
|
32
|
+
lineHeight: 1.3,
|
|
33
|
+
fontWeight: 600,
|
|
34
|
+
margin: 0,
|
|
35
|
+
whiteSpace: "normal",
|
|
36
|
+
wordBreak: "break-word",
|
|
37
|
+
}}
|
|
38
|
+
>
|
|
39
|
+
<WordReveal28012026
|
|
40
|
+
text={welcomeMessage}
|
|
41
|
+
start={50}
|
|
42
|
+
fontSize={70}
|
|
43
|
+
color="#D4A24C"
|
|
44
|
+
/>
|
|
45
|
+
</h1>
|
|
46
|
+
</div>
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
</AbsoluteFill>
|
|
50
|
+
);
|
|
51
|
+
};
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import {
|
|
3
|
+
AbsoluteFill,
|
|
4
|
+
Img,
|
|
5
|
+
useCurrentFrame,
|
|
6
|
+
useVideoConfig,
|
|
7
|
+
interpolate,
|
|
8
|
+
Easing,
|
|
9
|
+
staticFile,
|
|
10
|
+
} from "remotion";
|
|
11
|
+
import { FlowerReveal_TL_BR_28012026 } from "../Elements/FlowerReveal_TL_BR_28012026";
|
|
12
|
+
import { HeartDraw28012026 } from "../Elements/HeartDraw28012026";
|
|
13
|
+
import { WordReveal28012026 } from "../Elements/WordReveal28012026";
|
|
14
|
+
|
|
15
|
+
export const F28012026_02 = ({
|
|
16
|
+
firstName, secondName, invitationMessage, occasionDate
|
|
17
|
+
}) => {
|
|
18
|
+
const frame = useCurrentFrame();
|
|
19
|
+
|
|
20
|
+
const firstInitial = firstName?.charAt(0)?.toUpperCase();
|
|
21
|
+
const secondInitial = secondName?.charAt(0)?.toUpperCase();
|
|
22
|
+
|
|
23
|
+
const formatDate = (date) => {
|
|
24
|
+
if (!date) return "";
|
|
25
|
+
|
|
26
|
+
let d;
|
|
27
|
+
|
|
28
|
+
// Handle DD-MM-YYYY
|
|
29
|
+
if (typeof date === "string" && date.includes("-")) {
|
|
30
|
+
const parts = date.split("-");
|
|
31
|
+
if (parts[0].length === 2) {
|
|
32
|
+
d = new Date(`${parts[2]}-${parts[1]}-${parts[0]}`);
|
|
33
|
+
} else {
|
|
34
|
+
d = new Date(date);
|
|
35
|
+
}
|
|
36
|
+
} else {
|
|
37
|
+
d = new Date(date);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
if (isNaN(d.getTime())) return "";
|
|
41
|
+
|
|
42
|
+
return d.toLocaleDateString("en-IN", {
|
|
43
|
+
day: "numeric",
|
|
44
|
+
month: "long",
|
|
45
|
+
year: "numeric",
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const { fps } = useVideoConfig();
|
|
50
|
+
|
|
51
|
+
const initialsStart = fps * 3.5;
|
|
52
|
+
const heartStart = initialsStart + fps * 1.2;
|
|
53
|
+
const openDuration = fps * 1;
|
|
54
|
+
|
|
55
|
+
const initialsOpacity = interpolate(
|
|
56
|
+
frame,
|
|
57
|
+
[initialsStart + fps * 0.1, initialsStart + openDuration],
|
|
58
|
+
[0, 1],
|
|
59
|
+
{
|
|
60
|
+
extrapolateLeft: "clamp",
|
|
61
|
+
extrapolateRight: "clamp",
|
|
62
|
+
easing: Easing.out(Easing.cubic),
|
|
63
|
+
}
|
|
64
|
+
);
|
|
65
|
+
// 🌿 INITIALS SCALE (soft overshoot)
|
|
66
|
+
const initialsScale = interpolate(
|
|
67
|
+
frame,
|
|
68
|
+
[
|
|
69
|
+
initialsStart,
|
|
70
|
+
initialsStart + openDuration * 0.7,
|
|
71
|
+
initialsStart + openDuration,
|
|
72
|
+
],
|
|
73
|
+
[0.45, 1.05, 1],
|
|
74
|
+
{
|
|
75
|
+
extrapolateLeft: "clamp",
|
|
76
|
+
extrapolateRight: "clamp",
|
|
77
|
+
easing: Easing.out(Easing.cubic),
|
|
78
|
+
}
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
// ☁️ FLOAT UP
|
|
82
|
+
const initialsY = interpolate(
|
|
83
|
+
frame,
|
|
84
|
+
[initialsStart, initialsStart + openDuration],
|
|
85
|
+
[20, 0],
|
|
86
|
+
{
|
|
87
|
+
extrapolateLeft: "clamp",
|
|
88
|
+
extrapolateRight: "clamp",
|
|
89
|
+
}
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<AbsoluteFill style={{ overflow: "hidden" }}>
|
|
95
|
+
<FlowerReveal_TL_BR_28012026 />
|
|
96
|
+
<div
|
|
97
|
+
style={{
|
|
98
|
+
position: "absolute",
|
|
99
|
+
inset: 0, // fills whole screen
|
|
100
|
+
display: "flex",
|
|
101
|
+
justifyContent: "center", // vertical center
|
|
102
|
+
alignItems: "center", // horizontal center
|
|
103
|
+
textAlign: "center",
|
|
104
|
+
}}
|
|
105
|
+
>
|
|
106
|
+
<div
|
|
107
|
+
style={{
|
|
108
|
+
display: "flex",
|
|
109
|
+
flexDirection: "column",
|
|
110
|
+
alignItems: "center",
|
|
111
|
+
gap: "30px",
|
|
112
|
+
width: "100%",
|
|
113
|
+
whiteSpace: "normal",
|
|
114
|
+
wordBreak: "break-word",
|
|
115
|
+
overflowWrap: "break-word",
|
|
116
|
+
lineHeight: "1.2",
|
|
117
|
+
}}
|
|
118
|
+
>
|
|
119
|
+
|
|
120
|
+
<div
|
|
121
|
+
style={{
|
|
122
|
+
display: "flex",
|
|
123
|
+
flexDirection: "column",
|
|
124
|
+
alignItems: "center",
|
|
125
|
+
textAlign: "center",
|
|
126
|
+
gap: "100px",
|
|
127
|
+
width: "100%",
|
|
128
|
+
whiteSpace: "normal",
|
|
129
|
+
wordBreak: "break-word",
|
|
130
|
+
overflowWrap: "break-word",
|
|
131
|
+
lineHeight: "1.2",
|
|
132
|
+
marginTop: "16%"
|
|
133
|
+
}}
|
|
134
|
+
>
|
|
135
|
+
<h1
|
|
136
|
+
style={{
|
|
137
|
+
fontFamily: "Dancing Script",
|
|
138
|
+
color: "#B76E79",
|
|
139
|
+
letterSpacing: 3,
|
|
140
|
+
lineHeight: 1.3,
|
|
141
|
+
fontWeight: 600,
|
|
142
|
+
maxWidth: "80%",
|
|
143
|
+
}}
|
|
144
|
+
>
|
|
145
|
+
<WordReveal28012026
|
|
146
|
+
text={invitationMessage}
|
|
147
|
+
start={40}
|
|
148
|
+
fontSize={60}
|
|
149
|
+
color="#B76E79"
|
|
150
|
+
/>
|
|
151
|
+
</h1>
|
|
152
|
+
|
|
153
|
+
<div
|
|
154
|
+
style={{
|
|
155
|
+
position: "relative",
|
|
156
|
+
width: "400px",
|
|
157
|
+
height: "350px",
|
|
158
|
+
display: "flex",
|
|
159
|
+
justifyContent: "center",
|
|
160
|
+
alignItems: "center",
|
|
161
|
+
opacity: initialsOpacity,
|
|
162
|
+
transform: `translateY(${initialsY}px) scale(${initialsScale})`,
|
|
163
|
+
}}
|
|
164
|
+
>
|
|
165
|
+
<HeartDraw28012026 startAfter={heartStart} />
|
|
166
|
+
{/* Bride Initial – Top */}
|
|
167
|
+
<span
|
|
168
|
+
style={{
|
|
169
|
+
position: "absolute",
|
|
170
|
+
top: 0,
|
|
171
|
+
transform: "translate(-80px, -10px)",
|
|
172
|
+
fontFamily: "Dancing Script",
|
|
173
|
+
fontSize: 200,
|
|
174
|
+
color: "#D4A24C",
|
|
175
|
+
fontWeight: 600,
|
|
176
|
+
zIndex: 2,
|
|
177
|
+
}}
|
|
178
|
+
>
|
|
179
|
+
{firstInitial}
|
|
180
|
+
</span>
|
|
181
|
+
|
|
182
|
+
{/* Ampersand – Center */}
|
|
183
|
+
<span
|
|
184
|
+
style={{
|
|
185
|
+
position: "absolute",
|
|
186
|
+
fontFamily: "Dancing Script",
|
|
187
|
+
fontSize: 200,
|
|
188
|
+
color: "#D4A24C",
|
|
189
|
+
opacity: 0.2,
|
|
190
|
+
zIndex: 1,
|
|
191
|
+
}}
|
|
192
|
+
>
|
|
193
|
+
&
|
|
194
|
+
</span>
|
|
195
|
+
|
|
196
|
+
{/* Groom Initial – Bottom */}
|
|
197
|
+
<span
|
|
198
|
+
style={{
|
|
199
|
+
position: "absolute",
|
|
200
|
+
bottom: 0,
|
|
201
|
+
transform: "translate(50px, 50px)",
|
|
202
|
+
fontFamily: "Dancing Script",
|
|
203
|
+
fontSize: 200,
|
|
204
|
+
color: "#D4A24C",
|
|
205
|
+
fontWeight: 600,
|
|
206
|
+
zIndex: 2,
|
|
207
|
+
|
|
208
|
+
opacity: interpolate(
|
|
209
|
+
frame,
|
|
210
|
+
[initialsStart + fps * 0.3, initialsStart + fps * 0.6],
|
|
211
|
+
[0, 1],
|
|
212
|
+
{ extrapolateRight: "clamp" }
|
|
213
|
+
),
|
|
214
|
+
}}
|
|
215
|
+
>
|
|
216
|
+
{secondInitial}
|
|
217
|
+
</span>
|
|
218
|
+
|
|
219
|
+
</div>
|
|
220
|
+
|
|
221
|
+
<div
|
|
222
|
+
style={{
|
|
223
|
+
fontSize: 65,
|
|
224
|
+
fontWeight: "600",
|
|
225
|
+
color: "#B76E79",
|
|
226
|
+
lineHeight: 1.2,
|
|
227
|
+
marginTop: "15px",
|
|
228
|
+
letterSpacing: "4px",
|
|
229
|
+
whiteSpace: "nowrap",
|
|
230
|
+
}}
|
|
231
|
+
>
|
|
232
|
+
<WordReveal28012026
|
|
233
|
+
text={formatDate(occasionDate)}
|
|
234
|
+
start={140}
|
|
235
|
+
fontSize={65}
|
|
236
|
+
color="#B76E79"
|
|
237
|
+
/>
|
|
238
|
+
|
|
239
|
+
</div>
|
|
240
|
+
</div>
|
|
241
|
+
</div>
|
|
242
|
+
</div>
|
|
243
|
+
|
|
244
|
+
</AbsoluteFill>
|
|
245
|
+
);
|
|
246
|
+
};
|