@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/index.js CHANGED
@@ -174,14 +174,16 @@ var WavesEngine = class {
174
174
  onProgress: () => void 0
175
175
  });
176
176
  const compositionId = validatedIR.video.id ?? "main";
177
+ const inputProps = options.inputProps ?? {};
177
178
  const composition = await (0, import_renderer.selectComposition)({
178
179
  serveUrl: bundleLocation,
179
180
  id: compositionId,
180
- inputProps: {}
181
+ inputProps
181
182
  });
182
183
  await (0, import_renderer.renderMedia)({
183
184
  composition,
184
185
  serveUrl: bundleLocation,
186
+ inputProps,
185
187
  codec: options.codec ?? "h264",
186
188
  outputLocation: options.outputPath,
187
189
  crf: options.crf ?? null,
@@ -194,6 +196,70 @@ var WavesEngine = class {
194
196
  await import_promises.default.rm(tmpDir, { recursive: true, force: true });
195
197
  }
196
198
  }
199
+ async renderStills(ir, options) {
200
+ if (this.registry !== globalRegistry) {
201
+ throw new WavesRenderError("WavesEngine currently requires using globalRegistry", {
202
+ hint: "Use `registerBuiltInComponents()` + `globalRegistry` for both validation and rendering."
203
+ });
204
+ }
205
+ const validationResult = this.validator.validate(ir);
206
+ if (!validationResult.success) {
207
+ throw new WavesRenderError("IR validation failed", { errors: validationResult.errors });
208
+ }
209
+ const validatedIR = validationResult.data;
210
+ const requiredTypes = collectComponentTypes(validatedIR);
211
+ for (const type of requiredTypes) {
212
+ if (!this.registry.has(type)) {
213
+ throw new WavesRenderError("Unknown component type", { type });
214
+ }
215
+ }
216
+ const rootDir = options.rootDir ?? process.cwd();
217
+ const tmpDir = await import_promises.default.mkdtemp(import_node_path.default.join(rootDir, ".waves-tmp-"));
218
+ const entryPoint = import_node_path.default.join(tmpDir, "entry.tsx");
219
+ try {
220
+ await import_promises.default.writeFile(entryPoint, generateEntryPoint(validatedIR, options), "utf-8");
221
+ await import_promises.default.mkdir(options.outputDir, { recursive: true });
222
+ const bundleLocation = await (0, import_bundler.bundle)({
223
+ entryPoint,
224
+ rootDir,
225
+ publicDir: options.publicDir ?? null,
226
+ onProgress: () => void 0
227
+ });
228
+ const compositionId = validatedIR.video.id ?? "main";
229
+ const inputProps = options.inputProps ?? {};
230
+ const composition = await (0, import_renderer.selectComposition)({
231
+ serveUrl: bundleLocation,
232
+ id: compositionId,
233
+ inputProps
234
+ });
235
+ const frames = Array.from(new Set(options.frames)).sort((a, b) => a - b);
236
+ const written = [];
237
+ for (const frame of frames) {
238
+ const clamped = Math.max(0, Math.min(composition.durationInFrames - 1, Math.floor(frame)));
239
+ const imageFormat = options.imageFormat ?? "png";
240
+ const filename = `${compositionId}-frame-${String(clamped).padStart(6, "0")}.${imageFormat}`;
241
+ const outPath = import_node_path.default.join(options.outputDir, filename);
242
+ const stillOptions = {
243
+ composition,
244
+ serveUrl: bundleLocation,
245
+ inputProps,
246
+ frame: clamped,
247
+ output: outPath,
248
+ imageFormat,
249
+ scale: options.scale ?? 1,
250
+ overwrite: true,
251
+ ...imageFormat === "jpeg" ? { jpegQuality: options.jpegQuality ?? 80 } : {}
252
+ };
253
+ await (0, import_renderer.renderStill)(stillOptions);
254
+ written.push(outPath);
255
+ }
256
+ return written;
257
+ } catch (error) {
258
+ throw new WavesRenderError("Rendering failed", { originalError: error });
259
+ } finally {
260
+ await import_promises.default.rm(tmpDir, { recursive: true, force: true });
261
+ }
262
+ }
197
263
  };
