@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.
@@ -207,19 +207,77 @@ var AudioComponentMetadata = {
207
207
  };
208
208
 
209
209
  // src/components/primitives/Box.tsx
210
+ import React from "react";
210
211
  import { z as z4 } from "zod";
212
+
213
+ // src/remotion/Fill.tsx
211
214
  import { jsx as jsx2 } from "react/jsx-runtime";
215
+ var Fill = ({ style, children }) => {
216
+ return /* @__PURE__ */ jsx2(
217
+ "div",
218
+ {
219
+ style: {
220
+ width: "100%",
221
+ height: "100%",
222
+ position: "relative",
223
+ boxSizing: "border-box",
224
+ ...style ?? {}
225
+ },
226
+ children
227
+ }
228
+ );
229
+ };
230
+
231
+ // src/components/primitives/Box.tsx
232
+ import { jsx as jsx3 } from "react/jsx-runtime";
212
233
  var BoxPropsSchema = z4.object({
213
- x: z4.number().default(0).describe("Left offset in pixels"),
214
- y: z4.number().default(0).describe("Top offset in pixels"),
215
- width: z4.number().positive().optional().describe("Width in pixels (omit for auto)"),
216
- height: z4.number().positive().optional().describe("Height in pixels (omit for auto)"),
234
+ width: z4.number().positive().optional().describe("Width in pixels (optional)"),
235
+ height: z4.number().positive().optional().describe("Height in pixels (optional)"),
217
236
  padding: z4.number().min(0).default(0).describe("Padding in pixels"),
218
- backgroundColor: z4.string().optional().describe("CSS color (e.g. #RRGGBB)"),
237
+ backgroundColor: z4.string().optional().describe("CSS color (e.g. #RRGGBB, rgba())"),
219
238
  borderRadius: z4.number().min(0).default(0).describe("Border radius in pixels"),
220
239
  opacity: z4.number().min(0).max(1).default(1).describe("Opacity 0..1")
221
240
  });
