@remotion/promo-pages 4.0.489 → 4.0.491

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/Homepage.js +1018 -556
  2. package/dist/components/Homepage.js +5 -17
  3. package/dist/components/homepage/CommunityStatsItems.js +1 -1
  4. package/dist/components/homepage/Demo/Card.d.ts +3 -3
  5. package/dist/components/homepage/Demo/DemoRender.d.ts +1 -1
  6. package/dist/components/homepage/Demo/DisplayedEmoji.js +12 -4
  7. package/dist/components/homepage/Demo/math.d.ts +1 -1
  8. package/dist/components/homepage/GitHubButton.js +1 -1
  9. package/dist/components/homepage/MakeVideosAgentically.d.ts +1 -0
  10. package/dist/components/homepage/MakeVideosAgentically.js +4 -6
  11. package/dist/components/homepage/MakeVideosInteractively.d.ts +2 -0
  12. package/dist/components/homepage/MakeVideosInteractively.js +3 -6
  13. package/dist/components/homepage/MakeVideosLinks.js +1 -1
  14. package/dist/components/homepage/MakeVideosProgrammatically.d.ts +2 -0
  15. package/dist/components/homepage/MakeVideosProgrammatically.js +2 -5
  16. package/dist/components/homepage/Pricing.d.ts +6 -1
  17. package/dist/components/homepage/Pricing.js +12 -2
  18. package/dist/components/homepage/WriteInReact.js +1 -1
  19. package/dist/components/team/TrustSection.js +1 -1
  20. package/dist/design.js +355 -194
  21. package/dist/experts.js +340 -168
  22. package/dist/homepage/Pricing.js +372 -211
  23. package/dist/prompts/PromptsGallery.js +352 -191
  24. package/dist/prompts/PromptsShow.js +358 -197
  25. package/dist/prompts/PromptsSubmit.js +344 -183
  26. package/dist/team.js +329 -168
  27. package/dist/template-modal-content.js +372 -211
  28. package/dist/templates.js +373 -209
  29. package/package.json +13 -13
package/dist/experts.js CHANGED
@@ -1153,13 +1153,12 @@ import { jsx as jsx34 } from "react/jsx-runtime";
1153
1153
  import { jsx as jsx35 } from "react/jsx-runtime";
1154
1154
  import React39, { useMemo as useMemo37 } from "react";
1155
1155
  import { jsx as jsx36 } from "react/jsx-runtime";
