@contractspec/lib.video-gen 2.7.5 → 2.7.7
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/README.md +67 -25
- package/dist/browser/compositions/api-overview.js +114 -114
- package/dist/browser/compositions/index.js +115 -115
- package/dist/browser/compositions/primitives/index.js +113 -113
- package/dist/browser/compositions/social-clip.js +114 -114
- package/dist/browser/compositions/terminal-demo.js +113 -113
- package/dist/browser/design/index.js +35 -35
- package/dist/browser/generators/index.js +94 -94
- package/dist/browser/generators/scene-planner.js +94 -94
- package/dist/browser/generators/script-generator.js +94 -94
- package/dist/browser/generators/video-generator.js +94 -94
- package/dist/browser/i18n/catalogs/index.js +74 -74
- package/dist/browser/i18n/index.js +94 -94
- package/dist/browser/i18n/locale.js +2 -2
- package/dist/browser/i18n/messages.js +74 -74
- package/dist/browser/index.js +212 -212
- package/dist/browser/player/demo-player.js +116 -116
- package/dist/browser/player/index.js +116 -116
- package/dist/browser/remotion/Root.js +115 -115
- package/dist/browser/remotion/index.js +115 -115
- package/dist/compositions/api-overview.js +114 -114
- package/dist/compositions/index.d.ts +4 -4
- package/dist/compositions/index.js +115 -115
- package/dist/compositions/primitives/animated-text.d.ts +1 -1
- package/dist/compositions/primitives/brand-frame.d.ts +1 -1
- package/dist/compositions/primitives/index.d.ts +8 -8
- package/dist/compositions/primitives/index.js +113 -113
- package/dist/compositions/primitives/transition.d.ts +1 -1
- package/dist/compositions/social-clip.js +114 -114
- package/dist/compositions/terminal-demo.js +113 -113
- package/dist/design/index.d.ts +2 -2
- package/dist/design/index.js +35 -35
- package/dist/generators/index.d.ts +2 -2
- package/dist/generators/index.js +94 -94
- package/dist/generators/scene-planner.d.ts +1 -1
- package/dist/generators/scene-planner.js +94 -94
- package/dist/generators/script-generator.d.ts +2 -2
- package/dist/generators/script-generator.js +94 -94
- package/dist/generators/video-generator.js +94 -94
- package/dist/i18n/catalogs/index.d.ts +1 -1
- package/dist/i18n/catalogs/index.js +74 -74
- package/dist/i18n/index.d.ts +7 -7
- package/dist/i18n/index.js +94 -94
- package/dist/i18n/locale.d.ts +1 -1
- package/dist/i18n/locale.js +2 -2
- package/dist/i18n/messages.js +74 -74
- package/dist/index.d.ts +3 -3
- package/dist/index.js +212 -212
- package/dist/node/compositions/api-overview.js +114 -114
- package/dist/node/compositions/index.js +115 -115
- package/dist/node/compositions/primitives/index.js +113 -113
- package/dist/node/compositions/social-clip.js +114 -114
- package/dist/node/compositions/terminal-demo.js +113 -113
- package/dist/node/design/index.js +35 -35
- package/dist/node/generators/index.js +94 -94
- package/dist/node/generators/scene-planner.js +94 -94
- package/dist/node/generators/script-generator.js +94 -94
- package/dist/node/generators/video-generator.js +94 -94
- package/dist/node/i18n/catalogs/index.js +74 -74
- package/dist/node/i18n/index.js +94 -94
- package/dist/node/i18n/locale.js +2 -2
- package/dist/node/i18n/messages.js +74 -74
- package/dist/node/index.js +212 -212
- package/dist/node/player/demo-player.js +116 -116
- package/dist/node/player/index.js +116 -116
- package/dist/node/remotion/Root.js +115 -115
- package/dist/node/remotion/index.js +115 -115
- package/dist/player/demo-player.js +116 -116
- package/dist/player/index.d.ts +1 -1
- package/dist/player/index.js +116 -116
- package/dist/remotion/Root.js +115 -115
- package/dist/remotion/index.js +115 -115
- package/dist/renderers/index.d.ts +2 -2
- package/dist/types.d.ts +6 -6
- package/package.json +18 -18
|
@@ -53,6 +53,109 @@ var defaultVideoTheme = {
|
|
|
53
53
|
video: defaultVideoColors
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
+
// src/design/typography.ts
|
|
57
|
+
var videoTypography = {
|
|
58
|
+
title: {
|
|
59
|
+
fontSize: 72,
|
|
60
|
+
lineHeight: 1.1,
|
|
61
|
+
fontWeight: 700,
|
|
62
|
+
letterSpacing: -1
|
|
63
|
+
},
|
|
64
|
+
heading: {
|
|
65
|
+
fontSize: 56,
|
|
66
|
+
lineHeight: 1.2,
|
|
67
|
+
fontWeight: 600,
|
|
68
|
+
letterSpacing: -0.5
|
|
69
|
+
},
|
|
70
|
+
subheading: {
|
|
71
|
+
fontSize: 40,
|
|
72
|
+
lineHeight: 1.25,
|
|
73
|
+
fontWeight: 500
|
|
74
|
+
},
|
|
75
|
+
body: {
|
|
76
|
+
fontSize: 32,
|
|
77
|
+
lineHeight: 1.5,
|
|
78
|
+
fontWeight: 400
|
|
79
|
+
},
|
|
80
|
+
code: {
|
|
81
|
+
fontSize: 28,
|
|
82
|
+
lineHeight: 1.6,
|
|
83
|
+
fontWeight: 400
|
|
84
|
+
},
|
|
85
|
+
caption: {
|
|
86
|
+
fontSize: 24,
|
|
87
|
+
lineHeight: 1.4,
|
|
88
|
+
fontWeight: 400
|
|
89
|
+
},
|
|
90
|
+
label: {
|
|
91
|
+
fontSize: 20,
|
|
92
|
+
lineHeight: 1.3,
|
|
93
|
+
fontWeight: 600,
|
|
94
|
+
letterSpacing: 1
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
function scaleTypography(style, targetWidth) {
|
|
98
|
+
const scale = targetWidth / 1920;
|
|
99
|
+
return {
|
|
100
|
+
...style,
|
|
101
|
+
fontSize: Math.round(style.fontSize * scale),
|
|
102
|
+
letterSpacing: style.letterSpacing ? Math.round(style.letterSpacing * scale * 10) / 10 : undefined
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// src/compositions/primitives/animated-text.tsx
|
|
107
|
+
import { interpolate, useCurrentFrame, useVideoConfig } from "remotion";
|
|
108
|
+
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
109
|
+
var AnimatedText = ({
|
|
110
|
+
text,
|
|
111
|
+
variant = "body",
|
|
112
|
+
style: styleOverride,
|
|
113
|
+
enterAt = 0,
|
|
114
|
+
exitAt,
|
|
115
|
+
color = "#ffffff",
|
|
116
|
+
align = "left"
|
|
117
|
+
}) => {
|
|
118
|
+
const frame = useCurrentFrame();
|
|
119
|
+
const { width } = useVideoConfig();
|
|
120
|
+
const baseStyle = videoTypography[variant];
|
|
121
|
+
const scaled = scaleTypography(baseStyle, width);
|
|
122
|
+
const finalStyle = { ...scaled, ...styleOverride };
|
|
123
|
+
const enterProgress = interpolate(frame, [enterAt, enterAt + videoDurations.textEntrance], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
|
|
124
|
+
const enterOpacity = interpolate(enterProgress, [0, 1], [0, 1], {
|
|
125
|
+
easing: videoEasing.entrance
|
|
126
|
+
});
|
|
127
|
+
const enterTranslateY = interpolate(enterProgress, [0, 1], [30, 0], {
|
|
128
|
+
easing: videoEasing.entrance
|
|
129
|
+
});
|
|
130
|
+
let exitOpacity = 1;
|
|
131
|
+
let exitTranslateY = 0;
|
|
132
|
+
if (exitAt !== undefined) {
|
|
133
|
+
const exitProgress = interpolate(frame, [exitAt, exitAt + videoDurations.textExit], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
|
|
134
|
+
exitOpacity = interpolate(exitProgress, [0, 1], [1, 0], {
|
|
135
|
+
easing: videoEasing.exit
|
|
136
|
+
});
|
|
137
|
+
exitTranslateY = interpolate(exitProgress, [0, 1], [0, -20], {
|
|
138
|
+
easing: videoEasing.exit
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
const opacity = enterOpacity * exitOpacity;
|
|
142
|
+
const translateY = enterTranslateY + exitTranslateY;
|
|
143
|
+
return /* @__PURE__ */ jsxDEV("div", {
|
|
144
|
+
style: {
|
|
145
|
+
fontSize: finalStyle.fontSize,
|
|
146
|
+
lineHeight: finalStyle.lineHeight,
|
|
147
|
+
fontWeight: finalStyle.fontWeight,
|
|
148
|
+
letterSpacing: finalStyle.letterSpacing,
|
|
149
|
+
color,
|
|
150
|
+
textAlign: align,
|
|
151
|
+
opacity,
|
|
152
|
+
transform: `translateY(${translateY}px)`,
|
|
153
|
+
willChange: "opacity, transform"
|
|
154
|
+
},
|
|
155
|
+
children: text
|
|
156
|
+
}, undefined, false, undefined, this);
|
|
157
|
+
};
|
|
158
|
+
|
|
56
159
|
// src/design/layouts.ts
|
|
57
160
|
import { VIDEO_FORMATS } from "@contractspec/lib.contracts-integrations/integrations/providers/video";
|
|
58
161
|
var DEFAULT_FPS = 30;
|
|
@@ -89,8 +192,8 @@ function getAllFormatVariants() {
|
|
|
89
192
|
}
|
|
90
193
|
|
|
91
194
|
// src/compositions/primitives/brand-frame.tsx
|
|
92
|
-
import { interpolate, useCurrentFrame, useVideoConfig } from "remotion";
|
|
93
|
-
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
195
|
+
import { interpolate as interpolate2, useCurrentFrame as useCurrentFrame2, useVideoConfig as useVideoConfig2 } from "remotion";
|
|
196
|
+
import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
|
|
94
197
|
var BrandFrame = ({
|
|
95
198
|
styleOverrides,
|
|
96
199
|
showBranding = true,
|
|
@@ -98,8 +201,8 @@ var BrandFrame = ({
|
|
|
98
201
|
variant = "gradient",
|
|
99
202
|
children
|
|
100
203
|
}) => {
|
|
101
|
-
const frame =
|
|
102
|
-
const { width, height } =
|
|
204
|
+
const frame = useCurrentFrame2();
|
|
205
|
+
const { width, height } = useVideoConfig2();
|
|
103
206
|
const theme = defaultVideoTheme;
|
|
104
207
|
const safeZone = scaleSafeZone({ type: "custom", width, height });
|
|
105
208
|
const primaryColor = styleOverrides?.primaryColor ?? theme.colors.primary;
|
|
@@ -117,16 +220,16 @@ var BrandFrame = ({
|
|
|
117
220
|
background = "#000000";
|
|
118
221
|
break;
|
|
119
222
|
}
|
|
120
|
-
const entranceOpacity = animateEntrance ?
|
|
223
|
+
const entranceOpacity = animateEntrance ? interpolate2(frame, [0, 15], [0, 1], {
|
|
121
224
|
extrapolateLeft: "clamp",
|
|
122
225
|
extrapolateRight: "clamp",
|
|
123
226
|
easing: videoEasing.entrance
|
|
124
227
|
}) : 1;
|
|
125
|
-
const brandOpacity = showBranding ?
|
|
228
|
+
const brandOpacity = showBranding ? interpolate2(frame, [videoDurations.brandReveal, videoDurations.brandReveal + 15], [0, 0.3], {
|
|
126
229
|
extrapolateLeft: "clamp",
|
|
127
230
|
extrapolateRight: "clamp"
|
|
128
231
|
}) : 0;
|
|
129
|
-
return /* @__PURE__ */
|
|
232
|
+
return /* @__PURE__ */ jsxDEV2("div", {
|
|
130
233
|
style: {
|
|
131
234
|
width,
|
|
132
235
|
height,
|
|
@@ -136,7 +239,7 @@ var BrandFrame = ({
|
|
|
136
239
|
opacity: entranceOpacity
|
|
137
240
|
},
|
|
138
241
|
children: [
|
|
139
|
-
variant === "gradient" && /* @__PURE__ */
|
|
242
|
+
variant === "gradient" && /* @__PURE__ */ jsxDEV2("div", {
|
|
140
243
|
style: {
|
|
141
244
|
position: "absolute",
|
|
142
245
|
top: "-20%",
|
|
@@ -148,7 +251,7 @@ var BrandFrame = ({
|
|
|
148
251
|
pointerEvents: "none"
|
|
149
252
|
}
|
|
150
253
|
}, undefined, false, undefined, this),
|
|
151
|
-
/* @__PURE__ */
|
|
254
|
+
/* @__PURE__ */ jsxDEV2("div", {
|
|
152
255
|
style: {
|
|
153
256
|
position: "absolute",
|
|
154
257
|
left: safeZone.horizontal,
|
|
@@ -160,7 +263,7 @@ var BrandFrame = ({
|
|
|
160
263
|
},
|
|
161
264
|
children
|
|
162
265
|
}, undefined, false, undefined, this),
|
|
163
|
-
showBranding && /* @__PURE__ */
|
|
266
|
+
showBranding && /* @__PURE__ */ jsxDEV2("div", {
|
|
164
267
|
style: {
|
|
165
268
|
position: "absolute",
|
|
166
269
|
bottom: safeZone.vertical / 2,
|
|
@@ -177,109 +280,6 @@ var BrandFrame = ({
|
|
|
177
280
|
}, undefined, true, undefined, this);
|
|
178
281
|
};
|
|
179
282
|
|
|
180
|
-
// src/design/typography.ts
|
|
181
|
-
var videoTypography = {
|
|
182
|
-
title: {
|
|
183
|
-
fontSize: 72,
|
|
184
|
-
lineHeight: 1.1,
|
|
185
|
-
fontWeight: 700,
|
|
186
|
-
letterSpacing: -1
|
|
187
|
-
},
|
|
188
|
-
heading: {
|
|
189
|
-
fontSize: 56,
|
|
190
|
-
lineHeight: 1.2,
|
|
191
|
-
fontWeight: 600,
|
|
192
|
-
letterSpacing: -0.5
|
|
193
|
-
},
|
|
194
|
-
subheading: {
|
|
195
|
-
fontSize: 40,
|
|
196
|
-
lineHeight: 1.25,
|
|
197
|
-
fontWeight: 500
|
|
198
|
-
},
|
|
199
|
-
body: {
|
|
200
|
-
fontSize: 32,
|
|
201
|
-
lineHeight: 1.5,
|
|
202
|
-
fontWeight: 400
|
|
203
|
-
},
|
|
204
|
-
code: {
|
|
205
|
-
fontSize: 28,
|
|
206
|
-
lineHeight: 1.6,
|
|
207
|
-
fontWeight: 400
|
|
208
|
-
},
|
|
209
|
-
caption: {
|
|
210
|
-
fontSize: 24,
|
|
211
|
-
lineHeight: 1.4,
|
|
212
|
-
fontWeight: 400
|
|
213
|
-
},
|
|
214
|
-
label: {
|
|
215
|
-
fontSize: 20,
|
|
216
|
-
lineHeight: 1.3,
|
|
217
|
-
fontWeight: 600,
|
|
218
|
-
letterSpacing: 1
|
|
219
|
-
}
|
|
220
|
-
};
|
|
221
|
-
function scaleTypography(style, targetWidth) {
|
|
222
|
-
const scale = targetWidth / 1920;
|
|
223
|
-
return {
|
|
224
|
-
...style,
|
|
225
|
-
fontSize: Math.round(style.fontSize * scale),
|
|
226
|
-
letterSpacing: style.letterSpacing ? Math.round(style.letterSpacing * scale * 10) / 10 : undefined
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// src/compositions/primitives/animated-text.tsx
|
|
231
|
-
import { interpolate as interpolate2, useCurrentFrame as useCurrentFrame2, useVideoConfig as useVideoConfig2 } from "remotion";
|
|
232
|
-
import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
|
|
233
|
-
var AnimatedText = ({
|
|
234
|
-
text,
|
|
235
|
-
variant = "body",
|
|
236
|
-
style: styleOverride,
|
|
237
|
-
enterAt = 0,
|
|
238
|
-
exitAt,
|
|
239
|
-
color = "#ffffff",
|
|
240
|
-
align = "left"
|
|
241
|
-
}) => {
|
|
242
|
-
const frame = useCurrentFrame2();
|
|
243
|
-
const { width } = useVideoConfig2();
|
|
244
|
-
const baseStyle = videoTypography[variant];
|
|
245
|
-
const scaled = scaleTypography(baseStyle, width);
|
|
246
|
-
const finalStyle = { ...scaled, ...styleOverride };
|
|
247
|
-
const enterProgress = interpolate2(frame, [enterAt, enterAt + videoDurations.textEntrance], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
|
|
248
|
-
const enterOpacity = interpolate2(enterProgress, [0, 1], [0, 1], {
|
|
249
|
-
easing: videoEasing.entrance
|
|
250
|
-
});
|
|
251
|
-
const enterTranslateY = interpolate2(enterProgress, [0, 1], [30, 0], {
|
|
252
|
-
easing: videoEasing.entrance
|
|
253
|
-
});
|
|
254
|
-
let exitOpacity = 1;
|
|
255
|
-
let exitTranslateY = 0;
|
|
256
|
-
if (exitAt !== undefined) {
|
|
257
|
-
const exitProgress = interpolate2(frame, [exitAt, exitAt + videoDurations.textExit], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
|
|
258
|
-
exitOpacity = interpolate2(exitProgress, [0, 1], [1, 0], {
|
|
259
|
-
easing: videoEasing.exit
|
|
260
|
-
});
|
|
261
|
-
exitTranslateY = interpolate2(exitProgress, [0, 1], [0, -20], {
|
|
262
|
-
easing: videoEasing.exit
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
const opacity = enterOpacity * exitOpacity;
|
|
266
|
-
const translateY = enterTranslateY + exitTranslateY;
|
|
267
|
-
return /* @__PURE__ */ jsxDEV2("div", {
|
|
268
|
-
style: {
|
|
269
|
-
fontSize: finalStyle.fontSize,
|
|
270
|
-
lineHeight: finalStyle.lineHeight,
|
|
271
|
-
fontWeight: finalStyle.fontWeight,
|
|
272
|
-
letterSpacing: finalStyle.letterSpacing,
|
|
273
|
-
color,
|
|
274
|
-
textAlign: align,
|
|
275
|
-
opacity,
|
|
276
|
-
transform: `translateY(${translateY}px)`,
|
|
277
|
-
willChange: "opacity, transform"
|
|
278
|
-
},
|
|
279
|
-
children: text
|
|
280
|
-
}, undefined, false, undefined, this);
|
|
281
|
-
};
|
|
282
|
-
|
|
283
283
|
// src/compositions/primitives/progress-bar.tsx
|
|
284
284
|
import { useCurrentFrame as useCurrentFrame3, useVideoConfig as useVideoConfig3 } from "remotion";
|
|
285
285
|
import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
|
|
@@ -316,8 +316,8 @@ var ProgressBar = ({
|
|
|
316
316
|
// src/compositions/social-clip.tsx
|
|
317
317
|
import {
|
|
318
318
|
AbsoluteFill,
|
|
319
|
-
Sequence,
|
|
320
319
|
interpolate as interpolate3,
|
|
320
|
+
Sequence,
|
|
321
321
|
useCurrentFrame as useCurrentFrame4,
|
|
322
322
|
useVideoConfig as useVideoConfig4
|
|
323
323
|
} from "remotion";
|
|
@@ -53,6 +53,109 @@ var defaultVideoTheme = {
|
|
|
53
53
|
video: defaultVideoColors
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
+
// src/design/typography.ts
|
|
57
|
+
var videoTypography = {
|
|
58
|
+
title: {
|
|
59
|
+
fontSize: 72,
|
|
60
|
+
lineHeight: 1.1,
|
|
61
|
+
fontWeight: 700,
|
|
62
|
+
letterSpacing: -1
|
|
63
|
+
},
|
|
64
|
+
heading: {
|
|
65
|
+
fontSize: 56,
|
|
66
|
+
lineHeight: 1.2,
|
|
67
|
+
fontWeight: 600,
|
|
68
|
+
letterSpacing: -0.5
|
|
69
|
+
},
|
|
70
|
+
subheading: {
|
|
71
|
+
fontSize: 40,
|
|
72
|
+
lineHeight: 1.25,
|
|
73
|
+
fontWeight: 500
|
|
74
|
+
},
|
|
75
|
+
body: {
|
|
76
|
+
fontSize: 32,
|
|
77
|
+
lineHeight: 1.5,
|
|
78
|
+
fontWeight: 400
|
|
79
|
+
},
|
|
80
|
+
code: {
|
|
81
|
+
fontSize: 28,
|
|
82
|
+
lineHeight: 1.6,
|
|
83
|
+
fontWeight: 400
|
|
84
|
+
},
|
|
85
|
+
caption: {
|
|
86
|
+
fontSize: 24,
|
|
87
|
+
lineHeight: 1.4,
|
|
88
|
+
fontWeight: 400
|
|
89
|
+
},
|
|
90
|
+
label: {
|
|
91
|
+
fontSize: 20,
|
|
92
|
+
lineHeight: 1.3,
|
|
93
|
+
fontWeight: 600,
|
|
94
|
+
letterSpacing: 1
|
|
95
|
+
}
|
|
96
|
+
};
|
|
97
|
+
function scaleTypography(style, targetWidth) {
|
|
98
|
+
const scale = targetWidth / 1920;
|
|
99
|
+
return {
|
|
100
|
+
...style,
|
|
101
|
+
fontSize: Math.round(style.fontSize * scale),
|
|
102
|
+
letterSpacing: style.letterSpacing ? Math.round(style.letterSpacing * scale * 10) / 10 : undefined
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// src/compositions/primitives/animated-text.tsx
|
|
107
|
+
import { interpolate, useCurrentFrame, useVideoConfig } from "remotion";
|
|
108
|
+
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
109
|
+
var AnimatedText = ({
|
|
110
|
+
text,
|
|
111
|
+
variant = "body",
|
|
112
|
+
style: styleOverride,
|
|
113
|
+
enterAt = 0,
|
|
114
|
+
exitAt,
|
|
115
|
+
color = "#ffffff",
|
|
116
|
+
align = "left"
|
|
117
|
+
}) => {
|
|
118
|
+
const frame = useCurrentFrame();
|
|
119
|
+
const { width } = useVideoConfig();
|
|
120
|
+
const baseStyle = videoTypography[variant];
|
|
121
|
+
const scaled = scaleTypography(baseStyle, width);
|
|
122
|
+
const finalStyle = { ...scaled, ...styleOverride };
|
|
123
|
+
const enterProgress = interpolate(frame, [enterAt, enterAt + videoDurations.textEntrance], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
|
|
124
|
+
const enterOpacity = interpolate(enterProgress, [0, 1], [0, 1], {
|
|
125
|
+
easing: videoEasing.entrance
|
|
126
|
+
});
|
|
127
|
+
const enterTranslateY = interpolate(enterProgress, [0, 1], [30, 0], {
|
|
128
|
+
easing: videoEasing.entrance
|
|
129
|
+
});
|
|
130
|
+
let exitOpacity = 1;
|
|
131
|
+
let exitTranslateY = 0;
|
|
132
|
+
if (exitAt !== undefined) {
|
|
133
|
+
const exitProgress = interpolate(frame, [exitAt, exitAt + videoDurations.textExit], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
|
|
134
|
+
exitOpacity = interpolate(exitProgress, [0, 1], [1, 0], {
|
|
135
|
+
easing: videoEasing.exit
|
|
136
|
+
});
|
|
137
|
+
exitTranslateY = interpolate(exitProgress, [0, 1], [0, -20], {
|
|
138
|
+
easing: videoEasing.exit
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
const opacity = enterOpacity * exitOpacity;
|
|
142
|
+
const translateY = enterTranslateY + exitTranslateY;
|
|
143
|
+
return /* @__PURE__ */ jsxDEV("div", {
|
|
144
|
+
style: {
|
|
145
|
+
fontSize: finalStyle.fontSize,
|
|
146
|
+
lineHeight: finalStyle.lineHeight,
|
|
147
|
+
fontWeight: finalStyle.fontWeight,
|
|
148
|
+
letterSpacing: finalStyle.letterSpacing,
|
|
149
|
+
color,
|
|
150
|
+
textAlign: align,
|
|
151
|
+
opacity,
|
|
152
|
+
transform: `translateY(${translateY}px)`,
|
|
153
|
+
willChange: "opacity, transform"
|
|
154
|
+
},
|
|
155
|
+
children: text
|
|
156
|
+
}, undefined, false, undefined, this);
|
|
157
|
+
};
|
|
158
|
+
|
|
56
159
|
// src/design/layouts.ts
|
|
57
160
|
import { VIDEO_FORMATS } from "@contractspec/lib.contracts-integrations/integrations/providers/video";
|
|
58
161
|
var DEFAULT_FPS = 30;
|
|
@@ -89,8 +192,8 @@ function getAllFormatVariants() {
|
|
|
89
192
|
}
|
|
90
193
|
|
|
91
194
|
// src/compositions/primitives/brand-frame.tsx
|
|
92
|
-
import { interpolate, useCurrentFrame, useVideoConfig } from "remotion";
|
|
93
|
-
import { jsxDEV } from "react/jsx-dev-runtime";
|
|
195
|
+
import { interpolate as interpolate2, useCurrentFrame as useCurrentFrame2, useVideoConfig as useVideoConfig2 } from "remotion";
|
|
196
|
+
import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
|
|
94
197
|
var BrandFrame = ({
|
|
95
198
|
styleOverrides,
|
|
96
199
|
showBranding = true,
|
|
@@ -98,8 +201,8 @@ var BrandFrame = ({
|
|
|
98
201
|
variant = "gradient",
|
|
99
202
|
children
|
|
100
203
|
}) => {
|
|
101
|
-
const frame =
|
|
102
|
-
const { width, height } =
|
|
204
|
+
const frame = useCurrentFrame2();
|
|
205
|
+
const { width, height } = useVideoConfig2();
|
|
103
206
|
const theme = defaultVideoTheme;
|
|
104
207
|
const safeZone = scaleSafeZone({ type: "custom", width, height });
|
|
105
208
|
const primaryColor = styleOverrides?.primaryColor ?? theme.colors.primary;
|
|
@@ -117,16 +220,16 @@ var BrandFrame = ({
|
|
|
117
220
|
background = "#000000";
|
|
118
221
|
break;
|
|
119
222
|
}
|
|
120
|
-
const entranceOpacity = animateEntrance ?
|
|
223
|
+
const entranceOpacity = animateEntrance ? interpolate2(frame, [0, 15], [0, 1], {
|
|
121
224
|
extrapolateLeft: "clamp",
|
|
122
225
|
extrapolateRight: "clamp",
|
|
123
226
|
easing: videoEasing.entrance
|
|
124
227
|
}) : 1;
|
|
125
|
-
const brandOpacity = showBranding ?
|
|
228
|
+
const brandOpacity = showBranding ? interpolate2(frame, [videoDurations.brandReveal, videoDurations.brandReveal + 15], [0, 0.3], {
|
|
126
229
|
extrapolateLeft: "clamp",
|
|
127
230
|
extrapolateRight: "clamp"
|
|
128
231
|
}) : 0;
|
|
129
|
-
return /* @__PURE__ */
|
|
232
|
+
return /* @__PURE__ */ jsxDEV2("div", {
|
|
130
233
|
style: {
|
|
131
234
|
width,
|
|
132
235
|
height,
|
|
@@ -136,7 +239,7 @@ var BrandFrame = ({
|
|
|
136
239
|
opacity: entranceOpacity
|
|
137
240
|
},
|
|
138
241
|
children: [
|
|
139
|
-
variant === "gradient" && /* @__PURE__ */
|
|
242
|
+
variant === "gradient" && /* @__PURE__ */ jsxDEV2("div", {
|
|
140
243
|
style: {
|
|
141
244
|
position: "absolute",
|
|
142
245
|
top: "-20%",
|
|
@@ -148,7 +251,7 @@ var BrandFrame = ({
|
|
|
148
251
|
pointerEvents: "none"
|
|
149
252
|
}
|
|
150
253
|
}, undefined, false, undefined, this),
|
|
151
|
-
/* @__PURE__ */
|
|
254
|
+
/* @__PURE__ */ jsxDEV2("div", {
|
|
152
255
|
style: {
|
|
153
256
|
position: "absolute",
|
|
154
257
|
left: safeZone.horizontal,
|
|
@@ -160,7 +263,7 @@ var BrandFrame = ({
|
|
|
160
263
|
},
|
|
161
264
|
children
|
|
162
265
|
}, undefined, false, undefined, this),
|
|
163
|
-
showBranding && /* @__PURE__ */
|
|
266
|
+
showBranding && /* @__PURE__ */ jsxDEV2("div", {
|
|
164
267
|
style: {
|
|
165
268
|
position: "absolute",
|
|
166
269
|
bottom: safeZone.vertical / 2,
|
|
@@ -177,109 +280,6 @@ var BrandFrame = ({
|
|
|
177
280
|
}, undefined, true, undefined, this);
|
|
178
281
|
};
|
|
179
282
|
|
|
180
|
-
// src/design/typography.ts
|
|
181
|
-
var videoTypography = {
|
|
182
|
-
title: {
|
|
183
|
-
fontSize: 72,
|
|
184
|
-
lineHeight: 1.1,
|
|
185
|
-
fontWeight: 700,
|
|
186
|
-
letterSpacing: -1
|
|
187
|
-
},
|
|
188
|
-
heading: {
|
|
189
|
-
fontSize: 56,
|
|
190
|
-
lineHeight: 1.2,
|
|
191
|
-
fontWeight: 600,
|
|
192
|
-
letterSpacing: -0.5
|
|
193
|
-
},
|
|
194
|
-
subheading: {
|
|
195
|
-
fontSize: 40,
|
|
196
|
-
lineHeight: 1.25,
|
|
197
|
-
fontWeight: 500
|
|
198
|
-
},
|
|
199
|
-
body: {
|
|
200
|
-
fontSize: 32,
|
|
201
|
-
lineHeight: 1.5,
|
|
202
|
-
fontWeight: 400
|
|
203
|
-
},
|
|
204
|
-
code: {
|
|
205
|
-
fontSize: 28,
|
|
206
|
-
lineHeight: 1.6,
|
|
207
|
-
fontWeight: 400
|
|
208
|
-
},
|
|
209
|
-
caption: {
|
|
210
|
-
fontSize: 24,
|
|
211
|
-
lineHeight: 1.4,
|
|
212
|
-
fontWeight: 400
|
|
213
|
-
},
|
|
214
|
-
label: {
|
|
215
|
-
fontSize: 20,
|
|
216
|
-
lineHeight: 1.3,
|
|
217
|
-
fontWeight: 600,
|
|
218
|
-
letterSpacing: 1
|
|
219
|
-
}
|
|
220
|
-
};
|
|
221
|
-
function scaleTypography(style, targetWidth) {
|
|
222
|
-
const scale = targetWidth / 1920;
|
|
223
|
-
return {
|
|
224
|
-
...style,
|
|
225
|
-
fontSize: Math.round(style.fontSize * scale),
|
|
226
|
-
letterSpacing: style.letterSpacing ? Math.round(style.letterSpacing * scale * 10) / 10 : undefined
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
// src/compositions/primitives/animated-text.tsx
|
|
231
|
-
import { interpolate as interpolate2, useCurrentFrame as useCurrentFrame2, useVideoConfig as useVideoConfig2 } from "remotion";
|
|
232
|
-
import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
|
|
233
|
-
var AnimatedText = ({
|
|
234
|
-
text,
|
|
235
|
-
variant = "body",
|
|
236
|
-
style: styleOverride,
|
|
237
|
-
enterAt = 0,
|
|
238
|
-
exitAt,
|
|
239
|
-
color = "#ffffff",
|
|
240
|
-
align = "left"
|
|
241
|
-
}) => {
|
|
242
|
-
const frame = useCurrentFrame2();
|
|
243
|
-
const { width } = useVideoConfig2();
|
|
244
|
-
const baseStyle = videoTypography[variant];
|
|
245
|
-
const scaled = scaleTypography(baseStyle, width);
|
|
246
|
-
const finalStyle = { ...scaled, ...styleOverride };
|
|
247
|
-
const enterProgress = interpolate2(frame, [enterAt, enterAt + videoDurations.textEntrance], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
|
|
248
|
-
const enterOpacity = interpolate2(enterProgress, [0, 1], [0, 1], {
|
|
249
|
-
easing: videoEasing.entrance
|
|
250
|
-
});
|
|
251
|
-
const enterTranslateY = interpolate2(enterProgress, [0, 1], [30, 0], {
|
|
252
|
-
easing: videoEasing.entrance
|
|
253
|
-
});
|
|
254
|
-
let exitOpacity = 1;
|
|
255
|
-
let exitTranslateY = 0;
|
|
256
|
-
if (exitAt !== undefined) {
|
|
257
|
-
const exitProgress = interpolate2(frame, [exitAt, exitAt + videoDurations.textExit], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
|
|
258
|
-
exitOpacity = interpolate2(exitProgress, [0, 1], [1, 0], {
|
|
259
|
-
easing: videoEasing.exit
|
|
260
|
-
});
|
|
261
|
-
exitTranslateY = interpolate2(exitProgress, [0, 1], [0, -20], {
|
|
262
|
-
easing: videoEasing.exit
|
|
263
|
-
});
|
|
264
|
-
}
|
|
265
|
-
const opacity = enterOpacity * exitOpacity;
|
|
266
|
-
const translateY = enterTranslateY + exitTranslateY;
|
|
267
|
-
return /* @__PURE__ */ jsxDEV2("div", {
|
|
268
|
-
style: {
|
|
269
|
-
fontSize: finalStyle.fontSize,
|
|
270
|
-
lineHeight: finalStyle.lineHeight,
|
|
271
|
-
fontWeight: finalStyle.fontWeight,
|
|
272
|
-
letterSpacing: finalStyle.letterSpacing,
|
|
273
|
-
color,
|
|
274
|
-
textAlign: align,
|
|
275
|
-
opacity,
|
|
276
|
-
transform: `translateY(${translateY}px)`,
|
|
277
|
-
willChange: "opacity, transform"
|
|
278
|
-
},
|
|
279
|
-
children: text
|
|
280
|
-
}, undefined, false, undefined, this);
|
|
281
|
-
};
|
|
282
|
-
|
|
283
283
|
// src/compositions/primitives/progress-bar.tsx
|
|
284
284
|
import { useCurrentFrame as useCurrentFrame3, useVideoConfig as useVideoConfig3 } from "remotion";
|
|
285
285
|
import { jsxDEV as jsxDEV3 } from "react/jsx-dev-runtime";
|
|
@@ -53,41 +53,6 @@ var defaultVideoTheme = {
|
|
|
53
53
|
video: defaultVideoColors
|
|
54
54
|
};
|
|
55
55
|
|
|
56
|
-
// src/design/layouts.ts
|
|
57
|
-
import { VIDEO_FORMATS } from "@contractspec/lib.contracts-integrations/integrations/providers/video";
|
|
58
|
-
var DEFAULT_FPS = 30;
|
|
59
|
-
var videoSafeZone = {
|
|
60
|
-
horizontal: 120,
|
|
61
|
-
vertical: 80,
|
|
62
|
-
contentWidth: 1680,
|
|
63
|
-
contentHeight: 920
|
|
64
|
-
};
|
|
65
|
-
function scaleSafeZone(format) {
|
|
66
|
-
const scaleX = format.width / 1920;
|
|
67
|
-
const scaleY = format.height / 1080;
|
|
68
|
-
return {
|
|
69
|
-
horizontal: Math.round(videoSafeZone.horizontal * scaleX),
|
|
70
|
-
vertical: Math.round(videoSafeZone.vertical * scaleY),
|
|
71
|
-
contentWidth: Math.round(videoSafeZone.contentWidth * scaleX),
|
|
72
|
-
contentHeight: Math.round(videoSafeZone.contentHeight * scaleY)
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
var videoPositions = {
|
|
76
|
-
center: { x: 960, y: 540 },
|
|
77
|
-
topLeft: { x: 120, y: 80 },
|
|
78
|
-
topRight: { x: 1800, y: 80 },
|
|
79
|
-
bottomLeft: { x: 120, y: 1000 },
|
|
80
|
-
bottomRight: { x: 1800, y: 1000 },
|
|
81
|
-
bottomCenter: { x: 960, y: 960 }
|
|
82
|
-
};
|
|
83
|
-
function getAllFormatVariants() {
|
|
84
|
-
return [
|
|
85
|
-
VIDEO_FORMATS.landscape,
|
|
86
|
-
VIDEO_FORMATS.square,
|
|
87
|
-
VIDEO_FORMATS.portrait
|
|
88
|
-
];
|
|
89
|
-
}
|
|
90
|
-
|
|
91
56
|
// src/design/typography.ts
|
|
92
57
|
var videoTypography = {
|
|
93
58
|
title: {
|
|
@@ -137,6 +102,41 @@ function scaleTypography(style, targetWidth) {
|
|
|
137
102
|
letterSpacing: style.letterSpacing ? Math.round(style.letterSpacing * scale * 10) / 10 : undefined
|
|
138
103
|
};
|
|
139
104
|
}
|
|
105
|
+
|
|
106
|
+
// src/design/layouts.ts
|
|
107
|
+
import { VIDEO_FORMATS } from "@contractspec/lib.contracts-integrations/integrations/providers/video";
|
|
108
|
+
var DEFAULT_FPS = 30;
|
|
109
|
+
var videoSafeZone = {
|
|
110
|
+
horizontal: 120,
|
|
111
|
+
vertical: 80,
|
|
112
|
+
contentWidth: 1680,
|
|
113
|
+
contentHeight: 920
|
|
114
|
+
};
|
|
115
|
+
function scaleSafeZone(format) {
|
|
116
|
+
const scaleX = format.width / 1920;
|
|
117
|
+
const scaleY = format.height / 1080;
|
|
118
|
+
return {
|
|
119
|
+
horizontal: Math.round(videoSafeZone.horizontal * scaleX),
|
|
120
|
+
vertical: Math.round(videoSafeZone.vertical * scaleY),
|
|
121
|
+
contentWidth: Math.round(videoSafeZone.contentWidth * scaleX),
|
|
122
|
+
contentHeight: Math.round(videoSafeZone.contentHeight * scaleY)
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
var videoPositions = {
|
|
126
|
+
center: { x: 960, y: 540 },
|
|
127
|
+
topLeft: { x: 120, y: 80 },
|
|
128
|
+
topRight: { x: 1800, y: 80 },
|
|
129
|
+
bottomLeft: { x: 120, y: 1000 },
|
|
130
|
+
bottomRight: { x: 1800, y: 1000 },
|
|
131
|
+
bottomCenter: { x: 960, y: 960 }
|
|
132
|
+
};
|
|
133
|
+
function getAllFormatVariants() {
|
|
134
|
+
return [
|
|
135
|
+
VIDEO_FORMATS.landscape,
|
|
136
|
+
VIDEO_FORMATS.square,
|
|
137
|
+
VIDEO_FORMATS.portrait
|
|
138
|
+
];
|
|
139
|
+
}
|
|
140
140
|
export {
|
|
141
141
|
videoTypography,
|
|
142
142
|
videoTransitions,
|