@remotion/promo-pages 4.0.417 → 4.0.419

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/Homepage.js CHANGED
@@ -967,7 +967,7 @@ var useIsPlayer = () => {
967
967
  function truthy(value) {
968
968
  return Boolean(value);
969
969
  }
970
- var VERSION = "4.0.417";
970
+ var VERSION = "4.0.419";
971
971
  var checkMultipleRemotionVersions = () => {
972
972
  if (typeof globalThis === "undefined") {
973
973
  return;
@@ -19411,7 +19411,7 @@ SelectSeparator2.displayName = Separator.displayName;
19411
19411
  var Switch = ({ active, onToggle }) => {
19412
19412
  return /* @__PURE__ */ jsx252("div", {
19413
19413
  "data-active": active,
19414
- className: "h-[34px] transition-all rounded-full w-[56px] border-2 border-b-4 bg-gray-200 p-[2px] cursor-pointer data-[active=true]:bg-brand border-black relative",
19414
+ className: "h-[34px] transition-all rounded-full w-[56px] border-2 border-b-4 bg-gray-200 p-[2px] cursor-pointer data-[active=true]:bg-brand border-black relative shrink-0",
19415
19415
  onClick: onToggle,
19416
19416
  children: /* @__PURE__ */ jsx252("div", {
19417
19417
  "data-active": active,
@@ -22060,7 +22060,7 @@ var PricingSlider = ({ value, onChange, min: min2, max: max2, step = 1 }) => {
22060
22060
  step,
22061
22061
  value,
22062
22062
  onChange: (e) => onChange(Number(e.target.value)),
22063
- className: "pricing-slider flex-1",
22063
+ className: "pricing-slider w-full",
22064
22064
  style: {
22065
22065
  background: `linear-gradient(to right, var(--color-brand) 0%, var(--color-brand) ${percentage}%, var(--background) ${percentage}%, var(--background) 100%)`
22066
22066
  }
@@ -22233,7 +22233,7 @@ var SectionCheckbox = ({ checked, onChange, title, subtitle, children }) => {
22233
22233
  className: "flex-1"
22234
22234
  }),
22235
22235
  /* @__PURE__ */ jsx47("div", {
22236
- className: cn2("fontbrand text-muted transition-opacity duration-150", checked ? "opacity-0" : "opacity-100"),
22236
+ className: cn2("fontbrand text-muted transition-opacity duration-150", checked ? "hidden" : "opacity-100"),
22237
22237
  children: "Not selected"
22238
22238
  })
22239
22239
  ]
@@ -22320,27 +22320,33 @@ var CompanyPricing = () => {
22320
22320
  children: /* @__PURE__ */ jsx47("div", {
22321
22321
  className: "overflow-hidden",
22322
22322
  children: /* @__PURE__ */ jsxs9("div", {
22323
- className: "flex flex-row items-center gap-4 w-full py-3",
22323
+ className: "flex flex-row items-center gap-3 sm:gap-4 w-full py-3",
22324
22324
  children: [
22325
- /* @__PURE__ */ jsx47(PricingSlider, {
22326
- value: devSeatCount,
22327
- onChange: setDevSeatCount,
22328
- min: 1,
22329
- max: 50
22325
+ /* @__PURE__ */ jsx47("div", {
22326
+ className: "flex-1 min-w-0",
22327
+ children: /* @__PURE__ */ jsx47(PricingSlider, {
22328
+ value: devSeatCount,
22329
+ onChange: setDevSeatCount,
22330
+ min: 1,
22331
+ max: 50
22332
+ })
22330
22333
  }),
22331
22334
  /* @__PURE__ */ jsxs9("div", {
22332
- className: "fontbrand shrink-0 w-[135px] text-right",
22335
+ className: "fontbrand shrink-0 whitespace-nowrap w-[135px] sm:w-[150px] text-center",
22333
22336
  children: [
22334
22337
  devSeatCount,
22335
22338
  " ",
22336
22339
  devSeatCount === 1 ? "Seat" : "Seats"
22337
22340
  ]
22338
22341
  }),
22339
- /* @__PURE__ */ jsx47("div", {
22340
- className: "fontbrand font-bold min-w-[60px] text-right shrink-0",
22341
- children: `$${new Intl.NumberFormat("en-US", {
22342
- maximumFractionDigits: 0
22343
- }).format(SEAT_PRICE * devSeatCount)}`
22342
+ /* @__PURE__ */ jsxs9("div", {
22343
+ className: "fontbrand font-bold min-w-[60px] text-right shrink-0 whitespace-nowrap",
22344
+ children: [
22345
+ "$",
22346
+ new Intl.NumberFormat("en-US", {
22347
+ maximumFractionDigits: 0
22348
+ }).format(SEAT_PRICE * devSeatCount)
22349
+ ]
22344
22350
  })
22345
22351
  ]
22346
22352
  })
@@ -22370,27 +22376,33 @@ var CompanyPricing = () => {
22370
22376
  children: /* @__PURE__ */ jsx47("div", {
22371
22377
  className: "overflow-hidden",
22372
22378
  children: /* @__PURE__ */ jsxs9("div", {
22373
- className: "flex flex-row items-center gap-4 w-full py-3",
22379
+ className: "flex flex-row items-center gap-3 sm:gap-4 w-full py-3",
22374
22380
  children: [
22375
- /* @__PURE__ */ jsx47(PricingSlider, {
22376
- value: cloudRenders,
22377
- onChange: setCloudRenders,
22378
- min: 1000,
22379
- max: 1e5,
22380
- step: 1000
22381
+ /* @__PURE__ */ jsx47("div", {
22382
+ className: "flex-1 min-w-0",
22383
+ children: /* @__PURE__ */ jsx47(PricingSlider, {
22384
+ value: cloudRenders,
22385
+ onChange: setCloudRenders,
22386
+ min: 1000,
22387
+ max: 1e5,
22388
+ step: 1000
22389
+ })
22381
22390
  }),
22382
22391
  /* @__PURE__ */ jsxs9("div", {
22383
- className: "fontbrand shrink-0 w-[135px] text-right",
22392
+ className: "fontbrand shrink-0 whitespace-nowrap w-[135px] sm:w-[150px] text-right",
22384
22393
  children: [
22385
22394
  new Intl.NumberFormat("en-US").format(cloudRenders),
22386
22395
  " Renders"
22387
22396
  ]
22388
22397
  }),
22389
- /* @__PURE__ */ jsx47("div", {
22390
- className: "fontbrand font-bold min-w-[60px] text-right shrink-0",
22391
- children: `$${new Intl.NumberFormat("en-US", {
22392
- maximumFractionDigits: 0
22393
- }).format(Math.ceil(cloudRenders / 1000) * RENDER_UNIT_PRICE)}`
22398
+ /* @__PURE__ */ jsxs9("div", {
22399
+ className: "fontbrand font-bold min-w-[60px] text-right shrink-0 whitespace-nowrap",
22400
+ children: [
22401
+ "$",
22402
+ new Intl.NumberFormat("en-US", {
22403
+ maximumFractionDigits: 0
22404
+ }).format(Math.ceil(cloudRenders / 1000) * RENDER_UNIT_PRICE)
22405
+ ]
22394
22406
  })
22395
22407
  ]
22396
22408
  })
@@ -22739,7 +22751,7 @@ var GitHubStars = () => {
22739
22751
  width: "45px"
22740
22752
  }),
22741
22753
  /* @__PURE__ */ jsx50(StatItemContent, {
22742
- content: "34k",
22754
+ content: "35k",
22743
22755
  width: "80px",
22744
22756
  fontSize: "2.5rem",
22745
22757
  fontWeight: "bold"
@@ -25462,7 +25474,8 @@ var Controls = ({
25462
25474
  renderMuteButton,
25463
25475
  renderVolumeSlider,
25464
25476
  playing,
25465
- toggle
25477
+ toggle,
25478
+ renderCustomControls
25466
25479
  }) => {
25467
25480
  const playButtonRef = useRef82(null);
25468
25481
  const [supportsFullscreen, setSupportsFullscreen] = useState102(false);
@@ -25538,6 +25551,7 @@ var Controls = ({
25538
25551
  }
25539
25552
  return null;
25540
25553
  }, [showPlaybackRateControl]);
25554
+ const customControlsElement = renderCustomControls ? renderCustomControls() : null;
25541
25555
  const ref = useRef82(null);
25542
25556
  const flexRef = useRef82(null);
25543
25557
  const onPointerDownIfContainer = useCallback82((e) => {
@@ -25609,6 +25623,10 @@ var Controls = ({
25609
25623
  /* @__PURE__ */ jsx94("div", {
25610
25624
  style: flex1
25611
25625
  }),
25626
+ customControlsElement,
25627
+ customControlsElement && playbackRates && canvasSize ? /* @__PURE__ */ jsx94("div", {
25628
+ style: xSpacer
25629
+ }) : null,
25612
25630
  playbackRates && canvasSize && /* @__PURE__ */ jsx94(PlaybackrateControl, {
25613
25631
  canvasSize,
25614
25632
  playbackRates
@@ -25876,6 +25894,7 @@ var PlayerUI = ({
25876
25894
  renderPlayPauseButton,
25877
25895
  renderMuteButton,
25878
25896
  renderVolumeSlider,
25897
+ renderCustomControls,
25879
25898
  alwaysShowControls,
25880
25899
  showPlaybackRateControl,
25881
25900
  posterFillMode,
@@ -26299,7 +26318,8 @@ var PlayerUI = ({
26299
26318
  onDoubleClick: doubleClickToFullscreen ? handleDoubleClick : undefined,
26300
26319
  onPointerDown: clickToPlay ? handlePointerDown : undefined,
26301
26320
  renderMuteButton,
26302
- renderVolumeSlider
26321
+ renderVolumeSlider,
26322
+ renderCustomControls
26303
26323
  }) : null
26304
26324
  ]
26305
26325
  });
@@ -26607,6 +26627,7 @@ var PlayerFn = ({
26607
26627
  renderFullscreenButton,
26608
26628
  renderPlayPauseButton,
26609
26629
  renderVolumeSlider,
26630
+ renderCustomControls,
26610
26631
  alwaysShowControls = false,
26611
26632
  initiallyMuted = false,
26612
26633
  showPlaybackRateControl = false,
@@ -26792,6 +26813,7 @@ var PlayerFn = ({
26792
26813
  renderPlayPauseButton: renderPlayPauseButton ?? null,
26793
26814
  renderMuteButton: renderMuteButton ?? null,
26794
26815
  renderVolumeSlider: renderVolumeSlider ?? null,
26816
+ renderCustomControls: renderCustomControls ?? null,
26795
26817
  alwaysShowControls,
26796
26818
  showPlaybackRateControl,
26797
26819
  bufferStateDelayInMilliseconds: bufferStateDelayInMilliseconds ?? 300,
@@ -53351,15 +53373,10 @@ var emitReadiness = (channel) => {
53351
53373
  channel.postMessage({
53352
53374
  type: "main-tab-ready"
53353
53375
  });
53354
- let times = 0;
53355
- const interval = setInterval(() => {
53376
+ setInterval(() => {
53356
53377
  channel.postMessage({
53357
53378
  type: "main-tab-ready"
53358
53379
  });
53359
- times++;
53360
- if (times > 30) {
53361
- clearInterval(interval);
53362
- }
53363
53380
  }, 300);
53364
53381
  };
53365
53382
  var addBroadcastChannelListener = () => {
@@ -54258,7 +54275,7 @@ var VideoForRendering2 = ({
54258
54275
  }
54259
54276
  const timestamp = frame / fps;
54260
54277
  const durationInSeconds = 1 / fps;
54261
- const newHandle = delayRender(`Extracting frame at time ${timestamp}`, {
54278
+ const newHandle = delayRender(`Extracting frame at time ${timestamp} from ${src}`, {
54262
54279
  retries: delayRenderRetries ?? undefined,
54263
54280
  timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
54264
54281
  });
@@ -61115,7 +61132,7 @@ var IfYouKnowReact = () => {
61115
61132
  autoPlay: true,
61116
61133
  playsInline: true,
61117
61134
  loop: true,
61118
- className: "w-[500px] cursor-default! relative lg:-translate-x-8 -mb-40 lg:mt-0 lg:mb-0"
61135
+ className: "w-[500px] h-[500px] cursor-default! relative lg:-translate-x-8 -mb-40 lg:mt-0 lg:mb-0"
61119
61136
  }),
61120
61137
  /* @__PURE__ */ jsxs44("div", {
61121
61138
  children: [
@@ -62094,21 +62111,21 @@ var FEATURED_TEMPLATES = [
62094
62111
  showStackblitz: true
62095
62112
  },
62096
62113
  {
62097
- homePageLabel: "Prompt to Motion Graphics",
62098
- shortName: "Prompt to Motion Graphics (Next.js)",
62114
+ homePageLabel: "Prompt to Motion Graphics SaaS Starter Kit",
62115
+ shortName: "Prompt to Motion Graphics SaaS Starter Kit",
62099
62116
  org: "remotion-dev",
62100
- repoName: "template-prompt-to-motion-graphics",
62101
- description: "AI-powered code generation for Remotion",
62102
- longerDescription: 'A SaaS template for "Prompt to Motion Graphics" products. Generates Remotion code, streams it to the frontend, and compiles and previews it in the browser.',
62117
+ repoName: "template-prompt-to-motion-graphics-saas",
62118
+ description: "SaaS template for AI-powered code generation with Remotion",
62119
+ longerDescription: 'A SaaS template for "Prompt to Motion Graphics" products. Generates Remotion code, streams it to the frontend, and compiles and previews it in the browser. See the <a href="/docs/ai/ai-saas-template">documentation page</a> for more details.',
62103
62120
  promoBanner: {
62104
- width: 1920,
62105
- height: 1080,
62121
+ width: 2880,
62122
+ height: 1512,
62106
62123
  src: "/img/prompt-to-motion-graphics.png"
62107
62124
  },
62108
62125
  cliId: "prompt-to-motion-graphics",
62109
62126
  type: "image",
62110
62127
  defaultBranch: "main",
62111
- featuredOnHomePage: null,
62128
+ featuredOnHomePage: "https://prompt-to-motion-graphics-saas.vercel.app",
62112
62129
  previewURL: null,
62113
62130
  templateInMonorepo: "template-prompt-to-motion-graphics",
62114
62131
  allowEnableTailwind: false,
@@ -63181,7 +63198,7 @@ var GithubButton = () => {
63181
63198
  " ",
63182
63199
  /* @__PURE__ */ jsx160("div", {
63183
63200
  className: "text-xs inline-block ml-2 leading-none mt-[3px] self-center",
63184
- children: "34k"
63201
+ children: "35k"
63185
63202
  })
63186
63203
  ]
63187
63204
  });
@@ -967,7 +967,7 @@ var useIsPlayer = () => {
967
967
  function truthy(value) {
968
968
  return Boolean(value);
969
969
  }
970
- var VERSION = "4.0.417";
970
+ var VERSION = "4.0.419";
971
971
  var checkMultipleRemotionVersions = () => {
972
972
  if (typeof globalThis === "undefined") {
973
973
  return;
@@ -19411,7 +19411,7 @@ SelectSeparator2.displayName = Separator.displayName;
19411
19411
  var Switch = ({ active, onToggle }) => {
19412
19412
  return /* @__PURE__ */ jsx252("div", {
19413
19413
  "data-active": active,
19414
- className: "h-[34px] transition-all rounded-full w-[56px] border-2 border-b-4 bg-gray-200 p-[2px] cursor-pointer data-[active=true]:bg-brand border-black relative",
19414
+ className: "h-[34px] transition-all rounded-full w-[56px] border-2 border-b-4 bg-gray-200 p-[2px] cursor-pointer data-[active=true]:bg-brand border-black relative shrink-0",
19415
19415
  onClick: onToggle,
19416
19416
  children: /* @__PURE__ */ jsx252("div", {
19417
19417
  "data-active": active,
@@ -22060,7 +22060,7 @@ var PricingSlider = ({ value, onChange, min: min2, max: max2, step = 1 }) => {
22060
22060
  step,
22061
22061
  value,
22062
22062
  onChange: (e) => onChange(Number(e.target.value)),
22063
- className: "pricing-slider flex-1",
22063
+ className: "pricing-slider w-full",
22064
22064
  style: {
22065
22065
  background: `linear-gradient(to right, var(--color-brand) 0%, var(--color-brand) ${percentage}%, var(--background) ${percentage}%, var(--background) 100%)`
22066
22066
  }
@@ -22233,7 +22233,7 @@ var SectionCheckbox = ({ checked, onChange, title, subtitle, children }) => {
22233
22233
  className: "flex-1"
22234
22234
  }),
22235
22235
  /* @__PURE__ */ jsx47("div", {
22236
- className: cn2("fontbrand text-muted transition-opacity duration-150", checked ? "opacity-0" : "opacity-100"),
22236
+ className: cn2("fontbrand text-muted transition-opacity duration-150", checked ? "hidden" : "opacity-100"),
22237
22237
  children: "Not selected"
22238
22238
  })
22239
22239
  ]
@@ -22320,27 +22320,33 @@ var CompanyPricing = () => {
22320
22320
  children: /* @__PURE__ */ jsx47("div", {
22321
22321
  className: "overflow-hidden",
22322
22322
  children: /* @__PURE__ */ jsxs9("div", {
22323
- className: "flex flex-row items-center gap-4 w-full py-3",
22323
+ className: "flex flex-row items-center gap-3 sm:gap-4 w-full py-3",
22324
22324
  children: [
22325
- /* @__PURE__ */ jsx47(PricingSlider, {
22326
- value: devSeatCount,
22327
- onChange: setDevSeatCount,
22328
- min: 1,
22329
- max: 50
22325
+ /* @__PURE__ */ jsx47("div", {
22326
+ className: "flex-1 min-w-0",
22327
+ children: /* @__PURE__ */ jsx47(PricingSlider, {
22328
+ value: devSeatCount,
22329
+ onChange: setDevSeatCount,
22330
+ min: 1,
22331
+ max: 50
22332
+ })
22330
22333
  }),
22331
22334
  /* @__PURE__ */ jsxs9("div", {
22332
- className: "fontbrand shrink-0 w-[135px] text-right",
22335
+ className: "fontbrand shrink-0 whitespace-nowrap w-[135px] sm:w-[150px] text-center",
22333
22336
  children: [
22334
22337
  devSeatCount,
22335
22338
  " ",
22336
22339
  devSeatCount === 1 ? "Seat" : "Seats"
22337
22340
  ]
22338
22341
  }),
22339
- /* @__PURE__ */ jsx47("div", {
22340
- className: "fontbrand font-bold min-w-[60px] text-right shrink-0",
22341
- children: `$${new Intl.NumberFormat("en-US", {
22342
- maximumFractionDigits: 0
22343
- }).format(SEAT_PRICE * devSeatCount)}`
22342
+ /* @__PURE__ */ jsxs9("div", {
22343
+ className: "fontbrand font-bold min-w-[60px] text-right shrink-0 whitespace-nowrap",
22344
+ children: [
22345
+ "$",
22346
+ new Intl.NumberFormat("en-US", {
22347
+ maximumFractionDigits: 0
22348
+ }).format(SEAT_PRICE * devSeatCount)
22349
+ ]
22344
22350
  })
22345
22351
  ]
22346
22352
  })
@@ -22370,27 +22376,33 @@ var CompanyPricing = () => {
22370
22376
  children: /* @__PURE__ */ jsx47("div", {
22371
22377
  className: "overflow-hidden",
22372
22378
  children: /* @__PURE__ */ jsxs9("div", {
22373
- className: "flex flex-row items-center gap-4 w-full py-3",
22379
+ className: "flex flex-row items-center gap-3 sm:gap-4 w-full py-3",
22374
22380
  children: [
22375
- /* @__PURE__ */ jsx47(PricingSlider, {
22376
- value: cloudRenders,
22377
- onChange: setCloudRenders,
22378
- min: 1000,
22379
- max: 1e5,
22380
- step: 1000
22381
+ /* @__PURE__ */ jsx47("div", {
22382
+ className: "flex-1 min-w-0",
22383
+ children: /* @__PURE__ */ jsx47(PricingSlider, {
22384
+ value: cloudRenders,
22385
+ onChange: setCloudRenders,
22386
+ min: 1000,
22387
+ max: 1e5,
22388
+ step: 1000
22389
+ })
22381
22390
  }),
22382
22391
  /* @__PURE__ */ jsxs9("div", {
22383
- className: "fontbrand shrink-0 w-[135px] text-right",
22392
+ className: "fontbrand shrink-0 whitespace-nowrap w-[135px] sm:w-[150px] text-right",
22384
22393
  children: [
22385
22394
  new Intl.NumberFormat("en-US").format(cloudRenders),
22386
22395
  " Renders"
22387
22396
  ]
22388
22397
  }),
22389
- /* @__PURE__ */ jsx47("div", {
22390
- className: "fontbrand font-bold min-w-[60px] text-right shrink-0",
22391
- children: `$${new Intl.NumberFormat("en-US", {
22392
- maximumFractionDigits: 0
22393
- }).format(Math.ceil(cloudRenders / 1000) * RENDER_UNIT_PRICE)}`
22398
+ /* @__PURE__ */ jsxs9("div", {
22399
+ className: "fontbrand font-bold min-w-[60px] text-right shrink-0 whitespace-nowrap",
22400
+ children: [
22401
+ "$",
22402
+ new Intl.NumberFormat("en-US", {
22403
+ maximumFractionDigits: 0
22404
+ }).format(Math.ceil(cloudRenders / 1000) * RENDER_UNIT_PRICE)
22405
+ ]
22394
22406
  })
22395
22407
  ]
22396
22408
  })
@@ -22739,7 +22751,7 @@ var GitHubStars = () => {
22739
22751
  width: "45px"
22740
22752
  }),
22741
22753
  /* @__PURE__ */ jsx50(StatItemContent, {
22742
- content: "34k",
22754
+ content: "35k",
22743
22755
  width: "80px",
22744
22756
  fontSize: "2.5rem",
22745
22757
  fontWeight: "bold"
@@ -25462,7 +25474,8 @@ var Controls = ({
25462
25474
  renderMuteButton,
25463
25475
  renderVolumeSlider,
25464
25476
  playing,
25465
- toggle
25477
+ toggle,
25478
+ renderCustomControls
25466
25479
  }) => {
25467
25480
  const playButtonRef = useRef82(null);
25468
25481
  const [supportsFullscreen, setSupportsFullscreen] = useState102(false);
@@ -25538,6 +25551,7 @@ var Controls = ({
25538
25551
  }
25539
25552
  return null;
25540
25553
  }, [showPlaybackRateControl]);
25554
+ const customControlsElement = renderCustomControls ? renderCustomControls() : null;
25541
25555
  const ref = useRef82(null);
25542
25556
  const flexRef = useRef82(null);
25543
25557
  const onPointerDownIfContainer = useCallback82((e) => {
@@ -25609,6 +25623,10 @@ var Controls = ({
25609
25623
  /* @__PURE__ */ jsx94("div", {
25610
25624
  style: flex1
25611
25625
  }),
25626
+ customControlsElement,
25627
+ customControlsElement && playbackRates && canvasSize ? /* @__PURE__ */ jsx94("div", {
25628
+ style: xSpacer
25629
+ }) : null,
25612
25630
  playbackRates && canvasSize && /* @__PURE__ */ jsx94(PlaybackrateControl, {
25613
25631
  canvasSize,
25614
25632
  playbackRates
@@ -25876,6 +25894,7 @@ var PlayerUI = ({
25876
25894
  renderPlayPauseButton,
25877
25895
  renderMuteButton,
25878
25896
  renderVolumeSlider,
25897
+ renderCustomControls,
25879
25898
  alwaysShowControls,
25880
25899
  showPlaybackRateControl,
25881
25900
  posterFillMode,
@@ -26299,7 +26318,8 @@ var PlayerUI = ({
26299
26318
  onDoubleClick: doubleClickToFullscreen ? handleDoubleClick : undefined,
26300
26319
  onPointerDown: clickToPlay ? handlePointerDown : undefined,
26301
26320
  renderMuteButton,
26302
- renderVolumeSlider
26321
+ renderVolumeSlider,
26322
+ renderCustomControls
26303
26323
  }) : null
26304
26324
  ]
26305
26325
  });
@@ -26607,6 +26627,7 @@ var PlayerFn = ({
26607
26627
  renderFullscreenButton,
26608
26628
  renderPlayPauseButton,
26609
26629
  renderVolumeSlider,
26630
+ renderCustomControls,
26610
26631
  alwaysShowControls = false,
26611
26632
  initiallyMuted = false,
26612
26633
  showPlaybackRateControl = false,
@@ -26792,6 +26813,7 @@ var PlayerFn = ({
26792
26813
  renderPlayPauseButton: renderPlayPauseButton ?? null,
26793
26814
  renderMuteButton: renderMuteButton ?? null,
26794
26815
  renderVolumeSlider: renderVolumeSlider ?? null,
26816
+ renderCustomControls: renderCustomControls ?? null,
26795
26817
  alwaysShowControls,
26796
26818
  showPlaybackRateControl,
26797
26819
  bufferStateDelayInMilliseconds: bufferStateDelayInMilliseconds ?? 300,
@@ -53351,15 +53373,10 @@ var emitReadiness = (channel) => {
53351
53373
  channel.postMessage({
53352
53374
  type: "main-tab-ready"
53353
53375
  });
53354
- let times = 0;
53355
- const interval = setInterval(() => {
53376
+ setInterval(() => {
53356
53377
  channel.postMessage({
53357
53378
  type: "main-tab-ready"
53358
53379
  });
53359
- times++;
53360
- if (times > 30) {
53361
- clearInterval(interval);
53362
- }
53363
53380
  }, 300);
53364
53381
  };
53365
53382
  var addBroadcastChannelListener = () => {
@@ -54258,7 +54275,7 @@ var VideoForRendering2 = ({
54258
54275
  }
54259
54276
  const timestamp = frame / fps;
54260
54277
  const durationInSeconds = 1 / fps;
54261
- const newHandle = delayRender(`Extracting frame at time ${timestamp}`, {
54278
+ const newHandle = delayRender(`Extracting frame at time ${timestamp} from ${src}`, {
54262
54279
  retries: delayRenderRetries ?? undefined,
54263
54280
  timeoutInMilliseconds: delayRenderTimeoutInMilliseconds ?? undefined
54264
54281
  });
@@ -61115,7 +61132,7 @@ var IfYouKnowReact = () => {
61115
61132
  autoPlay: true,
61116
61133
  playsInline: true,
61117
61134
  loop: true,
61118
- className: "w-[500px] cursor-default! relative lg:-translate-x-8 -mb-40 lg:mt-0 lg:mb-0"
61135
+ className: "w-[500px] h-[500px] cursor-default! relative lg:-translate-x-8 -mb-40 lg:mt-0 lg:mb-0"
61119
61136
  }),
61120
61137
  /* @__PURE__ */ jsxs44("div", {
61121
61138
  children: [
@@ -62094,21 +62111,21 @@ var FEATURED_TEMPLATES = [
62094
62111
  showStackblitz: true
62095
62112
  },
62096
62113
  {
62097
- homePageLabel: "Prompt to Motion Graphics",
62098
- shortName: "Prompt to Motion Graphics (Next.js)",
62114
+ homePageLabel: "Prompt to Motion Graphics SaaS Starter Kit",
62115
+ shortName: "Prompt to Motion Graphics SaaS Starter Kit",
62099
62116
  org: "remotion-dev",
62100
- repoName: "template-prompt-to-motion-graphics",
62101
- description: "AI-powered code generation for Remotion",
62102
- longerDescription: 'A SaaS template for "Prompt to Motion Graphics" products. Generates Remotion code, streams it to the frontend, and compiles and previews it in the browser.',
62117
+ repoName: "template-prompt-to-motion-graphics-saas",
62118
+ description: "SaaS template for AI-powered code generation with Remotion",
62119
+ longerDescription: 'A SaaS template for "Prompt to Motion Graphics" products. Generates Remotion code, streams it to the frontend, and compiles and previews it in the browser. See the <a href="/docs/ai/ai-saas-template">documentation page</a> for more details.',
62103
62120
  promoBanner: {
62104
- width: 1920,
62105
- height: 1080,
62121
+ width: 2880,
62122
+ height: 1512,
62106
62123
  src: "/img/prompt-to-motion-graphics.png"
62107
62124
  },
62108
62125
  cliId: "prompt-to-motion-graphics",
62109
62126
  type: "image",
62110
62127
  defaultBranch: "main",
62111
- featuredOnHomePage: null,
62128
+ featuredOnHomePage: "https://prompt-to-motion-graphics-saas.vercel.app",
62112
62129
  previewURL: null,
62113
62130
  templateInMonorepo: "template-prompt-to-motion-graphics",
62114
62131
  allowEnableTailwind: false,
@@ -63181,7 +63198,7 @@ var GithubButton = () => {
63181
63198
  " ",
63182
63199
  /* @__PURE__ */ jsx160("div", {
63183
63200
  className: "text-xs inline-block ml-2 leading-none mt-[3px] self-center",
63184
- children: "34k"
63201
+ children: "35k"
63185
63202
  })
63186
63203
  ]
63187
63204
  });
@@ -6016,7 +6016,7 @@ var useIsPlayer = () => {
6016
6016
  function truthy2(value) {
6017
6017
  return Boolean(value);
6018
6018
  }
6019
- var VERSION = "4.0.417";
6019
+ var VERSION = "4.0.419";
6020
6020
  var checkMultipleRemotionVersions = () => {
6021
6021
  if (typeof globalThis === "undefined") {
6022
6022
  return;
@@ -18367,7 +18367,7 @@ SelectSeparator2.displayName = Separator.displayName;
18367
18367
  var Switch = ({ active, onToggle }) => {
18368
18368
  return /* @__PURE__ */ jsx252("div", {
18369
18369
  "data-active": active,
18370
- className: "h-[34px] transition-all rounded-full w-[56px] border-2 border-b-4 bg-gray-200 p-[2px] cursor-pointer data-[active=true]:bg-brand border-black relative",
18370
+ className: "h-[34px] transition-all rounded-full w-[56px] border-2 border-b-4 bg-gray-200 p-[2px] cursor-pointer data-[active=true]:bg-brand border-black relative shrink-0",
18371
18371
  onClick: onToggle,
18372
18372
  children: /* @__PURE__ */ jsx252("div", {
18373
18373
  "data-active": active,
@@ -967,7 +967,7 @@ var useIsPlayer = () => {
967
967
  function truthy(value) {
968
968
  return Boolean(value);
969
969
  }
970
- var VERSION = "4.0.417";
970
+ var VERSION = "4.0.419";
971
971
  var checkMultipleRemotionVersions = () => {
972
972
  if (typeof globalThis === "undefined") {
973
973
  return;