@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.
package/dist/cli.js CHANGED
@@ -242,19 +242,77 @@ var AudioComponentMetadata = {
242
242
  };
243
243
 
244
244
  // src/components/primitives/Box.tsx
245
+ var import_react = __toESM(require("react"));
245
246
  var import_zod4 = require("zod");
247
+
248
+ // src/remotion/Fill.tsx
246
249
  var import_jsx_runtime2 = require("react/jsx-runtime");
250
+ var Fill = ({ style, children }) => {
251
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
252
+ "div",
253
+ {
254
+ style: {
255
+ width: "100%",
256
+ height: "100%",
257
+ position: "relative",
258
+ boxSizing: "border-box",
259
+ ...style ?? {}
260
+ },
261
+ children
262
+ }
263
+ );
264
+ };
265
+
266
+ // src/components/primitives/Box.tsx
267
+ var import_jsx_runtime3 = require("react/jsx-runtime");
247
268
  var BoxPropsSchema = import_zod4.z.object({
248
- x: import_zod4.z.number().default(0).describe("Left offset in pixels"),
249
- y: import_zod4.z.number().default(0).describe("Top offset in pixels"),
250
- width: import_zod4.z.number().positive().optional().describe("Width in pixels (omit for auto)"),
251
- height: import_zod4.z.number().positive().optional().describe("Height in pixels (omit for auto)"),
269
+ width: import_zod4.z.number().positive().optional().describe("Width in pixels (optional)"),
270
+ height: import_zod4.z.number().positive().optional().describe("Height in pixels (optional)"),
252
271
  padding: import_zod4.z.number().min(0).default(0).describe("Padding in pixels"),
253
- backgroundColor: import_zod4.z.string().optional().describe("CSS color (e.g. #RRGGBB)"),
272
+ backgroundColor: import_zod4.z.string().optional().describe("CSS color (e.g. #RRGGBB, rgba())"),
254
273
  borderRadius: import_zod4.z.number().min(0).default(0).describe("Border radius in pixels"),
255
274
  opacity: import_zod4.z.number().min(0).max(1).default(1).describe("Opacity 0..1")
256
275
  });
257
- var Box = ({
276
+ var Box = ({ width, height, padding, backgroundColor, borderRadius, opacity, children }) => {
277
+ const layers = import_react.default.Children.toArray(children);
278
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
279
+ Fill,
280
+ {
281
+ style: {
282
+ width,
283
+ height,
284
+ padding,
285
+ backgroundColor,
286
+ borderRadius,
287
+ opacity
288
+ },
289
+ children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i))
290
+ }
291
+ );
292
+ };
293
+ var BoxComponentMetadata = {
294
+ kind: "primitive",
295
+ category: "layout",
296
+ acceptsChildren: true,
297
+ description: "Flow container for layout and backgrounds (layout-safe)",
298
+ llmGuidance: "Use Box as a container inside Grid/Stack. Box participates in layout flow. For x/y positioning, use Frame."
299
+ };
300
+
301
+ // src/components/primitives/Frame.tsx
302
+ var import_react2 = __toESM(require("react"));
303
+ var import_zod5 = require("zod");
304
+ var import_jsx_runtime4 = require("react/jsx-runtime");
305
+ var FramePropsSchema = import_zod5.z.object({
306
+ x: import_zod5.z.number().default(0).describe("Left offset in pixels"),
307
+ y: import_zod5.z.number().default(0).describe("Top offset in pixels"),
308
+ width: import_zod5.z.number().positive().optional().describe("Width in pixels (optional)"),
309
+ height: import_zod5.z.number().positive().optional().describe("Height in pixels (optional)"),
310
+ padding: import_zod5.z.number().min(0).default(0).describe("Padding in pixels"),
311
+ backgroundColor: import_zod5.z.string().optional().describe("CSS color (e.g. #RRGGBB, rgba())"),
312
+ borderRadius: import_zod5.z.number().min(0).default(0).describe("Border radius in pixels"),
313
+ opacity: import_zod5.z.number().min(0).max(1).default(1).describe("Opacity 0..1")
314
+ });
315
+ var Frame = ({
258
316
  x,
259
317
  y,
260
318
  width,
@@ -265,7 +323,8 @@ var Box = ({
265
323
  opacity,
266
324
  children
267
325
  }) => {
268
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
326
+ const layers = import_react2.default.Children.toArray(children);
327
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
269
328
  "div",
270
329
  {
271
330
  style: {
@@ -280,29 +339,28 @@ var Box = ({
280
339
  opacity,
281
340
  boxSizing: "border-box"
282
341
  },
283
- children
342
+ children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Fill, { children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) })
284
343
  }
285
344
  );
286
345
  };
287
- var BoxComponentMetadata = {
346
+ var FrameComponentMetadata = {
288
347
  kind: "primitive",
289
348
  category: "layout",
290
349
  acceptsChildren: true,
291
- description: "Positioned container box for layout and backgrounds",
292
- llmGuidance: "Use Box to position content by x/y and optionally constrain width/height. Prefer Box+Stack/Grid for layouts."
350
+ description: "Absolute-positioned container (x/y placement)",
351
+ llmGuidance: "Use Frame for precise pixel placement (x/y). Use Box for normal layout flow inside Grid/Stack."
293
352
  };
294
353
 
295
354
  // src/components/primitives/Grid.tsx
296
- var import_remotion2 = require("remotion");
297
- var import_zod5 = require("zod");
298
- var import_jsx_runtime3 = require("react/jsx-runtime");
299
- var GridPropsSchema = import_zod5.z.object({
300
- columns: import_zod5.z.number().int().min(1).max(12).default(2),
301
- rows: import_zod5.z.number().int().min(1).max(12).default(1),
302
- gap: import_zod5.z.number().min(0).default(24),
303
- padding: import_zod5.z.number().min(0).default(0),
304
- align: import_zod5.z.enum(["start", "center", "end", "stretch"]).default("stretch"),
305
- justify: import_zod5.z.enum(["start", "center", "end", "stretch"]).default("stretch")
355
+ var import_zod6 = require("zod");
356
+ var import_jsx_runtime5 = require("react/jsx-runtime");
357
+ var GridPropsSchema = import_zod6.z.object({
358
+ columns: import_zod6.z.number().int().min(1).max(12).default(2),
359
+ rows: import_zod6.z.number().int().min(1).max(12).default(1),
360
+ gap: import_zod6.z.number().min(0).default(24),
361
+ padding: import_zod6.z.number().min(0).default(0),
362
+ align: import_zod6.z.enum(["start", "center", "end", "stretch"]).default("stretch"),
363
+ justify: import_zod6.z.enum(["start", "center", "end", "stretch"]).default("stretch")
306
364
  });
307
365
  var mapAlign = (a) => {
308
366
  if (a === "start") return "start";
@@ -317,8 +375,8 @@ var mapJustify = (j) => {
317
375
  return "stretch";
318
376
  };
319
377
  var Grid = ({ columns, rows, gap, padding, align, justify, children }) => {
320
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
321
- import_remotion2.AbsoluteFill,
378
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
379
+ Fill,
322
380
  {
323
381
  style: {
324
382
  display: "grid",
@@ -343,19 +401,19 @@ var GridComponentMetadata = {
343
401
  };
344
402
 
345
403
  // src/components/primitives/Image.tsx
346
- var import_remotion3 = require("remotion");
347
- var import_zod6 = require("zod");
348
- var import_jsx_runtime4 = require("react/jsx-runtime");
349
- var ImagePropsSchema = import_zod6.z.object({
350
- src: import_zod6.z.string().min(1),
351
- fit: import_zod6.z.enum(["cover", "contain"]).default("cover"),
352
- borderRadius: import_zod6.z.number().min(0).default(0),
353
- opacity: import_zod6.z.number().min(0).max(1).default(1)
404
+ var import_remotion2 = require("remotion");
405
+ var import_zod7 = require("zod");
406
+ var import_jsx_runtime6 = require("react/jsx-runtime");
407
+ var ImagePropsSchema = import_zod7.z.object({
408
+ src: import_zod7.z.string().min(1),
409
+ fit: import_zod7.z.enum(["cover", "contain"]).default("cover"),
410
+ borderRadius: import_zod7.z.number().min(0).default(0),
411
+ opacity: import_zod7.z.number().min(0).max(1).default(1)
354
412
  });
355
- var resolveAsset = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion3.staticFile)(staticFileInputFromAssetPath(value));
413
+ var resolveAsset = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion2.staticFile)(staticFileInputFromAssetPath(value));
356
414
  var Image = ({ src, fit, borderRadius, opacity }) => {
357
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_remotion3.AbsoluteFill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
358
- import_remotion3.Img,
415
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Fill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
416
+ import_remotion2.Img,
359
417
  {
360
418
  src: resolveAsset(src),
361
419
  style: { width: "100%", height: "100%", objectFit: fit, borderRadius }
@@ -369,32 +427,91 @@ var ImageComponentMetadata = {
369
427
  llmGuidance: 'Use Image for pictures and backgrounds. Use fit="cover" for full-bleed, fit="contain" to avoid cropping.'
370
428
  };
371
429
 
430
+ // src/components/primitives/Layer.tsx
431
+ var import_react3 = __toESM(require("react"));
432
+ var import_zod8 = require("zod");
433
+ var import_jsx_runtime7 = require("react/jsx-runtime");
434
+ var LayerPropsSchema = import_zod8.z.object({
435
+ zIndex: import_zod8.z.number().int().default(0).describe("Higher zIndex renders on top"),
436
+ inset: import_zod8.z.number().min(0).default(0).describe("Inset from all sides in pixels"),
437
+ opacity: import_zod8.z.number().min(0).max(1).default(1),
438
+ pointerEvents: import_zod8.z.enum(["none", "auto"]).default("none")
439
+ });
440
+ var Layer = ({ zIndex, inset, opacity, pointerEvents, children }) => {
441
+ const layers = import_react3.default.Children.toArray(children);
442
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
443
+ "div",
444
+ {
445
+ style: {
446
+ position: "absolute",
447
+ left: inset,
448
+ right: inset,
449
+ top: inset,
450
+ bottom: inset,
451
+ zIndex,
452
+ opacity,
453
+ pointerEvents,
454
+ boxSizing: "border-box"
455
+ },
456
+ children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Fill, { children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) })
457
+ }
458
+ );
459
+ };
460
+ var LayerComponentMetadata = {
461
+ kind: "primitive",
462
+ category: "layout",
463
+ acceptsChildren: true,
464
+ minChildren: 1,
465
+ description: "One overlay layer with explicit zIndex inside Layers",
466
+ llmGuidance: "Use Layer inside Layers to control stacking. Put exactly one child in a Layer (recommended)."
467
+ };
468
+
469
+ // src/components/primitives/Layers.tsx
470
+ var import_zod9 = require("zod");
471
+ var import_jsx_runtime8 = require("react/jsx-runtime");
472
+ var LayersPropsSchema = import_zod9.z.object({
473
+ overflow: import_zod9.z.enum(["visible", "hidden"]).default("visible").describe("Clip layers to bounds")
474
+ });
475
+ var Layers = ({ overflow, children }) => {
476
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Fill, { style: { overflow }, children });
477
+ };
478
+ var LayersComponentMetadata = {
479
+ kind: "primitive",
480
+ category: "layout",
481
+ acceptsChildren: true,
482
+ minChildren: 1,
483
+ description: "Overlay container for stacking children (use Layer for zIndex)",
484
+ llmGuidance: "Use Layers to stack background/content/overlays. Prefer Layer children with explicit zIndex."
485
+ };
486
+
372
487
  // src/components/primitives/Scene.tsx
373
- var import_remotion4 = require("remotion");
374
- var import_zod7 = require("zod");
375
- var import_jsx_runtime5 = require("react/jsx-runtime");
376
- var ScenePropsSchema = import_zod7.z.object({
488
+ var import_react4 = __toESM(require("react"));
489
+ var import_remotion3 = require("remotion");
490
+ var import_zod10 = require("zod");
491
+ var import_jsx_runtime9 = require("react/jsx-runtime");
492
+ var ScenePropsSchema = import_zod10.z.object({
377
493
  background: BackgroundSpecSchema
378
494
  });
379
495
  var resolveAsset2 = (value) => {
380
- return isRemoteAssetPath(value) ? value : (0, import_remotion4.staticFile)(staticFileInputFromAssetPath(value));
496
+ return isRemoteAssetPath(value) ? value : (0, import_remotion3.staticFile)(staticFileInputFromAssetPath(value));
381
497
  };
382
498
  var Scene = ({ background, children }) => {
383
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_remotion4.AbsoluteFill, { children: [
384
- background.type === "color" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_remotion4.AbsoluteFill, { style: { backgroundColor: background.value } }) : background.type === "image" ? /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
385
- import_remotion4.Img,
499
+ const layers = import_react4.default.Children.toArray(children);
500
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_remotion3.AbsoluteFill, { children: [
501
+ background.type === "color" ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_remotion3.AbsoluteFill, { style: { backgroundColor: background.value } }) : background.type === "image" ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
502
+ import_remotion3.Img,
386
503
  {
387
504
  src: resolveAsset2(background.value),
388
505
  style: { width: "100%", height: "100%", objectFit: "cover" }
389
506
  }
390
- ) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
391
- import_remotion4.Video,
507
+ ) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
508
+ import_remotion3.Video,
392
509
  {
393
510
  src: resolveAsset2(background.value),
394
511
  style: { width: "100%", height: "100%", objectFit: "cover" }
395
512
  }
396
513
  ),
397
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_remotion4.AbsoluteFill, { children })
514
+ /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_remotion3.AbsoluteFill, { children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_remotion3.AbsoluteFill, { children: child }, i)) })
398
515
  ] });
399
516
  };
