@contractspec/lib.video-gen 1.42.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 (137) hide show
  1. package/dist/browser/compositions/api-overview.js +645 -0
  2. package/dist/browser/compositions/index.js +1133 -0
  3. package/dist/browser/compositions/primitives/animated-text.js +144 -0
  4. package/dist/browser/compositions/primitives/brand-frame.js +181 -0
  5. package/dist/browser/compositions/primitives/code-block.js +226 -0
  6. package/dist/browser/compositions/primitives/index.js +656 -0
  7. package/dist/browser/compositions/primitives/progress-bar.js +59 -0
  8. package/dist/browser/compositions/primitives/terminal.js +265 -0
  9. package/dist/browser/compositions/primitives/transition.js +98 -0
  10. package/dist/browser/compositions/social-clip.js +500 -0
  11. package/dist/browser/compositions/terminal-demo.js +558 -0
  12. package/dist/browser/design/index.js +155 -0
  13. package/dist/browser/design/layouts.js +50 -0
  14. package/dist/browser/design/motion.js +43 -0
  15. package/dist/browser/design/tokens.js +28 -0
  16. package/dist/browser/design/typography.js +61 -0
  17. package/dist/browser/docs/compositions.docblock.js +182 -0
  18. package/dist/browser/docs/design.docblock.js +187 -0
  19. package/dist/browser/docs/generators.docblock.js +187 -0
  20. package/dist/browser/docs/rendering.docblock.js +197 -0
  21. package/dist/browser/docs/video-gen.docblock.js +141 -0
  22. package/dist/browser/generators/index.js +416 -0
  23. package/dist/browser/generators/scene-planner.js +205 -0
  24. package/dist/browser/generators/script-generator.js +147 -0
  25. package/dist/browser/generators/video-generator.js +414 -0
  26. package/dist/browser/index.js +1550 -0
  27. package/dist/browser/player/demo-player.js +1136 -0
  28. package/dist/browser/player/index.js +1136 -0
  29. package/dist/browser/remotion/Root.js +1189 -0
  30. package/dist/browser/remotion/index.js +1190 -0
  31. package/dist/browser/renderers/config.js +40 -0
  32. package/dist/browser/renderers/index.js +160 -0
  33. package/dist/browser/renderers/local.js +156 -0
  34. package/dist/browser/types.js +13 -0
  35. package/dist/compositions/api-overview.d.ts +16 -0
  36. package/dist/compositions/api-overview.js +640 -0
  37. package/dist/compositions/index.d.ts +7 -0
  38. package/dist/compositions/index.js +1128 -0
  39. package/dist/compositions/primitives/animated-text.d.ts +22 -0
  40. package/dist/compositions/primitives/animated-text.js +139 -0
  41. package/dist/compositions/primitives/brand-frame.d.ts +14 -0
  42. package/dist/compositions/primitives/brand-frame.js +176 -0
  43. package/dist/compositions/primitives/code-block.d.ts +18 -0
  44. package/dist/compositions/primitives/code-block.js +221 -0
  45. package/dist/compositions/primitives/index.d.ts +12 -0
  46. package/dist/compositions/primitives/index.js +651 -0
  47. package/dist/compositions/primitives/progress-bar.d.ts +12 -0
  48. package/dist/compositions/primitives/progress-bar.js +54 -0
  49. package/dist/compositions/primitives/terminal.d.ts +24 -0
  50. package/dist/compositions/primitives/terminal.js +260 -0
  51. package/dist/compositions/primitives/transition.d.ts +14 -0
  52. package/dist/compositions/primitives/transition.js +93 -0
  53. package/dist/compositions/social-clip.d.ts +16 -0
  54. package/dist/compositions/social-clip.js +495 -0
  55. package/dist/compositions/terminal-demo.d.ts +17 -0
  56. package/dist/compositions/terminal-demo.js +553 -0
  57. package/dist/design/index.d.ts +4 -0
  58. package/dist/design/index.js +150 -0
  59. package/dist/design/layouts.d.ts +69 -0
  60. package/dist/design/layouts.js +45 -0
  61. package/dist/design/motion.d.ts +72 -0
  62. package/dist/design/motion.js +38 -0
  63. package/dist/design/tokens.d.ts +31 -0
  64. package/dist/design/tokens.js +23 -0
  65. package/dist/design/typography.d.ts +61 -0
  66. package/dist/design/typography.js +56 -0
  67. package/dist/docs/compositions.docblock.d.ts +1 -0
  68. package/dist/docs/compositions.docblock.js +183 -0
  69. package/dist/docs/design.docblock.d.ts +1 -0
  70. package/dist/docs/design.docblock.js +188 -0
  71. package/dist/docs/generators.docblock.d.ts +1 -0
  72. package/dist/docs/generators.docblock.js +188 -0
  73. package/dist/docs/rendering.docblock.d.ts +1 -0
  74. package/dist/docs/rendering.docblock.js +198 -0
  75. package/dist/docs/video-gen.docblock.d.ts +1 -0
  76. package/dist/docs/video-gen.docblock.js +142 -0
  77. package/dist/generators/index.d.ts +5 -0
  78. package/dist/generators/index.js +411 -0
  79. package/dist/generators/scene-planner.d.ts +23 -0
  80. package/dist/generators/scene-planner.js +200 -0
  81. package/dist/generators/script-generator.d.ts +49 -0
  82. package/dist/generators/script-generator.js +142 -0
  83. package/dist/generators/video-generator.d.ts +20 -0
  84. package/dist/generators/video-generator.js +409 -0
  85. package/dist/index.d.ts +6 -0
  86. package/dist/index.js +1545 -0
  87. package/dist/node/compositions/api-overview.js +640 -0
  88. package/dist/node/compositions/index.js +1128 -0
  89. package/dist/node/compositions/primitives/animated-text.js +139 -0
  90. package/dist/node/compositions/primitives/brand-frame.js +176 -0
  91. package/dist/node/compositions/primitives/code-block.js +221 -0
  92. package/dist/node/compositions/primitives/index.js +651 -0
  93. package/dist/node/compositions/primitives/progress-bar.js +54 -0
  94. package/dist/node/compositions/primitives/terminal.js +260 -0
  95. package/dist/node/compositions/primitives/transition.js +93 -0
  96. package/dist/node/compositions/social-clip.js +495 -0
  97. package/dist/node/compositions/terminal-demo.js +553 -0
  98. package/dist/node/design/index.js +150 -0
  99. package/dist/node/design/layouts.js +45 -0
  100. package/dist/node/design/motion.js +38 -0
  101. package/dist/node/design/tokens.js +23 -0
  102. package/dist/node/design/typography.js +56 -0
  103. package/dist/node/docs/compositions.docblock.js +182 -0
  104. package/dist/node/docs/design.docblock.js +187 -0
  105. package/dist/node/docs/generators.docblock.js +187 -0
  106. package/dist/node/docs/rendering.docblock.js +197 -0
  107. package/dist/node/docs/video-gen.docblock.js +141 -0
  108. package/dist/node/generators/index.js +411 -0
  109. package/dist/node/generators/scene-planner.js +200 -0
  110. package/dist/node/generators/script-generator.js +142 -0
  111. package/dist/node/generators/video-generator.js +409 -0
  112. package/dist/node/index.js +1545 -0
  113. package/dist/node/player/demo-player.js +1131 -0
  114. package/dist/node/player/index.js +1131 -0
  115. package/dist/node/remotion/Root.js +1184 -0
  116. package/dist/node/remotion/index.js +1185 -0
  117. package/dist/node/renderers/config.js +35 -0
  118. package/dist/node/renderers/index.js +155 -0
  119. package/dist/node/renderers/local.js +151 -0
  120. package/dist/node/types.js +8 -0
  121. package/dist/player/demo-player.d.ts +55 -0
  122. package/dist/player/demo-player.js +1131 -0
  123. package/dist/player/index.d.ts +2 -0
  124. package/dist/player/index.js +1131 -0
  125. package/dist/remotion/Root.d.ts +2 -0
  126. package/dist/remotion/Root.js +1184 -0
  127. package/dist/remotion/index.d.ts +1 -0
  128. package/dist/remotion/index.js +1185 -0
  129. package/dist/renderers/config.d.ts +28 -0
  130. package/dist/renderers/config.js +35 -0
  131. package/dist/renderers/index.d.ts +3 -0
  132. package/dist/renderers/index.js +155 -0
  133. package/dist/renderers/local.d.ts +17 -0
  134. package/dist/renderers/local.js +151 -0
  135. package/dist/types.d.ts +63 -0
  136. package/dist/types.js +8 -0
  137. package/package.json +637 -0