222
- var Box = ({
241
+ var Box = ({ width, height, padding, backgroundColor, borderRadius, opacity, children }) => {
242
+ const layers = React.Children.toArray(children);
243
+ return /* @__PURE__ */ jsx3(
244
+ Fill,
245
+ {
246
+ style: {
247
+ width,
248
+ height,
249
+ padding,
250
+ backgroundColor,
251
+ borderRadius,
252
+ opacity
253
+ },
254
+ children: layers.map((child, i) => /* @__PURE__ */ jsx3("div", { style: { position: "absolute", inset: 0 }, children: child }, i))
255
+ }
256
+ );
257
+ };
258
+ var BoxComponentMetadata = {
259
+ kind: "primitive",
260
+ category: "layout",
261
+ acceptsChildren: true,
262
+ description: "Flow container for layout and backgrounds (layout-safe)",
263
+ llmGuidance: "Use Box as a container inside Grid/Stack. Box participates in layout flow. For x/y positioning, use Frame."
264
+ };
265
+
266
+ // src/components/primitives/Frame.tsx
267
+ import React2 from "react";
268
+ import { z as z5 } from "zod";
269
+ import { jsx as jsx4 } from "react/jsx-runtime";
270
+ var FramePropsSchema = z5.object({
271
+ x: z5.number().default(0).describe("Left offset in pixels"),
272
+ y: z5.number().default(0).describe("Top offset in pixels"),
273
+ width: z5.number().positive().optional().describe("Width in pixels (optional)"),
274
+ height: z5.number().positive().optional().describe("Height in pixels (optional)"),
275
+ padding: z5.number().min(0).default(0).describe("Padding in pixels"),
276
+ backgroundColor: z5.string().optional().describe("CSS color (e.g. #RRGGBB, rgba())"),
277
+ borderRadius: z5.number().min(0).default(0).describe("Border radius in pixels"),
278
+ opacity: z5.number().min(0).max(1).default(1).describe("Opacity 0..1")
279
+ });
280
+ var Frame = ({
223
281
  x,
224
282
  y,
225
283
  width,
@@ -230,7 +288,8 @@ var Box = ({
230
288
  opacity,
231
289
  children
232
290
  }) => {
233
- return /* @__PURE__ */ jsx2(
291
+ const layers = React2.Children.toArray(children);
292
+ return /* @__PURE__ */ jsx4(
234
293
  "div",
235
294
  {
236
295
  style: {
@@ -245,29 +304,28 @@ var Box = ({
245
304
  opacity,
246
305
  boxSizing: "border-box"
247
306
  },
248
- children
307
+ children: /* @__PURE__ */ jsx4(Fill, { children: layers.map((child, i) => /* @__PURE__ */ jsx4("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) })
249
308
  }
250
309
  );
251
310
  };
252
- var BoxComponentMetadata = {
311
+ var FrameComponentMetadata = {
253
312
  kind: "primitive",
254
313
  category: "layout",
255
314
  acceptsChildren: true,
256
- description: "Positioned container box for layout and backgrounds",
257
- llmGuidance: "Use Box to position content by x/y and optionally constrain width/height. Prefer Box+Stack/Grid for layouts."
315
+ description: "Absolute-positioned container (x/y placement)",
316
+ llmGuidance: "Use Frame for precise pixel placement (x/y). Use Box for normal layout flow inside Grid/Stack."
258
317
  };
259
318
 
260
319
  // src/components/primitives/Grid.tsx
261
- import { AbsoluteFill } from "remotion";
262
- import { z as z5 } from "zod";
263
- import { jsx as jsx3 } from "react/jsx-runtime";
264
- var GridPropsSchema = z5.object({
265
- columns: z5.number().int().min(1).max(12).default(2),
266
- rows: z5.number().int().min(1).max(12).default(1),
267
- gap: z5.number().min(0).default(24),
268
- padding: z5.number().min(0).default(0),
269
- align: z5.enum(["start", "center", "end", "stretch"]).default("stretch"),
270
- justify: z5.enum(["start", "center", "end", "stretch"]).default("stretch")
320
+ import { z as z6 } from "zod";
321
+ import { jsx as jsx5 } from "react/jsx-runtime";
322
+ var GridPropsSchema = z6.object({
323
+ columns: z6.number().int().min(1).max(12).default(2),
324
+ rows: z6.number().int().min(1).max(12).default(1),
325
+ gap: z6.number().min(0).default(24),
326
+ padding: z6.number().min(0).default(0),
327
+ align: z6.enum(["start", "center", "end", "stretch"]).default("stretch"),
328
+ justify: z6.enum(["start", "center", "end", "stretch"]).default("stretch")
271
329
  });
272
330
  var mapAlign = (a) => {
273
331
  if (a === "start") return "start";
@@ -282,8 +340,8 @@ var mapJustify = (j) => {
282
340
  return "stretch";
283
341
  };
284
342
  var Grid = ({ columns, rows, gap, padding, align, justify, children }) => {
285
- return /* @__PURE__ */ jsx3(
286
- AbsoluteFill,
343
+ return /* @__PURE__ */ jsx5(
344
+ Fill,
287
345
  {
288
346
  style: {
289
347
  display: "grid",
@@ -308,18 +366,18 @@ var GridComponentMetadata = {
308
366
  };
309
367
 
310
368
  // src/components/primitives/Image.tsx
311
- import { AbsoluteFill as AbsoluteFill2, Img, staticFile as staticFile2 } from "remotion";
312
- import { z as z6 } from "zod";
313
- import { jsx as jsx4 } from "react/jsx-runtime";
314
- var ImagePropsSchema = z6.object({
315
- src: z6.string().min(1),
316
- fit: z6.enum(["cover", "contain"]).default("cover"),
317
- borderRadius: z6.number().min(0).default(0),
318
- opacity: z6.number().min(0).max(1).default(1)
369
+ import { Img, staticFile as staticFile2 } from "remotion";
370
+ import { z as z7 } from "zod";
371
+ import { jsx as jsx6 } from "react/jsx-runtime";
372
+ var ImagePropsSchema = z7.object({
373
+ src: z7.string().min(1),
374
+ fit: z7.enum(["cover", "contain"]).default("cover"),
375
+ borderRadius: z7.number().min(0).default(0),
376
+ opacity: z7.number().min(0).max(1).default(1)
319
377
  });
320
378
  var resolveAsset = (value) => isRemoteAssetPath(value) ? value : staticFile2(staticFileInputFromAssetPath(value));
321
379
  var Image = ({ src, fit, borderRadius, opacity }) => {
322
- return /* @__PURE__ */ jsx4(AbsoluteFill2, { style: { opacity }, children: /* @__PURE__ */ jsx4(
380
+ return /* @__PURE__ */ jsx6(Fill, { style: { opacity }, children: /* @__PURE__ */ jsx6(
323
381
  Img,
324
382
  {
325
383
  src: resolveAsset(src),
@@ -334,32 +392,91 @@ var ImageComponentMetadata = {
334
392
  llmGuidance: 'Use Image for pictures and backgrounds. Use fit="cover" for full-bleed, fit="contain" to avoid cropping.'
335
393
  };
336
394
 
395
+ // src/components/primitives/Layer.tsx
396
+ import React3 from "react";
397
+ import { z as z8 } from "zod";
398
+ import { jsx as jsx7 } from "react/jsx-runtime";
399
+ var LayerPropsSchema = z8.object({
400
+ zIndex: z8.number().int().default(0).describe("Higher zIndex renders on top"),
401
+ inset: z8.number().min(0).default(0).describe("Inset from all sides in pixels"),
402
+ opacity: z8.number().min(0).max(1).default(1),
403
+ pointerEvents: z8.enum(["none", "auto"]).default("none")
404
+ });
405
+ var Layer = ({ zIndex, inset, opacity, pointerEvents, children }) => {
406
+ const layers = React3.Children.toArray(children);
407
+ return /* @__PURE__ */ jsx7(
408
+ "div",
409
+ {
410
+ style: {
411
+ position: "absolute",
412
+ left: inset,
413
+ right: inset,
414
+ top: inset,
415
+ bottom: inset,
416
+ zIndex,
417
+ opacity,
418
+ pointerEvents,
419
+ boxSizing: "border-box"
420
+ },
421
+ children: /* @__PURE__ */ jsx7(Fill, { children: layers.map((child, i) => /* @__PURE__ */ jsx7("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) })
422
+ }
423
+ );
424
+ };
425
+ var LayerComponentMetadata = {
426
+ kind: "primitive",
427
+ category: "layout",
428
+ acceptsChildren: true,
429
+ minChildren: 1,
430
+ description: "One overlay layer with explicit zIndex inside Layers",
431
+ llmGuidance: "Use Layer inside Layers to control stacking. Put exactly one child in a Layer (recommended)."
432
+ };
433
+
434
+ // src/components/primitives/Layers.tsx
435
+ import { z as z9 } from "zod";
436
+ import { jsx as jsx8 } from "react/jsx-runtime";
437
+ var LayersPropsSchema = z9.object({
438
+ overflow: z9.enum(["visible", "hidden"]).default("visible").describe("Clip layers to bounds")
439
+ });
440
+ var Layers = ({ overflow, children }) => {
441
+ return /* @__PURE__ */ jsx8(Fill, { style: { overflow }, children });
442
+ };
443
+ var LayersComponentMetadata = {
444
+ kind: "primitive",
445
+ category: "layout",
446
+ acceptsChildren: true,
447
+ minChildren: 1,
448
+ description: "Overlay container for stacking children (use Layer for zIndex)",
449
+ llmGuidance: "Use Layers to stack background/content/overlays. Prefer Layer children with explicit zIndex."
450
+ };
451
+
337
452
  // src/components/primitives/Scene.tsx
338
- import { AbsoluteFill as AbsoluteFill3, Img as Img2, Video, staticFile as staticFile3 } from "remotion";
339
- import { z as z7 } from "zod";
340
- import { jsx as jsx5, jsxs } from "react/jsx-runtime";
341
- var ScenePropsSchema = z7.object({
453
+ import React4 from "react";
454
+ import { AbsoluteFill, Img as Img2, Video, staticFile as staticFile3 } from "remotion";
455
+ import { z as z10 } from "zod";
456
+ import { jsx as jsx9, jsxs } from "react/jsx-runtime";
457
+ var ScenePropsSchema = z10.object({
342
458
  background: BackgroundSpecSchema
343
459
  });
344
460
  var resolveAsset2 = (value) => {
345
461
  return isRemoteAssetPath(value) ? value : staticFile3(staticFileInputFromAssetPath(value));
346
462
  };
347
463
  var Scene = ({ background, children }) => {
348
- return /* @__PURE__ */ jsxs(AbsoluteFill3, { children: [
349
- background.type === "color" ? /* @__PURE__ */ jsx5(AbsoluteFill3, { style: { backgroundColor: background.value } }) : background.type === "image" ? /* @__PURE__ */ jsx5(
464
+ const layers = React4.Children.toArray(children);
465
+ return /* @__PURE__ */ jsxs(AbsoluteFill, { children: [
466
+ background.type === "color" ? /* @__PURE__ */ jsx9(AbsoluteFill, { style: { backgroundColor: background.value } }) : background.type === "image" ? /* @__PURE__ */ jsx9(
350
467
  Img2,
351
468
  {
352
469
  src: resolveAsset2(background.value),
353
470
  style: { width: "100%", height: "100%", objectFit: "cover" }
354
471
  }
355
- ) : /* @__PURE__ */ jsx5(
472
+ ) : /* @__PURE__ */ jsx9(
356
473
  Video,
357
474
  {
358
475
  src: resolveAsset2(background.value),
359
476
  style: { width: "100%", height: "100%", objectFit: "cover" }
360
477
  }
361
478
  ),
362
- /* @__PURE__ */ jsx5(AbsoluteFill3, { children })
479
+ /* @__PURE__ */ jsx9(AbsoluteFill, { children: layers.map((child, i) => /* @__PURE__ */ jsx9(AbsoluteFill, { children: child }, i)) })
363
480
  ] });
364
481
  };
365
482
  var SceneComponentMetadata = {
@@ -371,37 +488,37 @@ var SceneComponentMetadata = {
371
488
  };
372
489
 
373
490
  // src/components/primitives/Segment.tsx
374
- import { AbsoluteFill as AbsoluteFill4, interpolate as interpolate2, useCurrentFrame as useCurrentFrame2 } from "remotion";
375
- import { z as z8 } from "zod";
376
- import { jsx as jsx6 } from "react/jsx-runtime";
377
- var TransitionPropsSchema = z8.object({
378
- type: z8.string().min(1),
379
- durationInFrames: z8.number().int().positive(),
380
- props: z8.record(z8.string(), z8.unknown()).optional()
491
+ import { AbsoluteFill as AbsoluteFill2, interpolate as interpolate2, useCurrentFrame as useCurrentFrame2 } from "remotion";
492
+ import { z as z11 } from "zod";
493
+ import { jsx as jsx10 } from "react/jsx-runtime";
494
+ var TransitionPropsSchema = z11.object({
495
+ type: z11.string().min(1),
496
+ durationInFrames: z11.number().int().positive(),
497
+ props: z11.record(z11.string(), z11.unknown()).optional()
381
498
  });
382
- var SegmentPropsSchema = z8.object({
499
+ var SegmentPropsSchema = z11.object({
383
500
  enterTransition: TransitionPropsSchema.optional(),
384
501
  exitTransition: TransitionPropsSchema.optional()
385
502
  });
386
503
  function getSlideOptions(raw) {
387
- const parsed = z8.object({
388
- direction: z8.enum(["left", "right", "up", "down"]).default("left"),
389
- distance: z8.number().int().min(1).max(2e3).default(80)
504
+ const parsed = z11.object({
505
+ direction: z11.enum(["left", "right", "up", "down"]).default("left"),
506
+ distance: z11.number().int().min(1).max(2e3).default(80)
390
507
  }).safeParse(raw ?? {});
391
508
  if (parsed.success) return parsed.data;
392
509
  return { direction: "left", distance: 80 };
393
510
  }
394
511
  function getZoomOptions(raw) {
395
- const parsed = z8.object({
396
- type: z8.enum(["zoomIn", "zoomOut"]).default("zoomIn")
512
+ const parsed = z11.object({
513
+ type: z11.enum(["zoomIn", "zoomOut"]).default("zoomIn")
397
514
  }).safeParse(raw ?? {});
398
515
  if (parsed.success) return parsed.data;
399
516
  return { type: "zoomIn" };
400
517
  }
401
518
  function getWipeOptions(raw) {
402
- const parsed = z8.object({
403
- direction: z8.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
404
- softEdge: z8.boolean().default(false)
519
+ const parsed = z11.object({
520
+ direction: z11.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
521
+ softEdge: z11.boolean().default(false)
405
522
  }).safeParse(raw ?? {});
406
523
  if (parsed.success) return parsed.data;
407
524
  return { direction: "right", softEdge: false };
@@ -414,11 +531,11 @@ function clipFor(direction, p) {
414
531
  return `polygon(0 0, ${100 * p}% 0, 0 ${100 * p}%)`;
415
532
  }
416
533
  function getCircularOptions(raw) {
417
- const parsed = z8.object({
418
- direction: z8.enum(["open", "close"]).default("open"),
419
- center: z8.object({
420
- x: z8.number().min(0).max(1).default(0.5),
421
- y: z8.number().min(0).max(1).default(0.5)
534
+ const parsed = z11.object({
535
+ direction: z11.enum(["open", "close"]).default("open"),
536
+ center: z11.object({
537
+ x: z11.number().min(0).max(1).default(0.5),
538
+ y: z11.number().min(0).max(1).default(0.5)
422
539
  }).default({ x: 0.5, y: 0.5 })
423
540
  }).safeParse(raw ?? {});
424
541
  if (parsed.success) return parsed.data;
@@ -507,7 +624,7 @@ var Segment = ({ enterTransition, exitTransition, children, __wavesDurationInFra
507
624
  }
508
625
  }
509
626
  const transform = `translate(${translateX}px, ${translateY}px) scale(${scale})`;
510
- return /* @__PURE__ */ jsx6(AbsoluteFill4, { style: { opacity, transform, clipPath, filter }, children });
627
+ return /* @__PURE__ */ jsx10(AbsoluteFill2, { style: { opacity, transform, clipPath, filter }, children });
511
628
  };
512
629
  var SegmentComponentMetadata = {
513
630
  kind: "primitive",
@@ -520,18 +637,18 @@ var SegmentComponentMetadata = {
520
637
  };
521
638
 
522
639
  // src/components/primitives/Shape.tsx
523
- import { z as z9 } from "zod";
524
- import { jsx as jsx7 } from "react/jsx-runtime";
525
- var ShapePropsSchema = z9.object({
526
- shape: z9.enum(["rect", "circle"]).default("rect"),
527
- x: z9.number().default(0),
528
- y: z9.number().default(0),
529
- width: z9.number().positive().default(100),
530
- height: z9.number().positive().default(100),
531
- fill: z9.string().default("#FFFFFF"),
532
- strokeColor: z9.string().optional(),
533
- strokeWidth: z9.number().min(0).default(0),
534
- opacity: z9.number().min(0).max(1).default(1)
640
+ import { z as z12 } from "zod";
641
+ import { jsx as jsx11 } from "react/jsx-runtime";
642
+ var ShapePropsSchema = z12.object({
643
+ shape: z12.enum(["rect", "circle"]).default("rect"),
644
+ x: z12.number().default(0),
645
+ y: z12.number().default(0),
646
+ width: z12.number().positive().default(100),
647
+ height: z12.number().positive().default(100),
648
+ fill: z12.string().default("#FFFFFF"),
649
+ strokeColor: z12.string().optional(),
650
+ strokeWidth: z12.number().min(0).default(0),
651
+ opacity: z12.number().min(0).max(1).default(1)
535
652
  });
536
653
  var Shape = ({
537
654
  shape,
@@ -544,7 +661,7 @@ var Shape = ({
544
661
  strokeWidth,
545
662
  opacity
546
663
  }) => {
547
- return /* @__PURE__ */ jsx7(
664
+ return /* @__PURE__ */ jsx11(
548
665
  "div",
549
666
  {
550
667
  style: {
@@ -569,15 +686,14 @@ var ShapeComponentMetadata = {
569
686
  };
570
687
 
571
688
  // src/components/primitives/Stack.tsx
572
- import { AbsoluteFill as AbsoluteFill5 } from "remotion";
573
- import { z as z10 } from "zod";
574
- import { jsx as jsx8 } from "react/jsx-runtime";
575
- var StackPropsSchema = z10.object({
576
- direction: z10.enum(["row", "column"]).default("column"),
577
- gap: z10.number().min(0).default(24),
578
- padding: z10.number().min(0).default(0),
579
- align: z10.enum(["start", "center", "end", "stretch"]).default("center"),
580
- justify: z10.enum(["start", "center", "end", "between"]).default("center")
689
+ import { z as z13 } from "zod";
690
+ import { jsx as jsx12 } from "react/jsx-runtime";
691
+ var StackPropsSchema = z13.object({
692
+ direction: z13.enum(["row", "column"]).default("column"),
693
+ gap: z13.number().min(0).default(24),
694
+ padding: z13.number().min(0).default(0),
695
+ align: z13.enum(["start", "center", "end", "stretch"]).default("center"),
696
+ justify: z13.enum(["start", "center", "end", "between"]).default("center")
581
697
  });
582
698
  var mapAlign2 = (a) => {
583
699
  if (a === "start") return "flex-start";
@@ -592,8 +708,8 @@ var mapJustify2 = (j) => {
592
708
  return "center";
593
709
  };
594
710
  var Stack = ({ direction, gap, padding, align, justify, children }) => {
595
- return /* @__PURE__ */ jsx8(
596
- AbsoluteFill5,
711
+ return /* @__PURE__ */ jsx12(
712
+ Fill,
597
713
  {
598
714
  style: {
599
715
  display: "flex",
@@ -617,17 +733,22 @@ var StackComponentMetadata = {
617
733
  };
618
734
 
619
735
  // src/components/primitives/Text.tsx
620
- import { AbsoluteFill as AbsoluteFill6, interpolate as interpolate3, useCurrentFrame as useCurrentFrame3 } from "remotion";
621
- import { z as z11 } from "zod";
622
- import { jsx as jsx9 } from "react/jsx-runtime";
623
- var TextPropsSchema = z11.object({
624
- content: z11.string(),
625
- fontSize: z11.number().default(48),
626
- color: z11.string().default("#FFFFFF"),
627
- position: z11.enum(["top", "center", "bottom", "left", "right"]).default("center"),
628
- animation: z11.enum(["none", "fade", "slide", "zoom"]).default("fade")
736
+ import { interpolate as interpolate3, useCurrentFrame as useCurrentFrame3 } from "remotion";
737
+ import { z as z14 } from "zod";
738
+ import { jsx as jsx13 } from "react/jsx-runtime";
739
+ var TextPropsSchema = z14.object({
740
+ content: z14.string(),
741
+ fontSize: z14.number().default(48),
742
+ color: z14.string().default("#FFFFFF"),
743
+ fontFamily: z14.string().default("Inter"),
744
+ position: z14.enum(["top", "center", "bottom", "left", "right"]).default("center"),
745
+ animation: z14.enum(["none", "fade", "slide", "zoom"]).default("fade"),
746
+ maxWidthPct: z14.number().min(0.1).max(1).default(0.9),
747
+ safeInsetPct: z14.number().min(0).max(0.25).default(0.06),
748
+ textAlign: z14.enum(["left", "center", "right"]).default("center")
629
749
  });
630
- var getPositionStyles = (position) => {
750
+ var getPositionStyles = (position, safeInsetPct) => {
751
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
631
752
  const base = {
632
753
  display: "flex",
633
754
  justifyContent: "center",
@@ -635,13 +756,13 @@ var getPositionStyles = (position) => {
635
756
  };
636
757
  switch (position) {
637
758
  case "top":
638
- return { ...base, alignItems: "flex-start", paddingTop: 60 };
759
+ return { ...base, alignItems: "flex-start", paddingTop: inset };
639
760
  case "bottom":
640
- return { ...base, alignItems: "flex-end", paddingBottom: 60 };
761
+ return { ...base, alignItems: "flex-end", paddingBottom: inset };
641
762
  case "left":
642
- return { ...base, justifyContent: "flex-start", paddingLeft: 60 };
763
+ return { ...base, justifyContent: "flex-start", paddingLeft: inset };
643
764
  case "right":
644
- return { ...base, justifyContent: "flex-end", paddingRight: 60 };
765
+ return { ...base, justifyContent: "flex-end", paddingRight: inset };
645
766
  default:
646
767
  return base;
647
768
  }
@@ -682,18 +803,32 @@ var getAnimationStyle = (frame, animation) => {
682
803
  return {};
683
804
  }
684
805
  };
685
- var Text = ({ content, fontSize, color, position, animation }) => {
806
+ var Text = ({
807
+ content,
808
+ fontSize,
809
+ color,
810
+ fontFamily,
811
+ position,
812
+ animation,
813
+ maxWidthPct,
814
+ safeInsetPct,
815
+ textAlign
816
+ }) => {
686
817
  const frame = useCurrentFrame3();
687
- const positionStyles6 = getPositionStyles(position);
818
+ const positionStyles6 = getPositionStyles(position, safeInsetPct);
688
819
  const animationStyles = getAnimationStyle(frame, animation);
689
- return /* @__PURE__ */ jsx9(AbsoluteFill6, { style: positionStyles6, children: /* @__PURE__ */ jsx9(
820
+ return /* @__PURE__ */ jsx13(Fill, { style: positionStyles6, children: /* @__PURE__ */ jsx13(
690
821
  "div",
691
822
  {
692
823
  style: {
693
824
  fontSize,
694
825
  color,
826
+ fontFamily,
695
827
  fontWeight: 600,
696
- textAlign: "center",
828
+ textAlign,
829
+ maxWidth: `${Math.round(maxWidthPct * 100)}%`,
830
+ overflowWrap: "anywhere",
831
+ wordBreak: "break-word",
697
832
  ...animationStyles
698
833
  },
699
834
  children: content
@@ -724,19 +859,19 @@ var TextComponentMetadata = {
724
859
  };
725
860
 
726
861
  // src/components/primitives/Video.tsx
727
- import { AbsoluteFill as AbsoluteFill7, Video as RemotionVideo, staticFile as staticFile4 } from "remotion";
728
- import { z as z12 } from "zod";
729
- import { jsx as jsx10 } from "react/jsx-runtime";
730
- var VideoPropsSchema = z12.object({
731
- src: z12.string().min(1),
732
- fit: z12.enum(["cover", "contain"]).default("cover"),
733
- borderRadius: z12.number().min(0).default(0),
734
- opacity: z12.number().min(0).max(1).default(1),
735
- muted: z12.boolean().default(true)
862
+ import { Video as RemotionVideo, staticFile as staticFile4 } from "remotion";
863
+ import { z as z15 } from "zod";
864
+ import { jsx as jsx14 } from "react/jsx-runtime";
865
+ var VideoPropsSchema = z15.object({
866
+ src: z15.string().min(1),
867
+ fit: z15.enum(["cover", "contain"]).default("cover"),
868
+ borderRadius: z15.number().min(0).default(0),
869
+ opacity: z15.number().min(0).max(1).default(1),
870
+ muted: z15.boolean().default(true)
736
871
  });
737
872
  var resolveAsset3 = (value) => isRemoteAssetPath(value) ? value : staticFile4(staticFileInputFromAssetPath(value));
738
873
  var Video2 = ({ src, fit, borderRadius, opacity, muted }) => {
739
- return /* @__PURE__ */ jsx10(AbsoluteFill7, { style: { opacity }, children: /* @__PURE__ */ jsx10(
874
+ return /* @__PURE__ */ jsx14(Fill, { style: { opacity }, children: /* @__PURE__ */ jsx14(
740
875
  RemotionVideo,
741
876
  {
742
877
  src: resolveAsset3(src),
@@ -753,19 +888,19 @@ var VideoComponentMetadata = {
753
888
  };
754
889
 
755
890
  // src/components/composites/AnimatedCounter.tsx
756
- import { AbsoluteFill as AbsoluteFill8, interpolate as interpolate4, spring, useCurrentFrame as useCurrentFrame4, useVideoConfig } from "remotion";
757
- import { z as z13 } from "zod";
758
- import { jsx as jsx11, jsxs as jsxs2 } from "react/jsx-runtime";
759
- var AnimatedCounterPropsSchema = z13.object({
760
- from: z13.number().default(0),
761
- to: z13.number().default(100),
762
- fontSize: z13.number().min(8).max(300).default(96),
763
- color: z13.string().default("#FFFFFF"),
764
- fontFamily: z13.string().default("Inter"),
765
- fontWeight: z13.number().int().min(100).max(900).default(700),
766
- icon: z13.string().optional(),
767
- suffix: z13.string().optional(),
768
- animationType: z13.enum(["spring", "linear"]).default("spring")
891
+ import { interpolate as interpolate4, spring, useCurrentFrame as useCurrentFrame4, useVideoConfig } from "remotion";
892
+ import { z as z16 } from "zod";
893
+ import { jsx as jsx15, jsxs as jsxs2 } from "react/jsx-runtime";
894
+ var AnimatedCounterPropsSchema = z16.object({
895
+ from: z16.number().default(0),
896
+ to: z16.number().default(100),
897
+ fontSize: z16.number().min(8).max(300).default(96),
898
+ color: z16.string().default("#FFFFFF"),
899
+ fontFamily: z16.string().default("Inter"),
900
+ fontWeight: z16.number().int().min(100).max(900).default(700),
901
+ icon: z16.string().optional(),
902
+ suffix: z16.string().optional(),
903
+ animationType: z16.enum(["spring", "linear"]).default("spring")
769
904
  });
770
905
  var AnimatedCounter = ({
771
906
  from,
@@ -786,9 +921,9 @@ var AnimatedCounter = ({
786
921
  const value = from + (to - from) * Math.max(0, Math.min(1, progress));
787
922
  const rounded = Math.round(value);
788
923
  const label = `${rounded.toLocaleString()}${suffix ?? ""}`;
789
- return /* @__PURE__ */ jsx11(AbsoluteFill8, { style: { display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsxs2("div", { style: { textAlign: "center" }, children: [
790
- icon ? /* @__PURE__ */ jsx11("div", { style: { fontSize: Math.round(fontSize * 0.5), marginBottom: 18 }, children: icon }) : null,
791
- /* @__PURE__ */ jsx11("div", { style: { fontSize, color, fontFamily, fontWeight, lineHeight: 1 }, children: label })
924
+ return /* @__PURE__ */ jsx15(Fill, { style: { display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsxs2("div", { style: { textAlign: "center" }, children: [
925
+ icon ? /* @__PURE__ */ jsx15("div", { style: { fontSize: Math.round(fontSize * 0.5), marginBottom: 18 }, children: icon }) : null,
926
+ /* @__PURE__ */ jsx15("div", { style: { fontSize, color, fontFamily, fontWeight, lineHeight: 1 }, children: label })
792
927
  ] }) });
793
928
  };
794
929
  var AnimatedCounterComponentMetadata = {
@@ -803,27 +938,27 @@ var AnimatedCounterComponentMetadata = {
803
938
  };
804
939
 
805
940
  // src/components/composites/BarChart.tsx
806
- import { AbsoluteFill as AbsoluteFill9, spring as spring2, useCurrentFrame as useCurrentFrame5, useVideoConfig as useVideoConfig2 } from "remotion";
807
- import { z as z14 } from "zod";
808
- import { jsx as jsx12, jsxs as jsxs3 } from "react/jsx-runtime";
809
- var BarChartPropsSchema = z14.object({
810
- data: z14.array(z14.object({
811
- label: z14.string().min(1),
812
- value: z14.number(),
813
- color: z14.string().optional()
941
+ import { spring as spring2, useCurrentFrame as useCurrentFrame5, useVideoConfig as useVideoConfig2 } from "remotion";
942
+ import { z as z17 } from "zod";
943
+ import { jsx as jsx16, jsxs as jsxs3 } from "react/jsx-runtime";
944
+ var BarChartPropsSchema = z17.object({
945
+ data: z17.array(z17.object({
946
+ label: z17.string().min(1),
947
+ value: z17.number(),
948
+ color: z17.string().optional()
814
949
  })).min(2).max(8),
815
- orientation: z14.enum(["horizontal", "vertical"]).default("vertical"),
816
- showValues: z14.boolean().default(true),
817
- showGrid: z14.boolean().default(false),
818
- maxValue: z14.number().optional()
950
+ orientation: z17.enum(["horizontal", "vertical"]).default("vertical"),
951
+ showValues: z17.boolean().default(true),
952
+ showGrid: z17.boolean().default(false),
953
+ maxValue: z17.number().optional()
819
954
  });
820
955
  var BarChart = ({ data, orientation, showValues, showGrid, maxValue }) => {
821
956
  const frame = useCurrentFrame5();
822
957
  const { fps } = useVideoConfig2();
823
958
  const max = maxValue ?? Math.max(...data.map((d) => d.value));
824
- return /* @__PURE__ */ jsxs3(AbsoluteFill9, { style: { padding: 90, boxSizing: "border-box" }, children: [
825
- showGrid ? /* @__PURE__ */ jsx12("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,
826
- /* @__PURE__ */ jsx12(
959
+ return /* @__PURE__ */ jsxs3(Fill, { style: { padding: 90, boxSizing: "border-box" }, children: [
960
+ showGrid ? /* @__PURE__ */ jsx16("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,
961
+ /* @__PURE__ */ jsx16(
827
962
  "div",
828
963
  {
829
964
  style: {
@@ -840,9 +975,9 @@ var BarChart = ({ data, orientation, showValues, showGrid, maxValue }) => {
840
975
  const ratio = max === 0 ? 0 : d.value / max * p;
841
976
  const color = d.color ?? "#0A84FF";
842
977
  return /* @__PURE__ */ jsxs3("div", { style: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", gap: 10 }, children: [
843
- orientation === "vertical" ? /* @__PURE__ */ jsx12("div", { style: { width: "100%", flex: 1, display: "flex", alignItems: "flex-end" }, children: /* @__PURE__ */ jsx12("div", { style: { width: "100%", height: `${Math.round(ratio * 100)}%`, backgroundColor: color, borderRadius: 12 } }) }) : /* @__PURE__ */ jsx12("div", { style: { width: "100%", display: "flex", alignItems: "center", gap: 12 }, children: /* @__PURE__ */ jsx12("div", { style: { flex: 1, height: 18, backgroundColor: "rgba(255,255,255,0.15)", borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ jsx12("div", { style: { width: `${Math.round(ratio * 100)}%`, height: "100%", backgroundColor: color } }) }) }),
844
- /* @__PURE__ */ jsx12("div", { style: { color: "#FFFFFF", fontWeight: 700, fontSize: 22, opacity: 0.9 }, children: d.label }),
845
- showValues ? /* @__PURE__ */ jsx12("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 26 }, children: Math.round(d.value).toLocaleString() }) : null
978
+ orientation === "vertical" ? /* @__PURE__ */ jsx16("div", { style: { width: "100%", flex: 1, display: "flex", alignItems: "flex-end" }, children: /* @__PURE__ */ jsx16("div", { style: { width: "100%", height: `${Math.round(ratio * 100)}%`, backgroundColor: color, borderRadius: 12 } }) }) : /* @__PURE__ */ jsx16("div", { style: { width: "100%", display: "flex", alignItems: "center", gap: 12 }, children: /* @__PURE__ */ jsx16("div", { style: { flex: 1, height: 18, backgroundColor: "rgba(255,255,255,0.15)", borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ jsx16("div", { style: { width: `${Math.round(ratio * 100)}%`, height: "100%", backgroundColor: color } }) }) }),
979
+ /* @__PURE__ */ jsx16("div", { style: { color: "#FFFFFF", fontWeight: 700, fontSize: 22, opacity: 0.9 }, children: d.label }),
980
+ showValues ? /* @__PURE__ */ jsx16("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 26 }, children: Math.round(d.value).toLocaleString() }) : null
846
981
  ] }, d.label);
847
982
  })
848
983
  }
@@ -857,18 +992,18 @@ var BarChartComponentMetadata = {
857
992
  };
858
993
 
859
994
  // src/components/composites/CardStack.tsx
860
- import { AbsoluteFill as AbsoluteFill10, interpolate as interpolate5, spring as spring3, useCurrentFrame as useCurrentFrame6, useVideoConfig as useVideoConfig3 } from "remotion";
861
- import { z as z15 } from "zod";
862
- import { jsx as jsx13, jsxs as jsxs4 } from "react/jsx-runtime";
863
- var CardSchema = z15.object({
864
- title: z15.string().min(1),
865
- content: z15.string().min(1),
866
- backgroundColor: z15.string().optional()
995
+ import { interpolate as interpolate5, spring as spring3, useCurrentFrame as useCurrentFrame6, useVideoConfig as useVideoConfig3 } from "remotion";
996
+ import { z as z18 } from "zod";
997
+ import { jsx as jsx17, jsxs as jsxs4 } from "react/jsx-runtime";
998
+ var CardSchema = z18.object({
999
+ title: z18.string().min(1),
1000
+ content: z18.string().min(1),
1001
+ backgroundColor: z18.string().optional()
867
1002
  });
868
- var CardStackPropsSchema = z15.object({
869
- cards: z15.array(CardSchema).min(2).max(5),
870
- transition: z15.enum(["flip", "slide", "fade"]).default("flip"),
871
- displayDuration: z15.number().int().min(30).max(150).default(90)
1003
+ var CardStackPropsSchema = z18.object({
1004
+ cards: z18.array(CardSchema).min(2).max(5),
1005
+ transition: z18.enum(["flip", "slide", "fade"]).default("flip"),
1006
+ displayDuration: z18.number().int().min(30).max(150).default(90)
872
1007
  });
873
1008
  var CardStack = ({ cards, transition, displayDuration }) => {
874
1009
  const frame = useCurrentFrame6();
@@ -881,7 +1016,7 @@ var CardStack = ({ cards, transition, displayDuration }) => {
881
1016
  const opacity = transition === "fade" ? p : 1;
882
1017
  const slideX = transition === "slide" ? interpolate5(p, [0, 1], [80, 0]) : 0;
883
1018
  const rotateY = transition === "flip" ? interpolate5(p, [0, 1], [70, 0]) : 0;
884
- return /* @__PURE__ */ jsx13(AbsoluteFill10, { style: { justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ jsxs4(
1019
+ return /* @__PURE__ */ jsx17(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ jsxs4(
885
1020
  "div",
886
1021
  {
887
1022
  style: {
@@ -898,8 +1033,8 @@ var CardStack = ({ cards, transition, displayDuration }) => {
898
1033
  opacity
899
1034
  },
900
1035
  children: [
901
- /* @__PURE__ */ jsx13("div", { style: { fontSize: 56, fontWeight: 900, marginBottom: 22 }, children: card.title }),
902
- /* @__PURE__ */ jsx13("div", { style: { fontSize: 30, fontWeight: 700, opacity: 0.9, lineHeight: 1.3 }, children: card.content })
1036
+ /* @__PURE__ */ jsx17("div", { style: { fontSize: 56, fontWeight: 900, marginBottom: 22 }, children: card.title }),
1037
+ /* @__PURE__ */ jsx17("div", { style: { fontSize: 30, fontWeight: 700, opacity: 0.9, lineHeight: 1.3 }, children: card.content })
903
1038
  ]
904
1039
  }
905
1040
  ) });
@@ -912,18 +1047,19 @@ var CardStackComponentMetadata = {
912
1047
  };
913
1048
 
914
1049
  // src/components/composites/CircularReveal.tsx
915
- import { AbsoluteFill as AbsoluteFill11, interpolate as interpolate6, useCurrentFrame as useCurrentFrame7 } from "remotion";
916
- import { z as z16 } from "zod";
917
- import { jsx as jsx14 } from "react/jsx-runtime";
918
- var CenterSchema = z16.object({
919
- x: z16.number().min(0).max(1).default(0.5),
920
- y: z16.number().min(0).max(1).default(0.5)
1050
+ import React5 from "react";
1051
+ import { interpolate as interpolate6, useCurrentFrame as useCurrentFrame7 } from "remotion";
1052
+ import { z as z19 } from "zod";
1053
+ import { jsx as jsx18 } from "react/jsx-runtime";
1054
+ var CenterSchema = z19.object({
1055
+ x: z19.number().min(0).max(1).default(0.5),
1056
+ y: z19.number().min(0).max(1).default(0.5)
921
1057
  });
922
- var CircularRevealPropsSchema = z16.object({
923
- durationInFrames: z16.number().int().min(10).max(60).default(30),
924
- direction: z16.enum(["open", "close"]).default("open"),
1058
+ var CircularRevealPropsSchema = z19.object({
1059
+ durationInFrames: z19.number().int().min(10).max(60).default(30),
1060
+ direction: z19.enum(["open", "close"]).default("open"),
925
1061
  center: CenterSchema.optional(),
926
- phase: z16.enum(["in", "out", "inOut"]).default("inOut")
1062
+ phase: z19.enum(["in", "out", "inOut"]).default("inOut")
927
1063
  });
928
1064
  var CircularReveal = ({
929
1065
  durationInFrames,
@@ -933,6 +1069,7 @@ var CircularReveal = ({
933
1069
  children,
934
1070
  __wavesDurationInFrames
935
1071
  }) => {
1072
+ const layers = React5.Children.toArray(children);
936
1073
  const frame = useCurrentFrame7();
937
1074
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
938
1075
  const d = Math.min(durationInFrames, total);
@@ -948,7 +1085,7 @@ var CircularReveal = ({
948
1085
  const t = interpolate6(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
949
1086
  radiusPct = open ? 150 * (1 - t) : 150 * t;
950
1087
  }
951
- return /* @__PURE__ */ jsx14(AbsoluteFill11, { style: { clipPath: `circle(${radiusPct}% at ${Math.round(c.x * 100)}% ${Math.round(c.y * 100)}%)` }, children });
1088
+ return /* @__PURE__ */ jsx18(Fill, { style: { clipPath: `circle(${radiusPct}% at ${Math.round(c.x * 100)}% ${Math.round(c.y * 100)}%)` }, children: layers.map((child, i) => /* @__PURE__ */ jsx18("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
952
1089
  };
953
1090
  var CircularRevealComponentMetadata = {
954
1091
  kind: "composite",
@@ -960,21 +1097,21 @@ var CircularRevealComponentMetadata = {
960
1097
  };
961
1098
 
962
1099
  // src/components/composites/CountUpText.tsx
963
- import { AbsoluteFill as AbsoluteFill12, interpolate as interpolate7, spring as spring4, useCurrentFrame as useCurrentFrame8, useVideoConfig as useVideoConfig4 } from "remotion";
964
- import { z as z17 } from "zod";
965
- import { jsx as jsx15 } from "react/jsx-runtime";
966
- var CountUpTextPropsSchema = z17.object({
967
- from: z17.number().default(0),
968
- to: z17.number().default(100),
969
- fontSize: z17.number().min(8).max(240).default(72),
970
- color: z17.string().default("#FFFFFF"),
971
- fontFamily: z17.string().default("Inter"),
972
- fontWeight: z17.number().int().min(100).max(900).default(700),
973
- position: z17.enum(["top", "center", "bottom"]).default("center"),
974
- format: z17.enum(["integer", "decimal", "currency", "percentage"]).default("integer"),
975
- decimals: z17.number().int().min(0).max(4).default(0),
976
- prefix: z17.string().optional(),
977
- suffix: z17.string().optional()
1100
+ import { interpolate as interpolate7, spring as spring4, useCurrentFrame as useCurrentFrame8, useVideoConfig as useVideoConfig4 } from "remotion";
1101
+ import { z as z20 } from "zod";
1102
+ import { jsx as jsx19 } from "react/jsx-runtime";
1103
+ var CountUpTextPropsSchema = z20.object({
1104
+ from: z20.number().default(0),
1105
+ to: z20.number().default(100),
1106
+ fontSize: z20.number().min(8).max(240).default(72),
1107
+ color: z20.string().default("#FFFFFF"),
1108
+ fontFamily: z20.string().default("Inter"),
1109
+ fontWeight: z20.number().int().min(100).max(900).default(700),
1110
+ position: z20.enum(["top", "center", "bottom"]).default("center"),
1111
+ format: z20.enum(["integer", "decimal", "currency", "percentage"]).default("integer"),
1112
+ decimals: z20.number().int().min(0).max(4).default(0),
1113
+ prefix: z20.string().optional(),
1114
+ suffix: z20.string().optional()
978
1115
  });
979
1116
  var positionStyles = (position) => {
980
1117
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -1009,7 +1146,7 @@ var CountUpText = ({
1009
1146
  const value = from + (to - from) * progress;
1010
1147
  const fade = interpolate7(frame, [0, Math.min(12, total)], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1011
1148
  const label = `${prefix ?? ""}${formatValue(value, format, decimals)}${suffix ?? ""}`;
1012
- return /* @__PURE__ */ jsx15(AbsoluteFill12, { style: { display: "flex", ...positionStyles(position) }, children: /* @__PURE__ */ jsx15("div", { style: { fontSize, color, fontFamily, fontWeight, opacity: fade, lineHeight: 1 }, children: label }) });
1149
+ return /* @__PURE__ */ jsx19(Fill, { style: { display: "flex", ...positionStyles(position) }, children: /* @__PURE__ */ jsx19("div", { style: { fontSize, color, fontFamily, fontWeight, opacity: fade, lineHeight: 1 }, children: label }) });
1013
1150
  };
1014
1151
  var CountUpTextComponentMetadata = {
1015
1152
  kind: "composite",
@@ -1019,10 +1156,11 @@ var CountUpTextComponentMetadata = {
1019
1156
  };
1020
1157
 
1021
1158
  // src/components/composites/FadeTransition.tsx
1022
- import { AbsoluteFill as AbsoluteFill13, interpolate as interpolate8, useCurrentFrame as useCurrentFrame9 } from "remotion";
1023
- import { z as z18 } from "zod";
1024
- import { jsx as jsx16 } from "react/jsx-runtime";
1025
- var EasingSchema = z18.enum(["linear", "easeIn", "easeOut", "easeInOut"]);
1159
+ import React6 from "react";
1160
+ import { interpolate as interpolate8, useCurrentFrame as useCurrentFrame9 } from "remotion";
1161
+ import { z as z21 } from "zod";
1162
+ import { jsx as jsx20 } from "react/jsx-runtime";
1163
+ var EasingSchema = z21.enum(["linear", "easeIn", "easeOut", "easeInOut"]);
1026
1164
  function ease(t, easing) {
1027
1165
  const x = Math.max(0, Math.min(1, t));
1028
1166
  if (easing === "linear") return x;
@@ -1030,10 +1168,10 @@ function ease(t, easing) {
1030
1168
  if (easing === "easeOut") return 1 - (1 - x) * (1 - x);
1031
1169
  return x < 0.5 ? 2 * x * x : 1 - 2 * (1 - x) * (1 - x);
1032
1170
  }
1033
- var FadeTransitionPropsSchema = z18.object({
1034
- durationInFrames: z18.number().int().min(10).max(60).default(30),
1171
+ var FadeTransitionPropsSchema = z21.object({
1172
+ durationInFrames: z21.number().int().min(10).max(60).default(30),
1035
1173
  easing: EasingSchema.default("easeInOut"),
1036
- phase: z18.enum(["in", "out", "inOut"]).default("inOut")
1174
+ phase: z21.enum(["in", "out", "inOut"]).default("inOut")
1037
1175
  });
1038
1176
  var FadeTransition = ({
1039
1177
  durationInFrames,
@@ -1042,6 +1180,7 @@ var FadeTransition = ({
1042
1180
  children,
1043
1181
  __wavesDurationInFrames
1044
1182
  }) => {
1183
+ const layers = React6.Children.toArray(children);
1045
1184
  const frame = useCurrentFrame9();
1046
1185
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1047
1186
  const d = Math.min(durationInFrames, total);
@@ -1055,7 +1194,7 @@ var FadeTransition = ({
1055
1194
  const t = interpolate8(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1056
1195
  opacity *= 1 - ease(t, easing);
1057
1196
  }
1058
- return /* @__PURE__ */ jsx16(AbsoluteFill13, { style: { opacity }, children });
1197
+ return /* @__PURE__ */ jsx20(Fill, { style: { opacity }, children: layers.map((child, i) => /* @__PURE__ */ jsx20("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
1059
1198
  };
1060
1199
  var FadeTransitionComponentMetadata = {
1061
1200
  kind: "composite",
@@ -1067,17 +1206,17 @@ var FadeTransitionComponentMetadata = {
1067
1206
  };
1068
1207
 
1069
1208
  // src/components/composites/GlitchText.tsx
1070
- import { AbsoluteFill as AbsoluteFill14, useCurrentFrame as useCurrentFrame10 } from "remotion";
1071
- import { z as z19 } from "zod";
1072
- import { jsx as jsx17, jsxs as jsxs5 } from "react/jsx-runtime";
1073
- var GlitchTextPropsSchema = z19.object({
1074
- content: z19.string().max(100),
1075
- fontSize: z19.number().min(8).max(240).default(72),
1076
- color: z19.string().default("#FFFFFF"),
1077
- fontFamily: z19.string().default("monospace"),
1078
- position: z19.enum(["top", "center", "bottom"]).default("center"),
1079
- intensity: z19.number().int().min(1).max(10).default(5),
1080
- glitchDuration: z19.number().int().min(5).max(30).default(10)
1209
+ import { useCurrentFrame as useCurrentFrame10 } from "remotion";
1210
+ import { z as z22 } from "zod";
1211
+ import { jsx as jsx21, jsxs as jsxs5 } from "react/jsx-runtime";
1212
+ var GlitchTextPropsSchema = z22.object({
1213
+ content: z22.string().max(100),
1214
+ fontSize: z22.number().min(8).max(240).default(72),
1215
+ color: z22.string().default("#FFFFFF"),
1216
+ fontFamily: z22.string().default("monospace"),
1217
+ position: z22.enum(["top", "center", "bottom"]).default("center"),
1218
+ intensity: z22.number().int().min(1).max(10).default(5),
1219
+ glitchDuration: z22.number().int().min(5).max(30).default(10)
1081
1220
  });
1082
1221
  var positionStyles2 = (position) => {
1083
1222
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -1111,10 +1250,10 @@ var GlitchText = ({
1111
1250
  textTransform: "uppercase",
1112
1251
  textAlign: "center"
1113
1252
  };
1114
- return /* @__PURE__ */ jsx17(AbsoluteFill14, { style: { display: "flex", ...positionStyles2(position) }, children: /* @__PURE__ */ jsxs5("div", { style: { position: "relative" }, children: [
1115
- /* @__PURE__ */ jsx17("div", { style: { ...baseStyle, color, transform: `translate(${jitter}px, ${jitterY}px)` }, children: content }),
1116
- /* @__PURE__ */ jsx17("div", { style: { ...baseStyle, color: "#FF3B30", transform: `translate(${jitter + 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content }),
1117
- /* @__PURE__ */ jsx17("div", { style: { ...baseStyle, color: "#0A84FF", transform: `translate(${jitter - 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content })
1253
+ return /* @__PURE__ */ jsx21(Fill, { style: { display: "flex", ...positionStyles2(position) }, children: /* @__PURE__ */ jsxs5("div", { style: { position: "relative" }, children: [
1254
+ /* @__PURE__ */ jsx21("div", { style: { ...baseStyle, color, transform: `translate(${jitter}px, ${jitterY}px)` }, children: content }),
1255
+ /* @__PURE__ */ jsx21("div", { style: { ...baseStyle, color: "#FF3B30", transform: `translate(${jitter + 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content }),
1256
+ /* @__PURE__ */ jsx21("div", { style: { ...baseStyle, color: "#0A84FF", transform: `translate(${jitter - 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content })
1118
1257
  ] }) });
1119
1258
  };
1120
1259
  var GlitchTextComponentMetadata = {
@@ -1125,17 +1264,16 @@ var GlitchTextComponentMetadata = {
1125
1264
  };
1126
1265
 
1127
1266
  // src/components/composites/GridLayout.tsx
1128
- import { AbsoluteFill as AbsoluteFill15 } from "remotion";
1129
- import { z as z20 } from "zod";
1130
- import { jsx as jsx18 } from "react/jsx-runtime";
1131
- var GridLayoutPropsSchema = z20.object({
1132
- columns: z20.number().int().min(1).max(4).default(2),
1133
- rows: z20.number().int().min(1).max(4).default(2),
1134
- gap: z20.number().min(0).max(50).default(20),
1135
- padding: z20.number().min(0).max(100).default(40)
1267
+ import { z as z23 } from "zod";
1268
+ import { jsx as jsx22 } from "react/jsx-runtime";
1269
+ var GridLayoutPropsSchema = z23.object({
1270
+ columns: z23.number().int().min(1).max(4).default(2),
1271
+ rows: z23.number().int().min(1).max(4).default(2),
1272
+ gap: z23.number().min(0).max(50).default(20),
1273
+ padding: z23.number().min(0).max(100).default(40)
1136
1274
  });
1137
1275
  var GridLayout = ({ columns, rows, gap, padding, children }) => {
1138
- return /* @__PURE__ */ jsx18(AbsoluteFill15, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ jsx18(
1276
+ return /* @__PURE__ */ jsx22(Fill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ jsx22(
1139
1277
  "div",
1140
1278
  {
1141
1279
  style: {
@@ -1160,13 +1298,13 @@ var GridLayoutComponentMetadata = {
1160
1298
  };
1161
1299
 
1162
1300
  // src/components/composites/ImageCollage.tsx
1163
- import { AbsoluteFill as AbsoluteFill16, Img as Img3, spring as spring5, staticFile as staticFile5, useCurrentFrame as useCurrentFrame11, useVideoConfig as useVideoConfig5 } from "remotion";
1164
- import { z as z21 } from "zod";
1165
- import { jsx as jsx19, jsxs as jsxs6 } from "react/jsx-runtime";
1166
- var ImageCollagePropsSchema = z21.object({
1167
- images: z21.array(z21.object({ src: z21.string().min(1), caption: z21.string().optional() })).min(2).max(9),
1168
- layout: z21.enum(["grid", "stack", "scatter"]).default("grid"),
1169
- stagger: z21.number().int().min(2).max(10).default(5)
1301
+ import { Img as Img3, spring as spring5, staticFile as staticFile5, useCurrentFrame as useCurrentFrame11, useVideoConfig as useVideoConfig5 } from "remotion";
1302
+ import { z as z24 } from "zod";
1303
+ import { jsx as jsx23, jsxs as jsxs6 } from "react/jsx-runtime";
1304
+ var ImageCollagePropsSchema = z24.object({
1305
+ images: z24.array(z24.object({ src: z24.string().min(1), caption: z24.string().optional() })).min(2).max(9),
1306
+ layout: z24.enum(["grid", "stack", "scatter"]).default("grid"),
1307
+ stagger: z24.number().int().min(2).max(10).default(5)
1170
1308
  });
1171
1309
  var resolveAsset4 = (value) => isRemoteAssetPath(value) ? value : staticFile5(staticFileInputFromAssetPath(value));
1172
1310
  var ImageCollage = ({ images, layout, stagger }) => {
@@ -1176,7 +1314,7 @@ var ImageCollage = ({ images, layout, stagger }) => {
1176
1314
  const cols = Math.ceil(Math.sqrt(n));
1177
1315
  const rows = Math.ceil(n / cols);
1178
1316
  if (layout === "grid") {
1179
- return /* @__PURE__ */ jsx19(AbsoluteFill16, { style: { padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ jsx19(
1317
+ return /* @__PURE__ */ jsx23(Fill, { style: { padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ jsx23(
1180
1318
  "div",
1181
1319
  {
1182
1320
  style: {
@@ -1190,19 +1328,19 @@ var ImageCollage = ({ images, layout, stagger }) => {
1190
1328
  children: images.map((img, i) => {
1191
1329
  const p = spring5({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1192
1330
  return /* @__PURE__ */ jsxs6("div", { style: { position: "relative", overflow: "hidden", borderRadius: 18, opacity: p, transform: `scale(${0.92 + 0.08 * p})` }, children: [
1193
- /* @__PURE__ */ jsx19(Img3, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1194
- img.caption ? /* @__PURE__ */ jsx19("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
1331
+ /* @__PURE__ */ jsx23(Img3, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1332
+ img.caption ? /* @__PURE__ */ jsx23("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
1195
1333
  ] }, i);
1196
1334
  })
1197
1335
  }
1198
1336
  ) });
1199
1337
  }
1200
- return /* @__PURE__ */ jsx19(AbsoluteFill16, { children: images.map((img, i) => {
1338
+ return /* @__PURE__ */ jsx23(Fill, { children: images.map((img, i) => {
1201
1339
  const p = spring5({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1202
1340
  const baseRotate = layout === "stack" ? (i - (n - 1) / 2) * 4 : i * 17 % 20 - 10;
1203
1341
  const baseX = layout === "scatter" ? i * 137 % 300 - 150 : 0;
1204
1342
  const baseY = layout === "scatter" ? (i + 3) * 89 % 200 - 100 : 0;
1205
- return /* @__PURE__ */ jsx19(
1343
+ return /* @__PURE__ */ jsx23(
1206
1344
  "div",
1207
1345
  {
1208
1346
  style: {
@@ -1217,7 +1355,7 @@ var ImageCollage = ({ images, layout, stagger }) => {
1217
1355
  overflow: "hidden",
1218
1356
  boxShadow: "0 20px 60px rgba(0,0,0,0.35)"
1219
1357
  },
1220
- children: /* @__PURE__ */ jsx19(Img3, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } })
1358
+ children: /* @__PURE__ */ jsx23(Img3, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } })
1221
1359
  },
1222
1360
  i
1223
1361
  );
@@ -1231,13 +1369,13 @@ var ImageCollageComponentMetadata = {
1231
1369
  };
1232
1370
 
1233
1371
  // src/components/composites/ImageReveal.tsx
1234
- import { AbsoluteFill as AbsoluteFill17, Img as Img4, interpolate as interpolate9, staticFile as staticFile6, useCurrentFrame as useCurrentFrame12 } from "remotion";
1235
- import { z as z22 } from "zod";
1236
- import { jsx as jsx20 } from "react/jsx-runtime";
1237
- var ImageRevealPropsSchema = z22.object({
1238
- src: z22.string().min(1),
1239
- direction: z22.enum(["left", "right", "top", "bottom", "center"]).default("left"),
1240
- revealType: z22.enum(["wipe", "expand", "iris"]).default("wipe")
1372
+ import { Img as Img4, interpolate as interpolate9, staticFile as staticFile6, useCurrentFrame as useCurrentFrame12 } from "remotion";
1373
+ import { z as z25 } from "zod";
1374
+ import { jsx as jsx24 } from "react/jsx-runtime";
1375
+ var ImageRevealPropsSchema = z25.object({
1376
+ src: z25.string().min(1),
1377
+ direction: z25.enum(["left", "right", "top", "bottom", "center"]).default("left"),
1378
+ revealType: z25.enum(["wipe", "expand", "iris"]).default("wipe")
1241
1379
  });
1242
1380
  var resolveAsset5 = (value) => isRemoteAssetPath(value) ? value : staticFile6(staticFileInputFromAssetPath(value));
1243
1381
  var ImageReveal = ({ src, direction, revealType, __wavesDurationInFrames }) => {
@@ -1267,7 +1405,7 @@ var ImageReveal = ({ src, direction, revealType, __wavesDurationInFrames }) => {
1267
1405
  clipPath = `circle(${Math.round(150 * p)}% at 50% 50%)`;
1268
1406
  }
1269
1407
  const opacity = revealType === "expand" ? p : 1;
1270
- return /* @__PURE__ */ jsx20(AbsoluteFill17, { children: /* @__PURE__ */ jsx20(
1408
+ return /* @__PURE__ */ jsx24(Fill, { children: /* @__PURE__ */ jsx24(
1271
1409
  Img4,
1272
1410
  {
1273
1411
  src: resolveAsset5(src),
@@ -1291,14 +1429,14 @@ var ImageRevealComponentMetadata = {
1291
1429
  };
1292
1430
 
1293
1431
  // src/components/composites/ImageSequence.tsx
1294
- import { AbsoluteFill as AbsoluteFill18, Img as Img5, staticFile as staticFile7, useCurrentFrame as useCurrentFrame13, useVideoConfig as useVideoConfig6 } from "remotion";
1295
- import { z as z23 } from "zod";
1296
- import { jsx as jsx21 } from "react/jsx-runtime";
1297
- var ImageSequencePropsSchema = z23.object({
1298
- basePath: z23.string().min(1),
1299
- frameCount: z23.number().int().positive(),
1300
- filePattern: z23.string().default("frame_{frame}.png"),
1301
- fps: z23.number().int().min(1).max(120).default(30)
1432
+ import { Img as Img5, staticFile as staticFile7, useCurrentFrame as useCurrentFrame13, useVideoConfig as useVideoConfig6 } from "remotion";
1433
+ import { z as z26 } from "zod";
1434
+ import { jsx as jsx25 } from "react/jsx-runtime";
1435
+ var ImageSequencePropsSchema = z26.object({
1436
+ basePath: z26.string().min(1),
1437
+ frameCount: z26.number().int().positive(),
1438
+ filePattern: z26.string().default("frame_{frame}.png"),
1439
+ fps: z26.number().int().min(1).max(120).default(30)
1302
1440
  });
1303
1441
  function joinPath(base, file) {
1304
1442
  if (base.endsWith("/")) return `${base}${file}`;
@@ -1311,7 +1449,7 @@ var ImageSequence = ({ basePath, frameCount, filePattern, fps }) => {
1311
1449
  const index = Math.min(frameCount - 1, Math.max(0, Math.floor(frame * fps / compFps)));
1312
1450
  const file = filePattern.replace("{frame}", String(index));
1313
1451
  const src = joinPath(basePath, file);
1314
- return /* @__PURE__ */ jsx21(AbsoluteFill18, { children: /* @__PURE__ */ jsx21(Img5, { src: resolveAsset6(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) });
1452
+ return /* @__PURE__ */ jsx25(Fill, { children: /* @__PURE__ */ jsx25(Img5, { src: resolveAsset6(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) });
1315
1453
  };
1316
1454
  var ImageSequenceComponentMetadata = {
1317
1455
  kind: "composite",
@@ -1321,18 +1459,18 @@ var ImageSequenceComponentMetadata = {
1321
1459
  };
1322
1460
 
1323
1461
  // src/components/composites/ImageWithCaption.tsx
1324
- import { AbsoluteFill as AbsoluteFill19, Img as Img6, interpolate as interpolate10, staticFile as staticFile8, useCurrentFrame as useCurrentFrame14 } from "remotion";
1325
- import { z as z24 } from "zod";
1326
- import { jsx as jsx22, jsxs as jsxs7 } from "react/jsx-runtime";
1327
- var CaptionStyleSchema = z24.object({
1328
- fontSize: z24.number().min(12).max(80).default(32),
1329
- color: z24.string().default("#FFFFFF"),
1330
- backgroundColor: z24.string().default("rgba(0,0,0,0.7)")
1462
+ import { Img as Img6, interpolate as interpolate10, staticFile as staticFile8, useCurrentFrame as useCurrentFrame14 } from "remotion";
1463
+ import { z as z27 } from "zod";
1464
+ import { jsx as jsx26, jsxs as jsxs7 } from "react/jsx-runtime";
1465
+ var CaptionStyleSchema = z27.object({
1466
+ fontSize: z27.number().min(12).max(80).default(32),
1467
+ color: z27.string().default("#FFFFFF"),
1468
+ backgroundColor: z27.string().default("rgba(0,0,0,0.7)")
1331
1469
  });
1332
- var ImageWithCaptionPropsSchema = z24.object({
1333
- src: z24.string().min(1),
1334
- caption: z24.string().max(200),
1335
- captionPosition: z24.enum(["top", "bottom", "overlay"]).default("bottom"),
1470
+ var ImageWithCaptionPropsSchema = z27.object({
1471
+ src: z27.string().min(1),
1472
+ caption: z27.string().max(200),
1473
+ captionPosition: z27.enum(["top", "bottom", "overlay"]).default("bottom"),
1336
1474
  captionStyle: CaptionStyleSchema.optional()
1337
1475
  });
1338
1476
  var resolveAsset7 = (value) => isRemoteAssetPath(value) ? value : staticFile8(staticFileInputFromAssetPath(value));
@@ -1340,7 +1478,7 @@ var ImageWithCaption = ({ src, caption, captionPosition, captionStyle }) => {
1340
1478
  const frame = useCurrentFrame14();
1341
1479
  const p = interpolate10(frame, [8, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1342
1480
  const style = captionStyle ?? { fontSize: 32, color: "#FFFFFF", backgroundColor: "rgba(0,0,0,0.7)" };
1343
- const captionBox = /* @__PURE__ */ jsx22(
1481
+ const captionBox = /* @__PURE__ */ jsx26(
1344
1482
  "div",
1345
1483
  {
1346
1484
  style: {
@@ -1357,15 +1495,15 @@ var ImageWithCaption = ({ src, caption, captionPosition, captionStyle }) => {
1357
1495
  }
1358
1496
  );
1359
1497
  if (captionPosition === "top" || captionPosition === "bottom") {
1360
- return /* @__PURE__ */ jsxs7(AbsoluteFill19, { style: { display: "flex", flexDirection: "column" }, children: [
1498
+ return /* @__PURE__ */ jsxs7(Fill, { style: { display: "flex", flexDirection: "column" }, children: [
1361
1499
  captionPosition === "top" ? captionBox : null,
1362
- /* @__PURE__ */ jsx22("div", { style: { flex: 1, position: "relative" }, children: /* @__PURE__ */ jsx22(Img6, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) }),
1500
+ /* @__PURE__ */ jsx26("div", { style: { flex: 1, position: "relative" }, children: /* @__PURE__ */ jsx26(Img6, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) }),
1363
1501
  captionPosition === "bottom" ? captionBox : null
1364
1502
  ] });
1365
1503
  }
1366
- return /* @__PURE__ */ jsxs7(AbsoluteFill19, { children: [
1367
- /* @__PURE__ */ jsx22(Img6, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1368
- /* @__PURE__ */ jsx22("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0 }, children: captionBox })
1504
+ return /* @__PURE__ */ jsxs7(Fill, { children: [
1505
+ /* @__PURE__ */ jsx26(Img6, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1506
+ /* @__PURE__ */ jsx26("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0 }, children: captionBox })
1369
1507
  ] });
1370
1508
  };
1371
1509
  var ImageWithCaptionComponentMetadata = {
@@ -1376,17 +1514,17 @@ var ImageWithCaptionComponentMetadata = {
1376
1514
  };
1377
1515
 
1378
1516
  // src/components/composites/InstagramStory.tsx
1379
- import { AbsoluteFill as AbsoluteFill20, Audio as RemotionAudio2, Img as Img7, interpolate as interpolate11, staticFile as staticFile9, useCurrentFrame as useCurrentFrame15 } from "remotion";
1380
- import { z as z25 } from "zod";
1381
- import { jsx as jsx23, jsxs as jsxs8 } from "react/jsx-runtime";
1382
- var InstagramStoryPropsSchema = z25.object({
1383
- backgroundImage: z25.string().optional(),
1384
- backgroundColor: z25.string().default("#000000"),
1385
- profilePic: z25.string().optional(),
1386
- username: z25.string().optional(),
1387
- text: z25.string().max(100).optional(),
1388
- sticker: z25.enum(["none", "poll", "question", "countdown"]).default("none"),
1389
- musicTrack: z25.string().optional()
1517
+ import { Audio as RemotionAudio2, Img as Img7, interpolate as interpolate11, staticFile as staticFile9, useCurrentFrame as useCurrentFrame15 } from "remotion";
1518
+ import { z as z28 } from "zod";
1519
+ import { jsx as jsx27, jsxs as jsxs8 } from "react/jsx-runtime";
1520
+ var InstagramStoryPropsSchema = z28.object({
1521
+ backgroundImage: z28.string().optional(),
1522
+ backgroundColor: z28.string().default("#000000"),
1523
+ profilePic: z28.string().optional(),
1524
+ username: z28.string().optional(),
1525
+ text: z28.string().max(100).optional(),
1526
+ sticker: z28.enum(["none", "poll", "question", "countdown"]).default("none"),
1527
+ musicTrack: z28.string().optional()
1390
1528
  });
1391
1529
  var resolveAsset8 = (value) => isRemoteAssetPath(value) ? value : staticFile9(staticFileInputFromAssetPath(value));
1392
1530
  var InstagramStory = ({
@@ -1400,15 +1538,15 @@ var InstagramStory = ({
1400
1538
  }) => {
1401
1539
  const frame = useCurrentFrame15();
1402
1540
  const fade = interpolate11(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1403
- return /* @__PURE__ */ jsxs8(AbsoluteFill20, { style: { backgroundColor }, children: [
1404
- musicTrack ? /* @__PURE__ */ jsx23(RemotionAudio2, { src: resolveAsset8(musicTrack), volume: 0.6 }) : null,
1405
- backgroundImage ? /* @__PURE__ */ jsx23(Img7, { src: resolveAsset8(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover", opacity: fade } }) : null,
1406
- /* @__PURE__ */ jsxs8(AbsoluteFill20, { style: { padding: 60, boxSizing: "border-box" }, children: [
1541
+ return /* @__PURE__ */ jsxs8(Fill, { style: { backgroundColor }, children: [
1542
+ musicTrack ? /* @__PURE__ */ jsx27(RemotionAudio2, { src: resolveAsset8(musicTrack), volume: 0.6 }) : null,
1543
+ backgroundImage ? /* @__PURE__ */ jsx27(Img7, { src: resolveAsset8(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover", opacity: fade } }) : null,
1544
+ /* @__PURE__ */ jsxs8(Fill, { style: { padding: 60, boxSizing: "border-box" }, children: [
1407
1545
  profilePic || username ? /* @__PURE__ */ jsxs8("div", { style: { display: "flex", alignItems: "center", gap: 18 }, children: [
1408
- profilePic ? /* @__PURE__ */ jsx23(Img7, { src: resolveAsset8(profilePic), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ jsx23("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "rgba(255,255,255,0.2)" } }),
1409
- /* @__PURE__ */ jsx23("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 34 }, children: username ?? "username" })
1546
+ profilePic ? /* @__PURE__ */ jsx27(Img7, { src: resolveAsset8(profilePic), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ jsx27("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "rgba(255,255,255,0.2)" } }),
1547
+ /* @__PURE__ */ jsx27("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 34 }, children: username ?? "username" })
1410
1548
  ] }) : null,
1411
- text ? /* @__PURE__ */ jsx23(
1549
+ text ? /* @__PURE__ */ jsx27(
1412
1550
  "div",
1413
1551
  {
1414
1552
  style: {
@@ -1422,7 +1560,7 @@ var InstagramStory = ({
1422
1560
  children: text
1423
1561
  }
1424
1562
  ) : null,
1425
- sticker !== "none" ? /* @__PURE__ */ jsx23(
1563
+ sticker !== "none" ? /* @__PURE__ */ jsx27(
1426
1564
  "div",
1427
1565
  {
1428
1566
  style: {
@@ -1451,16 +1589,16 @@ var InstagramStoryComponentMetadata = {
1451
1589
  };
1452
1590
 
1453
1591
  // src/components/composites/IntroScene.tsx
1454
- import { AbsoluteFill as AbsoluteFill21, Audio as RemotionAudio3, Img as Img8, interpolate as interpolate12, spring as spring6, staticFile as staticFile10, useCurrentFrame as useCurrentFrame16, useVideoConfig as useVideoConfig7 } from "remotion";
1455
- import { z as z26 } from "zod";
1456
- import { jsx as jsx24, jsxs as jsxs9 } from "react/jsx-runtime";
1457
- var IntroScenePropsSchema = z26.object({
1458
- logoSrc: z26.string().min(1),
1459
- companyName: z26.string().min(1),
1460
- tagline: z26.string().optional(),
1461
- backgroundColor: z26.string().default("#000000"),
1462
- primaryColor: z26.string().default("#FFFFFF"),
1463
- musicTrack: z26.string().optional()
1592
+ import { Audio as RemotionAudio3, Img as Img8, interpolate as interpolate12, spring as spring6, staticFile as staticFile10, useCurrentFrame as useCurrentFrame16, useVideoConfig as useVideoConfig7 } from "remotion";
1593
+ import { z as z29 } from "zod";
1594
+ import { jsx as jsx28, jsxs as jsxs9 } from "react/jsx-runtime";
1595
+ var IntroScenePropsSchema = z29.object({
1596
+ logoSrc: z29.string().min(1),
1597
+ companyName: z29.string().min(1),
1598
+ tagline: z29.string().optional(),
1599
+ backgroundColor: z29.string().default("#000000"),
1600
+ primaryColor: z29.string().default("#FFFFFF"),
1601
+ musicTrack: z29.string().optional()
1464
1602
  });
1465
1603
  var resolveAsset9 = (value) => isRemoteAssetPath(value) ? value : staticFile10(staticFileInputFromAssetPath(value));
1466
1604
  var IntroScene = ({
@@ -1479,18 +1617,18 @@ var IntroScene = ({
1479
1617
  const nameOpacity = interpolate12(frame, [20, 60], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1480
1618
  const taglineY = interpolate12(frame, [50, 80], [20, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1481
1619
  const outroFade = interpolate12(frame, [Math.max(0, total - 20), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1482
- return /* @__PURE__ */ jsxs9(AbsoluteFill21, { style: { backgroundColor, justifyContent: "center", alignItems: "center" }, children: [
1483
- musicTrack ? /* @__PURE__ */ jsx24(RemotionAudio3, { src: resolveAsset9(musicTrack), volume: 0.7 }) : null,
1620
+ return /* @__PURE__ */ jsxs9(Fill, { style: { backgroundColor, display: "flex", justifyContent: "center", alignItems: "center" }, children: [
1621
+ musicTrack ? /* @__PURE__ */ jsx28(RemotionAudio3, { src: resolveAsset9(musicTrack), volume: 0.7 }) : null,
1484
1622
  /* @__PURE__ */ jsxs9("div", { style: { textAlign: "center", opacity: outroFade }, children: [
1485
- /* @__PURE__ */ jsx24(
1623
+ /* @__PURE__ */ jsx28(
1486
1624
  Img8,
1487
1625
  {
1488
1626
  src: resolveAsset9(logoSrc),
1489
1627
  style: { width: 280, height: 280, objectFit: "contain", transform: `scale(${logoP})` }
1490
1628
  }
1491
1629
  ),
1492
- /* @__PURE__ */ jsx24("div", { style: { marginTop: 24, color: primaryColor, fontSize: 64, fontWeight: 900, opacity: nameOpacity }, children: companyName }),
1493
- tagline ? /* @__PURE__ */ jsx24(
1630
+ /* @__PURE__ */ jsx28("div", { style: { marginTop: 24, color: primaryColor, fontSize: 64, fontWeight: 900, opacity: nameOpacity }, children: companyName }),
1631
+ tagline ? /* @__PURE__ */ jsx28(
1494
1632
  "div",
1495
1633
  {
1496
1634
  style: {
@@ -1515,15 +1653,15 @@ var IntroSceneComponentMetadata = {
1515
1653
  };
1516
1654
 
1517
1655
  // src/components/composites/KenBurnsImage.tsx
1518
- import { AbsoluteFill as AbsoluteFill22, Img as Img9, interpolate as interpolate13, staticFile as staticFile11, useCurrentFrame as useCurrentFrame17 } from "remotion";
1519
- import { z as z27 } from "zod";
1520
- import { jsx as jsx25 } from "react/jsx-runtime";
1521
- var KenBurnsImagePropsSchema = z27.object({
1522
- src: z27.string().min(1),
1523
- startScale: z27.number().min(1).max(2).default(1),
1524
- endScale: z27.number().min(1).max(2).default(1.2),
1525
- panDirection: z27.enum(["none", "left", "right", "up", "down"]).default("none"),
1526
- panAmount: z27.number().min(0).max(100).default(50)
1656
+ import { Img as Img9, interpolate as interpolate13, staticFile as staticFile11, useCurrentFrame as useCurrentFrame17 } from "remotion";
1657
+ import { z as z30 } from "zod";
1658
+ import { jsx as jsx29 } from "react/jsx-runtime";
1659
+ var KenBurnsImagePropsSchema = z30.object({
1660
+ src: z30.string().min(1),
1661
+ startScale: z30.number().min(1).max(2).default(1),
1662
+ endScale: z30.number().min(1).max(2).default(1.2),
1663
+ panDirection: z30.enum(["none", "left", "right", "up", "down"]).default("none"),
1664
+ panAmount: z30.number().min(0).max(100).default(50)
1527
1665
  });
1528
1666
  var resolveAsset10 = (value) => isRemoteAssetPath(value) ? value : staticFile11(staticFileInputFromAssetPath(value));
1529
1667
  var KenBurnsImage = ({
@@ -1540,7 +1678,7 @@ var KenBurnsImage = ({
1540
1678
  const scale = startScale + (endScale - startScale) * t;
1541
1679
  const dx = panDirection === "left" ? -panAmount * t : panDirection === "right" ? panAmount * t : 0;
1542
1680
  const dy = panDirection === "up" ? -panAmount * t : panDirection === "down" ? panAmount * t : 0;
1543
- return /* @__PURE__ */ jsx25(AbsoluteFill22, { children: /* @__PURE__ */ jsx25(
1681
+ return /* @__PURE__ */ jsx29(Fill, { children: /* @__PURE__ */ jsx29(
1544
1682
  Img9,
1545
1683
  {
1546
1684
  src: resolveAsset10(src),
@@ -1562,20 +1700,20 @@ var KenBurnsImageComponentMetadata = {
1562
1700
  };
1563
1701
 
1564
1702
  // src/components/composites/KineticTypography.tsx
1565
- import { AbsoluteFill as AbsoluteFill23, spring as spring7, useCurrentFrame as useCurrentFrame18, useVideoConfig as useVideoConfig8 } from "remotion";
1566
- import { z as z28 } from "zod";
1567
- import { jsx as jsx26 } from "react/jsx-runtime";
1568
- var WordSchema = z28.object({
1569
- text: z28.string().min(1),
1570
- emphasis: z28.enum(["normal", "bold", "giant"]).default("normal")
1703
+ import { spring as spring7, useCurrentFrame as useCurrentFrame18, useVideoConfig as useVideoConfig8 } from "remotion";
1704
+ import { z as z31 } from "zod";
1705
+ import { jsx as jsx30 } from "react/jsx-runtime";
1706
+ var WordSchema = z31.object({
1707
+ text: z31.string().min(1),
1708
+ emphasis: z31.enum(["normal", "bold", "giant"]).default("normal")
1571
1709
  });
1572
- var KineticTypographyPropsSchema = z28.object({
1573
- words: z28.array(WordSchema).min(1).max(50),
1574
- fontSize: z28.number().min(12).max(140).default(48),
1575
- color: z28.string().default("#FFFFFF"),
1576
- fontFamily: z28.string().default("Inter"),
1577
- timing: z28.array(z28.number().int().min(0)).min(1).describe("Frame timing for each word"),
1578
- transition: z28.enum(["fade", "scale", "slideLeft", "slideRight"]).default("scale")
1710
+ var KineticTypographyPropsSchema = z31.object({
1711
+ words: z31.array(WordSchema).min(1).max(50),
1712
+ fontSize: z31.number().min(12).max(140).default(48),
1713
+ color: z31.string().default("#FFFFFF"),
1714
+ fontFamily: z31.string().default("Inter"),
1715
+ timing: z31.array(z31.number().int().min(0)).min(1).describe("Frame timing for each word"),
1716
+ transition: z31.enum(["fade", "scale", "slideLeft", "slideRight"]).default("scale")
1579
1717
  });
1580
1718
  var KineticTypography = ({
1581
1719
  words,
@@ -1605,7 +1743,7 @@ var KineticTypography = ({
1605
1743
  const opacity = transition === "fade" ? progress : 1;
1606
1744
  const scale = transition === "scale" ? (0.85 + 0.15 * progress) * scaleBase : 1 * scaleBase;
1607
1745
  const tx = transition === "slideLeft" ? 40 * (1 - progress) : transition === "slideRight" ? -40 * (1 - progress) : 0;
1608
- return /* @__PURE__ */ jsx26(AbsoluteFill23, { style: { justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ jsx26(
1746
+ return /* @__PURE__ */ jsx30(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ jsx30(
1609
1747
  "div",
1610
1748
  {
1611
1749
  style: {
@@ -1630,17 +1768,17 @@ var KineticTypographyComponentMetadata = {
1630
1768
  };
1631
1769
 
1632
1770
  // src/components/composites/LineGraph.tsx
1633
- import { AbsoluteFill as AbsoluteFill24, interpolate as interpolate14, useCurrentFrame as useCurrentFrame19 } from "remotion";
1634
- import { z as z29 } from "zod";
1635
- import { jsx as jsx27, jsxs as jsxs10 } from "react/jsx-runtime";
1636
- var PointSchema = z29.object({ x: z29.number(), y: z29.number() });
1637
- var LineGraphPropsSchema = z29.object({
1638
- data: z29.array(PointSchema).min(2).max(50),
1639
- color: z29.string().default("#00FF00"),
1640
- strokeWidth: z29.number().min(1).max(10).default(3),
1641
- showDots: z29.boolean().default(true),
1642
- fillArea: z29.boolean().default(false),
1643
- animate: z29.enum(["draw", "reveal"]).default("draw")
1771
+ import { interpolate as interpolate14, useCurrentFrame as useCurrentFrame19 } from "remotion";
1772
+ import { z as z32 } from "zod";
1773
+ import { jsx as jsx31, jsxs as jsxs10 } from "react/jsx-runtime";
1774
+ var PointSchema = z32.object({ x: z32.number(), y: z32.number() });
1775
+ var LineGraphPropsSchema = z32.object({
1776
+ data: z32.array(PointSchema).min(2).max(50),
1777
+ color: z32.string().default("#00FF00"),
1778
+ strokeWidth: z32.number().min(1).max(10).default(3),
1779
+ showDots: z32.boolean().default(true),
1780
+ fillArea: z32.boolean().default(false),
1781
+ animate: z32.enum(["draw", "reveal"]).default("draw")
1644
1782
  });
1645
1783
  function normalize(data, w, h, pad) {
1646
1784
  const xs = data.map((d) => d.x);
@@ -1676,9 +1814,9 @@ var LineGraph = ({
1676
1814
  const d = toPath(pts);
1677
1815
  const dash = 3e3;
1678
1816
  const dashOffset = dash * (1 - progress);
1679
- return /* @__PURE__ */ jsx27(AbsoluteFill24, { style: { justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ jsxs10("svg", { width: w, height: h, viewBox: `0 0 ${w} ${h}`, children: [
1680
- /* @__PURE__ */ jsx27("defs", { children: /* @__PURE__ */ jsx27("clipPath", { id: "waves-line-reveal", children: /* @__PURE__ */ jsx27("rect", { x: "0", y: "0", width: w * progress, height: h }) }) }),
1681
- fillArea ? /* @__PURE__ */ jsx27(
1817
+ return /* @__PURE__ */ jsx31(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ jsxs10("svg", { viewBox: `0 0 ${w} ${h}`, style: { width: "100%", height: "100%" }, children: [
1818
+ /* @__PURE__ */ jsx31("defs", { children: /* @__PURE__ */ jsx31("clipPath", { id: "waves-line-reveal", children: /* @__PURE__ */ jsx31("rect", { x: "0", y: "0", width: w * progress, height: h }) }) }),
1819
+ fillArea ? /* @__PURE__ */ jsx31(
1682
1820
  "path",
1683
1821
  {
1684
1822
  d: `${d} L ${pts[pts.length - 1].x} ${h - pad} L ${pts[0].x} ${h - pad} Z`,
@@ -1687,7 +1825,7 @@ var LineGraph = ({
1687
1825
  clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0
1688
1826
  }
1689
1827
  ) : null,
1690
- /* @__PURE__ */ jsx27(
1828
+ /* @__PURE__ */ jsx31(
1691
1829
  "path",
1692
1830
  {
1693
1831
  d,
@@ -1701,7 +1839,7 @@ var LineGraph = ({
1701
1839
  clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0
1702
1840
  }
1703
1841
  ),
1704
- showDots ? /* @__PURE__ */ jsx27("g", { clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0, children: pts.map((p, i) => /* @__PURE__ */ jsx27("circle", { cx: p.x, cy: p.y, r: 6, fill: color }, i)) }) : null
1842
+ showDots ? /* @__PURE__ */ jsx31("g", { clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0, children: pts.map((p, i) => /* @__PURE__ */ jsx31("circle", { cx: p.x, cy: p.y, r: 6, fill: color }, i)) }) : null
1705
1843
  ] }) });
1706
1844
  };
1707
1845
  var LineGraphComponentMetadata = {
@@ -1712,14 +1850,14 @@ var LineGraphComponentMetadata = {
1712
1850
  };
1713
1851
 
1714
1852
  // src/components/composites/LogoReveal.tsx
1715
- import { AbsoluteFill as AbsoluteFill25, Audio as RemotionAudio4, Img as Img10, spring as spring8, staticFile as staticFile12, useCurrentFrame as useCurrentFrame20, useVideoConfig as useVideoConfig9 } from "remotion";
1716
- import { z as z30 } from "zod";
1717
- import { jsx as jsx28, jsxs as jsxs11 } from "react/jsx-runtime";
1718
- var LogoRevealPropsSchema = z30.object({
1719
- logoSrc: z30.string().min(1),
1720
- effect: z30.enum(["fade", "scale", "rotate", "slide"]).default("scale"),
1721
- backgroundColor: z30.string().default("#000000"),
1722
- soundEffect: z30.string().optional()
1853
+ import { Audio as RemotionAudio4, Img as Img10, spring as spring8, staticFile as staticFile12, useCurrentFrame as useCurrentFrame20, useVideoConfig as useVideoConfig9 } from "remotion";
1854
+ import { z as z33 } from "zod";
1855
+ import { jsx as jsx32, jsxs as jsxs11 } from "react/jsx-runtime";
1856
+ var LogoRevealPropsSchema = z33.object({
1857
+ logoSrc: z33.string().min(1),
1858
+ effect: z33.enum(["fade", "scale", "rotate", "slide"]).default("scale"),
1859
+ backgroundColor: z33.string().default("#000000"),
1860
+ soundEffect: z33.string().optional()
1723
1861
  });
1724
1862
  var resolveAsset11 = (value) => isRemoteAssetPath(value) ? value : staticFile12(staticFileInputFromAssetPath(value));
1725
1863
  var LogoReveal = ({ logoSrc, effect, backgroundColor, soundEffect }) => {
@@ -1730,9 +1868,9 @@ var LogoReveal = ({ logoSrc, effect, backgroundColor, soundEffect }) => {
1730
1868
  const scale = effect === "scale" ? p : 1;
1731
1869
  const rotate = effect === "rotate" ? (1 - p) * 360 : 0;
1732
1870
  const translateY = effect === "slide" ? -200 * (1 - p) : 0;
1733
- return /* @__PURE__ */ jsxs11(AbsoluteFill25, { style: { backgroundColor, justifyContent: "center", alignItems: "center" }, children: [
1734
- soundEffect ? /* @__PURE__ */ jsx28(RemotionAudio4, { src: resolveAsset11(soundEffect), volume: 1 }) : null,
1735
- /* @__PURE__ */ jsx28(
1871
+ return /* @__PURE__ */ jsxs11(Fill, { style: { backgroundColor, display: "flex", justifyContent: "center", alignItems: "center" }, children: [
1872
+ soundEffect ? /* @__PURE__ */ jsx32(RemotionAudio4, { src: resolveAsset11(soundEffect), volume: 1 }) : null,
1873
+ /* @__PURE__ */ jsx32(
1736
1874
  Img10,
1737
1875
  {
1738
1876
  src: resolveAsset11(logoSrc),
@@ -1755,20 +1893,20 @@ var LogoRevealComponentMetadata = {
1755
1893
  };
1756
1894
 
1757
1895
  // src/components/composites/OutroScene.tsx
1758
- import { AbsoluteFill as AbsoluteFill26, Img as Img11, spring as spring9, staticFile as staticFile13, useCurrentFrame as useCurrentFrame21, useVideoConfig as useVideoConfig10 } from "remotion";
1759
- import { z as z31 } from "zod";
1760
- import { jsx as jsx29, jsxs as jsxs12 } from "react/jsx-runtime";
1761
- var CtaSchema = z31.object({ text: z31.string().min(1), icon: z31.string().optional() });
1762
- var HandleSchema = z31.object({
1763
- platform: z31.enum(["twitter", "instagram", "youtube", "linkedin"]),
1764
- handle: z31.string().min(1)
1896
+ import { Img as Img11, spring as spring9, staticFile as staticFile13, useCurrentFrame as useCurrentFrame21, useVideoConfig as useVideoConfig10 } from "remotion";
1897
+ import { z as z34 } from "zod";
1898
+ import { jsx as jsx33, jsxs as jsxs12 } from "react/jsx-runtime";
1899
+ var CtaSchema = z34.object({ text: z34.string().min(1), icon: z34.string().optional() });
1900
+ var HandleSchema = z34.object({
1901
+ platform: z34.enum(["twitter", "instagram", "youtube", "linkedin"]),
1902
+ handle: z34.string().min(1)
1765
1903
  });
1766
- var OutroScenePropsSchema = z31.object({
1767
- logoSrc: z31.string().min(1),
1768
- message: z31.string().default("Thank You"),
1769
- ctaButtons: z31.array(CtaSchema).max(3).optional(),
1770
- socialHandles: z31.array(HandleSchema).max(4).optional(),
1771
- backgroundColor: z31.string().default("#000000")
1904
+ var OutroScenePropsSchema = z34.object({
1905
+ logoSrc: z34.string().min(1),
1906
+ message: z34.string().default("Thank You"),
1907
+ ctaButtons: z34.array(CtaSchema).max(3).optional(),
1908
+ socialHandles: z34.array(HandleSchema).max(4).optional(),
1909
+ backgroundColor: z34.string().default("#000000")
1772
1910
  });
1773
1911
  var resolveAsset12 = (value) => isRemoteAssetPath(value) ? value : staticFile13(staticFileInputFromAssetPath(value));
1774
1912
  var OutroScene = ({ logoSrc, message, ctaButtons, socialHandles, backgroundColor }) => {
@@ -1777,10 +1915,10 @@ var OutroScene = ({ logoSrc, message, ctaButtons, socialHandles, backgroundColor
1777
1915
  const logoP = spring9({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1778
1916
  const msgP = spring9({ frame: frame - 18, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1779
1917
  const ctaP = spring9({ frame: frame - 40, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1780
- return /* @__PURE__ */ jsx29(AbsoluteFill26, { style: { backgroundColor, justifyContent: "center", alignItems: "center", padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ jsxs12("div", { style: { textAlign: "center" }, children: [
1781
- /* @__PURE__ */ jsx29(Img11, { src: resolveAsset12(logoSrc), style: { width: 220, height: 220, objectFit: "contain", transform: `scale(${logoP})` } }),
1782
- /* @__PURE__ */ jsx29("div", { style: { marginTop: 24, color: "#FFFFFF", fontSize: 72, fontWeight: 1e3, opacity: msgP }, children: message }),
1783
- ctaButtons?.length ? /* @__PURE__ */ jsx29("div", { style: { marginTop: 34, display: "flex", gap: 18, justifyContent: "center", opacity: ctaP }, children: ctaButtons.map((b, i) => /* @__PURE__ */ jsxs12(
1918
+ return /* @__PURE__ */ jsx33(Fill, { style: { backgroundColor, display: "flex", justifyContent: "center", alignItems: "center", padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ jsxs12("div", { style: { textAlign: "center" }, children: [
1919
+ /* @__PURE__ */ jsx33(Img11, { src: resolveAsset12(logoSrc), style: { width: 220, height: 220, objectFit: "contain", transform: `scale(${logoP})` } }),
1920
+ /* @__PURE__ */ jsx33("div", { style: { marginTop: 24, color: "#FFFFFF", fontSize: 72, fontWeight: 1e3, opacity: msgP }, children: message }),
1921
+ ctaButtons?.length ? /* @__PURE__ */ jsx33("div", { style: { marginTop: 34, display: "flex", gap: 18, justifyContent: "center", opacity: ctaP }, children: ctaButtons.map((b, i) => /* @__PURE__ */ jsxs12(
1784
1922
  "div",
1785
1923
  {
1786
1924
  style: {
@@ -1798,7 +1936,7 @@ var OutroScene = ({ logoSrc, message, ctaButtons, socialHandles, backgroundColor
1798
1936
  },
1799
1937
  i
1800
1938
  )) }) : null,
1801
- socialHandles?.length ? /* @__PURE__ */ jsx29("div", { style: { marginTop: 50, display: "flex", flexDirection: "column", gap: 10, opacity: ctaP }, children: socialHandles.map((h, i) => /* @__PURE__ */ jsxs12("div", { style: { color: "rgba(255,255,255,0.85)", fontSize: 26, fontWeight: 800 }, children: [
1939
+ socialHandles?.length ? /* @__PURE__ */ jsx33("div", { style: { marginTop: 50, display: "flex", flexDirection: "column", gap: 10, opacity: ctaP }, children: socialHandles.map((h, i) => /* @__PURE__ */ jsxs12("div", { style: { color: "rgba(255,255,255,0.85)", fontSize: 26, fontWeight: 800 }, children: [
1802
1940
  h.platform,
1803
1941
  ": ",
1804
1942
  h.handle
@@ -1813,19 +1951,19 @@ var OutroSceneComponentMetadata = {
1813
1951
  };
1814
1952
 
1815
1953
  // src/components/composites/OutlineText.tsx
1816
- import { AbsoluteFill as AbsoluteFill27, interpolate as interpolate15, useCurrentFrame as useCurrentFrame22 } from "remotion";
1817
- import { z as z32 } from "zod";
1818
- import { jsx as jsx30, jsxs as jsxs13 } from "react/jsx-runtime";
1819
- var OutlineTextPropsSchema = z32.object({
1820
- content: z32.string().max(50),
1821
- fontSize: z32.number().min(8).max(240).default(96),
1822
- outlineColor: z32.string().default("#FFFFFF"),
1823
- fillColor: z32.string().default("#000000"),
1824
- fontFamily: z32.string().default("Inter"),
1825
- fontWeight: z32.number().int().min(100).max(900).default(800),
1826
- position: z32.enum(["top", "center", "bottom"]).default("center"),
1827
- animation: z32.enum(["draw", "fill"]).default("draw"),
1828
- strokeWidth: z32.number().min(1).max(10).default(3)
1954
+ import { interpolate as interpolate15, useCurrentFrame as useCurrentFrame22 } from "remotion";
1955
+ import { z as z35 } from "zod";
1956
+ import { jsx as jsx34, jsxs as jsxs13 } from "react/jsx-runtime";
1957
+ var OutlineTextPropsSchema = z35.object({
1958
+ content: z35.string().max(50),
1959
+ fontSize: z35.number().min(8).max(240).default(96),
1960
+ outlineColor: z35.string().default("#FFFFFF"),
1961
+ fillColor: z35.string().default("#000000"),
1962
+ fontFamily: z35.string().default("Inter"),
1963
+ fontWeight: z35.number().int().min(100).max(900).default(800),
1964
+ position: z35.enum(["top", "center", "bottom"]).default("center"),
1965
+ animation: z35.enum(["draw", "fill"]).default("draw"),
1966
+ strokeWidth: z35.number().min(1).max(10).default(3)
1829
1967
  });
1830
1968
  var positionStyles3 = (position) => {
1831
1969
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -1847,8 +1985,8 @@ var OutlineText = ({
1847
1985
  const t = interpolate15(frame, [0, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1848
1986
  const strokeOpacity = animation === "draw" ? t : 1;
1849
1987
  const fillOpacity = animation === "fill" ? t : 0;
1850
- return /* @__PURE__ */ jsxs13(AbsoluteFill27, { style: { display: "flex", ...positionStyles3(position) }, children: [
1851
- /* @__PURE__ */ jsx30(
1988
+ return /* @__PURE__ */ jsxs13(Fill, { style: { display: "flex", ...positionStyles3(position) }, children: [
1989
+ /* @__PURE__ */ jsx34(
1852
1990
  "div",
1853
1991
  {
1854
1992
  style: {
@@ -1865,7 +2003,7 @@ var OutlineText = ({
1865
2003
  children: content
1866
2004
  }
1867
2005
  ),
1868
- /* @__PURE__ */ jsx30(
2006
+ /* @__PURE__ */ jsx34(
1869
2007
  "div",
1870
2008
  {
1871
2009
  style: {
@@ -1892,16 +2030,16 @@ var OutlineTextComponentMetadata = {
1892
2030
  };
1893
2031
 
1894
2032
  // src/components/composites/ProgressBar.tsx
1895
- import { AbsoluteFill as AbsoluteFill28, interpolate as interpolate16, useCurrentFrame as useCurrentFrame23 } from "remotion";
1896
- import { z as z33 } from "zod";
1897
- import { jsx as jsx31, jsxs as jsxs14 } from "react/jsx-runtime";
1898
- var ProgressBarPropsSchema = z33.object({
1899
- label: z33.string().optional(),
1900
- color: z33.string().default("#00FF00"),
1901
- backgroundColor: z33.string().default("rgba(255,255,255,0.2)"),
1902
- height: z33.number().min(5).max(50).default(10),
1903
- position: z33.enum(["top", "bottom"]).default("bottom"),
1904
- showPercentage: z33.boolean().default(true)
2033
+ import { interpolate as interpolate16, useCurrentFrame as useCurrentFrame23 } from "remotion";
2034
+ import { z as z36 } from "zod";
2035
+ import { jsx as jsx35, jsxs as jsxs14 } from "react/jsx-runtime";
2036
+ var ProgressBarPropsSchema = z36.object({
2037
+ label: z36.string().optional(),
2038
+ color: z36.string().default("#00FF00"),
2039
+ backgroundColor: z36.string().default("rgba(255,255,255,0.2)"),
2040
+ height: z36.number().min(5).max(50).default(10),
2041
+ position: z36.enum(["top", "bottom"]).default("bottom"),
2042
+ showPercentage: z36.boolean().default(true)
1905
2043
  });
1906
2044
  var ProgressBar = ({
1907
2045
  label,
@@ -1917,12 +2055,12 @@ var ProgressBar = ({
1917
2055
  const p = interpolate16(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1918
2056
  const pct = Math.round(p * 100);
1919
2057
  const yStyle = position === "top" ? { top: 50 } : { bottom: 50 };
1920
- return /* @__PURE__ */ jsx31(AbsoluteFill28, { children: /* @__PURE__ */ jsxs14("div", { style: { position: "absolute", left: 80, right: 80, ...yStyle }, children: [
2058
+ return /* @__PURE__ */ jsx35(Fill, { children: /* @__PURE__ */ jsxs14("div", { style: { position: "absolute", left: 80, right: 80, ...yStyle }, children: [
1921
2059
  label || showPercentage ? /* @__PURE__ */ jsxs14("div", { style: { display: "flex", justifyContent: "space-between", marginBottom: 10, color: "#FFFFFF", fontWeight: 700 }, children: [
1922
- /* @__PURE__ */ jsx31("span", { children: label ?? "" }),
1923
- /* @__PURE__ */ jsx31("span", { children: showPercentage ? `${pct}%` : "" })
2060
+ /* @__PURE__ */ jsx35("span", { children: label ?? "" }),
2061
+ /* @__PURE__ */ jsx35("span", { children: showPercentage ? `${pct}%` : "" })
1924
2062
  ] }) : null,
1925
- /* @__PURE__ */ jsx31("div", { style: { width: "100%", height, backgroundColor, borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ jsx31("div", { style: { width: `${pct}%`, height: "100%", backgroundColor: color } }) })
2063
+ /* @__PURE__ */ jsx35("div", { style: { width: "100%", height, backgroundColor, borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ jsx35("div", { style: { width: `${pct}%`, height: "100%", backgroundColor: color } }) })
1926
2064
  ] }) });
1927
2065
  };
1928
2066
  var ProgressBarComponentMetadata = {
@@ -1933,16 +2071,16 @@ var ProgressBarComponentMetadata = {
1933
2071
  };
1934
2072
 
1935
2073
  // src/components/composites/ProgressRing.tsx
1936
- import { AbsoluteFill as AbsoluteFill29, interpolate as interpolate17, useCurrentFrame as useCurrentFrame24 } from "remotion";
1937
- import { z as z34 } from "zod";
1938
- import { jsx as jsx32, jsxs as jsxs15 } from "react/jsx-runtime";
1939
- var ProgressRingPropsSchema = z34.object({
1940
- percentage: z34.number().min(0).max(100),
1941
- size: z34.number().min(100).max(500).default(200),
1942
- strokeWidth: z34.number().min(5).max(50).default(20),
1943
- color: z34.string().default("#00FF00"),
1944
- backgroundColor: z34.string().default("rgba(255,255,255,0.2)"),
1945
- showLabel: z34.boolean().default(true)
2074
+ import { interpolate as interpolate17, useCurrentFrame as useCurrentFrame24 } from "remotion";
2075
+ import { z as z37 } from "zod";
2076
+ import { jsx as jsx36, jsxs as jsxs15 } from "react/jsx-runtime";
2077
+ var ProgressRingPropsSchema = z37.object({
2078
+ percentage: z37.number().min(0).max(100),
2079
+ size: z37.number().min(100).max(500).default(200),
2080
+ strokeWidth: z37.number().min(5).max(50).default(20),
2081
+ color: z37.string().default("#00FF00"),
2082
+ backgroundColor: z37.string().default("rgba(255,255,255,0.2)"),
2083
+ showLabel: z37.boolean().default(true)
1946
2084
  });
1947
2085
  var ProgressRing = ({
1948
2086
  percentage,
@@ -1961,9 +2099,9 @@ var ProgressRing = ({
1961
2099
  const c = 2 * Math.PI * r;
1962
2100
  const dash = c;
1963
2101
  const offset = c - current / 100 * c;
1964
- return /* @__PURE__ */ jsxs15(AbsoluteFill29, { style: { justifyContent: "center", alignItems: "center" }, children: [
2102
+ return /* @__PURE__ */ jsxs15(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: [
1965
2103
  /* @__PURE__ */ jsxs15("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
1966
- /* @__PURE__ */ jsx32(
2104
+ /* @__PURE__ */ jsx36(
1967
2105
  "circle",
1968
2106
  {
1969
2107
  cx: size / 2,
@@ -1974,7 +2112,7 @@ var ProgressRing = ({
1974
2112
  fill: "transparent"
1975
2113
  }
1976
2114
  ),
1977
- /* @__PURE__ */ jsx32(
2115
+ /* @__PURE__ */ jsx36(
1978
2116
  "circle",
1979
2117
  {
1980
2118
  cx: size / 2,
@@ -2004,14 +2142,15 @@ var ProgressRingComponentMetadata = {
2004
2142
  };
2005
2143
 
2006
2144
  // src/components/composites/SlideTransition.tsx
2007
- import { AbsoluteFill as AbsoluteFill30, interpolate as interpolate18, useCurrentFrame as useCurrentFrame25 } from "remotion";
2008
- import { z as z35 } from "zod";
2009
- import { jsx as jsx33 } from "react/jsx-runtime";
2010
- var SlideTransitionPropsSchema = z35.object({
2011
- durationInFrames: z35.number().int().min(10).max(60).default(30),
2012
- direction: z35.enum(["left", "right", "up", "down"]).default("left"),
2013
- distance: z35.number().int().min(1).max(2e3).default(160),
2014
- phase: z35.enum(["in", "out", "inOut"]).default("inOut")
2145
+ import React7 from "react";
2146
+ import { interpolate as interpolate18, useCurrentFrame as useCurrentFrame25 } from "remotion";
2147
+ import { z as z38 } from "zod";
2148
+ import { jsx as jsx37 } from "react/jsx-runtime";
2149
+ var SlideTransitionPropsSchema = z38.object({
2150
+ durationInFrames: z38.number().int().min(10).max(60).default(30),
2151
+ direction: z38.enum(["left", "right", "up", "down"]).default("left"),
2152
+ distance: z38.number().int().min(1).max(2e3).default(160),
2153
+ phase: z38.enum(["in", "out", "inOut"]).default("inOut")
2015
2154
  });
2016
2155
  function translateFor(direction, delta) {
2017
2156
  if (direction === "left") return { x: -delta, y: 0 };
@@ -2027,6 +2166,7 @@ var SlideTransition = ({
2027
2166
  children,
2028
2167
  __wavesDurationInFrames
2029
2168
  }) => {
2169
+ const layers = React7.Children.toArray(children);
2030
2170
  const frame = useCurrentFrame25();
2031
2171
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2032
2172
  const d = Math.min(durationInFrames, total);
@@ -2049,7 +2189,7 @@ var SlideTransition = ({
2049
2189
  ty += y;
2050
2190
  opacity *= interpolate18(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2051
2191
  }
2052
- return /* @__PURE__ */ jsx33(AbsoluteFill30, { style: { opacity, transform: `translate(${tx}px, ${ty}px)` }, children });
2192
+ return /* @__PURE__ */ jsx37(Fill, { style: { opacity, transform: `translate(${tx}px, ${ty}px)` }, children: layers.map((child, i) => /* @__PURE__ */ jsx37("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
2053
2193
  };
2054
2194
  var SlideTransitionComponentMetadata = {
2055
2195
  kind: "composite",
@@ -2061,16 +2201,15 @@ var SlideTransitionComponentMetadata = {
2061
2201
  };
2062
2202
 
2063
2203
  // src/components/composites/SplitScreen.tsx
2064
- import React from "react";
2065
- import { AbsoluteFill as AbsoluteFill31 } from "remotion";
2066
- import { z as z36 } from "zod";
2067
- import { jsx as jsx34, jsxs as jsxs16 } from "react/jsx-runtime";
2068
- var SplitScreenPropsSchema = z36.object({
2069
- orientation: z36.enum(["vertical", "horizontal"]).default("vertical"),
2070
- split: z36.number().min(0.1).max(0.9).default(0.5),
2071
- gap: z36.number().min(0).default(48),
2072
- padding: z36.number().min(0).default(80),
2073
- dividerColor: z36.string().optional()
2204
+ import React8 from "react";
2205
+ import { z as z39 } from "zod";
2206
+ import { jsx as jsx38, jsxs as jsxs16 } from "react/jsx-runtime";
2207
+ var SplitScreenPropsSchema = z39.object({
2208
+ orientation: z39.enum(["vertical", "horizontal"]).default("vertical"),
2209
+ split: z39.number().min(0.1).max(0.9).default(0.5),
2210
+ gap: z39.number().min(0).default(48),
2211
+ padding: z39.number().min(0).default(80),
2212
+ dividerColor: z39.string().optional()
2074
2213
  });
2075
2214
  var SplitScreen = ({
2076
2215
  orientation,
@@ -2080,14 +2219,14 @@ var SplitScreen = ({
2080
2219
  dividerColor,
2081
2220
  children
2082
2221
  }) => {
2083
- const items = React.Children.toArray(children);
2222
+ const items = React8.Children.toArray(children);
2084
2223
  const first = items[0] ?? null;
2085
2224
  const second = items[1] ?? null;
2086
2225
  const isVertical = orientation === "vertical";
2087
2226
  const flexDirection = isVertical ? "row" : "column";
2088
- return /* @__PURE__ */ jsx34(AbsoluteFill31, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ jsxs16("div", { style: { display: "flex", flexDirection, gap, width: "100%", height: "100%" }, children: [
2089
- /* @__PURE__ */ jsx34("div", { style: { flex: split, position: "relative" }, children: first }),
2090
- dividerColor ? /* @__PURE__ */ jsx34(
2227
+ return /* @__PURE__ */ jsx38(Fill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ jsxs16("div", { style: { display: "flex", flexDirection, gap, width: "100%", height: "100%" }, children: [
2228
+ /* @__PURE__ */ jsx38("div", { style: { flex: split, position: "relative" }, children: first }),
2229
+ dividerColor ? /* @__PURE__ */ jsx38(
2091
2230
  "div",
2092
2231
  {
2093
2232
  style: {
@@ -2098,7 +2237,7 @@ var SplitScreen = ({
2098
2237
  }
2099
2238
  }
2100
2239
  ) : null,
2101
- /* @__PURE__ */ jsx34("div", { style: { flex: 1 - split, position: "relative" }, children: second })
2240
+ /* @__PURE__ */ jsx38("div", { style: { flex: 1 - split, position: "relative" }, children: second })
2102
2241
  ] }) });
2103
2242
  };
2104
2243
  var SplitScreenComponentMetadata = {
@@ -2112,22 +2251,25 @@ var SplitScreenComponentMetadata = {
2112
2251
  };
2113
2252
 
2114
2253
  // src/components/composites/SplitText.tsx
2115
- import { AbsoluteFill as AbsoluteFill32, spring as spring10, useCurrentFrame as useCurrentFrame26, useVideoConfig as useVideoConfig11 } from "remotion";
2116
- import { z as z37 } from "zod";
2117
- import { jsx as jsx35 } from "react/jsx-runtime";
2118
- var SplitTextPropsSchema = z37.object({
2119
- content: z37.string().max(200),
2120
- fontSize: z37.number().min(8).max(200).default(48),
2121
- color: z37.string().default("#FFFFFF"),
2122
- fontFamily: z37.string().default("Inter"),
2123
- position: z37.enum(["top", "center", "bottom"]).default("center"),
2124
- splitBy: z37.enum(["word", "letter"]).default("word"),
2125
- stagger: z37.number().int().min(1).max(10).default(3),
2126
- animation: z37.enum(["fade", "slideUp", "slideDown", "scale", "rotate"]).default("slideUp")
2254
+ import { spring as spring10, useCurrentFrame as useCurrentFrame26, useVideoConfig as useVideoConfig11 } from "remotion";
2255
+ import { z as z40 } from "zod";
2256
+ import { jsx as jsx39 } from "react/jsx-runtime";
2257
+ var SplitTextPropsSchema = z40.object({
2258
+ content: z40.string().max(200),
2259
+ fontSize: z40.number().min(8).max(200).default(48),
2260
+ color: z40.string().default("#FFFFFF"),
2261
+ fontFamily: z40.string().default("Inter"),
2262
+ position: z40.enum(["top", "center", "bottom"]).default("center"),
2263
+ splitBy: z40.enum(["word", "letter"]).default("word"),
2264
+ stagger: z40.number().int().min(1).max(10).default(3),
2265
+ animation: z40.enum(["fade", "slideUp", "slideDown", "scale", "rotate"]).default("slideUp"),
2266
+ maxWidthPct: z40.number().min(0.1).max(1).default(0.9),
2267
+ safeInsetPct: z40.number().min(0).max(0.25).default(0.06)
2127
2268
  });
2128
- var positionStyles4 = (position) => {
2129
- if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 80 };
2130
- if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: 80 };
2269
+ var positionStyles4 = (position, safeInsetPct) => {
2270
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
2271
+ if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: inset };
2272
+ if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: inset };
2131
2273
  return { justifyContent: "center", alignItems: "center" };
2132
2274
  };
2133
2275
  function getItemStyle(progress, animation) {
@@ -2154,12 +2296,14 @@ var SplitText = ({
2154
2296
  position,
2155
2297
  splitBy,
2156
2298
  stagger,
2157
- animation
2299
+ animation,
2300
+ maxWidthPct,
2301
+ safeInsetPct
2158
2302
  }) => {
2159
2303
  const frame = useCurrentFrame26();
2160
2304
  const { fps } = useVideoConfig11();
2161
2305
  const items = splitBy === "letter" ? content.split("") : content.trim().split(/\s+/);
2162
- return /* @__PURE__ */ jsx35(AbsoluteFill32, { style: { display: "flex", ...positionStyles4(position) }, children: /* @__PURE__ */ jsx35(
2306
+ return /* @__PURE__ */ jsx39(Fill, { style: { display: "flex", ...positionStyles4(position, safeInsetPct) }, children: /* @__PURE__ */ jsx39(
2163
2307
  "div",
2164
2308
  {
2165
2309
  style: {
@@ -2167,11 +2311,14 @@ var SplitText = ({
2167
2311
  flexWrap: "wrap",
2168
2312
  justifyContent: "center",
2169
2313
  gap: splitBy === "letter" ? 0 : 12,
2314
+ maxWidth: `${Math.round(maxWidthPct * 100)}%`,
2170
2315
  fontSize,
2171
2316
  color,
2172
2317
  fontFamily,
2173
2318
  fontWeight: 700,
2174
- textAlign: "center"
2319
+ textAlign: "center",
2320
+ overflowWrap: "anywhere",
2321
+ wordBreak: "break-word"
2175
2322
  },
2176
2323
  children: items.map((t, i) => {
2177
2324
  const progress = spring10({
@@ -2179,7 +2326,7 @@ var SplitText = ({
2179
2326
  fps,
2180
2327
  config: { damping: 14, stiffness: 120, mass: 0.9 }
2181
2328
  });
2182
- return /* @__PURE__ */ jsx35(
2329
+ return /* @__PURE__ */ jsx39(
2183
2330
  "span",
2184
2331
  {
2185
2332
  style: {
@@ -2207,19 +2354,19 @@ var SplitTextComponentMetadata = {
2207
2354
  };
2208
2355
 
2209
2356
  // src/components/composites/SubtitleText.tsx
2210
- import { AbsoluteFill as AbsoluteFill33, interpolate as interpolate19, useCurrentFrame as useCurrentFrame27 } from "remotion";
2211
- import { z as z38 } from "zod";
2212
- import { jsx as jsx36 } from "react/jsx-runtime";
2213
- var SubtitleTextPropsSchema = z38.object({
2214
- text: z38.string().max(200),
2215
- fontSize: z38.number().min(12).max(80).default(36),
2216
- color: z38.string().default("#FFFFFF"),
2217
- backgroundColor: z38.string().default("rgba(0,0,0,0.7)"),
2218
- fontFamily: z38.string().default("Inter"),
2219
- position: z38.enum(["top", "bottom"]).default("bottom"),
2220
- maxWidth: z38.number().min(200).max(1200).default(800),
2221
- padding: z38.number().min(0).max(80).default(20),
2222
- highlightWords: z38.array(z38.string()).optional()
2357
+ import { interpolate as interpolate19, useCurrentFrame as useCurrentFrame27 } from "remotion";
2358
+ import { z as z41 } from "zod";
2359
+ import { jsx as jsx40 } from "react/jsx-runtime";
2360
+ var SubtitleTextPropsSchema = z41.object({
2361
+ text: z41.string().max(200),
2362
+ fontSize: z41.number().min(12).max(80).default(36),
2363
+ color: z41.string().default("#FFFFFF"),
2364
+ backgroundColor: z41.string().default("rgba(0,0,0,0.7)"),
2365
+ fontFamily: z41.string().default("Inter"),
2366
+ position: z41.enum(["top", "bottom"]).default("bottom"),
2367
+ maxWidth: z41.number().min(200).max(1200).default(800),
2368
+ padding: z41.number().min(0).max(80).default(20),
2369
+ highlightWords: z41.array(z41.string()).optional()
2223
2370
  });
2224
2371
  function normalizeWord(w) {
2225
2372
  return w.toLowerCase().replace(/[^a-z0-9]/g, "");
@@ -2244,7 +2391,7 @@ var SubtitleText = ({
2244
2391
  const highlights = new Set((highlightWords ?? []).map(normalizeWord));
2245
2392
  const tokens = text.split(/\s+/);
2246
2393
  const yStyle = position === "top" ? { top: 70 } : { bottom: 90 };
2247
- return /* @__PURE__ */ jsx36(AbsoluteFill33, { children: /* @__PURE__ */ jsx36("div", { style: { position: "absolute", left: "50%", transform: "translateX(-50%)", maxWidth, width: "100%", ...yStyle }, children: /* @__PURE__ */ jsx36(
2394
+ return /* @__PURE__ */ jsx40(Fill, { children: /* @__PURE__ */ jsx40("div", { style: { position: "absolute", left: "50%", transform: "translateX(-50%)", maxWidth, width: "100%", ...yStyle }, children: /* @__PURE__ */ jsx40(
2248
2395
  "div",
2249
2396
  {
2250
2397
  style: {
@@ -2263,7 +2410,7 @@ var SubtitleText = ({
2263
2410
  children: tokens.map((t, i) => {
2264
2411
  const n = normalizeWord(t);
2265
2412
  const isHighlighted = highlights.has(n);
2266
- return /* @__PURE__ */ jsx36("span", { style: { color: isHighlighted ? "#FFD60A" : color, marginRight: 8 }, children: t }, i);
2413
+ return /* @__PURE__ */ jsx40("span", { style: { color: isHighlighted ? "#FFD60A" : color, marginRight: 8 }, children: t }, i);
2267
2414
  })
2268
2415
  }
2269
2416
  ) }) });
@@ -2276,17 +2423,19 @@ var SubtitleTextComponentMetadata = {
2276
2423
  };
2277
2424
 
2278
2425
  // src/components/composites/TikTokCaption.tsx
2279
- import { AbsoluteFill as AbsoluteFill34, interpolate as interpolate20, useCurrentFrame as useCurrentFrame28 } from "remotion";
2280
- import { z as z39 } from "zod";
2281
- import { jsx as jsx37 } from "react/jsx-runtime";
2282
- var TikTokCaptionPropsSchema = z39.object({
2283
- text: z39.string().max(150),
2284
- fontSize: z39.number().min(12).max(120).default(48),
2285
- color: z39.string().default("#FFFFFF"),
2286
- strokeColor: z39.string().default("#000000"),
2287
- strokeWidth: z39.number().min(0).max(10).default(3),
2288
- position: z39.enum(["center", "bottom"]).default("center"),
2289
- highlightStyle: z39.enum(["word", "bounce", "none"]).default("word")
2426
+ import { interpolate as interpolate20, useCurrentFrame as useCurrentFrame28 } from "remotion";
2427
+ import { z as z42 } from "zod";
2428
+ import { jsx as jsx41 } from "react/jsx-runtime";
2429
+ var TikTokCaptionPropsSchema = z42.object({
2430
+ text: z42.string().max(150),
2431
+ fontSize: z42.number().min(12).max(120).default(48),
2432
+ color: z42.string().default("#FFFFFF"),
2433
+ strokeColor: z42.string().default("#000000"),
2434
+ strokeWidth: z42.number().min(0).max(10).default(3),
2435
+ position: z42.enum(["center", "bottom"]).default("center"),
2436
+ highlightStyle: z42.enum(["word", "bounce", "none"]).default("word"),
2437
+ maxWidthPct: z42.number().min(0.1).max(1).default(0.92),
2438
+ safeInsetPct: z42.number().min(0).max(0.25).default(0.06)
2290
2439
  });
2291
2440
  var TikTokCaption = ({
2292
2441
  text,
@@ -2296,6 +2445,8 @@ var TikTokCaption = ({
2296
2445
  strokeWidth,
2297
2446
  position,
2298
2447
  highlightStyle,
2448
+ maxWidthPct,
2449
+ safeInsetPct,
2299
2450
  __wavesDurationInFrames
2300
2451
  }) => {
2301
2452
  const frame = useCurrentFrame28();
@@ -2303,11 +2454,12 @@ var TikTokCaption = ({
2303
2454
  const p = interpolate20(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2304
2455
  const words = text.trim().split(/\s+/);
2305
2456
  const idx = highlightStyle === "none" ? -1 : Math.min(words.length - 1, Math.floor(p * words.length));
2306
- const yStyle = position === "bottom" ? { alignItems: "flex-end", paddingBottom: 140 } : { alignItems: "center" };
2307
- return /* @__PURE__ */ jsx37(AbsoluteFill34, { style: { display: "flex", justifyContent: "center", ...yStyle }, children: /* @__PURE__ */ jsx37("div", { style: { textAlign: "center", padding: "0 80px", fontWeight: 900, lineHeight: 1.1 }, children: words.map((w, i) => {
2457
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
2458
+ const yStyle = position === "bottom" ? { alignItems: "flex-end", paddingBottom: inset } : { alignItems: "center" };
2459
+ return /* @__PURE__ */ jsx41(Fill, { style: { display: "flex", justifyContent: "center", ...yStyle }, children: /* @__PURE__ */ jsx41("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) => {
2308
2460
  const isActive = i === idx && highlightStyle !== "none";
2309
2461
  const bounce = isActive && highlightStyle === "bounce" ? interpolate20(frame % 18, [0, 9, 18], [1, 1.08, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" }) : 1;
2310
- return /* @__PURE__ */ jsx37(
2462
+ return /* @__PURE__ */ jsx41(
2311
2463
  "span",
2312
2464
  {
2313
2465
  style: {
@@ -2332,18 +2484,18 @@ var TikTokCaptionComponentMetadata = {
2332
2484
  };
2333
2485
 
2334
2486
  // src/components/composites/ThirdLowerBanner.tsx
2335
- import { AbsoluteFill as AbsoluteFill35, Img as Img12, interpolate as interpolate21, staticFile as staticFile14, useCurrentFrame as useCurrentFrame29 } from "remotion";
2336
- import { z as z40 } from "zod";
2337
- import { jsx as jsx38, jsxs as jsxs17 } from "react/jsx-runtime";
2338
- var ThirdLowerBannerPropsSchema = z40.object({
2339
- name: z40.string().max(50),
2340
- title: z40.string().max(100),
2341
- backgroundColor: z40.string().default("rgba(0,0,0,0.8)"),
2342
- primaryColor: z40.string().default("#FFFFFF"),
2343
- secondaryColor: z40.string().default("#CCCCCC"),
2344
- accentColor: z40.string().default("#FF0000"),
2345
- showAvatar: z40.boolean().default(false),
2346
- avatarSrc: z40.string().optional()
2487
+ import { Img as Img12, interpolate as interpolate21, staticFile as staticFile14, useCurrentFrame as useCurrentFrame29 } from "remotion";
2488
+ import { z as z43 } from "zod";
2489
+ import { jsx as jsx42, jsxs as jsxs17 } from "react/jsx-runtime";
2490
+ var ThirdLowerBannerPropsSchema = z43.object({
2491
+ name: z43.string().max(50),
2492
+ title: z43.string().max(100),
2493
+ backgroundColor: z43.string().default("rgba(0,0,0,0.8)"),
2494
+ primaryColor: z43.string().default("#FFFFFF"),
2495
+ secondaryColor: z43.string().default("#CCCCCC"),
2496
+ accentColor: z43.string().default("#FF0000"),
2497
+ showAvatar: z43.boolean().default(false),
2498
+ avatarSrc: z43.string().optional()
2347
2499
  });
2348
2500
  var resolveAsset13 = (value) => isRemoteAssetPath(value) ? value : staticFile14(staticFileInputFromAssetPath(value));
2349
2501
  var ThirdLowerBanner = ({
@@ -2360,7 +2512,7 @@ var ThirdLowerBanner = ({
2360
2512
  const slide = interpolate21(frame, [0, 18], [-600, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2361
2513
  const opacity = interpolate21(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2362
2514
  const avatar = showAvatar && typeof avatarSrc === "string" && avatarSrc.length > 0 ? avatarSrc : null;
2363
- return /* @__PURE__ */ jsx38(AbsoluteFill35, { children: /* @__PURE__ */ jsxs17(
2515
+ return /* @__PURE__ */ jsx42(Fill, { children: /* @__PURE__ */ jsxs17(
2364
2516
  "div",
2365
2517
  {
2366
2518
  style: {
@@ -2377,8 +2529,8 @@ var ThirdLowerBanner = ({
2377
2529
  backgroundColor
2378
2530
  },
2379
2531
  children: [
2380
- /* @__PURE__ */ jsx38("div", { style: { width: 10, backgroundColor: accentColor } }),
2381
- avatar ? /* @__PURE__ */ jsx38("div", { style: { width: 160, display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsx38(
2532
+ /* @__PURE__ */ jsx42("div", { style: { width: 10, backgroundColor: accentColor } }),
2533
+ avatar ? /* @__PURE__ */ jsx42("div", { style: { width: 160, display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ jsx42(
2382
2534
  Img12,
2383
2535
  {
2384
2536
  src: resolveAsset13(avatar),
@@ -2386,8 +2538,8 @@ var ThirdLowerBanner = ({
2386
2538
  }
2387
2539
  ) }) : null,
2388
2540
  /* @__PURE__ */ jsxs17("div", { style: { padding: "28px 36px", display: "flex", flexDirection: "column", justifyContent: "center" }, children: [
2389
- /* @__PURE__ */ jsx38("div", { style: { color: primaryColor, fontSize: 54, fontWeight: 800, lineHeight: 1 }, children: name }),
2390
- /* @__PURE__ */ jsx38("div", { style: { marginTop: 10, color: secondaryColor, fontSize: 28, fontWeight: 600 }, children: title })
2541
+ /* @__PURE__ */ jsx42("div", { style: { color: primaryColor, fontSize: 54, fontWeight: 800, lineHeight: 1 }, children: name }),
2542
+ /* @__PURE__ */ jsx42("div", { style: { marginTop: 10, color: secondaryColor, fontSize: 28, fontWeight: 600 }, children: title })
2391
2543
  ] })
2392
2544
  ]
2393
2545
  }
@@ -2405,22 +2557,25 @@ var ThirdLowerBannerComponentMetadata = {
2405
2557
  };
2406
2558
 
2407
2559
  // src/components/composites/TypewriterText.tsx
2408
- import { AbsoluteFill as AbsoluteFill36, interpolate as interpolate22, useCurrentFrame as useCurrentFrame30 } from "remotion";
2409
- import { z as z41 } from "zod";
2410
- import { jsx as jsx39, jsxs as jsxs18 } from "react/jsx-runtime";
2411
- var TypewriterTextPropsSchema = z41.object({
2412
- content: z41.string().max(500),
2413
- fontSize: z41.number().min(8).max(200).default(48),
2414
- color: z41.string().default("#FFFFFF"),
2415
- fontFamily: z41.string().default("Inter"),
2416
- position: z41.enum(["top", "center", "bottom"]).default("center"),
2417
- speed: z41.number().min(0.5).max(5).default(2),
2418
- showCursor: z41.boolean().default(true),
2419
- cursorColor: z41.string().default("#FFFFFF")
2560
+ import { interpolate as interpolate22, useCurrentFrame as useCurrentFrame30 } from "remotion";
2561
+ import { z as z44 } from "zod";
2562
+ import { jsx as jsx43, jsxs as jsxs18 } from "react/jsx-runtime";
2563
+ var TypewriterTextPropsSchema = z44.object({
2564
+ content: z44.string().max(500),
2565
+ fontSize: z44.number().min(8).max(200).default(48),
2566
+ color: z44.string().default("#FFFFFF"),
2567
+ fontFamily: z44.string().default("Inter"),
2568
+ position: z44.enum(["top", "center", "bottom"]).default("center"),
2569
+ speed: z44.number().min(0.5).max(5).default(2),
2570
+ showCursor: z44.boolean().default(true),
2571
+ cursorColor: z44.string().default("#FFFFFF"),
2572
+ maxWidthPct: z44.number().min(0.1).max(1).default(0.9),
2573
+ safeInsetPct: z44.number().min(0).max(0.25).default(0.06)
2420
2574
  });
2421
- var positionStyles5 = (position) => {
2422
- if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 80 };
2423
- if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: 80 };
2575
+ var positionStyles5 = (position, safeInsetPct) => {
2576
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
2577
+ if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: inset };
2578
+ if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: inset };
2424
2579
  return { justifyContent: "center", alignItems: "center" };
2425
2580
  };
2426
2581
  var TypewriterText = ({
@@ -2431,7 +2586,9 @@ var TypewriterText = ({
2431
2586
  position,
2432
2587
  speed,
2433
2588
  showCursor,
2434
- cursorColor
2589
+ cursorColor,
2590
+ maxWidthPct,
2591
+ safeInsetPct
2435
2592
  }) => {
2436
2593
  const frame = useCurrentFrame30();
2437
2594
  const charCount = Math.min(content.length, Math.max(0, Math.floor(frame * speed)));
@@ -2439,9 +2596,9 @@ var TypewriterText = ({
2439
2596
  const cursorVisible = showCursor && charCount < content.length ? frame % 30 < 15 : false;
2440
2597
  const cursorOpacity = cursorVisible ? 1 : 0;
2441
2598
  const cursorFade = interpolate22(frame % 30, [0, 5], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2442
- return /* @__PURE__ */ jsx39(AbsoluteFill36, { style: { display: "flex", ...positionStyles5(position) }, children: /* @__PURE__ */ jsxs18("div", { style: { fontSize, color, fontFamily, fontWeight: 600, textAlign: "center", whiteSpace: "pre-wrap" }, children: [
2599
+ return /* @__PURE__ */ jsx43(Fill, { style: { display: "flex", ...positionStyles5(position, safeInsetPct) }, children: /* @__PURE__ */ jsxs18("div", { style: { fontSize, color, fontFamily, fontWeight: 600, textAlign: "center", whiteSpace: "pre-wrap", maxWidth: `${Math.round(maxWidthPct * 100)}%`, overflowWrap: "anywhere", wordBreak: "break-word" }, children: [
2443
2600
  shown,
2444
- showCursor ? /* @__PURE__ */ jsx39("span", { style: { color: cursorColor, opacity: cursorOpacity * cursorFade }, children: "|" }) : null
2601
+ showCursor ? /* @__PURE__ */ jsx43("span", { style: { color: cursorColor, opacity: cursorOpacity * cursorFade }, children: "|" }) : null
2445
2602
  ] }) });
2446
2603
  };
2447
2604
  var TypewriterTextComponentMetadata = {
@@ -2456,21 +2613,21 @@ var TypewriterTextComponentMetadata = {
2456
2613
  };
2457
2614
 
2458
2615
  // src/components/composites/TwitterCard.tsx
2459
- import { AbsoluteFill as AbsoluteFill37, Img as Img13, staticFile as staticFile15 } from "remotion";
2460
- import { z as z42 } from "zod";
2461
- import { jsx as jsx40, jsxs as jsxs19 } from "react/jsx-runtime";
2462
- var TwitterCardPropsSchema = z42.object({
2463
- author: z42.string().min(1),
2464
- handle: z42.string().min(1),
2465
- avatarSrc: z42.string().optional(),
2466
- tweet: z42.string().max(280),
2467
- image: z42.string().optional(),
2468
- timestamp: z42.string().optional(),
2469
- verified: z42.boolean().default(false)
2616
+ import { Img as Img13, staticFile as staticFile15 } from "remotion";
2617
+ import { z as z45 } from "zod";
2618
+ import { jsx as jsx44, jsxs as jsxs19 } from "react/jsx-runtime";
2619
+ var TwitterCardPropsSchema = z45.object({
2620
+ author: z45.string().min(1),
2621
+ handle: z45.string().min(1),
2622
+ avatarSrc: z45.string().optional(),
2623
+ tweet: z45.string().max(280),
2624
+ image: z45.string().optional(),
2625
+ timestamp: z45.string().optional(),
2626
+ verified: z45.boolean().default(false)
2470
2627
  });
2471
2628
  var resolveAsset14 = (value) => isRemoteAssetPath(value) ? value : staticFile15(staticFileInputFromAssetPath(value));
2472
2629
  var TwitterCard = ({ author, handle, avatarSrc, tweet, image, timestamp, verified }) => {
2473
- return /* @__PURE__ */ jsx40(AbsoluteFill37, { style: { backgroundColor: "#0B0F14", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ jsxs19(
2630
+ return /* @__PURE__ */ jsx44(Fill, { style: { backgroundColor: "#0B0F14", display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ jsxs19(
2474
2631
  "div",
2475
2632
  {
2476
2633
  style: {
@@ -2483,18 +2640,18 @@ var TwitterCard = ({ author, handle, avatarSrc, tweet, image, timestamp, verifie
2483
2640
  },
2484
2641
  children: [
2485
2642
  /* @__PURE__ */ jsxs19("div", { style: { display: "flex", gap: 18, alignItems: "center" }, children: [
2486
- avatarSrc ? /* @__PURE__ */ jsx40(Img13, { src: resolveAsset14(avatarSrc), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ jsx40("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "#E5E7EB" } }),
2643
+ avatarSrc ? /* @__PURE__ */ jsx44(Img13, { src: resolveAsset14(avatarSrc), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ jsx44("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "#E5E7EB" } }),
2487
2644
  /* @__PURE__ */ jsxs19("div", { style: { display: "flex", flexDirection: "column" }, children: [
2488
2645
  /* @__PURE__ */ jsxs19("div", { style: { display: "flex", gap: 10, alignItems: "center" }, children: [
2489
- /* @__PURE__ */ jsx40("div", { style: { fontSize: 34, fontWeight: 900, color: "#111827" }, children: author }),
2490
- verified ? /* @__PURE__ */ jsx40("div", { style: { fontSize: 26, color: "#1D9BF0", fontWeight: 900 }, children: "\u2713" }) : null
2646
+ /* @__PURE__ */ jsx44("div", { style: { fontSize: 34, fontWeight: 900, color: "#111827" }, children: author }),
2647
+ verified ? /* @__PURE__ */ jsx44("div", { style: { fontSize: 26, color: "#1D9BF0", fontWeight: 900 }, children: "\u2713" }) : null
2491
2648
  ] }),
2492
- /* @__PURE__ */ jsx40("div", { style: { fontSize: 26, color: "#6B7280", fontWeight: 800 }, children: handle })
2649
+ /* @__PURE__ */ jsx44("div", { style: { fontSize: 26, color: "#6B7280", fontWeight: 800 }, children: handle })
2493
2650
  ] })
2494
2651
  ] }),
2495
- /* @__PURE__ */ jsx40("div", { style: { marginTop: 28, fontSize: 36, lineHeight: 1.25, color: "#111827", fontWeight: 700 }, children: tweet }),
2496
- image ? /* @__PURE__ */ jsx40("div", { style: { marginTop: 28, width: "100%", height: 520, overflow: "hidden", borderRadius: 22, backgroundColor: "#F3F4F6" }, children: /* @__PURE__ */ jsx40(Img13, { src: resolveAsset14(image), style: { width: "100%", height: "100%", objectFit: "cover" } }) }) : null,
2497
- timestamp ? /* @__PURE__ */ jsx40("div", { style: { marginTop: 22, fontSize: 22, color: "#6B7280", fontWeight: 700 }, children: timestamp }) : null
2652
+ /* @__PURE__ */ jsx44("div", { style: { marginTop: 28, fontSize: 36, lineHeight: 1.25, color: "#111827", fontWeight: 700 }, children: tweet }),
2653
+ image ? /* @__PURE__ */ jsx44("div", { style: { marginTop: 28, width: "100%", height: 520, overflow: "hidden", borderRadius: 22, backgroundColor: "#F3F4F6" }, children: /* @__PURE__ */ jsx44(Img13, { src: resolveAsset14(image), style: { width: "100%", height: "100%", objectFit: "cover" } }) }) : null,
2654
+ timestamp ? /* @__PURE__ */ jsx44("div", { style: { marginTop: 22, fontSize: 22, color: "#6B7280", fontWeight: 700 }, children: timestamp }) : null
2498
2655
  ]
2499
2656
  }
2500
2657
  ) });
@@ -2507,17 +2664,17 @@ var TwitterCardComponentMetadata = {
2507
2664
  };
2508
2665
 
2509
2666
  // src/components/composites/Watermark.tsx
2510
- import { AbsoluteFill as AbsoluteFill38, Img as Img14, staticFile as staticFile16 } from "remotion";
2511
- import { z as z43 } from "zod";
2512
- import { jsx as jsx41 } from "react/jsx-runtime";
2513
- var WatermarkPropsSchema = z43.object({
2514
- type: z43.enum(["logo", "text"]).default("logo"),
2515
- src: z43.string().optional(),
2516
- text: z43.string().optional(),
2517
- position: z43.enum(["topLeft", "topRight", "bottomLeft", "bottomRight"]).default("bottomRight"),
2518
- opacity: z43.number().min(0.1).max(1).default(0.5),
2519
- size: z43.number().min(30).max(150).default(60),
2520
- color: z43.string().default("#FFFFFF")
2667
+ import { Img as Img14, staticFile as staticFile16 } from "remotion";
2668
+ import { z as z46 } from "zod";
2669
+ import { jsx as jsx45 } from "react/jsx-runtime";
2670
+ var WatermarkPropsSchema = z46.object({
2671
+ type: z46.enum(["logo", "text"]).default("logo"),
2672
+ src: z46.string().optional(),
2673
+ text: z46.string().optional(),
2674
+ position: z46.enum(["topLeft", "topRight", "bottomLeft", "bottomRight"]).default("bottomRight"),
2675
+ opacity: z46.number().min(0.1).max(1).default(0.5),
2676
+ size: z46.number().min(30).max(150).default(60),
2677
+ color: z46.string().default("#FFFFFF")
2521
2678
  });
2522
2679
  var resolveAsset15 = (value) => isRemoteAssetPath(value) ? value : staticFile16(staticFileInputFromAssetPath(value));
2523
2680
  function posStyle(position) {
@@ -2534,7 +2691,7 @@ var Watermark = ({ type, src, text, position, opacity, size, color }) => {
2534
2691
  opacity,
2535
2692
  pointerEvents: "none"
2536
2693
  };
2537
- return /* @__PURE__ */ jsx41(AbsoluteFill38, { children: type === "text" ? /* @__PURE__ */ jsx41("div", { style: { ...style, fontSize: Math.round(size * 0.6), color, fontWeight: 700 }, children: text ?? "" }) : src ? /* @__PURE__ */ jsx41(
2694
+ return /* @__PURE__ */ jsx45(Fill, { children: type === "text" ? /* @__PURE__ */ jsx45("div", { style: { ...style, fontSize: Math.round(size * 0.6), color, fontWeight: 700 }, children: text ?? "" }) : src ? /* @__PURE__ */ jsx45(
2538
2695
  Img14,
2539
2696
  {
2540
2697
  src: resolveAsset15(src),
@@ -2549,19 +2706,20 @@ var WatermarkComponentMetadata = {
2549
2706
  llmGuidance: "Use subtle opacity (0.3-0.6). bottomRight is standard.",
2550
2707
  examples: [
2551
2708
  { type: "text", text: "@depths.ai", position: "bottomRight", opacity: 0.4, size: 60 },
2552
- { type: "logo", src: "/assets/logo.png", position: "topLeft", opacity: 0.5, size: 70 }
2709
+ { type: "logo", src: "/assets/logo.svg", position: "topLeft", opacity: 0.5, size: 70 }
2553
2710
  ]
2554
2711
  };
2555
2712
 
2556
2713
  // src/components/composites/WipeTransition.tsx
2557
- import { AbsoluteFill as AbsoluteFill39, interpolate as interpolate23, useCurrentFrame as useCurrentFrame31 } from "remotion";
2558
- import { z as z44 } from "zod";
2559
- import { jsx as jsx42 } from "react/jsx-runtime";
2560
- var WipeTransitionPropsSchema = z44.object({
2561
- durationInFrames: z44.number().int().min(10).max(60).default(30),
2562
- direction: z44.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
2563
- softEdge: z44.boolean().default(false),
2564
- phase: z44.enum(["in", "out", "inOut"]).default("inOut")
2714
+ import React9 from "react";
2715
+ import { interpolate as interpolate23, useCurrentFrame as useCurrentFrame31 } from "remotion";
2716
+ import { z as z47 } from "zod";
2717
+ import { jsx as jsx46 } from "react/jsx-runtime";
2718
+ var WipeTransitionPropsSchema = z47.object({
2719
+ durationInFrames: z47.number().int().min(10).max(60).default(30),
2720
+ direction: z47.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
2721
+ softEdge: z47.boolean().default(false),
2722
+ phase: z47.enum(["in", "out", "inOut"]).default("inOut")
2565
2723
  });
2566
2724
  function clipFor2(direction, p) {
2567
2725
  if (direction === "left") return `inset(0 ${100 * (1 - p)}% 0 0)`;
@@ -2578,6 +2736,7 @@ var WipeTransition = ({
2578
2736
  children,
2579
2737
  __wavesDurationInFrames
2580
2738
  }) => {
2739
+ const layers = React9.Children.toArray(children);
2581
2740
  const frame = useCurrentFrame31();
2582
2741
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2583
2742
  const d = Math.min(durationInFrames, total);
@@ -2591,7 +2750,7 @@ var WipeTransition = ({
2591
2750
  const t = interpolate23(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2592
2751
  clipPath = clipFor2(direction, t);
2593
2752
  }
2594
- return /* @__PURE__ */ jsx42(AbsoluteFill39, { style: { clipPath, filter: softEdge ? "blur(0.4px)" : void 0 }, children });
2753
+ return /* @__PURE__ */ jsx46(Fill, { style: { clipPath, filter: softEdge ? "blur(0.4px)" : void 0 }, children: layers.map((child, i) => /* @__PURE__ */ jsx46("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
2595
2754
  };
2596
2755
  var WipeTransitionComponentMetadata = {
2597
2756
  kind: "composite",
@@ -2603,16 +2762,16 @@ var WipeTransitionComponentMetadata = {
2603
2762
  };
2604
2763
 
2605
2764
  // src/components/composites/YouTubeThumbnail.tsx
2606
- import { AbsoluteFill as AbsoluteFill40, Img as Img15, staticFile as staticFile17 } from "remotion";
2607
- import { z as z45 } from "zod";
2608
- import { jsx as jsx43, jsxs as jsxs20 } from "react/jsx-runtime";
2609
- var YouTubeThumbnailPropsSchema = z45.object({
2610
- backgroundImage: z45.string().min(1),
2611
- title: z45.string().max(60),
2612
- subtitle: z45.string().max(40).optional(),
2613
- thumbnailFace: z45.string().optional(),
2614
- accentColor: z45.string().default("#FF0000"),
2615
- style: z45.enum(["bold", "minimal", "dramatic"]).default("bold")
2765
+ import { Img as Img15, staticFile as staticFile17 } from "remotion";
2766
+ import { z as z48 } from "zod";
2767
+ import { jsx as jsx47, jsxs as jsxs20 } from "react/jsx-runtime";
2768
+ var YouTubeThumbnailPropsSchema = z48.object({
2769
+ backgroundImage: z48.string().min(1),
2770
+ title: z48.string().max(60),
2771
+ subtitle: z48.string().max(40).optional(),
2772
+ thumbnailFace: z48.string().optional(),
2773
+ accentColor: z48.string().default("#FF0000"),
2774
+ style: z48.enum(["bold", "minimal", "dramatic"]).default("bold")
2616
2775
  });
2617
2776
  var resolveAsset16 = (value) => isRemoteAssetPath(value) ? value : staticFile17(staticFileInputFromAssetPath(value));
2618
2777
  var YouTubeThumbnail = ({
@@ -2623,10 +2782,10 @@ var YouTubeThumbnail = ({
2623
2782
  accentColor,
2624
2783
  style
2625
2784
  }) => {
2626
- return /* @__PURE__ */ jsxs20(AbsoluteFill40, { children: [
2627
- /* @__PURE__ */ jsx43(Img15, { src: resolveAsset16(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover" } }),
2628
- style === "dramatic" ? /* @__PURE__ */ jsx43(AbsoluteFill40, { style: { backgroundColor: "rgba(0,0,0,0.35)" } }) : null,
2629
- thumbnailFace ? /* @__PURE__ */ jsx43(
2785
+ return /* @__PURE__ */ jsxs20(Fill, { children: [
2786
+ /* @__PURE__ */ jsx47(Img15, { src: resolveAsset16(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover" } }),
2787
+ style === "dramatic" ? /* @__PURE__ */ jsx47("div", { style: { position: "absolute", inset: 0, backgroundColor: "rgba(0,0,0,0.35)" } }) : null,
2788
+ thumbnailFace ? /* @__PURE__ */ jsx47(
2630
2789
  Img15,
2631
2790
  {
2632
2791
  src: resolveAsset16(thumbnailFace),
@@ -2634,7 +2793,7 @@ var YouTubeThumbnail = ({
2634
2793
  }
2635
2794
  ) : null,
2636
2795
  /* @__PURE__ */ jsxs20("div", { style: { position: "absolute", left: 70, top: 90, width: 1100 }, children: [
2637
- /* @__PURE__ */ jsx43(
2796
+ /* @__PURE__ */ jsx47(
2638
2797
  "div",
2639
2798
  {
2640
2799
  style: {
@@ -2649,9 +2808,9 @@ var YouTubeThumbnail = ({
2649
2808
  children: title
2650
2809
  }
2651
2810
  ),
2652
- subtitle ? /* @__PURE__ */ jsx43("div", { style: { marginTop: 26, fontSize: 52, fontWeight: 900, color: accentColor, textShadow: "0 10px 30px rgba(0,0,0,0.6)" }, children: subtitle }) : null
2811
+ subtitle ? /* @__PURE__ */ jsx47("div", { style: { marginTop: 26, fontSize: 52, fontWeight: 900, color: accentColor, textShadow: "0 10px 30px rgba(0,0,0,0.6)" }, children: subtitle }) : null
2653
2812
  ] }),
2654
- style !== "minimal" ? /* @__PURE__ */ jsx43("div", { style: { position: "absolute", left: 70, bottom: 80, width: 260, height: 18, backgroundColor: accentColor, borderRadius: 9999 } }) : null
2813
+ style !== "minimal" ? /* @__PURE__ */ jsx47("div", { style: { position: "absolute", left: 70, bottom: 80, width: 260, height: 18, backgroundColor: accentColor, borderRadius: 9999 } }) : null
2655
2814
  ] });
2656
2815
  };
2657
2816
  var YouTubeThumbnailComponentMetadata = {
@@ -2662,36 +2821,38 @@ var YouTubeThumbnailComponentMetadata = {
2662
2821
  };
2663
2822
 
2664
2823
  // src/components/composites/VideoWithOverlay.tsx
2665
- import { AbsoluteFill as AbsoluteFill41, Img as Img16, Video as RemotionVideo2, interpolate as interpolate24, staticFile as staticFile18, useCurrentFrame as useCurrentFrame32 } from "remotion";
2666
- import { z as z46 } from "zod";
2667
- import { jsx as jsx44, jsxs as jsxs21 } from "react/jsx-runtime";
2668
- var OverlaySchema = z46.object({
2669
- type: z46.enum(["text", "logo", "gradient"]),
2670
- content: z46.string().optional(),
2671
- opacity: z46.number().min(0).max(1).default(0.3),
2672
- position: z46.enum(["top", "bottom", "center", "full"]).default("bottom")
2824
+ import { Img as Img16, Video as RemotionVideo2, interpolate as interpolate24, staticFile as staticFile18, useCurrentFrame as useCurrentFrame32 } from "remotion";
2825
+ import { z as z49 } from "zod";
2826
+ import { jsx as jsx48, jsxs as jsxs21 } from "react/jsx-runtime";
2827
+ var OverlaySchema = z49.object({
2828
+ type: z49.enum(["text", "logo", "gradient"]),
2829
+ content: z49.string().optional(),
2830
+ opacity: z49.number().min(0).max(1).default(0.3),
2831
+ position: z49.enum(["top", "bottom", "center", "full"]).default("bottom")
2673
2832
  });
2674
- var VideoWithOverlayPropsSchema = z46.object({
2675
- src: z46.string().min(1),
2833
+ var VideoWithOverlayPropsSchema = z49.object({
2834
+ src: z49.string().min(1),
2676
2835
  overlay: OverlaySchema.optional(),
2677
- volume: z46.number().min(0).max(1).default(1),
2678
- playbackRate: z46.number().min(0.5).max(2).default(1)
2836
+ volume: z49.number().min(0).max(1).default(1),
2837
+ playbackRate: z49.number().min(0.5).max(2).default(1)
2679
2838
  });
2680
2839
  var resolveAsset17 = (value) => isRemoteAssetPath(value) ? value : staticFile18(staticFileInputFromAssetPath(value));
2681
2840
  var VideoWithOverlay = ({ src, overlay, volume, playbackRate }) => {
2682
2841
  const frame = useCurrentFrame32();
2683
2842
  const fade = interpolate24(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2684
- const overlayNode = overlay ? overlay.type === "gradient" ? /* @__PURE__ */ jsx44(
2685
- AbsoluteFill41,
2843
+ const overlayFill = { position: "absolute", inset: 0 };
2844
+ const overlayNode = overlay ? overlay.type === "gradient" ? /* @__PURE__ */ jsx48(
2845
+ "div",
2686
2846
  {
2687
2847
  style: {
2848
+ ...overlayFill,
2688
2849
  opacity: overlay.opacity,
2689
2850
  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))"
2690
2851
  }
2691
2852
  }
2692
- ) : overlay.type === "logo" && overlay.content ? /* @__PURE__ */ jsx44(AbsoluteFill41, { style: { justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ jsx44(Img16, { src: resolveAsset17(overlay.content), style: { width: 220, height: 220, objectFit: "contain" } }) }) : overlay.type === "text" && overlay.content ? /* @__PURE__ */ jsx44(AbsoluteFill41, { style: { justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ jsx44("div", { style: { color: "#FFFFFF", fontSize: 56, fontWeight: 900, textAlign: "center", padding: "0 80px" }, children: overlay.content }) }) : null : null;
2693
- return /* @__PURE__ */ jsxs21(AbsoluteFill41, { children: [
2694
- /* @__PURE__ */ jsx44(
2853
+ ) : overlay.type === "logo" && overlay.content ? /* @__PURE__ */ jsx48("div", { style: { ...overlayFill, display: "flex", justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ jsx48(Img16, { src: resolveAsset17(overlay.content), style: { width: 220, height: 220, objectFit: "contain" } }) }) : overlay.type === "text" && overlay.content ? /* @__PURE__ */ jsx48("div", { style: { ...overlayFill, display: "flex", justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ jsx48("div", { style: { color: "#FFFFFF", fontSize: 56, fontWeight: 900, textAlign: "center", padding: "0 80px" }, children: overlay.content }) }) : null : null;
2854
+ return /* @__PURE__ */ jsxs21(Fill, { children: [
2855
+ /* @__PURE__ */ jsx48(
2695
2856
  RemotionVideo2,
2696
2857
  {
2697
2858
  src: resolveAsset17(src),
@@ -2711,13 +2872,14 @@ var VideoWithOverlayComponentMetadata = {
2711
2872
  };
2712
2873
 
2713
2874
  // src/components/composites/ZoomTransition.tsx
2714
- import { AbsoluteFill as AbsoluteFill42, interpolate as interpolate25, useCurrentFrame as useCurrentFrame33 } from "remotion";
2715
- import { z as z47 } from "zod";
2716
- import { jsx as jsx45 } from "react/jsx-runtime";
2717
- var ZoomTransitionPropsSchema = z47.object({
2718
- durationInFrames: z47.number().int().min(10).max(60).default(30),
2719
- type: z47.enum(["zoomIn", "zoomOut"]).default("zoomIn"),
2720
- phase: z47.enum(["in", "out", "inOut"]).default("inOut")
2875
+ import React10 from "react";
2876
+ import { interpolate as interpolate25, useCurrentFrame as useCurrentFrame33 } from "remotion";
2877
+ import { z as z50 } from "zod";
2878
+ import { jsx as jsx49 } from "react/jsx-runtime";
2879
+ var ZoomTransitionPropsSchema = z50.object({
2880
+ durationInFrames: z50.number().int().min(10).max(60).default(30),
2881
+ type: z50.enum(["zoomIn", "zoomOut"]).default("zoomIn"),
2882
+ phase: z50.enum(["in", "out", "inOut"]).default("inOut")
2721
2883
  });
2722
2884
  var ZoomTransition = ({
2723
2885
  durationInFrames,
@@ -2726,6 +2888,7 @@ var ZoomTransition = ({
2726
2888
  children,
2727
2889
  __wavesDurationInFrames
2728
2890
  }) => {
2891
+ const layers = React10.Children.toArray(children);
2729
2892
  const frame = useCurrentFrame33();
2730
2893
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2731
2894
  const d = Math.min(durationInFrames, total);
@@ -2744,7 +2907,7 @@ var ZoomTransition = ({
2744
2907
  scale *= 1 + (exitTo - 1) * t;
2745
2908
  opacity *= 1 - t;
2746
2909
  }
2747
- return /* @__PURE__ */ jsx45(AbsoluteFill42, { style: { opacity, transform: `scale(${scale})` }, children });
2910
+ return /* @__PURE__ */ jsx49(Fill, { style: { opacity, transform: `scale(${scale})` }, children: layers.map((child, i) => /* @__PURE__ */ jsx49("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
2748
2911
  };
2749
2912
  var ZoomTransitionComponentMetadata = {
2750
2913
  kind: "composite",
@@ -2773,6 +2936,14 @@ function registerBuiltInComponents() {
2773
2936
  metadata: BoxComponentMetadata
2774
2937
  });
2775
2938
  }
2939
+ if (!globalRegistry.has("Frame")) {
2940
+ globalRegistry.register({
2941
+ type: "Frame",
2942
+ component: Frame,
2943
+ propsSchema: FramePropsSchema,
2944
+ metadata: FrameComponentMetadata
2945
+ });
2946
+ }
2776
2947
  if (!globalRegistry.has("Stack")) {
2777
2948
  globalRegistry.register({
2778
2949
  type: "Stack",
@@ -2789,6 +2960,22 @@ function registerBuiltInComponents() {
2789
2960
  metadata: GridComponentMetadata
2790
2961
  });
2791
2962
  }
2963
+ if (!globalRegistry.has("Layers")) {
2964
+ globalRegistry.register({
2965
+ type: "Layers",
2966
+ component: Layers,
2967
+ propsSchema: LayersPropsSchema,
2968
+ metadata: LayersComponentMetadata
2969
+ });
2970
+ }
2971
+ if (!globalRegistry.has("Layer")) {
2972
+ globalRegistry.register({
2973
+ type: "Layer",
2974
+ component: Layer,
2975
+ propsSchema: LayerPropsSchema,
2976
+ metadata: LayerComponentMetadata
2977
+ });
2978
+ }
2792
2979
  if (!globalRegistry.has("Image")) {
2793
2980
  globalRegistry.register({
2794
2981
  type: "Image",
@@ -3151,6 +3338,7 @@ export {
3151
3338
  VideoIRSchema,
3152
3339
  ComponentRegistry,
3153
3340
  globalRegistry,
3341
+ Fill,
3154
3342
  registerBuiltInComponents,
3155
3343
  WavesError,
3156
3344
  WavesValidationError,