400
517
  var SceneComponentMetadata = {
@@ -406,37 +523,37 @@ var SceneComponentMetadata = {
406
523
  };
407
524
 
408
525
  // src/components/primitives/Segment.tsx
409
- var import_remotion5 = require("remotion");
410
- var import_zod8 = require("zod");
411
- var import_jsx_runtime6 = require("react/jsx-runtime");
412
- var TransitionPropsSchema = import_zod8.z.object({
413
- type: import_zod8.z.string().min(1),
414
- durationInFrames: import_zod8.z.number().int().positive(),
415
- props: import_zod8.z.record(import_zod8.z.string(), import_zod8.z.unknown()).optional()
526
+ var import_remotion4 = require("remotion");
527
+ var import_zod11 = require("zod");
528
+ var import_jsx_runtime10 = require("react/jsx-runtime");
529
+ var TransitionPropsSchema = import_zod11.z.object({
530
+ type: import_zod11.z.string().min(1),
531
+ durationInFrames: import_zod11.z.number().int().positive(),
532
+ props: import_zod11.z.record(import_zod11.z.string(), import_zod11.z.unknown()).optional()
416
533
  });
417
- var SegmentPropsSchema = import_zod8.z.object({
534
+ var SegmentPropsSchema = import_zod11.z.object({
418
535
  enterTransition: TransitionPropsSchema.optional(),
419
536
  exitTransition: TransitionPropsSchema.optional()
420
537
  });
421
538
  function getSlideOptions(raw) {
422
- const parsed = import_zod8.z.object({
423
- direction: import_zod8.z.enum(["left", "right", "up", "down"]).default("left"),
424
- distance: import_zod8.z.number().int().min(1).max(2e3).default(80)
539
+ const parsed = import_zod11.z.object({
540
+ direction: import_zod11.z.enum(["left", "right", "up", "down"]).default("left"),
541
+ distance: import_zod11.z.number().int().min(1).max(2e3).default(80)
425
542
  }).safeParse(raw ?? {});
426
543
  if (parsed.success) return parsed.data;
427
544
  return { direction: "left", distance: 80 };
428
545
  }
429
546
  function getZoomOptions(raw) {
430
- const parsed = import_zod8.z.object({
431
- type: import_zod8.z.enum(["zoomIn", "zoomOut"]).default("zoomIn")
547
+ const parsed = import_zod11.z.object({
548
+ type: import_zod11.z.enum(["zoomIn", "zoomOut"]).default("zoomIn")
432
549
  }).safeParse(raw ?? {});
433
550
  if (parsed.success) return parsed.data;
434
551
  return { type: "zoomIn" };
435
552
  }
436
553
  function getWipeOptions(raw) {
437
- const parsed = import_zod8.z.object({
438
- direction: import_zod8.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
439
- softEdge: import_zod8.z.boolean().default(false)
554
+ const parsed = import_zod11.z.object({
555
+ direction: import_zod11.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
556
+ softEdge: import_zod11.z.boolean().default(false)
440
557
  }).safeParse(raw ?? {});
441
558
  if (parsed.success) return parsed.data;
442
559
  return { direction: "right", softEdge: false };
@@ -449,18 +566,18 @@ function clipFor(direction, p) {
449
566
  return `polygon(0 0, ${100 * p}% 0, 0 ${100 * p}%)`;
450
567
  }
451
568
  function getCircularOptions(raw) {
452
- const parsed = import_zod8.z.object({
453
- direction: import_zod8.z.enum(["open", "close"]).default("open"),
454
- center: import_zod8.z.object({
455
- x: import_zod8.z.number().min(0).max(1).default(0.5),
456
- y: import_zod8.z.number().min(0).max(1).default(0.5)
569
+ const parsed = import_zod11.z.object({
570
+ direction: import_zod11.z.enum(["open", "close"]).default("open"),
571
+ center: import_zod11.z.object({
572
+ x: import_zod11.z.number().min(0).max(1).default(0.5),
573
+ y: import_zod11.z.number().min(0).max(1).default(0.5)
457
574
  }).default({ x: 0.5, y: 0.5 })
458
575
  }).safeParse(raw ?? {});
459
576
  if (parsed.success) return parsed.data;
460
577
  return { direction: "open", center: { x: 0.5, y: 0.5 } };
461
578
  }
462
579
  var Segment = ({ enterTransition, exitTransition, children, __wavesDurationInFrames }) => {
463
- const frame = (0, import_remotion5.useCurrentFrame)();
580
+ const frame = (0, import_remotion4.useCurrentFrame)();
464
581
  const durationInFrames = __wavesDurationInFrames ?? 0;
465
582
  let opacity = 1;
466
583
  let translateX = 0;
@@ -471,35 +588,35 @@ var Segment = ({ enterTransition, exitTransition, children, __wavesDurationInFra
471
588
  if (enterTransition) {
472
589
  const d = enterTransition.durationInFrames;
473
590
  if (enterTransition.type === "FadeTransition") {
474
- opacity *= (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
591
+ opacity *= (0, import_remotion4.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
475
592
  }
476
593
  if (enterTransition.type === "SlideTransition") {
477
594
  const opts = getSlideOptions(enterTransition.props);
478
- const t = (0, import_remotion5.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
595
+ const t = (0, import_remotion4.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
479
596
  const delta = opts.distance * t;
480
597
  if (opts.direction === "left") translateX += -delta;
481
598
  if (opts.direction === "right") translateX += delta;
482
599
  if (opts.direction === "up") translateY += -delta;
483
600
  if (opts.direction === "down") translateY += delta;
484
- opacity *= (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
601
+ opacity *= (0, import_remotion4.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
485
602
  }
486
603
  if (enterTransition.type === "ZoomTransition") {
487
604
  const opts = getZoomOptions(enterTransition.props);
488
605
  const fromScale = opts.type === "zoomIn" ? 1.2 : 0.85;
489
- const t = (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
606
+ const t = (0, import_remotion4.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
490
607
  scale *= fromScale + (1 - fromScale) * t;
491
608
  opacity *= t;
492
609
  }
493
610
  if (enterTransition.type === "WipeTransition") {
494
611
  const opts = getWipeOptions(enterTransition.props);
495
- const t = (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
612
+ const t = (0, import_remotion4.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
496
613
  clipPath = clipFor(opts.direction, t);
497
614
  filter = opts.softEdge ? "blur(0.4px)" : void 0;
498
615
  }
499
616
  if (enterTransition.type === "CircularReveal") {
500
617
  const opts = getCircularOptions(enterTransition.props);
501
618
  const open = opts.direction === "open";
502
- const t = (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
619
+ const t = (0, import_remotion4.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
503
620
  const radiusPct = open ? 150 * t : 150 * (1 - t);
504
621
  clipPath = `circle(${radiusPct}% at ${Math.round(opts.center.x * 100)}% ${Math.round(opts.center.y * 100)}%)`;
505
622
  }
@@ -508,41 +625,41 @@ var Segment = ({ enterTransition, exitTransition, children, __wavesDurationInFra
508
625
  const d = exitTransition.durationInFrames;
509
626
  const start = Math.max(0, durationInFrames - d);
510
627
  if (exitTransition.type === "FadeTransition") {
511
- opacity *= (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
628
+ opacity *= (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
512
629
  }
513
630
  if (exitTransition.type === "SlideTransition") {
514
631
  const opts = getSlideOptions(exitTransition.props);
515
- const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
632
+ const t = (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
516
633
  const delta = opts.distance * t;
517
634
  if (opts.direction === "left") translateX += delta;
518
635
  if (opts.direction === "right") translateX += -delta;
519
636
  if (opts.direction === "up") translateY += delta;
520
637
  if (opts.direction === "down") translateY += -delta;
521
- opacity *= (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
638
+ opacity *= (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
522
639
  }
523
640
  if (exitTransition.type === "ZoomTransition") {
524
641
  const opts = getZoomOptions(exitTransition.props);
525
642
  const toScale = opts.type === "zoomIn" ? 1.25 : 0.75;
526
- const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
643
+ const t = (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
527
644
  scale *= 1 + (toScale - 1) * t;
528
645
  opacity *= 1 - t;
529
646
  }
530
647
  if (exitTransition.type === "WipeTransition") {
531
648
  const opts = getWipeOptions(exitTransition.props);
532
- const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
649
+ const t = (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
533
650
  clipPath = clipFor(opts.direction, t);
534
651
  filter = opts.softEdge ? "blur(0.4px)" : void 0;
535
652
  }
536
653
  if (exitTransition.type === "CircularReveal") {
537
654
  const opts = getCircularOptions(exitTransition.props);
538
655
  const open = opts.direction === "open";
539
- const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
656
+ const t = (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
540
657
  const radiusPct = open ? 150 * (1 - t) : 150 * t;
541
658
  clipPath = `circle(${radiusPct}% at ${Math.round(opts.center.x * 100)}% ${Math.round(opts.center.y * 100)}%)`;
542
659
  }
543
660
  }
544
661
  const transform = `translate(${translateX}px, ${translateY}px) scale(${scale})`;
545
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_remotion5.AbsoluteFill, { style: { opacity, transform, clipPath, filter }, children });
662
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_remotion4.AbsoluteFill, { style: { opacity, transform, clipPath, filter }, children });
546
663
  };
547
664
  var SegmentComponentMetadata = {
548
665
  kind: "primitive",
@@ -555,18 +672,18 @@ var SegmentComponentMetadata = {
555
672
  };
556
673
 
557
674
  // src/components/primitives/Shape.tsx
558
- var import_zod9 = require("zod");
559
- var import_jsx_runtime7 = require("react/jsx-runtime");
560
- var ShapePropsSchema = import_zod9.z.object({
561
- shape: import_zod9.z.enum(["rect", "circle"]).default("rect"),
562
- x: import_zod9.z.number().default(0),
563
- y: import_zod9.z.number().default(0),
564
- width: import_zod9.z.number().positive().default(100),
565
- height: import_zod9.z.number().positive().default(100),
566
- fill: import_zod9.z.string().default("#FFFFFF"),
567
- strokeColor: import_zod9.z.string().optional(),
568
- strokeWidth: import_zod9.z.number().min(0).default(0),
569
- opacity: import_zod9.z.number().min(0).max(1).default(1)
675
+ var import_zod12 = require("zod");
676
+ var import_jsx_runtime11 = require("react/jsx-runtime");
677
+ var ShapePropsSchema = import_zod12.z.object({
678
+ shape: import_zod12.z.enum(["rect", "circle"]).default("rect"),
679
+ x: import_zod12.z.number().default(0),
680
+ y: import_zod12.z.number().default(0),
681
+ width: import_zod12.z.number().positive().default(100),
682
+ height: import_zod12.z.number().positive().default(100),
683
+ fill: import_zod12.z.string().default("#FFFFFF"),
684
+ strokeColor: import_zod12.z.string().optional(),
685
+ strokeWidth: import_zod12.z.number().min(0).default(0),
686
+ opacity: import_zod12.z.number().min(0).max(1).default(1)
570
687
  });
571
688
  var Shape = ({
572
689
  shape,
@@ -579,7 +696,7 @@ var Shape = ({
579
696
  strokeWidth,
580
697
  opacity
581
698
  }) => {
582
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
699
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
583
700
  "div",
584
701
  {
585
702
  style: {
@@ -604,15 +721,14 @@ var ShapeComponentMetadata = {
604
721
  };
605
722
 
606
723
  // src/components/primitives/Stack.tsx
607
- var import_remotion6 = require("remotion");
608
- var import_zod10 = require("zod");
609
- var import_jsx_runtime8 = require("react/jsx-runtime");
610
- var StackPropsSchema = import_zod10.z.object({
611
- direction: import_zod10.z.enum(["row", "column"]).default("column"),
612
- gap: import_zod10.z.number().min(0).default(24),
613
- padding: import_zod10.z.number().min(0).default(0),
614
- align: import_zod10.z.enum(["start", "center", "end", "stretch"]).default("center"),
615
- justify: import_zod10.z.enum(["start", "center", "end", "between"]).default("center")
724
+ var import_zod13 = require("zod");
725
+ var import_jsx_runtime12 = require("react/jsx-runtime");
726
+ var StackPropsSchema = import_zod13.z.object({
727
+ direction: import_zod13.z.enum(["row", "column"]).default("column"),
728
+ gap: import_zod13.z.number().min(0).default(24),
729
+ padding: import_zod13.z.number().min(0).default(0),
730
+ align: import_zod13.z.enum(["start", "center", "end", "stretch"]).default("center"),
731
+ justify: import_zod13.z.enum(["start", "center", "end", "between"]).default("center")
616
732
  });
617
733
  var mapAlign2 = (a) => {
618
734
  if (a === "start") return "flex-start";
@@ -627,8 +743,8 @@ var mapJustify2 = (j) => {
627
743
  return "center";
628
744
  };
629
745
  var Stack = ({ direction, gap, padding, align, justify, children }) => {
630
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
631
- import_remotion6.AbsoluteFill,
746
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
747
+ Fill,
632
748
  {
633
749
  style: {
634
750
  display: "flex",
@@ -652,17 +768,22 @@ var StackComponentMetadata = {
652
768
  };
653
769
 
654
770
  // src/components/primitives/Text.tsx
655
- var import_remotion7 = require("remotion");
656
- var import_zod11 = require("zod");
657
- var import_jsx_runtime9 = require("react/jsx-runtime");
658
- var TextPropsSchema = import_zod11.z.object({
659
- content: import_zod11.z.string(),
660
- fontSize: import_zod11.z.number().default(48),
661
- color: import_zod11.z.string().default("#FFFFFF"),
662
- position: import_zod11.z.enum(["top", "center", "bottom", "left", "right"]).default("center"),
663
- animation: import_zod11.z.enum(["none", "fade", "slide", "zoom"]).default("fade")
771
+ var import_remotion5 = require("remotion");
772
+ var import_zod14 = require("zod");
773
+ var import_jsx_runtime13 = require("react/jsx-runtime");
774
+ var TextPropsSchema = import_zod14.z.object({
775
+ content: import_zod14.z.string(),
776
+ fontSize: import_zod14.z.number().default(48),
777
+ color: import_zod14.z.string().default("#FFFFFF"),
778
+ fontFamily: import_zod14.z.string().default("Inter"),
779
+ position: import_zod14.z.enum(["top", "center", "bottom", "left", "right"]).default("center"),
780
+ animation: import_zod14.z.enum(["none", "fade", "slide", "zoom"]).default("fade"),
781
+ maxWidthPct: import_zod14.z.number().min(0.1).max(1).default(0.9),
782
+ safeInsetPct: import_zod14.z.number().min(0).max(0.25).default(0.06),
783
+ textAlign: import_zod14.z.enum(["left", "center", "right"]).default("center")
664
784
  });
665
- var getPositionStyles = (position) => {
785
+ var getPositionStyles = (position, safeInsetPct) => {
786
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
666
787
  const base = {
667
788
  display: "flex",
668
789
  justifyContent: "center",
@@ -670,13 +791,13 @@ var getPositionStyles = (position) => {
670
791
  };
671
792
  switch (position) {
672
793
  case "top":
673
- return { ...base, alignItems: "flex-start", paddingTop: 60 };
794
+ return { ...base, alignItems: "flex-start", paddingTop: inset };
674
795
  case "bottom":
675
- return { ...base, alignItems: "flex-end", paddingBottom: 60 };
796
+ return { ...base, alignItems: "flex-end", paddingBottom: inset };
676
797
  case "left":
677
- return { ...base, justifyContent: "flex-start", paddingLeft: 60 };
798
+ return { ...base, justifyContent: "flex-start", paddingLeft: inset };
678
799
  case "right":
679
- return { ...base, justifyContent: "flex-end", paddingRight: 60 };
800
+ return { ...base, justifyContent: "flex-end", paddingRight: inset };
680
801
  default:
681
802
  return base;
682
803
  }
@@ -685,29 +806,29 @@ var getAnimationStyle = (frame, animation) => {
685
806
  const animDuration = 30;
686
807
  switch (animation) {
687
808
  case "fade": {
688
- const opacity = (0, import_remotion7.interpolate)(frame, [0, animDuration], [0, 1], {
809
+ const opacity = (0, import_remotion5.interpolate)(frame, [0, animDuration], [0, 1], {
689
810
  extrapolateLeft: "clamp",
690
811
  extrapolateRight: "clamp"
691
812
  });
692
813
  return { opacity };
693
814
  }
694
815
  case "slide": {
695
- const translateY = (0, import_remotion7.interpolate)(frame, [0, animDuration], [50, 0], {
816
+ const translateY = (0, import_remotion5.interpolate)(frame, [0, animDuration], [50, 0], {
696
817
  extrapolateLeft: "clamp",
697
818
  extrapolateRight: "clamp"
698
819
  });
699
- const opacity = (0, import_remotion7.interpolate)(frame, [0, animDuration], [0, 1], {
820
+ const opacity = (0, import_remotion5.interpolate)(frame, [0, animDuration], [0, 1], {
700
821
  extrapolateLeft: "clamp",
701
822
  extrapolateRight: "clamp"
702
823
  });
703
824
  return { transform: `translateY(${translateY}px)`, opacity };
704
825
  }
705
826
  case "zoom": {
706
- const scale = (0, import_remotion7.interpolate)(frame, [0, animDuration], [0.8, 1], {
827
+ const scale = (0, import_remotion5.interpolate)(frame, [0, animDuration], [0.8, 1], {
707
828
  extrapolateLeft: "clamp",
708
829
  extrapolateRight: "clamp"
709
830
  });
710
- const opacity = (0, import_remotion7.interpolate)(frame, [0, animDuration], [0, 1], {
831
+ const opacity = (0, import_remotion5.interpolate)(frame, [0, animDuration], [0, 1], {
711
832
  extrapolateLeft: "clamp",
712
833
  extrapolateRight: "clamp"
713
834
  });
@@ -717,18 +838,32 @@ var getAnimationStyle = (frame, animation) => {
717
838
  return {};
718
839
  }
719
840
  };
720
- var Text = ({ content, fontSize, color, position, animation }) => {
721
- const frame = (0, import_remotion7.useCurrentFrame)();
722
- const positionStyles6 = getPositionStyles(position);
841
+ var Text = ({
842
+ content,
843
+ fontSize,
844
+ color,
845
+ fontFamily,
846
+ position,
847
+ animation,
848
+ maxWidthPct,
849
+ safeInsetPct,
850
+ textAlign
851
+ }) => {
852
+ const frame = (0, import_remotion5.useCurrentFrame)();
853
+ const positionStyles6 = getPositionStyles(position, safeInsetPct);
723
854
  const animationStyles = getAnimationStyle(frame, animation);
724
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_remotion7.AbsoluteFill, { style: positionStyles6, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
855
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Fill, { style: positionStyles6, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
725
856
  "div",
726
857
  {
727
858
  style: {
728
859
  fontSize,
729
860
  color,
861
+ fontFamily,
730
862
  fontWeight: 600,
731
- textAlign: "center",
863
+ textAlign,
864
+ maxWidth: `${Math.round(maxWidthPct * 100)}%`,
865
+ overflowWrap: "anywhere",
866
+ wordBreak: "break-word",
732
867
  ...animationStyles
733
868
  },
734
869
  children: content
@@ -759,20 +894,20 @@ var TextComponentMetadata = {
759
894
  };
760
895
 
761
896
  // src/components/primitives/Video.tsx
762
- var import_remotion8 = require("remotion");
763
- var import_zod12 = require("zod");
764
- var import_jsx_runtime10 = require("react/jsx-runtime");
765
- var VideoPropsSchema = import_zod12.z.object({
766
- src: import_zod12.z.string().min(1),
767
- fit: import_zod12.z.enum(["cover", "contain"]).default("cover"),
768
- borderRadius: import_zod12.z.number().min(0).default(0),
769
- opacity: import_zod12.z.number().min(0).max(1).default(1),
770
- muted: import_zod12.z.boolean().default(true)
897
+ var import_remotion6 = require("remotion");
898
+ var import_zod15 = require("zod");
899
+ var import_jsx_runtime14 = require("react/jsx-runtime");
900
+ var VideoPropsSchema = import_zod15.z.object({
901
+ src: import_zod15.z.string().min(1),
902
+ fit: import_zod15.z.enum(["cover", "contain"]).default("cover"),
903
+ borderRadius: import_zod15.z.number().min(0).default(0),
904
+ opacity: import_zod15.z.number().min(0).max(1).default(1),
905
+ muted: import_zod15.z.boolean().default(true)
771
906
  });
772
- var resolveAsset3 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion8.staticFile)(staticFileInputFromAssetPath(value));
907
+ var resolveAsset3 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion6.staticFile)(staticFileInputFromAssetPath(value));
773
908
  var Video2 = ({ src, fit, borderRadius, opacity, muted }) => {
774
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_remotion8.AbsoluteFill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
775
- import_remotion8.Video,
909
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Fill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
910
+ import_remotion6.Video,
776
911
  {
777
912
  src: resolveAsset3(src),
778
913
  muted,
@@ -788,19 +923,19 @@ var VideoComponentMetadata = {
788
923
  };
789
924
 
790
925
  // src/components/composites/AnimatedCounter.tsx
791
- var import_remotion9 = require("remotion");
792
- var import_zod13 = require("zod");
793
- var import_jsx_runtime11 = require("react/jsx-runtime");
794
- var AnimatedCounterPropsSchema = import_zod13.z.object({
795
- from: import_zod13.z.number().default(0),
796
- to: import_zod13.z.number().default(100),
797
- fontSize: import_zod13.z.number().min(8).max(300).default(96),
798
- color: import_zod13.z.string().default("#FFFFFF"),
799
- fontFamily: import_zod13.z.string().default("Inter"),
800
- fontWeight: import_zod13.z.number().int().min(100).max(900).default(700),
801
- icon: import_zod13.z.string().optional(),
802
- suffix: import_zod13.z.string().optional(),
803
- animationType: import_zod13.z.enum(["spring", "linear"]).default("spring")
926
+ var import_remotion7 = require("remotion");
927
+ var import_zod16 = require("zod");
928
+ var import_jsx_runtime15 = require("react/jsx-runtime");
929
+ var AnimatedCounterPropsSchema = import_zod16.z.object({
930
+ from: import_zod16.z.number().default(0),
931
+ to: import_zod16.z.number().default(100),
932
+ fontSize: import_zod16.z.number().min(8).max(300).default(96),
933
+ color: import_zod16.z.string().default("#FFFFFF"),
934
+ fontFamily: import_zod16.z.string().default("Inter"),
935
+ fontWeight: import_zod16.z.number().int().min(100).max(900).default(700),
936
+ icon: import_zod16.z.string().optional(),
937
+ suffix: import_zod16.z.string().optional(),
938
+ animationType: import_zod16.z.enum(["spring", "linear"]).default("spring")
804
939
  });
805
940
  var AnimatedCounter = ({
806
941
  from,
@@ -814,16 +949,16 @@ var AnimatedCounter = ({
814
949
  animationType,
815
950
  __wavesDurationInFrames
816
951
  }) => {
817
- const frame = (0, import_remotion9.useCurrentFrame)();
818
- const { fps } = (0, import_remotion9.useVideoConfig)();
952
+ const frame = (0, import_remotion7.useCurrentFrame)();
953
+ const { fps } = (0, import_remotion7.useVideoConfig)();
819
954
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
820
- const progress = animationType === "spring" ? (0, import_remotion9.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } }) : (0, import_remotion9.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
955
+ const progress = animationType === "spring" ? (0, import_remotion7.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } }) : (0, import_remotion7.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
821
956
  const value = from + (to - from) * Math.max(0, Math.min(1, progress));
822
957
  const rounded = Math.round(value);
823
958
  const label = `${rounded.toLocaleString()}${suffix ?? ""}`;
824
- return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(import_remotion9.AbsoluteFill, { style: { display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { style: { textAlign: "center" }, children: [
825
- icon ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: { fontSize: Math.round(fontSize * 0.5), marginBottom: 18 }, children: icon }) : null,
826
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: { fontSize, color, fontFamily, fontWeight, lineHeight: 1 }, children: label })
959
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Fill, { style: { display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { style: { textAlign: "center" }, children: [
960
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { fontSize: Math.round(fontSize * 0.5), marginBottom: 18 }, children: icon }) : null,
961
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { fontSize, color, fontFamily, fontWeight, lineHeight: 1 }, children: label })
827
962
  ] }) });
828
963
  };
829
964
  var AnimatedCounterComponentMetadata = {
@@ -838,27 +973,27 @@ var AnimatedCounterComponentMetadata = {
838
973
  };
839
974
 
840
975
  // src/components/composites/BarChart.tsx
841
- var import_remotion10 = require("remotion");
842
- var import_zod14 = require("zod");
843
- var import_jsx_runtime12 = require("react/jsx-runtime");
844
- var BarChartPropsSchema = import_zod14.z.object({
845
- data: import_zod14.z.array(import_zod14.z.object({
846
- label: import_zod14.z.string().min(1),
847
- value: import_zod14.z.number(),
848
- color: import_zod14.z.string().optional()
976
+ var import_remotion8 = require("remotion");
977
+ var import_zod17 = require("zod");
978
+ var import_jsx_runtime16 = require("react/jsx-runtime");
979
+ var BarChartPropsSchema = import_zod17.z.object({
980
+ data: import_zod17.z.array(import_zod17.z.object({
981
+ label: import_zod17.z.string().min(1),
982
+ value: import_zod17.z.number(),
983
+ color: import_zod17.z.string().optional()
849
984
  })).min(2).max(8),
850
- orientation: import_zod14.z.enum(["horizontal", "vertical"]).default("vertical"),
851
- showValues: import_zod14.z.boolean().default(true),
852
- showGrid: import_zod14.z.boolean().default(false),
853
- maxValue: import_zod14.z.number().optional()
985
+ orientation: import_zod17.z.enum(["horizontal", "vertical"]).default("vertical"),
986
+ showValues: import_zod17.z.boolean().default(true),
987
+ showGrid: import_zod17.z.boolean().default(false),
988
+ maxValue: import_zod17.z.number().optional()
854
989
  });
855
990
  var BarChart = ({ data, orientation, showValues, showGrid, maxValue }) => {
856
- const frame = (0, import_remotion10.useCurrentFrame)();
857
- const { fps } = (0, import_remotion10.useVideoConfig)();
991
+ const frame = (0, import_remotion8.useCurrentFrame)();
992
+ const { fps } = (0, import_remotion8.useVideoConfig)();
858
993
  const max = maxValue ?? Math.max(...data.map((d) => d.value));
859
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_remotion10.AbsoluteFill, { style: { padding: 90, boxSizing: "border-box" }, children: [
860
- showGrid ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { position: "absolute", left: 90, right: 90, top: 90, bottom: 90, opacity: 0.15, backgroundImage: "linear-gradient(#fff 1px, transparent 1px)", backgroundSize: "100% 60px" } }) : null,
861
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
994
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Fill, { style: { padding: 90, boxSizing: "border-box" }, children: [
995
+ showGrid ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { position: "absolute", left: 90, right: 90, top: 90, bottom: 90, opacity: 0.15, backgroundImage: "linear-gradient(#fff 1px, transparent 1px)", backgroundSize: "100% 60px" } }) : null,
996
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
862
997
  "div",
863
998
  {
864
999
  style: {
@@ -871,13 +1006,13 @@ var BarChart = ({ data, orientation, showValues, showGrid, maxValue }) => {
871
1006
  justifyContent: "space-between"
872
1007
  },
873
1008
  children: data.map((d, i) => {
874
- const p = (0, import_remotion10.spring)({ frame: frame - i * 4, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1009
+ const p = (0, import_remotion8.spring)({ frame: frame - i * 4, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
875
1010
  const ratio = max === 0 ? 0 : d.value / max * p;
876
1011
  const color = d.color ?? "#0A84FF";
877
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", gap: 10 }, children: [
878
- orientation === "vertical" ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { width: "100%", flex: 1, display: "flex", alignItems: "flex-end" }, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { width: "100%", height: `${Math.round(ratio * 100)}%`, backgroundColor: color, borderRadius: 12 } }) }) : /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { width: "100%", display: "flex", alignItems: "center", gap: 12 }, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { flex: 1, height: 18, backgroundColor: "rgba(255,255,255,0.15)", borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { width: `${Math.round(ratio * 100)}%`, height: "100%", backgroundColor: color } }) }) }),
879
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 700, fontSize: 22, opacity: 0.9 }, children: d.label }),
880
- showValues ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 26 }, children: Math.round(d.value).toLocaleString() }) : null
1012
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", gap: 10 }, children: [
1013
+ orientation === "vertical" ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { width: "100%", flex: 1, display: "flex", alignItems: "flex-end" }, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { width: "100%", height: `${Math.round(ratio * 100)}%`, backgroundColor: color, borderRadius: 12 } }) }) : /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { width: "100%", display: "flex", alignItems: "center", gap: 12 }, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { flex: 1, height: 18, backgroundColor: "rgba(255,255,255,0.15)", borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { width: `${Math.round(ratio * 100)}%`, height: "100%", backgroundColor: color } }) }) }),
1014
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 700, fontSize: 22, opacity: 0.9 }, children: d.label }),
1015
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 26 }, children: Math.round(d.value).toLocaleString() }) : null
881
1016
  ] }, d.label);
882
1017
  })
883
1018
  }
@@ -892,31 +1027,31 @@ var BarChartComponentMetadata = {
892
1027
  };
893
1028
 
894
1029
  // src/components/composites/CardStack.tsx
895
- var import_remotion11 = require("remotion");
896
- var import_zod15 = require("zod");
897
- var import_jsx_runtime13 = require("react/jsx-runtime");
898
- var CardSchema = import_zod15.z.object({
899
- title: import_zod15.z.string().min(1),
900
- content: import_zod15.z.string().min(1),
901
- backgroundColor: import_zod15.z.string().optional()
1030
+ var import_remotion9 = require("remotion");
1031
+ var import_zod18 = require("zod");
1032
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1033
+ var CardSchema = import_zod18.z.object({
1034
+ title: import_zod18.z.string().min(1),
1035
+ content: import_zod18.z.string().min(1),
1036
+ backgroundColor: import_zod18.z.string().optional()
902
1037
  });
903
- var CardStackPropsSchema = import_zod15.z.object({
904
- cards: import_zod15.z.array(CardSchema).min(2).max(5),
905
- transition: import_zod15.z.enum(["flip", "slide", "fade"]).default("flip"),
906
- displayDuration: import_zod15.z.number().int().min(30).max(150).default(90)
1038
+ var CardStackPropsSchema = import_zod18.z.object({
1039
+ cards: import_zod18.z.array(CardSchema).min(2).max(5),
1040
+ transition: import_zod18.z.enum(["flip", "slide", "fade"]).default("flip"),
1041
+ displayDuration: import_zod18.z.number().int().min(30).max(150).default(90)
907
1042
  });
908
1043
  var CardStack = ({ cards, transition, displayDuration }) => {
909
- const frame = (0, import_remotion11.useCurrentFrame)();
910
- const { fps } = (0, import_remotion11.useVideoConfig)();
1044
+ const frame = (0, import_remotion9.useCurrentFrame)();
1045
+ const { fps } = (0, import_remotion9.useVideoConfig)();
911
1046
  const index = Math.min(cards.length - 1, Math.floor(frame / displayDuration));
912
1047
  const local = frame - index * displayDuration;
913
- const p = (0, import_remotion11.spring)({ frame: local, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1048
+ const p = (0, import_remotion9.spring)({ frame: local, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
914
1049
  const card = cards[index];
915
1050
  const bg = card.backgroundColor ?? "rgba(255,255,255,0.1)";
916
1051
  const opacity = transition === "fade" ? p : 1;
917
- const slideX = transition === "slide" ? (0, import_remotion11.interpolate)(p, [0, 1], [80, 0]) : 0;
918
- const rotateY = transition === "flip" ? (0, import_remotion11.interpolate)(p, [0, 1], [70, 0]) : 0;
919
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_remotion11.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1052
+ const slideX = transition === "slide" ? (0, import_remotion9.interpolate)(p, [0, 1], [80, 0]) : 0;
1053
+ const rotateY = transition === "flip" ? (0, import_remotion9.interpolate)(p, [0, 1], [70, 0]) : 0;
1054
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
920
1055
  "div",
921
1056
  {
922
1057
  style: {
@@ -933,8 +1068,8 @@ var CardStack = ({ cards, transition, displayDuration }) => {
933
1068
  opacity
934
1069
  },
935
1070
  children: [
936
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { fontSize: 56, fontWeight: 900, marginBottom: 22 }, children: card.title }),
937
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { fontSize: 30, fontWeight: 700, opacity: 0.9, lineHeight: 1.3 }, children: card.content })
1071
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { fontSize: 56, fontWeight: 900, marginBottom: 22 }, children: card.title }),
1072
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { fontSize: 30, fontWeight: 700, opacity: 0.9, lineHeight: 1.3 }, children: card.content })
938
1073
  ]
939
1074
  }
940
1075
  ) });
@@ -947,18 +1082,19 @@ var CardStackComponentMetadata = {
947
1082
  };
948
1083
 
949
1084
  // src/components/composites/CircularReveal.tsx
950
- var import_remotion12 = require("remotion");
951
- var import_zod16 = require("zod");
952
- var import_jsx_runtime14 = require("react/jsx-runtime");
953
- var CenterSchema = import_zod16.z.object({
954
- x: import_zod16.z.number().min(0).max(1).default(0.5),
955
- y: import_zod16.z.number().min(0).max(1).default(0.5)
1085
+ var import_react5 = __toESM(require("react"));
1086
+ var import_remotion10 = require("remotion");
1087
+ var import_zod19 = require("zod");
1088
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1089
+ var CenterSchema = import_zod19.z.object({
1090
+ x: import_zod19.z.number().min(0).max(1).default(0.5),
1091
+ y: import_zod19.z.number().min(0).max(1).default(0.5)
956
1092
  });
957
- var CircularRevealPropsSchema = import_zod16.z.object({
958
- durationInFrames: import_zod16.z.number().int().min(10).max(60).default(30),
959
- direction: import_zod16.z.enum(["open", "close"]).default("open"),
1093
+ var CircularRevealPropsSchema = import_zod19.z.object({
1094
+ durationInFrames: import_zod19.z.number().int().min(10).max(60).default(30),
1095
+ direction: import_zod19.z.enum(["open", "close"]).default("open"),
960
1096
  center: CenterSchema.optional(),
961
- phase: import_zod16.z.enum(["in", "out", "inOut"]).default("inOut")
1097
+ phase: import_zod19.z.enum(["in", "out", "inOut"]).default("inOut")
962
1098
  });
963
1099
  var CircularReveal = ({
964
1100
  durationInFrames,
@@ -968,22 +1104,23 @@ var CircularReveal = ({
968
1104
  children,
969
1105
  __wavesDurationInFrames
970
1106
  }) => {
971
- const frame = (0, import_remotion12.useCurrentFrame)();
1107
+ const layers = import_react5.default.Children.toArray(children);
1108
+ const frame = (0, import_remotion10.useCurrentFrame)();
972
1109
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
973
1110
  const d = Math.min(durationInFrames, total);
974
1111
  const c = center ?? { x: 0.5, y: 0.5 };
975
1112
  const open = direction === "open";
976
1113
  let radiusPct = open ? 0 : 150;
977
1114
  if (phase === "in" || phase === "inOut") {
978
- const t = (0, import_remotion12.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1115
+ const t = (0, import_remotion10.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
979
1116
  radiusPct = open ? 150 * t : 150 * (1 - t);
980
1117
  }
981
1118
  if (phase === "out" || phase === "inOut") {
982
1119
  const start = Math.max(0, total - d);
983
- const t = (0, import_remotion12.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1120
+ const t = (0, import_remotion10.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
984
1121
  radiusPct = open ? 150 * (1 - t) : 150 * t;
985
1122
  }
986
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_remotion12.AbsoluteFill, { style: { clipPath: `circle(${radiusPct}% at ${Math.round(c.x * 100)}% ${Math.round(c.y * 100)}%)` }, children });
1123
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Fill, { style: { clipPath: `circle(${radiusPct}% at ${Math.round(c.x * 100)}% ${Math.round(c.y * 100)}%)` }, children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
987
1124
  };
988
1125
  var CircularRevealComponentMetadata = {
989
1126
  kind: "composite",
@@ -995,21 +1132,21 @@ var CircularRevealComponentMetadata = {
995
1132
  };
996
1133
 
997
1134
  // src/components/composites/CountUpText.tsx
998
- var import_remotion13 = require("remotion");
999
- var import_zod17 = require("zod");
1000
- var import_jsx_runtime15 = require("react/jsx-runtime");
1001
- var CountUpTextPropsSchema = import_zod17.z.object({
1002
- from: import_zod17.z.number().default(0),
1003
- to: import_zod17.z.number().default(100),
1004
- fontSize: import_zod17.z.number().min(8).max(240).default(72),
1005
- color: import_zod17.z.string().default("#FFFFFF"),
1006
- fontFamily: import_zod17.z.string().default("Inter"),
1007
- fontWeight: import_zod17.z.number().int().min(100).max(900).default(700),
1008
- position: import_zod17.z.enum(["top", "center", "bottom"]).default("center"),
1009
- format: import_zod17.z.enum(["integer", "decimal", "currency", "percentage"]).default("integer"),
1010
- decimals: import_zod17.z.number().int().min(0).max(4).default(0),
1011
- prefix: import_zod17.z.string().optional(),
1012
- suffix: import_zod17.z.string().optional()
1135
+ var import_remotion11 = require("remotion");
1136
+ var import_zod20 = require("zod");
1137
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1138
+ var CountUpTextPropsSchema = import_zod20.z.object({
1139
+ from: import_zod20.z.number().default(0),
1140
+ to: import_zod20.z.number().default(100),
1141
+ fontSize: import_zod20.z.number().min(8).max(240).default(72),
1142
+ color: import_zod20.z.string().default("#FFFFFF"),
1143
+ fontFamily: import_zod20.z.string().default("Inter"),
1144
+ fontWeight: import_zod20.z.number().int().min(100).max(900).default(700),
1145
+ position: import_zod20.z.enum(["top", "center", "bottom"]).default("center"),
1146
+ format: import_zod20.z.enum(["integer", "decimal", "currency", "percentage"]).default("integer"),
1147
+ decimals: import_zod20.z.number().int().min(0).max(4).default(0),
1148
+ prefix: import_zod20.z.string().optional(),
1149
+ suffix: import_zod20.z.string().optional()
1013
1150
  });
1014
1151
  var positionStyles = (position) => {
1015
1152
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -1036,15 +1173,15 @@ var CountUpText = ({
1036
1173
  suffix,
1037
1174
  __wavesDurationInFrames
1038
1175
  }) => {
1039
- const frame = (0, import_remotion13.useCurrentFrame)();
1040
- const { fps } = (0, import_remotion13.useVideoConfig)();
1176
+ const frame = (0, import_remotion11.useCurrentFrame)();
1177
+ const { fps } = (0, import_remotion11.useVideoConfig)();
1041
1178
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1042
- const p = (0, import_remotion13.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
1179
+ const p = (0, import_remotion11.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
1043
1180
  const progress = Math.max(0, Math.min(1, p));
1044
1181
  const value = from + (to - from) * progress;
1045
- const fade = (0, import_remotion13.interpolate)(frame, [0, Math.min(12, total)], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1182
+ const fade = (0, import_remotion11.interpolate)(frame, [0, Math.min(12, total)], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1046
1183
  const label = `${prefix ?? ""}${formatValue(value, format, decimals)}${suffix ?? ""}`;
1047
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_remotion13.AbsoluteFill, { style: { display: "flex", ...positionStyles(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { fontSize, color, fontFamily, fontWeight, opacity: fade, lineHeight: 1 }, children: label }) });
1184
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Fill, { style: { display: "flex", ...positionStyles(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { style: { fontSize, color, fontFamily, fontWeight, opacity: fade, lineHeight: 1 }, children: label }) });
1048
1185
  };
1049
1186
  var CountUpTextComponentMetadata = {
1050
1187
  kind: "composite",
@@ -1054,10 +1191,11 @@ var CountUpTextComponentMetadata = {
1054
1191
  };
1055
1192
 
1056
1193
  // src/components/composites/FadeTransition.tsx
1057
- var import_remotion14 = require("remotion");
1058
- var import_zod18 = require("zod");
1059
- var import_jsx_runtime16 = require("react/jsx-runtime");
1060
- var EasingSchema = import_zod18.z.enum(["linear", "easeIn", "easeOut", "easeInOut"]);
1194
+ var import_react6 = __toESM(require("react"));
1195
+ var import_remotion12 = require("remotion");
1196
+ var import_zod21 = require("zod");
1197
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1198
+ var EasingSchema = import_zod21.z.enum(["linear", "easeIn", "easeOut", "easeInOut"]);
1061
1199
  function ease(t, easing) {
1062
1200
  const x = Math.max(0, Math.min(1, t));
1063
1201
  if (easing === "linear") return x;
@@ -1065,10 +1203,10 @@ function ease(t, easing) {
1065
1203
  if (easing === "easeOut") return 1 - (1 - x) * (1 - x);
1066
1204
  return x < 0.5 ? 2 * x * x : 1 - 2 * (1 - x) * (1 - x);
1067
1205
  }
1068
- var FadeTransitionPropsSchema = import_zod18.z.object({
1069
- durationInFrames: import_zod18.z.number().int().min(10).max(60).default(30),
1206
+ var FadeTransitionPropsSchema = import_zod21.z.object({
1207
+ durationInFrames: import_zod21.z.number().int().min(10).max(60).default(30),
1070
1208
  easing: EasingSchema.default("easeInOut"),
1071
- phase: import_zod18.z.enum(["in", "out", "inOut"]).default("inOut")
1209
+ phase: import_zod21.z.enum(["in", "out", "inOut"]).default("inOut")
1072
1210
  });
1073
1211
  var FadeTransition = ({
1074
1212
  durationInFrames,
@@ -1077,20 +1215,21 @@ var FadeTransition = ({
1077
1215
  children,
1078
1216
  __wavesDurationInFrames
1079
1217
  }) => {
1080
- const frame = (0, import_remotion14.useCurrentFrame)();
1218
+ const layers = import_react6.default.Children.toArray(children);
1219
+ const frame = (0, import_remotion12.useCurrentFrame)();
1081
1220
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1082
1221
  const d = Math.min(durationInFrames, total);
1083
1222
  let opacity = 1;
1084
1223
  if (phase === "in" || phase === "inOut") {
1085
- const t = (0, import_remotion14.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1224
+ const t = (0, import_remotion12.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1086
1225
  opacity *= ease(t, easing);
1087
1226
  }
1088
1227
  if (phase === "out" || phase === "inOut") {
1089
1228
  const start = Math.max(0, total - d);
1090
- const t = (0, import_remotion14.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1229
+ const t = (0, import_remotion12.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1091
1230
  opacity *= 1 - ease(t, easing);
1092
1231
  }
1093
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_remotion14.AbsoluteFill, { style: { opacity }, children });
1232
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Fill, { style: { opacity }, children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
1094
1233
  };
1095
1234
  var FadeTransitionComponentMetadata = {
1096
1235
  kind: "composite",
@@ -1102,17 +1241,17 @@ var FadeTransitionComponentMetadata = {
1102
1241
  };
1103
1242
 
1104
1243
  // src/components/composites/GlitchText.tsx
1105
- var import_remotion15 = require("remotion");
1106
- var import_zod19 = require("zod");
1107
- var import_jsx_runtime17 = require("react/jsx-runtime");
1108
- var GlitchTextPropsSchema = import_zod19.z.object({
1109
- content: import_zod19.z.string().max(100),
1110
- fontSize: import_zod19.z.number().min(8).max(240).default(72),
1111
- color: import_zod19.z.string().default("#FFFFFF"),
1112
- fontFamily: import_zod19.z.string().default("monospace"),
1113
- position: import_zod19.z.enum(["top", "center", "bottom"]).default("center"),
1114
- intensity: import_zod19.z.number().int().min(1).max(10).default(5),
1115
- glitchDuration: import_zod19.z.number().int().min(5).max(30).default(10)
1244
+ var import_remotion13 = require("remotion");
1245
+ var import_zod22 = require("zod");
1246
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1247
+ var GlitchTextPropsSchema = import_zod22.z.object({
1248
+ content: import_zod22.z.string().max(100),
1249
+ fontSize: import_zod22.z.number().min(8).max(240).default(72),
1250
+ color: import_zod22.z.string().default("#FFFFFF"),
1251
+ fontFamily: import_zod22.z.string().default("monospace"),
1252
+ position: import_zod22.z.enum(["top", "center", "bottom"]).default("center"),
1253
+ intensity: import_zod22.z.number().int().min(1).max(10).default(5),
1254
+ glitchDuration: import_zod22.z.number().int().min(5).max(30).default(10)
1116
1255
  });
1117
1256
  var positionStyles2 = (position) => {
1118
1257
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -1132,7 +1271,7 @@ var GlitchText = ({
1132
1271
  intensity,
1133
1272
  glitchDuration
1134
1273
  }) => {
1135
- const frame = (0, import_remotion15.useCurrentFrame)();
1274
+ const frame = (0, import_remotion13.useCurrentFrame)();
1136
1275
  const active = frame < glitchDuration;
1137
1276
  const seed = frame + 1;
1138
1277
  const jitter = active ? (pseudoRandom(seed) - 0.5) * intensity * 6 : 0;
@@ -1146,10 +1285,10 @@ var GlitchText = ({
1146
1285
  textTransform: "uppercase",
1147
1286
  textAlign: "center"
1148
1287
  };
1149
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_remotion15.AbsoluteFill, { style: { display: "flex", ...positionStyles2(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { style: { position: "relative" }, children: [
1150
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { ...baseStyle, color, transform: `translate(${jitter}px, ${jitterY}px)` }, children: content }),
1151
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { ...baseStyle, color: "#FF3B30", transform: `translate(${jitter + 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content }),
1152
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { ...baseStyle, color: "#0A84FF", transform: `translate(${jitter - 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content })
1288
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(Fill, { style: { display: "flex", ...positionStyles2(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { style: { position: "relative" }, children: [
1289
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { style: { ...baseStyle, color, transform: `translate(${jitter}px, ${jitterY}px)` }, children: content }),
1290
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { style: { ...baseStyle, color: "#FF3B30", transform: `translate(${jitter + 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content }),
1291
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { style: { ...baseStyle, color: "#0A84FF", transform: `translate(${jitter - 4}px, ${jitterY}px)`, mixBlendMode: "screen", opacity: active ? 0.9 : 0 }, children: content })
1153
1292
  ] }) });
1154
1293
  };
1155
1294
  var GlitchTextComponentMetadata = {
@@ -1160,17 +1299,16 @@ var GlitchTextComponentMetadata = {
1160
1299
  };
1161
1300
 
1162
1301
  // src/components/composites/GridLayout.tsx
1163
- var import_remotion16 = require("remotion");
1164
- var import_zod20 = require("zod");
1165
- var import_jsx_runtime18 = require("react/jsx-runtime");
1166
- var GridLayoutPropsSchema = import_zod20.z.object({
1167
- columns: import_zod20.z.number().int().min(1).max(4).default(2),
1168
- rows: import_zod20.z.number().int().min(1).max(4).default(2),
1169
- gap: import_zod20.z.number().min(0).max(50).default(20),
1170
- padding: import_zod20.z.number().min(0).max(100).default(40)
1302
+ var import_zod23 = require("zod");
1303
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1304
+ var GridLayoutPropsSchema = import_zod23.z.object({
1305
+ columns: import_zod23.z.number().int().min(1).max(4).default(2),
1306
+ rows: import_zod23.z.number().int().min(1).max(4).default(2),
1307
+ gap: import_zod23.z.number().min(0).max(50).default(20),
1308
+ padding: import_zod23.z.number().min(0).max(100).default(40)
1171
1309
  });
1172
1310
  var GridLayout = ({ columns, rows, gap, padding, children }) => {
1173
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_remotion16.AbsoluteFill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1311
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Fill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1174
1312
  "div",
1175
1313
  {
1176
1314
  style: {
@@ -1195,23 +1333,23 @@ var GridLayoutComponentMetadata = {
1195
1333
  };
1196
1334
 
1197
1335
  // src/components/composites/ImageCollage.tsx
1198
- var import_remotion17 = require("remotion");
1199
- var import_zod21 = require("zod");
1200
- var import_jsx_runtime19 = require("react/jsx-runtime");
1201
- var ImageCollagePropsSchema = import_zod21.z.object({
1202
- images: import_zod21.z.array(import_zod21.z.object({ src: import_zod21.z.string().min(1), caption: import_zod21.z.string().optional() })).min(2).max(9),
1203
- layout: import_zod21.z.enum(["grid", "stack", "scatter"]).default("grid"),
1204
- stagger: import_zod21.z.number().int().min(2).max(10).default(5)
1336
+ var import_remotion14 = require("remotion");
1337
+ var import_zod24 = require("zod");
1338
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1339
+ var ImageCollagePropsSchema = import_zod24.z.object({
1340
+ images: import_zod24.z.array(import_zod24.z.object({ src: import_zod24.z.string().min(1), caption: import_zod24.z.string().optional() })).min(2).max(9),
1341
+ layout: import_zod24.z.enum(["grid", "stack", "scatter"]).default("grid"),
1342
+ stagger: import_zod24.z.number().int().min(2).max(10).default(5)
1205
1343
  });
1206
- var resolveAsset4 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion17.staticFile)(staticFileInputFromAssetPath(value));
1344
+ var resolveAsset4 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion14.staticFile)(staticFileInputFromAssetPath(value));
1207
1345
  var ImageCollage = ({ images, layout, stagger }) => {
1208
- const frame = (0, import_remotion17.useCurrentFrame)();
1209
- const { fps } = (0, import_remotion17.useVideoConfig)();
1346
+ const frame = (0, import_remotion14.useCurrentFrame)();
1347
+ const { fps } = (0, import_remotion14.useVideoConfig)();
1210
1348
  const n = images.length;
1211
1349
  const cols = Math.ceil(Math.sqrt(n));
1212
1350
  const rows = Math.ceil(n / cols);
1213
1351
  if (layout === "grid") {
1214
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_remotion17.AbsoluteFill, { style: { padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1352
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Fill, { style: { padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1215
1353
  "div",
1216
1354
  {
1217
1355
  style: {
@@ -1223,21 +1361,21 @@ var ImageCollage = ({ images, layout, stagger }) => {
1223
1361
  height: "100%"
1224
1362
  },
1225
1363
  children: images.map((img, i) => {
1226
- const p = (0, import_remotion17.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1227
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { style: { position: "relative", overflow: "hidden", borderRadius: 18, opacity: p, transform: `scale(${0.92 + 0.08 * p})` }, children: [
1228
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_remotion17.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1229
- img.caption ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0, padding: 12, background: "linear-gradient(transparent, rgba(0,0,0,0.7))", color: "#fff", fontWeight: 700 }, children: img.caption }) : null
1364
+ const p = (0, import_remotion14.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1365
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { position: "relative", overflow: "hidden", borderRadius: 18, opacity: p, transform: `scale(${0.92 + 0.08 * p})` }, children: [
1366
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_remotion14.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1367
+ img.caption ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0, padding: 12, background: "linear-gradient(transparent, rgba(0,0,0,0.7))", color: "#fff", fontWeight: 700 }, children: img.caption }) : null
1230
1368
  ] }, i);
1231
1369
  })
1232
1370
  }
1233
1371
  ) });
1234
1372
  }
1235
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_remotion17.AbsoluteFill, { children: images.map((img, i) => {
1236
- const p = (0, import_remotion17.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1373
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Fill, { children: images.map((img, i) => {
1374
+ const p = (0, import_remotion14.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1237
1375
  const baseRotate = layout === "stack" ? (i - (n - 1) / 2) * 4 : i * 17 % 20 - 10;
1238
1376
  const baseX = layout === "scatter" ? i * 137 % 300 - 150 : 0;
1239
1377
  const baseY = layout === "scatter" ? (i + 3) * 89 % 200 - 100 : 0;
1240
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1378
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1241
1379
  "div",
1242
1380
  {
1243
1381
  style: {
@@ -1252,7 +1390,7 @@ var ImageCollage = ({ images, layout, stagger }) => {
1252
1390
  overflow: "hidden",
1253
1391
  boxShadow: "0 20px 60px rgba(0,0,0,0.35)"
1254
1392
  },
1255
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_remotion17.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } })
1393
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_remotion14.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } })
1256
1394
  },
1257
1395
  i
1258
1396
  );
@@ -1266,20 +1404,20 @@ var ImageCollageComponentMetadata = {
1266
1404
  };
1267
1405
 
1268
1406
  // src/components/composites/ImageReveal.tsx
1269
- var import_remotion18 = require("remotion");
1270
- var import_zod22 = require("zod");
1271
- var import_jsx_runtime20 = require("react/jsx-runtime");
1272
- var ImageRevealPropsSchema = import_zod22.z.object({
1273
- src: import_zod22.z.string().min(1),
1274
- direction: import_zod22.z.enum(["left", "right", "top", "bottom", "center"]).default("left"),
1275
- revealType: import_zod22.z.enum(["wipe", "expand", "iris"]).default("wipe")
1407
+ var import_remotion15 = require("remotion");
1408
+ var import_zod25 = require("zod");
1409
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1410
+ var ImageRevealPropsSchema = import_zod25.z.object({
1411
+ src: import_zod25.z.string().min(1),
1412
+ direction: import_zod25.z.enum(["left", "right", "top", "bottom", "center"]).default("left"),
1413
+ revealType: import_zod25.z.enum(["wipe", "expand", "iris"]).default("wipe")
1276
1414
  });
1277
- var resolveAsset5 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion18.staticFile)(staticFileInputFromAssetPath(value));
1415
+ var resolveAsset5 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion15.staticFile)(staticFileInputFromAssetPath(value));
1278
1416
  var ImageReveal = ({ src, direction, revealType, __wavesDurationInFrames }) => {
1279
- const frame = (0, import_remotion18.useCurrentFrame)();
1417
+ const frame = (0, import_remotion15.useCurrentFrame)();
1280
1418
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1281
1419
  const d = Math.min(30, total);
1282
- const p = (0, import_remotion18.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1420
+ const p = (0, import_remotion15.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1283
1421
  let clipPath;
1284
1422
  let transform = "none";
1285
1423
  let transformOrigin = "center center";
@@ -1302,8 +1440,8 @@ var ImageReveal = ({ src, direction, revealType, __wavesDurationInFrames }) => {
1302
1440
  clipPath = `circle(${Math.round(150 * p)}% at 50% 50%)`;
1303
1441
  }
1304
1442
  const opacity = revealType === "expand" ? p : 1;
1305
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_remotion18.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1306
- import_remotion18.Img,
1443
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1444
+ import_remotion15.Img,
1307
1445
  {
1308
1446
  src: resolveAsset5(src),
1309
1447
  style: {
@@ -1326,27 +1464,27 @@ var ImageRevealComponentMetadata = {
1326
1464
  };
1327
1465
 
1328
1466
  // src/components/composites/ImageSequence.tsx
1329
- var import_remotion19 = require("remotion");
1330
- var import_zod23 = require("zod");
1331
- var import_jsx_runtime21 = require("react/jsx-runtime");
1332
- var ImageSequencePropsSchema = import_zod23.z.object({
1333
- basePath: import_zod23.z.string().min(1),
1334
- frameCount: import_zod23.z.number().int().positive(),
1335
- filePattern: import_zod23.z.string().default("frame_{frame}.png"),
1336
- fps: import_zod23.z.number().int().min(1).max(120).default(30)
1467
+ var import_remotion16 = require("remotion");
1468
+ var import_zod26 = require("zod");
1469
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1470
+ var ImageSequencePropsSchema = import_zod26.z.object({
1471
+ basePath: import_zod26.z.string().min(1),
1472
+ frameCount: import_zod26.z.number().int().positive(),
1473
+ filePattern: import_zod26.z.string().default("frame_{frame}.png"),
1474
+ fps: import_zod26.z.number().int().min(1).max(120).default(30)
1337
1475
  });
1338
1476
  function joinPath(base, file) {
1339
1477
  if (base.endsWith("/")) return `${base}${file}`;
1340
1478
  return `${base}/${file}`;
1341
1479
  }
1342
- var resolveAsset6 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion19.staticFile)(staticFileInputFromAssetPath(value));
1480
+ var resolveAsset6 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion16.staticFile)(staticFileInputFromAssetPath(value));
1343
1481
  var ImageSequence = ({ basePath, frameCount, filePattern, fps }) => {
1344
- const frame = (0, import_remotion19.useCurrentFrame)();
1345
- const { fps: compFps } = (0, import_remotion19.useVideoConfig)();
1482
+ const frame = (0, import_remotion16.useCurrentFrame)();
1483
+ const { fps: compFps } = (0, import_remotion16.useVideoConfig)();
1346
1484
  const index = Math.min(frameCount - 1, Math.max(0, Math.floor(frame * fps / compFps)));
1347
1485
  const file = filePattern.replace("{frame}", String(index));
1348
1486
  const src = joinPath(basePath, file);
1349
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_remotion19.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_remotion19.Img, { src: resolveAsset6(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) });
1487
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_remotion16.Img, { src: resolveAsset6(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) });
1350
1488
  };
1351
1489
  var ImageSequenceComponentMetadata = {
1352
1490
  kind: "composite",
@@ -1356,26 +1494,26 @@ var ImageSequenceComponentMetadata = {
1356
1494
  };
1357
1495
 
1358
1496
  // src/components/composites/ImageWithCaption.tsx
1359
- var import_remotion20 = require("remotion");
1360
- var import_zod24 = require("zod");
1361
- var import_jsx_runtime22 = require("react/jsx-runtime");
1362
- var CaptionStyleSchema = import_zod24.z.object({
1363
- fontSize: import_zod24.z.number().min(12).max(80).default(32),
1364
- color: import_zod24.z.string().default("#FFFFFF"),
1365
- backgroundColor: import_zod24.z.string().default("rgba(0,0,0,0.7)")
1497
+ var import_remotion17 = require("remotion");
1498
+ var import_zod27 = require("zod");
1499
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1500
+ var CaptionStyleSchema = import_zod27.z.object({
1501
+ fontSize: import_zod27.z.number().min(12).max(80).default(32),
1502
+ color: import_zod27.z.string().default("#FFFFFF"),
1503
+ backgroundColor: import_zod27.z.string().default("rgba(0,0,0,0.7)")
1366
1504
  });
1367
- var ImageWithCaptionPropsSchema = import_zod24.z.object({
1368
- src: import_zod24.z.string().min(1),
1369
- caption: import_zod24.z.string().max(200),
1370
- captionPosition: import_zod24.z.enum(["top", "bottom", "overlay"]).default("bottom"),
1505
+ var ImageWithCaptionPropsSchema = import_zod27.z.object({
1506
+ src: import_zod27.z.string().min(1),
1507
+ caption: import_zod27.z.string().max(200),
1508
+ captionPosition: import_zod27.z.enum(["top", "bottom", "overlay"]).default("bottom"),
1371
1509
  captionStyle: CaptionStyleSchema.optional()
1372
1510
  });
1373
- var resolveAsset7 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion20.staticFile)(staticFileInputFromAssetPath(value));
1511
+ var resolveAsset7 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion17.staticFile)(staticFileInputFromAssetPath(value));
1374
1512
  var ImageWithCaption = ({ src, caption, captionPosition, captionStyle }) => {
1375
- const frame = (0, import_remotion20.useCurrentFrame)();
1376
- const p = (0, import_remotion20.interpolate)(frame, [8, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1513
+ const frame = (0, import_remotion17.useCurrentFrame)();
1514
+ const p = (0, import_remotion17.interpolate)(frame, [8, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1377
1515
  const style = captionStyle ?? { fontSize: 32, color: "#FFFFFF", backgroundColor: "rgba(0,0,0,0.7)" };
1378
- const captionBox = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1516
+ const captionBox = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1379
1517
  "div",
1380
1518
  {
1381
1519
  style: {
@@ -1392,15 +1530,15 @@ var ImageWithCaption = ({ src, caption, captionPosition, captionStyle }) => {
1392
1530
  }
1393
1531
  );
1394
1532
  if (captionPosition === "top" || captionPosition === "bottom") {
1395
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_remotion20.AbsoluteFill, { style: { display: "flex", flexDirection: "column" }, children: [
1533
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Fill, { style: { display: "flex", flexDirection: "column" }, children: [
1396
1534
  captionPosition === "top" ? captionBox : null,
1397
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { style: { flex: 1, position: "relative" }, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_remotion20.Img, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) }),
1535
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { style: { flex: 1, position: "relative" }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_remotion17.Img, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }) }),
1398
1536
  captionPosition === "bottom" ? captionBox : null
1399
1537
  ] });
1400
1538
  }
1401
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_remotion20.AbsoluteFill, { children: [
1402
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_remotion20.Img, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1403
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0 }, children: captionBox })
1539
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Fill, { children: [
1540
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_remotion17.Img, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1541
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0 }, children: captionBox })
1404
1542
  ] });
1405
1543
  };
1406
1544
  var ImageWithCaptionComponentMetadata = {
@@ -1411,19 +1549,19 @@ var ImageWithCaptionComponentMetadata = {
1411
1549
  };
1412
1550
 
1413
1551
  // src/components/composites/InstagramStory.tsx
1414
- var import_remotion21 = require("remotion");
1415
- var import_zod25 = require("zod");
1416
- var import_jsx_runtime23 = require("react/jsx-runtime");
1417
- var InstagramStoryPropsSchema = import_zod25.z.object({
1418
- backgroundImage: import_zod25.z.string().optional(),
1419
- backgroundColor: import_zod25.z.string().default("#000000"),
1420
- profilePic: import_zod25.z.string().optional(),
1421
- username: import_zod25.z.string().optional(),
1422
- text: import_zod25.z.string().max(100).optional(),
1423
- sticker: import_zod25.z.enum(["none", "poll", "question", "countdown"]).default("none"),
1424
- musicTrack: import_zod25.z.string().optional()
1552
+ var import_remotion18 = require("remotion");
1553
+ var import_zod28 = require("zod");
1554
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1555
+ var InstagramStoryPropsSchema = import_zod28.z.object({
1556
+ backgroundImage: import_zod28.z.string().optional(),
1557
+ backgroundColor: import_zod28.z.string().default("#000000"),
1558
+ profilePic: import_zod28.z.string().optional(),
1559
+ username: import_zod28.z.string().optional(),
1560
+ text: import_zod28.z.string().max(100).optional(),
1561
+ sticker: import_zod28.z.enum(["none", "poll", "question", "countdown"]).default("none"),
1562
+ musicTrack: import_zod28.z.string().optional()
1425
1563
  });
1426
- var resolveAsset8 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion21.staticFile)(staticFileInputFromAssetPath(value));
1564
+ var resolveAsset8 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion18.staticFile)(staticFileInputFromAssetPath(value));
1427
1565
  var InstagramStory = ({
1428
1566
  backgroundImage,
1429
1567
  backgroundColor,
@@ -1433,17 +1571,17 @@ var InstagramStory = ({
1433
1571
  sticker,
1434
1572
  musicTrack
1435
1573
  }) => {
1436
- const frame = (0, import_remotion21.useCurrentFrame)();
1437
- const fade = (0, import_remotion21.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1438
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_remotion21.AbsoluteFill, { style: { backgroundColor }, children: [
1439
- musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_remotion21.Audio, { src: resolveAsset8(musicTrack), volume: 0.6 }) : null,
1440
- backgroundImage ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_remotion21.Img, { src: resolveAsset8(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover", opacity: fade } }) : null,
1441
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_remotion21.AbsoluteFill, { style: { padding: 60, boxSizing: "border-box" }, children: [
1442
- profilePic || username ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 18 }, children: [
1443
- profilePic ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_remotion21.Img, { src: resolveAsset8(profilePic), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "rgba(255,255,255,0.2)" } }),
1444
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 34 }, children: username ?? "username" })
1574
+ const frame = (0, import_remotion18.useCurrentFrame)();
1575
+ const fade = (0, import_remotion18.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1576
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Fill, { style: { backgroundColor }, children: [
1577
+ musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_remotion18.Audio, { src: resolveAsset8(musicTrack), volume: 0.6 }) : null,
1578
+ backgroundImage ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_remotion18.Img, { src: resolveAsset8(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover", opacity: fade } }) : null,
1579
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Fill, { style: { padding: 60, boxSizing: "border-box" }, children: [
1580
+ profilePic || username ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 18 }, children: [
1581
+ profilePic ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_remotion18.Img, { src: resolveAsset8(profilePic), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "rgba(255,255,255,0.2)" } }),
1582
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 34 }, children: username ?? "username" })
1445
1583
  ] }) : null,
1446
- text ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1584
+ text ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1447
1585
  "div",
1448
1586
  {
1449
1587
  style: {
@@ -1457,7 +1595,7 @@ var InstagramStory = ({
1457
1595
  children: text
1458
1596
  }
1459
1597
  ) : null,
1460
- sticker !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1598
+ sticker !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1461
1599
  "div",
1462
1600
  {
1463
1601
  style: {
@@ -1486,18 +1624,18 @@ var InstagramStoryComponentMetadata = {
1486
1624
  };
1487
1625
 
1488
1626
  // src/components/composites/IntroScene.tsx
1489
- var import_remotion22 = require("remotion");
1490
- var import_zod26 = require("zod");
1491
- var import_jsx_runtime24 = require("react/jsx-runtime");
1492
- var IntroScenePropsSchema = import_zod26.z.object({
1493
- logoSrc: import_zod26.z.string().min(1),
1494
- companyName: import_zod26.z.string().min(1),
1495
- tagline: import_zod26.z.string().optional(),
1496
- backgroundColor: import_zod26.z.string().default("#000000"),
1497
- primaryColor: import_zod26.z.string().default("#FFFFFF"),
1498
- musicTrack: import_zod26.z.string().optional()
1627
+ var import_remotion19 = require("remotion");
1628
+ var import_zod29 = require("zod");
1629
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1630
+ var IntroScenePropsSchema = import_zod29.z.object({
1631
+ logoSrc: import_zod29.z.string().min(1),
1632
+ companyName: import_zod29.z.string().min(1),
1633
+ tagline: import_zod29.z.string().optional(),
1634
+ backgroundColor: import_zod29.z.string().default("#000000"),
1635
+ primaryColor: import_zod29.z.string().default("#FFFFFF"),
1636
+ musicTrack: import_zod29.z.string().optional()
1499
1637
  });
1500
- var resolveAsset9 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion22.staticFile)(staticFileInputFromAssetPath(value));
1638
+ var resolveAsset9 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion19.staticFile)(staticFileInputFromAssetPath(value));
1501
1639
  var IntroScene = ({
1502
1640
  logoSrc,
1503
1641
  companyName,
@@ -1507,25 +1645,25 @@ var IntroScene = ({
1507
1645
  musicTrack,
1508
1646
  __wavesDurationInFrames
1509
1647
  }) => {
1510
- const frame = (0, import_remotion22.useCurrentFrame)();
1511
- const { fps } = (0, import_remotion22.useVideoConfig)();
1648
+ const frame = (0, import_remotion19.useCurrentFrame)();
1649
+ const { fps } = (0, import_remotion19.useVideoConfig)();
1512
1650
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1513
- const logoP = (0, import_remotion22.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1514
- const nameOpacity = (0, import_remotion22.interpolate)(frame, [20, 60], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1515
- const taglineY = (0, import_remotion22.interpolate)(frame, [50, 80], [20, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1516
- const outroFade = (0, import_remotion22.interpolate)(frame, [Math.max(0, total - 20), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1517
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_remotion22.AbsoluteFill, { style: { backgroundColor, justifyContent: "center", alignItems: "center" }, children: [
1518
- musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_remotion22.Audio, { src: resolveAsset9(musicTrack), volume: 0.7 }) : null,
1519
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { textAlign: "center", opacity: outroFade }, children: [
1520
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1521
- import_remotion22.Img,
1651
+ const logoP = (0, import_remotion19.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1652
+ const nameOpacity = (0, import_remotion19.interpolate)(frame, [20, 60], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1653
+ const taglineY = (0, import_remotion19.interpolate)(frame, [50, 80], [20, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1654
+ const outroFade = (0, import_remotion19.interpolate)(frame, [Math.max(0, total - 20), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1655
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Fill, { style: { backgroundColor, display: "flex", justifyContent: "center", alignItems: "center" }, children: [
1656
+ musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_remotion19.Audio, { src: resolveAsset9(musicTrack), volume: 0.7 }) : null,
1657
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { style: { textAlign: "center", opacity: outroFade }, children: [
1658
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1659
+ import_remotion19.Img,
1522
1660
  {
1523
1661
  src: resolveAsset9(logoSrc),
1524
1662
  style: { width: 280, height: 280, objectFit: "contain", transform: `scale(${logoP})` }
1525
1663
  }
1526
1664
  ),
1527
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { style: { marginTop: 24, color: primaryColor, fontSize: 64, fontWeight: 900, opacity: nameOpacity }, children: companyName }),
1528
- tagline ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1665
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { style: { marginTop: 24, color: primaryColor, fontSize: 64, fontWeight: 900, opacity: nameOpacity }, children: companyName }),
1666
+ tagline ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1529
1667
  "div",
1530
1668
  {
1531
1669
  style: {
@@ -1550,17 +1688,17 @@ var IntroSceneComponentMetadata = {
1550
1688
  };
1551
1689
 
1552
1690
  // src/components/composites/KenBurnsImage.tsx
1553
- var import_remotion23 = require("remotion");
1554
- var import_zod27 = require("zod");
1555
- var import_jsx_runtime25 = require("react/jsx-runtime");
1556
- var KenBurnsImagePropsSchema = import_zod27.z.object({
1557
- src: import_zod27.z.string().min(1),
1558
- startScale: import_zod27.z.number().min(1).max(2).default(1),
1559
- endScale: import_zod27.z.number().min(1).max(2).default(1.2),
1560
- panDirection: import_zod27.z.enum(["none", "left", "right", "up", "down"]).default("none"),
1561
- panAmount: import_zod27.z.number().min(0).max(100).default(50)
1691
+ var import_remotion20 = require("remotion");
1692
+ var import_zod30 = require("zod");
1693
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1694
+ var KenBurnsImagePropsSchema = import_zod30.z.object({
1695
+ src: import_zod30.z.string().min(1),
1696
+ startScale: import_zod30.z.number().min(1).max(2).default(1),
1697
+ endScale: import_zod30.z.number().min(1).max(2).default(1.2),
1698
+ panDirection: import_zod30.z.enum(["none", "left", "right", "up", "down"]).default("none"),
1699
+ panAmount: import_zod30.z.number().min(0).max(100).default(50)
1562
1700
  });
1563
- var resolveAsset10 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion23.staticFile)(staticFileInputFromAssetPath(value));
1701
+ var resolveAsset10 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion20.staticFile)(staticFileInputFromAssetPath(value));
1564
1702
  var KenBurnsImage = ({
1565
1703
  src,
1566
1704
  startScale,
@@ -1569,14 +1707,14 @@ var KenBurnsImage = ({
1569
1707
  panAmount,
1570
1708
  __wavesDurationInFrames
1571
1709
  }) => {
1572
- const frame = (0, import_remotion23.useCurrentFrame)();
1710
+ const frame = (0, import_remotion20.useCurrentFrame)();
1573
1711
  const duration = Math.max(1, __wavesDurationInFrames ?? 1);
1574
- const t = (0, import_remotion23.interpolate)(frame, [0, duration], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1712
+ const t = (0, import_remotion20.interpolate)(frame, [0, duration], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1575
1713
  const scale = startScale + (endScale - startScale) * t;
1576
1714
  const dx = panDirection === "left" ? -panAmount * t : panDirection === "right" ? panAmount * t : 0;
1577
1715
  const dy = panDirection === "up" ? -panAmount * t : panDirection === "down" ? panAmount * t : 0;
1578
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_remotion23.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1579
- import_remotion23.Img,
1716
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1717
+ import_remotion20.Img,
1580
1718
  {
1581
1719
  src: resolveAsset10(src),
1582
1720
  style: {
@@ -1597,20 +1735,20 @@ var KenBurnsImageComponentMetadata = {
1597
1735
  };
1598
1736
 
1599
1737
  // src/components/composites/KineticTypography.tsx
1600
- var import_remotion24 = require("remotion");
1601
- var import_zod28 = require("zod");
1602
- var import_jsx_runtime26 = require("react/jsx-runtime");
1603
- var WordSchema = import_zod28.z.object({
1604
- text: import_zod28.z.string().min(1),
1605
- emphasis: import_zod28.z.enum(["normal", "bold", "giant"]).default("normal")
1738
+ var import_remotion21 = require("remotion");
1739
+ var import_zod31 = require("zod");
1740
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1741
+ var WordSchema = import_zod31.z.object({
1742
+ text: import_zod31.z.string().min(1),
1743
+ emphasis: import_zod31.z.enum(["normal", "bold", "giant"]).default("normal")
1606
1744
  });
1607
- var KineticTypographyPropsSchema = import_zod28.z.object({
1608
- words: import_zod28.z.array(WordSchema).min(1).max(50),
1609
- fontSize: import_zod28.z.number().min(12).max(140).default(48),
1610
- color: import_zod28.z.string().default("#FFFFFF"),
1611
- fontFamily: import_zod28.z.string().default("Inter"),
1612
- timing: import_zod28.z.array(import_zod28.z.number().int().min(0)).min(1).describe("Frame timing for each word"),
1613
- transition: import_zod28.z.enum(["fade", "scale", "slideLeft", "slideRight"]).default("scale")
1745
+ var KineticTypographyPropsSchema = import_zod31.z.object({
1746
+ words: import_zod31.z.array(WordSchema).min(1).max(50),
1747
+ fontSize: import_zod31.z.number().min(12).max(140).default(48),
1748
+ color: import_zod31.z.string().default("#FFFFFF"),
1749
+ fontFamily: import_zod31.z.string().default("Inter"),
1750
+ timing: import_zod31.z.array(import_zod31.z.number().int().min(0)).min(1).describe("Frame timing for each word"),
1751
+ transition: import_zod31.z.enum(["fade", "scale", "slideLeft", "slideRight"]).default("scale")
1614
1752
  });
1615
1753
  var KineticTypography = ({
1616
1754
  words,
@@ -1620,8 +1758,8 @@ var KineticTypography = ({
1620
1758
  timing,
1621
1759
  transition
1622
1760
  }) => {
1623
- const frame = (0, import_remotion24.useCurrentFrame)();
1624
- const { fps } = (0, import_remotion24.useVideoConfig)();
1761
+ const frame = (0, import_remotion21.useCurrentFrame)();
1762
+ const { fps } = (0, import_remotion21.useVideoConfig)();
1625
1763
  const starts = (() => {
1626
1764
  if (timing.length >= words.length) return timing.slice(0, words.length);
1627
1765
  const last = timing.length ? timing[timing.length - 1] : 0;
@@ -1634,13 +1772,13 @@ var KineticTypography = ({
1634
1772
  }
1635
1773
  const word = words[activeIndex];
1636
1774
  const start = starts[activeIndex] ?? 0;
1637
- const p = (0, import_remotion24.spring)({ frame: frame - start, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1775
+ const p = (0, import_remotion21.spring)({ frame: frame - start, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1638
1776
  const progress = Math.max(0, Math.min(1, p));
1639
1777
  const scaleBase = word.emphasis === "giant" ? 2 : word.emphasis === "bold" ? 1.3 : 1;
1640
1778
  const opacity = transition === "fade" ? progress : 1;
1641
1779
  const scale = transition === "scale" ? (0.85 + 0.15 * progress) * scaleBase : 1 * scaleBase;
1642
1780
  const tx = transition === "slideLeft" ? 40 * (1 - progress) : transition === "slideRight" ? -40 * (1 - progress) : 0;
1643
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_remotion24.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1781
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1644
1782
  "div",
1645
1783
  {
1646
1784
  style: {
@@ -1665,17 +1803,17 @@ var KineticTypographyComponentMetadata = {
1665
1803
  };
1666
1804
 
1667
1805
  // src/components/composites/LineGraph.tsx
1668
- var import_remotion25 = require("remotion");
1669
- var import_zod29 = require("zod");
1670
- var import_jsx_runtime27 = require("react/jsx-runtime");
1671
- var PointSchema = import_zod29.z.object({ x: import_zod29.z.number(), y: import_zod29.z.number() });
1672
- var LineGraphPropsSchema = import_zod29.z.object({
1673
- data: import_zod29.z.array(PointSchema).min(2).max(50),
1674
- color: import_zod29.z.string().default("#00FF00"),
1675
- strokeWidth: import_zod29.z.number().min(1).max(10).default(3),
1676
- showDots: import_zod29.z.boolean().default(true),
1677
- fillArea: import_zod29.z.boolean().default(false),
1678
- animate: import_zod29.z.enum(["draw", "reveal"]).default("draw")
1806
+ var import_remotion22 = require("remotion");
1807
+ var import_zod32 = require("zod");
1808
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1809
+ var PointSchema = import_zod32.z.object({ x: import_zod32.z.number(), y: import_zod32.z.number() });
1810
+ var LineGraphPropsSchema = import_zod32.z.object({
1811
+ data: import_zod32.z.array(PointSchema).min(2).max(50),
1812
+ color: import_zod32.z.string().default("#00FF00"),
1813
+ strokeWidth: import_zod32.z.number().min(1).max(10).default(3),
1814
+ showDots: import_zod32.z.boolean().default(true),
1815
+ fillArea: import_zod32.z.boolean().default(false),
1816
+ animate: import_zod32.z.enum(["draw", "reveal"]).default("draw")
1679
1817
  });
1680
1818
  function normalize(data, w, h, pad) {
1681
1819
  const xs = data.map((d) => d.x);
@@ -1701,9 +1839,9 @@ var LineGraph = ({
1701
1839
  animate,
1702
1840
  __wavesDurationInFrames
1703
1841
  }) => {
1704
- const frame = (0, import_remotion25.useCurrentFrame)();
1842
+ const frame = (0, import_remotion22.useCurrentFrame)();
1705
1843
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1706
- const progress = (0, import_remotion25.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1844
+ const progress = (0, import_remotion22.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1707
1845
  const w = 1e3;
1708
1846
  const h = 520;
1709
1847
  const pad = 30;
@@ -1711,9 +1849,9 @@ var LineGraph = ({
1711
1849
  const d = toPath(pts);
1712
1850
  const dash = 3e3;
1713
1851
  const dashOffset = dash * (1 - progress);
1714
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_remotion25.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("svg", { width: w, height: h, viewBox: `0 0 ${w} ${h}`, children: [
1715
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("clipPath", { id: "waves-line-reveal", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("rect", { x: "0", y: "0", width: w * progress, height: h }) }) }),
1716
- fillArea ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1852
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("svg", { viewBox: `0 0 ${w} ${h}`, style: { width: "100%", height: "100%" }, children: [
1853
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("defs", { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("clipPath", { id: "waves-line-reveal", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("rect", { x: "0", y: "0", width: w * progress, height: h }) }) }),
1854
+ fillArea ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1717
1855
  "path",
1718
1856
  {
1719
1857
  d: `${d} L ${pts[pts.length - 1].x} ${h - pad} L ${pts[0].x} ${h - pad} Z`,
@@ -1722,7 +1860,7 @@ var LineGraph = ({
1722
1860
  clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0
1723
1861
  }
1724
1862
  ) : null,
1725
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1863
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1726
1864
  "path",
1727
1865
  {
1728
1866
  d,
@@ -1736,7 +1874,7 @@ var LineGraph = ({
1736
1874
  clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0
1737
1875
  }
1738
1876
  ),
1739
- showDots ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("g", { clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0, children: pts.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("circle", { cx: p.x, cy: p.y, r: 6, fill: color }, i)) }) : null
1877
+ showDots ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("g", { clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0, children: pts.map((p, i) => /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("circle", { cx: p.x, cy: p.y, r: 6, fill: color }, i)) }) : null
1740
1878
  ] }) });
1741
1879
  };
1742
1880
  var LineGraphComponentMetadata = {
@@ -1747,28 +1885,28 @@ var LineGraphComponentMetadata = {
1747
1885
  };
1748
1886
 
1749
1887
  // src/components/composites/LogoReveal.tsx
1750
- var import_remotion26 = require("remotion");
1751
- var import_zod30 = require("zod");
1752
- var import_jsx_runtime28 = require("react/jsx-runtime");
1753
- var LogoRevealPropsSchema = import_zod30.z.object({
1754
- logoSrc: import_zod30.z.string().min(1),
1755
- effect: import_zod30.z.enum(["fade", "scale", "rotate", "slide"]).default("scale"),
1756
- backgroundColor: import_zod30.z.string().default("#000000"),
1757
- soundEffect: import_zod30.z.string().optional()
1888
+ var import_remotion23 = require("remotion");
1889
+ var import_zod33 = require("zod");
1890
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1891
+ var LogoRevealPropsSchema = import_zod33.z.object({
1892
+ logoSrc: import_zod33.z.string().min(1),
1893
+ effect: import_zod33.z.enum(["fade", "scale", "rotate", "slide"]).default("scale"),
1894
+ backgroundColor: import_zod33.z.string().default("#000000"),
1895
+ soundEffect: import_zod33.z.string().optional()
1758
1896
  });
1759
- var resolveAsset11 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion26.staticFile)(staticFileInputFromAssetPath(value));
1897
+ var resolveAsset11 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion23.staticFile)(staticFileInputFromAssetPath(value));
1760
1898
  var LogoReveal = ({ logoSrc, effect, backgroundColor, soundEffect }) => {
1761
- const frame = (0, import_remotion26.useCurrentFrame)();
1762
- const { fps } = (0, import_remotion26.useVideoConfig)();
1763
- const p = (0, import_remotion26.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
1899
+ const frame = (0, import_remotion23.useCurrentFrame)();
1900
+ const { fps } = (0, import_remotion23.useVideoConfig)();
1901
+ const p = (0, import_remotion23.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
1764
1902
  const opacity = effect === "fade" ? p : Math.min(1, Math.max(0, p));
1765
1903
  const scale = effect === "scale" ? p : 1;
1766
1904
  const rotate = effect === "rotate" ? (1 - p) * 360 : 0;
1767
1905
  const translateY = effect === "slide" ? -200 * (1 - p) : 0;
1768
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_remotion26.AbsoluteFill, { style: { backgroundColor, justifyContent: "center", alignItems: "center" }, children: [
1769
- soundEffect ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_remotion26.Audio, { src: resolveAsset11(soundEffect), volume: 1 }) : null,
1770
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1771
- import_remotion26.Img,
1906
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Fill, { style: { backgroundColor, display: "flex", justifyContent: "center", alignItems: "center" }, children: [
1907
+ soundEffect ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_remotion23.Audio, { src: resolveAsset11(soundEffect), volume: 1 }) : null,
1908
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1909
+ import_remotion23.Img,
1772
1910
  {
1773
1911
  src: resolveAsset11(logoSrc),
1774
1912
  style: {
@@ -1790,32 +1928,32 @@ var LogoRevealComponentMetadata = {
1790
1928
  };
1791
1929
 
1792
1930
  // src/components/composites/OutroScene.tsx
1793
- var import_remotion27 = require("remotion");
1794
- var import_zod31 = require("zod");
1795
- var import_jsx_runtime29 = require("react/jsx-runtime");
1796
- var CtaSchema = import_zod31.z.object({ text: import_zod31.z.string().min(1), icon: import_zod31.z.string().optional() });
1797
- var HandleSchema = import_zod31.z.object({
1798
- platform: import_zod31.z.enum(["twitter", "instagram", "youtube", "linkedin"]),
1799
- handle: import_zod31.z.string().min(1)
1931
+ var import_remotion24 = require("remotion");
1932
+ var import_zod34 = require("zod");
1933
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1934
+ var CtaSchema = import_zod34.z.object({ text: import_zod34.z.string().min(1), icon: import_zod34.z.string().optional() });
1935
+ var HandleSchema = import_zod34.z.object({
1936
+ platform: import_zod34.z.enum(["twitter", "instagram", "youtube", "linkedin"]),
1937
+ handle: import_zod34.z.string().min(1)
1800
1938
  });
1801
- var OutroScenePropsSchema = import_zod31.z.object({
1802
- logoSrc: import_zod31.z.string().min(1),
1803
- message: import_zod31.z.string().default("Thank You"),
1804
- ctaButtons: import_zod31.z.array(CtaSchema).max(3).optional(),
1805
- socialHandles: import_zod31.z.array(HandleSchema).max(4).optional(),
1806
- backgroundColor: import_zod31.z.string().default("#000000")
1939
+ var OutroScenePropsSchema = import_zod34.z.object({
1940
+ logoSrc: import_zod34.z.string().min(1),
1941
+ message: import_zod34.z.string().default("Thank You"),
1942
+ ctaButtons: import_zod34.z.array(CtaSchema).max(3).optional(),
1943
+ socialHandles: import_zod34.z.array(HandleSchema).max(4).optional(),
1944
+ backgroundColor: import_zod34.z.string().default("#000000")
1807
1945
  });
1808
- var resolveAsset12 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion27.staticFile)(staticFileInputFromAssetPath(value));
1946
+ var resolveAsset12 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion24.staticFile)(staticFileInputFromAssetPath(value));
1809
1947
  var OutroScene = ({ logoSrc, message, ctaButtons, socialHandles, backgroundColor }) => {
1810
- const frame = (0, import_remotion27.useCurrentFrame)();
1811
- const { fps } = (0, import_remotion27.useVideoConfig)();
1812
- const logoP = (0, import_remotion27.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1813
- const msgP = (0, import_remotion27.spring)({ frame: frame - 18, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1814
- const ctaP = (0, import_remotion27.spring)({ frame: frame - 40, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1815
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_remotion27.AbsoluteFill, { style: { backgroundColor, justifyContent: "center", alignItems: "center", padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { style: { textAlign: "center" }, children: [
1816
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_remotion27.Img, { src: resolveAsset12(logoSrc), style: { width: 220, height: 220, objectFit: "contain", transform: `scale(${logoP})` } }),
1817
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { style: { marginTop: 24, color: "#FFFFFF", fontSize: 72, fontWeight: 1e3, opacity: msgP }, children: message }),
1818
- ctaButtons?.length ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { style: { marginTop: 34, display: "flex", gap: 18, justifyContent: "center", opacity: ctaP }, children: ctaButtons.map((b, i) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1948
+ const frame = (0, import_remotion24.useCurrentFrame)();
1949
+ const { fps } = (0, import_remotion24.useVideoConfig)();
1950
+ const logoP = (0, import_remotion24.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1951
+ const msgP = (0, import_remotion24.spring)({ frame: frame - 18, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1952
+ const ctaP = (0, import_remotion24.spring)({ frame: frame - 40, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1953
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Fill, { style: { backgroundColor, display: "flex", justifyContent: "center", alignItems: "center", padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { style: { textAlign: "center" }, children: [
1954
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_remotion24.Img, { src: resolveAsset12(logoSrc), style: { width: 220, height: 220, objectFit: "contain", transform: `scale(${logoP})` } }),
1955
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { style: { marginTop: 24, color: "#FFFFFF", fontSize: 72, fontWeight: 1e3, opacity: msgP }, children: message }),
1956
+ ctaButtons?.length ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { style: { marginTop: 34, display: "flex", gap: 18, justifyContent: "center", opacity: ctaP }, children: ctaButtons.map((b, i) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
1819
1957
  "div",
1820
1958
  {
1821
1959
  style: {
@@ -1833,7 +1971,7 @@ var OutroScene = ({ logoSrc, message, ctaButtons, socialHandles, backgroundColor
1833
1971
  },
1834
1972
  i
1835
1973
  )) }) : null,
1836
- socialHandles?.length ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { style: { marginTop: 50, display: "flex", flexDirection: "column", gap: 10, opacity: ctaP }, children: socialHandles.map((h, i) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { style: { color: "rgba(255,255,255,0.85)", fontSize: 26, fontWeight: 800 }, children: [
1974
+ socialHandles?.length ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { style: { marginTop: 50, display: "flex", flexDirection: "column", gap: 10, opacity: ctaP }, children: socialHandles.map((h, i) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { style: { color: "rgba(255,255,255,0.85)", fontSize: 26, fontWeight: 800 }, children: [
1837
1975
  h.platform,
1838
1976
  ": ",
1839
1977
  h.handle
@@ -1848,19 +1986,19 @@ var OutroSceneComponentMetadata = {
1848
1986
  };
1849
1987
 
1850
1988
  // src/components/composites/OutlineText.tsx
1851
- var import_remotion28 = require("remotion");
1852
- var import_zod32 = require("zod");
1853
- var import_jsx_runtime30 = require("react/jsx-runtime");
1854
- var OutlineTextPropsSchema = import_zod32.z.object({
1855
- content: import_zod32.z.string().max(50),
1856
- fontSize: import_zod32.z.number().min(8).max(240).default(96),
1857
- outlineColor: import_zod32.z.string().default("#FFFFFF"),
1858
- fillColor: import_zod32.z.string().default("#000000"),
1859
- fontFamily: import_zod32.z.string().default("Inter"),
1860
- fontWeight: import_zod32.z.number().int().min(100).max(900).default(800),
1861
- position: import_zod32.z.enum(["top", "center", "bottom"]).default("center"),
1862
- animation: import_zod32.z.enum(["draw", "fill"]).default("draw"),
1863
- strokeWidth: import_zod32.z.number().min(1).max(10).default(3)
1989
+ var import_remotion25 = require("remotion");
1990
+ var import_zod35 = require("zod");
1991
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1992
+ var OutlineTextPropsSchema = import_zod35.z.object({
1993
+ content: import_zod35.z.string().max(50),
1994
+ fontSize: import_zod35.z.number().min(8).max(240).default(96),
1995
+ outlineColor: import_zod35.z.string().default("#FFFFFF"),
1996
+ fillColor: import_zod35.z.string().default("#000000"),
1997
+ fontFamily: import_zod35.z.string().default("Inter"),
1998
+ fontWeight: import_zod35.z.number().int().min(100).max(900).default(800),
1999
+ position: import_zod35.z.enum(["top", "center", "bottom"]).default("center"),
2000
+ animation: import_zod35.z.enum(["draw", "fill"]).default("draw"),
2001
+ strokeWidth: import_zod35.z.number().min(1).max(10).default(3)
1864
2002
  });
1865
2003
  var positionStyles3 = (position) => {
1866
2004
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -1878,12 +2016,12 @@ var OutlineText = ({
1878
2016
  animation,
1879
2017
  strokeWidth
1880
2018
  }) => {
1881
- const frame = (0, import_remotion28.useCurrentFrame)();
1882
- const t = (0, import_remotion28.interpolate)(frame, [0, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2019
+ const frame = (0, import_remotion25.useCurrentFrame)();
2020
+ const t = (0, import_remotion25.interpolate)(frame, [0, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1883
2021
  const strokeOpacity = animation === "draw" ? t : 1;
1884
2022
  const fillOpacity = animation === "fill" ? t : 0;
1885
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_remotion28.AbsoluteFill, { style: { display: "flex", ...positionStyles3(position) }, children: [
1886
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2023
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Fill, { style: { display: "flex", ...positionStyles3(position) }, children: [
2024
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1887
2025
  "div",
1888
2026
  {
1889
2027
  style: {
@@ -1900,7 +2038,7 @@ var OutlineText = ({
1900
2038
  children: content
1901
2039
  }
1902
2040
  ),
1903
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2041
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1904
2042
  "div",
1905
2043
  {
1906
2044
  style: {
@@ -1927,16 +2065,16 @@ var OutlineTextComponentMetadata = {
1927
2065
  };
1928
2066
 
1929
2067
  // src/components/composites/ProgressBar.tsx
1930
- var import_remotion29 = require("remotion");
1931
- var import_zod33 = require("zod");
1932
- var import_jsx_runtime31 = require("react/jsx-runtime");
1933
- var ProgressBarPropsSchema = import_zod33.z.object({
1934
- label: import_zod33.z.string().optional(),
1935
- color: import_zod33.z.string().default("#00FF00"),
1936
- backgroundColor: import_zod33.z.string().default("rgba(255,255,255,0.2)"),
1937
- height: import_zod33.z.number().min(5).max(50).default(10),
1938
- position: import_zod33.z.enum(["top", "bottom"]).default("bottom"),
1939
- showPercentage: import_zod33.z.boolean().default(true)
2068
+ var import_remotion26 = require("remotion");
2069
+ var import_zod36 = require("zod");
2070
+ var import_jsx_runtime35 = require("react/jsx-runtime");
2071
+ var ProgressBarPropsSchema = import_zod36.z.object({
2072
+ label: import_zod36.z.string().optional(),
2073
+ color: import_zod36.z.string().default("#00FF00"),
2074
+ backgroundColor: import_zod36.z.string().default("rgba(255,255,255,0.2)"),
2075
+ height: import_zod36.z.number().min(5).max(50).default(10),
2076
+ position: import_zod36.z.enum(["top", "bottom"]).default("bottom"),
2077
+ showPercentage: import_zod36.z.boolean().default(true)
1940
2078
  });
1941
2079
  var ProgressBar = ({
1942
2080
  label,
@@ -1947,17 +2085,17 @@ var ProgressBar = ({
1947
2085
  showPercentage,
1948
2086
  __wavesDurationInFrames
1949
2087
  }) => {
1950
- const frame = (0, import_remotion29.useCurrentFrame)();
2088
+ const frame = (0, import_remotion26.useCurrentFrame)();
1951
2089
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1952
- const p = (0, import_remotion29.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2090
+ const p = (0, import_remotion26.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1953
2091
  const pct = Math.round(p * 100);
1954
2092
  const yStyle = position === "top" ? { top: 50 } : { bottom: 50 };
1955
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_remotion29.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { style: { position: "absolute", left: 80, right: 80, ...yStyle }, children: [
1956
- label || showPercentage ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginBottom: 10, color: "#FFFFFF", fontWeight: 700 }, children: [
1957
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: label ?? "" }),
1958
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: showPercentage ? `${pct}%` : "" })
2093
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { style: { position: "absolute", left: 80, right: 80, ...yStyle }, children: [
2094
+ label || showPercentage ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginBottom: 10, color: "#FFFFFF", fontWeight: 700 }, children: [
2095
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: label ?? "" }),
2096
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: showPercentage ? `${pct}%` : "" })
1959
2097
  ] }) : null,
1960
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { style: { width: "100%", height, backgroundColor, borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { style: { width: `${pct}%`, height: "100%", backgroundColor: color } }) })
2098
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { style: { width: "100%", height, backgroundColor, borderRadius: 9999, overflow: "hidden" }, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { style: { width: `${pct}%`, height: "100%", backgroundColor: color } }) })
1961
2099
  ] }) });
1962
2100
  };
1963
2101
  var ProgressBarComponentMetadata = {
@@ -1968,16 +2106,16 @@ var ProgressBarComponentMetadata = {
1968
2106
  };
1969
2107
 
1970
2108
  // src/components/composites/ProgressRing.tsx
1971
- var import_remotion30 = require("remotion");
1972
- var import_zod34 = require("zod");
1973
- var import_jsx_runtime32 = require("react/jsx-runtime");
1974
- var ProgressRingPropsSchema = import_zod34.z.object({
1975
- percentage: import_zod34.z.number().min(0).max(100),
1976
- size: import_zod34.z.number().min(100).max(500).default(200),
1977
- strokeWidth: import_zod34.z.number().min(5).max(50).default(20),
1978
- color: import_zod34.z.string().default("#00FF00"),
1979
- backgroundColor: import_zod34.z.string().default("rgba(255,255,255,0.2)"),
1980
- showLabel: import_zod34.z.boolean().default(true)
2109
+ var import_remotion27 = require("remotion");
2110
+ var import_zod37 = require("zod");
2111
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2112
+ var ProgressRingPropsSchema = import_zod37.z.object({
2113
+ percentage: import_zod37.z.number().min(0).max(100),
2114
+ size: import_zod37.z.number().min(100).max(500).default(200),
2115
+ strokeWidth: import_zod37.z.number().min(5).max(50).default(20),
2116
+ color: import_zod37.z.string().default("#00FF00"),
2117
+ backgroundColor: import_zod37.z.string().default("rgba(255,255,255,0.2)"),
2118
+ showLabel: import_zod37.z.boolean().default(true)
1981
2119
  });
1982
2120
  var ProgressRing = ({
1983
2121
  percentage,
@@ -1988,17 +2126,17 @@ var ProgressRing = ({
1988
2126
  showLabel,
1989
2127
  __wavesDurationInFrames
1990
2128
  }) => {
1991
- const frame = (0, import_remotion30.useCurrentFrame)();
2129
+ const frame = (0, import_remotion27.useCurrentFrame)();
1992
2130
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1993
- const p = (0, import_remotion30.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2131
+ const p = (0, import_remotion27.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1994
2132
  const current = percentage * p;
1995
2133
  const r = (size - strokeWidth) / 2;
1996
2134
  const c = 2 * Math.PI * r;
1997
2135
  const dash = c;
1998
2136
  const offset = c - current / 100 * c;
1999
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_remotion30.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center" }, children: [
2000
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
2001
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2137
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: [
2138
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
2139
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2002
2140
  "circle",
2003
2141
  {
2004
2142
  cx: size / 2,
@@ -2009,7 +2147,7 @@ var ProgressRing = ({
2009
2147
  fill: "transparent"
2010
2148
  }
2011
2149
  ),
2012
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2150
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2013
2151
  "circle",
2014
2152
  {
2015
2153
  cx: size / 2,
@@ -2025,7 +2163,7 @@ var ProgressRing = ({
2025
2163
  }
2026
2164
  )
2027
2165
  ] }),
2028
- showLabel ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { style: { position: "absolute", color: "#FFFFFF", fontWeight: 800, fontSize: Math.round(size * 0.22) }, children: [
2166
+ showLabel ? /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { style: { position: "absolute", color: "#FFFFFF", fontWeight: 800, fontSize: Math.round(size * 0.22) }, children: [
2029
2167
  Math.round(current),
2030
2168
  "%"
2031
2169
  ] }) : null
@@ -2039,14 +2177,15 @@ var ProgressRingComponentMetadata = {
2039
2177
  };
2040
2178
 
2041
2179
  // src/components/composites/SlideTransition.tsx
2042
- var import_remotion31 = require("remotion");
2043
- var import_zod35 = require("zod");
2044
- var import_jsx_runtime33 = require("react/jsx-runtime");
2045
- var SlideTransitionPropsSchema = import_zod35.z.object({
2046
- durationInFrames: import_zod35.z.number().int().min(10).max(60).default(30),
2047
- direction: import_zod35.z.enum(["left", "right", "up", "down"]).default("left"),
2048
- distance: import_zod35.z.number().int().min(1).max(2e3).default(160),
2049
- phase: import_zod35.z.enum(["in", "out", "inOut"]).default("inOut")
2180
+ var import_react7 = __toESM(require("react"));
2181
+ var import_remotion28 = require("remotion");
2182
+ var import_zod38 = require("zod");
2183
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2184
+ var SlideTransitionPropsSchema = import_zod38.z.object({
2185
+ durationInFrames: import_zod38.z.number().int().min(10).max(60).default(30),
2186
+ direction: import_zod38.z.enum(["left", "right", "up", "down"]).default("left"),
2187
+ distance: import_zod38.z.number().int().min(1).max(2e3).default(160),
2188
+ phase: import_zod38.z.enum(["in", "out", "inOut"]).default("inOut")
2050
2189
  });
2051
2190
  function translateFor(direction, delta) {
2052
2191
  if (direction === "left") return { x: -delta, y: 0 };
@@ -2062,29 +2201,30 @@ var SlideTransition = ({
2062
2201
  children,
2063
2202
  __wavesDurationInFrames
2064
2203
  }) => {
2065
- const frame = (0, import_remotion31.useCurrentFrame)();
2204
+ const layers = import_react7.default.Children.toArray(children);
2205
+ const frame = (0, import_remotion28.useCurrentFrame)();
2066
2206
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2067
2207
  const d = Math.min(durationInFrames, total);
2068
2208
  let opacity = 1;
2069
2209
  let tx = 0;
2070
2210
  let ty = 0;
2071
2211
  if (phase === "in" || phase === "inOut") {
2072
- const t = (0, import_remotion31.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2212
+ const t = (0, import_remotion28.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2073
2213
  const { x, y } = translateFor(direction, distance * t);
2074
2214
  tx += x;
2075
2215
  ty += y;
2076
- opacity *= (0, import_remotion31.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2216
+ opacity *= (0, import_remotion28.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2077
2217
  }
2078
2218
  if (phase === "out" || phase === "inOut") {
2079
2219
  const start = Math.max(0, total - d);
2080
- const t = (0, import_remotion31.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2220
+ const t = (0, import_remotion28.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2081
2221
  const opposite = direction === "left" ? "right" : direction === "right" ? "left" : direction === "up" ? "down" : "up";
2082
2222
  const { x, y } = translateFor(opposite, distance * t);
2083
2223
  tx += x;
2084
2224
  ty += y;
2085
- opacity *= (0, import_remotion31.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2225
+ opacity *= (0, import_remotion28.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2086
2226
  }
2087
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_remotion31.AbsoluteFill, { style: { opacity, transform: `translate(${tx}px, ${ty}px)` }, children });
2227
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Fill, { style: { opacity, transform: `translate(${tx}px, ${ty}px)` }, children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
2088
2228
  };
2089
2229
  var SlideTransitionComponentMetadata = {
2090
2230
  kind: "composite",
@@ -2096,16 +2236,15 @@ var SlideTransitionComponentMetadata = {
2096
2236
  };
2097
2237
 
2098
2238
  // src/components/composites/SplitScreen.tsx
2099
- var import_react = __toESM(require("react"));
2100
- var import_remotion32 = require("remotion");
2101
- var import_zod36 = require("zod");
2102
- var import_jsx_runtime34 = require("react/jsx-runtime");
2103
- var SplitScreenPropsSchema = import_zod36.z.object({
2104
- orientation: import_zod36.z.enum(["vertical", "horizontal"]).default("vertical"),
2105
- split: import_zod36.z.number().min(0.1).max(0.9).default(0.5),
2106
- gap: import_zod36.z.number().min(0).default(48),
2107
- padding: import_zod36.z.number().min(0).default(80),
2108
- dividerColor: import_zod36.z.string().optional()
2239
+ var import_react8 = __toESM(require("react"));
2240
+ var import_zod39 = require("zod");
2241
+ var import_jsx_runtime38 = require("react/jsx-runtime");
2242
+ var SplitScreenPropsSchema = import_zod39.z.object({
2243
+ orientation: import_zod39.z.enum(["vertical", "horizontal"]).default("vertical"),
2244
+ split: import_zod39.z.number().min(0.1).max(0.9).default(0.5),
2245
+ gap: import_zod39.z.number().min(0).default(48),
2246
+ padding: import_zod39.z.number().min(0).default(80),
2247
+ dividerColor: import_zod39.z.string().optional()
2109
2248
  });
2110
2249
  var SplitScreen = ({
2111
2250
  orientation,
@@ -2115,14 +2254,14 @@ var SplitScreen = ({
2115
2254
  dividerColor,
2116
2255
  children
2117
2256
  }) => {
2118
- const items = import_react.default.Children.toArray(children);
2257
+ const items = import_react8.default.Children.toArray(children);
2119
2258
  const first = items[0] ?? null;
2120
2259
  const second = items[1] ?? null;
2121
2260
  const isVertical = orientation === "vertical";
2122
2261
  const flexDirection = isVertical ? "row" : "column";
2123
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_remotion32.AbsoluteFill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("div", { style: { display: "flex", flexDirection, gap, width: "100%", height: "100%" }, children: [
2124
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { style: { flex: split, position: "relative" }, children: first }),
2125
- dividerColor ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2262
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Fill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { style: { display: "flex", flexDirection, gap, width: "100%", height: "100%" }, children: [
2263
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { flex: split, position: "relative" }, children: first }),
2264
+ dividerColor ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2126
2265
  "div",
2127
2266
  {
2128
2267
  style: {
@@ -2133,7 +2272,7 @@ var SplitScreen = ({
2133
2272
  }
2134
2273
  }
2135
2274
  ) : null,
2136
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { style: { flex: 1 - split, position: "relative" }, children: second })
2275
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { flex: 1 - split, position: "relative" }, children: second })
2137
2276
  ] }) });
2138
2277
  };
2139
2278
  var SplitScreenComponentMetadata = {
@@ -2147,22 +2286,25 @@ var SplitScreenComponentMetadata = {
2147
2286
  };
2148
2287
 
2149
2288
  // src/components/composites/SplitText.tsx
2150
- var import_remotion33 = require("remotion");
2151
- var import_zod37 = require("zod");
2152
- var import_jsx_runtime35 = require("react/jsx-runtime");
2153
- var SplitTextPropsSchema = import_zod37.z.object({
2154
- content: import_zod37.z.string().max(200),
2155
- fontSize: import_zod37.z.number().min(8).max(200).default(48),
2156
- color: import_zod37.z.string().default("#FFFFFF"),
2157
- fontFamily: import_zod37.z.string().default("Inter"),
2158
- position: import_zod37.z.enum(["top", "center", "bottom"]).default("center"),
2159
- splitBy: import_zod37.z.enum(["word", "letter"]).default("word"),
2160
- stagger: import_zod37.z.number().int().min(1).max(10).default(3),
2161
- animation: import_zod37.z.enum(["fade", "slideUp", "slideDown", "scale", "rotate"]).default("slideUp")
2289
+ var import_remotion29 = require("remotion");
2290
+ var import_zod40 = require("zod");
2291
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2292
+ var SplitTextPropsSchema = import_zod40.z.object({
2293
+ content: import_zod40.z.string().max(200),
2294
+ fontSize: import_zod40.z.number().min(8).max(200).default(48),
2295
+ color: import_zod40.z.string().default("#FFFFFF"),
2296
+ fontFamily: import_zod40.z.string().default("Inter"),
2297
+ position: import_zod40.z.enum(["top", "center", "bottom"]).default("center"),
2298
+ splitBy: import_zod40.z.enum(["word", "letter"]).default("word"),
2299
+ stagger: import_zod40.z.number().int().min(1).max(10).default(3),
2300
+ animation: import_zod40.z.enum(["fade", "slideUp", "slideDown", "scale", "rotate"]).default("slideUp"),
2301
+ maxWidthPct: import_zod40.z.number().min(0.1).max(1).default(0.9),
2302
+ safeInsetPct: import_zod40.z.number().min(0).max(0.25).default(0.06)
2162
2303
  });
2163
- var positionStyles4 = (position) => {
2164
- if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 80 };
2165
- if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: 80 };
2304
+ var positionStyles4 = (position, safeInsetPct) => {
2305
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
2306
+ if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: inset };
2307
+ if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: inset };
2166
2308
  return { justifyContent: "center", alignItems: "center" };
2167
2309
  };
2168
2310
  function getItemStyle(progress, animation) {
@@ -2189,12 +2331,14 @@ var SplitText = ({
2189
2331
  position,
2190
2332
  splitBy,
2191
2333
  stagger,
2192
- animation
2334
+ animation,
2335
+ maxWidthPct,
2336
+ safeInsetPct
2193
2337
  }) => {
2194
- const frame = (0, import_remotion33.useCurrentFrame)();
2195
- const { fps } = (0, import_remotion33.useVideoConfig)();
2338
+ const frame = (0, import_remotion29.useCurrentFrame)();
2339
+ const { fps } = (0, import_remotion29.useVideoConfig)();
2196
2340
  const items = splitBy === "letter" ? content.split("") : content.trim().split(/\s+/);
2197
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_remotion33.AbsoluteFill, { style: { display: "flex", ...positionStyles4(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2341
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Fill, { style: { display: "flex", ...positionStyles4(position, safeInsetPct) }, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2198
2342
  "div",
2199
2343
  {
2200
2344
  style: {
@@ -2202,19 +2346,22 @@ var SplitText = ({
2202
2346
  flexWrap: "wrap",
2203
2347
  justifyContent: "center",
2204
2348
  gap: splitBy === "letter" ? 0 : 12,
2349
+ maxWidth: `${Math.round(maxWidthPct * 100)}%`,
2205
2350
  fontSize,
2206
2351
  color,
2207
2352
  fontFamily,
2208
2353
  fontWeight: 700,
2209
- textAlign: "center"
2354
+ textAlign: "center",
2355
+ overflowWrap: "anywhere",
2356
+ wordBreak: "break-word"
2210
2357
  },
2211
2358
  children: items.map((t, i) => {
2212
- const progress = (0, import_remotion33.spring)({
2359
+ const progress = (0, import_remotion29.spring)({
2213
2360
  frame: frame - i * stagger,
2214
2361
  fps,
2215
2362
  config: { damping: 14, stiffness: 120, mass: 0.9 }
2216
2363
  });
2217
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2364
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2218
2365
  "span",
2219
2366
  {
2220
2367
  style: {
@@ -2242,19 +2389,19 @@ var SplitTextComponentMetadata = {
2242
2389
  };
2243
2390
 
2244
2391
  // src/components/composites/SubtitleText.tsx
2245
- var import_remotion34 = require("remotion");
2246
- var import_zod38 = require("zod");
2247
- var import_jsx_runtime36 = require("react/jsx-runtime");
2248
- var SubtitleTextPropsSchema = import_zod38.z.object({
2249
- text: import_zod38.z.string().max(200),
2250
- fontSize: import_zod38.z.number().min(12).max(80).default(36),
2251
- color: import_zod38.z.string().default("#FFFFFF"),
2252
- backgroundColor: import_zod38.z.string().default("rgba(0,0,0,0.7)"),
2253
- fontFamily: import_zod38.z.string().default("Inter"),
2254
- position: import_zod38.z.enum(["top", "bottom"]).default("bottom"),
2255
- maxWidth: import_zod38.z.number().min(200).max(1200).default(800),
2256
- padding: import_zod38.z.number().min(0).max(80).default(20),
2257
- highlightWords: import_zod38.z.array(import_zod38.z.string()).optional()
2392
+ var import_remotion30 = require("remotion");
2393
+ var import_zod41 = require("zod");
2394
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2395
+ var SubtitleTextPropsSchema = import_zod41.z.object({
2396
+ text: import_zod41.z.string().max(200),
2397
+ fontSize: import_zod41.z.number().min(12).max(80).default(36),
2398
+ color: import_zod41.z.string().default("#FFFFFF"),
2399
+ backgroundColor: import_zod41.z.string().default("rgba(0,0,0,0.7)"),
2400
+ fontFamily: import_zod41.z.string().default("Inter"),
2401
+ position: import_zod41.z.enum(["top", "bottom"]).default("bottom"),
2402
+ maxWidth: import_zod41.z.number().min(200).max(1200).default(800),
2403
+ padding: import_zod41.z.number().min(0).max(80).default(20),
2404
+ highlightWords: import_zod41.z.array(import_zod41.z.string()).optional()
2258
2405
  });
2259
2406
  function normalizeWord(w) {
2260
2407
  return w.toLowerCase().replace(/[^a-z0-9]/g, "");
@@ -2271,15 +2418,15 @@ var SubtitleText = ({
2271
2418
  highlightWords,
2272
2419
  __wavesDurationInFrames
2273
2420
  }) => {
2274
- const frame = (0, import_remotion34.useCurrentFrame)();
2421
+ const frame = (0, import_remotion30.useCurrentFrame)();
2275
2422
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2276
- const inFade = (0, import_remotion34.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2277
- const outFade = (0, import_remotion34.interpolate)(frame, [Math.max(0, total - 10), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2423
+ const inFade = (0, import_remotion30.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2424
+ const outFade = (0, import_remotion30.interpolate)(frame, [Math.max(0, total - 10), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2278
2425
  const opacity = inFade * outFade;
2279
2426
  const highlights = new Set((highlightWords ?? []).map(normalizeWord));
2280
2427
  const tokens = text.split(/\s+/);
2281
2428
  const yStyle = position === "top" ? { top: 70 } : { bottom: 90 };
2282
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_remotion34.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { style: { position: "absolute", left: "50%", transform: "translateX(-50%)", maxWidth, width: "100%", ...yStyle }, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2429
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { position: "absolute", left: "50%", transform: "translateX(-50%)", maxWidth, width: "100%", ...yStyle }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2283
2430
  "div",
2284
2431
  {
2285
2432
  style: {
@@ -2298,7 +2445,7 @@ var SubtitleText = ({
2298
2445
  children: tokens.map((t, i) => {
2299
2446
  const n = normalizeWord(t);
2300
2447
  const isHighlighted = highlights.has(n);
2301
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { style: { color: isHighlighted ? "#FFD60A" : color, marginRight: 8 }, children: t }, i);
2448
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { style: { color: isHighlighted ? "#FFD60A" : color, marginRight: 8 }, children: t }, i);
2302
2449
  })
2303
2450
  }
2304
2451
  ) }) });
@@ -2311,17 +2458,19 @@ var SubtitleTextComponentMetadata = {
2311
2458
  };
2312
2459
 
2313
2460
  // src/components/composites/TikTokCaption.tsx
2314
- var import_remotion35 = require("remotion");
2315
- var import_zod39 = require("zod");
2316
- var import_jsx_runtime37 = require("react/jsx-runtime");
2317
- var TikTokCaptionPropsSchema = import_zod39.z.object({
2318
- text: import_zod39.z.string().max(150),
2319
- fontSize: import_zod39.z.number().min(12).max(120).default(48),
2320
- color: import_zod39.z.string().default("#FFFFFF"),
2321
- strokeColor: import_zod39.z.string().default("#000000"),
2322
- strokeWidth: import_zod39.z.number().min(0).max(10).default(3),
2323
- position: import_zod39.z.enum(["center", "bottom"]).default("center"),
2324
- highlightStyle: import_zod39.z.enum(["word", "bounce", "none"]).default("word")
2461
+ var import_remotion31 = require("remotion");
2462
+ var import_zod42 = require("zod");
2463
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2464
+ var TikTokCaptionPropsSchema = import_zod42.z.object({
2465
+ text: import_zod42.z.string().max(150),
2466
+ fontSize: import_zod42.z.number().min(12).max(120).default(48),
2467
+ color: import_zod42.z.string().default("#FFFFFF"),
2468
+ strokeColor: import_zod42.z.string().default("#000000"),
2469
+ strokeWidth: import_zod42.z.number().min(0).max(10).default(3),
2470
+ position: import_zod42.z.enum(["center", "bottom"]).default("center"),
2471
+ highlightStyle: import_zod42.z.enum(["word", "bounce", "none"]).default("word"),
2472
+ maxWidthPct: import_zod42.z.number().min(0.1).max(1).default(0.92),
2473
+ safeInsetPct: import_zod42.z.number().min(0).max(0.25).default(0.06)
2325
2474
  });
2326
2475
  var TikTokCaption = ({
2327
2476
  text,
@@ -2331,18 +2480,21 @@ var TikTokCaption = ({
2331
2480
  strokeWidth,
2332
2481
  position,
2333
2482
  highlightStyle,
2483
+ maxWidthPct,
2484
+ safeInsetPct,
2334
2485
  __wavesDurationInFrames
2335
2486
  }) => {
2336
- const frame = (0, import_remotion35.useCurrentFrame)();
2487
+ const frame = (0, import_remotion31.useCurrentFrame)();
2337
2488
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2338
- const p = (0, import_remotion35.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2489
+ const p = (0, import_remotion31.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2339
2490
  const words = text.trim().split(/\s+/);
2340
2491
  const idx = highlightStyle === "none" ? -1 : Math.min(words.length - 1, Math.floor(p * words.length));
2341
- const yStyle = position === "bottom" ? { alignItems: "flex-end", paddingBottom: 140 } : { alignItems: "center" };
2342
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_remotion35.AbsoluteFill, { style: { display: "flex", justifyContent: "center", ...yStyle }, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { style: { textAlign: "center", padding: "0 80px", fontWeight: 900, lineHeight: 1.1 }, children: words.map((w, i) => {
2492
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
2493
+ const yStyle = position === "bottom" ? { alignItems: "flex-end", paddingBottom: inset } : { alignItems: "center" };
2494
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Fill, { style: { display: "flex", justifyContent: "center", ...yStyle }, children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { style: { textAlign: "center", paddingLeft: inset, paddingRight: inset, maxWidth: `${Math.round(maxWidthPct * 100)}%`, fontWeight: 900, lineHeight: 1.1, overflowWrap: "anywhere", wordBreak: "break-word" }, children: words.map((w, i) => {
2343
2495
  const isActive = i === idx && highlightStyle !== "none";
2344
- const bounce = isActive && highlightStyle === "bounce" ? (0, import_remotion35.interpolate)(frame % 18, [0, 9, 18], [1, 1.08, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" }) : 1;
2345
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2496
+ const bounce = isActive && highlightStyle === "bounce" ? (0, import_remotion31.interpolate)(frame % 18, [0, 9, 18], [1, 1.08, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" }) : 1;
2497
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2346
2498
  "span",
2347
2499
  {
2348
2500
  style: {
@@ -2367,20 +2519,20 @@ var TikTokCaptionComponentMetadata = {
2367
2519
  };
2368
2520
 
2369
2521
  // src/components/composites/ThirdLowerBanner.tsx
2370
- var import_remotion36 = require("remotion");
2371
- var import_zod40 = require("zod");
2372
- var import_jsx_runtime38 = require("react/jsx-runtime");
2373
- var ThirdLowerBannerPropsSchema = import_zod40.z.object({
2374
- name: import_zod40.z.string().max(50),
2375
- title: import_zod40.z.string().max(100),
2376
- backgroundColor: import_zod40.z.string().default("rgba(0,0,0,0.8)"),
2377
- primaryColor: import_zod40.z.string().default("#FFFFFF"),
2378
- secondaryColor: import_zod40.z.string().default("#CCCCCC"),
2379
- accentColor: import_zod40.z.string().default("#FF0000"),
2380
- showAvatar: import_zod40.z.boolean().default(false),
2381
- avatarSrc: import_zod40.z.string().optional()
2522
+ var import_remotion32 = require("remotion");
2523
+ var import_zod43 = require("zod");
2524
+ var import_jsx_runtime42 = require("react/jsx-runtime");
2525
+ var ThirdLowerBannerPropsSchema = import_zod43.z.object({
2526
+ name: import_zod43.z.string().max(50),
2527
+ title: import_zod43.z.string().max(100),
2528
+ backgroundColor: import_zod43.z.string().default("rgba(0,0,0,0.8)"),
2529
+ primaryColor: import_zod43.z.string().default("#FFFFFF"),
2530
+ secondaryColor: import_zod43.z.string().default("#CCCCCC"),
2531
+ accentColor: import_zod43.z.string().default("#FF0000"),
2532
+ showAvatar: import_zod43.z.boolean().default(false),
2533
+ avatarSrc: import_zod43.z.string().optional()
2382
2534
  });
2383
- var resolveAsset13 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion36.staticFile)(staticFileInputFromAssetPath(value));
2535
+ var resolveAsset13 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion32.staticFile)(staticFileInputFromAssetPath(value));
2384
2536
  var ThirdLowerBanner = ({
2385
2537
  name,
2386
2538
  title,
@@ -2391,11 +2543,11 @@ var ThirdLowerBanner = ({
2391
2543
  showAvatar,
2392
2544
  avatarSrc
2393
2545
  }) => {
2394
- const frame = (0, import_remotion36.useCurrentFrame)();
2395
- const slide = (0, import_remotion36.interpolate)(frame, [0, 18], [-600, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2396
- const opacity = (0, import_remotion36.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2546
+ const frame = (0, import_remotion32.useCurrentFrame)();
2547
+ const slide = (0, import_remotion32.interpolate)(frame, [0, 18], [-600, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2548
+ const opacity = (0, import_remotion32.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2397
2549
  const avatar = showAvatar && typeof avatarSrc === "string" && avatarSrc.length > 0 ? avatarSrc : null;
2398
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_remotion36.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2550
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
2399
2551
  "div",
2400
2552
  {
2401
2553
  style: {
@@ -2412,17 +2564,17 @@ var ThirdLowerBanner = ({
2412
2564
  backgroundColor
2413
2565
  },
2414
2566
  children: [
2415
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { width: 10, backgroundColor: accentColor } }),
2416
- avatar ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { width: 160, display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2417
- import_remotion36.Img,
2567
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { style: { width: 10, backgroundColor: accentColor } }),
2568
+ avatar ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { style: { width: 160, display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
2569
+ import_remotion32.Img,
2418
2570
  {
2419
2571
  src: resolveAsset13(avatar),
2420
2572
  style: { width: 110, height: 110, borderRadius: 9999, objectFit: "cover" }
2421
2573
  }
2422
2574
  ) }) : null,
2423
- /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { style: { padding: "28px 36px", display: "flex", flexDirection: "column", justifyContent: "center" }, children: [
2424
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { color: primaryColor, fontSize: 54, fontWeight: 800, lineHeight: 1 }, children: name }),
2425
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { marginTop: 10, color: secondaryColor, fontSize: 28, fontWeight: 600 }, children: title })
2575
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { style: { padding: "28px 36px", display: "flex", flexDirection: "column", justifyContent: "center" }, children: [
2576
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { style: { color: primaryColor, fontSize: 54, fontWeight: 800, lineHeight: 1 }, children: name }),
2577
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { style: { marginTop: 10, color: secondaryColor, fontSize: 28, fontWeight: 600 }, children: title })
2426
2578
  ] })
2427
2579
  ]
2428
2580
  }
@@ -2440,22 +2592,25 @@ var ThirdLowerBannerComponentMetadata = {
2440
2592
  };
2441
2593
 
2442
2594
  // src/components/composites/TypewriterText.tsx
2443
- var import_remotion37 = require("remotion");
2444
- var import_zod41 = require("zod");
2445
- var import_jsx_runtime39 = require("react/jsx-runtime");
2446
- var TypewriterTextPropsSchema = import_zod41.z.object({
2447
- content: import_zod41.z.string().max(500),
2448
- fontSize: import_zod41.z.number().min(8).max(200).default(48),
2449
- color: import_zod41.z.string().default("#FFFFFF"),
2450
- fontFamily: import_zod41.z.string().default("Inter"),
2451
- position: import_zod41.z.enum(["top", "center", "bottom"]).default("center"),
2452
- speed: import_zod41.z.number().min(0.5).max(5).default(2),
2453
- showCursor: import_zod41.z.boolean().default(true),
2454
- cursorColor: import_zod41.z.string().default("#FFFFFF")
2595
+ var import_remotion33 = require("remotion");
2596
+ var import_zod44 = require("zod");
2597
+ var import_jsx_runtime43 = require("react/jsx-runtime");
2598
+ var TypewriterTextPropsSchema = import_zod44.z.object({
2599
+ content: import_zod44.z.string().max(500),
2600
+ fontSize: import_zod44.z.number().min(8).max(200).default(48),
2601
+ color: import_zod44.z.string().default("#FFFFFF"),
2602
+ fontFamily: import_zod44.z.string().default("Inter"),
2603
+ position: import_zod44.z.enum(["top", "center", "bottom"]).default("center"),
2604
+ speed: import_zod44.z.number().min(0.5).max(5).default(2),
2605
+ showCursor: import_zod44.z.boolean().default(true),
2606
+ cursorColor: import_zod44.z.string().default("#FFFFFF"),
2607
+ maxWidthPct: import_zod44.z.number().min(0.1).max(1).default(0.9),
2608
+ safeInsetPct: import_zod44.z.number().min(0).max(0.25).default(0.06)
2455
2609
  });
2456
- var positionStyles5 = (position) => {
2457
- if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 80 };
2458
- if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: 80 };
2610
+ var positionStyles5 = (position, safeInsetPct) => {
2611
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
2612
+ if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: inset };
2613
+ if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: inset };
2459
2614
  return { justifyContent: "center", alignItems: "center" };
2460
2615
  };
2461
2616
  var TypewriterText = ({
@@ -2466,17 +2621,19 @@ var TypewriterText = ({
2466
2621
  position,
2467
2622
  speed,
2468
2623
  showCursor,
2469
- cursorColor
2624
+ cursorColor,
2625
+ maxWidthPct,
2626
+ safeInsetPct
2470
2627
  }) => {
2471
- const frame = (0, import_remotion37.useCurrentFrame)();
2628
+ const frame = (0, import_remotion33.useCurrentFrame)();
2472
2629
  const charCount = Math.min(content.length, Math.max(0, Math.floor(frame * speed)));
2473
2630
  const shown = content.slice(0, charCount);
2474
2631
  const cursorVisible = showCursor && charCount < content.length ? frame % 30 < 15 : false;
2475
2632
  const cursorOpacity = cursorVisible ? 1 : 0;
2476
- const cursorFade = (0, import_remotion37.interpolate)(frame % 30, [0, 5], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2477
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_remotion37.AbsoluteFill, { style: { display: "flex", ...positionStyles5(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("div", { style: { fontSize, color, fontFamily, fontWeight: 600, textAlign: "center", whiteSpace: "pre-wrap" }, children: [
2633
+ const cursorFade = (0, import_remotion33.interpolate)(frame % 30, [0, 5], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2634
+ return /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Fill, { style: { display: "flex", ...positionStyles5(position, safeInsetPct) }, children: /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { style: { fontSize, color, fontFamily, fontWeight: 600, textAlign: "center", whiteSpace: "pre-wrap", maxWidth: `${Math.round(maxWidthPct * 100)}%`, overflowWrap: "anywhere", wordBreak: "break-word" }, children: [
2478
2635
  shown,
2479
- showCursor ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { style: { color: cursorColor, opacity: cursorOpacity * cursorFade }, children: "|" }) : null
2636
+ showCursor ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { style: { color: cursorColor, opacity: cursorOpacity * cursorFade }, children: "|" }) : null
2480
2637
  ] }) });
2481
2638
  };
2482
2639
  var TypewriterTextComponentMetadata = {
@@ -2491,21 +2648,21 @@ var TypewriterTextComponentMetadata = {
2491
2648
  };
2492
2649
 
2493
2650
  // src/components/composites/TwitterCard.tsx
2494
- var import_remotion38 = require("remotion");
2495
- var import_zod42 = require("zod");
2496
- var import_jsx_runtime40 = require("react/jsx-runtime");
2497
- var TwitterCardPropsSchema = import_zod42.z.object({
2498
- author: import_zod42.z.string().min(1),
2499
- handle: import_zod42.z.string().min(1),
2500
- avatarSrc: import_zod42.z.string().optional(),
2501
- tweet: import_zod42.z.string().max(280),
2502
- image: import_zod42.z.string().optional(),
2503
- timestamp: import_zod42.z.string().optional(),
2504
- verified: import_zod42.z.boolean().default(false)
2651
+ var import_remotion34 = require("remotion");
2652
+ var import_zod45 = require("zod");
2653
+ var import_jsx_runtime44 = require("react/jsx-runtime");
2654
+ var TwitterCardPropsSchema = import_zod45.z.object({
2655
+ author: import_zod45.z.string().min(1),
2656
+ handle: import_zod45.z.string().min(1),
2657
+ avatarSrc: import_zod45.z.string().optional(),
2658
+ tweet: import_zod45.z.string().max(280),
2659
+ image: import_zod45.z.string().optional(),
2660
+ timestamp: import_zod45.z.string().optional(),
2661
+ verified: import_zod45.z.boolean().default(false)
2505
2662
  });
2506
- var resolveAsset14 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion38.staticFile)(staticFileInputFromAssetPath(value));
2663
+ var resolveAsset14 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion34.staticFile)(staticFileInputFromAssetPath(value));
2507
2664
  var TwitterCard = ({ author, handle, avatarSrc, tweet, image, timestamp, verified }) => {
2508
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_remotion38.AbsoluteFill, { style: { backgroundColor: "#0B0F14", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2665
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Fill, { style: { backgroundColor: "#0B0F14", display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
2509
2666
  "div",
2510
2667
  {
2511
2668
  style: {
@@ -2517,19 +2674,19 @@ var TwitterCard = ({ author, handle, avatarSrc, tweet, image, timestamp, verifie
2517
2674
  boxShadow: "0 30px 90px rgba(0,0,0,0.35)"
2518
2675
  },
2519
2676
  children: [
2520
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { style: { display: "flex", gap: 18, alignItems: "center" }, children: [
2521
- avatarSrc ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_remotion38.Img, { src: resolveAsset14(avatarSrc), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "#E5E7EB" } }),
2522
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { style: { display: "flex", flexDirection: "column" }, children: [
2523
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { style: { display: "flex", gap: 10, alignItems: "center" }, children: [
2524
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { fontSize: 34, fontWeight: 900, color: "#111827" }, children: author }),
2525
- verified ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { fontSize: 26, color: "#1D9BF0", fontWeight: 900 }, children: "\u2713" }) : null
2677
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { style: { display: "flex", gap: 18, alignItems: "center" }, children: [
2678
+ avatarSrc ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_remotion34.Img, { src: resolveAsset14(avatarSrc), style: { width: 78, height: 78, borderRadius: 9999, objectFit: "cover" } }) : /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { width: 78, height: 78, borderRadius: 9999, backgroundColor: "#E5E7EB" } }),
2679
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { style: { display: "flex", flexDirection: "column" }, children: [
2680
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { style: { display: "flex", gap: 10, alignItems: "center" }, children: [
2681
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { fontSize: 34, fontWeight: 900, color: "#111827" }, children: author }),
2682
+ verified ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { fontSize: 26, color: "#1D9BF0", fontWeight: 900 }, children: "\u2713" }) : null
2526
2683
  ] }),
2527
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { fontSize: 26, color: "#6B7280", fontWeight: 800 }, children: handle })
2684
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { fontSize: 26, color: "#6B7280", fontWeight: 800 }, children: handle })
2528
2685
  ] })
2529
2686
  ] }),
2530
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { marginTop: 28, fontSize: 36, lineHeight: 1.25, color: "#111827", fontWeight: 700 }, children: tweet }),
2531
- image ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { marginTop: 28, width: "100%", height: 520, overflow: "hidden", borderRadius: 22, backgroundColor: "#F3F4F6" }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_remotion38.Img, { src: resolveAsset14(image), style: { width: "100%", height: "100%", objectFit: "cover" } }) }) : null,
2532
- timestamp ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { marginTop: 22, fontSize: 22, color: "#6B7280", fontWeight: 700 }, children: timestamp }) : null
2687
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { marginTop: 28, fontSize: 36, lineHeight: 1.25, color: "#111827", fontWeight: 700 }, children: tweet }),
2688
+ image ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { marginTop: 28, width: "100%", height: 520, overflow: "hidden", borderRadius: 22, backgroundColor: "#F3F4F6" }, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_remotion34.Img, { src: resolveAsset14(image), style: { width: "100%", height: "100%", objectFit: "cover" } }) }) : null,
2689
+ timestamp ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { marginTop: 22, fontSize: 22, color: "#6B7280", fontWeight: 700 }, children: timestamp }) : null
2533
2690
  ]
2534
2691
  }
2535
2692
  ) });
@@ -2542,19 +2699,19 @@ var TwitterCardComponentMetadata = {
2542
2699
  };
2543
2700
 
2544
2701
  // src/components/composites/Watermark.tsx
2545
- var import_remotion39 = require("remotion");
2546
- var import_zod43 = require("zod");
2547
- var import_jsx_runtime41 = require("react/jsx-runtime");
2548
- var WatermarkPropsSchema = import_zod43.z.object({
2549
- type: import_zod43.z.enum(["logo", "text"]).default("logo"),
2550
- src: import_zod43.z.string().optional(),
2551
- text: import_zod43.z.string().optional(),
2552
- position: import_zod43.z.enum(["topLeft", "topRight", "bottomLeft", "bottomRight"]).default("bottomRight"),
2553
- opacity: import_zod43.z.number().min(0.1).max(1).default(0.5),
2554
- size: import_zod43.z.number().min(30).max(150).default(60),
2555
- color: import_zod43.z.string().default("#FFFFFF")
2702
+ var import_remotion35 = require("remotion");
2703
+ var import_zod46 = require("zod");
2704
+ var import_jsx_runtime45 = require("react/jsx-runtime");
2705
+ var WatermarkPropsSchema = import_zod46.z.object({
2706
+ type: import_zod46.z.enum(["logo", "text"]).default("logo"),
2707
+ src: import_zod46.z.string().optional(),
2708
+ text: import_zod46.z.string().optional(),
2709
+ position: import_zod46.z.enum(["topLeft", "topRight", "bottomLeft", "bottomRight"]).default("bottomRight"),
2710
+ opacity: import_zod46.z.number().min(0.1).max(1).default(0.5),
2711
+ size: import_zod46.z.number().min(30).max(150).default(60),
2712
+ color: import_zod46.z.string().default("#FFFFFF")
2556
2713
  });
2557
- var resolveAsset15 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion39.staticFile)(staticFileInputFromAssetPath(value));
2714
+ var resolveAsset15 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion35.staticFile)(staticFileInputFromAssetPath(value));
2558
2715
  function posStyle(position) {
2559
2716
  const offset = 30;
2560
2717
  if (position === "topLeft") return { left: offset, top: offset };
@@ -2569,8 +2726,8 @@ var Watermark = ({ type, src, text, position, opacity, size, color }) => {
2569
2726
  opacity,
2570
2727
  pointerEvents: "none"
2571
2728
  };
2572
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_remotion39.AbsoluteFill, { children: type === "text" ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { style: { ...style, fontSize: Math.round(size * 0.6), color, fontWeight: 700 }, children: text ?? "" }) : src ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2573
- import_remotion39.Img,
2729
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Fill, { children: type === "text" ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { style: { ...style, fontSize: Math.round(size * 0.6), color, fontWeight: 700 }, children: text ?? "" }) : src ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
2730
+ import_remotion35.Img,
2574
2731
  {
2575
2732
  src: resolveAsset15(src),
2576
2733
  style: { ...style, width: size, height: size, objectFit: "contain" }
@@ -2584,19 +2741,20 @@ var WatermarkComponentMetadata = {
2584
2741
  llmGuidance: "Use subtle opacity (0.3-0.6). bottomRight is standard.",
2585
2742
  examples: [
2586
2743
  { type: "text", text: "@depths.ai", position: "bottomRight", opacity: 0.4, size: 60 },
2587
- { type: "logo", src: "/assets/logo.png", position: "topLeft", opacity: 0.5, size: 70 }
2744
+ { type: "logo", src: "/assets/logo.svg", position: "topLeft", opacity: 0.5, size: 70 }
2588
2745
  ]
2589
2746
  };
2590
2747
 
2591
2748
  // src/components/composites/WipeTransition.tsx
2592
- var import_remotion40 = require("remotion");
2593
- var import_zod44 = require("zod");
2594
- var import_jsx_runtime42 = require("react/jsx-runtime");
2595
- var WipeTransitionPropsSchema = import_zod44.z.object({
2596
- durationInFrames: import_zod44.z.number().int().min(10).max(60).default(30),
2597
- direction: import_zod44.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
2598
- softEdge: import_zod44.z.boolean().default(false),
2599
- phase: import_zod44.z.enum(["in", "out", "inOut"]).default("inOut")
2749
+ var import_react9 = __toESM(require("react"));
2750
+ var import_remotion36 = require("remotion");
2751
+ var import_zod47 = require("zod");
2752
+ var import_jsx_runtime46 = require("react/jsx-runtime");
2753
+ var WipeTransitionPropsSchema = import_zod47.z.object({
2754
+ durationInFrames: import_zod47.z.number().int().min(10).max(60).default(30),
2755
+ direction: import_zod47.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
2756
+ softEdge: import_zod47.z.boolean().default(false),
2757
+ phase: import_zod47.z.enum(["in", "out", "inOut"]).default("inOut")
2600
2758
  });
2601
2759
  function clipFor2(direction, p) {
2602
2760
  if (direction === "left") return `inset(0 ${100 * (1 - p)}% 0 0)`;
@@ -2613,20 +2771,21 @@ var WipeTransition = ({
2613
2771
  children,
2614
2772
  __wavesDurationInFrames
2615
2773
  }) => {
2616
- const frame = (0, import_remotion40.useCurrentFrame)();
2774
+ const layers = import_react9.default.Children.toArray(children);
2775
+ const frame = (0, import_remotion36.useCurrentFrame)();
2617
2776
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2618
2777
  const d = Math.min(durationInFrames, total);
2619
2778
  let clipPath;
2620
2779
  if (phase === "in" || phase === "inOut") {
2621
- const t = (0, import_remotion40.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2780
+ const t = (0, import_remotion36.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2622
2781
  clipPath = clipFor2(direction, t);
2623
2782
  }
2624
2783
  if (phase === "out" || phase === "inOut") {
2625
2784
  const start = Math.max(0, total - d);
2626
- const t = (0, import_remotion40.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2785
+ const t = (0, import_remotion36.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2627
2786
  clipPath = clipFor2(direction, t);
2628
2787
  }
2629
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_remotion40.AbsoluteFill, { style: { clipPath, filter: softEdge ? "blur(0.4px)" : void 0 }, children });
2788
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Fill, { style: { clipPath, filter: softEdge ? "blur(0.4px)" : void 0 }, children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
2630
2789
  };
2631
2790
  var WipeTransitionComponentMetadata = {
2632
2791
  kind: "composite",
@@ -2638,18 +2797,18 @@ var WipeTransitionComponentMetadata = {
2638
2797
  };
2639
2798
 
2640
2799
  // src/components/composites/YouTubeThumbnail.tsx
2641
- var import_remotion41 = require("remotion");
2642
- var import_zod45 = require("zod");
2643
- var import_jsx_runtime43 = require("react/jsx-runtime");
2644
- var YouTubeThumbnailPropsSchema = import_zod45.z.object({
2645
- backgroundImage: import_zod45.z.string().min(1),
2646
- title: import_zod45.z.string().max(60),
2647
- subtitle: import_zod45.z.string().max(40).optional(),
2648
- thumbnailFace: import_zod45.z.string().optional(),
2649
- accentColor: import_zod45.z.string().default("#FF0000"),
2650
- style: import_zod45.z.enum(["bold", "minimal", "dramatic"]).default("bold")
2800
+ var import_remotion37 = require("remotion");
2801
+ var import_zod48 = require("zod");
2802
+ var import_jsx_runtime47 = require("react/jsx-runtime");
2803
+ var YouTubeThumbnailPropsSchema = import_zod48.z.object({
2804
+ backgroundImage: import_zod48.z.string().min(1),
2805
+ title: import_zod48.z.string().max(60),
2806
+ subtitle: import_zod48.z.string().max(40).optional(),
2807
+ thumbnailFace: import_zod48.z.string().optional(),
2808
+ accentColor: import_zod48.z.string().default("#FF0000"),
2809
+ style: import_zod48.z.enum(["bold", "minimal", "dramatic"]).default("bold")
2651
2810
  });
2652
- var resolveAsset16 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion41.staticFile)(staticFileInputFromAssetPath(value));
2811
+ var resolveAsset16 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion37.staticFile)(staticFileInputFromAssetPath(value));
2653
2812
  var YouTubeThumbnail = ({
2654
2813
  backgroundImage,
2655
2814
  title,
@@ -2658,18 +2817,18 @@ var YouTubeThumbnail = ({
2658
2817
  accentColor,
2659
2818
  style
2660
2819
  }) => {
2661
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_remotion41.AbsoluteFill, { children: [
2662
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_remotion41.Img, { src: resolveAsset16(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover" } }),
2663
- style === "dramatic" ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_remotion41.AbsoluteFill, { style: { backgroundColor: "rgba(0,0,0,0.35)" } }) : null,
2664
- thumbnailFace ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2665
- import_remotion41.Img,
2820
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Fill, { children: [
2821
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_remotion37.Img, { src: resolveAsset16(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover" } }),
2822
+ style === "dramatic" ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { style: { position: "absolute", inset: 0, backgroundColor: "rgba(0,0,0,0.35)" } }) : null,
2823
+ thumbnailFace ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
2824
+ import_remotion37.Img,
2666
2825
  {
2667
2826
  src: resolveAsset16(thumbnailFace),
2668
2827
  style: { position: "absolute", right: 60, bottom: 0, width: 520, height: 720, objectFit: "cover" }
2669
2828
  }
2670
2829
  ) : null,
2671
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { style: { position: "absolute", left: 70, top: 90, width: 1100 }, children: [
2672
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
2830
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { style: { position: "absolute", left: 70, top: 90, width: 1100 }, children: [
2831
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
2673
2832
  "div",
2674
2833
  {
2675
2834
  style: {
@@ -2684,9 +2843,9 @@ var YouTubeThumbnail = ({
2684
2843
  children: title
2685
2844
  }
2686
2845
  ),
2687
- subtitle ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { style: { marginTop: 26, fontSize: 52, fontWeight: 900, color: accentColor, textShadow: "0 10px 30px rgba(0,0,0,0.6)" }, children: subtitle }) : null
2846
+ subtitle ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { style: { marginTop: 26, fontSize: 52, fontWeight: 900, color: accentColor, textShadow: "0 10px 30px rgba(0,0,0,0.6)" }, children: subtitle }) : null
2688
2847
  ] }),
2689
- style !== "minimal" ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { style: { position: "absolute", left: 70, bottom: 80, width: 260, height: 18, backgroundColor: accentColor, borderRadius: 9999 } }) : null
2848
+ style !== "minimal" ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { style: { position: "absolute", left: 70, bottom: 80, width: 260, height: 18, backgroundColor: accentColor, borderRadius: 9999 } }) : null
2690
2849
  ] });
2691
2850
  };
2692
2851
  var YouTubeThumbnailComponentMetadata = {
@@ -2697,37 +2856,39 @@ var YouTubeThumbnailComponentMetadata = {
2697
2856
  };
2698
2857
 
2699
2858
  // src/components/composites/VideoWithOverlay.tsx
2700
- var import_remotion42 = require("remotion");
2701
- var import_zod46 = require("zod");
2702
- var import_jsx_runtime44 = require("react/jsx-runtime");
2703
- var OverlaySchema = import_zod46.z.object({
2704
- type: import_zod46.z.enum(["text", "logo", "gradient"]),
2705
- content: import_zod46.z.string().optional(),
2706
- opacity: import_zod46.z.number().min(0).max(1).default(0.3),
2707
- position: import_zod46.z.enum(["top", "bottom", "center", "full"]).default("bottom")
2859
+ var import_remotion38 = require("remotion");
2860
+ var import_zod49 = require("zod");
2861
+ var import_jsx_runtime48 = require("react/jsx-runtime");
2862
+ var OverlaySchema = import_zod49.z.object({
2863
+ type: import_zod49.z.enum(["text", "logo", "gradient"]),
2864
+ content: import_zod49.z.string().optional(),
2865
+ opacity: import_zod49.z.number().min(0).max(1).default(0.3),
2866
+ position: import_zod49.z.enum(["top", "bottom", "center", "full"]).default("bottom")
2708
2867
  });
2709
- var VideoWithOverlayPropsSchema = import_zod46.z.object({
2710
- src: import_zod46.z.string().min(1),
2868
+ var VideoWithOverlayPropsSchema = import_zod49.z.object({
2869
+ src: import_zod49.z.string().min(1),
2711
2870
  overlay: OverlaySchema.optional(),
2712
- volume: import_zod46.z.number().min(0).max(1).default(1),
2713
- playbackRate: import_zod46.z.number().min(0.5).max(2).default(1)
2871
+ volume: import_zod49.z.number().min(0).max(1).default(1),
2872
+ playbackRate: import_zod49.z.number().min(0.5).max(2).default(1)
2714
2873
  });
2715
- var resolveAsset17 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion42.staticFile)(staticFileInputFromAssetPath(value));
2874
+ var resolveAsset17 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion38.staticFile)(staticFileInputFromAssetPath(value));
2716
2875
  var VideoWithOverlay = ({ src, overlay, volume, playbackRate }) => {
2717
- const frame = (0, import_remotion42.useCurrentFrame)();
2718
- const fade = (0, import_remotion42.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2719
- const overlayNode = overlay ? overlay.type === "gradient" ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2720
- import_remotion42.AbsoluteFill,
2876
+ const frame = (0, import_remotion38.useCurrentFrame)();
2877
+ const fade = (0, import_remotion38.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2878
+ const overlayFill = { position: "absolute", inset: 0 };
2879
+ const overlayNode = overlay ? overlay.type === "gradient" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2880
+ "div",
2721
2881
  {
2722
2882
  style: {
2883
+ ...overlayFill,
2723
2884
  opacity: overlay.opacity,
2724
2885
  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))"
2725
2886
  }
2726
2887
  }
2727
- ) : overlay.type === "logo" && overlay.content ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_remotion42.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_remotion42.Img, { src: resolveAsset17(overlay.content), style: { width: 220, height: 220, objectFit: "contain" } }) }) : overlay.type === "text" && overlay.content ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(import_remotion42.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { color: "#FFFFFF", fontSize: 56, fontWeight: 900, textAlign: "center", padding: "0 80px" }, children: overlay.content }) }) : null : null;
2728
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_remotion42.AbsoluteFill, { children: [
2729
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
2730
- import_remotion42.Video,
2888
+ ) : overlay.type === "logo" && overlay.content ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { style: { ...overlayFill, display: "flex", justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_remotion38.Img, { src: resolveAsset17(overlay.content), style: { width: 220, height: 220, objectFit: "contain" } }) }) : overlay.type === "text" && overlay.content ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { style: { ...overlayFill, display: "flex", justifyContent: "center", alignItems: "center", opacity: overlay.opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { style: { color: "#FFFFFF", fontSize: 56, fontWeight: 900, textAlign: "center", padding: "0 80px" }, children: overlay.content }) }) : null : null;
2889
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Fill, { children: [
2890
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2891
+ import_remotion38.Video,
2731
2892
  {
2732
2893
  src: resolveAsset17(src),
2733
2894
  style: { width: "100%", height: "100%", objectFit: "cover", opacity: fade },
@@ -2746,13 +2907,14 @@ var VideoWithOverlayComponentMetadata = {
2746
2907
  };
2747
2908
 
2748
2909
  // src/components/composites/ZoomTransition.tsx
2749
- var import_remotion43 = require("remotion");
2750
- var import_zod47 = require("zod");
2751
- var import_jsx_runtime45 = require("react/jsx-runtime");
2752
- var ZoomTransitionPropsSchema = import_zod47.z.object({
2753
- durationInFrames: import_zod47.z.number().int().min(10).max(60).default(30),
2754
- type: import_zod47.z.enum(["zoomIn", "zoomOut"]).default("zoomIn"),
2755
- phase: import_zod47.z.enum(["in", "out", "inOut"]).default("inOut")
2910
+ var import_react10 = __toESM(require("react"));
2911
+ var import_remotion39 = require("remotion");
2912
+ var import_zod50 = require("zod");
2913
+ var import_jsx_runtime49 = require("react/jsx-runtime");
2914
+ var ZoomTransitionPropsSchema = import_zod50.z.object({
2915
+ durationInFrames: import_zod50.z.number().int().min(10).max(60).default(30),
2916
+ type: import_zod50.z.enum(["zoomIn", "zoomOut"]).default("zoomIn"),
2917
+ phase: import_zod50.z.enum(["in", "out", "inOut"]).default("inOut")
2756
2918
  });
2757
2919
  var ZoomTransition = ({
2758
2920
  durationInFrames,
@@ -2761,7 +2923,8 @@ var ZoomTransition = ({
2761
2923
  children,
2762
2924
  __wavesDurationInFrames
2763
2925
  }) => {
2764
- const frame = (0, import_remotion43.useCurrentFrame)();
2926
+ const layers = import_react10.default.Children.toArray(children);
2927
+ const frame = (0, import_remotion39.useCurrentFrame)();
2765
2928
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2766
2929
  const d = Math.min(durationInFrames, total);
2767
2930
  let opacity = 1;
@@ -2769,17 +2932,17 @@ var ZoomTransition = ({
2769
2932
  const enterFrom = type === "zoomIn" ? 1.2 : 0.85;
2770
2933
  const exitTo = type === "zoomIn" ? 1.25 : 0.75;
2771
2934
  if (phase === "in" || phase === "inOut") {
2772
- const t = (0, import_remotion43.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2935
+ const t = (0, import_remotion39.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2773
2936
  scale *= enterFrom + (1 - enterFrom) * t;
2774
2937
  opacity *= t;
2775
2938
  }
2776
2939
  if (phase === "out" || phase === "inOut") {
2777
2940
  const start = Math.max(0, total - d);
2778
- const t = (0, import_remotion43.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2941
+ const t = (0, import_remotion39.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2779
2942
  scale *= 1 + (exitTo - 1) * t;
2780
2943
  opacity *= 1 - t;
2781
2944
  }
2782
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_remotion43.AbsoluteFill, { style: { opacity, transform: `scale(${scale})` }, children });
2945
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(Fill, { style: { opacity, transform: `scale(${scale})` }, children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i)) });
2783
2946
  };
2784
2947
  var ZoomTransitionComponentMetadata = {
2785
2948
  kind: "composite",
@@ -2808,6 +2971,14 @@ function registerBuiltInComponents() {
2808
2971
  metadata: BoxComponentMetadata
2809
2972
  });
2810
2973
  }
2974
+ if (!globalRegistry.has("Frame")) {
2975
+ globalRegistry.register({
2976
+ type: "Frame",
2977
+ component: Frame,
2978
+ propsSchema: FramePropsSchema,
2979
+ metadata: FrameComponentMetadata
2980
+ });
2981
+ }
2811
2982
  if (!globalRegistry.has("Stack")) {
2812
2983
  globalRegistry.register({
2813
2984
  type: "Stack",
@@ -2824,6 +2995,22 @@ function registerBuiltInComponents() {
2824
2995
  metadata: GridComponentMetadata
2825
2996
  });
2826
2997
  }
2998
+ if (!globalRegistry.has("Layers")) {
2999
+ globalRegistry.register({
3000
+ type: "Layers",
3001
+ component: Layers,
3002
+ propsSchema: LayersPropsSchema,
3003
+ metadata: LayersComponentMetadata
3004
+ });
3005
+ }
3006
+ if (!globalRegistry.has("Layer")) {
3007
+ globalRegistry.register({
3008
+ type: "Layer",
3009
+ component: Layer,
3010
+ propsSchema: LayerPropsSchema,
3011
+ metadata: LayerComponentMetadata
3012
+ });
3013
+ }
2827
3014
  if (!globalRegistry.has("Image")) {
2828
3015
  globalRegistry.register({
2829
3016
  type: "Image",
@@ -3562,14 +3749,16 @@ var WavesEngine = class {
3562
3749
  onProgress: () => void 0
3563
3750
  });
3564
3751
  const compositionId = validatedIR.video.id ?? "main";
3752
+ const inputProps = options.inputProps ?? {};
3565
3753
  const composition = await (0, import_renderer.selectComposition)({
3566
3754
  serveUrl: bundleLocation,
3567
3755
  id: compositionId,
3568
- inputProps: {}
3756
+ inputProps
3569
3757
  });
3570
3758
  await (0, import_renderer.renderMedia)({
3571
3759
  composition,
3572
3760
  serveUrl: bundleLocation,
3761
+ inputProps,
3573
3762
  codec: options.codec ?? "h264",
3574
3763
  outputLocation: options.outputPath,
3575
3764
  crf: options.crf ?? null,
@@ -3582,6 +3771,70 @@ var WavesEngine = class {
3582
3771
  await import_promises.default.rm(tmpDir, { recursive: true, force: true });
3583
3772
  }
3584
3773
  }
3774
+ async renderStills(ir, options) {
3775
+ if (this.registry !== globalRegistry) {
3776
+ throw new WavesRenderError("WavesEngine currently requires using globalRegistry", {
3777
+ hint: "Use `registerBuiltInComponents()` + `globalRegistry` for both validation and rendering."
3778
+ });
3779
+ }
3780
+ const validationResult = this.validator.validate(ir);
3781
+ if (!validationResult.success) {
3782
+ throw new WavesRenderError("IR validation failed", { errors: validationResult.errors });
3783
+ }
3784
+ const validatedIR = validationResult.data;
3785
+ const requiredTypes = collectComponentTypes(validatedIR);
3786
+ for (const type of requiredTypes) {
3787
+ if (!this.registry.has(type)) {
3788
+ throw new WavesRenderError("Unknown component type", { type });
3789
+ }
3790
+ }
3791
+ const rootDir = options.rootDir ?? process.cwd();
3792
+ const tmpDir = await import_promises.default.mkdtemp(import_node_path.default.join(rootDir, ".waves-tmp-"));
3793
+ const entryPoint = import_node_path.default.join(tmpDir, "entry.tsx");
3794
+ try {
3795
+ await import_promises.default.writeFile(entryPoint, generateEntryPoint(validatedIR, options), "utf-8");
3796
+ await import_promises.default.mkdir(options.outputDir, { recursive: true });
3797
+ const bundleLocation = await (0, import_bundler.bundle)({
3798
+ entryPoint,
3799
+ rootDir,
3800
+ publicDir: options.publicDir ?? null,
3801
+ onProgress: () => void 0
3802
+ });
3803
+ const compositionId = validatedIR.video.id ?? "main";
3804
+ const inputProps = options.inputProps ?? {};
3805
+ const composition = await (0, import_renderer.selectComposition)({
3806
+ serveUrl: bundleLocation,
3807
+ id: compositionId,
3808
+ inputProps
3809
+ });
3810
+ const frames = Array.from(new Set(options.frames)).sort((a, b) => a - b);
3811
+ const written = [];
3812
+ for (const frame of frames) {
3813
+ const clamped = Math.max(0, Math.min(composition.durationInFrames - 1, Math.floor(frame)));
3814
+ const imageFormat = options.imageFormat ?? "png";
3815
+ const filename = `${compositionId}-frame-${String(clamped).padStart(6, "0")}.${imageFormat}`;
3816
+ const outPath = import_node_path.default.join(options.outputDir, filename);
3817
+ const stillOptions = {
3818
+ composition,
3819
+ serveUrl: bundleLocation,
3820
+ inputProps,
3821
+ frame: clamped,
3822
+ output: outPath,
3823
+ imageFormat,
3824
+ scale: options.scale ?? 1,
3825
+ overwrite: true,
3826
+ ...imageFormat === "jpeg" ? { jpegQuality: options.jpegQuality ?? 80 } : {}
3827
+ };
3828
+ await (0, import_renderer.renderStill)(stillOptions);
3829
+ written.push(outPath);
3830
+ }
3831
+ return written;
3832
+ } catch (error) {
3833
+ throw new WavesRenderError("Rendering failed", { originalError: error });
3834
+ } finally {
3835
+ await import_promises.default.rm(tmpDir, { recursive: true, force: true });
3836
+ }
3837
+ }
3585
3838
  };
3586
3839
  function collectComponentTypes(ir) {
3587
3840
  const types = /* @__PURE__ */ new Set();
@@ -3616,8 +3869,10 @@ registerBuiltInComponents();
3616
3869
  const ir = ${JSON.stringify(ir, null, 2)};
3617
3870
  const compositionId = ${JSON.stringify(compositionId)};
3618
3871
 
3619
- const Root = () => {
3620
- return <WavesComposition ir={ir} registry={globalRegistry} />;
3872
+ const Root = (props) => {
3873
+ const debugBounds = Boolean(props?.__wavesDebugBounds);
3874
+ const debugLabels = Boolean(props?.__wavesDebugLabels);
3875
+ return <WavesComposition ir={ir} registry={globalRegistry} debug={{ bounds: debugBounds, labels: debugLabels }} />;
3621
3876
  };
3622
3877
 
3623
3878
  export const RemotionRoot = () => {
@@ -3664,7 +3919,7 @@ function parseArgs(argv) {
3664
3919
  const hasInlineValue = eq >= 0;
3665
3920
  const inlineValue = hasInlineValue ? arg.slice(eq + 1) : void 0;
3666
3921
  const next = argv[i + 1];
3667
- const isBoolean = key === "help" || key === "pretty" || key === "includeInternal";
3922
+ const isBoolean = key === "help" || key === "pretty" || key === "includeInternal" || key === "debugBounds" || key === "debugLabels";
3668
3923
  if (isBoolean) {
3669
3924
  flags[key] = true;
3670
3925
  continue;
@@ -3709,6 +3964,7 @@ Commands:
3709
3964
  write-ir Write a starter IR JSON file
3710
3965
  validate Validate an IR JSON file
3711
3966
  render Render MP4 from an IR JSON file
3967
+ stills Render PNG/JPEG/WebP still frames from an IR JSON file
3712
3968
 
3713
3969
  Options:
3714
3970
  -h, --help Show help
@@ -3745,6 +4001,10 @@ async function importRegistrationModules(modules) {
3745
4001
  function stringifyJSON(value, pretty) {
3746
4002
  return JSON.stringify(value, null, pretty ? 2 : 0) + "\n";
3747
4003
  }
4004
+ function parseImageFormat(raw) {
4005
+ if (raw === "png" || raw === "jpeg" || raw === "webp") return raw;
4006
+ return null;
4007
+ }
3748
4008
  async function main(argv = process.argv.slice(2)) {
3749
4009
  const parsed = parseArgs(argv);
3750
4010
  if (parsed.flags.version) {
@@ -4094,15 +4354,19 @@ async function main(argv = process.argv.slice(2)) {
4094
4354
  const crfRaw = getFlagString(parsed.flags, "crf");
4095
4355
  const concurrencyRaw = getFlagString(parsed.flags, "concurrency");
4096
4356
  const publicDir = getFlagString(parsed.flags, "publicDir");
4357
+ const debugBounds = Boolean(parsed.flags.debugBounds);
4358
+ const debugLabels = Boolean(parsed.flags.debugLabels);
4097
4359
  const crf = crfRaw ? Number(crfRaw) : void 0;
4098
4360
  const concurrency = concurrencyRaw ? /^[0-9]+$/.test(concurrencyRaw) ? Number(concurrencyRaw) : concurrencyRaw : void 0;
4099
4361
  const engine = new WavesEngine(globalRegistry, new IRValidator(globalRegistry));
4100
4362
  try {
4363
+ const inputProps = debugBounds || debugLabels ? { __wavesDebugBounds: debugBounds, __wavesDebugLabels: debugLabels } : void 0;
4101
4364
  const opts = { outputPath, registrationModules };
4102
4365
  if (publicDir) opts.publicDir = publicDir;
4103
4366
  if (codec) opts.codec = codec;
4104
4367
  if (Number.isFinite(crf ?? Number.NaN)) opts.crf = crf;
4105
4368
  if (concurrency !== void 0) opts.concurrency = concurrency;
4369
+ if (inputProps) opts.inputProps = inputProps;
4106
4370
  await engine.render(json, opts);
4107
4371
  } catch (err) {
4108
4372
  const message = err instanceof Error ? err.message : String(err);
@@ -4117,6 +4381,84 @@ async function main(argv = process.argv.slice(2)) {
4117
4381
  `);
4118
4382
  return EXIT_OK;
4119
4383
  }
4384
+ if (parsed.command === "stills") {
4385
+ const inputPath = getFlagString(parsed.flags, "in");
4386
+ const outDir = getFlagString(parsed.flags, "outDir") ?? getFlagString(parsed.flags, "out");
4387
+ if (!inputPath) {
4388
+ process.stderr.write("Missing required --in <path>\n");
4389
+ return EXIT_USAGE;
4390
+ }
4391
+ if (!outDir) {
4392
+ process.stderr.write("Missing required --outDir <dir>\n");
4393
+ return EXIT_USAGE;
4394
+ }
4395
+ let raw;
4396
+ try {
4397
+ raw = await import_promises2.default.readFile(inputPath, "utf-8");
4398
+ } catch (err) {
4399
+ const message = err instanceof Error ? err.message : String(err);
4400
+ process.stderr.write(`Failed to read ${inputPath}: ${message}
4401
+ `);
4402
+ return EXIT_IO;
4403
+ }
4404
+ let json;
4405
+ try {
4406
+ json = JSON.parse(raw);
4407
+ } catch (err) {
4408
+ const message = err instanceof Error ? err.message : String(err);
4409
+ process.stderr.write(`Invalid JSON: ${message}
4410
+ `);
4411
+ return EXIT_VALIDATE;
4412
+ }
4413
+ const framesRaw = getFlagString(parsed.flags, "frames") ?? "0";
4414
+ const frames = framesRaw.split(/[,\s]+/g).map((v) => v.trim()).filter(Boolean).map((v) => Number(v)).filter((n) => Number.isFinite(n));
4415
+ if (frames.length === 0) {
4416
+ process.stderr.write('Invalid --frames (expected comma-separated frame numbers, e.g. "0,30,60")\n');
4417
+ return EXIT_USAGE;
4418
+ }
4419
+ const imageFormatRaw = (getFlagString(parsed.flags, "imageFormat") ?? "png").toLowerCase();
4420
+ const imageFormat = parseImageFormat(imageFormatRaw);
4421
+ if (!imageFormat) {
4422
+ process.stderr.write(`Invalid --imageFormat: ${imageFormatRaw} (expected png|jpeg|webp)
4423
+ `);
4424
+ return EXIT_USAGE;
4425
+ }
4426
+ const scaleRaw = getFlagString(parsed.flags, "scale");
4427
+ const jpegQualityRaw = getFlagString(parsed.flags, "jpegQuality");
4428
+ const publicDir = getFlagString(parsed.flags, "publicDir");
4429
+ const debugBounds = Boolean(parsed.flags.debugBounds);
4430
+ const debugLabels = Boolean(parsed.flags.debugLabels);
4431
+ const scale = scaleRaw ? Number(scaleRaw) : void 0;
4432
+ const jpegQuality = jpegQualityRaw ? Number(jpegQualityRaw) : void 0;
4433
+ const engine = new WavesEngine(globalRegistry, new IRValidator(globalRegistry));
4434
+ try {
4435
+ const inputProps = debugBounds || debugLabels ? { __wavesDebugBounds: debugBounds, __wavesDebugLabels: debugLabels } : void 0;
4436
+ const opts = {
4437
+ outputDir: outDir,
4438
+ frames,
4439
+ imageFormat,
4440
+ registrationModules
4441
+ };
4442
+ if (publicDir) opts.publicDir = publicDir;
4443
+ if (Number.isFinite(scale ?? Number.NaN)) opts.scale = scale;
4444
+ if (Number.isFinite(jpegQuality ?? Number.NaN)) opts.jpegQuality = jpegQuality;
4445
+ if (inputProps) opts.inputProps = inputProps;
4446
+ const written = await engine.renderStills(json, opts);
4447
+ for (const p of written) {
4448
+ process.stderr.write(`Wrote ${p}
4449
+ `);
4450
+ }
4451
+ } catch (err) {
4452
+ const message = err instanceof Error ? err.message : String(err);
4453
+ const context = err instanceof WavesRenderError ? err.context : void 0;
4454
+ const payload = context ? stringifyJSON({ error: message, context }, pretty) : null;
4455
+ process.stderr.write(`stills failed: ${message}
4456
+ `);
4457
+ if (payload) process.stderr.write(payload);
4458
+ return EXIT_RENDER;
4459
+ }
4460
+ return EXIT_OK;
4461
+ }
4120
4462
  process.stderr.write(`Unknown command: ${parsed.command}
4121
4463
  `);
4122
4464
  process.stderr.write(`Run: waves --help