1156
- import {
1157
- Children,
1156
+ import React41, {
1158
1157
  forwardRef as forwardRef14,
1159
1158
  useMemo as useMemo38
1160
1159
  } from "react";
1161
1160
  import React40 from "react";
1162
- import { jsx as jsx37 } from "react/jsx-runtime";
1161
+ import { jsx as jsx37, jsxs as jsxs3, Fragment } from "react/jsx-runtime";
1163
1162
  import React42 from "react";
1164
1163
  import { forwardRef as forwardRef16, useCallback as useCallback25, useContext as useContext39 } from "react";
1165
1164
  import {
@@ -2049,26 +2048,20 @@ var continueRenderInternal = ({
2049
2048
  if (typeof handle !== "number") {
2050
2049
  throw new TypeError("The parameter passed into continueRender() must be the return value of delayRender() which is a number. Got: " + JSON.stringify(handle));
2051
2050
  }
2052
- scope.remotion_delayRenderHandles = scope.remotion_delayRenderHandles.filter((h) => {
2053
- if (h === handle) {
2054
- if (environment.isRendering && scope !== undefined) {
2055
- if (!scope.remotion_delayRenderTimeouts[handle]) {
2056
- return false;
2057
- }
2058
- const { label: label2, startTime, timeout } = scope.remotion_delayRenderTimeouts[handle];
2059
- clearTimeout(timeout);
2060
- const message = [
2061
- label2 ? `"${label2}"` : "A handle",
2062
- DELAY_RENDER_CLEAR_TOKEN,
2063
- `${Date.now() - startTime}ms`
2064
- ].filter(truthy).join(" ");
2065
- Log.verbose({ logLevel, tag: "delayRender()" }, message);
2066
- delete scope.remotion_delayRenderTimeouts[handle];
2067
- }
2068
- return false;
2069
- }
2070
- return true;
2071
- });
2051
+ const handleExists = scope.remotion_delayRenderHandles.includes(handle);
2052
+ const timeoutEntry = scope.remotion_delayRenderTimeouts[handle];
2053
+ if (handleExists && environment.isRendering && timeoutEntry) {
2054
+ const { label: label2, startTime, timeout } = timeoutEntry;
2055
+ clearTimeout(timeout);
2056
+ const message = [
2057
+ label2 ? `"${label2}"` : "A handle",
2058
+ DELAY_RENDER_CLEAR_TOKEN,
2059
+ `${Date.now() - startTime}ms`
2060
+ ].filter(truthy).join(" ");
2061
+ Log.verbose({ logLevel, tag: "delayRender()" }, message);
2062
+ delete scope.remotion_delayRenderTimeouts[handle];
2063
+ }
2064
+ scope.remotion_delayRenderHandles = scope.remotion_delayRenderHandles.filter((h) => h !== handle);
2072
2065
  if (scope.remotion_delayRenderHandles.length === 0) {
2073
2066
  scope.remotion_renderReady = true;
2074
2067
  }
@@ -2341,7 +2334,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2341
2334
  var addSequenceStackTraces = (component) => {
2342
2335
  componentsToAddStacksTo.push(component);
2343
2336
  };
2344
- var VERSION = "4.0.489";
2337
+ var VERSION = "4.0.491";
2345
2338
  var checkMultipleRemotionVersions = () => {
2346
2339
  if (typeof globalThis === "undefined") {
2347
2340
  return;
@@ -2722,7 +2715,8 @@ var transformSchema = {
2722
2715
  max: 100,
2723
2716
  step: 0.01,
2724
2717
  default: 1,
2725
- description: "Scale"
2718
+ description: "Scale",
2719
+ defaultKeyframeOutput: "perceptual-scale"
2726
2720
  },
2727
2721
  "style.rotate": {
2728
2722
  type: "rotation-css",
@@ -2953,7 +2947,7 @@ var SequenceManagerRefContext = React11.createContext({
2953
2947
  current: []
2954
2948
  });
2955
2949
  var makeSequencePropsSubscriptionKey = (key) => {
2956
- return `${key.nodePath.join(".")}.${key.sequenceKeys.join(".")}.${key.effectKeys.map((keys) => keys.join(".")).join(".")}`;
2950
+ return `${key.absolutePath}\x00${key.nodePath.join(".")}\x00${key.sequenceKeys.join(".")}\x00${key.effectKeys.map((keys) => keys.join(".")).join(".")}`;
2957
2951
  };
2958
2952
  var VisualModePropStatusesContext = React11.createContext({
2959
2953
  propStatuses: {}
@@ -3526,8 +3520,20 @@ var serializeStringInterpolationValue = ({
3526
3520
  }
3527
3521
  return values.slice(0, dimensions).map((value, index) => `${stringifyNumber(value)}${units[index]}`).join(" ");
3528
3522
  };
3523
+ var toSignedArea = (scale) => {
3524
+ if (scale === 0) {
3525
+ return 0;
3526
+ }
3527
+ return Math.sign(scale) * scale * scale;
3528
+ };
3529
+ var fromSignedArea = (area) => {
3530
+ if (area === 0) {
3531
+ return 0;
3532
+ }
3533
+ return Math.sign(area) * Math.sqrt(Math.abs(area));
3534
+ };
3529
3535
  function interpolateFunction(input, inputRange, outputRange, options) {
3530
- const { extrapolateLeft, extrapolateRight, easing } = options;
3536
+ const { extrapolateLeft, extrapolateRight, easing, output } = options;
3531
3537
  let result = input;
3532
3538
  const [inputMin, inputMax] = inputRange;
3533
3539
  const [outputMin, outputMax] = outputRange;
@@ -3558,7 +3564,13 @@ function interpolateFunction(input, inputRange, outputRange, options) {
3558
3564
  }
3559
3565
  result = (result - inputMin) / (inputMax - inputMin);
3560
3566
  result = easing(result);
3561
- result = result * (outputMax - outputMin) + outputMin;
3567
+ if (output === "perceptual-scale") {
3568
+ const signedAreaMin = toSignedArea(outputMin);
3569
+ const signedAreaMax = toSignedArea(outputMax);
3570
+ result = fromSignedArea(result * (signedAreaMax - signedAreaMin) + signedAreaMin);
3571
+ } else {
3572
+ result = result * (outputMax - outputMin) + outputMin;
3573
+ }
3562
3574
  return result;
3563
3575
  }
3564
3576
  function findRange(input, inputRange) {
@@ -3571,6 +3583,9 @@ function findRange(input, inputRange) {
3571
3583
  return i - 1;
3572
3584
  }
3573
3585
  var defaultEasing = (num) => num;
3586
+ var resolveOutputOption = (output) => {
3587
+ return output ?? "linear";
3588
+ };
3574
3589
  var shouldExtendRightForEasing = (easing) => {
3575
3590
  return easing.remotionShouldExtendRight === true;
3576
3591
  };
@@ -3592,12 +3607,14 @@ var interpolateSegment = ({
3592
3607
  outputRange,
3593
3608
  easing,
3594
3609
  extrapolateLeft,
3595
- extrapolateRight
3610
+ extrapolateRight,
3611
+ output
3596
3612
  }) => {
3597
3613
  return interpolateFunction(input, inputRange, outputRange, {
3598
3614
  easing,
3599
3615
  extrapolateLeft,
3600
- extrapolateRight: input > inputRange[1] && extrapolateRight === "clamp" && shouldExtendRightForEasing(easing) ? "extend" : extrapolateRight
3616
+ extrapolateRight: input > inputRange[1] && extrapolateRight === "clamp" && shouldExtendRightForEasing(easing) ? "extend" : extrapolateRight,
3617
+ output
3601
3618
  });
3602
3619
  };
3603
3620
  var interpolateNumber = ({
@@ -3606,6 +3623,7 @@ var interpolateNumber = ({
3606
3623
  outputRange,
3607
3624
  options
3608
3625
  }) => {
3626
+ const output = resolveOutputOption(options?.output);
3609
3627
  if (inputRange.length === 1) {
3610
3628
  return outputRange[0];
3611
3629
  }
@@ -3630,7 +3648,8 @@ var interpolateNumber = ({
3630
3648
  outputRange: [outputRange[range], outputRange[range + 1]],
3631
3649
  easing,
3632
3650
  extrapolateLeft,
3633
- extrapolateRight
3651
+ extrapolateRight,
3652
+ output
3634
3653
  });
3635
3654
  for (let segmentIndex = 0;segmentIndex < range; segmentIndex++) {
3636
3655
  const previousEasing = resolveEasingForSegment({
@@ -3650,7 +3669,8 @@ var interpolateNumber = ({
3650
3669
  outputRange: [outputRange[segmentIndex], outputRange[segmentIndex + 1]],
3651
3670
  easing: previousEasing,
3652
3671
  extrapolateLeft,
3653
- extrapolateRight: "extend"
3672
+ extrapolateRight: "extend",
3673
+ output
3654
3674
  });
3655
3675
  result += continuedSegmentValue - outputRange[segmentIndex + 1];
3656
3676
  }
@@ -3698,14 +3718,18 @@ var interpolateString = ({
3698
3718
  }
3699
3719
  }
3700
3720
  }
3701
- return serializeStringInterpolationValue({
3702
- kind,
3703
- values: [0, 0, 0].map((_, axis) => interpolateNumber({
3721
+ const values = [0, 0, 0];
3722
+ for (let axis = 0;axis < dimensions; axis++) {
3723
+ values[axis] = interpolateNumber({
3704
3724
  input,
3705
3725
  inputRange,
3706
3726
  outputRange: parsedOutputRange.map((parsed) => parsed.values[axis]),
3707
3727
  options
3708
- })),
3728
+ });
3729
+ }
3730
+ return serializeStringInterpolationValue({
3731
+ kind,
3732
+ values,
3709
3733
  units,
3710
3734
  dimensions
3711
3735
  });
@@ -3789,6 +3813,12 @@ function assertValidInterpolatePosterizeOption(posterize) {
3789
3813
  throw new Error(`posterize must be a positive finite number, but got ${posterize}`);
3790
3814
  }
3791
3815
  }
3816
+ function assertValidInterpolateOutputOption(output) {
3817
+ if (output === undefined || output === "linear" || output === "perceptual-scale") {
3818
+ return;
3819
+ }
3820
+ throw new Error(`output must be "linear" or "perceptual-scale", but got ${String(output)}`);
3821
+ }
3792
3822
  function interpolate(input, inputRange, outputRange, options) {
3793
3823
  if (typeof input === "undefined") {
3794
3824
  throw new Error("input can not be undefined");
@@ -3806,6 +3836,7 @@ function interpolate(input, inputRange, outputRange, options) {
3806
3836
  checkValidInputRange(inputRange);
3807
3837
  assertValidInterpolateEasingOption(options?.easing, inputRange.length);
3808
3838
  assertValidInterpolatePosterizeOption(options?.posterize);
3839
+ assertValidInterpolateOutputOption(options?.output);
3809
3840
  if (typeof input !== "number") {
3810
3841
  throw new TypeError("Cannot interpolate an input which is not a number");
3811
3842
  }
@@ -4750,6 +4781,7 @@ var interpolateKeyframedStatus = ({
4750
4781
  easing: easing.map((e) => easingToFn({ easing: e, forceSpringAllowTail })),
4751
4782
  extrapolateLeft: clamping.left,
4752
4783
  extrapolateRight: clamping.right,
4784
+ output: status.output,
4753
4785
  posterize: status.posterize
4754
4786
  });
4755
4787
  } catch {
@@ -4990,7 +5022,7 @@ var getFlatSchemaWithAllKeys = (schema) => {
4990
5022
  const out = {};
4991
5023
  const addKey = (key, field) => {
4992
5024
  if (key in out) {
4993
- throw new Error(`Duplicate key "${key}" in schema: discriminated union variants must not share keys`);
5025
+ return;
4994
5026
  }
4995
5027
  out[key] = field;
4996
5028
  };
@@ -5528,6 +5560,7 @@ var RegularSequenceRefForwardingFunction = ({
5528
5560
  src: isMedia.data.src,
5529
5561
  getStack: () => stackRef.current,
5530
5562
  startMediaFrom: startMediaFrom ?? isMedia.data.startMediaFrom,
5563
+ mediaFrameAtSequenceZero,
5531
5564
  volume: isMedia.data.volumes,
5532
5565
  refForOutline: refForOutline ?? null,
5533
5566
  isInsideSeries,
@@ -5591,6 +5624,7 @@ var RegularSequenceRefForwardingFunction = ({
5591
5624
  isInsideSeries,
5592
5625
  registeredFrozenFrame,
5593
5626
  startMediaFrom,
5627
+ mediaFrameAtSequenceZero,
5594
5628
  frozenMediaFrame
5595
5629
  ]);
5596
5630
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
@@ -7541,7 +7575,9 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7541
7575
  return;
7542
7576
  }
7543
7577
  if (data === undefined) {
7544
- current.src = EMPTY_AUDIO;
7578
+ if (current.src !== EMPTY_AUDIO) {
7579
+ current.src = EMPTY_AUDIO;
7580
+ }
7545
7581
  return;
7546
7582
  }
7547
7583
  if (!data) {
@@ -7610,7 +7646,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7610
7646
  if (prevA.id === id) {
7611
7647
  const isTheSame = compareProps(aud, prevA.props) && prevA.premounting === premounting && prevA.postmounting === postmounting;
7612
7648
  if (isTheSame) {
7613
- return prevA;
7649
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
7614
7650
  }
7615
7651
  changed = true;
7616
7652
  return {
@@ -7622,7 +7658,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7622
7658
  audioMounted
7623
7659
  };
7624
7660
  }
7625
- return prevA;
7661
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
7626
7662
  });
7627
7663
  if (changed) {
7628
7664
  rerenderAudios();
@@ -7661,16 +7697,19 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
7661
7697
  unregisterAudio,
7662
7698
  updateAudio
7663
7699
  ]);
7700
+ const sharedAudioTagElements = useMemo21(() => {
7701
+ return refs.map(({ id, ref }) => {
7702
+ return /* @__PURE__ */ jsx19("audio", {
7703
+ ref,
7704
+ preload: "metadata",
7705
+ src: EMPTY_AUDIO
7706
+ }, id);
7707
+ });
7708
+ }, [refs]);
7664
7709
  return /* @__PURE__ */ jsxs22(SharedAudioTagsContext.Provider, {
7665
7710
  value: audioTagsValue,
7666
7711
  children: [
7667
- refs.map(({ id, ref }) => {
7668
- return /* @__PURE__ */ jsx19("audio", {
7669
- ref,
7670
- preload: "metadata",
7671
- src: EMPTY_AUDIO
7672
- }, id);
7673
- }),
7712
+ sharedAudioTagElements,
7674
7713
  children
7675
7714
  ]
7676
7715
  });
@@ -8131,6 +8170,7 @@ var useMediaInTimeline = ({
8131
8170
  showInTimeline: true,
8132
8171
  nonce: nonce.get(),
8133
8172
  startMediaFrom: 0 - startsAt,
8173
+ mediaFrameAtSequenceZero: null,
8134
8174
  doesVolumeChange,
8135
8175
  loopDisplay,
8136
8176
  playbackRate,
@@ -9764,16 +9804,16 @@ var isMissingPaintRecordError = (error2) => {
9764
9804
  return error2 instanceof DOMException && error2.name === "InvalidStateError";
9765
9805
  };
9766
9806
  var missingPaintRecordMessage = "HtmlInCanvas: Expected the element to be inside the viewport during rendering, but Chrome had no cached paint record for it.";
9767
- var resizeOffscreenCanvas = ({
9768
- offscreen,
9807
+ var resizePaintTarget = ({
9808
+ target,
9769
9809
  width,
9770
9810
  height
9771
9811
  }) => {
9772
- if (offscreen.width !== width) {
9773
- offscreen.width = width;
9812
+ if (target.width !== width) {
9813
+ target.width = width;
9774
9814
  }
9775
- if (offscreen.height !== height) {
9776
- offscreen.height = height;
9815
+ if (target.height !== height) {
9816
+ target.height = height;
9777
9817
  }
9778
9818
  };
9779
9819
  var defaultOnPaint = ({
@@ -9789,7 +9829,7 @@ var defaultOnPaint = ({
9789
9829
  const transform = ctx.drawElementImage(elementImage, 0, 0);
9790
9830
  element.style.transform = transform.toString();
9791
9831
  };
9792
- var HtmlInCanvasAncestorContext = createContext23(false);
9832
+ var HtmlInCanvasAncestorContext = createContext23(null);
9793
9833
  var HtmlInCanvasContent = forwardRef9(({
9794
9834
  width,
9795
9835
  height,
@@ -9801,20 +9841,22 @@ var HtmlInCanvasContent = forwardRef9(({
9801
9841
  controls,
9802
9842
  style
9803
9843
  }, ref) => {
9804
- const isInsideAncestorHtmlInCanvas = useContext31(HtmlInCanvasAncestorContext);
9844
+ const ancestor = useContext31(HtmlInCanvasAncestorContext);
9805
9845
  assertHtmlInCanvasDimensions(width, height);
9806
9846
  const resolvedPixelDensity = resolveHtmlInCanvasPixelDensity(pixelDensity);
9807
9847
  const canvasWidth = Math.ceil(width * resolvedPixelDensity);
9808
9848
  const canvasHeight = Math.ceil(height * resolvedPixelDensity);
9809
9849
  const { continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
9810
- const { isRendering } = useRemotionEnvironment();
9850
+ const { isClientSideRendering, isRendering } = useRemotionEnvironment();
9851
+ const canRetryMissingPaintRecord = !isRendering || isClientSideRendering;
9852
+ const usesDirectLayoutCanvas = onPaint === undefined && onInit === undefined;
9811
9853
  if (!isHtmlInCanvasSupported()) {
9812
9854
  cancelRender2(new Error(HTML_IN_CANVAS_UNSUPPORTED_MESSAGE));
9813
9855
  }
9814
9856
  const canvas2dRef = useRef22(null);
9815
- const offscreenRef = useRef22(null);
9857
+ const paintTargetRef = useRef22(null);
9816
9858
  const divRef = useRef22(null);
9817
- const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}`;
9859
+ const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}-${usesDirectLayoutCanvas ? "direct" : "offscreen"}`;
9818
9860
  const setLayoutCanvasRef = useCallback16((node) => {
9819
9861
  canvas2dRef.current = node;
9820
9862
  if (typeof ref === "function") {
@@ -9837,17 +9879,19 @@ var HtmlInCanvasContent = forwardRef9(({
9837
9879
  const initializedRef = useRef22(false);
9838
9880
  const onInitCleanupRef = useRef22(null);
9839
9881
  const unmountedRef = useRef22(false);
9882
+ const ancestorRef = useRef22(ancestor);
9883
+ ancestorRef.current = ancestor;
9840
9884
  const onPaintCb = useCallback16(async () => {
9841
9885
  const element = divRef.current;
9842
9886
  if (!element) {
9843
9887
  throw new Error("Canvas or scene element not found");
9844
9888
  }
9845
- const offscreen = offscreenRef.current;
9846
- if (!offscreen) {
9847
- throw new Error("HtmlInCanvas: offscreen canvas not ready (transferControlToOffscreen failed or canvas is remounting)");
9889
+ const paintTarget = paintTargetRef.current;
9890
+ if (!paintTarget) {
9891
+ throw new Error("HtmlInCanvas: paint target is not ready because the canvas is remounting");
9848
9892
  }
9849
- resizeOffscreenCanvas({
9850
- offscreen,
9893
+ resizePaintTarget({
9894
+ target: paintTarget,
9851
9895
  width: canvasWidth,
9852
9896
  height: canvasHeight
9853
9897
  });
@@ -9858,22 +9902,30 @@ var HtmlInCanvasContent = forwardRef9(({
9858
9902
  }
9859
9903
  const handle = delayRender("onPaint");
9860
9904
  if (!initializedRef.current) {
9861
- let initImage = null;
9862
- try {
9863
- initImage = placeholderCanvas.captureElementImage(element);
9864
- } catch (error2) {
9865
- if (isMissingPaintRecordError(error2) && !isRendering) {} else if (isMissingPaintRecordError(error2)) {
9866
- throw new Error(missingPaintRecordMessage);
9867
- } else {
9905
+ const currentOnInit = onInitRef.current;
9906
+ if (!currentOnInit) {
9907
+ initializedRef.current = true;
9908
+ } else {
9909
+ let initImage;
9910
+ try {
9911
+ initImage = placeholderCanvas.captureElementImage(element);
9912
+ } catch (error2) {
9913
+ if (isMissingPaintRecordError(error2) && canRetryMissingPaintRecord) {
9914
+ continueRender2(handle);
9915
+ return;
9916
+ }
9917
+ if (isMissingPaintRecordError(error2)) {
9918
+ throw new Error(missingPaintRecordMessage);
9919
+ }
9868
9920
  throw error2;
9869
9921
  }
9870
- }
9871
- if (initImage) {
9872
9922
  initializedRef.current = true;
9873
- const currentOnInit = onInitRef.current;
9874
- if (currentOnInit) {
9923
+ try {
9924
+ if (paintTarget instanceof HTMLCanvasElement) {
9925
+ throw new Error("HtmlInCanvas: onInit requires an OffscreenCanvas paint target");
9926
+ }
9875
9927
  const cleanup = await currentOnInit({
9876
- canvas: offscreen,
9928
+ canvas: paintTarget,
9877
9929
  element,
9878
9930
  elementImage: initImage,
9879
9931
  pixelDensity: resolvedPixelDensity
@@ -9886,15 +9938,16 @@ var HtmlInCanvasContent = forwardRef9(({
9886
9938
  } else {
9887
9939
  onInitCleanupRef.current = cleanup;
9888
9940
  }
9941
+ } finally {
9942
+ initImage.close();
9889
9943
  }
9890
9944
  }
9891
9945
  }
9892
- const handler = onPaintRef.current ?? defaultOnPaint;
9893
9946
  let elImage;
9894
9947
  try {
9895
9948
  elImage = placeholderCanvas.captureElementImage(element);
9896
9949
  } catch (error2) {
9897
- if (isMissingPaintRecordError(error2) && !isRendering) {
9950
+ if (isMissingPaintRecordError(error2) && canRetryMissingPaintRecord) {
9898
9951
  continueRender2(handle);
9899
9952
  return;
9900
9953
  }
@@ -9903,20 +9956,41 @@ var HtmlInCanvasContent = forwardRef9(({
9903
9956
  }
9904
9957
  throw error2;
9905
9958
  }
9906
- await handler({
9907
- canvas: offscreen,
9908
- element,
9909
- elementImage: elImage,
9910
- pixelDensity: resolvedPixelDensity
9911
- });
9912
- await runEffectChain({
9913
- state: chainState.get(canvasWidth, canvasHeight),
9914
- source: offscreen,
9915
- effects: effectsRef.current,
9916
- output: offscreen,
9917
- width: canvasWidth,
9918
- height: canvasHeight
9919
- });
9959
+ try {
9960
+ const currentOnPaint = onPaintRef.current;
9961
+ if (currentOnPaint) {
9962
+ if (paintTarget instanceof HTMLCanvasElement) {
9963
+ throw new Error("HtmlInCanvas: onPaint requires an OffscreenCanvas paint target");
9964
+ }
9965
+ const paintResult = currentOnPaint({
9966
+ canvas: paintTarget,
9967
+ element,
9968
+ elementImage: elImage,
9969
+ pixelDensity: resolvedPixelDensity
9970
+ });
9971
+ if (paintResult) {
9972
+ await paintResult;
9973
+ }
9974
+ } else {
9975
+ defaultOnPaint({
9976
+ canvas: paintTarget,
9977
+ element,
9978
+ elementImage: elImage,
9979
+ pixelDensity: resolvedPixelDensity
9980
+ });
9981
+ }
9982
+ await runEffectChain({
9983
+ state: chainState.get(canvasWidth, canvasHeight),
9984
+ source: paintTarget,
9985
+ effects: effectsRef.current,
9986
+ output: paintTarget,
9987
+ width: canvasWidth,
9988
+ height: canvasHeight
9989
+ });
9990
+ } finally {
9991
+ elImage.close();
9992
+ }
9993
+ ancestorRef.current?.requestParentPaint();
9920
9994
  continueRender2(handle);
9921
9995
  } catch (error2) {
9922
9996
  cancelRender2(error2);
@@ -9928,7 +10002,7 @@ var HtmlInCanvasContent = forwardRef9(({
9928
10002
  continueRender2,
9929
10003
  cancelRender2,
9930
10004
  resolvedPixelDensity,
9931
- isRendering
10005
+ canRetryMissingPaintRecord
9932
10006
  ]);
9933
10007
  useLayoutEffect9(() => {
9934
10008
  const placeholder = canvas2dRef.current;
@@ -9936,10 +10010,10 @@ var HtmlInCanvasContent = forwardRef9(({
9936
10010
  throw new Error("Canvas not found");
9937
10011
  }
9938
10012
  placeholder.layoutSubtree = true;
9939
- const offscreen = placeholder.transferControlToOffscreen();
9940
- offscreenRef.current = offscreen;
9941
- resizeOffscreenCanvas({
9942
- offscreen,
10013
+ const paintTarget = usesDirectLayoutCanvas ? placeholder : placeholder.transferControlToOffscreen();
10014
+ paintTargetRef.current = paintTarget;
10015
+ resizePaintTarget({
10016
+ target: paintTarget,
9943
10017
  width: canvasWidth,
9944
10018
  height: canvasHeight
9945
10019
  });
@@ -9948,13 +10022,19 @@ var HtmlInCanvasContent = forwardRef9(({
9948
10022
  placeholder.addEventListener("paint", onPaintCb);
9949
10023
  return () => {
9950
10024
  placeholder.removeEventListener("paint", onPaintCb);
9951
- offscreenRef.current = null;
10025
+ paintTargetRef.current = null;
9952
10026
  initializedRef.current = false;
9953
10027
  unmountedRef.current = true;
9954
10028
  onInitCleanupRef.current?.();
9955
10029
  onInitCleanupRef.current = null;
9956
10030
  };
9957
- }, [onPaintCb, cancelRender2, canvasWidth, canvasHeight]);
10031
+ }, [
10032
+ onPaintCb,
10033
+ cancelRender2,
10034
+ canvasWidth,
10035
+ canvasHeight,
10036
+ usesDirectLayoutCanvas
10037
+ ]);
9958
10038
  const onPaintChangedRef = useRef22(false);
9959
10039
  useLayoutEffect9(() => {
9960
10040
  if (!onPaintChangedRef.current) {
@@ -9993,11 +10073,15 @@ var HtmlInCanvasContent = forwardRef9(({
9993
10073
  ...style ?? {}
9994
10074
  };
9995
10075
  }, [height, style, width]);
9996
- if (isInsideAncestorHtmlInCanvas) {
9997
- throw new Error("<HtmlInCanvas> effects cannot be nested together. Chrome will only display the outer effect. Consider merging the effects into one if you can.");
9998
- }
10076
+ const ancestorValue = useMemo30(() => {
10077
+ return {
10078
+ requestParentPaint: () => {
10079
+ canvas2dRef.current?.requestPaint?.();
10080
+ }
10081
+ };
10082
+ }, []);
9999
10083
  return /* @__PURE__ */ jsx25(HtmlInCanvasAncestorContext.Provider, {
10000
- value: true,
10084
+ value: ancestorValue,
10001
10085
  children: /* @__PURE__ */ jsx25("canvas", {
10002
10086
  ref: setLayoutCanvasRef,
10003
10087
  width: canvasWidth,
@@ -10869,6 +10953,22 @@ var Img = withInteractivitySchema({
10869
10953
  supportsEffects: true
10870
10954
  });
10871
10955
  addSequenceStackTraces(Img);
10956
+ var sourcePathToIdentityPrefix = (packageName) => {
10957
+ if (packageName === "remotion") {
10958
+ return "dev.remotion.remotion";
10959
+ }
10960
+ if (packageName.startsWith("@remotion/")) {
10961
+ const normalizedPackageName = packageName.slice("@remotion/".length).replace(/-([a-z])/g, (_, char) => char.toUpperCase());
10962
+ return `dev.remotion.${normalizedPackageName}`;
10963
+ }
10964
+ throw new Error(`Unsupported Remotion package name: ${packageName}`);
10965
+ };
10966
+ var makeRemotionComponentIdentity = ({
10967
+ packageName,
10968
+ componentName
10969
+ }) => {
10970
+ return `${sourcePathToIdentityPrefix(packageName)}.${componentName}`;
10971
+ };
10872
10972
  var interactiveElementSchema = {
10873
10973
  ...baseSchema,
10874
10974
  ...transformSchema,
@@ -10882,6 +10982,11 @@ var setRef = (ref, value) => {
10882
10982
  ref.current = value;
10883
10983
  }
10884
10984
  };
10985
+ var withSchema = (options) => {
10986
+ const Wrapped = withInteractivitySchema(options);
10987
+ addSequenceStackTraces(Wrapped);
10988
+ return Wrapped;
10989
+ };
10885
10990
  var makeInteractiveElement = (tag, displayName) => {
10886
10991
  const Inner = forwardRef12((propsWithControls, ref) => {
10887
10992
  const {
@@ -10921,15 +11026,17 @@ var makeInteractiveElement = (tag, displayName) => {
10921
11026
  });
10922
11027
  });
10923
11028
  Inner.displayName = displayName;
10924
- const Wrapped = withInteractivitySchema({
11029
+ const Wrapped = withSchema({
10925
11030
  Component: Inner,
10926
11031
  componentName: displayName,
10927
- componentIdentity: `dev.remotion.remotion.${displayName.slice(1, -1)}`,
11032
+ componentIdentity: makeRemotionComponentIdentity({
11033
+ packageName: "remotion",
11034
+ componentName: displayName.slice(1, -1)
11035
+ }),
10928
11036
  schema: interactiveElementSchema,
10929
11037
  supportsEffects: false
10930
11038
  });
10931
11039
  Wrapped.displayName = displayName;
10932
- addSequenceStackTraces(Wrapped);
10933
11040
  return Wrapped;
10934
11041
  };
10935
11042
  var Interactive = {
@@ -10938,7 +11045,8 @@ var Interactive = {
10938
11045
  textSchema,
10939
11046
  premountSchema,
10940
11047
  sequenceSchema,
10941
- withSchema: withInteractivitySchema,
11048
+ withSchema,
11049
+ _internalMakeRemotionComponentIdentity: makeRemotionComponentIdentity,
10942
11050
  A: makeInteractiveElement("a", "<Interactive.A>"),
10943
11051
  Article: makeInteractiveElement("article", "<Interactive.Article>"),
10944
11052
  Aside: makeInteractiveElement("aside", "<Interactive.Aside>"),
@@ -12343,66 +12451,130 @@ var flattenChildren = (children) => {
12343
12451
  return flatChildren;
12344
12452
  }, []);
12345
12453
  };
12346
- var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
12454
+ var seriesSequenceSchema = {
12455
+ durationInFrames: Interactive.baseSchema.durationInFrames,
12456
+ name: Interactive.sequenceSchema.name,
12457
+ hidden: Interactive.sequenceSchema.hidden,
12458
+ showInTimeline: Interactive.sequenceSchema.showInTimeline,
12459
+ freeze: Interactive.baseSchema.freeze,
12460
+ layout: Interactive.sequenceSchema.layout
12461
+ };
12462
+ var SeriesSequenceInner = forwardRef14(({
12463
+ offset = 0,
12464
+ className = "",
12465
+ stack = null,
12466
+ _remotionInternalRender = null,
12467
+ ...props2
12468
+ }, ref) => {
12347
12469
  useRequireToBeInsideSeries();
12470
+ if (_remotionInternalRender) {
12471
+ return _remotionInternalRender({ ...props2, offset, className: className || undefined, stack }, ref);
12472
+ }
12348
12473
  return /* @__PURE__ */ jsx37(IsNotInsideSeriesProvider, {
12349
- children
12474
+ children: props2.children
12350
12475
  });
12351
- };
12352
- var SeriesSequence = forwardRef14(SeriesSequenceRefForwardingFunction);
12476
+ });
12477
+ var SeriesSequence = Interactive.withSchema({
12478
+ Component: SeriesSequenceInner,
12479
+ componentName: "<Series.Sequence>",
12480
+ componentIdentity: "dev.remotion.remotion.Series.Sequence",
12481
+ schema: seriesSequenceSchema,
12482
+ supportsEffects: false
12483
+ });
12353
12484
  var SequenceWithoutSchemaWithRef = SequenceWithoutSchema;
12485
+ var validateSeriesSequenceProps = ({
12486
+ durationInFrames,
12487
+ offset: offsetProp,
12488
+ index,
12489
+ childrenLength
12490
+ }) => {
12491
+ const debugInfo = `index = ${index}, duration = ${durationInFrames}`;
12492
+ if (index !== childrenLength - 1 || durationInFrames !== Infinity) {
12493
+ validateDurationInFrames(durationInFrames, {
12494
+ component: `of a <Series.Sequence /> component`,
12495
+ allowFloats: true
12496
+ });
12497
+ }
12498
+ const offset = offsetProp ?? 0;
12499
+ if (Number.isNaN(offset)) {
12500
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`);
12501
+ }
12502
+ if (!Number.isFinite(offset)) {
12503
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
12504
+ }
12505
+ if (offset % 1 !== 0) {
12506
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
12507
+ }
12508
+ return offset;
12509
+ };
12354
12510
  var SeriesInner = (props2) => {
12355
12511
  const childrenValue = useMemo38(() => {
12356
- let startFrame = 0;
12357
12512
  const flattenedChildren = flattenChildren(props2.children);
12358
- return Children.map(flattenedChildren, (child, i) => {
12513
+ const renderChildren = (i, startFrame) => {
12514
+ if (i === flattenedChildren.length) {
12515
+ return null;
12516
+ }
12517
+ const child = flattenedChildren[i];
12359
12518
  const castedChild = child;
12360
12519
  if (typeof castedChild === "string") {
12361
12520
  if (castedChild.trim() === "") {
12362
- return null;
12521
+ return renderChildren(i + 1, startFrame);
12363
12522
  }
12364
12523
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but you passed a string "${castedChild}"`);
12365
12524
  }
12366
12525
  if (castedChild.type !== SeriesSequence) {
12367
12526
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but got ${castedChild} instead`);
12368
12527
  }
12369
- const debugInfo = `index = ${i}, duration = ${castedChild.props.durationInFrames}`;
12370
- const durationInFramesProp = castedChild.props.durationInFrames;
12371
- const {
12372
- durationInFrames,
12373
- children: _children,
12374
- from,
12375
- name,
12376
- ...passedProps
12377
- } = castedChild.props;
12378
- if (i !== flattenedChildren.length - 1 || durationInFramesProp !== Infinity) {
12379
- validateDurationInFrames(durationInFramesProp, {
12380
- component: `of a <Series.Sequence /> component`,
12381
- allowFloats: true
12382
- });
12383
- }
12384
- const offset = castedChild.props.offset ?? 0;
12385
- if (Number.isNaN(offset)) {
12386
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`);
12387
- }
12388
- if (!Number.isFinite(offset)) {
12389
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
12390
- }
12391
- if (offset % 1 !== 0) {
12392
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
12393
- }
12394
- const currentStartFrame = startFrame + offset;
12395
- startFrame += durationInFramesProp + offset;
12396
- return /* @__PURE__ */ jsx37(SequenceWithoutSchemaWithRef, {
12397
- ref: castedChild.ref,
12398
- name: name || "<Series.Sequence>",
12399
- _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
12400
- from: currentStartFrame,
12401
- durationInFrames: durationInFramesProp,
12402
- ...passedProps,
12403
- children: child
12528
+ const castedElement = castedChild;
12529
+ validateSeriesSequenceProps({
12530
+ durationInFrames: castedElement.props.durationInFrames,
12531
+ offset: castedElement.props.offset,
12532
+ index: i,
12533
+ childrenLength: flattenedChildren.length
12404
12534
  });
12405
- });
12535
+ return React41.cloneElement(castedElement, {
12536
+ _remotionInternalRender: (resolvedProps, ref) => {
12537
+ const durationInFramesProp = resolvedProps.durationInFrames;
12538
+ const {
12539
+ durationInFrames: _durationInFrames,
12540
+ children: sequenceChildren,
12541
+ offset: offsetProp,
12542
+ controls,
12543
+ stack,
12544
+ from: _from,
12545
+ name,
12546
+ ...passedProps
12547
+ } = resolvedProps;
12548
+ const offset = validateSeriesSequenceProps({
12549
+ durationInFrames: durationInFramesProp,
12550
+ offset: offsetProp,
12551
+ index: i,
12552
+ childrenLength: flattenedChildren.length
12553
+ });
12554
+ const currentStartFrame = startFrame + offset;
12555
+ const nextStartFrame = startFrame + durationInFramesProp + offset;
12556
+ return /* @__PURE__ */ jsxs3(Fragment, {
12557
+ children: [
12558
+ /* @__PURE__ */ jsx37(SequenceWithoutSchemaWithRef, {
12559
+ ref,
12560
+ name: name || "<Series.Sequence>",
12561
+ _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
12562
+ _remotionInternalStack: stack ?? undefined,
12563
+ controls: controls ?? undefined,
12564
+ from: currentStartFrame,
12565
+ durationInFrames: durationInFramesProp,
12566
+ ...passedProps,
12567
+ children: /* @__PURE__ */ jsx37(IsNotInsideSeriesProvider, {
12568
+ children: sequenceChildren
12569
+ })
12570
+ }),
12571
+ renderChildren(i + 1, nextStartFrame)
12572
+ ]
12573
+ });
12574
+ }
12575
+ });
12576
+ };
12577
+ return renderChildren(0, 0);
12406
12578
  }, [props2.children]);
12407
12579
  return /* @__PURE__ */ jsx37(IsInsideSeriesContainer, {
12408
12580
  children: /* @__PURE__ */ jsx37(Sequence, {
@@ -13001,7 +13173,7 @@ addSequenceStackTraces(Composition);
13001
13173
  addSequenceStackTraces(Folder);
13002
13174
 
13003
13175
  // src/components/team/TeamCards.tsx
13004
- import { jsx as jsx40, jsxs as jsxs3 } from "react/jsx-runtime";
13176
+ import { jsx as jsx40, jsxs as jsxs4 } from "react/jsx-runtime";
13005
13177
  var LinkedInLogo = () => {
13006
13178
  return /* @__PURE__ */ jsx40("svg", {
13007
13179
  xmlns: "http://www.w3.org/2000/svg",
@@ -13056,14 +13228,14 @@ var TeamMemberCard = ({
13056
13228
  github,
13057
13229
  email
13058
13230
  }) => {
13059
- return /* @__PURE__ */ jsxs3("div", {
13231
+ return /* @__PURE__ */ jsxs4("div", {
13060
13232
  className: "flex-1 rounded-[15px] flex flex-col md:flex-row gap-2 md:gap-4",
13061
13233
  children: [
13062
13234
  /* @__PURE__ */ jsx40("img", {
13063
13235
  src: image,
13064
13236
  className: "w-[250px] h-[250px] rounded-xl border-effect"
13065
13237
  }),
13066
- /* @__PURE__ */ jsxs3("div", {
13238
+ /* @__PURE__ */ jsxs4("div", {
13067
13239
  className: "flex flex-col border-effect px-4 py-3 bg-pane",
13068
13240
  children: [
13069
13241
  /* @__PURE__ */ jsx40("h2", {
@@ -13081,7 +13253,7 @@ var TeamMemberCard = ({
13081
13253
  /* @__PURE__ */ jsx40("div", {
13082
13254
  className: "flex-1"
13083
13255
  }),
13084
- /* @__PURE__ */ jsxs3("div", {
13256
+ /* @__PURE__ */ jsxs4("div", {
13085
13257
  className: "gap-3 flex flex-row",
13086
13258
  children: [
13087
13259
  /* @__PURE__ */ jsx40("a", {
@@ -13116,7 +13288,7 @@ var TeamMemberCard = ({
13116
13288
  });
13117
13289
  };
13118
13290
  var TeamCardsLayout = () => {
13119
- return /* @__PURE__ */ jsxs3("div", {
13291
+ return /* @__PURE__ */ jsxs4("div", {
13120
13292
  className: "flex flex-col gap-12 md:gap-4",
13121
13293
  children: [
13122
13294
  /* @__PURE__ */ jsx40(TeamMemberCard, {
@@ -13184,7 +13356,7 @@ var PersonalWebsite = () => {
13184
13356
  };
13185
13357
 
13186
13358
  // src/components/experts/ExpertsPage.tsx
13187
- import { jsx as jsx43, jsxs as jsxs4, Fragment } from "react/jsx-runtime";
13359
+ import { jsx as jsx43, jsxs as jsxs6, Fragment as Fragment2 } from "react/jsx-runtime";
13188
13360
  var arrowIcon = {
13189
13361
  height: 16,
13190
13362
  marginLeft: 10
@@ -13215,7 +13387,7 @@ var wrapperStyle = {
13215
13387
  paddingBottom: 100
13216
13388
  };
13217
13389
  var ExpertCard = ({ expert, Link }) => {
13218
- return /* @__PURE__ */ jsxs4("div", {
13390
+ return /* @__PURE__ */ jsxs6("div", {
13219
13391
  className: "flex-1 rounded-[15px] flex flex-col md:flex-row gap-2 md:gap-4",
13220
13392
  children: [
13221
13393
  /* @__PURE__ */ jsx43(Link, {
@@ -13227,7 +13399,7 @@ var ExpertCard = ({ expert, Link }) => {
13227
13399
  className: "w-[250px] h-[250px] rounded-xl border-effect object-cover"
13228
13400
  })
13229
13401
  }),
13230
- /* @__PURE__ */ jsxs4("div", {
13402
+ /* @__PURE__ */ jsxs6("div", {
13231
13403
  className: "flex flex-col border-effect px-4 py-3 bg-pane flex-1",
13232
13404
  children: [
13233
13405
  /* @__PURE__ */ jsx43(Link, {
@@ -13242,10 +13414,10 @@ var ExpertCard = ({ expert, Link }) => {
13242
13414
  className: "mt-2 mb-3 leading-normal font-brand",
13243
13415
  children: expert.description
13244
13416
  }),
13245
- /* @__PURE__ */ jsxs4("div", {
13417
+ /* @__PURE__ */ jsxs6("div", {
13246
13418
  className: "leading-6 mb-4",
13247
13419
  children: [
13248
- /* @__PURE__ */ jsxs4(Link, {
13420
+ /* @__PURE__ */ jsxs6(Link, {
13249
13421
  className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center",
13250
13422
  href: `/experts/${expert.slug}`,
13251
13423
  children: [
@@ -13262,10 +13434,10 @@ var ExpertCard = ({ expert, Link }) => {
13262
13434
  })
13263
13435
  ]
13264
13436
  }),
13265
- expert.videocall ? /* @__PURE__ */ jsxs4(Fragment, {
13437
+ expert.videocall ? /* @__PURE__ */ jsxs6(Fragment2, {
13266
13438
  children: [
13267
13439
  /* @__PURE__ */ jsx43("br", {}),
13268
- /* @__PURE__ */ jsxs4("a", {
13440
+ /* @__PURE__ */ jsxs6("a", {
13269
13441
  className: "no-underline text-brand font-brand font-bold inline-flex flex-row items-center",
13270
13442
  target: "_blank",
13271
13443
  href: expert.videocall,
@@ -13290,7 +13462,7 @@ var ExpertCard = ({ expert, Link }) => {
13290
13462
  /* @__PURE__ */ jsx43("div", {
13291
13463
  className: "flex-1"
13292
13464
  }),
13293
- /* @__PURE__ */ jsxs4("div", {
13465
+ /* @__PURE__ */ jsxs6("div", {
13294
13466
  className: "gap-3 flex flex-row flex-wrap",
13295
13467
  children: [
13296
13468
  expert.website ? /* @__PURE__ */ jsx43("a", {
@@ -13346,14 +13518,14 @@ var ExpertsPageContent = ({ Link }) => {
13346
13518
  }, []);
13347
13519
  return /* @__PURE__ */ jsx43("div", {
13348
13520
  className: "relative bg-[var(--background)]",
13349
- children: /* @__PURE__ */ jsxs4("div", {
13521
+ children: /* @__PURE__ */ jsxs6("div", {
13350
13522
  style: wrapperStyle,
13351
13523
  children: [
13352
13524
  /* @__PURE__ */ jsx43("h1", {
13353
13525
  className: "experts-pagetitle",
13354
13526
  children: "Find a Remotion Expert"
13355
13527
  }),
13356
- /* @__PURE__ */ jsxs4("p", {
13528
+ /* @__PURE__ */ jsxs6("p", {
13357
13529
  className: "experts-tagline",
13358
13530
  children: [
13359
13531
  "Get help by booking a call or hiring these freelancers to work on your Remotion project.",
@@ -13371,16 +13543,16 @@ var ExpertsPageContent = ({ Link }) => {
13371
13543
  })
13372
13544
  })
13373
13545
  }),
13374
- /* @__PURE__ */ jsxs4("div", {
13546
+ /* @__PURE__ */ jsxs6("div", {
13375
13547
  style: infoCard,
13376
13548
  children: [
13377
- /* @__PURE__ */ jsxs4("svg", {
13549
+ /* @__PURE__ */ jsxs6("svg", {
13378
13550
  viewBox: "0 0 661 512",
13379
13551
  fill: "none",
13380
13552
  xmlns: "http://www.w3.org/2000/svg",
13381
13553
  style: cardIcon,
13382
13554
  children: [
13383
- /* @__PURE__ */ jsxs4("g", {
13555
+ /* @__PURE__ */ jsxs6("g", {
13384
13556
  clipPath: "url(#clip0_1_2)",
13385
13557
  children: [
13386
13558
  /* @__PURE__ */ jsx43("path", {
@@ -13405,7 +13577,7 @@ var ExpertsPageContent = ({ Link }) => {
13405
13577
  })
13406
13578
  ]
13407
13579
  }),
13408
- /* @__PURE__ */ jsxs4("div", {
13580
+ /* @__PURE__ */ jsxs6("div", {
13409
13581
  style: { flex: 1 },
13410
13582
  children: [
13411
13583
  "Remotion Experts are independent freelancers with proven Remotion expertise and portfolios. However,",