@@ -0,0 +1,265 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined")
5
+ return require.apply(this, arguments);
6
+ throw Error('Dynamic require of "' + x + '" is not supported');
7
+ });
8
+
9
+ // src/design/motion.ts
10
+ import { Easing } from "remotion";
11
+ var videoEasing = {
12
+ entrance: Easing.out(Easing.exp),
13
+ exit: Easing.in(Easing.exp),
14
+ emphasis: Easing.out(Easing.back(1.4)),
15
+ linear: Easing.linear,
16
+ gentle: Easing.bezier(0.25, 0.1, 0.25, 1),
17
+ spring: Easing.out(Easing.back(1.7))
18
+ };
19
+ var videoDurations = {
20
+ sceneTransition: 20,
21
+ textEntrance: 15,
22
+ textExit: 12,
23
+ codeTypingPerChar: 2,
24
+ sectionPause: 30,
25
+ emphasisPause: 15,
26
+ brandReveal: 25,
27
+ minScene: 60,
28
+ shortScene: 60,
29
+ mediumScene: 120,
30
+ longScene: 240
31
+ };
32
+ var videoTransitions = {
33
+ fade: { type: "fade", durationInFrames: 20 },
34
+ slideLeft: { type: "slide-left", durationInFrames: 20 },
35
+ slideRight: { type: "slide-right", durationInFrames: 20 },
36
+ wipe: { type: "wipe", durationInFrames: 15 },
37
+ none: { type: "none", durationInFrames: 0 }
38
+ };
39
+
40
+ // src/design/tokens.ts
41
+ import { defaultTokens } from "@contractspec/lib.design-system";
42
+ var defaultVideoColors = {
43
+ canvasBackground: defaultTokens.colors.background,
44
+ codeBackground: "#1e1e2e",
45
+ terminalBackground: "#0d1117",
46
+ terminalForeground: "#c9d1d9",
47
+ highlight: defaultTokens.colors.accent,
48
+ gradientStart: defaultTokens.colors.primary,
49
+ gradientEnd: defaultTokens.colors.accent
50
+ };
51
+ var defaultVideoTheme = {
52
+ ...defaultTokens,
53
+ video: defaultVideoColors
54
+ };
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/terminal.tsx
107
+ import { interpolate, useCurrentFrame, useVideoConfig } from "remotion";
108
+ import { jsxDEV } from "react/jsx-dev-runtime";
109
+ var LINE_TYPE_COLORS = {
110
+ command: "#c9d1d9",
111
+ output: "#8b949e",
112
+ error: "#f85149",
113
+ success: "#3fb950",
114
+ comment: "#6e7681"
115
+ };
116
+ var Terminal = ({
117
+ lines,
118
+ startAt = 0,
119
+ prompt = "$ ",
120
+ title = "Terminal",
121
+ backgroundColor = defaultVideoColors.terminalBackground,
122
+ typingSpeed = videoDurations.codeTypingPerChar
123
+ }) => {
124
+ const frame = useCurrentFrame();
125
+ const { width } = useVideoConfig();
126
+ const codeStyle = scaleTypography(videoTypography.code, width);
127
+ const lineTimings = [];
128
+ let currentFrame = startAt;
129
+ for (const line of lines) {
130
+ const delay = line.delay ?? 10;
131
+ const lineStart = currentFrame + delay;
132
+ if (line.type === "command") {
133
+ const typeDuration = line.text.length * typingSpeed;
134
+ lineTimings.push({
135
+ startFrame: lineStart,
136
+ endFrame: lineStart + typeDuration
137
+ });
138
+ currentFrame = lineStart + typeDuration;
139
+ } else {
140
+ lineTimings.push({ startFrame: lineStart, endFrame: lineStart + 5 });
141
+ currentFrame = lineStart + 5;
142
+ }
143
+ }
144
+ const opacity = interpolate(frame, [startAt, startAt + 10], [0, 1], {
145
+ extrapolateLeft: "clamp",
146
+ extrapolateRight: "clamp",
147
+ easing: videoEasing.entrance
148
+ });
149
+ return /* @__PURE__ */ jsxDEV("div", {
150
+ style: {
151
+ backgroundColor,
152
+ borderRadius: 16,
153
+ overflow: "hidden",
154
+ opacity,
155
+ boxShadow: "0 8px 32px rgba(0,0,0,0.3)"
156
+ },
157
+ children: [
158
+ /* @__PURE__ */ jsxDEV("div", {
159
+ style: {
160
+ display: "flex",
161
+ alignItems: "center",
162
+ padding: "12px 20px",
163
+ backgroundColor: "rgba(255,255,255,0.05)",
164
+ gap: 8
165
+ },
166
+ children: [
167
+ /* @__PURE__ */ jsxDEV("div", {
168
+ style: { display: "flex", gap: 8 },
169
+ children: [
170
+ /* @__PURE__ */ jsxDEV("div", {
171
+ style: {
172
+ width: 12,
173
+ height: 12,
174
+ borderRadius: "50%",
175
+ backgroundColor: "#ff5f57"
176
+ }
177
+ }, undefined, false, undefined, this),
178
+ /* @__PURE__ */ jsxDEV("div", {
179
+ style: {
180
+ width: 12,
181
+ height: 12,
182
+ borderRadius: "50%",
183
+ backgroundColor: "#febc2e"
184
+ }
185
+ }, undefined, false, undefined, this),
186
+ /* @__PURE__ */ jsxDEV("div", {
187
+ style: {
188
+ width: 12,
189
+ height: 12,
190
+ borderRadius: "50%",
191
+ backgroundColor: "#28c840"
192
+ }
193
+ }, undefined, false, undefined, this)
194
+ ]
195
+ }, undefined, true, undefined, this),
196
+ /* @__PURE__ */ jsxDEV("div", {
197
+ style: {
198
+ flex: 1,
199
+ textAlign: "center",
200
+ color: "#484f58",
201
+ fontSize: codeStyle.fontSize * 0.7,
202
+ fontFamily: "monospace"
203
+ },
204
+ children: title
205
+ }, undefined, false, undefined, this)
206
+ ]
207
+ }, undefined, true, undefined, this),
208
+ /* @__PURE__ */ jsxDEV("div", {
209
+ style: { padding: "24px 32px", minHeight: 200 },
210
+ children: lines.map((line, i) => {
211
+ const timing = lineTimings[i];
212
+ if (!timing || frame < timing.startFrame)
213
+ return null;
214
+ const isCommand = line.type === "command";
215
+ const lineColor = LINE_TYPE_COLORS[line.type];
216
+ let visibleText = line.text;
217
+ if (isCommand) {
218
+ const typingProgress = interpolate(frame, [timing.startFrame, timing.endFrame], [0, line.text.length], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
219
+ visibleText = line.text.slice(0, Math.floor(typingProgress));
220
+ }
221
+ const lineOpacity = isCommand ? 1 : interpolate(frame, [timing.startFrame, timing.startFrame + 5], [0, 1], {
222
+ extrapolateLeft: "clamp",
223
+ extrapolateRight: "clamp"
224
+ });
225
+ const isTyping = isCommand && frame >= timing.startFrame && frame <= timing.endFrame;
226
+ const showCursor = isTyping && frame % 16 < 10;
227
+ return /* @__PURE__ */ jsxDEV("div", {
228
+ style: {
229
+ fontFamily: "'SF Mono', 'Fira Code', 'JetBrains Mono', monospace",
230
+ fontSize: codeStyle.fontSize,
231
+ lineHeight: 1.8,
232
+ color: lineColor,
233
+ opacity: lineOpacity,
234
+ whiteSpace: "pre-wrap"
235
+ },
236
+ children: [
237
+ isCommand && /* @__PURE__ */ jsxDEV("span", {
238
+ style: { color: "#3fb950" },
239
+ children: prompt
240
+ }, undefined, false, undefined, this),
241
+ line.type === "comment" && /* @__PURE__ */ jsxDEV("span", {
242
+ style: { color: LINE_TYPE_COLORS.comment },
243
+ children: "# "
244
+ }, undefined, false, undefined, this),
245
+ visibleText,
246
+ showCursor && /* @__PURE__ */ jsxDEV("span", {
247
+ style: {
248
+ backgroundColor: "#c9d1d9",
249
+ width: "2px",
250
+ display: "inline-block",
251
+ height: "1.2em",
252
+ verticalAlign: "text-bottom"
253
+ },
254
+ children: " "
255
+ }, undefined, false, undefined, this)
256
+ ]
257
+ }, `${i}-${line.text.slice(0, 20)}`, true, undefined, this);
258
+ })
259
+ }, undefined, false, undefined, this)
260
+ ]
261
+ }, undefined, true, undefined, this);
262
+ };
263
+ export {
264
+ Terminal
265
+ };
@@ -0,0 +1,98 @@
1
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
2
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
3
+ }) : x)(function(x) {
4
+ if (typeof require !== "undefined")
5
+ return require.apply(this, arguments);
6
+ throw Error('Dynamic require of "' + x + '" is not supported');
7
+ });
8
+
9
+ // src/design/motion.ts
10
+ import { Easing } from "remotion";
11
+ var videoEasing = {
12
+ entrance: Easing.out(Easing.exp),
13
+ exit: Easing.in(Easing.exp),
14
+ emphasis: Easing.out(Easing.back(1.4)),
15
+ linear: Easing.linear,
16
+ gentle: Easing.bezier(0.25, 0.1, 0.25, 1),
17
+ spring: Easing.out(Easing.back(1.7))
18
+ };
19
+ var videoDurations = {
20
+ sceneTransition: 20,
21
+ textEntrance: 15,
22
+ textExit: 12,
23
+ codeTypingPerChar: 2,
24
+ sectionPause: 30,
25
+ emphasisPause: 15,
26
+ brandReveal: 25,
27
+ minScene: 60,
28
+ shortScene: 60,
29
+ mediumScene: 120,
30
+ longScene: 240
31
+ };
32
+ var videoTransitions = {
33
+ fade: { type: "fade", durationInFrames: 20 },
34
+ slideLeft: { type: "slide-left", durationInFrames: 20 },
35
+ slideRight: { type: "slide-right", durationInFrames: 20 },
36
+ wipe: { type: "wipe", durationInFrames: 15 },
37
+ none: { type: "none", durationInFrames: 0 }
38
+ };
39
+
40
+ // src/compositions/primitives/transition.tsx
41
+ import { interpolate, useCurrentFrame } from "remotion";
42
+ import { jsxDEV, Fragment } from "react/jsx-dev-runtime";
43
+ var SceneTransitionWrapper = ({
44
+ type,
45
+ durationInFrames,
46
+ direction,
47
+ startAt = 0,
48
+ children
49
+ }) => {
50
+ const frame = useCurrentFrame();
51
+ if (type === "none" || durationInFrames === 0) {
52
+ return /* @__PURE__ */ jsxDEV(Fragment, {
53
+ children
54
+ }, undefined, false, undefined, this);
55
+ }
56
+ const progress = interpolate(frame, [startAt, startAt + durationInFrames], direction === "in" ? [0, 1] : [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
57
+ const styles = getTransitionStyles(type, progress);
58
+ return /* @__PURE__ */ jsxDEV("div", {
59
+ style: styles,
60
+ children
61
+ }, undefined, false, undefined, this);
62
+ };
63
+ function getTransitionStyles(type, progress) {
64
+ const eased = videoEasing.entrance(progress);
65
+ switch (type) {
66
+ case "fade":
67
+ return {
68
+ opacity: eased,
69
+ width: "100%",
70
+ height: "100%"
71
+ };
72
+ case "slide-left":
73
+ return {
74
+ opacity: eased,
75
+ transform: `translateX(${(1 - eased) * 100}%)`,
76
+ width: "100%",
77
+ height: "100%"
78
+ };
79
+ case "slide-right":
80
+ return {
81
+ opacity: eased,
82
+ transform: `translateX(${(1 - eased) * -100}%)`,
83
+ width: "100%",
84
+ height: "100%"
85
+ };
86
+ case "wipe":
87
+ return {
88
+ clipPath: `inset(0 ${(1 - eased) * 100}% 0 0)`,
89
+ width: "100%",
90
+ height: "100%"
91
+ };
92
+ default:
93
+ return { width: "100%", height: "100%" };
94
+ }
95
+ }
96
+ export {
97
+ SceneTransitionWrapper
98
+ };