@depths/waves 0.2.0 → 0.3.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.
@@ -57,15 +57,70 @@ var WavesRenderError = class _WavesRenderError extends WavesError {
57
57
  }
58
58
  };
59
59
 
60
- // src/remotion/WavesComposition.tsx
60
+ // src/remotion/Fill.tsx
61
61
  var import_jsx_runtime = require("react/jsx-runtime");
62
- var WavesComposition = ({ ir, registry }) => {
63
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: ir.timeline.map((node) => renderComponent(node, registry)) });
62
+ var Fill = ({ style, children }) => {
63
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
64
+ "div",
65
+ {
66
+ style: {
67
+ width: "100%",
68
+ height: "100%",
69
+ position: "relative",
70
+ boxSizing: "border-box",
71
+ ...style ?? {}
72
+ },
73
+ children
74
+ }
75
+ );
76
+ };
77
+
78
+ // src/remotion/WavesComposition.tsx
79
+ var import_jsx_runtime2 = require("react/jsx-runtime");
80
+ var WavesComposition = ({ ir, registry, debug }) => {
81
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment, { children: ir.timeline.map((node) => renderComponent(node, registry, debug, "absolute-fill")) });
64
82
  };
65
83
  var getProps = (component) => {
66
84
  return component.props ?? {};
67
85
  };