198
264
  function collectComponentTypes(ir) {
199
265
  const types = /* @__PURE__ */ new Set();
@@ -228,8 +294,10 @@ registerBuiltInComponents();
228
294
  const ir = ${JSON.stringify(ir, null, 2)};
229
295
  const compositionId = ${JSON.stringify(compositionId)};
230
296
 
231
- const Root = () => {
232
- return <WavesComposition ir={ir} registry={globalRegistry} />;
297
+ const Root = (props) => {
298
+ const debugBounds = Boolean(props?.__wavesDebugBounds);
299
+ const debugLabels = Boolean(props?.__wavesDebugLabels);
300
+ return <WavesComposition ir={ir} registry={globalRegistry} debug={{ bounds: debugBounds, labels: debugLabels }} />;
233
301
  };
234
302
 
235
303
  export const RemotionRoot = () => {
@@ -653,19 +721,77 @@ var AudioComponentMetadata = {
653
721
  };
654
722
 
655
723
  // src/components/primitives/Box.tsx
724
+ var import_react = __toESM(require("react"));
656
725
  var import_zod4 = require("zod");
726
+
727
+ // src/remotion/Fill.tsx
657
728
  var import_jsx_runtime2 = require("react/jsx-runtime");
729
+ var Fill = ({ style, children }) => {
730
+ return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
731
+ "div",
732
+ {
733
+ style: {
734
+ width: "100%",
735
+ height: "100%",
736
+ position: "relative",
737
+ boxSizing: "border-box",
738
+ ...style ?? {}
739
+ },
740
+ children
741
+ }
742
+ );
743
+ };
744
+
745
+ // src/components/primitives/Box.tsx
746
+ var import_jsx_runtime3 = require("react/jsx-runtime");
658
747
  var BoxPropsSchema = import_zod4.z.object({
659
- x: import_zod4.z.number().default(0).describe("Left offset in pixels"),
660
- y: import_zod4.z.number().default(0).describe("Top offset in pixels"),
661
- width: import_zod4.z.number().positive().optional().describe("Width in pixels (omit for auto)"),
662
- height: import_zod4.z.number().positive().optional().describe("Height in pixels (omit for auto)"),
748
+ width: import_zod4.z.number().positive().optional().describe("Width in pixels (optional)"),
749
+ height: import_zod4.z.number().positive().optional().describe("Height in pixels (optional)"),
663
750
  padding: import_zod4.z.number().min(0).default(0).describe("Padding in pixels"),
664
- backgroundColor: import_zod4.z.string().optional().describe("CSS color (e.g. #RRGGBB)"),
751
+ backgroundColor: import_zod4.z.string().optional().describe("CSS color (e.g. #RRGGBB, rgba())"),
665
752
  borderRadius: import_zod4.z.number().min(0).default(0).describe("Border radius in pixels"),
666
753
  opacity: import_zod4.z.number().min(0).max(1).default(1).describe("Opacity 0..1")
667
754
  });
668
- var Box = ({
755
+ var Box = ({ width, height, padding, backgroundColor, borderRadius, opacity, children }) => {
756
+ const layers = import_react.default.Children.toArray(children);
757
+ return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
758
+ Fill,
759
+ {
760
+ style: {
761
+ width,
762
+ height,
763
+ padding,
764
+ backgroundColor,
765
+ borderRadius,
766
+ opacity
767
+ },
768
+ children: layers.map((child, i) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)("div", { style: { position: "absolute", inset: 0 }, children: child }, i))
769
+ }
770
+ );
771
+ };
772
+ var BoxComponentMetadata = {
773
+ kind: "primitive",
774
+ category: "layout",
775
+ acceptsChildren: true,
776
+ description: "Flow container for layout and backgrounds (layout-safe)",
777
+ llmGuidance: "Use Box as a container inside Grid/Stack. Box participates in layout flow. For x/y positioning, use Frame."
778
+ };
779
+
780
+ // src/components/primitives/Frame.tsx
781
+ var import_react2 = __toESM(require("react"));
782
+ var import_zod5 = require("zod");
783
+ var import_jsx_runtime4 = require("react/jsx-runtime");
784
+ var FramePropsSchema = import_zod5.z.object({
785
+ x: import_zod5.z.number().default(0).describe("Left offset in pixels"),
786
+ y: import_zod5.z.number().default(0).describe("Top offset in pixels"),
787
+ width: import_zod5.z.number().positive().optional().describe("Width in pixels (optional)"),
788
+ height: import_zod5.z.number().positive().optional().describe("Height in pixels (optional)"),
789
+ padding: import_zod5.z.number().min(0).default(0).describe("Padding in pixels"),
790
+ backgroundColor: import_zod5.z.string().optional().describe("CSS color (e.g. #RRGGBB, rgba())"),
791
+ borderRadius: import_zod5.z.number().min(0).default(0).describe("Border radius in pixels"),
792
+ opacity: import_zod5.z.number().min(0).max(1).default(1).describe("Opacity 0..1")
793
+ });
794
+ var Frame = ({
669
795
  x,
670
796
  y,
671
797
  width,
@@ -676,7 +802,8 @@ var Box = ({
676
802
  opacity,
677
803
  children
678
804
  }) => {
679
- return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
805
+ const layers = import_react2.default.Children.toArray(children);
806
+ return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
680
807
  "div",
681
808
  {
682
809
  style: {
@@ -691,29 +818,28 @@ var Box = ({
691
818
  opacity,
692
819
  boxSizing: "border-box"
693
820
  },
694
- children
821
+ 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)) })
695
822
  }
696
823
  );
697
824
  };
698
- var BoxComponentMetadata = {
825
+ var FrameComponentMetadata = {
699
826
  kind: "primitive",
700
827
  category: "layout",
701
828
  acceptsChildren: true,
702
- description: "Positioned container box for layout and backgrounds",
703
- llmGuidance: "Use Box to position content by x/y and optionally constrain width/height. Prefer Box+Stack/Grid for layouts."
829
+ description: "Absolute-positioned container (x/y placement)",
830
+ llmGuidance: "Use Frame for precise pixel placement (x/y). Use Box for normal layout flow inside Grid/Stack."
704
831
  };
705
832
 
706
833
  // src/components/primitives/Grid.tsx
707
- var import_remotion2 = require("remotion");
708
- var import_zod5 = require("zod");
709
- var import_jsx_runtime3 = require("react/jsx-runtime");
710
- var GridPropsSchema = import_zod5.z.object({
711
- columns: import_zod5.z.number().int().min(1).max(12).default(2),
712
- rows: import_zod5.z.number().int().min(1).max(12).default(1),
713
- gap: import_zod5.z.number().min(0).default(24),
714
- padding: import_zod5.z.number().min(0).default(0),
715
- align: import_zod5.z.enum(["start", "center", "end", "stretch"]).default("stretch"),
716
- justify: import_zod5.z.enum(["start", "center", "end", "stretch"]).default("stretch")
834
+ var import_zod6 = require("zod");
835
+ var import_jsx_runtime5 = require("react/jsx-runtime");
836
+ var GridPropsSchema = import_zod6.z.object({
837
+ columns: import_zod6.z.number().int().min(1).max(12).default(2),
838
+ rows: import_zod6.z.number().int().min(1).max(12).default(1),
839
+ gap: import_zod6.z.number().min(0).default(24),
840
+ padding: import_zod6.z.number().min(0).default(0),
841
+ align: import_zod6.z.enum(["start", "center", "end", "stretch"]).default("stretch"),
842
+ justify: import_zod6.z.enum(["start", "center", "end", "stretch"]).default("stretch")
717
843
  });
718
844
  var mapAlign = (a) => {
719
845
  if (a === "start") return "start";
@@ -728,8 +854,8 @@ var mapJustify = (j) => {
728
854
  return "stretch";
729
855
  };
730
856
  var Grid = ({ columns, rows, gap, padding, align, justify, children }) => {
731
- return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
732
- import_remotion2.AbsoluteFill,
857
+ return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
858
+ Fill,
733
859
  {
734
860
  style: {
735
861
  display: "grid",
@@ -754,19 +880,19 @@ var GridComponentMetadata = {
754
880
  };
755
881
 
756
882
  // src/components/primitives/Image.tsx
757
- var import_remotion3 = require("remotion");
758
- var import_zod6 = require("zod");
759
- var import_jsx_runtime4 = require("react/jsx-runtime");
760
- var ImagePropsSchema = import_zod6.z.object({
761
- src: import_zod6.z.string().min(1),
762
- fit: import_zod6.z.enum(["cover", "contain"]).default("cover"),
763
- borderRadius: import_zod6.z.number().min(0).default(0),
764
- opacity: import_zod6.z.number().min(0).max(1).default(1)
883
+ var import_remotion2 = require("remotion");
884
+ var import_zod7 = require("zod");
885
+ var import_jsx_runtime6 = require("react/jsx-runtime");
886
+ var ImagePropsSchema = import_zod7.z.object({
887
+ src: import_zod7.z.string().min(1),
888
+ fit: import_zod7.z.enum(["cover", "contain"]).default("cover"),
889
+ borderRadius: import_zod7.z.number().min(0).default(0),
890
+ opacity: import_zod7.z.number().min(0).max(1).default(1)
765
891
  });
766
- var resolveAsset = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion3.staticFile)(staticFileInputFromAssetPath(value));
892
+ var resolveAsset = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion2.staticFile)(staticFileInputFromAssetPath(value));
767
893
  var Image = ({ src, fit, borderRadius, opacity }) => {
768
- return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(import_remotion3.AbsoluteFill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
769
- import_remotion3.Img,
894
+ return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Fill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
895
+ import_remotion2.Img,
770
896
  {
771
897
  src: resolveAsset(src),
772
898
  style: { width: "100%", height: "100%", objectFit: fit, borderRadius }
@@ -780,32 +906,91 @@ var ImageComponentMetadata = {
780
906
  llmGuidance: 'Use Image for pictures and backgrounds. Use fit="cover" for full-bleed, fit="contain" to avoid cropping.'
781
907
  };
782
908
 
909
+ // src/components/primitives/Layer.tsx
910
+ var import_react3 = __toESM(require("react"));
911
+ var import_zod8 = require("zod");
912
+ var import_jsx_runtime7 = require("react/jsx-runtime");
913
+ var LayerPropsSchema = import_zod8.z.object({
914
+ zIndex: import_zod8.z.number().int().default(0).describe("Higher zIndex renders on top"),
915
+ inset: import_zod8.z.number().min(0).default(0).describe("Inset from all sides in pixels"),
916
+ opacity: import_zod8.z.number().min(0).max(1).default(1),
917
+ pointerEvents: import_zod8.z.enum(["none", "auto"]).default("none")
918
+ });
919
+ var Layer = ({ zIndex, inset, opacity, pointerEvents, children }) => {
920
+ const layers = import_react3.default.Children.toArray(children);
921
+ return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
922
+ "div",
923
+ {
924
+ style: {
925
+ position: "absolute",
926
+ left: inset,
927
+ right: inset,
928
+ top: inset,
929
+ bottom: inset,
930
+ zIndex,
931
+ opacity,
932
+ pointerEvents,
933
+ boxSizing: "border-box"
934
+ },
935
+ 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)) })
936
+ }
937
+ );
938
+ };
939
+ var LayerComponentMetadata = {
940
+ kind: "primitive",
941
+ category: "layout",
942
+ acceptsChildren: true,
943
+ minChildren: 1,
944
+ description: "One overlay layer with explicit zIndex inside Layers",
945
+ llmGuidance: "Use Layer inside Layers to control stacking. Put exactly one child in a Layer (recommended)."
946
+ };
947
+
948
+ // src/components/primitives/Layers.tsx
949
+ var import_zod9 = require("zod");
950
+ var import_jsx_runtime8 = require("react/jsx-runtime");
951
+ var LayersPropsSchema = import_zod9.z.object({
952
+ overflow: import_zod9.z.enum(["visible", "hidden"]).default("visible").describe("Clip layers to bounds")
953
+ });
954
+ var Layers = ({ overflow, children }) => {
955
+ return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(Fill, { style: { overflow }, children });
956
+ };
957
+ var LayersComponentMetadata = {
958
+ kind: "primitive",
959
+ category: "layout",
960
+ acceptsChildren: true,
961
+ minChildren: 1,
962
+ description: "Overlay container for stacking children (use Layer for zIndex)",
963
+ llmGuidance: "Use Layers to stack background/content/overlays. Prefer Layer children with explicit zIndex."
964
+ };
965
+
783
966
  // src/components/primitives/Scene.tsx
784
- var import_remotion4 = require("remotion");
785
- var import_zod7 = require("zod");
786
- var import_jsx_runtime5 = require("react/jsx-runtime");
787
- var ScenePropsSchema = import_zod7.z.object({
967
+ var import_react4 = __toESM(require("react"));
968
+ var import_remotion3 = require("remotion");
969
+ var import_zod10 = require("zod");
970
+ var import_jsx_runtime9 = require("react/jsx-runtime");
971
+ var ScenePropsSchema = import_zod10.z.object({
788
972
  background: BackgroundSpecSchema
789
973
  });
790
974
  var resolveAsset2 = (value) => {
791
- return isRemoteAssetPath(value) ? value : (0, import_remotion4.staticFile)(staticFileInputFromAssetPath(value));
975
+ return isRemoteAssetPath(value) ? value : (0, import_remotion3.staticFile)(staticFileInputFromAssetPath(value));
792
976
  };
793
977
  var Scene = ({ background, children }) => {
794
- return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(import_remotion4.AbsoluteFill, { children: [
795
- 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)(
796
- import_remotion4.Img,
978
+ const layers = import_react4.default.Children.toArray(children);
979
+ return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_remotion3.AbsoluteFill, { children: [
980
+ 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)(
981
+ import_remotion3.Img,
797
982
  {
798
983
  src: resolveAsset2(background.value),
799
984
  style: { width: "100%", height: "100%", objectFit: "cover" }
800
985
  }
801
- ) : /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
802
- import_remotion4.Video,
986
+ ) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
987
+ import_remotion3.Video,
803
988
  {
804
989
  src: resolveAsset2(background.value),
805
990
  style: { width: "100%", height: "100%", objectFit: "cover" }
806
991
  }
807
992
  ),
808
- /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_remotion4.AbsoluteFill, { children })
993
+ /* @__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)) })
809
994
  ] });
810
995
  };
811
996
  var SceneComponentMetadata = {
@@ -817,37 +1002,37 @@ var SceneComponentMetadata = {
817
1002
  };
818
1003
 
819
1004
  // src/components/primitives/Segment.tsx
820
- var import_remotion5 = require("remotion");
821
- var import_zod8 = require("zod");
822
- var import_jsx_runtime6 = require("react/jsx-runtime");
823
- var TransitionPropsSchema = import_zod8.z.object({
824
- type: import_zod8.z.string().min(1),
825
- durationInFrames: import_zod8.z.number().int().positive(),
826
- props: import_zod8.z.record(import_zod8.z.string(), import_zod8.z.unknown()).optional()
1005
+ var import_remotion4 = require("remotion");
1006
+ var import_zod11 = require("zod");
1007
+ var import_jsx_runtime10 = require("react/jsx-runtime");
1008
+ var TransitionPropsSchema = import_zod11.z.object({
1009
+ type: import_zod11.z.string().min(1),
1010
+ durationInFrames: import_zod11.z.number().int().positive(),
1011
+ props: import_zod11.z.record(import_zod11.z.string(), import_zod11.z.unknown()).optional()
827
1012
  });
828
- var SegmentPropsSchema = import_zod8.z.object({
1013
+ var SegmentPropsSchema = import_zod11.z.object({
829
1014
  enterTransition: TransitionPropsSchema.optional(),
830
1015
  exitTransition: TransitionPropsSchema.optional()
831
1016
  });
832
1017
  function getSlideOptions(raw) {
833
- const parsed = import_zod8.z.object({
834
- direction: import_zod8.z.enum(["left", "right", "up", "down"]).default("left"),
835
- distance: import_zod8.z.number().int().min(1).max(2e3).default(80)
1018
+ const parsed = import_zod11.z.object({
1019
+ direction: import_zod11.z.enum(["left", "right", "up", "down"]).default("left"),
1020
+ distance: import_zod11.z.number().int().min(1).max(2e3).default(80)
836
1021
  }).safeParse(raw ?? {});
837
1022
  if (parsed.success) return parsed.data;
838
1023
  return { direction: "left", distance: 80 };
839
1024
  }
840
1025
  function getZoomOptions(raw) {
841
- const parsed = import_zod8.z.object({
842
- type: import_zod8.z.enum(["zoomIn", "zoomOut"]).default("zoomIn")
1026
+ const parsed = import_zod11.z.object({
1027
+ type: import_zod11.z.enum(["zoomIn", "zoomOut"]).default("zoomIn")
843
1028
  }).safeParse(raw ?? {});
844
1029
  if (parsed.success) return parsed.data;
845
1030
  return { type: "zoomIn" };
846
1031
  }
847
1032
  function getWipeOptions(raw) {
848
- const parsed = import_zod8.z.object({
849
- direction: import_zod8.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
850
- softEdge: import_zod8.z.boolean().default(false)
1033
+ const parsed = import_zod11.z.object({
1034
+ direction: import_zod11.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
1035
+ softEdge: import_zod11.z.boolean().default(false)
851
1036
  }).safeParse(raw ?? {});
852
1037
  if (parsed.success) return parsed.data;
853
1038
  return { direction: "right", softEdge: false };
@@ -860,18 +1045,18 @@ function clipFor(direction, p) {
860
1045
  return `polygon(0 0, ${100 * p}% 0, 0 ${100 * p}%)`;
861
1046
  }
862
1047
  function getCircularOptions(raw) {
863
- const parsed = import_zod8.z.object({
864
- direction: import_zod8.z.enum(["open", "close"]).default("open"),
865
- center: import_zod8.z.object({
866
- x: import_zod8.z.number().min(0).max(1).default(0.5),
867
- y: import_zod8.z.number().min(0).max(1).default(0.5)
1048
+ const parsed = import_zod11.z.object({
1049
+ direction: import_zod11.z.enum(["open", "close"]).default("open"),
1050
+ center: import_zod11.z.object({
1051
+ x: import_zod11.z.number().min(0).max(1).default(0.5),
1052
+ y: import_zod11.z.number().min(0).max(1).default(0.5)
868
1053
  }).default({ x: 0.5, y: 0.5 })
869
1054
  }).safeParse(raw ?? {});
870
1055
  if (parsed.success) return parsed.data;
871
1056
  return { direction: "open", center: { x: 0.5, y: 0.5 } };
872
1057
  }
873
1058
  var Segment = ({ enterTransition, exitTransition, children, __wavesDurationInFrames }) => {
874
- const frame = (0, import_remotion5.useCurrentFrame)();
1059
+ const frame = (0, import_remotion4.useCurrentFrame)();
875
1060
  const durationInFrames = __wavesDurationInFrames ?? 0;
876
1061
  let opacity = 1;
877
1062
  let translateX = 0;
@@ -882,35 +1067,35 @@ var Segment = ({ enterTransition, exitTransition, children, __wavesDurationInFra
882
1067
  if (enterTransition) {
883
1068
  const d = enterTransition.durationInFrames;
884
1069
  if (enterTransition.type === "FadeTransition") {
885
- opacity *= (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1070
+ opacity *= (0, import_remotion4.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
886
1071
  }
887
1072
  if (enterTransition.type === "SlideTransition") {
888
1073
  const opts = getSlideOptions(enterTransition.props);
889
- const t = (0, import_remotion5.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1074
+ const t = (0, import_remotion4.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
890
1075
  const delta = opts.distance * t;
891
1076
  if (opts.direction === "left") translateX += -delta;
892
1077
  if (opts.direction === "right") translateX += delta;
893
1078
  if (opts.direction === "up") translateY += -delta;
894
1079
  if (opts.direction === "down") translateY += delta;
895
- opacity *= (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1080
+ opacity *= (0, import_remotion4.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
896
1081
  }
897
1082
  if (enterTransition.type === "ZoomTransition") {
898
1083
  const opts = getZoomOptions(enterTransition.props);
899
1084
  const fromScale = opts.type === "zoomIn" ? 1.2 : 0.85;
900
- const t = (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1085
+ const t = (0, import_remotion4.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
901
1086
  scale *= fromScale + (1 - fromScale) * t;
902
1087
  opacity *= t;
903
1088
  }
904
1089
  if (enterTransition.type === "WipeTransition") {
905
1090
  const opts = getWipeOptions(enterTransition.props);
906
- const t = (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1091
+ const t = (0, import_remotion4.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
907
1092
  clipPath = clipFor(opts.direction, t);
908
1093
  filter = opts.softEdge ? "blur(0.4px)" : void 0;
909
1094
  }
910
1095
  if (enterTransition.type === "CircularReveal") {
911
1096
  const opts = getCircularOptions(enterTransition.props);
912
1097
  const open = opts.direction === "open";
913
- const t = (0, import_remotion5.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1098
+ const t = (0, import_remotion4.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
914
1099
  const radiusPct = open ? 150 * t : 150 * (1 - t);
915
1100
  clipPath = `circle(${radiusPct}% at ${Math.round(opts.center.x * 100)}% ${Math.round(opts.center.y * 100)}%)`;
916
1101
  }
@@ -919,41 +1104,41 @@ var Segment = ({ enterTransition, exitTransition, children, __wavesDurationInFra
919
1104
  const d = exitTransition.durationInFrames;
920
1105
  const start = Math.max(0, durationInFrames - d);
921
1106
  if (exitTransition.type === "FadeTransition") {
922
- opacity *= (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1107
+ opacity *= (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
923
1108
  }
924
1109
  if (exitTransition.type === "SlideTransition") {
925
1110
  const opts = getSlideOptions(exitTransition.props);
926
- const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1111
+ const t = (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
927
1112
  const delta = opts.distance * t;
928
1113
  if (opts.direction === "left") translateX += delta;
929
1114
  if (opts.direction === "right") translateX += -delta;
930
1115
  if (opts.direction === "up") translateY += delta;
931
1116
  if (opts.direction === "down") translateY += -delta;
932
- opacity *= (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1117
+ opacity *= (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
933
1118
  }
934
1119
  if (exitTransition.type === "ZoomTransition") {
935
1120
  const opts = getZoomOptions(exitTransition.props);
936
1121
  const toScale = opts.type === "zoomIn" ? 1.25 : 0.75;
937
- const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1122
+ const t = (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
938
1123
  scale *= 1 + (toScale - 1) * t;
939
1124
  opacity *= 1 - t;
940
1125
  }
941
1126
  if (exitTransition.type === "WipeTransition") {
942
1127
  const opts = getWipeOptions(exitTransition.props);
943
- const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1128
+ const t = (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
944
1129
  clipPath = clipFor(opts.direction, t);
945
1130
  filter = opts.softEdge ? "blur(0.4px)" : void 0;
946
1131
  }
947
1132
  if (exitTransition.type === "CircularReveal") {
948
1133
  const opts = getCircularOptions(exitTransition.props);
949
1134
  const open = opts.direction === "open";
950
- const t = (0, import_remotion5.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1135
+ const t = (0, import_remotion4.interpolate)(frame, [start, durationInFrames], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
951
1136
  const radiusPct = open ? 150 * (1 - t) : 150 * t;
952
1137
  clipPath = `circle(${radiusPct}% at ${Math.round(opts.center.x * 100)}% ${Math.round(opts.center.y * 100)}%)`;
953
1138
  }
954
1139
  }
955
1140
  const transform = `translate(${translateX}px, ${translateY}px) scale(${scale})`;
956
- return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_remotion5.AbsoluteFill, { style: { opacity, transform, clipPath, filter }, children });
1141
+ return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_remotion4.AbsoluteFill, { style: { opacity, transform, clipPath, filter }, children });
957
1142
  };
958
1143
  var SegmentComponentMetadata = {
959
1144
  kind: "primitive",
@@ -966,18 +1151,18 @@ var SegmentComponentMetadata = {
966
1151
  };
967
1152
 
968
1153
  // src/components/primitives/Shape.tsx
969
- var import_zod9 = require("zod");
970
- var import_jsx_runtime7 = require("react/jsx-runtime");
971
- var ShapePropsSchema = import_zod9.z.object({
972
- shape: import_zod9.z.enum(["rect", "circle"]).default("rect"),
973
- x: import_zod9.z.number().default(0),
974
- y: import_zod9.z.number().default(0),
975
- width: import_zod9.z.number().positive().default(100),
976
- height: import_zod9.z.number().positive().default(100),
977
- fill: import_zod9.z.string().default("#FFFFFF"),
978
- strokeColor: import_zod9.z.string().optional(),
979
- strokeWidth: import_zod9.z.number().min(0).default(0),
980
- opacity: import_zod9.z.number().min(0).max(1).default(1)
1154
+ var import_zod12 = require("zod");
1155
+ var import_jsx_runtime11 = require("react/jsx-runtime");
1156
+ var ShapePropsSchema = import_zod12.z.object({
1157
+ shape: import_zod12.z.enum(["rect", "circle"]).default("rect"),
1158
+ x: import_zod12.z.number().default(0),
1159
+ y: import_zod12.z.number().default(0),
1160
+ width: import_zod12.z.number().positive().default(100),
1161
+ height: import_zod12.z.number().positive().default(100),
1162
+ fill: import_zod12.z.string().default("#FFFFFF"),
1163
+ strokeColor: import_zod12.z.string().optional(),
1164
+ strokeWidth: import_zod12.z.number().min(0).default(0),
1165
+ opacity: import_zod12.z.number().min(0).max(1).default(1)
981
1166
  });
982
1167
  var Shape = ({
983
1168
  shape,
@@ -990,7 +1175,7 @@ var Shape = ({
990
1175
  strokeWidth,
991
1176
  opacity
992
1177
  }) => {
993
- return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
1178
+ return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
994
1179
  "div",
995
1180
  {
996
1181
  style: {
@@ -1015,15 +1200,14 @@ var ShapeComponentMetadata = {
1015
1200
  };
1016
1201
 
1017
1202
  // src/components/primitives/Stack.tsx
1018
- var import_remotion6 = require("remotion");
1019
- var import_zod10 = require("zod");
1020
- var import_jsx_runtime8 = require("react/jsx-runtime");
1021
- var StackPropsSchema = import_zod10.z.object({
1022
- direction: import_zod10.z.enum(["row", "column"]).default("column"),
1023
- gap: import_zod10.z.number().min(0).default(24),
1024
- padding: import_zod10.z.number().min(0).default(0),
1025
- align: import_zod10.z.enum(["start", "center", "end", "stretch"]).default("center"),
1026
- justify: import_zod10.z.enum(["start", "center", "end", "between"]).default("center")
1203
+ var import_zod13 = require("zod");
1204
+ var import_jsx_runtime12 = require("react/jsx-runtime");
1205
+ var StackPropsSchema = import_zod13.z.object({
1206
+ direction: import_zod13.z.enum(["row", "column"]).default("column"),
1207
+ gap: import_zod13.z.number().min(0).default(24),
1208
+ padding: import_zod13.z.number().min(0).default(0),
1209
+ align: import_zod13.z.enum(["start", "center", "end", "stretch"]).default("center"),
1210
+ justify: import_zod13.z.enum(["start", "center", "end", "between"]).default("center")
1027
1211
  });
1028
1212
  var mapAlign2 = (a) => {
1029
1213
  if (a === "start") return "flex-start";
@@ -1038,8 +1222,8 @@ var mapJustify2 = (j) => {
1038
1222
  return "center";
1039
1223
  };
1040
1224
  var Stack = ({ direction, gap, padding, align, justify, children }) => {
1041
- return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
1042
- import_remotion6.AbsoluteFill,
1225
+ return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1226
+ Fill,
1043
1227
  {
1044
1228
  style: {
1045
1229
  display: "flex",
@@ -1063,17 +1247,22 @@ var StackComponentMetadata = {
1063
1247
  };
1064
1248
 
1065
1249
  // src/components/primitives/Text.tsx
1066
- var import_remotion7 = require("remotion");
1067
- var import_zod11 = require("zod");
1068
- var import_jsx_runtime9 = require("react/jsx-runtime");
1069
- var TextPropsSchema = import_zod11.z.object({
1070
- content: import_zod11.z.string(),
1071
- fontSize: import_zod11.z.number().default(48),
1072
- color: import_zod11.z.string().default("#FFFFFF"),
1073
- position: import_zod11.z.enum(["top", "center", "bottom", "left", "right"]).default("center"),
1074
- animation: import_zod11.z.enum(["none", "fade", "slide", "zoom"]).default("fade")
1250
+ var import_remotion5 = require("remotion");
1251
+ var import_zod14 = require("zod");
1252
+ var import_jsx_runtime13 = require("react/jsx-runtime");
1253
+ var TextPropsSchema = import_zod14.z.object({
1254
+ content: import_zod14.z.string(),
1255
+ fontSize: import_zod14.z.number().default(48),
1256
+ color: import_zod14.z.string().default("#FFFFFF"),
1257
+ fontFamily: import_zod14.z.string().default("Inter"),
1258
+ position: import_zod14.z.enum(["top", "center", "bottom", "left", "right"]).default("center"),
1259
+ animation: import_zod14.z.enum(["none", "fade", "slide", "zoom"]).default("fade"),
1260
+ maxWidthPct: import_zod14.z.number().min(0.1).max(1).default(0.9),
1261
+ safeInsetPct: import_zod14.z.number().min(0).max(0.25).default(0.06),
1262
+ textAlign: import_zod14.z.enum(["left", "center", "right"]).default("center")
1075
1263
  });
1076
- var getPositionStyles = (position) => {
1264
+ var getPositionStyles = (position, safeInsetPct) => {
1265
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
1077
1266
  const base = {
1078
1267
  display: "flex",
1079
1268
  justifyContent: "center",
@@ -1081,13 +1270,13 @@ var getPositionStyles = (position) => {
1081
1270
  };
1082
1271
  switch (position) {
1083
1272
  case "top":
1084
- return { ...base, alignItems: "flex-start", paddingTop: 60 };
1273
+ return { ...base, alignItems: "flex-start", paddingTop: inset };
1085
1274
  case "bottom":
1086
- return { ...base, alignItems: "flex-end", paddingBottom: 60 };
1275
+ return { ...base, alignItems: "flex-end", paddingBottom: inset };
1087
1276
  case "left":
1088
- return { ...base, justifyContent: "flex-start", paddingLeft: 60 };
1277
+ return { ...base, justifyContent: "flex-start", paddingLeft: inset };
1089
1278
  case "right":
1090
- return { ...base, justifyContent: "flex-end", paddingRight: 60 };
1279
+ return { ...base, justifyContent: "flex-end", paddingRight: inset };
1091
1280
  default:
1092
1281
  return base;
1093
1282
  }
@@ -1096,29 +1285,29 @@ var getAnimationStyle = (frame, animation) => {
1096
1285
  const animDuration = 30;
1097
1286
  switch (animation) {
1098
1287
  case "fade": {
1099
- const opacity = (0, import_remotion7.interpolate)(frame, [0, animDuration], [0, 1], {
1288
+ const opacity = (0, import_remotion5.interpolate)(frame, [0, animDuration], [0, 1], {
1100
1289
  extrapolateLeft: "clamp",
1101
1290
  extrapolateRight: "clamp"
1102
1291
  });
1103
1292
  return { opacity };
1104
1293
  }
1105
1294
  case "slide": {
1106
- const translateY = (0, import_remotion7.interpolate)(frame, [0, animDuration], [50, 0], {
1295
+ const translateY = (0, import_remotion5.interpolate)(frame, [0, animDuration], [50, 0], {
1107
1296
  extrapolateLeft: "clamp",
1108
1297
  extrapolateRight: "clamp"
1109
1298
  });
1110
- const opacity = (0, import_remotion7.interpolate)(frame, [0, animDuration], [0, 1], {
1299
+ const opacity = (0, import_remotion5.interpolate)(frame, [0, animDuration], [0, 1], {
1111
1300
  extrapolateLeft: "clamp",
1112
1301
  extrapolateRight: "clamp"
1113
1302
  });
1114
1303
  return { transform: `translateY(${translateY}px)`, opacity };
1115
1304
  }
1116
1305
  case "zoom": {
1117
- const scale = (0, import_remotion7.interpolate)(frame, [0, animDuration], [0.8, 1], {
1306
+ const scale = (0, import_remotion5.interpolate)(frame, [0, animDuration], [0.8, 1], {
1118
1307
  extrapolateLeft: "clamp",
1119
1308
  extrapolateRight: "clamp"
1120
1309
  });
1121
- const opacity = (0, import_remotion7.interpolate)(frame, [0, animDuration], [0, 1], {
1310
+ const opacity = (0, import_remotion5.interpolate)(frame, [0, animDuration], [0, 1], {
1122
1311
  extrapolateLeft: "clamp",
1123
1312
  extrapolateRight: "clamp"
1124
1313
  });
@@ -1128,18 +1317,32 @@ var getAnimationStyle = (frame, animation) => {
1128
1317
  return {};
1129
1318
  }
1130
1319
  };
1131
- var Text = ({ content, fontSize, color, position, animation }) => {
1132
- const frame = (0, import_remotion7.useCurrentFrame)();
1133
- const positionStyles6 = getPositionStyles(position);
1320
+ var Text = ({
1321
+ content,
1322
+ fontSize,
1323
+ color,
1324
+ fontFamily,
1325
+ position,
1326
+ animation,
1327
+ maxWidthPct,
1328
+ safeInsetPct,
1329
+ textAlign
1330
+ }) => {
1331
+ const frame = (0, import_remotion5.useCurrentFrame)();
1332
+ const positionStyles6 = getPositionStyles(position, safeInsetPct);
1134
1333
  const animationStyles = getAnimationStyle(frame, animation);
1135
- return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_remotion7.AbsoluteFill, { style: positionStyles6, children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
1334
+ return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Fill, { style: positionStyles6, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
1136
1335
  "div",
1137
1336
  {
1138
1337
  style: {
1139
1338
  fontSize,
1140
1339
  color,
1340
+ fontFamily,
1141
1341
  fontWeight: 600,
1142
- textAlign: "center",
1342
+ textAlign,
1343
+ maxWidth: `${Math.round(maxWidthPct * 100)}%`,
1344
+ overflowWrap: "anywhere",
1345
+ wordBreak: "break-word",
1143
1346
  ...animationStyles
1144
1347
  },
1145
1348
  children: content
@@ -1170,20 +1373,20 @@ var TextComponentMetadata = {
1170
1373
  };
1171
1374
 
1172
1375
  // src/components/primitives/Video.tsx
1173
- var import_remotion8 = require("remotion");
1174
- var import_zod12 = require("zod");
1175
- var import_jsx_runtime10 = require("react/jsx-runtime");
1176
- var VideoPropsSchema = import_zod12.z.object({
1177
- src: import_zod12.z.string().min(1),
1178
- fit: import_zod12.z.enum(["cover", "contain"]).default("cover"),
1179
- borderRadius: import_zod12.z.number().min(0).default(0),
1180
- opacity: import_zod12.z.number().min(0).max(1).default(1),
1181
- muted: import_zod12.z.boolean().default(true)
1376
+ var import_remotion6 = require("remotion");
1377
+ var import_zod15 = require("zod");
1378
+ var import_jsx_runtime14 = require("react/jsx-runtime");
1379
+ var VideoPropsSchema = import_zod15.z.object({
1380
+ src: import_zod15.z.string().min(1),
1381
+ fit: import_zod15.z.enum(["cover", "contain"]).default("cover"),
1382
+ borderRadius: import_zod15.z.number().min(0).default(0),
1383
+ opacity: import_zod15.z.number().min(0).max(1).default(1),
1384
+ muted: import_zod15.z.boolean().default(true)
1182
1385
  });
1183
- var resolveAsset3 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion8.staticFile)(staticFileInputFromAssetPath(value));
1386
+ var resolveAsset3 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion6.staticFile)(staticFileInputFromAssetPath(value));
1184
1387
  var Video2 = ({ src, fit, borderRadius, opacity, muted }) => {
1185
- return /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(import_remotion8.AbsoluteFill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
1186
- import_remotion8.Video,
1388
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Fill, { style: { opacity }, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
1389
+ import_remotion6.Video,
1187
1390
  {
1188
1391
  src: resolveAsset3(src),
1189
1392
  muted,
@@ -1199,19 +1402,19 @@ var VideoComponentMetadata = {
1199
1402
  };
1200
1403
 
1201
1404
  // src/components/composites/AnimatedCounter.tsx
1202
- var import_remotion9 = require("remotion");
1203
- var import_zod13 = require("zod");
1204
- var import_jsx_runtime11 = require("react/jsx-runtime");
1205
- var AnimatedCounterPropsSchema = import_zod13.z.object({
1206
- from: import_zod13.z.number().default(0),
1207
- to: import_zod13.z.number().default(100),
1208
- fontSize: import_zod13.z.number().min(8).max(300).default(96),
1209
- color: import_zod13.z.string().default("#FFFFFF"),
1210
- fontFamily: import_zod13.z.string().default("Inter"),
1211
- fontWeight: import_zod13.z.number().int().min(100).max(900).default(700),
1212
- icon: import_zod13.z.string().optional(),
1213
- suffix: import_zod13.z.string().optional(),
1214
- animationType: import_zod13.z.enum(["spring", "linear"]).default("spring")
1405
+ var import_remotion7 = require("remotion");
1406
+ var import_zod16 = require("zod");
1407
+ var import_jsx_runtime15 = require("react/jsx-runtime");
1408
+ var AnimatedCounterPropsSchema = import_zod16.z.object({
1409
+ from: import_zod16.z.number().default(0),
1410
+ to: import_zod16.z.number().default(100),
1411
+ fontSize: import_zod16.z.number().min(8).max(300).default(96),
1412
+ color: import_zod16.z.string().default("#FFFFFF"),
1413
+ fontFamily: import_zod16.z.string().default("Inter"),
1414
+ fontWeight: import_zod16.z.number().int().min(100).max(900).default(700),
1415
+ icon: import_zod16.z.string().optional(),
1416
+ suffix: import_zod16.z.string().optional(),
1417
+ animationType: import_zod16.z.enum(["spring", "linear"]).default("spring")
1215
1418
  });
1216
1419
  var AnimatedCounter = ({
1217
1420
  from,
@@ -1225,16 +1428,16 @@ var AnimatedCounter = ({
1225
1428
  animationType,
1226
1429
  __wavesDurationInFrames
1227
1430
  }) => {
1228
- const frame = (0, import_remotion9.useCurrentFrame)();
1229
- const { fps } = (0, import_remotion9.useVideoConfig)();
1431
+ const frame = (0, import_remotion7.useCurrentFrame)();
1432
+ const { fps } = (0, import_remotion7.useVideoConfig)();
1230
1433
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1231
- 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" });
1434
+ 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" });
1232
1435
  const value = from + (to - from) * Math.max(0, Math.min(1, progress));
1233
1436
  const rounded = Math.round(value);
1234
1437
  const label = `${rounded.toLocaleString()}${suffix ?? ""}`;
1235
- 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: [
1236
- icon ? /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: { fontSize: Math.round(fontSize * 0.5), marginBottom: 18 }, children: icon }) : null,
1237
- /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { style: { fontSize, color, fontFamily, fontWeight, lineHeight: 1 }, children: label })
1438
+ 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: [
1439
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { fontSize: Math.round(fontSize * 0.5), marginBottom: 18 }, children: icon }) : null,
1440
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { style: { fontSize, color, fontFamily, fontWeight, lineHeight: 1 }, children: label })
1238
1441
  ] }) });
1239
1442
  };
1240
1443
  var AnimatedCounterComponentMetadata = {
@@ -1249,27 +1452,27 @@ var AnimatedCounterComponentMetadata = {
1249
1452
  };
1250
1453
 
1251
1454
  // src/components/composites/BarChart.tsx
1252
- var import_remotion10 = require("remotion");
1253
- var import_zod14 = require("zod");
1254
- var import_jsx_runtime12 = require("react/jsx-runtime");
1255
- var BarChartPropsSchema = import_zod14.z.object({
1256
- data: import_zod14.z.array(import_zod14.z.object({
1257
- label: import_zod14.z.string().min(1),
1258
- value: import_zod14.z.number(),
1259
- color: import_zod14.z.string().optional()
1455
+ var import_remotion8 = require("remotion");
1456
+ var import_zod17 = require("zod");
1457
+ var import_jsx_runtime16 = require("react/jsx-runtime");
1458
+ var BarChartPropsSchema = import_zod17.z.object({
1459
+ data: import_zod17.z.array(import_zod17.z.object({
1460
+ label: import_zod17.z.string().min(1),
1461
+ value: import_zod17.z.number(),
1462
+ color: import_zod17.z.string().optional()
1260
1463
  })).min(2).max(8),
1261
- orientation: import_zod14.z.enum(["horizontal", "vertical"]).default("vertical"),
1262
- showValues: import_zod14.z.boolean().default(true),
1263
- showGrid: import_zod14.z.boolean().default(false),
1264
- maxValue: import_zod14.z.number().optional()
1464
+ orientation: import_zod17.z.enum(["horizontal", "vertical"]).default("vertical"),
1465
+ showValues: import_zod17.z.boolean().default(true),
1466
+ showGrid: import_zod17.z.boolean().default(false),
1467
+ maxValue: import_zod17.z.number().optional()
1265
1468
  });
1266
1469
  var BarChart = ({ data, orientation, showValues, showGrid, maxValue }) => {
1267
- const frame = (0, import_remotion10.useCurrentFrame)();
1268
- const { fps } = (0, import_remotion10.useVideoConfig)();
1470
+ const frame = (0, import_remotion8.useCurrentFrame)();
1471
+ const { fps } = (0, import_remotion8.useVideoConfig)();
1269
1472
  const max = maxValue ?? Math.max(...data.map((d) => d.value));
1270
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_remotion10.AbsoluteFill, { style: { padding: 90, boxSizing: "border-box" }, children: [
1271
- 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,
1272
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
1473
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(Fill, { style: { padding: 90, boxSizing: "border-box" }, children: [
1474
+ 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,
1475
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
1273
1476
  "div",
1274
1477
  {
1275
1478
  style: {
@@ -1282,13 +1485,13 @@ var BarChart = ({ data, orientation, showValues, showGrid, maxValue }) => {
1282
1485
  justifyContent: "space-between"
1283
1486
  },
1284
1487
  children: data.map((d, i) => {
1285
- const p = (0, import_remotion10.spring)({ frame: frame - i * 4, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1488
+ const p = (0, import_remotion8.spring)({ frame: frame - i * 4, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1286
1489
  const ratio = max === 0 ? 0 : d.value / max * p;
1287
1490
  const color = d.color ?? "#0A84FF";
1288
- return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", gap: 10 }, children: [
1289
- 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 } }) }) }),
1290
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 700, fontSize: 22, opacity: 0.9 }, children: d.label }),
1291
- showValues ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 26 }, children: Math.round(d.value).toLocaleString() }) : null
1491
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", alignItems: "center", gap: 10 }, children: [
1492
+ 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 } }) }) }),
1493
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 700, fontSize: 22, opacity: 0.9 }, children: d.label }),
1494
+ showValues ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 26 }, children: Math.round(d.value).toLocaleString() }) : null
1292
1495
  ] }, d.label);
1293
1496
  })
1294
1497
  }
@@ -1303,31 +1506,31 @@ var BarChartComponentMetadata = {
1303
1506
  };
1304
1507
 
1305
1508
  // src/components/composites/CardStack.tsx
1306
- var import_remotion11 = require("remotion");
1307
- var import_zod15 = require("zod");
1308
- var import_jsx_runtime13 = require("react/jsx-runtime");
1309
- var CardSchema = import_zod15.z.object({
1310
- title: import_zod15.z.string().min(1),
1311
- content: import_zod15.z.string().min(1),
1312
- backgroundColor: import_zod15.z.string().optional()
1509
+ var import_remotion9 = require("remotion");
1510
+ var import_zod18 = require("zod");
1511
+ var import_jsx_runtime17 = require("react/jsx-runtime");
1512
+ var CardSchema = import_zod18.z.object({
1513
+ title: import_zod18.z.string().min(1),
1514
+ content: import_zod18.z.string().min(1),
1515
+ backgroundColor: import_zod18.z.string().optional()
1313
1516
  });
1314
- var CardStackPropsSchema = import_zod15.z.object({
1315
- cards: import_zod15.z.array(CardSchema).min(2).max(5),
1316
- transition: import_zod15.z.enum(["flip", "slide", "fade"]).default("flip"),
1317
- displayDuration: import_zod15.z.number().int().min(30).max(150).default(90)
1517
+ var CardStackPropsSchema = import_zod18.z.object({
1518
+ cards: import_zod18.z.array(CardSchema).min(2).max(5),
1519
+ transition: import_zod18.z.enum(["flip", "slide", "fade"]).default("flip"),
1520
+ displayDuration: import_zod18.z.number().int().min(30).max(150).default(90)
1318
1521
  });
1319
1522
  var CardStack = ({ cards, transition, displayDuration }) => {
1320
- const frame = (0, import_remotion11.useCurrentFrame)();
1321
- const { fps } = (0, import_remotion11.useVideoConfig)();
1523
+ const frame = (0, import_remotion9.useCurrentFrame)();
1524
+ const { fps } = (0, import_remotion9.useVideoConfig)();
1322
1525
  const index = Math.min(cards.length - 1, Math.floor(frame / displayDuration));
1323
1526
  const local = frame - index * displayDuration;
1324
- const p = (0, import_remotion11.spring)({ frame: local, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1527
+ const p = (0, import_remotion9.spring)({ frame: local, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1325
1528
  const card = cards[index];
1326
1529
  const bg = card.backgroundColor ?? "rgba(255,255,255,0.1)";
1327
1530
  const opacity = transition === "fade" ? p : 1;
1328
- const slideX = transition === "slide" ? (0, import_remotion11.interpolate)(p, [0, 1], [80, 0]) : 0;
1329
- const rotateY = transition === "flip" ? (0, import_remotion11.interpolate)(p, [0, 1], [70, 0]) : 0;
1330
- return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_remotion11.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
1531
+ const slideX = transition === "slide" ? (0, import_remotion9.interpolate)(p, [0, 1], [80, 0]) : 0;
1532
+ const rotateY = transition === "flip" ? (0, import_remotion9.interpolate)(p, [0, 1], [70, 0]) : 0;
1533
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
1331
1534
  "div",
1332
1535
  {
1333
1536
  style: {
@@ -1344,8 +1547,8 @@ var CardStack = ({ cards, transition, displayDuration }) => {
1344
1547
  opacity
1345
1548
  },
1346
1549
  children: [
1347
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { fontSize: 56, fontWeight: 900, marginBottom: 22 }, children: card.title }),
1348
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("div", { style: { fontSize: 30, fontWeight: 700, opacity: 0.9, lineHeight: 1.3 }, children: card.content })
1550
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { fontSize: 56, fontWeight: 900, marginBottom: 22 }, children: card.title }),
1551
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { fontSize: 30, fontWeight: 700, opacity: 0.9, lineHeight: 1.3 }, children: card.content })
1349
1552
  ]
1350
1553
  }
1351
1554
  ) });
@@ -1358,18 +1561,19 @@ var CardStackComponentMetadata = {
1358
1561
  };
1359
1562
 
1360
1563
  // src/components/composites/CircularReveal.tsx
1361
- var import_remotion12 = require("remotion");
1362
- var import_zod16 = require("zod");
1363
- var import_jsx_runtime14 = require("react/jsx-runtime");
1364
- var CenterSchema = import_zod16.z.object({
1365
- x: import_zod16.z.number().min(0).max(1).default(0.5),
1366
- y: import_zod16.z.number().min(0).max(1).default(0.5)
1564
+ var import_react5 = __toESM(require("react"));
1565
+ var import_remotion10 = require("remotion");
1566
+ var import_zod19 = require("zod");
1567
+ var import_jsx_runtime18 = require("react/jsx-runtime");
1568
+ var CenterSchema = import_zod19.z.object({
1569
+ x: import_zod19.z.number().min(0).max(1).default(0.5),
1570
+ y: import_zod19.z.number().min(0).max(1).default(0.5)
1367
1571
  });
1368
- var CircularRevealPropsSchema = import_zod16.z.object({
1369
- durationInFrames: import_zod16.z.number().int().min(10).max(60).default(30),
1370
- direction: import_zod16.z.enum(["open", "close"]).default("open"),
1572
+ var CircularRevealPropsSchema = import_zod19.z.object({
1573
+ durationInFrames: import_zod19.z.number().int().min(10).max(60).default(30),
1574
+ direction: import_zod19.z.enum(["open", "close"]).default("open"),
1371
1575
  center: CenterSchema.optional(),
1372
- phase: import_zod16.z.enum(["in", "out", "inOut"]).default("inOut")
1576
+ phase: import_zod19.z.enum(["in", "out", "inOut"]).default("inOut")
1373
1577
  });
1374
1578
  var CircularReveal = ({
1375
1579
  durationInFrames,
@@ -1379,22 +1583,23 @@ var CircularReveal = ({
1379
1583
  children,
1380
1584
  __wavesDurationInFrames
1381
1585
  }) => {
1382
- const frame = (0, import_remotion12.useCurrentFrame)();
1586
+ const layers = import_react5.default.Children.toArray(children);
1587
+ const frame = (0, import_remotion10.useCurrentFrame)();
1383
1588
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1384
1589
  const d = Math.min(durationInFrames, total);
1385
1590
  const c = center ?? { x: 0.5, y: 0.5 };
1386
1591
  const open = direction === "open";
1387
1592
  let radiusPct = open ? 0 : 150;
1388
1593
  if (phase === "in" || phase === "inOut") {
1389
- const t = (0, import_remotion12.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1594
+ const t = (0, import_remotion10.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1390
1595
  radiusPct = open ? 150 * t : 150 * (1 - t);
1391
1596
  }
1392
1597
  if (phase === "out" || phase === "inOut") {
1393
1598
  const start = Math.max(0, total - d);
1394
- const t = (0, import_remotion12.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1599
+ const t = (0, import_remotion10.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1395
1600
  radiusPct = open ? 150 * (1 - t) : 150 * t;
1396
1601
  }
1397
- 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 });
1602
+ 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)) });
1398
1603
  };
1399
1604
  var CircularRevealComponentMetadata = {
1400
1605
  kind: "composite",
@@ -1406,21 +1611,21 @@ var CircularRevealComponentMetadata = {
1406
1611
  };
1407
1612
 
1408
1613
  // src/components/composites/CountUpText.tsx
1409
- var import_remotion13 = require("remotion");
1410
- var import_zod17 = require("zod");
1411
- var import_jsx_runtime15 = require("react/jsx-runtime");
1412
- var CountUpTextPropsSchema = import_zod17.z.object({
1413
- from: import_zod17.z.number().default(0),
1414
- to: import_zod17.z.number().default(100),
1415
- fontSize: import_zod17.z.number().min(8).max(240).default(72),
1416
- color: import_zod17.z.string().default("#FFFFFF"),
1417
- fontFamily: import_zod17.z.string().default("Inter"),
1418
- fontWeight: import_zod17.z.number().int().min(100).max(900).default(700),
1419
- position: import_zod17.z.enum(["top", "center", "bottom"]).default("center"),
1420
- format: import_zod17.z.enum(["integer", "decimal", "currency", "percentage"]).default("integer"),
1421
- decimals: import_zod17.z.number().int().min(0).max(4).default(0),
1422
- prefix: import_zod17.z.string().optional(),
1423
- suffix: import_zod17.z.string().optional()
1614
+ var import_remotion11 = require("remotion");
1615
+ var import_zod20 = require("zod");
1616
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1617
+ var CountUpTextPropsSchema = import_zod20.z.object({
1618
+ from: import_zod20.z.number().default(0),
1619
+ to: import_zod20.z.number().default(100),
1620
+ fontSize: import_zod20.z.number().min(8).max(240).default(72),
1621
+ color: import_zod20.z.string().default("#FFFFFF"),
1622
+ fontFamily: import_zod20.z.string().default("Inter"),
1623
+ fontWeight: import_zod20.z.number().int().min(100).max(900).default(700),
1624
+ position: import_zod20.z.enum(["top", "center", "bottom"]).default("center"),
1625
+ format: import_zod20.z.enum(["integer", "decimal", "currency", "percentage"]).default("integer"),
1626
+ decimals: import_zod20.z.number().int().min(0).max(4).default(0),
1627
+ prefix: import_zod20.z.string().optional(),
1628
+ suffix: import_zod20.z.string().optional()
1424
1629
  });
1425
1630
  var positionStyles = (position) => {
1426
1631
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -1447,15 +1652,15 @@ var CountUpText = ({
1447
1652
  suffix,
1448
1653
  __wavesDurationInFrames
1449
1654
  }) => {
1450
- const frame = (0, import_remotion13.useCurrentFrame)();
1451
- const { fps } = (0, import_remotion13.useVideoConfig)();
1655
+ const frame = (0, import_remotion11.useCurrentFrame)();
1656
+ const { fps } = (0, import_remotion11.useVideoConfig)();
1452
1657
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1453
- const p = (0, import_remotion13.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
1658
+ const p = (0, import_remotion11.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
1454
1659
  const progress = Math.max(0, Math.min(1, p));
1455
1660
  const value = from + (to - from) * progress;
1456
- const fade = (0, import_remotion13.interpolate)(frame, [0, Math.min(12, total)], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1661
+ const fade = (0, import_remotion11.interpolate)(frame, [0, Math.min(12, total)], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1457
1662
  const label = `${prefix ?? ""}${formatValue(value, format, decimals)}${suffix ?? ""}`;
1458
- 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 }) });
1663
+ 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 }) });
1459
1664
  };
1460
1665
  var CountUpTextComponentMetadata = {
1461
1666
  kind: "composite",
@@ -1465,10 +1670,11 @@ var CountUpTextComponentMetadata = {
1465
1670
  };
1466
1671
 
1467
1672
  // src/components/composites/FadeTransition.tsx
1468
- var import_remotion14 = require("remotion");
1469
- var import_zod18 = require("zod");
1470
- var import_jsx_runtime16 = require("react/jsx-runtime");
1471
- var EasingSchema = import_zod18.z.enum(["linear", "easeIn", "easeOut", "easeInOut"]);
1673
+ var import_react6 = __toESM(require("react"));
1674
+ var import_remotion12 = require("remotion");
1675
+ var import_zod21 = require("zod");
1676
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1677
+ var EasingSchema = import_zod21.z.enum(["linear", "easeIn", "easeOut", "easeInOut"]);
1472
1678
  function ease(t, easing) {
1473
1679
  const x = Math.max(0, Math.min(1, t));
1474
1680
  if (easing === "linear") return x;
@@ -1476,10 +1682,10 @@ function ease(t, easing) {
1476
1682
  if (easing === "easeOut") return 1 - (1 - x) * (1 - x);
1477
1683
  return x < 0.5 ? 2 * x * x : 1 - 2 * (1 - x) * (1 - x);
1478
1684
  }
1479
- var FadeTransitionPropsSchema = import_zod18.z.object({
1480
- durationInFrames: import_zod18.z.number().int().min(10).max(60).default(30),
1685
+ var FadeTransitionPropsSchema = import_zod21.z.object({
1686
+ durationInFrames: import_zod21.z.number().int().min(10).max(60).default(30),
1481
1687
  easing: EasingSchema.default("easeInOut"),
1482
- phase: import_zod18.z.enum(["in", "out", "inOut"]).default("inOut")
1688
+ phase: import_zod21.z.enum(["in", "out", "inOut"]).default("inOut")
1483
1689
  });
1484
1690
  var FadeTransition = ({
1485
1691
  durationInFrames,
@@ -1488,20 +1694,21 @@ var FadeTransition = ({
1488
1694
  children,
1489
1695
  __wavesDurationInFrames
1490
1696
  }) => {
1491
- const frame = (0, import_remotion14.useCurrentFrame)();
1697
+ const layers = import_react6.default.Children.toArray(children);
1698
+ const frame = (0, import_remotion12.useCurrentFrame)();
1492
1699
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1493
1700
  const d = Math.min(durationInFrames, total);
1494
1701
  let opacity = 1;
1495
1702
  if (phase === "in" || phase === "inOut") {
1496
- const t = (0, import_remotion14.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1703
+ const t = (0, import_remotion12.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1497
1704
  opacity *= ease(t, easing);
1498
1705
  }
1499
1706
  if (phase === "out" || phase === "inOut") {
1500
1707
  const start = Math.max(0, total - d);
1501
- const t = (0, import_remotion14.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1708
+ const t = (0, import_remotion12.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1502
1709
  opacity *= 1 - ease(t, easing);
1503
1710
  }
1504
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_remotion14.AbsoluteFill, { style: { opacity }, children });
1711
+ 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)) });
1505
1712
  };
1506
1713
  var FadeTransitionComponentMetadata = {
1507
1714
  kind: "composite",
@@ -1513,17 +1720,17 @@ var FadeTransitionComponentMetadata = {
1513
1720
  };
1514
1721
 
1515
1722
  // src/components/composites/GlitchText.tsx
1516
- var import_remotion15 = require("remotion");
1517
- var import_zod19 = require("zod");
1518
- var import_jsx_runtime17 = require("react/jsx-runtime");
1519
- var GlitchTextPropsSchema = import_zod19.z.object({
1520
- content: import_zod19.z.string().max(100),
1521
- fontSize: import_zod19.z.number().min(8).max(240).default(72),
1522
- color: import_zod19.z.string().default("#FFFFFF"),
1523
- fontFamily: import_zod19.z.string().default("monospace"),
1524
- position: import_zod19.z.enum(["top", "center", "bottom"]).default("center"),
1525
- intensity: import_zod19.z.number().int().min(1).max(10).default(5),
1526
- glitchDuration: import_zod19.z.number().int().min(5).max(30).default(10)
1723
+ var import_remotion13 = require("remotion");
1724
+ var import_zod22 = require("zod");
1725
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1726
+ var GlitchTextPropsSchema = import_zod22.z.object({
1727
+ content: import_zod22.z.string().max(100),
1728
+ fontSize: import_zod22.z.number().min(8).max(240).default(72),
1729
+ color: import_zod22.z.string().default("#FFFFFF"),
1730
+ fontFamily: import_zod22.z.string().default("monospace"),
1731
+ position: import_zod22.z.enum(["top", "center", "bottom"]).default("center"),
1732
+ intensity: import_zod22.z.number().int().min(1).max(10).default(5),
1733
+ glitchDuration: import_zod22.z.number().int().min(5).max(30).default(10)
1527
1734
  });
1528
1735
  var positionStyles2 = (position) => {
1529
1736
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -1543,7 +1750,7 @@ var GlitchText = ({
1543
1750
  intensity,
1544
1751
  glitchDuration
1545
1752
  }) => {
1546
- const frame = (0, import_remotion15.useCurrentFrame)();
1753
+ const frame = (0, import_remotion13.useCurrentFrame)();
1547
1754
  const active = frame < glitchDuration;
1548
1755
  const seed = frame + 1;
1549
1756
  const jitter = active ? (pseudoRandom(seed) - 0.5) * intensity * 6 : 0;
@@ -1557,10 +1764,10 @@ var GlitchText = ({
1557
1764
  textTransform: "uppercase",
1558
1765
  textAlign: "center"
1559
1766
  };
1560
- 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: [
1561
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { style: { ...baseStyle, color, transform: `translate(${jitter}px, ${jitterY}px)` }, children: content }),
1562
- /* @__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 }),
1563
- /* @__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 })
1767
+ 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: [
1768
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { style: { ...baseStyle, color, transform: `translate(${jitter}px, ${jitterY}px)` }, children: content }),
1769
+ /* @__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 }),
1770
+ /* @__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 })
1564
1771
  ] }) });
1565
1772
  };
1566
1773
  var GlitchTextComponentMetadata = {
@@ -1571,17 +1778,16 @@ var GlitchTextComponentMetadata = {
1571
1778
  };
1572
1779
 
1573
1780
  // src/components/composites/GridLayout.tsx
1574
- var import_remotion16 = require("remotion");
1575
- var import_zod20 = require("zod");
1576
- var import_jsx_runtime18 = require("react/jsx-runtime");
1577
- var GridLayoutPropsSchema = import_zod20.z.object({
1578
- columns: import_zod20.z.number().int().min(1).max(4).default(2),
1579
- rows: import_zod20.z.number().int().min(1).max(4).default(2),
1580
- gap: import_zod20.z.number().min(0).max(50).default(20),
1581
- padding: import_zod20.z.number().min(0).max(100).default(40)
1781
+ var import_zod23 = require("zod");
1782
+ var import_jsx_runtime22 = require("react/jsx-runtime");
1783
+ var GridLayoutPropsSchema = import_zod23.z.object({
1784
+ columns: import_zod23.z.number().int().min(1).max(4).default(2),
1785
+ rows: import_zod23.z.number().int().min(1).max(4).default(2),
1786
+ gap: import_zod23.z.number().min(0).max(50).default(20),
1787
+ padding: import_zod23.z.number().min(0).max(100).default(40)
1582
1788
  });
1583
1789
  var GridLayout = ({ columns, rows, gap, padding, children }) => {
1584
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_remotion16.AbsoluteFill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1790
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Fill, { style: { padding, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1585
1791
  "div",
1586
1792
  {
1587
1793
  style: {
@@ -1606,23 +1812,23 @@ var GridLayoutComponentMetadata = {
1606
1812
  };
1607
1813
 
1608
1814
  // src/components/composites/ImageCollage.tsx
1609
- var import_remotion17 = require("remotion");
1610
- var import_zod21 = require("zod");
1611
- var import_jsx_runtime19 = require("react/jsx-runtime");
1612
- var ImageCollagePropsSchema = import_zod21.z.object({
1613
- 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),
1614
- layout: import_zod21.z.enum(["grid", "stack", "scatter"]).default("grid"),
1615
- stagger: import_zod21.z.number().int().min(2).max(10).default(5)
1815
+ var import_remotion14 = require("remotion");
1816
+ var import_zod24 = require("zod");
1817
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1818
+ var ImageCollagePropsSchema = import_zod24.z.object({
1819
+ 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),
1820
+ layout: import_zod24.z.enum(["grid", "stack", "scatter"]).default("grid"),
1821
+ stagger: import_zod24.z.number().int().min(2).max(10).default(5)
1616
1822
  });
1617
- var resolveAsset4 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion17.staticFile)(staticFileInputFromAssetPath(value));
1823
+ var resolveAsset4 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion14.staticFile)(staticFileInputFromAssetPath(value));
1618
1824
  var ImageCollage = ({ images, layout, stagger }) => {
1619
- const frame = (0, import_remotion17.useCurrentFrame)();
1620
- const { fps } = (0, import_remotion17.useVideoConfig)();
1825
+ const frame = (0, import_remotion14.useCurrentFrame)();
1826
+ const { fps } = (0, import_remotion14.useVideoConfig)();
1621
1827
  const n = images.length;
1622
1828
  const cols = Math.ceil(Math.sqrt(n));
1623
1829
  const rows = Math.ceil(n / cols);
1624
1830
  if (layout === "grid") {
1625
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_remotion17.AbsoluteFill, { style: { padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1831
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Fill, { style: { padding: 80, boxSizing: "border-box" }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1626
1832
  "div",
1627
1833
  {
1628
1834
  style: {
@@ -1634,21 +1840,21 @@ var ImageCollage = ({ images, layout, stagger }) => {
1634
1840
  height: "100%"
1635
1841
  },
1636
1842
  children: images.map((img, i) => {
1637
- const p = (0, import_remotion17.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1638
- 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: [
1639
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_remotion17.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1640
- 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
1843
+ const p = (0, import_remotion14.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1844
+ 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: [
1845
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_remotion14.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1846
+ 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
1641
1847
  ] }, i);
1642
1848
  })
1643
1849
  }
1644
1850
  ) });
1645
1851
  }
1646
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_remotion17.AbsoluteFill, { children: images.map((img, i) => {
1647
- const p = (0, import_remotion17.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1852
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Fill, { children: images.map((img, i) => {
1853
+ const p = (0, import_remotion14.spring)({ frame: frame - i * stagger, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1648
1854
  const baseRotate = layout === "stack" ? (i - (n - 1) / 2) * 4 : i * 17 % 20 - 10;
1649
1855
  const baseX = layout === "scatter" ? i * 137 % 300 - 150 : 0;
1650
1856
  const baseY = layout === "scatter" ? (i + 3) * 89 % 200 - 100 : 0;
1651
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
1857
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1652
1858
  "div",
1653
1859
  {
1654
1860
  style: {
@@ -1663,7 +1869,7 @@ var ImageCollage = ({ images, layout, stagger }) => {
1663
1869
  overflow: "hidden",
1664
1870
  boxShadow: "0 20px 60px rgba(0,0,0,0.35)"
1665
1871
  },
1666
- children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_remotion17.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } })
1872
+ children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_remotion14.Img, { src: resolveAsset4(img.src), style: { width: "100%", height: "100%", objectFit: "cover" } })
1667
1873
  },
1668
1874
  i
1669
1875
  );
@@ -1677,20 +1883,20 @@ var ImageCollageComponentMetadata = {
1677
1883
  };
1678
1884
 
1679
1885
  // src/components/composites/ImageReveal.tsx
1680
- var import_remotion18 = require("remotion");
1681
- var import_zod22 = require("zod");
1682
- var import_jsx_runtime20 = require("react/jsx-runtime");
1683
- var ImageRevealPropsSchema = import_zod22.z.object({
1684
- src: import_zod22.z.string().min(1),
1685
- direction: import_zod22.z.enum(["left", "right", "top", "bottom", "center"]).default("left"),
1686
- revealType: import_zod22.z.enum(["wipe", "expand", "iris"]).default("wipe")
1886
+ var import_remotion15 = require("remotion");
1887
+ var import_zod25 = require("zod");
1888
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1889
+ var ImageRevealPropsSchema = import_zod25.z.object({
1890
+ src: import_zod25.z.string().min(1),
1891
+ direction: import_zod25.z.enum(["left", "right", "top", "bottom", "center"]).default("left"),
1892
+ revealType: import_zod25.z.enum(["wipe", "expand", "iris"]).default("wipe")
1687
1893
  });
1688
- var resolveAsset5 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion18.staticFile)(staticFileInputFromAssetPath(value));
1894
+ var resolveAsset5 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion15.staticFile)(staticFileInputFromAssetPath(value));
1689
1895
  var ImageReveal = ({ src, direction, revealType, __wavesDurationInFrames }) => {
1690
- const frame = (0, import_remotion18.useCurrentFrame)();
1896
+ const frame = (0, import_remotion15.useCurrentFrame)();
1691
1897
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1692
1898
  const d = Math.min(30, total);
1693
- const p = (0, import_remotion18.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1899
+ const p = (0, import_remotion15.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1694
1900
  let clipPath;
1695
1901
  let transform = "none";
1696
1902
  let transformOrigin = "center center";
@@ -1713,8 +1919,8 @@ var ImageReveal = ({ src, direction, revealType, __wavesDurationInFrames }) => {
1713
1919
  clipPath = `circle(${Math.round(150 * p)}% at 50% 50%)`;
1714
1920
  }
1715
1921
  const opacity = revealType === "expand" ? p : 1;
1716
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_remotion18.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
1717
- import_remotion18.Img,
1922
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1923
+ import_remotion15.Img,
1718
1924
  {
1719
1925
  src: resolveAsset5(src),
1720
1926
  style: {
@@ -1737,27 +1943,27 @@ var ImageRevealComponentMetadata = {
1737
1943
  };
1738
1944
 
1739
1945
  // src/components/composites/ImageSequence.tsx
1740
- var import_remotion19 = require("remotion");
1741
- var import_zod23 = require("zod");
1742
- var import_jsx_runtime21 = require("react/jsx-runtime");
1743
- var ImageSequencePropsSchema = import_zod23.z.object({
1744
- basePath: import_zod23.z.string().min(1),
1745
- frameCount: import_zod23.z.number().int().positive(),
1746
- filePattern: import_zod23.z.string().default("frame_{frame}.png"),
1747
- fps: import_zod23.z.number().int().min(1).max(120).default(30)
1946
+ var import_remotion16 = require("remotion");
1947
+ var import_zod26 = require("zod");
1948
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1949
+ var ImageSequencePropsSchema = import_zod26.z.object({
1950
+ basePath: import_zod26.z.string().min(1),
1951
+ frameCount: import_zod26.z.number().int().positive(),
1952
+ filePattern: import_zod26.z.string().default("frame_{frame}.png"),
1953
+ fps: import_zod26.z.number().int().min(1).max(120).default(30)
1748
1954
  });
1749
1955
  function joinPath(base, file) {
1750
1956
  if (base.endsWith("/")) return `${base}${file}`;
1751
1957
  return `${base}/${file}`;
1752
1958
  }
1753
- var resolveAsset6 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion19.staticFile)(staticFileInputFromAssetPath(value));
1959
+ var resolveAsset6 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion16.staticFile)(staticFileInputFromAssetPath(value));
1754
1960
  var ImageSequence = ({ basePath, frameCount, filePattern, fps }) => {
1755
- const frame = (0, import_remotion19.useCurrentFrame)();
1756
- const { fps: compFps } = (0, import_remotion19.useVideoConfig)();
1961
+ const frame = (0, import_remotion16.useCurrentFrame)();
1962
+ const { fps: compFps } = (0, import_remotion16.useVideoConfig)();
1757
1963
  const index = Math.min(frameCount - 1, Math.max(0, Math.floor(frame * fps / compFps)));
1758
1964
  const file = filePattern.replace("{frame}", String(index));
1759
1965
  const src = joinPath(basePath, file);
1760
- 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" } }) });
1966
+ 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" } }) });
1761
1967
  };
1762
1968
  var ImageSequenceComponentMetadata = {
1763
1969
  kind: "composite",
@@ -1767,26 +1973,26 @@ var ImageSequenceComponentMetadata = {
1767
1973
  };
1768
1974
 
1769
1975
  // src/components/composites/ImageWithCaption.tsx
1770
- var import_remotion20 = require("remotion");
1771
- var import_zod24 = require("zod");
1772
- var import_jsx_runtime22 = require("react/jsx-runtime");
1773
- var CaptionStyleSchema = import_zod24.z.object({
1774
- fontSize: import_zod24.z.number().min(12).max(80).default(32),
1775
- color: import_zod24.z.string().default("#FFFFFF"),
1776
- backgroundColor: import_zod24.z.string().default("rgba(0,0,0,0.7)")
1976
+ var import_remotion17 = require("remotion");
1977
+ var import_zod27 = require("zod");
1978
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1979
+ var CaptionStyleSchema = import_zod27.z.object({
1980
+ fontSize: import_zod27.z.number().min(12).max(80).default(32),
1981
+ color: import_zod27.z.string().default("#FFFFFF"),
1982
+ backgroundColor: import_zod27.z.string().default("rgba(0,0,0,0.7)")
1777
1983
  });
1778
- var ImageWithCaptionPropsSchema = import_zod24.z.object({
1779
- src: import_zod24.z.string().min(1),
1780
- caption: import_zod24.z.string().max(200),
1781
- captionPosition: import_zod24.z.enum(["top", "bottom", "overlay"]).default("bottom"),
1984
+ var ImageWithCaptionPropsSchema = import_zod27.z.object({
1985
+ src: import_zod27.z.string().min(1),
1986
+ caption: import_zod27.z.string().max(200),
1987
+ captionPosition: import_zod27.z.enum(["top", "bottom", "overlay"]).default("bottom"),
1782
1988
  captionStyle: CaptionStyleSchema.optional()
1783
1989
  });
1784
- var resolveAsset7 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion20.staticFile)(staticFileInputFromAssetPath(value));
1990
+ var resolveAsset7 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion17.staticFile)(staticFileInputFromAssetPath(value));
1785
1991
  var ImageWithCaption = ({ src, caption, captionPosition, captionStyle }) => {
1786
- const frame = (0, import_remotion20.useCurrentFrame)();
1787
- const p = (0, import_remotion20.interpolate)(frame, [8, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1992
+ const frame = (0, import_remotion17.useCurrentFrame)();
1993
+ const p = (0, import_remotion17.interpolate)(frame, [8, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1788
1994
  const style = captionStyle ?? { fontSize: 32, color: "#FFFFFF", backgroundColor: "rgba(0,0,0,0.7)" };
1789
- const captionBox = /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1995
+ const captionBox = /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1790
1996
  "div",
1791
1997
  {
1792
1998
  style: {
@@ -1803,15 +2009,15 @@ var ImageWithCaption = ({ src, caption, captionPosition, captionStyle }) => {
1803
2009
  }
1804
2010
  );
1805
2011
  if (captionPosition === "top" || captionPosition === "bottom") {
1806
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_remotion20.AbsoluteFill, { style: { display: "flex", flexDirection: "column" }, children: [
2012
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Fill, { style: { display: "flex", flexDirection: "column" }, children: [
1807
2013
  captionPosition === "top" ? captionBox : null,
1808
- /* @__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" } }) }),
2014
+ /* @__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" } }) }),
1809
2015
  captionPosition === "bottom" ? captionBox : null
1810
2016
  ] });
1811
2017
  }
1812
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_remotion20.AbsoluteFill, { children: [
1813
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_remotion20.Img, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
1814
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0 }, children: captionBox })
2018
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(Fill, { children: [
2019
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_remotion17.Img, { src: resolveAsset7(src), style: { width: "100%", height: "100%", objectFit: "cover" } }),
2020
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { style: { position: "absolute", left: 0, right: 0, bottom: 0 }, children: captionBox })
1815
2021
  ] });
1816
2022
  };
1817
2023
  var ImageWithCaptionComponentMetadata = {
@@ -1822,19 +2028,19 @@ var ImageWithCaptionComponentMetadata = {
1822
2028
  };
1823
2029
 
1824
2030
  // src/components/composites/InstagramStory.tsx
1825
- var import_remotion21 = require("remotion");
1826
- var import_zod25 = require("zod");
1827
- var import_jsx_runtime23 = require("react/jsx-runtime");
1828
- var InstagramStoryPropsSchema = import_zod25.z.object({
1829
- backgroundImage: import_zod25.z.string().optional(),
1830
- backgroundColor: import_zod25.z.string().default("#000000"),
1831
- profilePic: import_zod25.z.string().optional(),
1832
- username: import_zod25.z.string().optional(),
1833
- text: import_zod25.z.string().max(100).optional(),
1834
- sticker: import_zod25.z.enum(["none", "poll", "question", "countdown"]).default("none"),
1835
- musicTrack: import_zod25.z.string().optional()
2031
+ var import_remotion18 = require("remotion");
2032
+ var import_zod28 = require("zod");
2033
+ var import_jsx_runtime27 = require("react/jsx-runtime");
2034
+ var InstagramStoryPropsSchema = import_zod28.z.object({
2035
+ backgroundImage: import_zod28.z.string().optional(),
2036
+ backgroundColor: import_zod28.z.string().default("#000000"),
2037
+ profilePic: import_zod28.z.string().optional(),
2038
+ username: import_zod28.z.string().optional(),
2039
+ text: import_zod28.z.string().max(100).optional(),
2040
+ sticker: import_zod28.z.enum(["none", "poll", "question", "countdown"]).default("none"),
2041
+ musicTrack: import_zod28.z.string().optional()
1836
2042
  });
1837
- var resolveAsset8 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion21.staticFile)(staticFileInputFromAssetPath(value));
2043
+ var resolveAsset8 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion18.staticFile)(staticFileInputFromAssetPath(value));
1838
2044
  var InstagramStory = ({
1839
2045
  backgroundImage,
1840
2046
  backgroundColor,
@@ -1844,17 +2050,17 @@ var InstagramStory = ({
1844
2050
  sticker,
1845
2051
  musicTrack
1846
2052
  }) => {
1847
- const frame = (0, import_remotion21.useCurrentFrame)();
1848
- const fade = (0, import_remotion21.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1849
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_remotion21.AbsoluteFill, { style: { backgroundColor }, children: [
1850
- musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_remotion21.Audio, { src: resolveAsset8(musicTrack), volume: 0.6 }) : null,
1851
- backgroundImage ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_remotion21.Img, { src: resolveAsset8(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover", opacity: fade } }) : null,
1852
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_remotion21.AbsoluteFill, { style: { padding: 60, boxSizing: "border-box" }, children: [
1853
- profilePic || username ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 18 }, children: [
1854
- 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)" } }),
1855
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 34 }, children: username ?? "username" })
2053
+ const frame = (0, import_remotion18.useCurrentFrame)();
2054
+ const fade = (0, import_remotion18.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2055
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Fill, { style: { backgroundColor }, children: [
2056
+ musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_remotion18.Audio, { src: resolveAsset8(musicTrack), volume: 0.6 }) : null,
2057
+ backgroundImage ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_remotion18.Img, { src: resolveAsset8(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover", opacity: fade } }) : null,
2058
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(Fill, { style: { padding: 60, boxSizing: "border-box" }, children: [
2059
+ profilePic || username ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { style: { display: "flex", alignItems: "center", gap: 18 }, children: [
2060
+ 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)" } }),
2061
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { style: { color: "#FFFFFF", fontWeight: 800, fontSize: 34 }, children: username ?? "username" })
1856
2062
  ] }) : null,
1857
- text ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2063
+ text ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1858
2064
  "div",
1859
2065
  {
1860
2066
  style: {
@@ -1868,7 +2074,7 @@ var InstagramStory = ({
1868
2074
  children: text
1869
2075
  }
1870
2076
  ) : null,
1871
- sticker !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
2077
+ sticker !== "none" ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1872
2078
  "div",
1873
2079
  {
1874
2080
  style: {
@@ -1897,18 +2103,18 @@ var InstagramStoryComponentMetadata = {
1897
2103
  };
1898
2104
 
1899
2105
  // src/components/composites/IntroScene.tsx
1900
- var import_remotion22 = require("remotion");
1901
- var import_zod26 = require("zod");
1902
- var import_jsx_runtime24 = require("react/jsx-runtime");
1903
- var IntroScenePropsSchema = import_zod26.z.object({
1904
- logoSrc: import_zod26.z.string().min(1),
1905
- companyName: import_zod26.z.string().min(1),
1906
- tagline: import_zod26.z.string().optional(),
1907
- backgroundColor: import_zod26.z.string().default("#000000"),
1908
- primaryColor: import_zod26.z.string().default("#FFFFFF"),
1909
- musicTrack: import_zod26.z.string().optional()
2106
+ var import_remotion19 = require("remotion");
2107
+ var import_zod29 = require("zod");
2108
+ var import_jsx_runtime28 = require("react/jsx-runtime");
2109
+ var IntroScenePropsSchema = import_zod29.z.object({
2110
+ logoSrc: import_zod29.z.string().min(1),
2111
+ companyName: import_zod29.z.string().min(1),
2112
+ tagline: import_zod29.z.string().optional(),
2113
+ backgroundColor: import_zod29.z.string().default("#000000"),
2114
+ primaryColor: import_zod29.z.string().default("#FFFFFF"),
2115
+ musicTrack: import_zod29.z.string().optional()
1910
2116
  });
1911
- var resolveAsset9 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion22.staticFile)(staticFileInputFromAssetPath(value));
2117
+ var resolveAsset9 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion19.staticFile)(staticFileInputFromAssetPath(value));
1912
2118
  var IntroScene = ({
1913
2119
  logoSrc,
1914
2120
  companyName,
@@ -1918,25 +2124,25 @@ var IntroScene = ({
1918
2124
  musicTrack,
1919
2125
  __wavesDurationInFrames
1920
2126
  }) => {
1921
- const frame = (0, import_remotion22.useCurrentFrame)();
1922
- const { fps } = (0, import_remotion22.useVideoConfig)();
2127
+ const frame = (0, import_remotion19.useCurrentFrame)();
2128
+ const { fps } = (0, import_remotion19.useVideoConfig)();
1923
2129
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
1924
- const logoP = (0, import_remotion22.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
1925
- const nameOpacity = (0, import_remotion22.interpolate)(frame, [20, 60], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1926
- const taglineY = (0, import_remotion22.interpolate)(frame, [50, 80], [20, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1927
- const outroFade = (0, import_remotion22.interpolate)(frame, [Math.max(0, total - 20), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1928
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_remotion22.AbsoluteFill, { style: { backgroundColor, justifyContent: "center", alignItems: "center" }, children: [
1929
- musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_remotion22.Audio, { src: resolveAsset9(musicTrack), volume: 0.7 }) : null,
1930
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { textAlign: "center", opacity: outroFade }, children: [
1931
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1932
- import_remotion22.Img,
2130
+ const logoP = (0, import_remotion19.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2131
+ const nameOpacity = (0, import_remotion19.interpolate)(frame, [20, 60], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2132
+ const taglineY = (0, import_remotion19.interpolate)(frame, [50, 80], [20, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2133
+ const outroFade = (0, import_remotion19.interpolate)(frame, [Math.max(0, total - 20), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2134
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(Fill, { style: { backgroundColor, display: "flex", justifyContent: "center", alignItems: "center" }, children: [
2135
+ musicTrack ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_remotion19.Audio, { src: resolveAsset9(musicTrack), volume: 0.7 }) : null,
2136
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { style: { textAlign: "center", opacity: outroFade }, children: [
2137
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2138
+ import_remotion19.Img,
1933
2139
  {
1934
2140
  src: resolveAsset9(logoSrc),
1935
2141
  style: { width: 280, height: 280, objectFit: "contain", transform: `scale(${logoP})` }
1936
2142
  }
1937
2143
  ),
1938
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { style: { marginTop: 24, color: primaryColor, fontSize: 64, fontWeight: 900, opacity: nameOpacity }, children: companyName }),
1939
- tagline ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
2144
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { style: { marginTop: 24, color: primaryColor, fontSize: 64, fontWeight: 900, opacity: nameOpacity }, children: companyName }),
2145
+ tagline ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1940
2146
  "div",
1941
2147
  {
1942
2148
  style: {
@@ -1961,17 +2167,17 @@ var IntroSceneComponentMetadata = {
1961
2167
  };
1962
2168
 
1963
2169
  // src/components/composites/KenBurnsImage.tsx
1964
- var import_remotion23 = require("remotion");
1965
- var import_zod27 = require("zod");
1966
- var import_jsx_runtime25 = require("react/jsx-runtime");
1967
- var KenBurnsImagePropsSchema = import_zod27.z.object({
1968
- src: import_zod27.z.string().min(1),
1969
- startScale: import_zod27.z.number().min(1).max(2).default(1),
1970
- endScale: import_zod27.z.number().min(1).max(2).default(1.2),
1971
- panDirection: import_zod27.z.enum(["none", "left", "right", "up", "down"]).default("none"),
1972
- panAmount: import_zod27.z.number().min(0).max(100).default(50)
2170
+ var import_remotion20 = require("remotion");
2171
+ var import_zod30 = require("zod");
2172
+ var import_jsx_runtime29 = require("react/jsx-runtime");
2173
+ var KenBurnsImagePropsSchema = import_zod30.z.object({
2174
+ src: import_zod30.z.string().min(1),
2175
+ startScale: import_zod30.z.number().min(1).max(2).default(1),
2176
+ endScale: import_zod30.z.number().min(1).max(2).default(1.2),
2177
+ panDirection: import_zod30.z.enum(["none", "left", "right", "up", "down"]).default("none"),
2178
+ panAmount: import_zod30.z.number().min(0).max(100).default(50)
1973
2179
  });
1974
- var resolveAsset10 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion23.staticFile)(staticFileInputFromAssetPath(value));
2180
+ var resolveAsset10 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion20.staticFile)(staticFileInputFromAssetPath(value));
1975
2181
  var KenBurnsImage = ({
1976
2182
  src,
1977
2183
  startScale,
@@ -1980,14 +2186,14 @@ var KenBurnsImage = ({
1980
2186
  panAmount,
1981
2187
  __wavesDurationInFrames
1982
2188
  }) => {
1983
- const frame = (0, import_remotion23.useCurrentFrame)();
2189
+ const frame = (0, import_remotion20.useCurrentFrame)();
1984
2190
  const duration = Math.max(1, __wavesDurationInFrames ?? 1);
1985
- const t = (0, import_remotion23.interpolate)(frame, [0, duration], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2191
+ const t = (0, import_remotion20.interpolate)(frame, [0, duration], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
1986
2192
  const scale = startScale + (endScale - startScale) * t;
1987
2193
  const dx = panDirection === "left" ? -panAmount * t : panDirection === "right" ? panAmount * t : 0;
1988
2194
  const dy = panDirection === "up" ? -panAmount * t : panDirection === "down" ? panAmount * t : 0;
1989
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_remotion23.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(
1990
- import_remotion23.Img,
2195
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
2196
+ import_remotion20.Img,
1991
2197
  {
1992
2198
  src: resolveAsset10(src),
1993
2199
  style: {
@@ -2008,20 +2214,20 @@ var KenBurnsImageComponentMetadata = {
2008
2214
  };
2009
2215
 
2010
2216
  // src/components/composites/KineticTypography.tsx
2011
- var import_remotion24 = require("remotion");
2012
- var import_zod28 = require("zod");
2013
- var import_jsx_runtime26 = require("react/jsx-runtime");
2014
- var WordSchema = import_zod28.z.object({
2015
- text: import_zod28.z.string().min(1),
2016
- emphasis: import_zod28.z.enum(["normal", "bold", "giant"]).default("normal")
2217
+ var import_remotion21 = require("remotion");
2218
+ var import_zod31 = require("zod");
2219
+ var import_jsx_runtime30 = require("react/jsx-runtime");
2220
+ var WordSchema = import_zod31.z.object({
2221
+ text: import_zod31.z.string().min(1),
2222
+ emphasis: import_zod31.z.enum(["normal", "bold", "giant"]).default("normal")
2017
2223
  });
2018
- var KineticTypographyPropsSchema = import_zod28.z.object({
2019
- words: import_zod28.z.array(WordSchema).min(1).max(50),
2020
- fontSize: import_zod28.z.number().min(12).max(140).default(48),
2021
- color: import_zod28.z.string().default("#FFFFFF"),
2022
- fontFamily: import_zod28.z.string().default("Inter"),
2023
- timing: import_zod28.z.array(import_zod28.z.number().int().min(0)).min(1).describe("Frame timing for each word"),
2024
- transition: import_zod28.z.enum(["fade", "scale", "slideLeft", "slideRight"]).default("scale")
2224
+ var KineticTypographyPropsSchema = import_zod31.z.object({
2225
+ words: import_zod31.z.array(WordSchema).min(1).max(50),
2226
+ fontSize: import_zod31.z.number().min(12).max(140).default(48),
2227
+ color: import_zod31.z.string().default("#FFFFFF"),
2228
+ fontFamily: import_zod31.z.string().default("Inter"),
2229
+ timing: import_zod31.z.array(import_zod31.z.number().int().min(0)).min(1).describe("Frame timing for each word"),
2230
+ transition: import_zod31.z.enum(["fade", "scale", "slideLeft", "slideRight"]).default("scale")
2025
2231
  });
2026
2232
  var KineticTypography = ({
2027
2233
  words,
@@ -2031,8 +2237,8 @@ var KineticTypography = ({
2031
2237
  timing,
2032
2238
  transition
2033
2239
  }) => {
2034
- const frame = (0, import_remotion24.useCurrentFrame)();
2035
- const { fps } = (0, import_remotion24.useVideoConfig)();
2240
+ const frame = (0, import_remotion21.useCurrentFrame)();
2241
+ const { fps } = (0, import_remotion21.useVideoConfig)();
2036
2242
  const starts = (() => {
2037
2243
  if (timing.length >= words.length) return timing.slice(0, words.length);
2038
2244
  const last = timing.length ? timing[timing.length - 1] : 0;
@@ -2045,13 +2251,13 @@ var KineticTypography = ({
2045
2251
  }
2046
2252
  const word = words[activeIndex];
2047
2253
  const start = starts[activeIndex] ?? 0;
2048
- const p = (0, import_remotion24.spring)({ frame: frame - start, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2254
+ const p = (0, import_remotion21.spring)({ frame: frame - start, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2049
2255
  const progress = Math.max(0, Math.min(1, p));
2050
2256
  const scaleBase = word.emphasis === "giant" ? 2 : word.emphasis === "bold" ? 1.3 : 1;
2051
2257
  const opacity = transition === "fade" ? progress : 1;
2052
2258
  const scale = transition === "scale" ? (0.85 + 0.15 * progress) * scaleBase : 1 * scaleBase;
2053
2259
  const tx = transition === "slideLeft" ? 40 * (1 - progress) : transition === "slideRight" ? -40 * (1 - progress) : 0;
2054
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_remotion24.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
2260
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2055
2261
  "div",
2056
2262
  {
2057
2263
  style: {
@@ -2076,17 +2282,17 @@ var KineticTypographyComponentMetadata = {
2076
2282
  };
2077
2283
 
2078
2284
  // src/components/composites/LineGraph.tsx
2079
- var import_remotion25 = require("remotion");
2080
- var import_zod29 = require("zod");
2081
- var import_jsx_runtime27 = require("react/jsx-runtime");
2082
- var PointSchema = import_zod29.z.object({ x: import_zod29.z.number(), y: import_zod29.z.number() });
2083
- var LineGraphPropsSchema = import_zod29.z.object({
2084
- data: import_zod29.z.array(PointSchema).min(2).max(50),
2085
- color: import_zod29.z.string().default("#00FF00"),
2086
- strokeWidth: import_zod29.z.number().min(1).max(10).default(3),
2087
- showDots: import_zod29.z.boolean().default(true),
2088
- fillArea: import_zod29.z.boolean().default(false),
2089
- animate: import_zod29.z.enum(["draw", "reveal"]).default("draw")
2285
+ var import_remotion22 = require("remotion");
2286
+ var import_zod32 = require("zod");
2287
+ var import_jsx_runtime31 = require("react/jsx-runtime");
2288
+ var PointSchema = import_zod32.z.object({ x: import_zod32.z.number(), y: import_zod32.z.number() });
2289
+ var LineGraphPropsSchema = import_zod32.z.object({
2290
+ data: import_zod32.z.array(PointSchema).min(2).max(50),
2291
+ color: import_zod32.z.string().default("#00FF00"),
2292
+ strokeWidth: import_zod32.z.number().min(1).max(10).default(3),
2293
+ showDots: import_zod32.z.boolean().default(true),
2294
+ fillArea: import_zod32.z.boolean().default(false),
2295
+ animate: import_zod32.z.enum(["draw", "reveal"]).default("draw")
2090
2296
  });
2091
2297
  function normalize(data, w, h, pad) {
2092
2298
  const xs = data.map((d) => d.x);
@@ -2112,9 +2318,9 @@ var LineGraph = ({
2112
2318
  animate,
2113
2319
  __wavesDurationInFrames
2114
2320
  }) => {
2115
- const frame = (0, import_remotion25.useCurrentFrame)();
2321
+ const frame = (0, import_remotion22.useCurrentFrame)();
2116
2322
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2117
- const progress = (0, import_remotion25.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2323
+ const progress = (0, import_remotion22.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2118
2324
  const w = 1e3;
2119
2325
  const h = 520;
2120
2326
  const pad = 30;
@@ -2122,9 +2328,9 @@ var LineGraph = ({
2122
2328
  const d = toPath(pts);
2123
2329
  const dash = 3e3;
2124
2330
  const dashOffset = dash * (1 - progress);
2125
- 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: [
2126
- /* @__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 }) }) }),
2127
- fillArea ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2331
+ 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: [
2332
+ /* @__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 }) }) }),
2333
+ fillArea ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2128
2334
  "path",
2129
2335
  {
2130
2336
  d: `${d} L ${pts[pts.length - 1].x} ${h - pad} L ${pts[0].x} ${h - pad} Z`,
@@ -2133,7 +2339,7 @@ var LineGraph = ({
2133
2339
  clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0
2134
2340
  }
2135
2341
  ) : null,
2136
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
2342
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
2137
2343
  "path",
2138
2344
  {
2139
2345
  d,
@@ -2147,7 +2353,7 @@ var LineGraph = ({
2147
2353
  clipPath: animate === "reveal" ? "url(#waves-line-reveal)" : void 0
2148
2354
  }
2149
2355
  ),
2150
- 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
2356
+ 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
2151
2357
  ] }) });
2152
2358
  };
2153
2359
  var LineGraphComponentMetadata = {
@@ -2158,28 +2364,28 @@ var LineGraphComponentMetadata = {
2158
2364
  };
2159
2365
 
2160
2366
  // src/components/composites/LogoReveal.tsx
2161
- var import_remotion26 = require("remotion");
2162
- var import_zod30 = require("zod");
2163
- var import_jsx_runtime28 = require("react/jsx-runtime");
2164
- var LogoRevealPropsSchema = import_zod30.z.object({
2165
- logoSrc: import_zod30.z.string().min(1),
2166
- effect: import_zod30.z.enum(["fade", "scale", "rotate", "slide"]).default("scale"),
2167
- backgroundColor: import_zod30.z.string().default("#000000"),
2168
- soundEffect: import_zod30.z.string().optional()
2367
+ var import_remotion23 = require("remotion");
2368
+ var import_zod33 = require("zod");
2369
+ var import_jsx_runtime32 = require("react/jsx-runtime");
2370
+ var LogoRevealPropsSchema = import_zod33.z.object({
2371
+ logoSrc: import_zod33.z.string().min(1),
2372
+ effect: import_zod33.z.enum(["fade", "scale", "rotate", "slide"]).default("scale"),
2373
+ backgroundColor: import_zod33.z.string().default("#000000"),
2374
+ soundEffect: import_zod33.z.string().optional()
2169
2375
  });
2170
- var resolveAsset11 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion26.staticFile)(staticFileInputFromAssetPath(value));
2376
+ var resolveAsset11 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion23.staticFile)(staticFileInputFromAssetPath(value));
2171
2377
  var LogoReveal = ({ logoSrc, effect, backgroundColor, soundEffect }) => {
2172
- const frame = (0, import_remotion26.useCurrentFrame)();
2173
- const { fps } = (0, import_remotion26.useVideoConfig)();
2174
- const p = (0, import_remotion26.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
2378
+ const frame = (0, import_remotion23.useCurrentFrame)();
2379
+ const { fps } = (0, import_remotion23.useVideoConfig)();
2380
+ const p = (0, import_remotion23.spring)({ frame, fps, config: { damping: 14, stiffness: 110, mass: 0.9 } });
2175
2381
  const opacity = effect === "fade" ? p : Math.min(1, Math.max(0, p));
2176
2382
  const scale = effect === "scale" ? p : 1;
2177
2383
  const rotate = effect === "rotate" ? (1 - p) * 360 : 0;
2178
2384
  const translateY = effect === "slide" ? -200 * (1 - p) : 0;
2179
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_remotion26.AbsoluteFill, { style: { backgroundColor, justifyContent: "center", alignItems: "center" }, children: [
2180
- soundEffect ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_remotion26.Audio, { src: resolveAsset11(soundEffect), volume: 1 }) : null,
2181
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
2182
- import_remotion26.Img,
2385
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(Fill, { style: { backgroundColor, display: "flex", justifyContent: "center", alignItems: "center" }, children: [
2386
+ soundEffect ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_remotion23.Audio, { src: resolveAsset11(soundEffect), volume: 1 }) : null,
2387
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2388
+ import_remotion23.Img,
2183
2389
  {
2184
2390
  src: resolveAsset11(logoSrc),
2185
2391
  style: {
@@ -2201,32 +2407,32 @@ var LogoRevealComponentMetadata = {
2201
2407
  };
2202
2408
 
2203
2409
  // src/components/composites/OutroScene.tsx
2204
- var import_remotion27 = require("remotion");
2205
- var import_zod31 = require("zod");
2206
- var import_jsx_runtime29 = require("react/jsx-runtime");
2207
- var CtaSchema = import_zod31.z.object({ text: import_zod31.z.string().min(1), icon: import_zod31.z.string().optional() });
2208
- var HandleSchema = import_zod31.z.object({
2209
- platform: import_zod31.z.enum(["twitter", "instagram", "youtube", "linkedin"]),
2210
- handle: import_zod31.z.string().min(1)
2410
+ var import_remotion24 = require("remotion");
2411
+ var import_zod34 = require("zod");
2412
+ var import_jsx_runtime33 = require("react/jsx-runtime");
2413
+ var CtaSchema = import_zod34.z.object({ text: import_zod34.z.string().min(1), icon: import_zod34.z.string().optional() });
2414
+ var HandleSchema = import_zod34.z.object({
2415
+ platform: import_zod34.z.enum(["twitter", "instagram", "youtube", "linkedin"]),
2416
+ handle: import_zod34.z.string().min(1)
2211
2417
  });
2212
- var OutroScenePropsSchema = import_zod31.z.object({
2213
- logoSrc: import_zod31.z.string().min(1),
2214
- message: import_zod31.z.string().default("Thank You"),
2215
- ctaButtons: import_zod31.z.array(CtaSchema).max(3).optional(),
2216
- socialHandles: import_zod31.z.array(HandleSchema).max(4).optional(),
2217
- backgroundColor: import_zod31.z.string().default("#000000")
2418
+ var OutroScenePropsSchema = import_zod34.z.object({
2419
+ logoSrc: import_zod34.z.string().min(1),
2420
+ message: import_zod34.z.string().default("Thank You"),
2421
+ ctaButtons: import_zod34.z.array(CtaSchema).max(3).optional(),
2422
+ socialHandles: import_zod34.z.array(HandleSchema).max(4).optional(),
2423
+ backgroundColor: import_zod34.z.string().default("#000000")
2218
2424
  });
2219
- var resolveAsset12 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion27.staticFile)(staticFileInputFromAssetPath(value));
2425
+ var resolveAsset12 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion24.staticFile)(staticFileInputFromAssetPath(value));
2220
2426
  var OutroScene = ({ logoSrc, message, ctaButtons, socialHandles, backgroundColor }) => {
2221
- const frame = (0, import_remotion27.useCurrentFrame)();
2222
- const { fps } = (0, import_remotion27.useVideoConfig)();
2223
- const logoP = (0, import_remotion27.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2224
- const msgP = (0, import_remotion27.spring)({ frame: frame - 18, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2225
- const ctaP = (0, import_remotion27.spring)({ frame: frame - 40, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2226
- 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: [
2227
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_remotion27.Img, { src: resolveAsset12(logoSrc), style: { width: 220, height: 220, objectFit: "contain", transform: `scale(${logoP})` } }),
2228
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { style: { marginTop: 24, color: "#FFFFFF", fontSize: 72, fontWeight: 1e3, opacity: msgP }, children: message }),
2229
- 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)(
2427
+ const frame = (0, import_remotion24.useCurrentFrame)();
2428
+ const { fps } = (0, import_remotion24.useVideoConfig)();
2429
+ const logoP = (0, import_remotion24.spring)({ frame, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2430
+ const msgP = (0, import_remotion24.spring)({ frame: frame - 18, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2431
+ const ctaP = (0, import_remotion24.spring)({ frame: frame - 40, fps, config: { damping: 14, stiffness: 120, mass: 0.9 } });
2432
+ 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: [
2433
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_remotion24.Img, { src: resolveAsset12(logoSrc), style: { width: 220, height: 220, objectFit: "contain", transform: `scale(${logoP})` } }),
2434
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { style: { marginTop: 24, color: "#FFFFFF", fontSize: 72, fontWeight: 1e3, opacity: msgP }, children: message }),
2435
+ 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)(
2230
2436
  "div",
2231
2437
  {
2232
2438
  style: {
@@ -2244,7 +2450,7 @@ var OutroScene = ({ logoSrc, message, ctaButtons, socialHandles, backgroundColor
2244
2450
  },
2245
2451
  i
2246
2452
  )) }) : null,
2247
- 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: [
2453
+ 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: [
2248
2454
  h.platform,
2249
2455
  ": ",
2250
2456
  h.handle
@@ -2259,19 +2465,19 @@ var OutroSceneComponentMetadata = {
2259
2465
  };
2260
2466
 
2261
2467
  // src/components/composites/OutlineText.tsx
2262
- var import_remotion28 = require("remotion");
2263
- var import_zod32 = require("zod");
2264
- var import_jsx_runtime30 = require("react/jsx-runtime");
2265
- var OutlineTextPropsSchema = import_zod32.z.object({
2266
- content: import_zod32.z.string().max(50),
2267
- fontSize: import_zod32.z.number().min(8).max(240).default(96),
2268
- outlineColor: import_zod32.z.string().default("#FFFFFF"),
2269
- fillColor: import_zod32.z.string().default("#000000"),
2270
- fontFamily: import_zod32.z.string().default("Inter"),
2271
- fontWeight: import_zod32.z.number().int().min(100).max(900).default(800),
2272
- position: import_zod32.z.enum(["top", "center", "bottom"]).default("center"),
2273
- animation: import_zod32.z.enum(["draw", "fill"]).default("draw"),
2274
- strokeWidth: import_zod32.z.number().min(1).max(10).default(3)
2468
+ var import_remotion25 = require("remotion");
2469
+ var import_zod35 = require("zod");
2470
+ var import_jsx_runtime34 = require("react/jsx-runtime");
2471
+ var OutlineTextPropsSchema = import_zod35.z.object({
2472
+ content: import_zod35.z.string().max(50),
2473
+ fontSize: import_zod35.z.number().min(8).max(240).default(96),
2474
+ outlineColor: import_zod35.z.string().default("#FFFFFF"),
2475
+ fillColor: import_zod35.z.string().default("#000000"),
2476
+ fontFamily: import_zod35.z.string().default("Inter"),
2477
+ fontWeight: import_zod35.z.number().int().min(100).max(900).default(800),
2478
+ position: import_zod35.z.enum(["top", "center", "bottom"]).default("center"),
2479
+ animation: import_zod35.z.enum(["draw", "fill"]).default("draw"),
2480
+ strokeWidth: import_zod35.z.number().min(1).max(10).default(3)
2275
2481
  });
2276
2482
  var positionStyles3 = (position) => {
2277
2483
  if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 90 };
@@ -2289,12 +2495,12 @@ var OutlineText = ({
2289
2495
  animation,
2290
2496
  strokeWidth
2291
2497
  }) => {
2292
- const frame = (0, import_remotion28.useCurrentFrame)();
2293
- const t = (0, import_remotion28.interpolate)(frame, [0, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2498
+ const frame = (0, import_remotion25.useCurrentFrame)();
2499
+ const t = (0, import_remotion25.interpolate)(frame, [0, 24], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2294
2500
  const strokeOpacity = animation === "draw" ? t : 1;
2295
2501
  const fillOpacity = animation === "fill" ? t : 0;
2296
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_remotion28.AbsoluteFill, { style: { display: "flex", ...positionStyles3(position) }, children: [
2297
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2502
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(Fill, { style: { display: "flex", ...positionStyles3(position) }, children: [
2503
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2298
2504
  "div",
2299
2505
  {
2300
2506
  style: {
@@ -2311,7 +2517,7 @@ var OutlineText = ({
2311
2517
  children: content
2312
2518
  }
2313
2519
  ),
2314
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
2520
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2315
2521
  "div",
2316
2522
  {
2317
2523
  style: {
@@ -2338,16 +2544,16 @@ var OutlineTextComponentMetadata = {
2338
2544
  };
2339
2545
 
2340
2546
  // src/components/composites/ProgressBar.tsx
2341
- var import_remotion29 = require("remotion");
2342
- var import_zod33 = require("zod");
2343
- var import_jsx_runtime31 = require("react/jsx-runtime");
2344
- var ProgressBarPropsSchema = import_zod33.z.object({
2345
- label: import_zod33.z.string().optional(),
2346
- color: import_zod33.z.string().default("#00FF00"),
2347
- backgroundColor: import_zod33.z.string().default("rgba(255,255,255,0.2)"),
2348
- height: import_zod33.z.number().min(5).max(50).default(10),
2349
- position: import_zod33.z.enum(["top", "bottom"]).default("bottom"),
2350
- showPercentage: import_zod33.z.boolean().default(true)
2547
+ var import_remotion26 = require("remotion");
2548
+ var import_zod36 = require("zod");
2549
+ var import_jsx_runtime35 = require("react/jsx-runtime");
2550
+ var ProgressBarPropsSchema = import_zod36.z.object({
2551
+ label: import_zod36.z.string().optional(),
2552
+ color: import_zod36.z.string().default("#00FF00"),
2553
+ backgroundColor: import_zod36.z.string().default("rgba(255,255,255,0.2)"),
2554
+ height: import_zod36.z.number().min(5).max(50).default(10),
2555
+ position: import_zod36.z.enum(["top", "bottom"]).default("bottom"),
2556
+ showPercentage: import_zod36.z.boolean().default(true)
2351
2557
  });
2352
2558
  var ProgressBar = ({
2353
2559
  label,
@@ -2358,17 +2564,17 @@ var ProgressBar = ({
2358
2564
  showPercentage,
2359
2565
  __wavesDurationInFrames
2360
2566
  }) => {
2361
- const frame = (0, import_remotion29.useCurrentFrame)();
2567
+ const frame = (0, import_remotion26.useCurrentFrame)();
2362
2568
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2363
- const p = (0, import_remotion29.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2569
+ const p = (0, import_remotion26.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2364
2570
  const pct = Math.round(p * 100);
2365
2571
  const yStyle = position === "top" ? { top: 50 } : { bottom: 50 };
2366
- 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: [
2367
- label || showPercentage ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginBottom: 10, color: "#FFFFFF", fontWeight: 700 }, children: [
2368
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: label ?? "" }),
2369
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { children: showPercentage ? `${pct}%` : "" })
2572
+ 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: [
2573
+ label || showPercentage ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { style: { display: "flex", justifyContent: "space-between", marginBottom: 10, color: "#FFFFFF", fontWeight: 700 }, children: [
2574
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: label ?? "" }),
2575
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { children: showPercentage ? `${pct}%` : "" })
2370
2576
  ] }) : null,
2371
- /* @__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 } }) })
2577
+ /* @__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 } }) })
2372
2578
  ] }) });
2373
2579
  };
2374
2580
  var ProgressBarComponentMetadata = {
@@ -2379,16 +2585,16 @@ var ProgressBarComponentMetadata = {
2379
2585
  };
2380
2586
 
2381
2587
  // src/components/composites/ProgressRing.tsx
2382
- var import_remotion30 = require("remotion");
2383
- var import_zod34 = require("zod");
2384
- var import_jsx_runtime32 = require("react/jsx-runtime");
2385
- var ProgressRingPropsSchema = import_zod34.z.object({
2386
- percentage: import_zod34.z.number().min(0).max(100),
2387
- size: import_zod34.z.number().min(100).max(500).default(200),
2388
- strokeWidth: import_zod34.z.number().min(5).max(50).default(20),
2389
- color: import_zod34.z.string().default("#00FF00"),
2390
- backgroundColor: import_zod34.z.string().default("rgba(255,255,255,0.2)"),
2391
- showLabel: import_zod34.z.boolean().default(true)
2588
+ var import_remotion27 = require("remotion");
2589
+ var import_zod37 = require("zod");
2590
+ var import_jsx_runtime36 = require("react/jsx-runtime");
2591
+ var ProgressRingPropsSchema = import_zod37.z.object({
2592
+ percentage: import_zod37.z.number().min(0).max(100),
2593
+ size: import_zod37.z.number().min(100).max(500).default(200),
2594
+ strokeWidth: import_zod37.z.number().min(5).max(50).default(20),
2595
+ color: import_zod37.z.string().default("#00FF00"),
2596
+ backgroundColor: import_zod37.z.string().default("rgba(255,255,255,0.2)"),
2597
+ showLabel: import_zod37.z.boolean().default(true)
2392
2598
  });
2393
2599
  var ProgressRing = ({
2394
2600
  percentage,
@@ -2399,17 +2605,17 @@ var ProgressRing = ({
2399
2605
  showLabel,
2400
2606
  __wavesDurationInFrames
2401
2607
  }) => {
2402
- const frame = (0, import_remotion30.useCurrentFrame)();
2608
+ const frame = (0, import_remotion27.useCurrentFrame)();
2403
2609
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2404
- const p = (0, import_remotion30.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2610
+ const p = (0, import_remotion27.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2405
2611
  const current = percentage * p;
2406
2612
  const r = (size - strokeWidth) / 2;
2407
2613
  const c = 2 * Math.PI * r;
2408
2614
  const dash = c;
2409
2615
  const offset = c - current / 100 * c;
2410
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_remotion30.AbsoluteFill, { style: { justifyContent: "center", alignItems: "center" }, children: [
2411
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
2412
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2616
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(Fill, { style: { display: "flex", justifyContent: "center", alignItems: "center" }, children: [
2617
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("svg", { width: size, height: size, viewBox: `0 0 ${size} ${size}`, children: [
2618
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2413
2619
  "circle",
2414
2620
  {
2415
2621
  cx: size / 2,
@@ -2420,7 +2626,7 @@ var ProgressRing = ({
2420
2626
  fill: "transparent"
2421
2627
  }
2422
2628
  ),
2423
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2629
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2424
2630
  "circle",
2425
2631
  {
2426
2632
  cx: size / 2,
@@ -2436,7 +2642,7 @@ var ProgressRing = ({
2436
2642
  }
2437
2643
  )
2438
2644
  ] }),
2439
- showLabel ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { style: { position: "absolute", color: "#FFFFFF", fontWeight: 800, fontSize: Math.round(size * 0.22) }, children: [
2645
+ showLabel ? /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { style: { position: "absolute", color: "#FFFFFF", fontWeight: 800, fontSize: Math.round(size * 0.22) }, children: [
2440
2646
  Math.round(current),
2441
2647
  "%"
2442
2648
  ] }) : null
@@ -2450,14 +2656,15 @@ var ProgressRingComponentMetadata = {
2450
2656
  };
2451
2657
 
2452
2658
  // src/components/composites/SlideTransition.tsx
2453
- var import_remotion31 = require("remotion");
2454
- var import_zod35 = require("zod");
2455
- var import_jsx_runtime33 = require("react/jsx-runtime");
2456
- var SlideTransitionPropsSchema = import_zod35.z.object({
2457
- durationInFrames: import_zod35.z.number().int().min(10).max(60).default(30),
2458
- direction: import_zod35.z.enum(["left", "right", "up", "down"]).default("left"),
2459
- distance: import_zod35.z.number().int().min(1).max(2e3).default(160),
2460
- phase: import_zod35.z.enum(["in", "out", "inOut"]).default("inOut")
2659
+ var import_react7 = __toESM(require("react"));
2660
+ var import_remotion28 = require("remotion");
2661
+ var import_zod38 = require("zod");
2662
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2663
+ var SlideTransitionPropsSchema = import_zod38.z.object({
2664
+ durationInFrames: import_zod38.z.number().int().min(10).max(60).default(30),
2665
+ direction: import_zod38.z.enum(["left", "right", "up", "down"]).default("left"),
2666
+ distance: import_zod38.z.number().int().min(1).max(2e3).default(160),
2667
+ phase: import_zod38.z.enum(["in", "out", "inOut"]).default("inOut")
2461
2668
  });
2462
2669
  function translateFor(direction, delta) {
2463
2670
  if (direction === "left") return { x: -delta, y: 0 };
@@ -2473,29 +2680,30 @@ var SlideTransition = ({
2473
2680
  children,
2474
2681
  __wavesDurationInFrames
2475
2682
  }) => {
2476
- const frame = (0, import_remotion31.useCurrentFrame)();
2683
+ const layers = import_react7.default.Children.toArray(children);
2684
+ const frame = (0, import_remotion28.useCurrentFrame)();
2477
2685
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2478
2686
  const d = Math.min(durationInFrames, total);
2479
2687
  let opacity = 1;
2480
2688
  let tx = 0;
2481
2689
  let ty = 0;
2482
2690
  if (phase === "in" || phase === "inOut") {
2483
- const t = (0, import_remotion31.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2691
+ const t = (0, import_remotion28.interpolate)(frame, [0, d], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2484
2692
  const { x, y } = translateFor(direction, distance * t);
2485
2693
  tx += x;
2486
2694
  ty += y;
2487
- opacity *= (0, import_remotion31.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2695
+ opacity *= (0, import_remotion28.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2488
2696
  }
2489
2697
  if (phase === "out" || phase === "inOut") {
2490
2698
  const start = Math.max(0, total - d);
2491
- const t = (0, import_remotion31.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2699
+ const t = (0, import_remotion28.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2492
2700
  const opposite = direction === "left" ? "right" : direction === "right" ? "left" : direction === "up" ? "down" : "up";
2493
2701
  const { x, y } = translateFor(opposite, distance * t);
2494
2702
  tx += x;
2495
2703
  ty += y;
2496
- opacity *= (0, import_remotion31.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2704
+ opacity *= (0, import_remotion28.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2497
2705
  }
2498
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_remotion31.AbsoluteFill, { style: { opacity, transform: `translate(${tx}px, ${ty}px)` }, children });
2706
+ 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)) });
2499
2707
  };
2500
2708
  var SlideTransitionComponentMetadata = {
2501
2709
  kind: "composite",
@@ -2507,16 +2715,15 @@ var SlideTransitionComponentMetadata = {
2507
2715
  };
2508
2716
 
2509
2717
  // src/components/composites/SplitScreen.tsx
2510
- var import_react = __toESM(require("react"));
2511
- var import_remotion32 = require("remotion");
2512
- var import_zod36 = require("zod");
2513
- var import_jsx_runtime34 = require("react/jsx-runtime");
2514
- var SplitScreenPropsSchema = import_zod36.z.object({
2515
- orientation: import_zod36.z.enum(["vertical", "horizontal"]).default("vertical"),
2516
- split: import_zod36.z.number().min(0.1).max(0.9).default(0.5),
2517
- gap: import_zod36.z.number().min(0).default(48),
2518
- padding: import_zod36.z.number().min(0).default(80),
2519
- dividerColor: import_zod36.z.string().optional()
2718
+ var import_react8 = __toESM(require("react"));
2719
+ var import_zod39 = require("zod");
2720
+ var import_jsx_runtime38 = require("react/jsx-runtime");
2721
+ var SplitScreenPropsSchema = import_zod39.z.object({
2722
+ orientation: import_zod39.z.enum(["vertical", "horizontal"]).default("vertical"),
2723
+ split: import_zod39.z.number().min(0.1).max(0.9).default(0.5),
2724
+ gap: import_zod39.z.number().min(0).default(48),
2725
+ padding: import_zod39.z.number().min(0).default(80),
2726
+ dividerColor: import_zod39.z.string().optional()
2520
2727
  });
2521
2728
  var SplitScreen = ({
2522
2729
  orientation,
@@ -2526,14 +2733,14 @@ var SplitScreen = ({
2526
2733
  dividerColor,
2527
2734
  children
2528
2735
  }) => {
2529
- const items = import_react.default.Children.toArray(children);
2736
+ const items = import_react8.default.Children.toArray(children);
2530
2737
  const first = items[0] ?? null;
2531
2738
  const second = items[1] ?? null;
2532
2739
  const isVertical = orientation === "vertical";
2533
2740
  const flexDirection = isVertical ? "row" : "column";
2534
- 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: [
2535
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { style: { flex: split, position: "relative" }, children: first }),
2536
- dividerColor ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
2741
+ 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: [
2742
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { flex: split, position: "relative" }, children: first }),
2743
+ dividerColor ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2537
2744
  "div",
2538
2745
  {
2539
2746
  style: {
@@ -2544,7 +2751,7 @@ var SplitScreen = ({
2544
2751
  }
2545
2752
  }
2546
2753
  ) : null,
2547
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { style: { flex: 1 - split, position: "relative" }, children: second })
2754
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { flex: 1 - split, position: "relative" }, children: second })
2548
2755
  ] }) });
2549
2756
  };
2550
2757
  var SplitScreenComponentMetadata = {
@@ -2558,22 +2765,25 @@ var SplitScreenComponentMetadata = {
2558
2765
  };
2559
2766
 
2560
2767
  // src/components/composites/SplitText.tsx
2561
- var import_remotion33 = require("remotion");
2562
- var import_zod37 = require("zod");
2563
- var import_jsx_runtime35 = require("react/jsx-runtime");
2564
- var SplitTextPropsSchema = import_zod37.z.object({
2565
- content: import_zod37.z.string().max(200),
2566
- fontSize: import_zod37.z.number().min(8).max(200).default(48),
2567
- color: import_zod37.z.string().default("#FFFFFF"),
2568
- fontFamily: import_zod37.z.string().default("Inter"),
2569
- position: import_zod37.z.enum(["top", "center", "bottom"]).default("center"),
2570
- splitBy: import_zod37.z.enum(["word", "letter"]).default("word"),
2571
- stagger: import_zod37.z.number().int().min(1).max(10).default(3),
2572
- animation: import_zod37.z.enum(["fade", "slideUp", "slideDown", "scale", "rotate"]).default("slideUp")
2768
+ var import_remotion29 = require("remotion");
2769
+ var import_zod40 = require("zod");
2770
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2771
+ var SplitTextPropsSchema = import_zod40.z.object({
2772
+ content: import_zod40.z.string().max(200),
2773
+ fontSize: import_zod40.z.number().min(8).max(200).default(48),
2774
+ color: import_zod40.z.string().default("#FFFFFF"),
2775
+ fontFamily: import_zod40.z.string().default("Inter"),
2776
+ position: import_zod40.z.enum(["top", "center", "bottom"]).default("center"),
2777
+ splitBy: import_zod40.z.enum(["word", "letter"]).default("word"),
2778
+ stagger: import_zod40.z.number().int().min(1).max(10).default(3),
2779
+ animation: import_zod40.z.enum(["fade", "slideUp", "slideDown", "scale", "rotate"]).default("slideUp"),
2780
+ maxWidthPct: import_zod40.z.number().min(0.1).max(1).default(0.9),
2781
+ safeInsetPct: import_zod40.z.number().min(0).max(0.25).default(0.06)
2573
2782
  });
2574
- var positionStyles4 = (position) => {
2575
- if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 80 };
2576
- if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: 80 };
2783
+ var positionStyles4 = (position, safeInsetPct) => {
2784
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
2785
+ if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: inset };
2786
+ if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: inset };
2577
2787
  return { justifyContent: "center", alignItems: "center" };
2578
2788
  };
2579
2789
  function getItemStyle(progress, animation) {
@@ -2600,12 +2810,14 @@ var SplitText = ({
2600
2810
  position,
2601
2811
  splitBy,
2602
2812
  stagger,
2603
- animation
2813
+ animation,
2814
+ maxWidthPct,
2815
+ safeInsetPct
2604
2816
  }) => {
2605
- const frame = (0, import_remotion33.useCurrentFrame)();
2606
- const { fps } = (0, import_remotion33.useVideoConfig)();
2817
+ const frame = (0, import_remotion29.useCurrentFrame)();
2818
+ const { fps } = (0, import_remotion29.useVideoConfig)();
2607
2819
  const items = splitBy === "letter" ? content.split("") : content.trim().split(/\s+/);
2608
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_remotion33.AbsoluteFill, { style: { display: "flex", ...positionStyles4(position) }, children: /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2820
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Fill, { style: { display: "flex", ...positionStyles4(position, safeInsetPct) }, children: /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2609
2821
  "div",
2610
2822
  {
2611
2823
  style: {
@@ -2613,19 +2825,22 @@ var SplitText = ({
2613
2825
  flexWrap: "wrap",
2614
2826
  justifyContent: "center",
2615
2827
  gap: splitBy === "letter" ? 0 : 12,
2828
+ maxWidth: `${Math.round(maxWidthPct * 100)}%`,
2616
2829
  fontSize,
2617
2830
  color,
2618
2831
  fontFamily,
2619
2832
  fontWeight: 700,
2620
- textAlign: "center"
2833
+ textAlign: "center",
2834
+ overflowWrap: "anywhere",
2835
+ wordBreak: "break-word"
2621
2836
  },
2622
2837
  children: items.map((t, i) => {
2623
- const progress = (0, import_remotion33.spring)({
2838
+ const progress = (0, import_remotion29.spring)({
2624
2839
  frame: frame - i * stagger,
2625
2840
  fps,
2626
2841
  config: { damping: 14, stiffness: 120, mass: 0.9 }
2627
2842
  });
2628
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2843
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2629
2844
  "span",
2630
2845
  {
2631
2846
  style: {
@@ -2653,19 +2868,19 @@ var SplitTextComponentMetadata = {
2653
2868
  };
2654
2869
 
2655
2870
  // src/components/composites/SubtitleText.tsx
2656
- var import_remotion34 = require("remotion");
2657
- var import_zod38 = require("zod");
2658
- var import_jsx_runtime36 = require("react/jsx-runtime");
2659
- var SubtitleTextPropsSchema = import_zod38.z.object({
2660
- text: import_zod38.z.string().max(200),
2661
- fontSize: import_zod38.z.number().min(12).max(80).default(36),
2662
- color: import_zod38.z.string().default("#FFFFFF"),
2663
- backgroundColor: import_zod38.z.string().default("rgba(0,0,0,0.7)"),
2664
- fontFamily: import_zod38.z.string().default("Inter"),
2665
- position: import_zod38.z.enum(["top", "bottom"]).default("bottom"),
2666
- maxWidth: import_zod38.z.number().min(200).max(1200).default(800),
2667
- padding: import_zod38.z.number().min(0).max(80).default(20),
2668
- highlightWords: import_zod38.z.array(import_zod38.z.string()).optional()
2871
+ var import_remotion30 = require("remotion");
2872
+ var import_zod41 = require("zod");
2873
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2874
+ var SubtitleTextPropsSchema = import_zod41.z.object({
2875
+ text: import_zod41.z.string().max(200),
2876
+ fontSize: import_zod41.z.number().min(12).max(80).default(36),
2877
+ color: import_zod41.z.string().default("#FFFFFF"),
2878
+ backgroundColor: import_zod41.z.string().default("rgba(0,0,0,0.7)"),
2879
+ fontFamily: import_zod41.z.string().default("Inter"),
2880
+ position: import_zod41.z.enum(["top", "bottom"]).default("bottom"),
2881
+ maxWidth: import_zod41.z.number().min(200).max(1200).default(800),
2882
+ padding: import_zod41.z.number().min(0).max(80).default(20),
2883
+ highlightWords: import_zod41.z.array(import_zod41.z.string()).optional()
2669
2884
  });
2670
2885
  function normalizeWord(w) {
2671
2886
  return w.toLowerCase().replace(/[^a-z0-9]/g, "");
@@ -2682,15 +2897,15 @@ var SubtitleText = ({
2682
2897
  highlightWords,
2683
2898
  __wavesDurationInFrames
2684
2899
  }) => {
2685
- const frame = (0, import_remotion34.useCurrentFrame)();
2900
+ const frame = (0, import_remotion30.useCurrentFrame)();
2686
2901
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2687
- const inFade = (0, import_remotion34.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2688
- const outFade = (0, import_remotion34.interpolate)(frame, [Math.max(0, total - 10), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2902
+ const inFade = (0, import_remotion30.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2903
+ const outFade = (0, import_remotion30.interpolate)(frame, [Math.max(0, total - 10), total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2689
2904
  const opacity = inFade * outFade;
2690
2905
  const highlights = new Set((highlightWords ?? []).map(normalizeWord));
2691
2906
  const tokens = text.split(/\s+/);
2692
2907
  const yStyle = position === "top" ? { top: 70 } : { bottom: 90 };
2693
- 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)(
2908
+ 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)(
2694
2909
  "div",
2695
2910
  {
2696
2911
  style: {
@@ -2709,7 +2924,7 @@ var SubtitleText = ({
2709
2924
  children: tokens.map((t, i) => {
2710
2925
  const n = normalizeWord(t);
2711
2926
  const isHighlighted = highlights.has(n);
2712
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { style: { color: isHighlighted ? "#FFD60A" : color, marginRight: 8 }, children: t }, i);
2927
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { style: { color: isHighlighted ? "#FFD60A" : color, marginRight: 8 }, children: t }, i);
2713
2928
  })
2714
2929
  }
2715
2930
  ) }) });
@@ -2722,17 +2937,19 @@ var SubtitleTextComponentMetadata = {
2722
2937
  };
2723
2938
 
2724
2939
  // src/components/composites/TikTokCaption.tsx
2725
- var import_remotion35 = require("remotion");
2726
- var import_zod39 = require("zod");
2727
- var import_jsx_runtime37 = require("react/jsx-runtime");
2728
- var TikTokCaptionPropsSchema = import_zod39.z.object({
2729
- text: import_zod39.z.string().max(150),
2730
- fontSize: import_zod39.z.number().min(12).max(120).default(48),
2731
- color: import_zod39.z.string().default("#FFFFFF"),
2732
- strokeColor: import_zod39.z.string().default("#000000"),
2733
- strokeWidth: import_zod39.z.number().min(0).max(10).default(3),
2734
- position: import_zod39.z.enum(["center", "bottom"]).default("center"),
2735
- highlightStyle: import_zod39.z.enum(["word", "bounce", "none"]).default("word")
2940
+ var import_remotion31 = require("remotion");
2941
+ var import_zod42 = require("zod");
2942
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2943
+ var TikTokCaptionPropsSchema = import_zod42.z.object({
2944
+ text: import_zod42.z.string().max(150),
2945
+ fontSize: import_zod42.z.number().min(12).max(120).default(48),
2946
+ color: import_zod42.z.string().default("#FFFFFF"),
2947
+ strokeColor: import_zod42.z.string().default("#000000"),
2948
+ strokeWidth: import_zod42.z.number().min(0).max(10).default(3),
2949
+ position: import_zod42.z.enum(["center", "bottom"]).default("center"),
2950
+ highlightStyle: import_zod42.z.enum(["word", "bounce", "none"]).default("word"),
2951
+ maxWidthPct: import_zod42.z.number().min(0.1).max(1).default(0.92),
2952
+ safeInsetPct: import_zod42.z.number().min(0).max(0.25).default(0.06)
2736
2953
  });
2737
2954
  var TikTokCaption = ({
2738
2955
  text,
@@ -2742,18 +2959,21 @@ var TikTokCaption = ({
2742
2959
  strokeWidth,
2743
2960
  position,
2744
2961
  highlightStyle,
2962
+ maxWidthPct,
2963
+ safeInsetPct,
2745
2964
  __wavesDurationInFrames
2746
2965
  }) => {
2747
- const frame = (0, import_remotion35.useCurrentFrame)();
2966
+ const frame = (0, import_remotion31.useCurrentFrame)();
2748
2967
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
2749
- const p = (0, import_remotion35.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2968
+ const p = (0, import_remotion31.interpolate)(frame, [0, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2750
2969
  const words = text.trim().split(/\s+/);
2751
2970
  const idx = highlightStyle === "none" ? -1 : Math.min(words.length - 1, Math.floor(p * words.length));
2752
- const yStyle = position === "bottom" ? { alignItems: "flex-end", paddingBottom: 140 } : { alignItems: "center" };
2753
- 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) => {
2971
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
2972
+ const yStyle = position === "bottom" ? { alignItems: "flex-end", paddingBottom: inset } : { alignItems: "center" };
2973
+ 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) => {
2754
2974
  const isActive = i === idx && highlightStyle !== "none";
2755
- const bounce = isActive && highlightStyle === "bounce" ? (0, import_remotion35.interpolate)(frame % 18, [0, 9, 18], [1, 1.08, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" }) : 1;
2756
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2975
+ const bounce = isActive && highlightStyle === "bounce" ? (0, import_remotion31.interpolate)(frame % 18, [0, 9, 18], [1, 1.08, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" }) : 1;
2976
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
2757
2977
  "span",
2758
2978
  {
2759
2979
  style: {
@@ -2778,20 +2998,20 @@ var TikTokCaptionComponentMetadata = {
2778
2998
  };
2779
2999
 
2780
3000
  // src/components/composites/ThirdLowerBanner.tsx
2781
- var import_remotion36 = require("remotion");
2782
- var import_zod40 = require("zod");
2783
- var import_jsx_runtime38 = require("react/jsx-runtime");
2784
- var ThirdLowerBannerPropsSchema = import_zod40.z.object({
2785
- name: import_zod40.z.string().max(50),
2786
- title: import_zod40.z.string().max(100),
2787
- backgroundColor: import_zod40.z.string().default("rgba(0,0,0,0.8)"),
2788
- primaryColor: import_zod40.z.string().default("#FFFFFF"),
2789
- secondaryColor: import_zod40.z.string().default("#CCCCCC"),
2790
- accentColor: import_zod40.z.string().default("#FF0000"),
2791
- showAvatar: import_zod40.z.boolean().default(false),
2792
- avatarSrc: import_zod40.z.string().optional()
3001
+ var import_remotion32 = require("remotion");
3002
+ var import_zod43 = require("zod");
3003
+ var import_jsx_runtime42 = require("react/jsx-runtime");
3004
+ var ThirdLowerBannerPropsSchema = import_zod43.z.object({
3005
+ name: import_zod43.z.string().max(50),
3006
+ title: import_zod43.z.string().max(100),
3007
+ backgroundColor: import_zod43.z.string().default("rgba(0,0,0,0.8)"),
3008
+ primaryColor: import_zod43.z.string().default("#FFFFFF"),
3009
+ secondaryColor: import_zod43.z.string().default("#CCCCCC"),
3010
+ accentColor: import_zod43.z.string().default("#FF0000"),
3011
+ showAvatar: import_zod43.z.boolean().default(false),
3012
+ avatarSrc: import_zod43.z.string().optional()
2793
3013
  });
2794
- var resolveAsset13 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion36.staticFile)(staticFileInputFromAssetPath(value));
3014
+ var resolveAsset13 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion32.staticFile)(staticFileInputFromAssetPath(value));
2795
3015
  var ThirdLowerBanner = ({
2796
3016
  name,
2797
3017
  title,
@@ -2802,11 +3022,11 @@ var ThirdLowerBanner = ({
2802
3022
  showAvatar,
2803
3023
  avatarSrc
2804
3024
  }) => {
2805
- const frame = (0, import_remotion36.useCurrentFrame)();
2806
- const slide = (0, import_remotion36.interpolate)(frame, [0, 18], [-600, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2807
- const opacity = (0, import_remotion36.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3025
+ const frame = (0, import_remotion32.useCurrentFrame)();
3026
+ const slide = (0, import_remotion32.interpolate)(frame, [0, 18], [-600, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3027
+ const opacity = (0, import_remotion32.interpolate)(frame, [0, 10], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2808
3028
  const avatar = showAvatar && typeof avatarSrc === "string" && avatarSrc.length > 0 ? avatarSrc : null;
2809
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_remotion36.AbsoluteFill, { children: /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
3029
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Fill, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
2810
3030
  "div",
2811
3031
  {
2812
3032
  style: {
@@ -2823,17 +3043,17 @@ var ThirdLowerBanner = ({
2823
3043
  backgroundColor
2824
3044
  },
2825
3045
  children: [
2826
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { width: 10, backgroundColor: accentColor } }),
2827
- avatar ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { width: 160, display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2828
- import_remotion36.Img,
3046
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { style: { width: 10, backgroundColor: accentColor } }),
3047
+ avatar ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { style: { width: 160, display: "flex", alignItems: "center", justifyContent: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
3048
+ import_remotion32.Img,
2829
3049
  {
2830
3050
  src: resolveAsset13(avatar),
2831
3051
  style: { width: 110, height: 110, borderRadius: 9999, objectFit: "cover" }
2832
3052
  }
2833
3053
  ) }) : null,
2834
- /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { style: { padding: "28px 36px", display: "flex", flexDirection: "column", justifyContent: "center" }, children: [
2835
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { color: primaryColor, fontSize: 54, fontWeight: 800, lineHeight: 1 }, children: name }),
2836
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { style: { marginTop: 10, color: secondaryColor, fontSize: 28, fontWeight: 600 }, children: title })
3054
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { style: { padding: "28px 36px", display: "flex", flexDirection: "column", justifyContent: "center" }, children: [
3055
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { style: { color: primaryColor, fontSize: 54, fontWeight: 800, lineHeight: 1 }, children: name }),
3056
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { style: { marginTop: 10, color: secondaryColor, fontSize: 28, fontWeight: 600 }, children: title })
2837
3057
  ] })
2838
3058
  ]
2839
3059
  }
@@ -2851,22 +3071,25 @@ var ThirdLowerBannerComponentMetadata = {
2851
3071
  };
2852
3072
 
2853
3073
  // src/components/composites/TypewriterText.tsx
2854
- var import_remotion37 = require("remotion");
2855
- var import_zod41 = require("zod");
2856
- var import_jsx_runtime39 = require("react/jsx-runtime");
2857
- var TypewriterTextPropsSchema = import_zod41.z.object({
2858
- content: import_zod41.z.string().max(500),
2859
- fontSize: import_zod41.z.number().min(8).max(200).default(48),
2860
- color: import_zod41.z.string().default("#FFFFFF"),
2861
- fontFamily: import_zod41.z.string().default("Inter"),
2862
- position: import_zod41.z.enum(["top", "center", "bottom"]).default("center"),
2863
- speed: import_zod41.z.number().min(0.5).max(5).default(2),
2864
- showCursor: import_zod41.z.boolean().default(true),
2865
- cursorColor: import_zod41.z.string().default("#FFFFFF")
3074
+ var import_remotion33 = require("remotion");
3075
+ var import_zod44 = require("zod");
3076
+ var import_jsx_runtime43 = require("react/jsx-runtime");
3077
+ var TypewriterTextPropsSchema = import_zod44.z.object({
3078
+ content: import_zod44.z.string().max(500),
3079
+ fontSize: import_zod44.z.number().min(8).max(200).default(48),
3080
+ color: import_zod44.z.string().default("#FFFFFF"),
3081
+ fontFamily: import_zod44.z.string().default("Inter"),
3082
+ position: import_zod44.z.enum(["top", "center", "bottom"]).default("center"),
3083
+ speed: import_zod44.z.number().min(0.5).max(5).default(2),
3084
+ showCursor: import_zod44.z.boolean().default(true),
3085
+ cursorColor: import_zod44.z.string().default("#FFFFFF"),
3086
+ maxWidthPct: import_zod44.z.number().min(0.1).max(1).default(0.9),
3087
+ safeInsetPct: import_zod44.z.number().min(0).max(0.25).default(0.06)
2866
3088
  });
2867
- var positionStyles5 = (position) => {
2868
- if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: 80 };
2869
- if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: 80 };
3089
+ var positionStyles5 = (position, safeInsetPct) => {
3090
+ const inset = `${(safeInsetPct * 100).toFixed(2)}%`;
3091
+ if (position === "top") return { justifyContent: "center", alignItems: "flex-start", paddingTop: inset };
3092
+ if (position === "bottom") return { justifyContent: "center", alignItems: "flex-end", paddingBottom: inset };
2870
3093
  return { justifyContent: "center", alignItems: "center" };
2871
3094
  };
2872
3095
  var TypewriterText = ({
@@ -2877,17 +3100,19 @@ var TypewriterText = ({
2877
3100
  position,
2878
3101
  speed,
2879
3102
  showCursor,
2880
- cursorColor
3103
+ cursorColor,
3104
+ maxWidthPct,
3105
+ safeInsetPct
2881
3106
  }) => {
2882
- const frame = (0, import_remotion37.useCurrentFrame)();
3107
+ const frame = (0, import_remotion33.useCurrentFrame)();
2883
3108
  const charCount = Math.min(content.length, Math.max(0, Math.floor(frame * speed)));
2884
3109
  const shown = content.slice(0, charCount);
2885
3110
  const cursorVisible = showCursor && charCount < content.length ? frame % 30 < 15 : false;
2886
3111
  const cursorOpacity = cursorVisible ? 1 : 0;
2887
- const cursorFade = (0, import_remotion37.interpolate)(frame % 30, [0, 5], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
2888
- 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: [
3112
+ const cursorFade = (0, import_remotion33.interpolate)(frame % 30, [0, 5], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3113
+ 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: [
2889
3114
  shown,
2890
- showCursor ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { style: { color: cursorColor, opacity: cursorOpacity * cursorFade }, children: "|" }) : null
3115
+ showCursor ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { style: { color: cursorColor, opacity: cursorOpacity * cursorFade }, children: "|" }) : null
2891
3116
  ] }) });
2892
3117
  };
2893
3118
  var TypewriterTextComponentMetadata = {
@@ -2902,21 +3127,21 @@ var TypewriterTextComponentMetadata = {
2902
3127
  };
2903
3128
 
2904
3129
  // src/components/composites/TwitterCard.tsx
2905
- var import_remotion38 = require("remotion");
2906
- var import_zod42 = require("zod");
2907
- var import_jsx_runtime40 = require("react/jsx-runtime");
2908
- var TwitterCardPropsSchema = import_zod42.z.object({
2909
- author: import_zod42.z.string().min(1),
2910
- handle: import_zod42.z.string().min(1),
2911
- avatarSrc: import_zod42.z.string().optional(),
2912
- tweet: import_zod42.z.string().max(280),
2913
- image: import_zod42.z.string().optional(),
2914
- timestamp: import_zod42.z.string().optional(),
2915
- verified: import_zod42.z.boolean().default(false)
3130
+ var import_remotion34 = require("remotion");
3131
+ var import_zod45 = require("zod");
3132
+ var import_jsx_runtime44 = require("react/jsx-runtime");
3133
+ var TwitterCardPropsSchema = import_zod45.z.object({
3134
+ author: import_zod45.z.string().min(1),
3135
+ handle: import_zod45.z.string().min(1),
3136
+ avatarSrc: import_zod45.z.string().optional(),
3137
+ tweet: import_zod45.z.string().max(280),
3138
+ image: import_zod45.z.string().optional(),
3139
+ timestamp: import_zod45.z.string().optional(),
3140
+ verified: import_zod45.z.boolean().default(false)
2916
3141
  });
2917
- var resolveAsset14 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion38.staticFile)(staticFileInputFromAssetPath(value));
3142
+ var resolveAsset14 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion34.staticFile)(staticFileInputFromAssetPath(value));
2918
3143
  var TwitterCard = ({ author, handle, avatarSrc, tweet, image, timestamp, verified }) => {
2919
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(import_remotion38.AbsoluteFill, { style: { backgroundColor: "#0B0F14", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
3144
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Fill, { style: { backgroundColor: "#0B0F14", display: "flex", justifyContent: "center", alignItems: "center" }, children: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
2920
3145
  "div",
2921
3146
  {
2922
3147
  style: {
@@ -2928,19 +3153,19 @@ var TwitterCard = ({ author, handle, avatarSrc, tweet, image, timestamp, verifie
2928
3153
  boxShadow: "0 30px 90px rgba(0,0,0,0.35)"
2929
3154
  },
2930
3155
  children: [
2931
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { style: { display: "flex", gap: 18, alignItems: "center" }, children: [
2932
- 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" } }),
2933
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { style: { display: "flex", flexDirection: "column" }, children: [
2934
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { style: { display: "flex", gap: 10, alignItems: "center" }, children: [
2935
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { fontSize: 34, fontWeight: 900, color: "#111827" }, children: author }),
2936
- verified ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { fontSize: 26, color: "#1D9BF0", fontWeight: 900 }, children: "\u2713" }) : null
3156
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { style: { display: "flex", gap: 18, alignItems: "center" }, children: [
3157
+ 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" } }),
3158
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { style: { display: "flex", flexDirection: "column" }, children: [
3159
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { style: { display: "flex", gap: 10, alignItems: "center" }, children: [
3160
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { fontSize: 34, fontWeight: 900, color: "#111827" }, children: author }),
3161
+ verified ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { fontSize: 26, color: "#1D9BF0", fontWeight: 900 }, children: "\u2713" }) : null
2937
3162
  ] }),
2938
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { fontSize: 26, color: "#6B7280", fontWeight: 800 }, children: handle })
3163
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { fontSize: 26, color: "#6B7280", fontWeight: 800 }, children: handle })
2939
3164
  ] })
2940
3165
  ] }),
2941
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { marginTop: 28, fontSize: 36, lineHeight: 1.25, color: "#111827", fontWeight: 700 }, children: tweet }),
2942
- 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,
2943
- timestamp ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { style: { marginTop: 22, fontSize: 22, color: "#6B7280", fontWeight: 700 }, children: timestamp }) : null
3166
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { marginTop: 28, fontSize: 36, lineHeight: 1.25, color: "#111827", fontWeight: 700 }, children: tweet }),
3167
+ 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,
3168
+ timestamp ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { style: { marginTop: 22, fontSize: 22, color: "#6B7280", fontWeight: 700 }, children: timestamp }) : null
2944
3169
  ]
2945
3170
  }
2946
3171
  ) });
@@ -2953,19 +3178,19 @@ var TwitterCardComponentMetadata = {
2953
3178
  };
2954
3179
 
2955
3180
  // src/components/composites/Watermark.tsx
2956
- var import_remotion39 = require("remotion");
2957
- var import_zod43 = require("zod");
2958
- var import_jsx_runtime41 = require("react/jsx-runtime");
2959
- var WatermarkPropsSchema = import_zod43.z.object({
2960
- type: import_zod43.z.enum(["logo", "text"]).default("logo"),
2961
- src: import_zod43.z.string().optional(),
2962
- text: import_zod43.z.string().optional(),
2963
- position: import_zod43.z.enum(["topLeft", "topRight", "bottomLeft", "bottomRight"]).default("bottomRight"),
2964
- opacity: import_zod43.z.number().min(0.1).max(1).default(0.5),
2965
- size: import_zod43.z.number().min(30).max(150).default(60),
2966
- color: import_zod43.z.string().default("#FFFFFF")
3181
+ var import_remotion35 = require("remotion");
3182
+ var import_zod46 = require("zod");
3183
+ var import_jsx_runtime45 = require("react/jsx-runtime");
3184
+ var WatermarkPropsSchema = import_zod46.z.object({
3185
+ type: import_zod46.z.enum(["logo", "text"]).default("logo"),
3186
+ src: import_zod46.z.string().optional(),
3187
+ text: import_zod46.z.string().optional(),
3188
+ position: import_zod46.z.enum(["topLeft", "topRight", "bottomLeft", "bottomRight"]).default("bottomRight"),
3189
+ opacity: import_zod46.z.number().min(0.1).max(1).default(0.5),
3190
+ size: import_zod46.z.number().min(30).max(150).default(60),
3191
+ color: import_zod46.z.string().default("#FFFFFF")
2967
3192
  });
2968
- var resolveAsset15 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion39.staticFile)(staticFileInputFromAssetPath(value));
3193
+ var resolveAsset15 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion35.staticFile)(staticFileInputFromAssetPath(value));
2969
3194
  function posStyle(position) {
2970
3195
  const offset = 30;
2971
3196
  if (position === "topLeft") return { left: offset, top: offset };
@@ -2980,8 +3205,8 @@ var Watermark = ({ type, src, text, position, opacity, size, color }) => {
2980
3205
  opacity,
2981
3206
  pointerEvents: "none"
2982
3207
  };
2983
- 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)(
2984
- import_remotion39.Img,
3208
+ 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)(
3209
+ import_remotion35.Img,
2985
3210
  {
2986
3211
  src: resolveAsset15(src),
2987
3212
  style: { ...style, width: size, height: size, objectFit: "contain" }
@@ -2995,19 +3220,20 @@ var WatermarkComponentMetadata = {
2995
3220
  llmGuidance: "Use subtle opacity (0.3-0.6). bottomRight is standard.",
2996
3221
  examples: [
2997
3222
  { type: "text", text: "@depths.ai", position: "bottomRight", opacity: 0.4, size: 60 },
2998
- { type: "logo", src: "/assets/logo.png", position: "topLeft", opacity: 0.5, size: 70 }
3223
+ { type: "logo", src: "/assets/logo.svg", position: "topLeft", opacity: 0.5, size: 70 }
2999
3224
  ]
3000
3225
  };
3001
3226
 
3002
3227
  // src/components/composites/WipeTransition.tsx
3003
- var import_remotion40 = require("remotion");
3004
- var import_zod44 = require("zod");
3005
- var import_jsx_runtime42 = require("react/jsx-runtime");
3006
- var WipeTransitionPropsSchema = import_zod44.z.object({
3007
- durationInFrames: import_zod44.z.number().int().min(10).max(60).default(30),
3008
- direction: import_zod44.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
3009
- softEdge: import_zod44.z.boolean().default(false),
3010
- phase: import_zod44.z.enum(["in", "out", "inOut"]).default("inOut")
3228
+ var import_react9 = __toESM(require("react"));
3229
+ var import_remotion36 = require("remotion");
3230
+ var import_zod47 = require("zod");
3231
+ var import_jsx_runtime46 = require("react/jsx-runtime");
3232
+ var WipeTransitionPropsSchema = import_zod47.z.object({
3233
+ durationInFrames: import_zod47.z.number().int().min(10).max(60).default(30),
3234
+ direction: import_zod47.z.enum(["left", "right", "up", "down", "diagonal"]).default("right"),
3235
+ softEdge: import_zod47.z.boolean().default(false),
3236
+ phase: import_zod47.z.enum(["in", "out", "inOut"]).default("inOut")
3011
3237
  });
3012
3238
  function clipFor2(direction, p) {
3013
3239
  if (direction === "left") return `inset(0 ${100 * (1 - p)}% 0 0)`;
@@ -3024,20 +3250,21 @@ var WipeTransition = ({
3024
3250
  children,
3025
3251
  __wavesDurationInFrames
3026
3252
  }) => {
3027
- const frame = (0, import_remotion40.useCurrentFrame)();
3253
+ const layers = import_react9.default.Children.toArray(children);
3254
+ const frame = (0, import_remotion36.useCurrentFrame)();
3028
3255
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
3029
3256
  const d = Math.min(durationInFrames, total);
3030
3257
  let clipPath;
3031
3258
  if (phase === "in" || phase === "inOut") {
3032
- const t = (0, import_remotion40.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3259
+ const t = (0, import_remotion36.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3033
3260
  clipPath = clipFor2(direction, t);
3034
3261
  }
3035
3262
  if (phase === "out" || phase === "inOut") {
3036
3263
  const start = Math.max(0, total - d);
3037
- const t = (0, import_remotion40.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3264
+ const t = (0, import_remotion36.interpolate)(frame, [start, total], [1, 0], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3038
3265
  clipPath = clipFor2(direction, t);
3039
3266
  }
3040
- return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_remotion40.AbsoluteFill, { style: { clipPath, filter: softEdge ? "blur(0.4px)" : void 0 }, children });
3267
+ 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)) });
3041
3268
  };
3042
3269
  var WipeTransitionComponentMetadata = {
3043
3270
  kind: "composite",
@@ -3049,18 +3276,18 @@ var WipeTransitionComponentMetadata = {
3049
3276
  };
3050
3277
 
3051
3278
  // src/components/composites/YouTubeThumbnail.tsx
3052
- var import_remotion41 = require("remotion");
3053
- var import_zod45 = require("zod");
3054
- var import_jsx_runtime43 = require("react/jsx-runtime");
3055
- var YouTubeThumbnailPropsSchema = import_zod45.z.object({
3056
- backgroundImage: import_zod45.z.string().min(1),
3057
- title: import_zod45.z.string().max(60),
3058
- subtitle: import_zod45.z.string().max(40).optional(),
3059
- thumbnailFace: import_zod45.z.string().optional(),
3060
- accentColor: import_zod45.z.string().default("#FF0000"),
3061
- style: import_zod45.z.enum(["bold", "minimal", "dramatic"]).default("bold")
3279
+ var import_remotion37 = require("remotion");
3280
+ var import_zod48 = require("zod");
3281
+ var import_jsx_runtime47 = require("react/jsx-runtime");
3282
+ var YouTubeThumbnailPropsSchema = import_zod48.z.object({
3283
+ backgroundImage: import_zod48.z.string().min(1),
3284
+ title: import_zod48.z.string().max(60),
3285
+ subtitle: import_zod48.z.string().max(40).optional(),
3286
+ thumbnailFace: import_zod48.z.string().optional(),
3287
+ accentColor: import_zod48.z.string().default("#FF0000"),
3288
+ style: import_zod48.z.enum(["bold", "minimal", "dramatic"]).default("bold")
3062
3289
  });
3063
- var resolveAsset16 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion41.staticFile)(staticFileInputFromAssetPath(value));
3290
+ var resolveAsset16 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion37.staticFile)(staticFileInputFromAssetPath(value));
3064
3291
  var YouTubeThumbnail = ({
3065
3292
  backgroundImage,
3066
3293
  title,
@@ -3069,18 +3296,18 @@ var YouTubeThumbnail = ({
3069
3296
  accentColor,
3070
3297
  style
3071
3298
  }) => {
3072
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_remotion41.AbsoluteFill, { children: [
3073
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_remotion41.Img, { src: resolveAsset16(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover" } }),
3074
- style === "dramatic" ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_remotion41.AbsoluteFill, { style: { backgroundColor: "rgba(0,0,0,0.35)" } }) : null,
3075
- thumbnailFace ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3076
- import_remotion41.Img,
3299
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(Fill, { children: [
3300
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(import_remotion37.Img, { src: resolveAsset16(backgroundImage), style: { width: "100%", height: "100%", objectFit: "cover" } }),
3301
+ style === "dramatic" ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { style: { position: "absolute", inset: 0, backgroundColor: "rgba(0,0,0,0.35)" } }) : null,
3302
+ thumbnailFace ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3303
+ import_remotion37.Img,
3077
3304
  {
3078
3305
  src: resolveAsset16(thumbnailFace),
3079
3306
  style: { position: "absolute", right: 60, bottom: 0, width: 520, height: 720, objectFit: "cover" }
3080
3307
  }
3081
3308
  ) : null,
3082
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { style: { position: "absolute", left: 70, top: 90, width: 1100 }, children: [
3083
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(
3309
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("div", { style: { position: "absolute", left: 70, top: 90, width: 1100 }, children: [
3310
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(
3084
3311
  "div",
3085
3312
  {
3086
3313
  style: {
@@ -3095,9 +3322,9 @@ var YouTubeThumbnail = ({
3095
3322
  children: title
3096
3323
  }
3097
3324
  ),
3098
- 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
3325
+ 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
3099
3326
  ] }),
3100
- 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
3327
+ 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
3101
3328
  ] });
3102
3329
  };
3103
3330
  var YouTubeThumbnailComponentMetadata = {
@@ -3108,37 +3335,39 @@ var YouTubeThumbnailComponentMetadata = {
3108
3335
  };
3109
3336
 
3110
3337
  // src/components/composites/VideoWithOverlay.tsx
3111
- var import_remotion42 = require("remotion");
3112
- var import_zod46 = require("zod");
3113
- var import_jsx_runtime44 = require("react/jsx-runtime");
3114
- var OverlaySchema = import_zod46.z.object({
3115
- type: import_zod46.z.enum(["text", "logo", "gradient"]),
3116
- content: import_zod46.z.string().optional(),
3117
- opacity: import_zod46.z.number().min(0).max(1).default(0.3),
3118
- position: import_zod46.z.enum(["top", "bottom", "center", "full"]).default("bottom")
3338
+ var import_remotion38 = require("remotion");
3339
+ var import_zod49 = require("zod");
3340
+ var import_jsx_runtime48 = require("react/jsx-runtime");
3341
+ var OverlaySchema = import_zod49.z.object({
3342
+ type: import_zod49.z.enum(["text", "logo", "gradient"]),
3343
+ content: import_zod49.z.string().optional(),
3344
+ opacity: import_zod49.z.number().min(0).max(1).default(0.3),
3345
+ position: import_zod49.z.enum(["top", "bottom", "center", "full"]).default("bottom")
3119
3346
  });
3120
- var VideoWithOverlayPropsSchema = import_zod46.z.object({
3121
- src: import_zod46.z.string().min(1),
3347
+ var VideoWithOverlayPropsSchema = import_zod49.z.object({
3348
+ src: import_zod49.z.string().min(1),
3122
3349
  overlay: OverlaySchema.optional(),
3123
- volume: import_zod46.z.number().min(0).max(1).default(1),
3124
- playbackRate: import_zod46.z.number().min(0.5).max(2).default(1)
3350
+ volume: import_zod49.z.number().min(0).max(1).default(1),
3351
+ playbackRate: import_zod49.z.number().min(0.5).max(2).default(1)
3125
3352
  });
3126
- var resolveAsset17 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion42.staticFile)(staticFileInputFromAssetPath(value));
3353
+ var resolveAsset17 = (value) => isRemoteAssetPath(value) ? value : (0, import_remotion38.staticFile)(staticFileInputFromAssetPath(value));
3127
3354
  var VideoWithOverlay = ({ src, overlay, volume, playbackRate }) => {
3128
- const frame = (0, import_remotion42.useCurrentFrame)();
3129
- const fade = (0, import_remotion42.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3130
- const overlayNode = overlay ? overlay.type === "gradient" ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3131
- import_remotion42.AbsoluteFill,
3355
+ const frame = (0, import_remotion38.useCurrentFrame)();
3356
+ const fade = (0, import_remotion38.interpolate)(frame, [0, 20], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3357
+ const overlayFill = { position: "absolute", inset: 0 };
3358
+ const overlayNode = overlay ? overlay.type === "gradient" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3359
+ "div",
3132
3360
  {
3133
3361
  style: {
3362
+ ...overlayFill,
3134
3363
  opacity: overlay.opacity,
3135
3364
  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))"
3136
3365
  }
3137
3366
  }
3138
- ) : 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;
3139
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_remotion42.AbsoluteFill, { children: [
3140
- /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(
3141
- import_remotion42.Video,
3367
+ ) : 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;
3368
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(Fill, { children: [
3369
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
3370
+ import_remotion38.Video,
3142
3371
  {
3143
3372
  src: resolveAsset17(src),
3144
3373
  style: { width: "100%", height: "100%", objectFit: "cover", opacity: fade },
@@ -3157,13 +3386,14 @@ var VideoWithOverlayComponentMetadata = {
3157
3386
  };
3158
3387
 
3159
3388
  // src/components/composites/ZoomTransition.tsx
3160
- var import_remotion43 = require("remotion");
3161
- var import_zod47 = require("zod");
3162
- var import_jsx_runtime45 = require("react/jsx-runtime");
3163
- var ZoomTransitionPropsSchema = import_zod47.z.object({
3164
- durationInFrames: import_zod47.z.number().int().min(10).max(60).default(30),
3165
- type: import_zod47.z.enum(["zoomIn", "zoomOut"]).default("zoomIn"),
3166
- phase: import_zod47.z.enum(["in", "out", "inOut"]).default("inOut")
3389
+ var import_react10 = __toESM(require("react"));
3390
+ var import_remotion39 = require("remotion");
3391
+ var import_zod50 = require("zod");
3392
+ var import_jsx_runtime49 = require("react/jsx-runtime");
3393
+ var ZoomTransitionPropsSchema = import_zod50.z.object({
3394
+ durationInFrames: import_zod50.z.number().int().min(10).max(60).default(30),
3395
+ type: import_zod50.z.enum(["zoomIn", "zoomOut"]).default("zoomIn"),
3396
+ phase: import_zod50.z.enum(["in", "out", "inOut"]).default("inOut")
3167
3397
  });
3168
3398
  var ZoomTransition = ({
3169
3399
  durationInFrames,
@@ -3172,7 +3402,8 @@ var ZoomTransition = ({
3172
3402
  children,
3173
3403
  __wavesDurationInFrames
3174
3404
  }) => {
3175
- const frame = (0, import_remotion43.useCurrentFrame)();
3405
+ const layers = import_react10.default.Children.toArray(children);
3406
+ const frame = (0, import_remotion39.useCurrentFrame)();
3176
3407
  const total = Math.max(1, __wavesDurationInFrames ?? 1);
3177
3408
  const d = Math.min(durationInFrames, total);
3178
3409
  let opacity = 1;
@@ -3180,17 +3411,17 @@ var ZoomTransition = ({
3180
3411
  const enterFrom = type === "zoomIn" ? 1.2 : 0.85;
3181
3412
  const exitTo = type === "zoomIn" ? 1.25 : 0.75;
3182
3413
  if (phase === "in" || phase === "inOut") {
3183
- const t = (0, import_remotion43.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3414
+ const t = (0, import_remotion39.interpolate)(frame, [0, d], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3184
3415
  scale *= enterFrom + (1 - enterFrom) * t;
3185
3416
  opacity *= t;
3186
3417
  }
3187
3418
  if (phase === "out" || phase === "inOut") {
3188
3419
  const start = Math.max(0, total - d);
3189
- const t = (0, import_remotion43.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3420
+ const t = (0, import_remotion39.interpolate)(frame, [start, total], [0, 1], { extrapolateLeft: "clamp", extrapolateRight: "clamp" });
3190
3421
  scale *= 1 + (exitTo - 1) * t;
3191
3422
  opacity *= 1 - t;
3192
3423
  }
3193
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_remotion43.AbsoluteFill, { style: { opacity, transform: `scale(${scale})` }, children });
3424
+ 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)) });
3194
3425
  };
3195
3426
  var ZoomTransitionComponentMetadata = {
3196
3427
  kind: "composite",
@@ -3219,6 +3450,14 @@ function registerBuiltInComponents() {
3219
3450
  metadata: BoxComponentMetadata
3220
3451
  });
3221
3452
  }
3453
+ if (!globalRegistry.has("Frame")) {
3454
+ globalRegistry.register({
3455
+ type: "Frame",
3456
+ component: Frame,
3457
+ propsSchema: FramePropsSchema,
3458
+ metadata: FrameComponentMetadata
3459
+ });
3460
+ }
3222
3461
  if (!globalRegistry.has("Stack")) {
3223
3462
  globalRegistry.register({
3224
3463
  type: "Stack",
@@ -3235,6 +3474,22 @@ function registerBuiltInComponents() {
3235
3474
  metadata: GridComponentMetadata
3236
3475
  });
3237
3476
  }
3477
+ if (!globalRegistry.has("Layers")) {
3478
+ globalRegistry.register({
3479
+ type: "Layers",
3480
+ component: Layers,
3481
+ propsSchema: LayersPropsSchema,
3482
+ metadata: LayersComponentMetadata
3483
+ });
3484
+ }
3485
+ if (!globalRegistry.has("Layer")) {
3486
+ globalRegistry.register({
3487
+ type: "Layer",
3488
+ component: Layer,
3489
+ propsSchema: LayerPropsSchema,
3490
+ metadata: LayerComponentMetadata
3491
+ });
3492
+ }
3238
3493
  if (!globalRegistry.has("Image")) {
3239
3494
  globalRegistry.register({
3240
3495
  type: "Image",