68
- function renderComponent(component, registry) {
86
+ function debugColor(key) {
87
+ let hash = 0;
88
+ for (let i = 0; i < key.length; i++) hash = hash * 31 + key.charCodeAt(i) | 0;
89
+ const hue = Math.abs(hash) % 360;
90
+ return `hsl(${hue} 90% 55%)`;
91
+ }
92
+ function DebugWrap(props) {
93
+ const { enabled, showLabel, id, type, children } = props;
94
+ if (!enabled) return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_jsx_runtime2.Fragment, { children });
95
+ const color = debugColor(`${type}:${id}`);
96
+ const label = `${type} (${id})`;
97
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(Fill, { style: { outline: `2px solid ${color}`, outlineOffset: -2 }, children: [
98
+ children,
99
+ showLabel ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
100
+ "div",
101
+ {
102
+ style: {
103
+ position: "absolute",
104
+ left: 0,
105
+ top: 0,
106
+ padding: "2px 6px",
107
+ fontSize: 12,
108
+ fontWeight: 800,
109
+ color: "#000",
110
+ backgroundColor: color,
111
+ borderBottomRightRadius: 6,
112
+ pointerEvents: "none",
113
+ maxWidth: "100%",
114
+ overflow: "hidden",
115
+ textOverflow: "ellipsis",
116
+ whiteSpace: "nowrap"
117
+ },
118
+ children: label
119
+ }
120
+ ) : null
121
+ ] });
122
+ }
123
+ function renderComponent(component, registry, debug, sequenceLayout) {
69
124
  const registration = registry.get(component.type);
70
125
  if (!registration) {
71
126
  throw new WavesRenderError("Unknown component type", { type: component.type });
@@ -81,20 +136,23 @@ function renderComponent(component, registry) {
81
136
  if (!parsedProps || typeof parsedProps !== "object") {
82
137
  throw new WavesRenderError("Component props must be an object", { type: component.type });
83
138
  }
84
- const children = component.children?.length ? component.children.map((c) => renderComponent(c, registry)) : null;
85
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
139
+ const children = component.children?.length ? component.children.map((c) => renderComponent(c, registry, debug, "none")) : null;
140
+ const debugEnabled = Boolean(debug?.bounds);
141
+ const showLabel = Boolean(debug?.labels);
142
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
86
143
  import_remotion.Sequence,
87
144
  {
88
145
  from: component.timing.from,
89
146
  durationInFrames: component.timing.durationInFrames,
90
- children: import_react.default.createElement(
147
+ layout: sequenceLayout,
148
+ children: /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(DebugWrap, { enabled: debugEnabled, showLabel, id: component.id, type: component.type, children: import_react.default.createElement(
91
149
  registration.component,
92
150
  {
93
151
  ...parsedProps,
94
152
  __wavesDurationInFrames: component.timing.durationInFrames
95
153
  },
96
154
  children
97
- )
155
+ ) })
98
156
  },
99
157
  component.id
100
158
  );
@@ -175,7 +233,7 @@ function staticFileInputFromAssetPath(assetPath) {
175
233
  }
176
234
 
177
235
  // src/components/primitives/Audio.tsx
178
- var import_jsx_runtime2 = require("react/jsx-runtime");
236
+ var import_jsx_runtime3 = require("react/jsx-runtime");
179
237
  var AudioPropsSchema = import_zod2.z.object({
180
238
  src: import_zod2.z.string(),
181
239
  volume: import_zod2.z.number().min(0).max(1).default(1),
@@ -203,7 +261,7 @@ var Audio = ({
203
261
  extrapolateRight: "clamp"
204
262
  }) : 1;
205
263
  const resolvedSrc = isRemoteAssetPath(src) ? src : (0, import_remotion2.staticFile)(staticFileInputFromAssetPath(src));
206
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
264
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
207
265
  import_remotion2.Audio,
208
266
  {
209
267
  src: resolvedSrc,
@@ -220,19 +278,57 @@ var AudioComponentMetadata = {
220
278
  };
221
279
 
222
280
  // src/components/primitives/Box.tsx
281
+ var import_react2 = __toESM(require("react"));
223
282
  var import_zod3 = require("zod");
224
- var import_jsx_runtime3 = require("react/jsx-runtime");
283
+ var import_jsx_runtime4 = require("react/jsx-runtime");
225
284
  var BoxPropsSchema = import_zod3.z.object({
226
- x: import_zod3.z.number().default(0).describe("Left offset in pixels"),
227
- y: import_zod3.z.number().default(0).describe("Top offset in pixels"),
228
- width: import_zod3.z.number().positive().optional().describe("Width in pixels (omit for auto)"),
229
- height: import_zod3.z.number().positive().optional().describe("Height in pixels (omit for auto)"),
285
+ width: import_zod3.z.number().positive().optional().describe("Width in pixels (optional)"),
286
+ height: import_zod3.z.number().positive().optional().describe("Height in pixels (optional)"),
230
287
  padding: import_zod3.z.number().min(0).default(0).describe("Padding in pixels"),
231
- backgroundColor: import_zod3.z.string().optional().describe("CSS color (e.g. #RRGGBB)"),
288
+ backgroundColor: import_zod3.z.string().optional().describe("CSS color (e.g. #RRGGBB, rgba())"),
232
289
  borderRadius: import_zod3.z.number().min(0).default(0).describe("Border radius in pixels"),
233
290
  opacity: import_zod3.z.number().min(0).max(1).default(1).describe("Opacity 0..1")
234
291
  });
235
- var Box = ({
292
+ var Box = ({ width, height, padding, backgroundColor, borderRadius, opacity, children }) => {
293
+ const layers = import_react2.default.Children.toArray(children);
294
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
295
+ Fill,
296
+ {
297
+ style: {
298
+ width,
299
+ height,
300
+ padding,
301
+ backgroundColor,
302
+ borderRadius,
303
+ opacity
304
+ },
305
+ children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i))
306
+ }
307
+ );
308
+ };
309
+ var BoxComponentMetadata = {
310
+ kind: "primitive",
311
+ category: "layout",
312
+ acceptsChildren: true,
313
+ description: "Flow container for layout and backgrounds (layout-safe)",
314
+ llmGuidance: "Use Box as a container inside Grid/Stack. Box participates in layout flow. For x/y positioning, use Frame."
315
+ };
316
+
317
+ // src/components/primitives/Frame.tsx
318
+ var import_react3 = __toESM(require("react"));
319
+ var import_zod4 = require("zod");
320
+ var import_jsx_runtime5 = require("react/jsx-runtime");
321
+ var FramePropsSchema = import_zod4.z.object({
322
+ x: import_zod4.z.number().default(0).describe("Left offset in pixels"),
323
+ y: import_zod4.z.number().default(0).describe("Top offset in pixels"),
324
+ width: import_zod4.z.number().positive().optional().describe("Width in pixels (optional)"),
325
+ height: import_zod4.z.number().positive().optional().describe("Height in pixels (optional)"),
326
+ padding: import_zod4.z.number().min(0).default(0).describe("Padding in pixels"),
327
+ backgroundColor: import_zod4.z.string().optional().describe("CSS color (e.g. #RRGGBB, rgba())"),
328
+ borderRadius: import_zod4.z.number().min(0).default(0).describe("Border radius in pixels"),
329
+ opacity: import_zod4.z.number().min(0).max(1).default(1).describe("Opacity 0..1")
330
+ });
331
+ var Frame = ({
236
332
  x,
237
333
  y,
238
334
  width,
@@ -243,7 +339,8 @@ var Box = ({
243
339
  opacity,
244
340
  children
245
341
  }) => {
246
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
342
+ const layers = import_react3.default.Children.toArray(children);
343
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
247
344
  "div",
248
345
  {
249
346
  style: {
@@ -258,29 +355,28 @@ var Box = ({
258
355
  opacity,
259
356
  boxSizing: "border-box"
260
357
  },
261
- children
358
+ children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(Fill, { children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) })
262
359
  }
263
360
  );
264
361
  };
265
- var BoxComponentMetadata = {
362
+ var FrameComponentMetadata = {
266
363
  kind: "primitive",
267
364
  category: "layout",
268
365
  acceptsChildren: true,
269
- description: "Positioned container box for layout and backgrounds",
270
- llmGuidance: "Use Box to position content by x/y and optionally constrain width/height. Prefer Box+Stack/Grid for layouts."
366
+ description: "Absolute-positioned container (x/y placement)",
367
+ llmGuidance: "Use Frame for precise pixel placement (x/y). Use Box for normal layout flow inside Grid/Stack."
271
368
  };
272
369
 
273
370
  // src/components/primitives/Grid.tsx
274
- var import_remotion3 = require("remotion");
275
- var import_zod4 = require("zod");
276
- var import_jsx_runtime4 = require("react/jsx-runtime");
277
- var GridPropsSchema = import_zod4.z.object({
278
- columns: import_zod4.z.number().int().min(1).max(12).default(2),
279
- rows: import_zod4.z.number().int().min(1).max(12).default(1),
280
- gap: import_zod4.z.number().min(0).default(24),
281
- padding: import_zod4.z.number().min(0).default(0),
282
- align: import_zod4.z.enum(["start", "center", "end", "stretch"]).default("stretch"),
283
- justify: import_zod4.z.enum(["start", "center", "end", "stretch"]).default("stretch")
371
+ var import_zod5 = require("zod");
372
+ var import_jsx_runtime6 = require("react/jsx-runtime");
373
+ var GridPropsSchema = import_zod5.z.object({
374
+ columns: import_zod5.z.number().int().min(1).max(12).default(2),
375
+ rows: import_zod5.z.number().int().min(1).max(12).default(1),
376
+ gap: import_zod5.z.number().min(0).default(24),
377
+ padding: import_zod5.z.number().min(0).default(0),
378
+ align: import_zod5.z.enum(["start", "center", "end", "stretch"]).default("stretch"),
379
+ justify: import_zod5.z.enum(["start", "center", "end", "stretch"]).default("stretch")
284
380
  });
285
381
  var mapAlign = (a) => {
286
382
  if (a === "start") return "start";
@@ -295,8 +391,8 @@ var mapJustify = (j) => {
295
391
  return "stretch";
296
392
  };
297
393
  var Grid = ({ columns, rows, gap, padding, align, justify, children }) => {
298
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
299
- import_remotion3.AbsoluteFill,
394
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
395
+ Fill,
300
396
  {
301
397
  style: {
302
398
  display: "grid",
@@ -321,19 +417,19 @@ var GridComponentMetadata = {
321
417
  };
322
418
 
323
419
  // src/components/primitives/Image.tsx
324
- var import_remotion4 = require("remotion");
325
- var import_zod5 = require("zod");
326
- var import_jsx_runtime5 = require("react/jsx-runtime");
327
- var ImagePropsSchema = import_zod5.z.object({
328
- src: import_zod5.z.string().min(1),
329
- fit: import_zod5.z.enum(["cover", "contain"]).default("cover"),
330
- borderRadius: import_zod5.z.number().min(0).default(0),
331
- opacity: import_zod5.z.number().min(0).max(1).default(1)
420
+ var import_remotion3 = require("remotion");
421
+ var import_zod6 = require("zod");
422
+ var import_jsx_runtime7 = require("react/jsx-runtime");
423
+ var ImagePropsSchema = import_zod6.z.object({
424
+ src: import_zod6.z.string().min(1),
425
+ fit: import_zod6.z.enum(["cover", "contain"]).default("cover"),
426
+ borderRadius: import_zod6.z.number().min(0).default(0),
427
+ opacity: import_zod6.z.number().min(0).max(1).default(1)
332
428
  });
333
- var resolveAsset = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion4.staticFile)(staticFileInputFromAssetPath(value));
429
+ var resolveAsset = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion3.staticFile)(staticFileInputFromAssetPath(value));
334
430
  var Image = ({ src, fit, borderRadius, opacity }) => {
335
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_remotion4.AbsoluteFill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
336
- import_remotion4.Img,
431
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Fill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
432
+ import_remotion3.Img,
337
433
  {
338
434
  src: resolveAsset(src),
339
435
  style: { width: "100%", height: "100%", objectFit: fit, borderRadius }
@@ -347,115 +443,174 @@ var ImageComponentMetadata = {
347
443
  llmGuidance: 'Use Image for pictures and backgrounds. Use fit="cover" for full-bleed, fit="contain" to avoid cropping.'
348
444
  };
349
445
 
350
- // src/components/primitives/Scene.tsx
351
- var import_remotion5 = require("remotion");
446
+ // src/components/primitives/Layer.tsx
447
+ var import_react4 = __toESM(require("react"));
352
448
  var import_zod7 = require("zod");
449
+ var import_jsx_runtime8 = require("react/jsx-runtime");
450
+ var LayerPropsSchema = import_zod7.z.object({
451
+ zIndex: import_zod7.z.number().int().default(0).describe("Higher zIndex renders on top"),
452
+ inset: import_zod7.z.number().min(0).default(0).describe("Inset from all sides in pixels"),
453
+ opacity: import_zod7.z.number().min(0).max(1).default(1),
454
+ pointerEvents: import_zod7.z.enum(["none", "auto"]).default("none")
455
+ });
456
+ var Layer = ({ zIndex, inset, opacity, pointerEvents, children }) => {
457
+ const layers = import_react4.default.Children.toArray(children);
458
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
459
+ "div",
460
+ {
461
+ style: {
462
+ position: "absolute",
463
+ left: inset,
464
+ right: inset,
465
+ top: inset,
466
+ bottom: inset,
467
+ zIndex,
468
+ opacity,
469
+ pointerEvents,
470
+ boxSizing: "border-box"
471
+ },
472
+ children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Fill, { children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime8.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) })
473
+ }
474
+ );
475
+ };
476
+ var LayerComponentMetadata = {
477
+ kind: "primitive",
478
+ category: "layout",
479
+ acceptsChildren: true,
480
+ minChildren: 1,
481
+ description: "One overlay layer with explicit zIndex inside Layers",
482
+ llmGuidance: "Use Layer inside Layers to control stacking. Put exactly one child in a Layer (recommended)."
483
+ };
484
+
485
+ // src/components/primitives/Layers.tsx
486
+ var import_zod8 = require("zod");
487
+ var import_jsx_runtime9 = require("react/jsx-runtime");
488
+ var LayersPropsSchema = import_zod8.z.object({
489
+ overflow: import_zod8.z.enum(["visible", "hidden"]).default("visible").describe("Clip layers to bounds")
490
+ });
491
+ var Layers = ({ overflow, children }) => {
492
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Fill, { style: { overflow }, children });
493
+ };
494
+ var LayersComponentMetadata = {
495
+ kind: "primitive",
496
+ category: "layout",
497
+ acceptsChildren: true,
498
+ minChildren: 1,
499
+ description: "Overlay container for stacking children (use Layer for zIndex)",
500
+ llmGuidance: "Use Layers to stack background/content/overlays. Prefer Layer children with explicit zIndex."
501
+ };
502
+
503
+ // src/components/primitives/Scene.tsx
504
+ var import_react5 = __toESM(require("react"));
505
+ var import_remotion4 = require("remotion");
506
+ var import_zod10 = require("zod");
353
507
 
354
508
  // src/ir/schema.ts
355
- var import_zod6 = require("zod");
356
- var TimingSpecSchema = import_zod6.z.object({
357
- from: import_zod6.z.number().int().min(0).describe("Start frame (0-indexed)"),
358
- durationInFrames: import_zod6.z.number().int().positive().describe("Duration in frames")
509
+ var import_zod9 = require("zod");
510
+ var TimingSpecSchema = import_zod9.z.object({
511
+ from: import_zod9.z.number().int().min(0).describe("Start frame (0-indexed)"),
512
+ durationInFrames: import_zod9.z.number().int().positive().describe("Duration in frames")
359
513
  });
360
- var AssetPathSchema = import_zod6.z.string().refine(
514
+ var AssetPathSchema = import_zod9.z.string().refine(
361
515
  (path) => path.startsWith("/") || path.startsWith("http://") || path.startsWith("https://"),
362
516
  "Asset path must be absolute (starting with /) or a full URL"
363
517
  ).describe("Path to asset file, either absolute path or URL");
364
- var BackgroundSpecSchema = import_zod6.z.discriminatedUnion("type", [
365
- import_zod6.z.object({
366
- type: import_zod6.z.literal("color"),
367
- value: import_zod6.z.string().regex(/^#[0-9A-Fa-f]{6}$/, "Must be valid hex color")
518
+ var BackgroundSpecSchema = import_zod9.z.discriminatedUnion("type", [
519
+ import_zod9.z.object({
520
+ type: import_zod9.z.literal("color"),
521
+ value: import_zod9.z.string().regex(/^#[0-9A-Fa-f]{6}$/, "Must be valid hex color")
368
522
  }),
369
- import_zod6.z.object({
370
- type: import_zod6.z.literal("image"),
523
+ import_zod9.z.object({
524
+ type: import_zod9.z.literal("image"),
371
525
  value: AssetPathSchema
372
526
  }),
373
- import_zod6.z.object({
374
- type: import_zod6.z.literal("video"),
527
+ import_zod9.z.object({
528
+ type: import_zod9.z.literal("video"),
375
529
  value: AssetPathSchema
376
530
  })
377
531
  ]);
378
- var VideoConfigSchema = import_zod6.z.object({
379
- id: import_zod6.z.string().default("main"),
380
- width: import_zod6.z.number().int().min(360).max(7680),
381
- height: import_zod6.z.number().int().min(360).max(4320),
382
- fps: import_zod6.z.number().int().min(1).max(120).default(30),
383
- durationInFrames: import_zod6.z.number().int().positive()
532
+ var VideoConfigSchema = import_zod9.z.object({
533
+ id: import_zod9.z.string().default("main"),
534
+ width: import_zod9.z.number().int().min(360).max(7680),
535
+ height: import_zod9.z.number().int().min(360).max(4320),
536
+ fps: import_zod9.z.number().int().min(1).max(120).default(30),
537
+ durationInFrames: import_zod9.z.number().int().positive()
384
538
  });
385
- var AudioSpecSchema = import_zod6.z.object({
539
+ var AudioSpecSchema = import_zod9.z.object({
386
540
  background: AssetPathSchema.optional(),
387
- volume: import_zod6.z.number().min(0).max(1).default(0.5)
541
+ volume: import_zod9.z.number().min(0).max(1).default(0.5)
388
542
  }).optional();
389
- var TransitionSpecSchema = import_zod6.z.object({
390
- type: import_zod6.z.string().min(1),
391
- durationInFrames: import_zod6.z.number().int().positive(),
392
- props: import_zod6.z.record(import_zod6.z.string(), import_zod6.z.unknown()).optional()
543
+ var TransitionSpecSchema = import_zod9.z.object({
544
+ type: import_zod9.z.string().min(1),
545
+ durationInFrames: import_zod9.z.number().int().positive(),
546
+ props: import_zod9.z.record(import_zod9.z.string(), import_zod9.z.unknown()).optional()
393
547
  });
394
- var ComponentNodeSchema = import_zod6.z.lazy(
395
- () => import_zod6.z.object({
396
- id: import_zod6.z.string().min(1).max(100).describe("Unique component instance ID"),
397
- type: import_zod6.z.string().min(1).describe("Registered component type identifier"),
548
+ var ComponentNodeSchema = import_zod9.z.lazy(
549
+ () => import_zod9.z.object({
550
+ id: import_zod9.z.string().min(1).max(100).describe("Unique component instance ID"),
551
+ type: import_zod9.z.string().min(1).describe("Registered component type identifier"),
398
552
  timing: TimingSpecSchema.optional().describe("Optional timing (frames)"),
399
- props: import_zod6.z.record(import_zod6.z.string(), import_zod6.z.unknown()).optional().describe("Component props object"),
400
- metadata: import_zod6.z.record(import_zod6.z.string(), import_zod6.z.unknown()).optional().describe("Optional metadata"),
401
- children: import_zod6.z.array(ComponentNodeSchema).optional().describe("Nested children nodes")
553
+ props: import_zod9.z.record(import_zod9.z.string(), import_zod9.z.unknown()).optional().describe("Component props object"),
554
+ metadata: import_zod9.z.record(import_zod9.z.string(), import_zod9.z.unknown()).optional().describe("Optional metadata"),
555
+ children: import_zod9.z.array(ComponentNodeSchema).optional().describe("Nested children nodes")
402
556
  })
403
557
  );
404
- var SegmentSchema = import_zod6.z.object({
405
- id: import_zod6.z.string().min(1).max(100),
406
- durationInFrames: import_zod6.z.number().int().positive(),
558
+ var SegmentSchema = import_zod9.z.object({
559
+ id: import_zod9.z.string().min(1).max(100),
560
+ durationInFrames: import_zod9.z.number().int().positive(),
407
561
  root: ComponentNodeSchema,
408
562
  transitionToNext: TransitionSpecSchema.optional()
409
563
  });
410
- var VideoIRv2Schema = import_zod6.z.object({
411
- version: import_zod6.z.literal("2.0").describe("IR schema version"),
564
+ var VideoIRv2Schema = import_zod9.z.object({
565
+ version: import_zod9.z.literal("2.0").describe("IR schema version"),
412
566
  video: VideoConfigSchema,
413
567
  audio: AudioSpecSchema,
414
- segments: import_zod6.z.array(SegmentSchema).min(1).optional(),
415
- timeline: import_zod6.z.array(ComponentNodeSchema).min(1).optional()
568
+ segments: import_zod9.z.array(SegmentSchema).min(1).optional(),
569
+ timeline: import_zod9.z.array(ComponentNodeSchema).min(1).optional()
416
570
  }).superRefine((v, ctx) => {
417
571
  const hasSegments = Array.isArray(v.segments);
418
572
  const hasTimeline = Array.isArray(v.timeline);
419
573
  if (hasSegments === hasTimeline) {
420
574
  ctx.addIssue({
421
- code: import_zod6.z.ZodIssueCode.custom,
575
+ code: import_zod9.z.ZodIssueCode.custom,
422
576
  message: 'Exactly one of "segments" or "timeline" must be provided',
423
577
  path: []
424
578
  });
425
579
  }
426
580
  });
427
- var VideoIRv2AuthoringSchema = import_zod6.z.object({
428
- version: import_zod6.z.literal("2.0").describe("IR schema version"),
581
+ var VideoIRv2AuthoringSchema = import_zod9.z.object({
582
+ version: import_zod9.z.literal("2.0").describe("IR schema version"),
429
583
  video: VideoConfigSchema,
430
584
  audio: AudioSpecSchema,
431
- segments: import_zod6.z.array(SegmentSchema).min(1),
432
- timeline: import_zod6.z.never().optional()
585
+ segments: import_zod9.z.array(SegmentSchema).min(1),
586
+ timeline: import_zod9.z.never().optional()
433
587
  }).describe("Preferred authoring format: sequential segments with optional transitions");
434
588
 
435
589
  // src/components/primitives/Scene.tsx
436
- var import_jsx_runtime6 = require("react/jsx-runtime");
437
- var ScenePropsSchema = import_zod7.z.object({
590
+ var import_jsx_runtime10 = require("react/jsx-runtime");
591
+ var ScenePropsSchema = import_zod10.z.object({
438
592
  background: BackgroundSpecSchema
439
593
  });
440
594
  var resolveAsset2 = (value) => {
441
- return isRemoteAssetPath(value) ? value : (0, import_remotion5.staticFile)(staticFileInputFromAssetPath(value));
595
+ return isRemoteAssetPath(value) ? value : (0, import_remotion4.staticFile)(staticFileInputFromAssetPath(value));
442
596
  };
443
597
  var Scene = ({ background, children }) => {
444
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(import_remotion5.AbsoluteFill, { children: [
445
- background.type === "color" ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_remotion5.AbsoluteFill, { style: { backgroundColor: background.value } }) : background.type === "image" ? /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
446
- import_remotion5.Img,
598
+ const layers = import_react5.default.Children.toArray(children);
599
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_remotion4.AbsoluteFill, { children: [
600
+ background.type === "color" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_remotion4.AbsoluteFill, { style: { backgroundColor: background.value } }) : background.type === "image" ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
601
+ import_remotion4.Img,
447
602
  {
448
603
  src: resolveAsset2(background.value),
449
604
  style: { width: "100%", height: "100%", objectFit: "cover" }
450
605
  }
451
- ) : /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
452
- import_remotion5.Video,
606
+ ) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
607
+ import_remotion4.Video,
453
608
  {
454
609
  src: resolveAsset2(background.value),
455
610
  style: { width: "100%", height: "100%", objectFit: "cover" }
456
611
  }
457
612
  ),
458
- /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_remotion5.AbsoluteFill, { children })
613
+ /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_remotion4.AbsoluteFill, { children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_remotion4.AbsoluteFill, { children: child }, i)) })
459
614
  ] });
460
615
  };
461
616
  var SceneComponentMetadata = {
@@ -467,37 +622,37 @@ var SceneComponentMetadata = {
467
622
  };
468
623
 
469
624
  // src/components/primitives/Segment.tsx
470
- var import_remotion6 = require("remotion");
471
- var import_zod8 = require("zod");
472
- var import_jsx_runtime7 = require("react/jsx-runtime");
473
- var TransitionPropsSchema = import_zod8.z.object({
474
- type: import_zod8.z.string().min(1),
475
- durationInFrames: import_zod8.z.number().int().positive(),
476
- props: import_zod8.z.record(import_zod8.z.string(), import_zod8.z.unknown()).optional()
625
+ var import_remotion5 = require("remotion");
626
+ var import_zod11 = require("zod");
627
+ var import_jsx_runtime11 = require("react/jsx-runtime");
628
+ var TransitionPropsSchema = import_zod11.z.object({
629
+ type: import_zod11.z.string().min(1),
630
+ durationInFrames: import_zod11.z.number().int().positive(),
631
+ props: import_zod11.z.record(import_zod11.z.string(), import_zod11.z.unknown()).optional()
477
632
  });
478
- var SegmentPropsSchema = import_zod8.z.object({
633
+ var SegmentPropsSchema = import_zod11.z.object({
479
634
  enterTransition: TransitionPropsSchema.optional(),
480
635
  exitTransition: TransitionPropsSchema.optional()
481
636
  });
482
637
  function getSlideOptions(raw) {
483
- const parsed = import_zod8.z.object({
484
- direction: import_zod8.z.enum(["left", "right", "up", "down"]).default("left"),
485
- distance: import_zod8.z.number().int().min(1).max(2e3).default(80)
638
+ const parsed = import_zod11.z.object({
639
+ direction: import_zod11.z.enum(["left", "right", "up", "down"]).default("left"),
640
+ distance: import_zod11.z.number().int().min(1).max(2e3).default(80)
486
641
  }).safeParse(raw ?? {});
487
642
  if (parsed.success) return parsed.data;
488
643
  return { direction: "left", distance: 80 };
489
644
  }
490
645
  function getZoomOptions(raw) {
491
- const parsed = import_zod8.z.object({
492
- type: import_zod8.z.enum(["zoomIn", "zoomOut"]).default("zoomIn")
646
+ const parsed = import_zod11.z.object({
647
+ type: import_zod11.z.enum(["zoomIn", "zoomOut"]).default("zoomIn")
493
648
  }).safeParse(raw ?? {});
494
649
  if (parsed.success) return parsed.data;
495
650
  return { type: "zoomIn" };
496
651
  }
497
652
  function getWipeOptions(raw) {
498
- const parsed = import_zod8.z.object({
499
- direction: import_zod8.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
500
- softEdge: import_zod8.z.boolean().default(false)
653
+ const parsed = import_zod11.z.object({
654
+ direction: import_zod11.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
655
+ softEdge: import_zod11.z.boolean().default(false)
501
656
  }).safeParse(raw ?? {});
502
657
  if (parsed.success) return parsed.data;
503
658
  return { direction: "right", softEdge: false };
@@ -510,18 +665,18 @@ function clipFor(direction, p) {
510
665
  return `polygon(0 0, ${100 * p}% 0, 0 ${100 * p}%)`;
511
666
  }
512
667
  function getCircularOptions(raw) {
513
- const parsed = import_zod8.z.object({
514
- direction: import_zod8.z.enum(["open", "close"]).default("open"),
515
- center: import_zod8.z.object({
516
- x: import_zod8.z.number().min(0).max(1).default(0.5),
517
- y: import_zod8.z.number().min(0).max(1).default(0.5)
668
+ const parsed = import_zod11.z.object({
669
+ direction: import_zod11.z.enum(["open", "close"]).default("open"),
670
+ center: import_zod11.z.object({
671
+ x: import_zod11.z.number().min(0).max(1).default(0.5),
672
+ y: import_zod11.z.number().min(0).max(1).default(0.5)
518
673
  }).default({ x: 0.5, y: 0.5 })
519
674
  }).safeParse(raw ?? {});
520
675
  if (parsed.success) return parsed.data;
521
676
  return { direction: "open", center: { x: 0.5, y: 0.5 } };
522
677
  }
523
678
  var Segment = ({ enterTransition, exitTransition, children, __wavesDurationInFrames }) => {
524
- const frame = (0, import_remotion6.useCurrentFrame)();
679
+ const frame = (0, import_remotion5.useCurrentFrame)();
525
680
  const durationInFrames = __wavesDurationInFrames ?? 0;
526
681
  let opacity = 1;
527
682
  let translateX = 0;
@@ -532,35 +687,35 @@ var Segment = ({ enterTransition, exitTransition, children, __wavesDurationInFra
532
687
  if (enterTransition) {
533
688
  const d = enterTransition.durationInFrames;
534
689
  if (enterTransition.type === "FadeTransition") {
535
- opacity *= (0, import_remotion6.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
690
+ opacity *= (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
536
691
  }
537
692
  if (enterTransition.type === "SlideTransition") {
538
693
  const opts = getSlideOptions(enterTransition.props);
539
- const t = (0, import_remotion6.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
694
+ const t = (0, import_remotion5.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
540
695
  const delta = opts.distance * t;
541
696
  if (opts.direction === "left") translateX += -delta;
542
697
  if (opts.direction === "right") translateX += delta;
543
698
  if (opts.direction === "up") translateY += -delta;
544
699
  if (opts.direction === "down") translateY += delta;
545
- opacity *= (0, import_remotion6.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
700
+ opacity *= (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
546
701
  }
547
702
  if (enterTransition.type === "ZoomTransition") {
548
703
  const opts = getZoomOptions(enterTransition.props);
549
704
  const fromScale = opts.type === "zoomIn" ? 1.2 : 0.85;
550
- const t = (0, import_remotion6.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
705
+ const t = (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
551
706
  scale *= fromScale + (1 - fromScale) * t;
552
707
  opacity *= t;
553
708
  }
554
709
  if (enterTransition.type === "WipeTransition") {
555
710
  const opts = getWipeOptions(enterTransition.props);
556
- const t = (0, import_remotion6.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
711
+ const t = (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
557
712
  clipPath = clipFor(opts.direction, t);
558
713
  filter = opts.softEdge ? "blur(0.4px)" : void 0;
559
714
  }
560
715
  if (enterTransition.type === "CircularReveal") {
561
716
  const opts = getCircularOptions(enterTransition.props);
562
717
  const open = opts.direction === "open";
563
- const t = (0, import_remotion6.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
718
+ const t = (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
564
719
  const radiusPct = open ? 150 * t : 150 * (1 - t);
565
720
  clipPath = `circle(${radiusPct}% at ${Math.round(opts.center.x * 100)}% ${Math.round(opts.center.y * 100)}%)`;
566
721
  }
@@ -569,41 +724,41 @@ var Segment = ({ enterTransition, exitTransition, children, __wavesDurationInFra
569
724
  const d = exitTransition.durationInFrames;
570
725
  const start = Math.max(0, durationInFrames - d);
571
726
  if (exitTransition.type === "FadeTransition") {
572
- opacity *= (0, import_remotion6.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
727
+ opacity *= (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
573
728
  }
574
729
  if (exitTransition.type === "SlideTransition") {
575
730
  const opts = getSlideOptions(exitTransition.props);
576
- const t = (0, import_remotion6.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
731
+ const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
577
732
  const delta = opts.distance * t;
578
733
  if (opts.direction === "left") translateX += delta;
579
734
  if (opts.direction === "right") translateX += -delta;
580
735
  if (opts.direction === "up") translateY += delta;
581
736
  if (opts.direction === "down") translateY += -delta;
582
- opacity *= (0, import_remotion6.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
737
+ opacity *= (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
583
738
  }
584
739
  if (exitTransition.type === "ZoomTransition") {
585
740
  const opts = getZoomOptions(exitTransition.props);
586
741
  const toScale = opts.type === "zoomIn" ? 1.25 : 0.75;
587
- const t = (0, import_remotion6.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
742
+ const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
588
743
  scale *= 1 + (toScale - 1) * t;
589
744
  opacity *= 1 - t;
590
745
  }
591
746
  if (exitTransition.type === "WipeTransition") {
592
747
  const opts = getWipeOptions(exitTransition.props);
593
- const t = (0, import_remotion6.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
748
+ const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
594
749
  clipPath = clipFor(opts.direction, t);
595
750
  filter = opts.softEdge ? "blur(0.4px)" : void 0;
596
751
  }
597
752
  if (exitTransition.type === "CircularReveal") {
598
753
  const opts = getCircularOptions(exitTransition.props);
599
754
  const open = opts.direction === "open";
600
- const t = (0, import_remotion6.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
755
+ const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
601
756
  const radiusPct = open ? 150 * (1 - t) : 150 * t;
602
757
  clipPath = `circle(${radiusPct}% at ${Math.round(opts.center.x * 100)}% ${Math.round(opts.center.y * 100)}%)`;
603
758
  }
604
759
  }
605
760
  const transform = `translate(${translateX}px, ${translateY}px) scale(${scale})`;
606
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_remotion6.AbsoluteFill, { style: { opacity, transform, clipPath, filter }, children });
761
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_remotion5.AbsoluteFill, { style: { opacity, transform, clipPath, filter }, children });
607
762
  };
608
763
  var SegmentComponentMetadata = {
609
764
  kind: "primitive",
@@ -616,18 +771,18 @@ var SegmentComponentMetadata = {
616
771
  };
617
772
 
618
773
  // src/components/primitives/Shape.tsx
619
- var import_zod9 = require("zod");
620
- var import_jsx_runtime8 = require("react/jsx-runtime");
621
- var ShapePropsSchema = import_zod9.z.object({
622
- shape: import_zod9.z.enum(["rect", "circle"]).default("rect"),
623
- x: import_zod9.z.number().default(0),
624
- y: import_zod9.z.number().default(0),
625
- width: import_zod9.z.number().positive().default(100),
626
- height: import_zod9.z.number().positive().default(100),
627
- fill: import_zod9.z.string().default("#FFFFFF"),
628
- strokeColor: import_zod9.z.string().optional(),
629
- strokeWidth: import_zod9.z.number().min(0).default(0),
630
- opacity: import_zod9.z.number().min(0).max(1).default(1)
774
+ var import_zod12 = require("zod");
775
+ var import_jsx_runtime12 = require("react/jsx-runtime");
776
+ var ShapePropsSchema = import_zod12.z.object({
777
+ shape: import_zod12.z.enum(["rect", "circle"]).default("rect"),
778
+ x: import_zod12.z.number().default(0),
779
+ y: import_zod12.z.number().default(0),
780
+ width: import_zod12.z.number().positive().default(100),
781
+ height: import_zod12.z.number().positive().default(100),
782
+ fill: import_zod12.z.string().default("#FFFFFF"),
783
+ strokeColor: import_zod12.z.string().optional(),
784
+ strokeWidth: import_zod12.z.number().min(0).default(0),
785
+ opacity: import_zod12.z.number().min(0).max(1).default(1)
631
786
  });
632
787
  var Shape = ({
633
788
  shape,
@@ -640,7 +795,7 @@ var Shape = ({
640
795
  strokeWidth,
641
796
  opacity
642
797
  }) => {
643
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
798
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
644
799
  "div",
645
800
  {
646
801
  style: {
@@ -665,15 +820,14 @@ var ShapeComponentMetadata = {
665
820
  };
666
821
 
667
822
  // src/components/primitives/Stack.tsx
668
- var import_remotion7 = require("remotion");
669
- var import_zod10 = require("zod");
670
- var import_jsx_runtime9 = require("react/jsx-runtime");
671
- var StackPropsSchema = import_zod10.z.object({
672
- direction: import_zod10.z.enum(["row", "column"]).default("column"),
673
- gap: import_zod10.z.number().min(0).default(24),
674
- padding: import_zod10.z.number().min(0).default(0),
675
- align: import_zod10.z.enum(["start", "center", "end", "stretch"]).default("center"),
676
- justify: import_zod10.z.enum(["start", "center", "end", "between"]).default("center")
823
+ var import_zod13 = require("zod");
824
+ var import_jsx_runtime13 = require("react/jsx-runtime");
825
+ var StackPropsSchema = import_zod13.z.object({
826
+ direction: import_zod13.z.enum(["row", "column"]).default("column"),
827
+ gap: import_zod13.z.number().min(0).default(24),
828
+ padding: import_zod13.z.number().min(0).default(0),
829
+ align: import_zod13.z.enum(["start", "center", "end", "stretch"]).default("center"),
830
+ justify: import_zod13.z.enum(["start", "center", "end", "between"]).default("center")
677
831
  });
678
832
  var mapAlign2 = (a) => {
679
833
  if (a === "start") return "flex-start";
@@ -688,8 +842,8 @@ var mapJustify2 = (j) => {
688
842
  return "center";
689
843
  };
690
844
  var Stack = ({ direction, gap, padding, align, justify, children }) => {
691
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
692
- import_remotion7.AbsoluteFill,
845
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
846
+ Fill,
693
847
  {
694
848
  style: {
695
849
  display: "flex",
@@ -713,17 +867,22 @@ var StackComponentMetadata = {
713
867
  };
714
868
 
715
869
  // src/components/primitives/Text.tsx
716
- var import_remotion8 = require("remotion");
717
- var import_zod11 = require("zod");
718
- var import_jsx_runtime10 = require("react/jsx-runtime");
719
- var TextPropsSchema = import_zod11.z.object({
720
- content: import_zod11.z.string(),
721
- fontSize: import_zod11.z.number().default(48),
722
- color: import_zod11.z.string().default("#FFFFFF"),
723
- position: import_zod11.z.enum(["top", "center", "bottom", "left", "right"]).default("center"),
724
- animation: import_zod11.z.enum(["none", "fade", "slide", "zoom"]).default("fade")
870
+ var import_remotion6 = require("remotion");
871
+ var import_zod14 = require("zod");
872
+ var import_jsx_runtime14 = require("react/jsx-runtime");
873
+ var TextPropsSchema = import_zod14.z.object({
874
+ content: import_zod14.z.string(),
875
+ fontSize: import_zod14.z.number().default(48),
876
+ color: import_zod14.z.string().default("#FFFFFF"),
877
+ fontFamily: import_zod14.z.string().default("Inter"),
878
+ position: import_zod14.z.enum(["top", "center", "bottom", "left", "right"]).default("center"),
879
+ animation: import_zod14.z.enum(["none", "fade", "slide", "zoom"]).default("fade"),
880
+ maxWidthPct: import_zod14.z.number().min(0.1).max(1).default(0.9),
881
+ safeInsetPct: import_zod14.z.number().min(0).max(0.25).default(0.06),
882
+ textAlign: import_zod14.z.enum(["left", "center", "right"]).default("center")
725
883
  });
726
- var getPositionStyles = (position) => {
884
+ var getPositionStyles = (position, safeInsetPct) => {
885
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
727
886
  const base = {
728
887
  display: "flex",
729
888
  justifyContent: "center",
@@ -731,13 +890,13 @@ var getPositionStyles = (position) => {
731
890
  };
732
891
  switch (position) {
733
892
  case "top":
734
- return { ...base, alignItems: "flex-start", paddingTop: 60 };
893
+ return { ...base, alignItems: "flex-start", paddingTop: inset };
735
894
  case "bottom":
736
- return { ...base, alignItems: "flex-end", paddingBottom: 60 };
895
+ return { ...base, alignItems: "flex-end", paddingBottom: inset };
737
896
  case "left":
738
- return { ...base, justifyContent: "flex-start", paddingLeft: 60 };
897
+ return { ...base, justifyContent: "flex-start", paddingLeft: inset };
739
898
  case "right":
740
- return { ...base, justifyContent: "flex-end", paddingRight: 60 };
899
+ return { ...base, justifyContent: "flex-end", paddingRight: inset };
741
900
  default:
742
901
  return base;
743
902
  }
@@ -746,29 +905,29 @@ var getAnimationStyle = (frame, animation) => {
746
905
  const animDuration = 30;
747
906
  switch (animation) {
748
907
  case "fade": {
749
- const opacity = (0, import_remotion8.interpolate)(frame, [0, animDuration], [0, 1], {
908
+ const opacity = (0, import_remotion6.interpolate)(frame, [0, animDuration], [0, 1], {
750
909
  extrapolateLeft: "clamp",
751
910
  extrapolateRight: "clamp"
752
911
  });
753
912
  return { opacity };
754
913
  }
755
914
  case "slide": {
756
- const translateY = (0, import_remotion8.interpolate)(frame, [0, animDuration], [50, 0], {
915
+ const translateY = (0, import_remotion6.interpolate)(frame, [0, animDuration], [50, 0], {
757
916
  extrapolateLeft: "clamp",
758
917
  extrapolateRight: "clamp"
759
918
  });
760
- const opacity = (0, import_remotion8.interpolate)(frame, [0, animDuration], [0, 1], {
919
+ const opacity = (0, import_remotion6.interpolate)(frame, [0, animDuration], [0, 1], {
761
920
  extrapolateLeft: "clamp",
762
921
  extrapolateRight: "clamp"
763
922
  });
764
923
  return { transform: `translateY(${translateY}px)`, opacity };
765
924
  }
766
925
  case "zoom": {
767
- const scale = (0, import_remotion8.interpolate)(frame, [0, animDuration], [0.8, 1], {
926
+ const scale = (0, import_remotion6.interpolate)(frame, [0, animDuration], [0.8, 1], {
768
927
  extrapolateLeft: "clamp",
769
928
  extrapolateRight: "clamp"
770
929
  });
771
- const opacity = (0, import_remotion8.interpolate)(frame, [0, animDuration], [0, 1], {
930
+ const opacity = (0, import_remotion6.interpolate)(frame, [0, animDuration], [0, 1], {
772
931
  extrapolateLeft: "clamp",
773
932
  extrapolateRight: "clamp"
774
933
  });
@@ -778,18 +937,32 @@ var getAnimationStyle = (frame, animation) => {
778
937
  return {};
779
938
  }
780
939
  };
781
- var Text = ({ content, fontSize, color, position, animation }) => {
782
- const frame = (0, import_remotion8.useCurrentFrame)();
783
- const positionStyles6 = getPositionStyles(position);
940
+ var Text = ({
941
+ content,
942
+ fontSize,
943
+ color,
944
+ fontFamily,
945
+ position,
946
+ animation,
947
+ maxWidthPct,
948
+ safeInsetPct,
949
+ textAlign
950
+ }) => {
951
+ const frame = (0, import_remotion6.useCurrentFrame)();
952
+ const positionStyles6 = getPositionStyles(position, safeInsetPct);
784
953
  const animationStyles = getAnimationStyle(frame, animation);
785
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_remotion8.AbsoluteFill, { style: positionStyles6, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
954
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Fill, { style: positionStyles6, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
786
955
  "div",
787
956
  {
788
957
  style: {
789
958
  fontSize,
790
959
  color,
960
+ fontFamily,
791
961
  fontWeight: 600,
792
- textAlign: "center",
962
+ textAlign,
963
+ maxWidth: `${Math.round(maxWidthPct * 100)}%`,
964
+ overflowWrap: "anywhere",
965
+ wordBreak: "break-word",
793
966
  ...animationStyles
794
967
  },
795
968
  children: content
@@ -820,20 +993,20 @@ var TextComponentMetadata = {
820
993
  };
821
994
 
822
995
  // src/components/primitives/Video.tsx
823
- var import_remotion9 = require("remotion");
824
- var import_zod12 = require("zod");
825
- var import_jsx_runtime11 = require("react/jsx-runtime");
826
- var VideoPropsSchema = import_zod12.z.object({
827
- src: import_zod12.z.string().min(1),
828
- fit: import_zod12.z.enum(["cover", "contain"]).default("cover"),
829
- borderRadius: import_zod12.z.number().min(0).default(0),
830
- opacity: import_zod12.z.number().min(0).max(1).default(1),
831
- muted: import_zod12.z.boolean().default(true)
996
+ var import_remotion7 = require("remotion");
997
+ var import_zod15 = require("zod");
998
+ var import_jsx_runtime15 = require("react/jsx-runtime");
999
+ var VideoPropsSchema = import_zod15.z.object({
1000
+ src: import_zod15.z.string().min(1),
1001
+ fit: import_zod15.z.enum(["cover", "contain"]).default("cover"),
1002
+ borderRadius: import_zod15.z.number().min(0).default(0),
1003
+ opacity: import_zod15.z.number().min(0).max(1).default(1),
1004
+ muted: import_zod15.z.boolean().default(true)
832
1005
  });
833
- var resolveAsset3 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion9.staticFile)(staticFileInputFromAssetPath(value));
1006
+ var resolveAsset3 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion7.staticFile)(staticFileInputFromAssetPath(value));
834
1007
  var Video2 = ({ src, fit, borderRadius, opacity, muted }) => {
835
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_remotion9.AbsoluteFill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
836
- import_remotion9.Video,
1008
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Fill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
1009
+ import_remotion7.Video,
837
1010
  {
838
1011
  src: resolveAsset3(src),
839
1012
  muted,
@@ -849,19 +1022,19 @@ var VideoComponentMetadata = {
849
1022
  };
850
1023
 
851
1024
  // src/components/composites/AnimatedCounter.tsx
852
- var import_remotion10 = require("remotion");
853
- var import_zod13 = require("zod");
854
- var import_jsx_runtime12 = require("react/jsx-runtime");
855
- var AnimatedCounterPropsSchema = import_zod13.z.object({
856
- from: import_zod13.z.number().default(0),
857
- to: import_zod13.z.number().default(100),
858
- fontSize: import_zod13.z.number().min(8).max(300).default(96),
859
- color: import_zod13.z.string().default("#FFFFFF"),
860
- fontFamily: import_zod13.z.string().default("Inter"),
861
- fontWeight: import_zod13.z.number().int().min(100).max(900).default(700),
862
- icon: import_zod13.z.string().optional(),
863
- suffix: import_zod13.z.string().optional(),
864
- animationType: import_zod13.z.enum(["spring", "linear"]).default("spring")
1025
+ var import_remotion8 = require("remotion");
1026
+ var import_zod16 = require("zod");
1027
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1028
+ var AnimatedCounterPropsSchema = import_zod16.z.object({
1029
+ from: import_zod16.z.number().default(0),
1030
+ to: import_zod16.z.number().default(100),
1031
+ fontSize: import_zod16.z.number().min(8).max(300).default(96),
1032
+ color: import_zod16.z.string().default("#FFFFFF"),
1033
+ fontFamily: import_zod16.z.string().default("Inter"),
1034
+ fontWeight: import_zod16.z.number().int().min(100).max(900).default(700),
1035
+ icon: import_zod16.z.string().optional(),
1036
+ suffix: import_zod16.z.string().optional(),
1037
+ animationType: import_zod16.z.enum(["spring", "linear"]).default("spring")
865
1038
  });
866
1039
  var AnimatedCounter = ({
867
1040
  from,
@@ -875,16 +1048,16 @@ var AnimatedCounter = ({
875
1048
  animationType,
876
1049
  __wavesDurationInFrames
877
1050
  }) => {
878
- const frame = (0, import_remotion10.useCurrentFrame)();
879
- const { fps } = (0, import_remotion10.useVideoConfig)();
1051
+ const frame = (0, import_remotion8.useCurrentFrame)();
1052
+ const { fps } = (0, import_remotion8.useVideoConfig)();
880
1053
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
881
- const progress = animationType === "spring" ? (0, import_remotion10.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } }) : (0, import_remotion10.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1054
+ const progress = animationType === "spring" ? (0, import_remotion8.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } }) : (0, import_remotion8.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
882
1055
  const value = from + (to - from) * Math.max(0, Math.min(1, progress));
883
1056
  const rounded = Math.round(value);
884
1057
  const label = `${rounded.toLocaleString()}${suffix ?? ""}`;
885
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_remotion10.AbsoluteFill, { style: { display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { style: { textAlign: "center" }, children: [
886
- icon ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { fontSize: Math.round(fontSize * 0.5), marginBottom: 18 }, children: icon }) : null,
887
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { fontSize, color, fontFamily, fontWeight, lineHeight: 1 }, children: label })
1058
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Fill, { style: { display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { textAlign: "center" }, children: [
1059
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { fontSize: Math.round(fontSize * 0.5), marginBottom: 18 }, children: icon }) : null,
1060
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { fontSize, color, fontFamily, fontWeight, lineHeight: 1 }, children: label })
888
1061
  ] }) });
889
1062
  };
890
1063
  var AnimatedCounterComponentMetadata = {
@@ -899,27 +1072,27 @@ var AnimatedCounterComponentMetadata = {
899
1072
  };
900
1073
 
901
1074
  // src/components/composites/BarChart.tsx
902
- var import_remotion11 = require("remotion");
903
- var import_zod14 = require("zod");
904
- var import_jsx_runtime13 = require("react/jsx-runtime");
905
- var BarChartPropsSchema = import_zod14.z.object({
906
- data: import_zod14.z.array(import_zod14.z.object({
907
- label: import_zod14.z.string().min(1),
908
- value: import_zod14.z.number(),
909
- color: import_zod14.z.string().optional()
1075
+ var import_remotion9 = require("remotion");
1076
+ var import_zod17 = require("zod");
1077
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1078
+ var BarChartPropsSchema = import_zod17.z.object({
1079
+ data: import_zod17.z.array(import_zod17.z.object({
1080
+ label: import_zod17.z.string().min(1),
1081
+ value: import_zod17.z.number(),
1082
+ color: import_zod17.z.string().optional()
910
1083
  })).min(2).max(8),
911
- orientation: import_zod14.z.enum(["horizontal", "vertical"]).default("vertical"),
912
- showValues: import_zod14.z.boolean().default(true),
913
- showGrid: import_zod14.z.boolean().default(false),
914
- maxValue: import_zod14.z.number().optional()
1084
+ orientation: import_zod17.z.enum(["horizontal", "vertical"]).default("vertical"),
1085
+ showValues: import_zod17.z.boolean().default(true),
1086
+ showGrid: import_zod17.z.boolean().default(false),
1087
+ maxValue: import_zod17.z.number().optional()
915
1088
  });
916
1089
  var BarChart = ({ data, orientation, showValues, showGrid, maxValue }) => {
917
- const frame = (0, import_remotion11.useCurrentFrame)();
918
- const { fps } = (0, import_remotion11.useVideoConfig)();
1090
+ const frame = (0, import_remotion9.useCurrentFrame)();
1091
+ const { fps } = (0, import_remotion9.useVideoConfig)();
919
1092
  const max = maxValue ?? Math.max(...data.map((d) => d.value));
920
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_remotion11.AbsoluteFill, { style: { padding: 90, boxSizing: "border-box" }, children: [
921
- showGrid ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { position: "absolute", left: 90, right: 90, top: 90, bottom: 90, opacity: 0.15, backgroundImage: "linear-gradient(#fff 1px, transparent 1px)", backgroundSize: "100% 60px" } }) : null,
922
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1093
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(Fill, { style: { padding: 90, boxSizing: "border-box" }, children: [
1094
+ showGrid ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { position: "absolute", left: 90, right: 90, top: 90, bottom: 90, opacity: 0.15, backgroundImage: "linear-gradient(#fff 1px, transparent 1px)", backgroundSize: "100% 60px" } }) : null,
1095
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
923
1096
  "div",
924
1097
  {
925
1098
  style: {
@@ -932,13 +1105,13 @@ var BarChart = ({ data, orientation, showValues, showGrid, maxValue }) => {
932
1105
  justifyContent: "space-between"
933
1106
  },
934
1107
  children: data.map((d, i) => {
935
- const p = (0, import_remotion11.spring)({ frame: frame - i * 4, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1108
+ const p = (0, import_remotion9.spring)({ frame: frame - i * 4, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
936
1109
  const ratio = max === 0 ? 0 : d.value / max * p;
937
1110
  const color = d.color ?? "#0A84FF";
938
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", gap: 10 }, children: [
939
- orientation === "vertical" ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { width: "100%", flex: 1, display: "flex", alignItems: "flex-end" }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { width: "100%", height: `${Math.round(ratio * 100)}%`, backgroundColor: color, borderRadius: 12 } }) }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { width: "100%", display: "flex", alignItems: "center", gap: 12 }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { flex: 1, height: 18, backgroundColor: "rgba(255,255,255,0.15)", borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { width: `${Math.round(ratio * 100)}%`, height: "100%", backgroundColor: color } }) }) }),
940
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 700, fontSize: 22, opacity: 0.9 }, children: d.label }),
941
- showValues ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 26 }, children: Math.round(d.value).toLocaleString() }) : null
1111
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", gap: 10 }, children: [
1112
+ orientation === "vertical" ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { width: "100%", flex: 1, display: "flex", alignItems: "flex-end" }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { width: "100%", height: `${Math.round(ratio * 100)}%`, backgroundColor: color, borderRadius: 12 } }) }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { width: "100%", display: "flex", alignItems: "center", gap: 12 }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { flex: 1, height: 18, backgroundColor: "rgba(255,255,255,0.15)", borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { width: `${Math.round(ratio * 100)}%`, height: "100%", backgroundColor: color } }) }) }),
1113
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 700, fontSize: 22, opacity: 0.9 }, children: d.label }),
1114
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 26 }, children: Math.round(d.value).toLocaleString() }) : null
942
1115
  ] }, d.label);
943
1116
  })
944
1117
  }
@@ -953,31 +1126,31 @@ var BarChartComponentMetadata = {
953
1126
  };
954
1127
 
955
1128
  // src/components/composites/CardStack.tsx
956
- var import_remotion12 = require("remotion");
957
- var import_zod15 = require("zod");
958
- var import_jsx_runtime14 = require("react/jsx-runtime");
959
- var CardSchema = import_zod15.z.object({
960
- title: import_zod15.z.string().min(1),
961
- content: import_zod15.z.string().min(1),
962
- backgroundColor: import_zod15.z.string().optional()
1129
+ var import_remotion10 = require("remotion");
1130
+ var import_zod18 = require("zod");
1131
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1132
+ var CardSchema = import_zod18.z.object({
1133
+ title: import_zod18.z.string().min(1),
1134
+ content: import_zod18.z.string().min(1),
1135
+ backgroundColor: import_zod18.z.string().optional()
963
1136
  });
964
- var CardStackPropsSchema = import_zod15.z.object({
965
- cards: import_zod15.z.array(CardSchema).min(2).max(5),
966
- transition: import_zod15.z.enum(["flip", "slide", "fade"]).default("flip"),
967
- displayDuration: import_zod15.z.number().int().min(30).max(150).default(90)
1137
+ var CardStackPropsSchema = import_zod18.z.object({
1138
+ cards: import_zod18.z.array(CardSchema).min(2).max(5),
1139
+ transition: import_zod18.z.enum(["flip", "slide", "fade"]).default("flip"),
1140
+ displayDuration: import_zod18.z.number().int().min(30).max(150).default(90)
968
1141
  });
969
1142
  var CardStack = ({ cards, transition, displayDuration }) => {
970
- const frame = (0, import_remotion12.useCurrentFrame)();
971
- const { fps } = (0, import_remotion12.useVideoConfig)();
1143
+ const frame = (0, import_remotion10.useCurrentFrame)();
1144
+ const { fps } = (0, import_remotion10.useVideoConfig)();
972
1145
  const index = Math.min(cards.length - 1, Math.floor(frame / displayDuration));
973
1146
  const local = frame - index * displayDuration;
974
- const p = (0, import_remotion12.spring)({ frame: local, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1147
+ const p = (0, import_remotion10.spring)({ frame: local, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
975
1148
  const card = cards[index];
976
1149
  const bg = card.backgroundColor ?? "rgba(255,255,255,0.1)";
977
1150
  const opacity = transition === "fade" ? p : 1;
978
- const slideX = transition === "slide" ? (0, import_remotion12.interpolate)(p, [0, 1], [80, 0]) : 0;
979
- const rotateY = transition === "flip" ? (0, import_remotion12.interpolate)(p, [0, 1], [70, 0]) : 0;
980
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_remotion12.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(
1151
+ const slideX = transition === "slide" ? (0, import_remotion10.interpolate)(p, [0, 1], [80, 0]) : 0;
1152
+ const rotateY = transition === "flip" ? (0, import_remotion10.interpolate)(p, [0, 1], [70, 0]) : 0;
1153
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
981
1154
  "div",
982
1155
  {
983
1156
  style: {
@@ -994,8 +1167,8 @@ var CardStack = ({ cards, transition, displayDuration }) => {
994
1167
  opacity
995
1168
  },
996
1169
  children: [
997
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { fontSize: 56, fontWeight: 900, marginBottom: 22 }, children: card.title }),
998
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { style: { fontSize: 30, fontWeight: 700, opacity: 0.9, lineHeight: 1.3 }, children: card.content })
1170
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { fontSize: 56, fontWeight: 900, marginBottom: 22 }, children: card.title }),
1171
+ /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { fontSize: 30, fontWeight: 700, opacity: 0.9, lineHeight: 1.3 }, children: card.content })
999
1172
  ]
1000
1173
  }
1001
1174
  ) });
@@ -1008,18 +1181,19 @@ var CardStackComponentMetadata = {
1008
1181
  };
1009
1182
 
1010
1183
  // src/components/composites/CircularReveal.tsx
1011
- var import_remotion13 = require("remotion");
1012
- var import_zod16 = require("zod");
1013
- var import_jsx_runtime15 = require("react/jsx-runtime");
1014
- var CenterSchema = import_zod16.z.object({
1015
- x: import_zod16.z.number().min(0).max(1).default(0.5),
1016
- y: import_zod16.z.number().min(0).max(1).default(0.5)
1184
+ var import_react6 = __toESM(require("react"));
1185
+ var import_remotion11 = require("remotion");
1186
+ var import_zod19 = require("zod");
1187
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1188
+ var CenterSchema = import_zod19.z.object({
1189
+ x: import_zod19.z.number().min(0).max(1).default(0.5),
1190
+ y: import_zod19.z.number().min(0).max(1).default(0.5)
1017
1191
  });
1018
- var CircularRevealPropsSchema = import_zod16.z.object({
1019
- durationInFrames: import_zod16.z.number().int().min(10).max(60).default(30),
1020
- direction: import_zod16.z.enum(["open", "close"]).default("open"),
1192
+ var CircularRevealPropsSchema = import_zod19.z.object({
1193
+ durationInFrames: import_zod19.z.number().int().min(10).max(60).default(30),
1194
+ direction: import_zod19.z.enum(["open", "close"]).default("open"),
1021
1195
  center: CenterSchema.optional(),
1022
- phase: import_zod16.z.enum(["in", "out", "inOut"]).default("inOut")
1196
+ phase: import_zod19.z.enum(["in", "out", "inOut"]).default("inOut")
1023
1197
  });
1024
1198
  var CircularReveal = ({
1025
1199
  durationInFrames,
@@ -1029,22 +1203,23 @@ var CircularReveal = ({
1029
1203
  children,
1030
1204
  __wavesDurationInFrames
1031
1205
  }) => {
1032
- const frame = (0, import_remotion13.useCurrentFrame)();
1206
+ const layers = import_react6.default.Children.toArray(children);
1207
+ const frame = (0, import_remotion11.useCurrentFrame)();
1033
1208
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1034
1209
  const d = Math.min(durationInFrames, total);
1035
1210
  const c = center ?? { x: 0.5, y: 0.5 };
1036
1211
  const open = direction === "open";
1037
1212
  let radiusPct = open ? 0 : 150;
1038
1213
  if (phase === "in" || phase === "inOut") {
1039
- const t = (0, import_remotion13.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1214
+ const t = (0, import_remotion11.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1040
1215
  radiusPct = open ? 150 * t : 150 * (1 - t);
1041
1216
  }
1042
1217
  if (phase === "out" || phase === "inOut") {
1043
1218
  const start = Math.max(0, total - d);
1044
- const t = (0, import_remotion13.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1219
+ const t = (0, import_remotion11.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1045
1220
  radiusPct = open ? 150 * (1 - t) : 150 * t;
1046
1221
  }
1047
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_remotion13.AbsoluteFill, { style: { clipPath: `circle(${radiusPct}% at ${Math.round(c.x * 100)}% ${Math.round(c.y * 100)}%)` }, children });
1222
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Fill, { style: { clipPath: `circle(${radiusPct}% at ${Math.round(c.x * 100)}% ${Math.round(c.y * 100)}%)` }, children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
1048
1223
  };
1049
1224
  var CircularRevealComponentMetadata = {
1050
1225
  kind: "composite",
@@ -1056,21 +1231,21 @@ var CircularRevealComponentMetadata = {
1056
1231
  };
1057
1232
 
1058
1233
  // src/components/composites/CountUpText.tsx
1059
- var import_remotion14 = require("remotion");
1060
- var import_zod17 = require("zod");
1061
- var import_jsx_runtime16 = require("react/jsx-runtime");
1062
- var CountUpTextPropsSchema = import_zod17.z.object({
1063
- from: import_zod17.z.number().default(0),
1064
- to: import_zod17.z.number().default(100),
1065
- fontSize: import_zod17.z.number().min(8).max(240).default(72),
1066
- color: import_zod17.z.string().default("#FFFFFF"),
1067
- fontFamily: import_zod17.z.string().default("Inter"),
1068
- fontWeight: import_zod17.z.number().int().min(100).max(900).default(700),
1069
- position: import_zod17.z.enum(["top", "center", "bottom"]).default("center"),
1070
- format: import_zod17.z.enum(["integer", "decimal", "currency", "percentage"]).default("integer"),
1071
- decimals: import_zod17.z.number().int().min(0).max(4).default(0),
1072
- prefix: import_zod17.z.string().optional(),
1073
- suffix: import_zod17.z.string().optional()
1234
+ var import_remotion12 = require("remotion");
1235
+ var import_zod20 = require("zod");
1236
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1237
+ var CountUpTextPropsSchema = import_zod20.z.object({
1238
+ from: import_zod20.z.number().default(0),
1239
+ to: import_zod20.z.number().default(100),
1240
+ fontSize: import_zod20.z.number().min(8).max(240).default(72),
1241
+ color: import_zod20.z.string().default("#FFFFFF"),
1242
+ fontFamily: import_zod20.z.string().default("Inter"),
1243
+ fontWeight: import_zod20.z.number().int().min(100).max(900).default(700),
1244
+ position: import_zod20.z.enum(["top", "center", "bottom"]).default("center"),
1245
+ format: import_zod20.z.enum(["integer", "decimal", "currency", "percentage"]).default("integer"),
1246
+ decimals: import_zod20.z.number().int().min(0).max(4).default(0),
1247
+ prefix: import_zod20.z.string().optional(),
1248
+ suffix: import_zod20.z.string().optional()
1074
1249
  });
1075
1250
  var positionStyles = (position) => {
1076
1251
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -1097,15 +1272,15 @@ var CountUpText = ({
1097
1272
  suffix,
1098
1273
  __wavesDurationInFrames
1099
1274
  }) => {
1100
- const frame = (0, import_remotion14.useCurrentFrame)();
1101
- const { fps } = (0, import_remotion14.useVideoConfig)();
1275
+ const frame = (0, import_remotion12.useCurrentFrame)();
1276
+ const { fps } = (0, import_remotion12.useVideoConfig)();
1102
1277
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1103
- const p = (0, import_remotion14.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
1278
+ const p = (0, import_remotion12.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
1104
1279
  const progress = Math.max(0, Math.min(1, p));
1105
1280
  const value = from + (to - from) * progress;
1106
- const fade = (0, import_remotion14.interpolate)(frame, [0, Math.min(12, total)], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1281
+ const fade = (0, import_remotion12.interpolate)(frame, [0, Math.min(12, total)], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1107
1282
  const label = `${prefix ?? ""}${formatValue(value, format, decimals)}${suffix ?? ""}`;
1108
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_remotion14.AbsoluteFill, { style: { display: "flex", ...positionStyles(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { fontSize, color, fontFamily, fontWeight, opacity: fade, lineHeight: 1 }, children: label }) });
1283
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Fill, { style: { display: "flex", ...positionStyles(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { style: { fontSize, color, fontFamily, fontWeight, opacity: fade, lineHeight: 1 }, children: label }) });
1109
1284
  };
1110
1285
  var CountUpTextComponentMetadata = {
1111
1286
  kind: "composite",
@@ -1115,10 +1290,11 @@ var CountUpTextComponentMetadata = {
1115
1290
  };
1116
1291
 
1117
1292
  // src/components/composites/FadeTransition.tsx
1118
- var import_remotion15 = require("remotion");
1119
- var import_zod18 = require("zod");
1120
- var import_jsx_runtime17 = require("react/jsx-runtime");
1121
- var EasingSchema = import_zod18.z.enum(["linear", "easeIn", "easeOut", "easeInOut"]);
1293
+ var import_react7 = __toESM(require("react"));
1294
+ var import_remotion13 = require("remotion");
1295
+ var import_zod21 = require("zod");
1296
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1297
+ var EasingSchema = import_zod21.z.enum(["linear", "easeIn", "easeOut", "easeInOut"]);
1122
1298
  function ease(t, easing) {
1123
1299
  const x = Math.max(0, Math.min(1, t));
1124
1300
  if (easing === "linear") return x;
@@ -1126,10 +1302,10 @@ function ease(t, easing) {
1126
1302
  if (easing === "easeOut") return 1 - (1 - x) * (1 - x);
1127
1303
  return x < 0.5 ? 2 * x * x : 1 - 2 * (1 - x) * (1 - x);
1128
1304
  }
1129
- var FadeTransitionPropsSchema = import_zod18.z.object({
1130
- durationInFrames: import_zod18.z.number().int().min(10).max(60).default(30),
1305
+ var FadeTransitionPropsSchema = import_zod21.z.object({
1306
+ durationInFrames: import_zod21.z.number().int().min(10).max(60).default(30),
1131
1307
  easing: EasingSchema.default("easeInOut"),
1132
- phase: import_zod18.z.enum(["in", "out", "inOut"]).default("inOut")
1308
+ phase: import_zod21.z.enum(["in", "out", "inOut"]).default("inOut")
1133
1309
  });
1134
1310
  var FadeTransition = ({
1135
1311
  durationInFrames,
@@ -1138,20 +1314,21 @@ var FadeTransition = ({
1138
1314
  children,
1139
1315
  __wavesDurationInFrames
1140
1316
  }) => {
1141
- const frame = (0, import_remotion15.useCurrentFrame)();
1317
+ const layers = import_react7.default.Children.toArray(children);
1318
+ const frame = (0, import_remotion13.useCurrentFrame)();
1142
1319
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1143
1320
  const d = Math.min(durationInFrames, total);
1144
1321
  let opacity = 1;
1145
1322
  if (phase === "in" || phase === "inOut") {
1146
- const t = (0, import_remotion15.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1323
+ const t = (0, import_remotion13.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1147
1324
  opacity *= ease(t, easing);
1148
1325
  }
1149
1326
  if (phase === "out" || phase === "inOut") {
1150
1327
  const start = Math.max(0, total - d);
1151
- const t = (0, import_remotion15.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1328
+ const t = (0, import_remotion13.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1152
1329
  opacity *= 1 - ease(t, easing);
1153
1330
  }
1154
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_remotion15.AbsoluteFill, { style: { opacity }, children });
1331
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Fill, { style: { opacity }, children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
1155
1332
  };
1156
1333
  var FadeTransitionComponentMetadata = {
1157
1334
  kind: "composite",
@@ -1163,17 +1340,17 @@ var FadeTransitionComponentMetadata = {
1163
1340
  };
1164
1341
 
1165
1342
  // src/components/composites/GlitchText.tsx
1166
- var import_remotion16 = require("remotion");
1167
- var import_zod19 = require("zod");
1168
- var import_jsx_runtime18 = require("react/jsx-runtime");
1169
- var GlitchTextPropsSchema = import_zod19.z.object({
1170
- content: import_zod19.z.string().max(100),
1171
- fontSize: import_zod19.z.number().min(8).max(240).default(72),
1172
- color: import_zod19.z.string().default("#FFFFFF"),
1173
- fontFamily: import_zod19.z.string().default("monospace"),
1174
- position: import_zod19.z.enum(["top", "center", "bottom"]).default("center"),
1175
- intensity: import_zod19.z.number().int().min(1).max(10).default(5),
1176
- glitchDuration: import_zod19.z.number().int().min(5).max(30).default(10)
1343
+ var import_remotion14 = require("remotion");
1344
+ var import_zod22 = require("zod");
1345
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1346
+ var GlitchTextPropsSchema = import_zod22.z.object({
1347
+ content: import_zod22.z.string().max(100),
1348
+ fontSize: import_zod22.z.number().min(8).max(240).default(72),
1349
+ color: import_zod22.z.string().default("#FFFFFF"),
1350
+ fontFamily: import_zod22.z.string().default("monospace"),
1351
+ position: import_zod22.z.enum(["top", "center", "bottom"]).default("center"),
1352
+ intensity: import_zod22.z.number().int().min(1).max(10).default(5),
1353
+ glitchDuration: import_zod22.z.number().int().min(5).max(30).default(10)
1177
1354
  });
1178
1355
  var positionStyles2 = (position) => {
1179
1356
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -1193,7 +1370,7 @@ var GlitchText = ({
1193
1370
  intensity,
1194
1371
  glitchDuration
1195
1372
  }) => {
1196
- const frame = (0, import_remotion16.useCurrentFrame)();
1373
+ const frame = (0, import_remotion14.useCurrentFrame)();
1197
1374
  const active = frame < glitchDuration;
1198
1375
  const seed = frame + 1;
1199
1376
  const jitter = active ? (pseudoRandom(seed) - 0.5) * intensity * 6 : 0;
@@ -1207,10 +1384,10 @@ var GlitchText = ({
1207
1384
  textTransform: "uppercase",
1208
1385
  textAlign: "center"
1209
1386
  };
1210
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_remotion16.AbsoluteFill, { style: { display: "flex", ...positionStyles2(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { style: { position: "relative" }, children: [
1211
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { ...baseStyle, color, transform: `translate(${jitter}px, ${jitterY}px)` }, children: content }),
1212
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { ...baseStyle, color: "#FF3B30", transform: `translate(${jitter + 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content }),
1213
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { ...baseStyle, color: "#0A84FF", transform: `translate(${jitter - 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content })
1387
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Fill, { style: { display: "flex", ...positionStyles2(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { style: { position: "relative" }, children: [
1388
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { style: { ...baseStyle, color, transform: `translate(${jitter}px, ${jitterY}px)` }, children: content }),
1389
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { style: { ...baseStyle, color: "#FF3B30", transform: `translate(${jitter + 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content }),
1390
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { style: { ...baseStyle, color: "#0A84FF", transform: `translate(${jitter - 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content })
1214
1391
  ] }) });
1215
1392
  };
1216
1393
  var GlitchTextComponentMetadata = {
@@ -1221,17 +1398,16 @@ var GlitchTextComponentMetadata = {
1221
1398
  };
1222
1399
 
1223
1400
  // src/components/composites/GridLayout.tsx
1224
- var import_remotion17 = require("remotion");
1225
- var import_zod20 = require("zod");
1226
- var import_jsx_runtime19 = require("react/jsx-runtime");
1227
- var GridLayoutPropsSchema = import_zod20.z.object({
1228
- columns: import_zod20.z.number().int().min(1).max(4).default(2),
1229
- rows: import_zod20.z.number().int().min(1).max(4).default(2),
1230
- gap: import_zod20.z.number().min(0).max(50).default(20),
1231
- padding: import_zod20.z.number().min(0).max(100).default(40)
1401
+ var import_zod23 = require("zod");
1402
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1403
+ var GridLayoutPropsSchema = import_zod23.z.object({
1404
+ columns: import_zod23.z.number().int().min(1).max(4).default(2),
1405
+ rows: import_zod23.z.number().int().min(1).max(4).default(2),
1406
+ gap: import_zod23.z.number().min(0).max(50).default(20),
1407
+ padding: import_zod23.z.number().min(0).max(100).default(40)
1232
1408
  });
1233
1409
  var GridLayout = ({ columns, rows, gap, padding, children }) => {
1234
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_remotion17.AbsoluteFill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1410
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Fill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1235
1411
  "div",
1236
1412
  {
1237
1413
  style: {
@@ -1256,23 +1432,23 @@ var GridLayoutComponentMetadata = {
1256
1432
  };
1257
1433
 
1258
1434
  // src/components/composites/ImageCollage.tsx
1259
- var import_remotion18 = require("remotion");
1260
- var import_zod21 = require("zod");
1261
- var import_jsx_runtime20 = require("react/jsx-runtime");
1262
- var ImageCollagePropsSchema = import_zod21.z.object({
1263
- images: import_zod21.z.array(import_zod21.z.object({ src: import_zod21.z.string().min(1), caption: import_zod21.z.string().optional() })).min(2).max(9),
1264
- layout: import_zod21.z.enum(["grid", "stack", "scatter"]).default("grid"),
1265
- stagger: import_zod21.z.number().int().min(2).max(10).default(5)
1435
+ var import_remotion15 = require("remotion");
1436
+ var import_zod24 = require("zod");
1437
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1438
+ var ImageCollagePropsSchema = import_zod24.z.object({
1439
+ images: import_zod24.z.array(import_zod24.z.object({ src: import_zod24.z.string().min(1), caption: import_zod24.z.string().optional() })).min(2).max(9),
1440
+ layout: import_zod24.z.enum(["grid", "stack", "scatter"]).default("grid"),
1441
+ stagger: import_zod24.z.number().int().min(2).max(10).default(5)
1266
1442
  });
1267
- var resolveAsset4 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion18.staticFile)(staticFileInputFromAssetPath(value));
1443
+ var resolveAsset4 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion15.staticFile)(staticFileInputFromAssetPath(value));
1268
1444
  var ImageCollage = ({ images, layout, stagger }) => {
1269
- const frame = (0, import_remotion18.useCurrentFrame)();
1270
- const { fps } = (0, import_remotion18.useVideoConfig)();
1445
+ const frame = (0, import_remotion15.useCurrentFrame)();
1446
+ const { fps } = (0, import_remotion15.useVideoConfig)();
1271
1447
  const n = images.length;
1272
1448
  const cols = Math.ceil(Math.sqrt(n));
1273
1449
  const rows = Math.ceil(n / cols);
1274
1450
  if (layout === "grid") {
1275
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_remotion18.AbsoluteFill, { style: { padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1451
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Fill, { style: { padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1276
1452
  "div",
1277
1453
  {
1278
1454
  style: {
@@ -1284,21 +1460,21 @@ var ImageCollage = ({ images, layout, stagger }) => {
1284
1460
  height: "100%"
1285
1461
  },
1286
1462
  children: images.map((img, i) => {
1287
- const p = (0, import_remotion18.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1288
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("div", { style: { position: "relative", overflow: "hidden", borderRadius: 18, opacity: p, transform: `scale(${0.92 + 0.08 * p})` }, children: [
1289
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_remotion18.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1290
- img.caption ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0, padding: 12, background: "linear-gradient(transparent, rgba(0,0,0,0.7))", color: "#fff", fontWeight: 700 }, children: img.caption }) : null
1463
+ const p = (0, import_remotion15.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1464
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { position: "relative", overflow: "hidden", borderRadius: 18, opacity: p, transform: `scale(${0.92 + 0.08 * p})` }, children: [
1465
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_remotion15.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1466
+ img.caption ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0, padding: 12, background: "linear-gradient(transparent, rgba(0,0,0,0.7))", color: "#fff", fontWeight: 700 }, children: img.caption }) : null
1291
1467
  ] }, i);
1292
1468
  })
1293
1469
  }
1294
1470
  ) });
1295
1471
  }
1296
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_remotion18.AbsoluteFill, { children: images.map((img, i) => {
1297
- const p = (0, import_remotion18.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1472
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Fill, { children: images.map((img, i) => {
1473
+ const p = (0, import_remotion15.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1298
1474
  const baseRotate = layout === "stack" ? (i - (n - 1) / 2) * 4 : i * 17 % 20 - 10;
1299
1475
  const baseX = layout === "scatter" ? i * 137 % 300 - 150 : 0;
1300
1476
  const baseY = layout === "scatter" ? (i + 3) * 89 % 200 - 100 : 0;
1301
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1477
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1302
1478
  "div",
1303
1479
  {
1304
1480
  style: {
@@ -1313,7 +1489,7 @@ var ImageCollage = ({ images, layout, stagger }) => {
1313
1489
  overflow: "hidden",
1314
1490
  boxShadow: "0 20px 60px rgba(0,0,0,0.35)"
1315
1491
  },
1316
- children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_remotion18.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } })
1492
+ children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_remotion15.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } })
1317
1493
  },
1318
1494
  i
1319
1495
  );
@@ -1327,20 +1503,20 @@ var ImageCollageComponentMetadata = {
1327
1503
  };
1328
1504
 
1329
1505
  // src/components/composites/ImageReveal.tsx
1330
- var import_remotion19 = require("remotion");
1331
- var import_zod22 = require("zod");
1332
- var import_jsx_runtime21 = require("react/jsx-runtime");
1333
- var ImageRevealPropsSchema = import_zod22.z.object({
1334
- src: import_zod22.z.string().min(1),
1335
- direction: import_zod22.z.enum(["left", "right", "top", "bottom", "center"]).default("left"),
1336
- revealType: import_zod22.z.enum(["wipe", "expand", "iris"]).default("wipe")
1506
+ var import_remotion16 = require("remotion");
1507
+ var import_zod25 = require("zod");
1508
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1509
+ var ImageRevealPropsSchema = import_zod25.z.object({
1510
+ src: import_zod25.z.string().min(1),
1511
+ direction: import_zod25.z.enum(["left", "right", "top", "bottom", "center"]).default("left"),
1512
+ revealType: import_zod25.z.enum(["wipe", "expand", "iris"]).default("wipe")
1337
1513
  });
1338
- var resolveAsset5 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion19.staticFile)(staticFileInputFromAssetPath(value));
1514
+ var resolveAsset5 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion16.staticFile)(staticFileInputFromAssetPath(value));
1339
1515
  var ImageReveal = ({ src, direction, revealType, __wavesDurationInFrames }) => {
1340
- const frame = (0, import_remotion19.useCurrentFrame)();
1516
+ const frame = (0, import_remotion16.useCurrentFrame)();
1341
1517
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1342
1518
  const d = Math.min(30, total);
1343
- const p = (0, import_remotion19.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1519
+ const p = (0, import_remotion16.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1344
1520
  let clipPath;
1345
1521
  let transform = "none";
1346
1522
  let transformOrigin = "center center";
@@ -1363,8 +1539,8 @@ var ImageReveal = ({ src, direction, revealType, __wavesDurationInFrames }) => {
1363
1539
  clipPath = `circle(${Math.round(150 * p)}% at 50% 50%)`;
1364
1540
  }
1365
1541
  const opacity = revealType === "expand" ? p : 1;
1366
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_remotion19.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
1367
- import_remotion19.Img,
1542
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1543
+ import_remotion16.Img,
1368
1544
  {
1369
1545
  src: resolveAsset5(src),
1370
1546
  style: {
@@ -1387,27 +1563,27 @@ var ImageRevealComponentMetadata = {
1387
1563
  };
1388
1564
 
1389
1565
  // src/components/composites/ImageSequence.tsx
1390
- var import_remotion20 = require("remotion");
1391
- var import_zod23 = require("zod");
1392
- var import_jsx_runtime22 = require("react/jsx-runtime");
1393
- var ImageSequencePropsSchema = import_zod23.z.object({
1394
- basePath: import_zod23.z.string().min(1),
1395
- frameCount: import_zod23.z.number().int().positive(),
1396
- filePattern: import_zod23.z.string().default("frame_{frame}.png"),
1397
- fps: import_zod23.z.number().int().min(1).max(120).default(30)
1566
+ var import_remotion17 = require("remotion");
1567
+ var import_zod26 = require("zod");
1568
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1569
+ var ImageSequencePropsSchema = import_zod26.z.object({
1570
+ basePath: import_zod26.z.string().min(1),
1571
+ frameCount: import_zod26.z.number().int().positive(),
1572
+ filePattern: import_zod26.z.string().default("frame_{frame}.png"),
1573
+ fps: import_zod26.z.number().int().min(1).max(120).default(30)
1398
1574
  });
1399
1575
  function joinPath(base, file) {
1400
1576
  if (base.endsWith("/")) return `${base}${file}`;
1401
1577
  return `${base}/${file}`;
1402
1578
  }
1403
- var resolveAsset6 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion20.staticFile)(staticFileInputFromAssetPath(value));
1579
+ var resolveAsset6 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion17.staticFile)(staticFileInputFromAssetPath(value));
1404
1580
  var ImageSequence = ({ basePath, frameCount, filePattern, fps }) => {
1405
- const frame = (0, import_remotion20.useCurrentFrame)();
1406
- const { fps: compFps } = (0, import_remotion20.useVideoConfig)();
1581
+ const frame = (0, import_remotion17.useCurrentFrame)();
1582
+ const { fps: compFps } = (0, import_remotion17.useVideoConfig)();
1407
1583
  const index = Math.min(frameCount - 1, Math.max(0, Math.floor(frame * fps / compFps)));
1408
1584
  const file = filePattern.replace("{frame}", String(index));
1409
1585
  const src = joinPath(basePath, file);
1410
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_remotion20.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_remotion20.Img, { src: resolveAsset6(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) });
1586
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_remotion17.Img, { src: resolveAsset6(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) });
1411
1587
  };
1412
1588
  var ImageSequenceComponentMetadata = {
1413
1589
  kind: "composite",
@@ -1417,26 +1593,26 @@ var ImageSequenceComponentMetadata = {
1417
1593
  };
1418
1594
 
1419
1595
  // src/components/composites/ImageWithCaption.tsx
1420
- var import_remotion21 = require("remotion");
1421
- var import_zod24 = require("zod");
1422
- var import_jsx_runtime23 = require("react/jsx-runtime");
1423
- var CaptionStyleSchema = import_zod24.z.object({
1424
- fontSize: import_zod24.z.number().min(12).max(80).default(32),
1425
- color: import_zod24.z.string().default("#FFFFFF"),
1426
- backgroundColor: import_zod24.z.string().default("rgba(0,0,0,0.7)")
1596
+ var import_remotion18 = require("remotion");
1597
+ var import_zod27 = require("zod");
1598
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1599
+ var CaptionStyleSchema = import_zod27.z.object({
1600
+ fontSize: import_zod27.z.number().min(12).max(80).default(32),
1601
+ color: import_zod27.z.string().default("#FFFFFF"),
1602
+ backgroundColor: import_zod27.z.string().default("rgba(0,0,0,0.7)")
1427
1603
  });
1428
- var ImageWithCaptionPropsSchema = import_zod24.z.object({
1429
- src: import_zod24.z.string().min(1),
1430
- caption: import_zod24.z.string().max(200),
1431
- captionPosition: import_zod24.z.enum(["top", "bottom", "overlay"]).default("bottom"),
1604
+ var ImageWithCaptionPropsSchema = import_zod27.z.object({
1605
+ src: import_zod27.z.string().min(1),
1606
+ caption: import_zod27.z.string().max(200),
1607
+ captionPosition: import_zod27.z.enum(["top", "bottom", "overlay"]).default("bottom"),
1432
1608
  captionStyle: CaptionStyleSchema.optional()
1433
1609
  });
1434
- var resolveAsset7 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion21.staticFile)(staticFileInputFromAssetPath(value));
1610
+ var resolveAsset7 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion18.staticFile)(staticFileInputFromAssetPath(value));
1435
1611
  var ImageWithCaption = ({ src, caption, captionPosition, captionStyle }) => {
1436
- const frame = (0, import_remotion21.useCurrentFrame)();
1437
- const p = (0, import_remotion21.interpolate)(frame, [8, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1612
+ const frame = (0, import_remotion18.useCurrentFrame)();
1613
+ const p = (0, import_remotion18.interpolate)(frame, [8, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1438
1614
  const style = captionStyle ?? { fontSize: 32, color: "#FFFFFF", backgroundColor: "rgba(0,0,0,0.7)" };
1439
- const captionBox = /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1615
+ const captionBox = /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1440
1616
  "div",
1441
1617
  {
1442
1618
  style: {
@@ -1453,15 +1629,15 @@ var ImageWithCaption = ({ src, caption, captionPosition, captionStyle }) => {
1453
1629
  }
1454
1630
  );
1455
1631
  if (captionPosition === "top" || captionPosition === "bottom") {
1456
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_remotion21.AbsoluteFill, { style: { display: "flex", flexDirection: "column" }, children: [
1632
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Fill, { style: { display: "flex", flexDirection: "column" }, children: [
1457
1633
  captionPosition === "top" ? captionBox : null,
1458
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { style: { flex: 1, position: "relative" }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_remotion21.Img, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) }),
1634
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { style: { flex: 1, position: "relative" }, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_remotion18.Img, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) }),
1459
1635
  captionPosition === "bottom" ? captionBox : null
1460
1636
  ] });
1461
1637
  }
1462
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_remotion21.AbsoluteFill, { children: [
1463
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_remotion21.Img, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1464
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0 }, children: captionBox })
1638
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Fill, { children: [
1639
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_remotion18.Img, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1640
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0 }, children: captionBox })
1465
1641
  ] });
1466
1642
  };
1467
1643
  var ImageWithCaptionComponentMetadata = {
@@ -1472,19 +1648,19 @@ var ImageWithCaptionComponentMetadata = {
1472
1648
  };
1473
1649
 
1474
1650
  // src/components/composites/InstagramStory.tsx
1475
- var import_remotion22 = require("remotion");
1476
- var import_zod25 = require("zod");
1477
- var import_jsx_runtime24 = require("react/jsx-runtime");
1478
- var InstagramStoryPropsSchema = import_zod25.z.object({
1479
- backgroundImage: import_zod25.z.string().optional(),
1480
- backgroundColor: import_zod25.z.string().default("#000000"),
1481
- profilePic: import_zod25.z.string().optional(),
1482
- username: import_zod25.z.string().optional(),
1483
- text: import_zod25.z.string().max(100).optional(),
1484
- sticker: import_zod25.z.enum(["none", "poll", "question", "countdown"]).default("none"),
1485
- musicTrack: import_zod25.z.string().optional()
1651
+ var import_remotion19 = require("remotion");
1652
+ var import_zod28 = require("zod");
1653
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1654
+ var InstagramStoryPropsSchema = import_zod28.z.object({
1655
+ backgroundImage: import_zod28.z.string().optional(),
1656
+ backgroundColor: import_zod28.z.string().default("#000000"),
1657
+ profilePic: import_zod28.z.string().optional(),
1658
+ username: import_zod28.z.string().optional(),
1659
+ text: import_zod28.z.string().max(100).optional(),
1660
+ sticker: import_zod28.z.enum(["none", "poll", "question", "countdown"]).default("none"),
1661
+ musicTrack: import_zod28.z.string().optional()
1486
1662
  });
1487
- var resolveAsset8 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion22.staticFile)(staticFileInputFromAssetPath(value));
1663
+ var resolveAsset8 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion19.staticFile)(staticFileInputFromAssetPath(value));
1488
1664
  var InstagramStory = ({
1489
1665
  backgroundImage,
1490
1666
  backgroundColor,
@@ -1494,17 +1670,17 @@ var InstagramStory = ({
1494
1670
  sticker,
1495
1671
  musicTrack
1496
1672
  }) => {
1497
- const frame = (0, import_remotion22.useCurrentFrame)();
1498
- const fade = (0, import_remotion22.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1499
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_remotion22.AbsoluteFill, { style: { backgroundColor }, children: [
1500
- musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_remotion22.Audio, { src: resolveAsset8(musicTrack), volume: 0.6 }) : null,
1501
- backgroundImage ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_remotion22.Img, { src: resolveAsset8(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover", opacity: fade } }) : null,
1502
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_remotion22.AbsoluteFill, { style: { padding: 60, boxSizing: "border-box" }, children: [
1503
- profilePic || username ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 18 }, children: [
1504
- profilePic ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_remotion22.Img, { src: resolveAsset8(profilePic), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "rgba(255,255,255,0.2)" } }),
1505
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 34 }, children: username ?? "username" })
1673
+ const frame = (0, import_remotion19.useCurrentFrame)();
1674
+ const fade = (0, import_remotion19.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1675
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Fill, { style: { backgroundColor }, children: [
1676
+ musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_remotion19.Audio, { src: resolveAsset8(musicTrack), volume: 0.6 }) : null,
1677
+ backgroundImage ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_remotion19.Img, { src: resolveAsset8(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover", opacity: fade } }) : null,
1678
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Fill, { style: { padding: 60, boxSizing: "border-box" }, children: [
1679
+ profilePic || username ? /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 18 }, children: [
1680
+ profilePic ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_remotion19.Img, { src: resolveAsset8(profilePic), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "rgba(255,255,255,0.2)" } }),
1681
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 34 }, children: username ?? "username" })
1506
1682
  ] }) : null,
1507
- text ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1683
+ text ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1508
1684
  "div",
1509
1685
  {
1510
1686
  style: {
@@ -1518,7 +1694,7 @@ var InstagramStory = ({
1518
1694
  children: text
1519
1695
  }
1520
1696
  ) : null,
1521
- sticker !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1697
+ sticker !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1522
1698
  "div",
1523
1699
  {
1524
1700
  style: {
@@ -1547,18 +1723,18 @@ var InstagramStoryComponentMetadata = {
1547
1723
  };
1548
1724
 
1549
1725
  // src/components/composites/IntroScene.tsx
1550
- var import_remotion23 = require("remotion");
1551
- var import_zod26 = require("zod");
1552
- var import_jsx_runtime25 = require("react/jsx-runtime");
1553
- var IntroScenePropsSchema = import_zod26.z.object({
1554
- logoSrc: import_zod26.z.string().min(1),
1555
- companyName: import_zod26.z.string().min(1),
1556
- tagline: import_zod26.z.string().optional(),
1557
- backgroundColor: import_zod26.z.string().default("#000000"),
1558
- primaryColor: import_zod26.z.string().default("#FFFFFF"),
1559
- musicTrack: import_zod26.z.string().optional()
1726
+ var import_remotion20 = require("remotion");
1727
+ var import_zod29 = require("zod");
1728
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1729
+ var IntroScenePropsSchema = import_zod29.z.object({
1730
+ logoSrc: import_zod29.z.string().min(1),
1731
+ companyName: import_zod29.z.string().min(1),
1732
+ tagline: import_zod29.z.string().optional(),
1733
+ backgroundColor: import_zod29.z.string().default("#000000"),
1734
+ primaryColor: import_zod29.z.string().default("#FFFFFF"),
1735
+ musicTrack: import_zod29.z.string().optional()
1560
1736
  });
1561
- var resolveAsset9 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion23.staticFile)(staticFileInputFromAssetPath(value));
1737
+ var resolveAsset9 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion20.staticFile)(staticFileInputFromAssetPath(value));
1562
1738
  var IntroScene = ({
1563
1739
  logoSrc,
1564
1740
  companyName,
@@ -1568,25 +1744,25 @@ var IntroScene = ({
1568
1744
  musicTrack,
1569
1745
  __wavesDurationInFrames
1570
1746
  }) => {
1571
- const frame = (0, import_remotion23.useCurrentFrame)();
1572
- const { fps } = (0, import_remotion23.useVideoConfig)();
1747
+ const frame = (0, import_remotion20.useCurrentFrame)();
1748
+ const { fps } = (0, import_remotion20.useVideoConfig)();
1573
1749
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1574
- const logoP = (0, import_remotion23.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1575
- const nameOpacity = (0, import_remotion23.interpolate)(frame, [20, 60], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1576
- const taglineY = (0, import_remotion23.interpolate)(frame, [50, 80], [20, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1577
- const outroFade = (0, import_remotion23.interpolate)(frame, [Math.max(0, total - 20), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1578
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_remotion23.AbsoluteFill, { style: { backgroundColor, justifyContent: "center", alignItems: "center" }, children: [
1579
- musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_remotion23.Audio, { src: resolveAsset9(musicTrack), volume: 0.7 }) : null,
1580
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("div", { style: { textAlign: "center", opacity: outroFade }, children: [
1581
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1582
- import_remotion23.Img,
1750
+ const logoP = (0, import_remotion20.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1751
+ const nameOpacity = (0, import_remotion20.interpolate)(frame, [20, 60], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1752
+ const taglineY = (0, import_remotion20.interpolate)(frame, [50, 80], [20, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1753
+ const outroFade = (0, import_remotion20.interpolate)(frame, [Math.max(0, total - 20), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1754
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(Fill, { style: { backgroundColor, display: "flex", justifyContent: "center", alignItems: "center" }, children: [
1755
+ musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_remotion20.Audio, { src: resolveAsset9(musicTrack), volume: 0.7 }) : null,
1756
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { style: { textAlign: "center", opacity: outroFade }, children: [
1757
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1758
+ import_remotion20.Img,
1583
1759
  {
1584
1760
  src: resolveAsset9(logoSrc),
1585
1761
  style: { width: 280, height: 280, objectFit: "contain", transform: `scale(${logoP})` }
1586
1762
  }
1587
1763
  ),
1588
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("div", { style: { marginTop: 24, color: primaryColor, fontSize: 64, fontWeight: 900, opacity: nameOpacity }, children: companyName }),
1589
- tagline ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1764
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { style: { marginTop: 24, color: primaryColor, fontSize: 64, fontWeight: 900, opacity: nameOpacity }, children: companyName }),
1765
+ tagline ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1590
1766
  "div",
1591
1767
  {
1592
1768
  style: {
@@ -1611,17 +1787,17 @@ var IntroSceneComponentMetadata = {
1611
1787
  };
1612
1788
 
1613
1789
  // src/components/composites/KenBurnsImage.tsx
1614
- var import_remotion24 = require("remotion");
1615
- var import_zod27 = require("zod");
1616
- var import_jsx_runtime26 = require("react/jsx-runtime");
1617
- var KenBurnsImagePropsSchema = import_zod27.z.object({
1618
- src: import_zod27.z.string().min(1),
1619
- startScale: import_zod27.z.number().min(1).max(2).default(1),
1620
- endScale: import_zod27.z.number().min(1).max(2).default(1.2),
1621
- panDirection: import_zod27.z.enum(["none", "left", "right", "up", "down"]).default("none"),
1622
- panAmount: import_zod27.z.number().min(0).max(100).default(50)
1790
+ var import_remotion21 = require("remotion");
1791
+ var import_zod30 = require("zod");
1792
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1793
+ var KenBurnsImagePropsSchema = import_zod30.z.object({
1794
+ src: import_zod30.z.string().min(1),
1795
+ startScale: import_zod30.z.number().min(1).max(2).default(1),
1796
+ endScale: import_zod30.z.number().min(1).max(2).default(1.2),
1797
+ panDirection: import_zod30.z.enum(["none", "left", "right", "up", "down"]).default("none"),
1798
+ panAmount: import_zod30.z.number().min(0).max(100).default(50)
1623
1799
  });
1624
- var resolveAsset10 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion24.staticFile)(staticFileInputFromAssetPath(value));
1800
+ var resolveAsset10 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion21.staticFile)(staticFileInputFromAssetPath(value));
1625
1801
  var KenBurnsImage = ({
1626
1802
  src,
1627
1803
  startScale,
@@ -1630,14 +1806,14 @@ var KenBurnsImage = ({
1630
1806
  panAmount,
1631
1807
  __wavesDurationInFrames
1632
1808
  }) => {
1633
- const frame = (0, import_remotion24.useCurrentFrame)();
1809
+ const frame = (0, import_remotion21.useCurrentFrame)();
1634
1810
  const duration = Math.max(1, __wavesDurationInFrames ?? 1);
1635
- const t = (0, import_remotion24.interpolate)(frame, [0, duration], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1811
+ const t = (0, import_remotion21.interpolate)(frame, [0, duration], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1636
1812
  const scale = startScale + (endScale - startScale) * t;
1637
1813
  const dx = panDirection === "left" ? -panAmount * t : panDirection === "right" ? panAmount * t : 0;
1638
1814
  const dy = panDirection === "up" ? -panAmount * t : panDirection === "down" ? panAmount * t : 0;
1639
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_remotion24.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1640
- import_remotion24.Img,
1815
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1816
+ import_remotion21.Img,
1641
1817
  {
1642
1818
  src: resolveAsset10(src),
1643
1819
  style: {
@@ -1658,20 +1834,20 @@ var KenBurnsImageComponentMetadata = {
1658
1834
  };
1659
1835
 
1660
1836
  // src/components/composites/KineticTypography.tsx
1661
- var import_remotion25 = require("remotion");
1662
- var import_zod28 = require("zod");
1663
- var import_jsx_runtime27 = require("react/jsx-runtime");
1664
- var WordSchema = import_zod28.z.object({
1665
- text: import_zod28.z.string().min(1),
1666
- emphasis: import_zod28.z.enum(["normal", "bold", "giant"]).default("normal")
1837
+ var import_remotion22 = require("remotion");
1838
+ var import_zod31 = require("zod");
1839
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1840
+ var WordSchema = import_zod31.z.object({
1841
+ text: import_zod31.z.string().min(1),
1842
+ emphasis: import_zod31.z.enum(["normal", "bold", "giant"]).default("normal")
1667
1843
  });
1668
- var KineticTypographyPropsSchema = import_zod28.z.object({
1669
- words: import_zod28.z.array(WordSchema).min(1).max(50),
1670
- fontSize: import_zod28.z.number().min(12).max(140).default(48),
1671
- color: import_zod28.z.string().default("#FFFFFF"),
1672
- fontFamily: import_zod28.z.string().default("Inter"),
1673
- timing: import_zod28.z.array(import_zod28.z.number().int().min(0)).min(1).describe("Frame timing for each word"),
1674
- transition: import_zod28.z.enum(["fade", "scale", "slideLeft", "slideRight"]).default("scale")
1844
+ var KineticTypographyPropsSchema = import_zod31.z.object({
1845
+ words: import_zod31.z.array(WordSchema).min(1).max(50),
1846
+ fontSize: import_zod31.z.number().min(12).max(140).default(48),
1847
+ color: import_zod31.z.string().default("#FFFFFF"),
1848
+ fontFamily: import_zod31.z.string().default("Inter"),
1849
+ timing: import_zod31.z.array(import_zod31.z.number().int().min(0)).min(1).describe("Frame timing for each word"),
1850
+ transition: import_zod31.z.enum(["fade", "scale", "slideLeft", "slideRight"]).default("scale")
1675
1851
  });
1676
1852
  var KineticTypography = ({
1677
1853
  words,
@@ -1681,8 +1857,8 @@ var KineticTypography = ({
1681
1857
  timing,
1682
1858
  transition
1683
1859
  }) => {
1684
- const frame = (0, import_remotion25.useCurrentFrame)();
1685
- const { fps } = (0, import_remotion25.useVideoConfig)();
1860
+ const frame = (0, import_remotion22.useCurrentFrame)();
1861
+ const { fps } = (0, import_remotion22.useVideoConfig)();
1686
1862
  const starts = (() => {
1687
1863
  if (timing.length >= words.length) return timing.slice(0, words.length);
1688
1864
  const last = timing.length ? timing[timing.length - 1] : 0;
@@ -1695,13 +1871,13 @@ var KineticTypography = ({
1695
1871
  }
1696
1872
  const word = words[activeIndex];
1697
1873
  const start = starts[activeIndex] ?? 0;
1698
- const p = (0, import_remotion25.spring)({ frame: frame - start, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1874
+ const p = (0, import_remotion22.spring)({ frame: frame - start, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1699
1875
  const progress = Math.max(0, Math.min(1, p));
1700
1876
  const scaleBase = word.emphasis === "giant" ? 2 : word.emphasis === "bold" ? 1.3 : 1;
1701
1877
  const opacity = transition === "fade" ? progress : 1;
1702
1878
  const scale = transition === "scale" ? (0.85 + 0.15 * progress) * scaleBase : 1 * scaleBase;
1703
1879
  const tx = transition === "slideLeft" ? 40 * (1 - progress) : transition === "slideRight" ? -40 * (1 - progress) : 0;
1704
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_remotion25.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1880
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1705
1881
  "div",
1706
1882
  {
1707
1883
  style: {
@@ -1726,17 +1902,17 @@ var KineticTypographyComponentMetadata = {
1726
1902
  };
1727
1903
 
1728
1904
  // src/components/composites/LineGraph.tsx
1729
- var import_remotion26 = require("remotion");
1730
- var import_zod29 = require("zod");
1731
- var import_jsx_runtime28 = require("react/jsx-runtime");
1732
- var PointSchema = import_zod29.z.object({ x: import_zod29.z.number(), y: import_zod29.z.number() });
1733
- var LineGraphPropsSchema = import_zod29.z.object({
1734
- data: import_zod29.z.array(PointSchema).min(2).max(50),
1735
- color: import_zod29.z.string().default("#00FF00"),
1736
- strokeWidth: import_zod29.z.number().min(1).max(10).default(3),
1737
- showDots: import_zod29.z.boolean().default(true),
1738
- fillArea: import_zod29.z.boolean().default(false),
1739
- animate: import_zod29.z.enum(["draw", "reveal"]).default("draw")
1905
+ var import_remotion23 = require("remotion");
1906
+ var import_zod32 = require("zod");
1907
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1908
+ var PointSchema = import_zod32.z.object({ x: import_zod32.z.number(), y: import_zod32.z.number() });
1909
+ var LineGraphPropsSchema = import_zod32.z.object({
1910
+ data: import_zod32.z.array(PointSchema).min(2).max(50),
1911
+ color: import_zod32.z.string().default("#00FF00"),
1912
+ strokeWidth: import_zod32.z.number().min(1).max(10).default(3),
1913
+ showDots: import_zod32.z.boolean().default(true),
1914
+ fillArea: import_zod32.z.boolean().default(false),
1915
+ animate: import_zod32.z.enum(["draw", "reveal"]).default("draw")
1740
1916
  });
1741
1917
  function normalize(data, w, h, pad) {
1742
1918
  const xs = data.map((d) => d.x);
@@ -1762,9 +1938,9 @@ var LineGraph = ({
1762
1938
  animate,
1763
1939
  __wavesDurationInFrames
1764
1940
  }) => {
1765
- const frame = (0, import_remotion26.useCurrentFrame)();
1941
+ const frame = (0, import_remotion23.useCurrentFrame)();
1766
1942
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1767
- const progress = (0, import_remotion26.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1943
+ const progress = (0, import_remotion23.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1768
1944
  const w = 1e3;
1769
1945
  const h = 520;
1770
1946
  const pad = 30;
@@ -1772,9 +1948,9 @@ var LineGraph = ({
1772
1948
  const d = toPath(pts);
1773
1949
  const dash = 3e3;
1774
1950
  const dashOffset = dash * (1 - progress);
1775
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_remotion26.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("svg", { width: w, height: h, viewBox: `0 0 ${w} ${h}`, children: [
1776
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("clipPath", { id: "waves-line-reveal", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("rect", { x: "0", y: "0", width: w * progress, height: h }) }) }),
1777
- fillArea ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1951
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("svg", { viewBox: `0 0 ${w} ${h}`, style: { width: "100%", height: "100%" }, children: [
1952
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("clipPath", { id: "waves-line-reveal", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("rect", { x: "0", y: "0", width: w * progress, height: h }) }) }),
1953
+ fillArea ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1778
1954
  "path",
1779
1955
  {
1780
1956
  d: `${d} L ${pts[pts.length - 1].x} ${h - pad} L ${pts[0].x} ${h - pad} Z`,
@@ -1783,7 +1959,7 @@ var LineGraph = ({
1783
1959
  clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0
1784
1960
  }
1785
1961
  ) : null,
1786
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1962
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1787
1963
  "path",
1788
1964
  {
1789
1965
  d,
@@ -1797,7 +1973,7 @@ var LineGraph = ({
1797
1973
  clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0
1798
1974
  }
1799
1975
  ),
1800
- showDots ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("g", { clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0, children: pts.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("circle", { cx: p.x, cy: p.y, r: 6, fill: color }, i)) }) : null
1976
+ showDots ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("g", { clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0, children: pts.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("circle", { cx: p.x, cy: p.y, r: 6, fill: color }, i)) }) : null
1801
1977
  ] }) });
1802
1978
  };
1803
1979
  var LineGraphComponentMetadata = {
@@ -1808,28 +1984,28 @@ var LineGraphComponentMetadata = {
1808
1984
  };
1809
1985
 
1810
1986
  // src/components/composites/LogoReveal.tsx
1811
- var import_remotion27 = require("remotion");
1812
- var import_zod30 = require("zod");
1813
- var import_jsx_runtime29 = require("react/jsx-runtime");
1814
- var LogoRevealPropsSchema = import_zod30.z.object({
1815
- logoSrc: import_zod30.z.string().min(1),
1816
- effect: import_zod30.z.enum(["fade", "scale", "rotate", "slide"]).default("scale"),
1817
- backgroundColor: import_zod30.z.string().default("#000000"),
1818
- soundEffect: import_zod30.z.string().optional()
1987
+ var import_remotion24 = require("remotion");
1988
+ var import_zod33 = require("zod");
1989
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1990
+ var LogoRevealPropsSchema = import_zod33.z.object({
1991
+ logoSrc: import_zod33.z.string().min(1),
1992
+ effect: import_zod33.z.enum(["fade", "scale", "rotate", "slide"]).default("scale"),
1993
+ backgroundColor: import_zod33.z.string().default("#000000"),
1994
+ soundEffect: import_zod33.z.string().optional()
1819
1995
  });
1820
- var resolveAsset11 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion27.staticFile)(staticFileInputFromAssetPath(value));
1996
+ var resolveAsset11 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion24.staticFile)(staticFileInputFromAssetPath(value));
1821
1997
  var LogoReveal = ({ logoSrc, effect, backgroundColor, soundEffect }) => {
1822
- const frame = (0, import_remotion27.useCurrentFrame)();
1823
- const { fps } = (0, import_remotion27.useVideoConfig)();
1824
- const p = (0, import_remotion27.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
1998
+ const frame = (0, import_remotion24.useCurrentFrame)();
1999
+ const { fps } = (0, import_remotion24.useVideoConfig)();
2000
+ const p = (0, import_remotion24.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
1825
2001
  const opacity = effect === "fade" ? p : Math.min(1, Math.max(0, p));
1826
2002
  const scale = effect === "scale" ? p : 1;
1827
2003
  const rotate = effect === "rotate" ? (1 - p) * 360 : 0;
1828
2004
  const translateY = effect === "slide" ? -200 * (1 - p) : 0;
1829
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_remotion27.AbsoluteFill, { style: { backgroundColor, justifyContent: "center", alignItems: "center" }, children: [
1830
- soundEffect ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_remotion27.Audio, { src: resolveAsset11(soundEffect), volume: 1 }) : null,
1831
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1832
- import_remotion27.Img,
2005
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(Fill, { style: { backgroundColor, display: "flex", justifyContent: "center", alignItems: "center" }, children: [
2006
+ soundEffect ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_remotion24.Audio, { src: resolveAsset11(soundEffect), volume: 1 }) : null,
2007
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2008
+ import_remotion24.Img,
1833
2009
  {
1834
2010
  src: resolveAsset11(logoSrc),
1835
2011
  style: {
@@ -1851,32 +2027,32 @@ var LogoRevealComponentMetadata = {
1851
2027
  };
1852
2028
 
1853
2029
  // src/components/composites/OutroScene.tsx
1854
- var import_remotion28 = require("remotion");
1855
- var import_zod31 = require("zod");
1856
- var import_jsx_runtime30 = require("react/jsx-runtime");
1857
- var CtaSchema = import_zod31.z.object({ text: import_zod31.z.string().min(1), icon: import_zod31.z.string().optional() });
1858
- var HandleSchema = import_zod31.z.object({
1859
- platform: import_zod31.z.enum(["twitter", "instagram", "youtube", "linkedin"]),
1860
- handle: import_zod31.z.string().min(1)
2030
+ var import_remotion25 = require("remotion");
2031
+ var import_zod34 = require("zod");
2032
+ var import_jsx_runtime34 = require("react/jsx-runtime");
2033
+ var CtaSchema = import_zod34.z.object({ text: import_zod34.z.string().min(1), icon: import_zod34.z.string().optional() });
2034
+ var HandleSchema = import_zod34.z.object({
2035
+ platform: import_zod34.z.enum(["twitter", "instagram", "youtube", "linkedin"]),
2036
+ handle: import_zod34.z.string().min(1)
1861
2037
  });
1862
- var OutroScenePropsSchema = import_zod31.z.object({
1863
- logoSrc: import_zod31.z.string().min(1),
1864
- message: import_zod31.z.string().default("Thank You"),
1865
- ctaButtons: import_zod31.z.array(CtaSchema).max(3).optional(),
1866
- socialHandles: import_zod31.z.array(HandleSchema).max(4).optional(),
1867
- backgroundColor: import_zod31.z.string().default("#000000")
2038
+ var OutroScenePropsSchema = import_zod34.z.object({
2039
+ logoSrc: import_zod34.z.string().min(1),
2040
+ message: import_zod34.z.string().default("Thank You"),
2041
+ ctaButtons: import_zod34.z.array(CtaSchema).max(3).optional(),
2042
+ socialHandles: import_zod34.z.array(HandleSchema).max(4).optional(),
2043
+ backgroundColor: import_zod34.z.string().default("#000000")
1868
2044
  });
1869
- var resolveAsset12 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion28.staticFile)(staticFileInputFromAssetPath(value));
2045
+ var resolveAsset12 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion25.staticFile)(staticFileInputFromAssetPath(value));
1870
2046
  var OutroScene = ({ logoSrc, message, ctaButtons, socialHandles, backgroundColor }) => {
1871
- const frame = (0, import_remotion28.useCurrentFrame)();
1872
- const { fps } = (0, import_remotion28.useVideoConfig)();
1873
- const logoP = (0, import_remotion28.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1874
- const msgP = (0, import_remotion28.spring)({ frame: frame - 18, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1875
- const ctaP = (0, import_remotion28.spring)({ frame: frame - 40, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1876
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_remotion28.AbsoluteFill, { style: { backgroundColor, justifyContent: "center", alignItems: "center", padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { style: { textAlign: "center" }, children: [
1877
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_remotion28.Img, { src: resolveAsset12(logoSrc), style: { width: 220, height: 220, objectFit: "contain", transform: `scale(${logoP})` } }),
1878
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { style: { marginTop: 24, color: "#FFFFFF", fontSize: 72, fontWeight: 1e3, opacity: msgP }, children: message }),
1879
- ctaButtons?.length ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { style: { marginTop: 34, display: "flex", gap: 18, justifyContent: "center", opacity: ctaP }, children: ctaButtons.map((b, i) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
2047
+ const frame = (0, import_remotion25.useCurrentFrame)();
2048
+ const { fps } = (0, import_remotion25.useVideoConfig)();
2049
+ const logoP = (0, import_remotion25.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2050
+ const msgP = (0, import_remotion25.spring)({ frame: frame - 18, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2051
+ const ctaP = (0, import_remotion25.spring)({ frame: frame - 40, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2052
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Fill, { style: { backgroundColor, display: "flex", justifyContent: "center", alignItems: "center", padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { style: { textAlign: "center" }, children: [
2053
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_remotion25.Img, { src: resolveAsset12(logoSrc), style: { width: 220, height: 220, objectFit: "contain", transform: `scale(${logoP})` } }),
2054
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { style: { marginTop: 24, color: "#FFFFFF", fontSize: 72, fontWeight: 1e3, opacity: msgP }, children: message }),
2055
+ ctaButtons?.length ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { style: { marginTop: 34, display: "flex", gap: 18, justifyContent: "center", opacity: ctaP }, children: ctaButtons.map((b, i) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1880
2056
  "div",
1881
2057
  {
1882
2058
  style: {
@@ -1894,7 +2070,7 @@ var OutroScene = ({ logoSrc, message, ctaButtons, socialHandles, backgroundColor
1894
2070
  },
1895
2071
  i
1896
2072
  )) }) : null,
1897
- socialHandles?.length ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { style: { marginTop: 50, display: "flex", flexDirection: "column", gap: 10, opacity: ctaP }, children: socialHandles.map((h, i) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { style: { color: "rgba(255,255,255,0.85)", fontSize: 26, fontWeight: 800 }, children: [
2073
+ socialHandles?.length ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { style: { marginTop: 50, display: "flex", flexDirection: "column", gap: 10, opacity: ctaP }, children: socialHandles.map((h, i) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { style: { color: "rgba(255,255,255,0.85)", fontSize: 26, fontWeight: 800 }, children: [
1898
2074
  h.platform,
1899
2075
  ": ",
1900
2076
  h.handle
@@ -1909,19 +2085,19 @@ var OutroSceneComponentMetadata = {
1909
2085
  };
1910
2086
 
1911
2087
  // src/components/composites/OutlineText.tsx
1912
- var import_remotion29 = require("remotion");
1913
- var import_zod32 = require("zod");
1914
- var import_jsx_runtime31 = require("react/jsx-runtime");
1915
- var OutlineTextPropsSchema = import_zod32.z.object({
1916
- content: import_zod32.z.string().max(50),
1917
- fontSize: import_zod32.z.number().min(8).max(240).default(96),
1918
- outlineColor: import_zod32.z.string().default("#FFFFFF"),
1919
- fillColor: import_zod32.z.string().default("#000000"),
1920
- fontFamily: import_zod32.z.string().default("Inter"),
1921
- fontWeight: import_zod32.z.number().int().min(100).max(900).default(800),
1922
- position: import_zod32.z.enum(["top", "center", "bottom"]).default("center"),
1923
- animation: import_zod32.z.enum(["draw", "fill"]).default("draw"),
1924
- strokeWidth: import_zod32.z.number().min(1).max(10).default(3)
2088
+ var import_remotion26 = require("remotion");
2089
+ var import_zod35 = require("zod");
2090
+ var import_jsx_runtime35 = require("react/jsx-runtime");
2091
+ var OutlineTextPropsSchema = import_zod35.z.object({
2092
+ content: import_zod35.z.string().max(50),
2093
+ fontSize: import_zod35.z.number().min(8).max(240).default(96),
2094
+ outlineColor: import_zod35.z.string().default("#FFFFFF"),
2095
+ fillColor: import_zod35.z.string().default("#000000"),
2096
+ fontFamily: import_zod35.z.string().default("Inter"),
2097
+ fontWeight: import_zod35.z.number().int().min(100).max(900).default(800),
2098
+ position: import_zod35.z.enum(["top", "center", "bottom"]).default("center"),
2099
+ animation: import_zod35.z.enum(["draw", "fill"]).default("draw"),
2100
+ strokeWidth: import_zod35.z.number().min(1).max(10).default(3)
1925
2101
  });
1926
2102
  var positionStyles3 = (position) => {
1927
2103
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -1939,12 +2115,12 @@ var OutlineText = ({
1939
2115
  animation,
1940
2116
  strokeWidth
1941
2117
  }) => {
1942
- const frame = (0, import_remotion29.useCurrentFrame)();
1943
- const t = (0, import_remotion29.interpolate)(frame, [0, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2118
+ const frame = (0, import_remotion26.useCurrentFrame)();
2119
+ const t = (0, import_remotion26.interpolate)(frame, [0, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1944
2120
  const strokeOpacity = animation === "draw" ? t : 1;
1945
2121
  const fillOpacity = animation === "fill" ? t : 0;
1946
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_remotion29.AbsoluteFill, { style: { display: "flex", ...positionStyles3(position) }, children: [
1947
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2122
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(Fill, { style: { display: "flex", ...positionStyles3(position) }, children: [
2123
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1948
2124
  "div",
1949
2125
  {
1950
2126
  style: {
@@ -1961,7 +2137,7 @@ var OutlineText = ({
1961
2137
  children: content
1962
2138
  }
1963
2139
  ),
1964
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2140
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1965
2141
  "div",
1966
2142
  {
1967
2143
  style: {
@@ -1988,16 +2164,16 @@ var OutlineTextComponentMetadata = {
1988
2164
  };
1989
2165
 
1990
2166
  // src/components/composites/ProgressBar.tsx
1991
- var import_remotion30 = require("remotion");
1992
- var import_zod33 = require("zod");
1993
- var import_jsx_runtime32 = require("react/jsx-runtime");
1994
- var ProgressBarPropsSchema = import_zod33.z.object({
1995
- label: import_zod33.z.string().optional(),
1996
- color: import_zod33.z.string().default("#00FF00"),
1997
- backgroundColor: import_zod33.z.string().default("rgba(255,255,255,0.2)"),
1998
- height: import_zod33.z.number().min(5).max(50).default(10),
1999
- position: import_zod33.z.enum(["top", "bottom"]).default("bottom"),
2000
- showPercentage: import_zod33.z.boolean().default(true)
2167
+ var import_remotion27 = require("remotion");
2168
+ var import_zod36 = require("zod");
2169
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2170
+ var ProgressBarPropsSchema = import_zod36.z.object({
2171
+ label: import_zod36.z.string().optional(),
2172
+ color: import_zod36.z.string().default("#00FF00"),
2173
+ backgroundColor: import_zod36.z.string().default("rgba(255,255,255,0.2)"),
2174
+ height: import_zod36.z.number().min(5).max(50).default(10),
2175
+ position: import_zod36.z.enum(["top", "bottom"]).default("bottom"),
2176
+ showPercentage: import_zod36.z.boolean().default(true)
2001
2177
  });
2002
2178
  var ProgressBar = ({
2003
2179
  label,
@@ -2008,17 +2184,17 @@ var ProgressBar = ({
2008
2184
  showPercentage,
2009
2185
  __wavesDurationInFrames
2010
2186
  }) => {
2011
- const frame = (0, import_remotion30.useCurrentFrame)();
2187
+ const frame = (0, import_remotion27.useCurrentFrame)();
2012
2188
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2013
- const p = (0, import_remotion30.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2189
+ const p = (0, import_remotion27.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2014
2190
  const pct = Math.round(p * 100);
2015
2191
  const yStyle = position === "top" ? { top: 50 } : { bottom: 50 };
2016
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_remotion30.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { style: { position: "absolute", left: 80, right: 80, ...yStyle }, children: [
2017
- label || showPercentage ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginBottom: 10, color: "#FFFFFF", fontWeight: 700 }, children: [
2018
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: label ?? "" }),
2019
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { children: showPercentage ? `${pct}%` : "" })
2192
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { style: { position: "absolute", left: 80, right: 80, ...yStyle }, children: [
2193
+ label || showPercentage ? /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginBottom: 10, color: "#FFFFFF", fontWeight: 700 }, children: [
2194
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: label ?? "" }),
2195
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: showPercentage ? `${pct}%` : "" })
2020
2196
  ] }) : null,
2021
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { style: { width: "100%", height, backgroundColor, borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { style: { width: `${pct}%`, height: "100%", backgroundColor: color } }) })
2197
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { style: { width: "100%", height, backgroundColor, borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { style: { width: `${pct}%`, height: "100%", backgroundColor: color } }) })
2022
2198
  ] }) });
2023
2199
  };
2024
2200
  var ProgressBarComponentMetadata = {
@@ -2029,16 +2205,16 @@ var ProgressBarComponentMetadata = {
2029
2205
  };
2030
2206
 
2031
2207
  // src/components/composites/ProgressRing.tsx
2032
- var import_remotion31 = require("remotion");
2033
- var import_zod34 = require("zod");
2034
- var import_jsx_runtime33 = require("react/jsx-runtime");
2035
- var ProgressRingPropsSchema = import_zod34.z.object({
2036
- percentage: import_zod34.z.number().min(0).max(100),
2037
- size: import_zod34.z.number().min(100).max(500).default(200),
2038
- strokeWidth: import_zod34.z.number().min(5).max(50).default(20),
2039
- color: import_zod34.z.string().default("#00FF00"),
2040
- backgroundColor: import_zod34.z.string().default("rgba(255,255,255,0.2)"),
2041
- showLabel: import_zod34.z.boolean().default(true)
2208
+ var import_remotion28 = require("remotion");
2209
+ var import_zod37 = require("zod");
2210
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2211
+ var ProgressRingPropsSchema = import_zod37.z.object({
2212
+ percentage: import_zod37.z.number().min(0).max(100),
2213
+ size: import_zod37.z.number().min(100).max(500).default(200),
2214
+ strokeWidth: import_zod37.z.number().min(5).max(50).default(20),
2215
+ color: import_zod37.z.string().default("#00FF00"),
2216
+ backgroundColor: import_zod37.z.string().default("rgba(255,255,255,0.2)"),
2217
+ showLabel: import_zod37.z.boolean().default(true)
2042
2218
  });
2043
2219
  var ProgressRing = ({
2044
2220
  percentage,
@@ -2049,17 +2225,17 @@ var ProgressRing = ({
2049
2225
  showLabel,
2050
2226
  __wavesDurationInFrames
2051
2227
  }) => {
2052
- const frame = (0, import_remotion31.useCurrentFrame)();
2228
+ const frame = (0, import_remotion28.useCurrentFrame)();
2053
2229
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2054
- const p = (0, import_remotion31.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2230
+ const p = (0, import_remotion28.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2055
2231
  const current = percentage * p;
2056
2232
  const r = (size - strokeWidth) / 2;
2057
2233
  const c = 2 * Math.PI * r;
2058
2234
  const dash = c;
2059
2235
  const offset = c - current / 100 * c;
2060
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_remotion31.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center" }, children: [
2061
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
2062
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2236
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: [
2237
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
2238
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2063
2239
  "circle",
2064
2240
  {
2065
2241
  cx: size / 2,
@@ -2070,7 +2246,7 @@ var ProgressRing = ({
2070
2246
  fill: "transparent"
2071
2247
  }
2072
2248
  ),
2073
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2249
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2074
2250
  "circle",
2075
2251
  {
2076
2252
  cx: size / 2,
@@ -2086,7 +2262,7 @@ var ProgressRing = ({
2086
2262
  }
2087
2263
  )
2088
2264
  ] }),
2089
- showLabel ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { style: { position: "absolute", color: "#FFFFFF", fontWeight: 800, fontSize: Math.round(size * 0.22) }, children: [
2265
+ showLabel ? /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { style: { position: "absolute", color: "#FFFFFF", fontWeight: 800, fontSize: Math.round(size * 0.22) }, children: [
2090
2266
  Math.round(current),
2091
2267
  "%"
2092
2268
  ] }) : null
@@ -2100,14 +2276,15 @@ var ProgressRingComponentMetadata = {
2100
2276
  };
2101
2277
 
2102
2278
  // src/components/composites/SlideTransition.tsx
2103
- var import_remotion32 = require("remotion");
2104
- var import_zod35 = require("zod");
2105
- var import_jsx_runtime34 = require("react/jsx-runtime");
2106
- var SlideTransitionPropsSchema = import_zod35.z.object({
2107
- durationInFrames: import_zod35.z.number().int().min(10).max(60).default(30),
2108
- direction: import_zod35.z.enum(["left", "right", "up", "down"]).default("left"),
2109
- distance: import_zod35.z.number().int().min(1).max(2e3).default(160),
2110
- phase: import_zod35.z.enum(["in", "out", "inOut"]).default("inOut")
2279
+ var import_react8 = __toESM(require("react"));
2280
+ var import_remotion29 = require("remotion");
2281
+ var import_zod38 = require("zod");
2282
+ var import_jsx_runtime38 = require("react/jsx-runtime");
2283
+ var SlideTransitionPropsSchema = import_zod38.z.object({
2284
+ durationInFrames: import_zod38.z.number().int().min(10).max(60).default(30),
2285
+ direction: import_zod38.z.enum(["left", "right", "up", "down"]).default("left"),
2286
+ distance: import_zod38.z.number().int().min(1).max(2e3).default(160),
2287
+ phase: import_zod38.z.enum(["in", "out", "inOut"]).default("inOut")
2111
2288
  });
2112
2289
  function translateFor(direction, delta) {
2113
2290
  if (direction === "left") return { x: -delta, y: 0 };
@@ -2123,29 +2300,30 @@ var SlideTransition = ({
2123
2300
  children,
2124
2301
  __wavesDurationInFrames
2125
2302
  }) => {
2126
- const frame = (0, import_remotion32.useCurrentFrame)();
2303
+ const layers = import_react8.default.Children.toArray(children);
2304
+ const frame = (0, import_remotion29.useCurrentFrame)();
2127
2305
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2128
2306
  const d = Math.min(durationInFrames, total);
2129
2307
  let opacity = 1;
2130
2308
  let tx = 0;
2131
2309
  let ty = 0;
2132
2310
  if (phase === "in" || phase === "inOut") {
2133
- const t = (0, import_remotion32.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2311
+ const t = (0, import_remotion29.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2134
2312
  const { x, y } = translateFor(direction, distance * t);
2135
2313
  tx += x;
2136
2314
  ty += y;
2137
- opacity *= (0, import_remotion32.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2315
+ opacity *= (0, import_remotion29.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2138
2316
  }
2139
2317
  if (phase === "out" || phase === "inOut") {
2140
2318
  const start = Math.max(0, total - d);
2141
- const t = (0, import_remotion32.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2319
+ const t = (0, import_remotion29.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2142
2320
  const opposite = direction === "left" ? "right" : direction === "right" ? "left" : direction === "up" ? "down" : "up";
2143
2321
  const { x, y } = translateFor(opposite, distance * t);
2144
2322
  tx += x;
2145
2323
  ty += y;
2146
- opacity *= (0, import_remotion32.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2324
+ opacity *= (0, import_remotion29.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2147
2325
  }
2148
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_remotion32.AbsoluteFill, { style: { opacity, transform: `translate(${tx}px, ${ty}px)` }, children });
2326
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Fill, { style: { opacity, transform: `translate(${tx}px, ${ty}px)` }, children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
2149
2327
  };
2150
2328
  var SlideTransitionComponentMetadata = {
2151
2329
  kind: "composite",
@@ -2157,16 +2335,15 @@ var SlideTransitionComponentMetadata = {
2157
2335
  };
2158
2336
 
2159
2337
  // src/components/composites/SplitScreen.tsx
2160
- var import_react2 = __toESM(require("react"));
2161
- var import_remotion33 = require("remotion");
2162
- var import_zod36 = require("zod");
2163
- var import_jsx_runtime35 = require("react/jsx-runtime");
2164
- var SplitScreenPropsSchema = import_zod36.z.object({
2165
- orientation: import_zod36.z.enum(["vertical", "horizontal"]).default("vertical"),
2166
- split: import_zod36.z.number().min(0.1).max(0.9).default(0.5),
2167
- gap: import_zod36.z.number().min(0).default(48),
2168
- padding: import_zod36.z.number().min(0).default(80),
2169
- dividerColor: import_zod36.z.string().optional()
2338
+ var import_react9 = __toESM(require("react"));
2339
+ var import_zod39 = require("zod");
2340
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2341
+ var SplitScreenPropsSchema = import_zod39.z.object({
2342
+ orientation: import_zod39.z.enum(["vertical", "horizontal"]).default("vertical"),
2343
+ split: import_zod39.z.number().min(0.1).max(0.9).default(0.5),
2344
+ gap: import_zod39.z.number().min(0).default(48),
2345
+ padding: import_zod39.z.number().min(0).default(80),
2346
+ dividerColor: import_zod39.z.string().optional()
2170
2347
  });
2171
2348
  var SplitScreen = ({
2172
2349
  orientation,
@@ -2176,14 +2353,14 @@ var SplitScreen = ({
2176
2353
  dividerColor,
2177
2354
  children
2178
2355
  }) => {
2179
- const items = import_react2.default.Children.toArray(children);
2356
+ const items = import_react9.default.Children.toArray(children);
2180
2357
  const first = items[0] ?? null;
2181
2358
  const second = items[1] ?? null;
2182
2359
  const isVertical = orientation === "vertical";
2183
2360
  const flexDirection = isVertical ? "row" : "column";
2184
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_remotion33.AbsoluteFill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { style: { display: "flex", flexDirection, gap, width: "100%", height: "100%" }, children: [
2185
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { style: { flex: split, position: "relative" }, children: first }),
2186
- dividerColor ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2361
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Fill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { style: { display: "flex", flexDirection, gap, width: "100%", height: "100%" }, children: [
2362
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { style: { flex: split, position: "relative" }, children: first }),
2363
+ dividerColor ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2187
2364
  "div",
2188
2365
  {
2189
2366
  style: {
@@ -2194,7 +2371,7 @@ var SplitScreen = ({
2194
2371
  }
2195
2372
  }
2196
2373
  ) : null,
2197
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { style: { flex: 1 - split, position: "relative" }, children: second })
2374
+ /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { style: { flex: 1 - split, position: "relative" }, children: second })
2198
2375
  ] }) });
2199
2376
  };
2200
2377
  var SplitScreenComponentMetadata = {
@@ -2208,22 +2385,25 @@ var SplitScreenComponentMetadata = {
2208
2385
  };
2209
2386
 
2210
2387
  // src/components/composites/SplitText.tsx
2211
- var import_remotion34 = require("remotion");
2212
- var import_zod37 = require("zod");
2213
- var import_jsx_runtime36 = require("react/jsx-runtime");
2214
- var SplitTextPropsSchema = import_zod37.z.object({
2215
- content: import_zod37.z.string().max(200),
2216
- fontSize: import_zod37.z.number().min(8).max(200).default(48),
2217
- color: import_zod37.z.string().default("#FFFFFF"),
2218
- fontFamily: import_zod37.z.string().default("Inter"),
2219
- position: import_zod37.z.enum(["top", "center", "bottom"]).default("center"),
2220
- splitBy: import_zod37.z.enum(["word", "letter"]).default("word"),
2221
- stagger: import_zod37.z.number().int().min(1).max(10).default(3),
2222
- animation: import_zod37.z.enum(["fade", "slideUp", "slideDown", "scale", "rotate"]).default("slideUp")
2388
+ var import_remotion30 = require("remotion");
2389
+ var import_zod40 = require("zod");
2390
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2391
+ var SplitTextPropsSchema = import_zod40.z.object({
2392
+ content: import_zod40.z.string().max(200),
2393
+ fontSize: import_zod40.z.number().min(8).max(200).default(48),
2394
+ color: import_zod40.z.string().default("#FFFFFF"),
2395
+ fontFamily: import_zod40.z.string().default("Inter"),
2396
+ position: import_zod40.z.enum(["top", "center", "bottom"]).default("center"),
2397
+ splitBy: import_zod40.z.enum(["word", "letter"]).default("word"),
2398
+ stagger: import_zod40.z.number().int().min(1).max(10).default(3),
2399
+ animation: import_zod40.z.enum(["fade", "slideUp", "slideDown", "scale", "rotate"]).default("slideUp"),
2400
+ maxWidthPct: import_zod40.z.number().min(0.1).max(1).default(0.9),
2401
+ safeInsetPct: import_zod40.z.number().min(0).max(0.25).default(0.06)
2223
2402
  });
2224
- var positionStyles4 = (position) => {
2225
- if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 80 };
2226
- if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: 80 };
2403
+ var positionStyles4 = (position, safeInsetPct) => {
2404
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
2405
+ if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: inset };
2406
+ if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: inset };
2227
2407
  return { justifyContent: "center", alignItems: "center" };
2228
2408
  };
2229
2409
  function getItemStyle(progress, animation) {
@@ -2250,12 +2430,14 @@ var SplitText = ({
2250
2430
  position,
2251
2431
  splitBy,
2252
2432
  stagger,
2253
- animation
2433
+ animation,
2434
+ maxWidthPct,
2435
+ safeInsetPct
2254
2436
  }) => {
2255
- const frame = (0, import_remotion34.useCurrentFrame)();
2256
- const { fps } = (0, import_remotion34.useVideoConfig)();
2437
+ const frame = (0, import_remotion30.useCurrentFrame)();
2438
+ const { fps } = (0, import_remotion30.useVideoConfig)();
2257
2439
  const items = splitBy === "letter" ? content.split("") : content.trim().split(/\s+/);
2258
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_remotion34.AbsoluteFill, { style: { display: "flex", ...positionStyles4(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2440
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Fill, { style: { display: "flex", ...positionStyles4(position, safeInsetPct) }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2259
2441
  "div",
2260
2442
  {
2261
2443
  style: {
@@ -2263,19 +2445,22 @@ var SplitText = ({
2263
2445
  flexWrap: "wrap",
2264
2446
  justifyContent: "center",
2265
2447
  gap: splitBy === "letter" ? 0 : 12,
2448
+ maxWidth: `${Math.round(maxWidthPct * 100)}%`,
2266
2449
  fontSize,
2267
2450
  color,
2268
2451
  fontFamily,
2269
2452
  fontWeight: 700,
2270
- textAlign: "center"
2453
+ textAlign: "center",
2454
+ overflowWrap: "anywhere",
2455
+ wordBreak: "break-word"
2271
2456
  },
2272
2457
  children: items.map((t, i) => {
2273
- const progress = (0, import_remotion34.spring)({
2458
+ const progress = (0, import_remotion30.spring)({
2274
2459
  frame: frame - i * stagger,
2275
2460
  fps,
2276
2461
  config: { damping: 14, stiffness: 120, mass: 0.9 }
2277
2462
  });
2278
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2463
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2279
2464
  "span",
2280
2465
  {
2281
2466
  style: {
@@ -2303,19 +2488,19 @@ var SplitTextComponentMetadata = {
2303
2488
  };
2304
2489
 
2305
2490
  // src/components/composites/SubtitleText.tsx
2306
- var import_remotion35 = require("remotion");
2307
- var import_zod38 = require("zod");
2308
- var import_jsx_runtime37 = require("react/jsx-runtime");
2309
- var SubtitleTextPropsSchema = import_zod38.z.object({
2310
- text: import_zod38.z.string().max(200),
2311
- fontSize: import_zod38.z.number().min(12).max(80).default(36),
2312
- color: import_zod38.z.string().default("#FFFFFF"),
2313
- backgroundColor: import_zod38.z.string().default("rgba(0,0,0,0.7)"),
2314
- fontFamily: import_zod38.z.string().default("Inter"),
2315
- position: import_zod38.z.enum(["top", "bottom"]).default("bottom"),
2316
- maxWidth: import_zod38.z.number().min(200).max(1200).default(800),
2317
- padding: import_zod38.z.number().min(0).max(80).default(20),
2318
- highlightWords: import_zod38.z.array(import_zod38.z.string()).optional()
2491
+ var import_remotion31 = require("remotion");
2492
+ var import_zod41 = require("zod");
2493
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2494
+ var SubtitleTextPropsSchema = import_zod41.z.object({
2495
+ text: import_zod41.z.string().max(200),
2496
+ fontSize: import_zod41.z.number().min(12).max(80).default(36),
2497
+ color: import_zod41.z.string().default("#FFFFFF"),
2498
+ backgroundColor: import_zod41.z.string().default("rgba(0,0,0,0.7)"),
2499
+ fontFamily: import_zod41.z.string().default("Inter"),
2500
+ position: import_zod41.z.enum(["top", "bottom"]).default("bottom"),
2501
+ maxWidth: import_zod41.z.number().min(200).max(1200).default(800),
2502
+ padding: import_zod41.z.number().min(0).max(80).default(20),
2503
+ highlightWords: import_zod41.z.array(import_zod41.z.string()).optional()
2319
2504
  });
2320
2505
  function normalizeWord(w) {
2321
2506
  return w.toLowerCase().replace(/[^a-z0-9]/g, "");
@@ -2332,15 +2517,15 @@ var SubtitleText = ({
2332
2517
  highlightWords,
2333
2518
  __wavesDurationInFrames
2334
2519
  }) => {
2335
- const frame = (0, import_remotion35.useCurrentFrame)();
2520
+ const frame = (0, import_remotion31.useCurrentFrame)();
2336
2521
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2337
- const inFade = (0, import_remotion35.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2338
- const outFade = (0, import_remotion35.interpolate)(frame, [Math.max(0, total - 10), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2522
+ const inFade = (0, import_remotion31.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2523
+ const outFade = (0, import_remotion31.interpolate)(frame, [Math.max(0, total - 10), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2339
2524
  const opacity = inFade * outFade;
2340
2525
  const highlights = new Set((highlightWords ?? []).map(normalizeWord));
2341
2526
  const tokens = text.split(/\s+/);
2342
2527
  const yStyle = position === "top" ? { top: 70 } : { bottom: 90 };
2343
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_remotion35.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { style: { position: "absolute", left: "50%", transform: "translateX(-50%)", maxWidth, width: "100%", ...yStyle }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2528
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { style: { position: "absolute", left: "50%", transform: "translateX(-50%)", maxWidth, width: "100%", ...yStyle }, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2344
2529
  "div",
2345
2530
  {
2346
2531
  style: {
@@ -2359,7 +2544,7 @@ var SubtitleText = ({
2359
2544
  children: tokens.map((t, i) => {
2360
2545
  const n = normalizeWord(t);
2361
2546
  const isHighlighted = highlights.has(n);
2362
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { style: { color: isHighlighted ? "#FFD60A" : color, marginRight: 8 }, children: t }, i);
2547
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { style: { color: isHighlighted ? "#FFD60A" : color, marginRight: 8 }, children: t }, i);
2363
2548
  })
2364
2549
  }
2365
2550
  ) }) });
@@ -2372,17 +2557,19 @@ var SubtitleTextComponentMetadata = {
2372
2557
  };
2373
2558
 
2374
2559
  // src/components/composites/TikTokCaption.tsx
2375
- var import_remotion36 = require("remotion");
2376
- var import_zod39 = require("zod");
2377
- var import_jsx_runtime38 = require("react/jsx-runtime");
2378
- var TikTokCaptionPropsSchema = import_zod39.z.object({
2379
- text: import_zod39.z.string().max(150),
2380
- fontSize: import_zod39.z.number().min(12).max(120).default(48),
2381
- color: import_zod39.z.string().default("#FFFFFF"),
2382
- strokeColor: import_zod39.z.string().default("#000000"),
2383
- strokeWidth: import_zod39.z.number().min(0).max(10).default(3),
2384
- position: import_zod39.z.enum(["center", "bottom"]).default("center"),
2385
- highlightStyle: import_zod39.z.enum(["word", "bounce", "none"]).default("word")
2560
+ var import_remotion32 = require("remotion");
2561
+ var import_zod42 = require("zod");
2562
+ var import_jsx_runtime42 = require("react/jsx-runtime");
2563
+ var TikTokCaptionPropsSchema = import_zod42.z.object({
2564
+ text: import_zod42.z.string().max(150),
2565
+ fontSize: import_zod42.z.number().min(12).max(120).default(48),
2566
+ color: import_zod42.z.string().default("#FFFFFF"),
2567
+ strokeColor: import_zod42.z.string().default("#000000"),
2568
+ strokeWidth: import_zod42.z.number().min(0).max(10).default(3),
2569
+ position: import_zod42.z.enum(["center", "bottom"]).default("center"),
2570
+ highlightStyle: import_zod42.z.enum(["word", "bounce", "none"]).default("word"),
2571
+ maxWidthPct: import_zod42.z.number().min(0.1).max(1).default(0.92),
2572
+ safeInsetPct: import_zod42.z.number().min(0).max(0.25).default(0.06)
2386
2573
  });
2387
2574
  var TikTokCaption = ({
2388
2575
  text,
@@ -2392,18 +2579,21 @@ var TikTokCaption = ({
2392
2579
  strokeWidth,
2393
2580
  position,
2394
2581
  highlightStyle,
2582
+ maxWidthPct,
2583
+ safeInsetPct,
2395
2584
  __wavesDurationInFrames
2396
2585
  }) => {
2397
- const frame = (0, import_remotion36.useCurrentFrame)();
2586
+ const frame = (0, import_remotion32.useCurrentFrame)();
2398
2587
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2399
- const p = (0, import_remotion36.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2588
+ const p = (0, import_remotion32.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2400
2589
  const words = text.trim().split(/\s+/);
2401
2590
  const idx = highlightStyle === "none" ? -1 : Math.min(words.length - 1, Math.floor(p * words.length));
2402
- const yStyle = position === "bottom" ? { alignItems: "flex-end", paddingBottom: 140 } : { alignItems: "center" };
2403
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_remotion36.AbsoluteFill, { style: { display: "flex", justifyContent: "center", ...yStyle }, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { textAlign: "center", padding: "0 80px", fontWeight: 900, lineHeight: 1.1 }, children: words.map((w, i) => {
2591
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
2592
+ const yStyle = position === "bottom" ? { alignItems: "flex-end", paddingBottom: inset } : { alignItems: "center" };
2593
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Fill, { style: { display: "flex", justifyContent: "center", ...yStyle }, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { style: { textAlign: "center", paddingLeft: inset, paddingRight: inset, maxWidth: `${Math.round(maxWidthPct * 100)}%`, fontWeight: 900, lineHeight: 1.1, overflowWrap: "anywhere", wordBreak: "break-word" }, children: words.map((w, i) => {
2404
2594
  const isActive = i === idx && highlightStyle !== "none";
2405
- const bounce = isActive && highlightStyle === "bounce" ? (0, import_remotion36.interpolate)(frame % 18, [0, 9, 18], [1, 1.08, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" }) : 1;
2406
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2595
+ const bounce = isActive && highlightStyle === "bounce" ? (0, import_remotion32.interpolate)(frame % 18, [0, 9, 18], [1, 1.08, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" }) : 1;
2596
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2407
2597
  "span",
2408
2598
  {
2409
2599
  style: {
@@ -2428,20 +2618,20 @@ var TikTokCaptionComponentMetadata = {
2428
2618
  };
2429
2619
 
2430
2620
  // src/components/composites/ThirdLowerBanner.tsx
2431
- var import_remotion37 = require("remotion");
2432
- var import_zod40 = require("zod");
2433
- var import_jsx_runtime39 = require("react/jsx-runtime");
2434
- var ThirdLowerBannerPropsSchema = import_zod40.z.object({
2435
- name: import_zod40.z.string().max(50),
2436
- title: import_zod40.z.string().max(100),
2437
- backgroundColor: import_zod40.z.string().default("rgba(0,0,0,0.8)"),
2438
- primaryColor: import_zod40.z.string().default("#FFFFFF"),
2439
- secondaryColor: import_zod40.z.string().default("#CCCCCC"),
2440
- accentColor: import_zod40.z.string().default("#FF0000"),
2441
- showAvatar: import_zod40.z.boolean().default(false),
2442
- avatarSrc: import_zod40.z.string().optional()
2621
+ var import_remotion33 = require("remotion");
2622
+ var import_zod43 = require("zod");
2623
+ var import_jsx_runtime43 = require("react/jsx-runtime");
2624
+ var ThirdLowerBannerPropsSchema = import_zod43.z.object({
2625
+ name: import_zod43.z.string().max(50),
2626
+ title: import_zod43.z.string().max(100),
2627
+ backgroundColor: import_zod43.z.string().default("rgba(0,0,0,0.8)"),
2628
+ primaryColor: import_zod43.z.string().default("#FFFFFF"),
2629
+ secondaryColor: import_zod43.z.string().default("#CCCCCC"),
2630
+ accentColor: import_zod43.z.string().default("#FF0000"),
2631
+ showAvatar: import_zod43.z.boolean().default(false),
2632
+ avatarSrc: import_zod43.z.string().optional()
2443
2633
  });
2444
- var resolveAsset13 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion37.staticFile)(staticFileInputFromAssetPath(value));
2634
+ var resolveAsset13 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion33.staticFile)(staticFileInputFromAssetPath(value));
2445
2635
  var ThirdLowerBanner = ({
2446
2636
  name,
2447
2637
  title,
@@ -2452,11 +2642,11 @@ var ThirdLowerBanner = ({
2452
2642
  showAvatar,
2453
2643
  avatarSrc
2454
2644
  }) => {
2455
- const frame = (0, import_remotion37.useCurrentFrame)();
2456
- const slide = (0, import_remotion37.interpolate)(frame, [0, 18], [-600, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2457
- const opacity = (0, import_remotion37.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2645
+ const frame = (0, import_remotion33.useCurrentFrame)();
2646
+ const slide = (0, import_remotion33.interpolate)(frame, [0, 18], [-600, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2647
+ const opacity = (0, import_remotion33.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2458
2648
  const avatar = showAvatar && typeof avatarSrc === "string" && avatarSrc.length > 0 ? avatarSrc : null;
2459
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_remotion37.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(
2649
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(
2460
2650
  "div",
2461
2651
  {
2462
2652
  style: {
@@ -2473,17 +2663,17 @@ var ThirdLowerBanner = ({
2473
2663
  backgroundColor
2474
2664
  },
2475
2665
  children: [
2476
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { style: { width: 10, backgroundColor: accentColor } }),
2477
- avatar ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { style: { width: 160, display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2478
- import_remotion37.Img,
2666
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { style: { width: 10, backgroundColor: accentColor } }),
2667
+ avatar ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { style: { width: 160, display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2668
+ import_remotion33.Img,
2479
2669
  {
2480
2670
  src: resolveAsset13(avatar),
2481
2671
  style: { width: 110, height: 110, borderRadius: 9999, objectFit: "cover" }
2482
2672
  }
2483
2673
  ) }) : null,
2484
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { style: { padding: "28px 36px", display: "flex", flexDirection: "column", justifyContent: "center" }, children: [
2485
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { style: { color: primaryColor, fontSize: 54, fontWeight: 800, lineHeight: 1 }, children: name }),
2486
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { style: { marginTop: 10, color: secondaryColor, fontSize: 28, fontWeight: 600 }, children: title })
2674
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { style: { padding: "28px 36px", display: "flex", flexDirection: "column", justifyContent: "center" }, children: [
2675
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { style: { color: primaryColor, fontSize: 54, fontWeight: 800, lineHeight: 1 }, children: name }),
2676
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { style: { marginTop: 10, color: secondaryColor, fontSize: 28, fontWeight: 600 }, children: title })
2487
2677
  ] })
2488
2678
  ]
2489
2679
  }
@@ -2501,22 +2691,25 @@ var ThirdLowerBannerComponentMetadata = {
2501
2691
  };
2502
2692
 
2503
2693
  // src/components/composites/TypewriterText.tsx
2504
- var import_remotion38 = require("remotion");
2505
- var import_zod41 = require("zod");
2506
- var import_jsx_runtime40 = require("react/jsx-runtime");
2507
- var TypewriterTextPropsSchema = import_zod41.z.object({
2508
- content: import_zod41.z.string().max(500),
2509
- fontSize: import_zod41.z.number().min(8).max(200).default(48),
2510
- color: import_zod41.z.string().default("#FFFFFF"),
2511
- fontFamily: import_zod41.z.string().default("Inter"),
2512
- position: import_zod41.z.enum(["top", "center", "bottom"]).default("center"),
2513
- speed: import_zod41.z.number().min(0.5).max(5).default(2),
2514
- showCursor: import_zod41.z.boolean().default(true),
2515
- cursorColor: import_zod41.z.string().default("#FFFFFF")
2694
+ var import_remotion34 = require("remotion");
2695
+ var import_zod44 = require("zod");
2696
+ var import_jsx_runtime44 = require("react/jsx-runtime");
2697
+ var TypewriterTextPropsSchema = import_zod44.z.object({
2698
+ content: import_zod44.z.string().max(500),
2699
+ fontSize: import_zod44.z.number().min(8).max(200).default(48),
2700
+ color: import_zod44.z.string().default("#FFFFFF"),
2701
+ fontFamily: import_zod44.z.string().default("Inter"),
2702
+ position: import_zod44.z.enum(["top", "center", "bottom"]).default("center"),
2703
+ speed: import_zod44.z.number().min(0.5).max(5).default(2),
2704
+ showCursor: import_zod44.z.boolean().default(true),
2705
+ cursorColor: import_zod44.z.string().default("#FFFFFF"),
2706
+ maxWidthPct: import_zod44.z.number().min(0.1).max(1).default(0.9),
2707
+ safeInsetPct: import_zod44.z.number().min(0).max(0.25).default(0.06)
2516
2708
  });
2517
- var positionStyles5 = (position) => {
2518
- if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 80 };
2519
- if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: 80 };
2709
+ var positionStyles5 = (position, safeInsetPct) => {
2710
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
2711
+ if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: inset };
2712
+ if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: inset };
2520
2713
  return { justifyContent: "center", alignItems: "center" };
2521
2714
  };
2522
2715
  var TypewriterText = ({
@@ -2527,17 +2720,19 @@ var TypewriterText = ({
2527
2720
  position,
2528
2721
  speed,
2529
2722
  showCursor,
2530
- cursorColor
2723
+ cursorColor,
2724
+ maxWidthPct,
2725
+ safeInsetPct
2531
2726
  }) => {
2532
- const frame = (0, import_remotion38.useCurrentFrame)();
2727
+ const frame = (0, import_remotion34.useCurrentFrame)();
2533
2728
  const charCount = Math.min(content.length, Math.max(0, Math.floor(frame * speed)));
2534
2729
  const shown = content.slice(0, charCount);
2535
2730
  const cursorVisible = showCursor && charCount < content.length ? frame % 30 < 15 : false;
2536
2731
  const cursorOpacity = cursorVisible ? 1 : 0;
2537
- const cursorFade = (0, import_remotion38.interpolate)(frame % 30, [0, 5], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2538
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_remotion38.AbsoluteFill, { style: { display: "flex", ...positionStyles5(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { style: { fontSize, color, fontFamily, fontWeight: 600, textAlign: "center", whiteSpace: "pre-wrap" }, children: [
2732
+ const cursorFade = (0, import_remotion34.interpolate)(frame % 30, [0, 5], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2733
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Fill, { style: { display: "flex", ...positionStyles5(position, safeInsetPct) }, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { style: { fontSize, color, fontFamily, fontWeight: 600, textAlign: "center", whiteSpace: "pre-wrap", maxWidth: `${Math.round(maxWidthPct * 100)}%`, overflowWrap: "anywhere", wordBreak: "break-word" }, children: [
2539
2734
  shown,
2540
- showCursor ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { style: { color: cursorColor, opacity: cursorOpacity * cursorFade }, children: "|" }) : null
2735
+ showCursor ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { style: { color: cursorColor, opacity: cursorOpacity * cursorFade }, children: "|" }) : null
2541
2736
  ] }) });
2542
2737
  };
2543
2738
  var TypewriterTextComponentMetadata = {
@@ -2552,21 +2747,21 @@ var TypewriterTextComponentMetadata = {
2552
2747
  };
2553
2748
 
2554
2749
  // src/components/composites/TwitterCard.tsx
2555
- var import_remotion39 = require("remotion");
2556
- var import_zod42 = require("zod");
2557
- var import_jsx_runtime41 = require("react/jsx-runtime");
2558
- var TwitterCardPropsSchema = import_zod42.z.object({
2559
- author: import_zod42.z.string().min(1),
2560
- handle: import_zod42.z.string().min(1),
2561
- avatarSrc: import_zod42.z.string().optional(),
2562
- tweet: import_zod42.z.string().max(280),
2563
- image: import_zod42.z.string().optional(),
2564
- timestamp: import_zod42.z.string().optional(),
2565
- verified: import_zod42.z.boolean().default(false)
2750
+ var import_remotion35 = require("remotion");
2751
+ var import_zod45 = require("zod");
2752
+ var import_jsx_runtime45 = require("react/jsx-runtime");
2753
+ var TwitterCardPropsSchema = import_zod45.z.object({
2754
+ author: import_zod45.z.string().min(1),
2755
+ handle: import_zod45.z.string().min(1),
2756
+ avatarSrc: import_zod45.z.string().optional(),
2757
+ tweet: import_zod45.z.string().max(280),
2758
+ image: import_zod45.z.string().optional(),
2759
+ timestamp: import_zod45.z.string().optional(),
2760
+ verified: import_zod45.z.boolean().default(false)
2566
2761
  });
2567
- var resolveAsset14 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion39.staticFile)(staticFileInputFromAssetPath(value));
2762
+ var resolveAsset14 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion35.staticFile)(staticFileInputFromAssetPath(value));
2568
2763
  var TwitterCard = ({ author, handle, avatarSrc, tweet, image, timestamp, verified }) => {
2569
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_remotion39.AbsoluteFill, { style: { backgroundColor: "#0B0F14", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
2764
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Fill, { style: { backgroundColor: "#0B0F14", display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(
2570
2765
  "div",
2571
2766
  {
2572
2767
  style: {
@@ -2578,19 +2773,19 @@ var TwitterCard = ({ author, handle, avatarSrc, tweet, image, timestamp, verifie
2578
2773
  boxShadow: "0 30px 90px rgba(0,0,0,0.35)"
2579
2774
  },
2580
2775
  children: [
2581
- /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { style: { display: "flex", gap: 18, alignItems: "center" }, children: [
2582
- avatarSrc ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_remotion39.Img, { src: resolveAsset14(avatarSrc), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "#E5E7EB" } }),
2583
- /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { style: { display: "flex", flexDirection: "column" }, children: [
2584
- /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { style: { display: "flex", gap: 10, alignItems: "center" }, children: [
2585
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { style: { fontSize: 34, fontWeight: 900, color: "#111827" }, children: author }),
2586
- verified ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { style: { fontSize: 26, color: "#1D9BF0", fontWeight: 900 }, children: "\u2713" }) : null
2776
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { style: { display: "flex", gap: 18, alignItems: "center" }, children: [
2777
+ avatarSrc ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_remotion35.Img, { src: resolveAsset14(avatarSrc), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "#E5E7EB" } }),
2778
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { style: { display: "flex", flexDirection: "column" }, children: [
2779
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { style: { display: "flex", gap: 10, alignItems: "center" }, children: [
2780
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { style: { fontSize: 34, fontWeight: 900, color: "#111827" }, children: author }),
2781
+ verified ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { style: { fontSize: 26, color: "#1D9BF0", fontWeight: 900 }, children: "\u2713" }) : null
2587
2782
  ] }),
2588
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { style: { fontSize: 26, color: "#6B7280", fontWeight: 800 }, children: handle })
2783
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { style: { fontSize: 26, color: "#6B7280", fontWeight: 800 }, children: handle })
2589
2784
  ] })
2590
2785
  ] }),
2591
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { style: { marginTop: 28, fontSize: 36, lineHeight: 1.25, color: "#111827", fontWeight: 700 }, children: tweet }),
2592
- image ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { style: { marginTop: 28, width: "100%", height: 520, overflow: "hidden", borderRadius: 22, backgroundColor: "#F3F4F6" }, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_remotion39.Img, { src: resolveAsset14(image), style: { width: "100%", height: "100%", objectFit: "cover" } }) }) : null,
2593
- timestamp ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { style: { marginTop: 22, fontSize: 22, color: "#6B7280", fontWeight: 700 }, children: timestamp }) : null
2786
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { style: { marginTop: 28, fontSize: 36, lineHeight: 1.25, color: "#111827", fontWeight: 700 }, children: tweet }),
2787
+ image ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { style: { marginTop: 28, width: "100%", height: 520, overflow: "hidden", borderRadius: 22, backgroundColor: "#F3F4F6" }, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_remotion35.Img, { src: resolveAsset14(image), style: { width: "100%", height: "100%", objectFit: "cover" } }) }) : null,
2788
+ timestamp ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { style: { marginTop: 22, fontSize: 22, color: "#6B7280", fontWeight: 700 }, children: timestamp }) : null
2594
2789
  ]
2595
2790
  }
2596
2791
  ) });
@@ -2603,19 +2798,19 @@ var TwitterCardComponentMetadata = {
2603
2798
  };
2604
2799
 
2605
2800
  // src/components/composites/Watermark.tsx
2606
- var import_remotion40 = require("remotion");
2607
- var import_zod43 = require("zod");
2608
- var import_jsx_runtime42 = require("react/jsx-runtime");
2609
- var WatermarkPropsSchema = import_zod43.z.object({
2610
- type: import_zod43.z.enum(["logo", "text"]).default("logo"),
2611
- src: import_zod43.z.string().optional(),
2612
- text: import_zod43.z.string().optional(),
2613
- position: import_zod43.z.enum(["topLeft", "topRight", "bottomLeft", "bottomRight"]).default("bottomRight"),
2614
- opacity: import_zod43.z.number().min(0.1).max(1).default(0.5),
2615
- size: import_zod43.z.number().min(30).max(150).default(60),
2616
- color: import_zod43.z.string().default("#FFFFFF")
2801
+ var import_remotion36 = require("remotion");
2802
+ var import_zod46 = require("zod");
2803
+ var import_jsx_runtime46 = require("react/jsx-runtime");
2804
+ var WatermarkPropsSchema = import_zod46.z.object({
2805
+ type: import_zod46.z.enum(["logo", "text"]).default("logo"),
2806
+ src: import_zod46.z.string().optional(),
2807
+ text: import_zod46.z.string().optional(),
2808
+ position: import_zod46.z.enum(["topLeft", "topRight", "bottomLeft", "bottomRight"]).default("bottomRight"),
2809
+ opacity: import_zod46.z.number().min(0.1).max(1).default(0.5),
2810
+ size: import_zod46.z.number().min(30).max(150).default(60),
2811
+ color: import_zod46.z.string().default("#FFFFFF")
2617
2812
  });
2618
- var resolveAsset15 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion40.staticFile)(staticFileInputFromAssetPath(value));
2813
+ var resolveAsset15 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion36.staticFile)(staticFileInputFromAssetPath(value));
2619
2814
  function posStyle(position) {
2620
2815
  const offset = 30;
2621
2816
  if (position === "topLeft") return { left: offset, top: offset };
@@ -2630,8 +2825,8 @@ var Watermark = ({ type, src, text, position, opacity, size, color }) => {
2630
2825
  opacity,
2631
2826
  pointerEvents: "none"
2632
2827
  };
2633
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_remotion40.AbsoluteFill, { children: type === "text" ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { style: { ...style, fontSize: Math.round(size * 0.6), color, fontWeight: 700 }, children: text ?? "" }) : src ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2634
- import_remotion40.Img,
2828
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Fill, { children: type === "text" ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { style: { ...style, fontSize: Math.round(size * 0.6), color, fontWeight: 700 }, children: text ?? "" }) : src ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2829
+ import_remotion36.Img,
2635
2830
  {
2636
2831
  src: resolveAsset15(src),
2637
2832
  style: { ...style, width: size, height: size, objectFit: "contain" }
@@ -2645,19 +2840,20 @@ var WatermarkComponentMetadata = {
2645
2840
  llmGuidance: "Use subtle opacity (0.3-0.6). bottomRight is standard.",
2646
2841
  examples: [
2647
2842
  { type: "text", text: "@depths.ai", position: "bottomRight", opacity: 0.4, size: 60 },
2648
- { type: "logo", src: "/assets/logo.png", position: "topLeft", opacity: 0.5, size: 70 }
2843
+ { type: "logo", src: "/assets/logo.svg", position: "topLeft", opacity: 0.5, size: 70 }
2649
2844
  ]
2650
2845
  };
2651
2846
 
2652
2847
  // src/components/composites/WipeTransition.tsx
2653
- var import_remotion41 = require("remotion");
2654
- var import_zod44 = require("zod");
2655
- var import_jsx_runtime43 = require("react/jsx-runtime");
2656
- var WipeTransitionPropsSchema = import_zod44.z.object({
2657
- durationInFrames: import_zod44.z.number().int().min(10).max(60).default(30),
2658
- direction: import_zod44.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
2659
- softEdge: import_zod44.z.boolean().default(false),
2660
- phase: import_zod44.z.enum(["in", "out", "inOut"]).default("inOut")
2848
+ var import_react10 = __toESM(require("react"));
2849
+ var import_remotion37 = require("remotion");
2850
+ var import_zod47 = require("zod");
2851
+ var import_jsx_runtime47 = require("react/jsx-runtime");
2852
+ var WipeTransitionPropsSchema = import_zod47.z.object({
2853
+ durationInFrames: import_zod47.z.number().int().min(10).max(60).default(30),
2854
+ direction: import_zod47.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
2855
+ softEdge: import_zod47.z.boolean().default(false),
2856
+ phase: import_zod47.z.enum(["in", "out", "inOut"]).default("inOut")
2661
2857
  });
2662
2858
  function clipFor2(direction, p) {
2663
2859
  if (direction === "left") return `inset(0 ${100 * (1 - p)}% 0 0)`;
@@ -2674,20 +2870,21 @@ var WipeTransition = ({
2674
2870
  children,
2675
2871
  __wavesDurationInFrames
2676
2872
  }) => {
2677
- const frame = (0, import_remotion41.useCurrentFrame)();
2873
+ const layers = import_react10.default.Children.toArray(children);
2874
+ const frame = (0, import_remotion37.useCurrentFrame)();
2678
2875
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2679
2876
  const d = Math.min(durationInFrames, total);
2680
2877
  let clipPath;
2681
2878
  if (phase === "in" || phase === "inOut") {
2682
- const t = (0, import_remotion41.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2879
+ const t = (0, import_remotion37.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2683
2880
  clipPath = clipFor2(direction, t);
2684
2881
  }
2685
2882
  if (phase === "out" || phase === "inOut") {
2686
2883
  const start = Math.max(0, total - d);
2687
- const t = (0, import_remotion41.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2884
+ const t = (0, import_remotion37.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2688
2885
  clipPath = clipFor2(direction, t);
2689
2886
  }
2690
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_remotion41.AbsoluteFill, { style: { clipPath, filter: softEdge ? "blur(0.4px)" : void 0 }, children });
2887
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Fill, { style: { clipPath, filter: softEdge ? "blur(0.4px)" : void 0 }, children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
2691
2888
  };
2692
2889
  var WipeTransitionComponentMetadata = {
2693
2890
  kind: "composite",
@@ -2699,18 +2896,18 @@ var WipeTransitionComponentMetadata = {
2699
2896
  };
2700
2897
 
2701
2898
  // src/components/composites/YouTubeThumbnail.tsx
2702
- var import_remotion42 = require("remotion");
2703
- var import_zod45 = require("zod");
2704
- var import_jsx_runtime44 = require("react/jsx-runtime");
2705
- var YouTubeThumbnailPropsSchema = import_zod45.z.object({
2706
- backgroundImage: import_zod45.z.string().min(1),
2707
- title: import_zod45.z.string().max(60),
2708
- subtitle: import_zod45.z.string().max(40).optional(),
2709
- thumbnailFace: import_zod45.z.string().optional(),
2710
- accentColor: import_zod45.z.string().default("#FF0000"),
2711
- style: import_zod45.z.enum(["bold", "minimal", "dramatic"]).default("bold")
2899
+ var import_remotion38 = require("remotion");
2900
+ var import_zod48 = require("zod");
2901
+ var import_jsx_runtime48 = require("react/jsx-runtime");
2902
+ var YouTubeThumbnailPropsSchema = import_zod48.z.object({
2903
+ backgroundImage: import_zod48.z.string().min(1),
2904
+ title: import_zod48.z.string().max(60),
2905
+ subtitle: import_zod48.z.string().max(40).optional(),
2906
+ thumbnailFace: import_zod48.z.string().optional(),
2907
+ accentColor: import_zod48.z.string().default("#FF0000"),
2908
+ style: import_zod48.z.enum(["bold", "minimal", "dramatic"]).default("bold")
2712
2909
  });
2713
- var resolveAsset16 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion42.staticFile)(staticFileInputFromAssetPath(value));
2910
+ var resolveAsset16 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion38.staticFile)(staticFileInputFromAssetPath(value));
2714
2911
  var YouTubeThumbnail = ({
2715
2912
  backgroundImage,
2716
2913
  title,
@@ -2719,18 +2916,18 @@ var YouTubeThumbnail = ({
2719
2916
  accentColor,
2720
2917
  style
2721
2918
  }) => {
2722
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_remotion42.AbsoluteFill, { children: [
2723
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_remotion42.Img, { src: resolveAsset16(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover" } }),
2724
- style === "dramatic" ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_remotion42.AbsoluteFill, { style: { backgroundColor: "rgba(0,0,0,0.35)" } }) : null,
2725
- thumbnailFace ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2726
- import_remotion42.Img,
2919
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Fill, { children: [
2920
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_remotion38.Img, { src: resolveAsset16(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover" } }),
2921
+ style === "dramatic" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { style: { position: "absolute", inset: 0, backgroundColor: "rgba(0,0,0,0.35)" } }) : null,
2922
+ thumbnailFace ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2923
+ import_remotion38.Img,
2727
2924
  {
2728
2925
  src: resolveAsset16(thumbnailFace),
2729
2926
  style: { position: "absolute", right: 60, bottom: 0, width: 520, height: 720, objectFit: "cover" }
2730
2927
  }
2731
2928
  ) : null,
2732
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { style: { position: "absolute", left: 70, top: 90, width: 1100 }, children: [
2733
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2929
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { style: { position: "absolute", left: 70, top: 90, width: 1100 }, children: [
2930
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2734
2931
  "div",
2735
2932
  {
2736
2933
  style: {
@@ -2745,9 +2942,9 @@ var YouTubeThumbnail = ({
2745
2942
  children: title
2746
2943
  }
2747
2944
  ),
2748
- subtitle ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { marginTop: 26, fontSize: 52, fontWeight: 900, color: accentColor, textShadow: "0 10px 30px rgba(0,0,0,0.6)" }, children: subtitle }) : null
2945
+ subtitle ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { style: { marginTop: 26, fontSize: 52, fontWeight: 900, color: accentColor, textShadow: "0 10px 30px rgba(0,0,0,0.6)" }, children: subtitle }) : null
2749
2946
  ] }),
2750
- style !== "minimal" ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { position: "absolute", left: 70, bottom: 80, width: 260, height: 18, backgroundColor: accentColor, borderRadius: 9999 } }) : null
2947
+ style !== "minimal" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { style: { position: "absolute", left: 70, bottom: 80, width: 260, height: 18, backgroundColor: accentColor, borderRadius: 9999 } }) : null
2751
2948
  ] });
2752
2949
  };
2753
2950
  var YouTubeThumbnailComponentMetadata = {
@@ -2758,37 +2955,39 @@ var YouTubeThumbnailComponentMetadata = {
2758
2955
  };
2759
2956
 
2760
2957
  // src/components/composites/VideoWithOverlay.tsx
2761
- var import_remotion43 = require("remotion");
2762
- var import_zod46 = require("zod");
2763
- var import_jsx_runtime45 = require("react/jsx-runtime");
2764
- var OverlaySchema = import_zod46.z.object({
2765
- type: import_zod46.z.enum(["text", "logo", "gradient"]),
2766
- content: import_zod46.z.string().optional(),
2767
- opacity: import_zod46.z.number().min(0).max(1).default(0.3),
2768
- position: import_zod46.z.enum(["top", "bottom", "center", "full"]).default("bottom")
2958
+ var import_remotion39 = require("remotion");
2959
+ var import_zod49 = require("zod");
2960
+ var import_jsx_runtime49 = require("react/jsx-runtime");
2961
+ var OverlaySchema = import_zod49.z.object({
2962
+ type: import_zod49.z.enum(["text", "logo", "gradient"]),
2963
+ content: import_zod49.z.string().optional(),
2964
+ opacity: import_zod49.z.number().min(0).max(1).default(0.3),
2965
+ position: import_zod49.z.enum(["top", "bottom", "center", "full"]).default("bottom")
2769
2966
  });
2770
- var VideoWithOverlayPropsSchema = import_zod46.z.object({
2771
- src: import_zod46.z.string().min(1),
2967
+ var VideoWithOverlayPropsSchema = import_zod49.z.object({
2968
+ src: import_zod49.z.string().min(1),
2772
2969
  overlay: OverlaySchema.optional(),
2773
- volume: import_zod46.z.number().min(0).max(1).default(1),
2774
- playbackRate: import_zod46.z.number().min(0.5).max(2).default(1)
2970
+ volume: import_zod49.z.number().min(0).max(1).default(1),
2971
+ playbackRate: import_zod49.z.number().min(0.5).max(2).default(1)
2775
2972
  });
2776
- var resolveAsset17 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion43.staticFile)(staticFileInputFromAssetPath(value));
2973
+ var resolveAsset17 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion39.staticFile)(staticFileInputFromAssetPath(value));
2777
2974
  var VideoWithOverlay = ({ src, overlay, volume, playbackRate }) => {
2778
- const frame = (0, import_remotion43.useCurrentFrame)();
2779
- const fade = (0, import_remotion43.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2780
- const overlayNode = overlay ? overlay.type === "gradient" ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
2781
- import_remotion43.AbsoluteFill,
2975
+ const frame = (0, import_remotion39.useCurrentFrame)();
2976
+ const fade = (0, import_remotion39.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2977
+ const overlayFill = { position: "absolute", inset: 0 };
2978
+ const overlayNode = overlay ? overlay.type === "gradient" ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
2979
+ "div",
2782
2980
  {
2783
2981
  style: {
2982
+ ...overlayFill,
2784
2983
  opacity: overlay.opacity,
2785
2984
  background: overlay.position === "top" ? "linear-gradient(rgba(0,0,0,0.85), transparent)" : overlay.position === "bottom" ? "linear-gradient(transparent, rgba(0,0,0,0.85))" : "linear-gradient(rgba(0,0,0,0.6), rgba(0,0,0,0.6))"
2786
2985
  }
2787
2986
  }
2788
- ) : overlay.type === "logo" && overlay.content ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_remotion43.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_remotion43.Img, { src: resolveAsset17(overlay.content), style: { width: 220, height: 220, objectFit: "contain" } }) }) : overlay.type === "text" && overlay.content ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_remotion43.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { style: { color: "#FFFFFF", fontSize: 56, fontWeight: 900, textAlign: "center", padding: "0 80px" }, children: overlay.content }) }) : null : null;
2789
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_remotion43.AbsoluteFill, { children: [
2790
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
2791
- import_remotion43.Video,
2987
+ ) : overlay.type === "logo" && overlay.content ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { style: { ...overlayFill, display: "flex", justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(import_remotion39.Img, { src: resolveAsset17(overlay.content), style: { width: 220, height: 220, objectFit: "contain" } }) }) : overlay.type === "text" && overlay.content ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { style: { ...overlayFill, display: "flex", justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { style: { color: "#FFFFFF", fontSize: 56, fontWeight: 900, textAlign: "center", padding: "0 80px" }, children: overlay.content }) }) : null : null;
2988
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(Fill, { children: [
2989
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
2990
+ import_remotion39.Video,
2792
2991
  {
2793
2992
  src: resolveAsset17(src),
2794
2993
  style: { width: "100%", height: "100%", objectFit: "cover", opacity: fade },
@@ -2807,13 +3006,14 @@ var VideoWithOverlayComponentMetadata = {
2807
3006
  };
2808
3007
 
2809
3008
  // src/components/composites/ZoomTransition.tsx
2810
- var import_remotion44 = require("remotion");
2811
- var import_zod47 = require("zod");
2812
- var import_jsx_runtime46 = require("react/jsx-runtime");
2813
- var ZoomTransitionPropsSchema = import_zod47.z.object({
2814
- durationInFrames: import_zod47.z.number().int().min(10).max(60).default(30),
2815
- type: import_zod47.z.enum(["zoomIn", "zoomOut"]).default("zoomIn"),
2816
- phase: import_zod47.z.enum(["in", "out", "inOut"]).default("inOut")
3009
+ var import_react11 = __toESM(require("react"));
3010
+ var import_remotion40 = require("remotion");
3011
+ var import_zod50 = require("zod");
3012
+ var import_jsx_runtime50 = require("react/jsx-runtime");
3013
+ var ZoomTransitionPropsSchema = import_zod50.z.object({
3014
+ durationInFrames: import_zod50.z.number().int().min(10).max(60).default(30),
3015
+ type: import_zod50.z.enum(["zoomIn", "zoomOut"]).default("zoomIn"),
3016
+ phase: import_zod50.z.enum(["in", "out", "inOut"]).default("inOut")
2817
3017
  });
2818
3018
  var ZoomTransition = ({
2819
3019
  durationInFrames,
@@ -2822,7 +3022,8 @@ var ZoomTransition = ({
2822
3022
  children,
2823
3023
  __wavesDurationInFrames
2824
3024
  }) => {
2825
- const frame = (0, import_remotion44.useCurrentFrame)();
3025
+ const layers = import_react11.default.Children.toArray(children);
3026
+ const frame = (0, import_remotion40.useCurrentFrame)();
2826
3027
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2827
3028
  const d = Math.min(durationInFrames, total);
2828
3029
  let opacity = 1;
@@ -2830,17 +3031,17 @@ var ZoomTransition = ({
2830
3031
  const enterFrom = type === "zoomIn" ? 1.2 : 0.85;
2831
3032
  const exitTo = type === "zoomIn" ? 1.25 : 0.75;
2832
3033
  if (phase === "in" || phase === "inOut") {
2833
- const t = (0, import_remotion44.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3034
+ const t = (0, import_remotion40.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2834
3035
  scale *= enterFrom + (1 - enterFrom) * t;
2835
3036
  opacity *= t;
2836
3037
  }
2837
3038
  if (phase === "out" || phase === "inOut") {
2838
3039
  const start = Math.max(0, total - d);
2839
- const t = (0, import_remotion44.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3040
+ const t = (0, import_remotion40.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2840
3041
  scale *= 1 + (exitTo - 1) * t;
2841
3042
  opacity *= 1 - t;
2842
3043
  }
2843
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(import_remotion44.AbsoluteFill, { style: { opacity, transform: `scale(${scale})` }, children });
3044
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(Fill, { style: { opacity, transform: `scale(${scale})` }, children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
2844
3045
  };
2845
3046
  var ZoomTransitionComponentMetadata = {
2846
3047
  kind: "composite",
@@ -2869,6 +3070,14 @@ function registerBuiltInComponents() {
2869
3070
  metadata: BoxComponentMetadata
2870
3071
  });
2871
3072
  }
3073
+ if (!globalRegistry.has("Frame")) {
3074
+ globalRegistry.register({
3075
+ type: "Frame",
3076
+ component: Frame,
3077
+ propsSchema: FramePropsSchema,
3078
+ metadata: FrameComponentMetadata
3079
+ });
3080
+ }
2872
3081
  if (!globalRegistry.has("Stack")) {
2873
3082
  globalRegistry.register({
2874
3083
  type: "Stack",
@@ -2885,6 +3094,22 @@ function registerBuiltInComponents() {
2885
3094
  metadata: GridComponentMetadata
2886
3095
  });
2887
3096
  }
3097
+ if (!globalRegistry.has("Layers")) {
3098
+ globalRegistry.register({
3099
+ type: "Layers",
3100
+ component: Layers,
3101
+ propsSchema: LayersPropsSchema,
3102
+ metadata: LayersComponentMetadata
3103
+ });
3104
+ }
3105
+ if (!globalRegistry.has("Layer")) {
3106
+ globalRegistry.register({
3107
+ type: "Layer",
3108
+ component: Layer,
3109
+ propsSchema: LayerPropsSchema,
3110
+ metadata: LayerComponentMetadata
3111
+ });
3112
+ }
2888
3113
  if (!globalRegistry.has("Image")) {
2889
3114
  globalRegistry.register({
2890
3115
  type: "Image",