@remotion/promo-pages 4.0.501 → 4.0.502

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
@@ -6092,7 +6092,7 @@ var Composition = (props) => {
6092
6092
  ...props
6093
6093
  });
6094
6094
  };
6095
- var VERSION = "4.0.501";
6095
+ var VERSION = "4.0.502";
6096
6096
  var checkMultipleRemotionVersions = () => {
6097
6097
  if (typeof globalThis === "undefined") {
6098
6098
  return;
@@ -29452,14 +29452,16 @@ import { jsx as jsx48, jsxs as jsxs9 } from "react/jsx-runtime";
29452
29452
  var container3 = {
29453
29453
  display: "flex",
29454
29454
  flexDirection: "row",
29455
- alignItems: "center",
29455
+ alignItems: "flex-start",
29456
29456
  gap: "10px"
29457
29457
  };
29458
29458
  var greyCircle = {
29459
29459
  width: 20,
29460
29460
  height: 20,
29461
29461
  borderRadius: 10,
29462
- backgroundColor: "var(--footer-border)"
29462
+ backgroundColor: "var(--footer-border)",
29463
+ flexShrink: 0,
29464
+ marginTop: 4
29463
29465
  };
29464
29466
  var PricingBulletPoint = ({ text, checked, children }) => {
29465
29467
  const checkmarkSVG = /* @__PURE__ */ jsxs9("svg", {
@@ -29469,7 +29471,8 @@ var PricingBulletPoint = ({ text, checked, children }) => {
29469
29471
  fill: "none",
29470
29472
  xmlns: "http://www.w3.org/2000/svg",
29471
29473
  style: {
29472
- flexShrink: 0
29474
+ flexShrink: 0,
29475
+ marginTop: 4
29473
29476
  },
29474
29477
  children: [
29475
29478
  /* @__PURE__ */ jsx48("circle", {
@@ -29519,7 +29522,7 @@ var Title = ({ children }) => {
29519
29522
  };
29520
29523
  var Audience = ({ children }) => {
29521
29524
  return /* @__PURE__ */ jsx50("div", {
29522
- className: "fontbrand text-lg leading-none",
29525
+ className: "fontbrand text-lg leading-snug",
29523
29526
  children
29524
29527
  });
29525
29528
  };
@@ -44013,7 +44016,7 @@ import {
44013
44016
  import { BufferTarget, StreamTarget } from "mediabunny";
44014
44017
 
44015
44018
  // ../core/dist/esm/version.mjs
44016
- var VERSION2 = "4.0.501";
44019
+ var VERSION2 = "4.0.502";
44017
44020
 
44018
44021
  // ../web-renderer/dist/esm/index.mjs
44019
44022
  import { AudioSample, VideoSample } from "mediabunny";
@@ -45061,7 +45064,110 @@ var getRealFrameRange = (durationInFrames, frameRange) => {
45061
45064
  }
45062
45065
  return resolved;
45063
45066
  };
45064
- var makeInternalState = () => {
45067
+ var makeMaskImageLoaderState = ({
45068
+ signal,
45069
+ timeoutInMilliseconds
45070
+ }) => {
45071
+ const images = new Set;
45072
+ return {
45073
+ cache: new Map,
45074
+ images,
45075
+ signal,
45076
+ timeoutInMilliseconds,
45077
+ [Symbol.dispose]: () => {
45078
+ for (const image of images) {
45079
+ image.close();
45080
+ }
45081
+ images.clear();
45082
+ }
45083
+ };
45084
+ };
45085
+ var validateMaskImageUrl = (src) => {
45086
+ const url = new URL(src, document.baseURI);
45087
+ if (url.protocol === "data:" || url.protocol === "blob:") {
45088
+ return url.href;
45089
+ }
45090
+ if ((url.protocol === "http:" || url.protocol === "https:") && url.origin === window.location.origin) {
45091
+ return url.href;
45092
+ }
45093
+ throw new Error(`@remotion/web-renderer only supports same-origin, data:, and blob: mask-image URLs. Received: ${url.href}`);
45094
+ };
45095
+ var loadMaskImage = async ({
45096
+ src,
45097
+ state
45098
+ }) => {
45099
+ const resolvedSrc = validateMaskImageUrl(src);
45100
+ if (state.signal?.aborted) {
45101
+ throw new Error(`Loading mask-image URL was cancelled: ${resolvedSrc}`);
45102
+ }
45103
+ const controller = new AbortController;
45104
+ let timedOut = false;
45105
+ const onAbort = () => controller.abort();
45106
+ state.signal?.addEventListener("abort", onAbort, { once: true });
45107
+ const timeout = window.setTimeout(() => {
45108
+ timedOut = true;
45109
+ controller.abort();
45110
+ }, state.timeoutInMilliseconds);
45111
+ const operation = (async () => {
45112
+ const response = await fetch(resolvedSrc, {
45113
+ credentials: "same-origin",
45114
+ signal: controller.signal
45115
+ });
45116
+ if (!response.ok) {
45117
+ throw new Error(`HTTP ${response.status} ${response.statusText}`);
45118
+ }
45119
+ const blob = await response.blob();
45120
+ const contentType = blob.type.toLowerCase().split(";")[0];
45121
+ if (!contentType.startsWith("image/") || contentType === "image/svg+xml") {
45122
+ throw new Error(`Expected a raster image, but received Content-Type "${blob.type || "unknown"}"`);
45123
+ }
45124
+ return createImageBitmap(blob);
45125
+ })();
45126
+ operation.then((image) => {
45127
+ if (controller.signal.aborted) {
45128
+ image.close();
45129
+ }
45130
+ }, () => {
45131
+ return;
45132
+ });
45133
+ const aborted = new Promise((_, reject) => {
45134
+ controller.signal.addEventListener("abort", () => reject(new Error("Mask image loading was aborted")), { once: true });
45135
+ });
45136
+ try {
45137
+ const image = await Promise.race([operation, aborted]);
45138
+ state.images.add(image);
45139
+ return image;
45140
+ } catch (error2) {
45141
+ if (timedOut) {
45142
+ throw new Error(`Timed out loading mask-image URL after ${state.timeoutInMilliseconds}ms: ${resolvedSrc}`);
45143
+ }
45144
+ if (state.signal?.aborted) {
45145
+ throw new Error(`Loading mask-image URL was cancelled: ${resolvedSrc}`);
45146
+ }
45147
+ const detail = error2 instanceof Error ? error2.message : String(error2);
45148
+ throw new Error(`Could not load mask-image URL ${resolvedSrc}: ${detail}`);
45149
+ } finally {
45150
+ window.clearTimeout(timeout);
45151
+ state.signal?.removeEventListener("abort", onAbort);
45152
+ }
45153
+ };
45154
+ var getMaskImage = ({
45155
+ src,
45156
+ state
45157
+ }) => {
45158
+ const cached = state.cache.get(src);
45159
+ if (cached) {
45160
+ return cached;
45161
+ }
45162
+ const promise = loadMaskImage({ src, state });
45163
+ state.cache.set(src, promise);
45164
+ promise.catch(() => state.cache.delete(src));
45165
+ return promise;
45166
+ };
45167
+ var makeInternalState = ({
45168
+ signal = null,
45169
+ maskImageTimeoutInMilliseconds = 30000
45170
+ } = {}) => {
45065
45171
  let drawnPrecomposedPixels = 0;
45066
45172
  let precomposedTextures = 0;
45067
45173
  let waitForReadyTime = 0;
@@ -45071,6 +45177,10 @@ var makeInternalState = () => {
45071
45177
  const helperCanvasState = {
45072
45178
  current: null
45073
45179
  };
45180
+ const maskImageLoaderState = makeMaskImageLoaderState({
45181
+ signal,
45182
+ timeoutInMilliseconds: maskImageTimeoutInMilliseconds
45183
+ });
45074
45184
  return {
45075
45185
  getDrawn3dPixels: () => drawnPrecomposedPixels,
45076
45186
  getPrecomposedTiles: () => precomposedTextures,
@@ -45082,10 +45192,12 @@ var makeInternalState = () => {
45082
45192
  precomposedTextures++;
45083
45193
  },
45084
45194
  helperCanvasState,
45195
+ maskImageLoaderState,
45085
45196
  [Symbol.dispose]: () => {
45086
45197
  if (helperCanvasState.current) {
45087
45198
  helperCanvasState.current.cleanup();
45088
45199
  }
45200
+ maskImageLoaderState[Symbol.dispose]();
45089
45201
  },
45090
45202
  getWaitForReadyTime: () => waitForReadyTime,
45091
45203
  addWaitForReadyTime: (time) => {
@@ -45977,8 +46089,133 @@ var getMaskImageValue = (computedStyle) => {
45977
46089
  }
45978
46090
  return value;
45979
46091
  };
46092
+ var parseUrlFunction = (value) => {
46093
+ const trimmed = value.trim();
46094
+ if (!trimmed.toLowerCase().startsWith("url(")) {
46095
+ return null;
46096
+ }
46097
+ let index2 = 4;
46098
+ while (/\s/.test(trimmed[index2] ?? "")) {
46099
+ index2++;
46100
+ }
46101
+ const quote = trimmed[index2] === '"' || trimmed[index2] === "'" ? trimmed[index2] : null;
46102
+ if (quote) {
46103
+ index2++;
46104
+ }
46105
+ let url = "";
46106
+ let closedQuote = quote === null;
46107
+ for (;index2 < trimmed.length; index2++) {
46108
+ const char = trimmed[index2];
46109
+ if (char === "\\") {
46110
+ const next = trimmed[index2 + 1];
46111
+ if (next === undefined) {
46112
+ return null;
46113
+ }
46114
+ url += next;
46115
+ index2++;
46116
+ continue;
46117
+ }
46118
+ if (quote && char === quote) {
46119
+ closedQuote = true;
46120
+ index2++;
46121
+ break;
46122
+ }
46123
+ if (!quote && char === ")") {
46124
+ break;
46125
+ }
46126
+ url += char;
46127
+ }
46128
+ if (!closedQuote) {
46129
+ return null;
46130
+ }
46131
+ while (/\s/.test(trimmed[index2] ?? "")) {
46132
+ index2++;
46133
+ }
46134
+ if (trimmed[index2] !== ")") {
46135
+ return null;
46136
+ }
46137
+ index2++;
46138
+ while (/\s/.test(trimmed[index2] ?? "")) {
46139
+ index2++;
46140
+ }
46141
+ if (index2 !== trimmed.length) {
46142
+ return null;
46143
+ }
46144
+ return url.trim();
46145
+ };
46146
+ var getMaskProperty = ({
46147
+ standard,
46148
+ prefixed
46149
+ }) => standard || prefixed;
46150
+ var normalizeCssValue = (value) => value.trim().toLowerCase().replace(/\s+/g, " ");
46151
+ var validateUrlMaskImageStyle = (computedStyle) => {
46152
+ const maskSize = normalizeCssValue(getMaskProperty({
46153
+ standard: computedStyle.maskSize,
46154
+ prefixed: computedStyle.webkitMaskSize
46155
+ }));
46156
+ const maskPosition = normalizeCssValue(getMaskProperty({
46157
+ standard: computedStyle.maskPosition,
46158
+ prefixed: computedStyle.webkitMaskPosition
46159
+ }));
46160
+ const maskRepeat = normalizeCssValue(getMaskProperty({
46161
+ standard: computedStyle.maskRepeat,
46162
+ prefixed: computedStyle.webkitMaskRepeat
46163
+ }));
46164
+ const maskMode = normalizeCssValue(computedStyle.maskMode);
46165
+ const maskOrigin = normalizeCssValue(getMaskProperty({
46166
+ standard: computedStyle.maskOrigin,
46167
+ prefixed: computedStyle.webkitMaskOrigin
46168
+ }));
46169
+ const maskClip = normalizeCssValue(getMaskProperty({
46170
+ standard: computedStyle.maskClip,
46171
+ prefixed: computedStyle.webkitMaskClip
46172
+ }));
46173
+ const isSupportedPosition = maskPosition === "0% 0%" || maskPosition === "0px 0px" || maskPosition === "left top";
46174
+ const unsupportedProperties = [
46175
+ maskSize !== "100% 100%" ? `mask-size: ${maskSize}` : null,
46176
+ !isSupportedPosition ? `mask-position: ${maskPosition}` : null,
46177
+ maskRepeat !== "no-repeat" ? `mask-repeat: ${maskRepeat}` : null,
46178
+ maskMode !== "" && maskMode !== "alpha" && maskMode !== "match-source" ? `mask-mode: ${maskMode}` : null,
46179
+ maskOrigin !== "border-box" ? `mask-origin: ${maskOrigin}` : null,
46180
+ maskClip !== "border-box" ? `mask-clip: ${maskClip}` : null
46181
+ ].filter((property) => property !== null);
46182
+ if (unsupportedProperties.length > 0) {
46183
+ throw new Error(`@remotion/web-renderer only supports URL masks with mask-size: 100% 100%, mask-position: 0% 0%, mask-repeat: no-repeat, the border box as origin and clip, and alpha semantics. Unsupported value${unsupportedProperties.length === 1 ? "" : "s"}: ${unsupportedProperties.join(", ")}`);
46184
+ }
46185
+ };
45980
46186
  var parseMaskImage = (maskImageValue) => {
45981
- return parseLinearGradient(maskImageValue);
46187
+ const gradientInfo = parseLinearGradient(maskImageValue);
46188
+ if (gradientInfo) {
46189
+ return { type: "linear-gradient", gradientInfo };
46190
+ }
46191
+ const url = parseUrlFunction(maskImageValue);
46192
+ if (url !== null) {
46193
+ if (!url) {
46194
+ throw new Error("mask-image: url() must contain a URL");
46195
+ }
46196
+ return { type: "url", src: new URL(url, document.baseURI).href };
46197
+ }
46198
+ if (maskImageValue.trim().toLowerCase().startsWith("url(")) {
46199
+ throw new Error("@remotion/web-renderer only supports a single mask-image: url() layer");
46200
+ }
46201
+ return null;
46202
+ };
46203
+ var elementHasUrlMaskImage = (element) => {
46204
+ const value = getMaskImageValue(getComputedStyle(element));
46205
+ return value?.trim().toLowerCase().startsWith("url(") ?? false;
46206
+ };
46207
+ var containsUrlMaskImage = (element) => {
46208
+ if (elementHasUrlMaskImage(element)) {
46209
+ return true;
46210
+ }
46211
+ const children = element.querySelectorAll("*");
46212
+ for (let index2 = 0;index2 < children.length; index2++) {
46213
+ const child = children[index2];
46214
+ if (elementHasUrlMaskImage(child)) {
46215
+ return true;
46216
+ }
46217
+ }
46218
+ return false;
45982
46219
  };
45983
46220
  var parseTransformOrigin = (transformOrigin2) => {
45984
46221
  if (transformOrigin2.trim() === "") {
@@ -46083,6 +46320,9 @@ var calculateTransforms = ({
46083
46320
  opacity2 = parseFloat(computedStyle.opacity);
46084
46321
  const maskImageValue = getMaskImageValue(computedStyle);
46085
46322
  maskImageInfo = maskImageValue ? parseMaskImage(maskImageValue) : null;
46323
+ if (maskImageInfo?.type === "url") {
46324
+ validateUrlMaskImageStyle(computedStyle);
46325
+ }
46086
46326
  filterForPrecompositing = filterRequiresPrecompositing(computedStyle.filter);
46087
46327
  const originalMaskImage = parent.style.maskImage;
46088
46328
  const originalWebkitMaskImage = parent.style.webkitMaskImage;
@@ -47914,24 +48154,34 @@ var getPrecomposeRectForMask = (element) => {
47914
48154
  const boundingRect = getBiggestBoundingClientRect(element);
47915
48155
  return boundingRect;
47916
48156
  };
47917
- var handleMask = ({
47918
- gradientInfo,
48157
+ var handleMask = async ({
48158
+ maskImageInfo,
47919
48159
  maskRect,
47920
48160
  precomposeRect,
47921
48161
  tempContext,
47922
- scale
48162
+ scale,
48163
+ internalState
47923
48164
  }) => {
47924
48165
  const rectToFill = new DOMRect((maskRect.left - precomposeRect.left) * scale, (maskRect.top - precomposeRect.top) * scale, maskRect.width * scale, maskRect.height * scale);
47925
- const gradient = createCanvasGradient({
47926
- ctx: tempContext,
47927
- rect: rectToFill,
47928
- gradientInfo,
47929
- offsetLeft: 0,
47930
- offsetTop: 0
48166
+ if (maskImageInfo.type === "linear-gradient") {
48167
+ const gradient = createCanvasGradient({
48168
+ ctx: tempContext,
48169
+ rect: rectToFill,
48170
+ gradientInfo: maskImageInfo.gradientInfo,
48171
+ offsetLeft: 0,
48172
+ offsetTop: 0
48173
+ });
48174
+ tempContext.globalCompositeOperation = "destination-in";
48175
+ tempContext.fillStyle = gradient;
48176
+ tempContext.fillRect(rectToFill.left, rectToFill.top, rectToFill.width, rectToFill.height);
48177
+ return;
48178
+ }
48179
+ const image = await getMaskImage({
48180
+ src: maskImageInfo.src,
48181
+ state: internalState.maskImageLoaderState
47931
48182
  });
47932
48183
  tempContext.globalCompositeOperation = "destination-in";
47933
- tempContext.fillStyle = gradient;
47934
- tempContext.fillRect(rectToFill.left, rectToFill.top, rectToFill.width, rectToFill.height);
48184
+ tempContext.drawImage(image, rectToFill.left, rectToFill.top, rectToFill.width, rectToFill.height);
47935
48185
  };
47936
48186
  var scaleRect = ({
47937
48187
  rect,
@@ -48048,12 +48298,13 @@ var processNode = async ({
48048
48298
  })
48049
48299
  }));
48050
48300
  if (precompositing.needsMaskImage) {
48051
- handleMask({
48052
- gradientInfo: precompositing.needsMaskImage,
48301
+ await handleMask({
48302
+ maskImageInfo: precompositing.needsMaskImage,
48053
48303
  maskRect: dimensions,
48054
48304
  precomposeRect,
48055
48305
  tempContext,
48056
- scale
48306
+ scale,
48307
+ internalState
48057
48308
  });
48058
48309
  if (waitForPageResponsiveness !== null) {
48059
48310
  await waitForPageResponsiveness();
@@ -48654,26 +48905,34 @@ var createLayer = async ({
48654
48905
  const scaledWidth = Math.ceil(cutout.width * scale);
48655
48906
  const scaledHeight = Math.ceil(cutout.height * scale);
48656
48907
  if (!onlyBackgroundClipText && element instanceof HTMLElement && htmlInCanvasContext && onHtmlInCanvasLayerOutcome) {
48657
- const hasNestedHtmlInCanvas = containsLayoutSubtreeCanvas(element);
48658
- try {
48659
- const offCtx = await drawWithHtmlInCanvas({
48660
- htmlInCanvasContext,
48661
- element,
48662
- scaledWidth,
48663
- scaledHeight,
48664
- waitForRenderReady,
48665
- useElementImage: hasNestedHtmlInCanvas
48666
- });
48667
- onHtmlInCanvasLayerOutcome({ native: true });
48668
- return offCtx;
48669
- } catch (err) {
48670
- const detail = err instanceof Error ? err.message : JSON.stringify(err);
48908
+ if (containsUrlMaskImage(element)) {
48671
48909
  onHtmlInCanvasLayerOutcome({
48672
48910
  native: false,
48673
- reason: `drawElementImage failed (${detail}); falling back to the built-in DOM composer.`,
48674
- shouldWarn: true
48911
+ reason: "URL masks are loaded by the built-in DOM composer to guarantee deterministic rendering.",
48912
+ shouldWarn: false
48675
48913
  });
48676
- Internals.Log.verbose({ logLevel, tag: "@remotion/web-renderer" }, "HTML-in-canvas capture failed, falling back to software compose", err);
48914
+ } else {
48915
+ const hasNestedHtmlInCanvas = containsLayoutSubtreeCanvas(element);
48916
+ try {
48917
+ const offCtx = await drawWithHtmlInCanvas({
48918
+ htmlInCanvasContext,
48919
+ element,
48920
+ scaledWidth,
48921
+ scaledHeight,
48922
+ waitForRenderReady,
48923
+ useElementImage: hasNestedHtmlInCanvas
48924
+ });
48925
+ onHtmlInCanvasLayerOutcome({ native: true });
48926
+ return offCtx;
48927
+ } catch (err) {
48928
+ const detail = err instanceof Error ? err.message : JSON.stringify(err);
48929
+ onHtmlInCanvasLayerOutcome({
48930
+ native: false,
48931
+ reason: `drawElementImage failed (${detail}); falling back to the built-in DOM composer.`,
48932
+ shouldWarn: true
48933
+ });
48934
+ Internals.Log.verbose({ logLevel, tag: "@remotion/web-renderer" }, "HTML-in-canvas capture failed, falling back to software compose", err);
48935
+ }
48677
48936
  }
48678
48937
  }
48679
48938
  const canvas = new OffscreenCanvas(scaledWidth, scaledHeight);
@@ -49005,7 +49264,10 @@ var internalRenderMediaOnWeb = async ({
49005
49264
  errorHolder,
49006
49265
  htmlInCanvasContext
49007
49266
  } = scaffold;
49008
- const internalState = __using2(__stack2, makeInternalState(), 0);
49267
+ const internalState = __using2(__stack2, makeInternalState({
49268
+ signal,
49269
+ maskImageTimeoutInMilliseconds: delayRenderTimeoutInMilliseconds
49270
+ }), 0);
49009
49271
  const pageResponsivenessController = createPageResponsivenessController({
49010
49272
  intervalInMilliseconds: pageResponsivenessIntervalInMilliseconds,
49011
49273
  now: () => performance.now(),
@@ -50638,7 +50900,7 @@ var useTransparentVideoSource = ({
50638
50900
  fallbackVideoSrc,
50639
50901
  videoSrc
50640
50902
  }) => {
50641
- const [src, setSrc] = useState59(videoSrc);
50903
+ const [src, setSrc] = useState59(null);
50642
50904
  useEffect60(() => {
50643
50905
  setSrc(isWebkit() ? fallbackVideoSrc : videoSrc);
50644
50906
  }, [fallbackVideoSrc, videoSrc]);
@@ -50694,7 +50956,7 @@ var MakeVideosAgentically = ({
50694
50956
  children: [
50695
50957
  /* @__PURE__ */ jsx121("div", {
50696
50958
  className: "flex aspect-square w-full items-start",
50697
- children: showVideo ? /* @__PURE__ */ jsx121("video", {
50959
+ children: showVideo && src ? /* @__PURE__ */ jsx121("video", {
50698
50960
  ref: videoRef,
50699
50961
  src,
50700
50962
  muted: true,
@@ -50761,7 +51023,7 @@ var MakeVideosInteractively = ({
50761
51023
  children: [
50762
51024
  /* @__PURE__ */ jsx125("div", {
50763
51025
  className: "flex aspect-square w-full items-start",
50764
- children: showVideo ? /* @__PURE__ */ jsx125("video", {
51026
+ children: showVideo && src ? /* @__PURE__ */ jsx125("video", {
50765
51027
  src,
50766
51028
  autoPlay: true,
50767
51029
  muted: true,
@@ -50824,7 +51086,7 @@ var MakeVideosProgrammatically = ({
50824
51086
  children: [
50825
51087
  /* @__PURE__ */ jsx127("div", {
50826
51088
  className: "flex aspect-square w-full items-start",
50827
- children: showVideo ? /* @__PURE__ */ jsx127("video", {
51089
+ children: showVideo && src ? /* @__PURE__ */ jsx127("video", {
50828
51090
  src,
50829
51091
  muted: true,
50830
51092
  autoPlay: true,
package/dist/design.js CHANGED
@@ -9322,7 +9322,7 @@ var Composition = (props) => {
9322
9322
  ...props
9323
9323
  });
9324
9324
  };
9325
- var VERSION = "4.0.501";
9325
+ var VERSION = "4.0.502";
9326
9326
  var checkMultipleRemotionVersions = () => {
9327
9327
  if (typeof globalThis === "undefined") {
9328
9328
  return;
package/dist/experts.js CHANGED
@@ -6092,7 +6092,7 @@ var Composition = (props) => {
6092
6092
  ...props
6093
6093
  });
6094
6094
  };
6095
- var VERSION = "4.0.501";
6095
+ var VERSION = "4.0.502";
6096
6096
  var checkMultipleRemotionVersions = () => {
6097
6097
  if (typeof globalThis === "undefined") {
6098
6098
  return;
@@ -9325,7 +9325,7 @@ var Composition = (props) => {
9325
9325
  ...props
9326
9326
  });
9327
9327
  };
9328
- var VERSION = "4.0.501";
9328
+ var VERSION = "4.0.502";
9329
9329
  var checkMultipleRemotionVersions = () => {
9330
9330
  if (typeof globalThis === "undefined") {
9331
9331
  return;
@@ -28136,14 +28136,16 @@ import { jsx as jsx45, jsxs as jsxs7 } from "react/jsx-runtime";
28136
28136
  var container3 = {
28137
28137
  display: "flex",
28138
28138
  flexDirection: "row",
28139
- alignItems: "center",
28139
+ alignItems: "flex-start",
28140
28140
  gap: "10px"
28141
28141
  };
28142
28142
  var greyCircle = {
28143
28143
  width: 20,
28144
28144
  height: 20,
28145
28145
  borderRadius: 10,
28146
- backgroundColor: "var(--footer-border)"
28146
+ backgroundColor: "var(--footer-border)",
28147
+ flexShrink: 0,
28148
+ marginTop: 4
28147
28149
  };
28148
28150
  var PricingBulletPoint = ({ text, checked, children }) => {
28149
28151
  const checkmarkSVG = /* @__PURE__ */ jsxs7("svg", {
@@ -28153,7 +28155,8 @@ var PricingBulletPoint = ({ text, checked, children }) => {
28153
28155
  fill: "none",
28154
28156
  xmlns: "http://www.w3.org/2000/svg",
28155
28157
  style: {
28156
- flexShrink: 0
28158
+ flexShrink: 0,
28159
+ marginTop: 4
28157
28160
  },
28158
28161
  children: [
28159
28162
  /* @__PURE__ */ jsx45("circle", {
@@ -28203,7 +28206,7 @@ var Title = ({ children }) => {
28203
28206
  };
28204
28207
  var Audience = ({ children }) => {
28205
28208
  return /* @__PURE__ */ jsx47("div", {
28206
- className: "fontbrand text-lg leading-none",
28209
+ className: "fontbrand text-lg leading-snug",
28207
28210
  children
28208
28211
  });
28209
28212
  };
@@ -9322,7 +9322,7 @@ var Composition = (props) => {
9322
9322
  ...props
9323
9323
  });
9324
9324
  };
9325
- var VERSION = "4.0.501";
9325
+ var VERSION = "4.0.502";
9326
9326
  var checkMultipleRemotionVersions = () => {
9327
9327
  if (typeof globalThis === "undefined") {
9328
9328
  return;
@@ -26656,7 +26656,7 @@ var Composition = (props) => {
26656
26656
  ...props
26657
26657
  });
26658
26658
  };
26659
- var VERSION = "4.0.501";
26659
+ var VERSION = "4.0.502";
26660
26660
  var checkMultipleRemotionVersions = () => {
26661
26661
  if (typeof globalThis === "undefined") {
26662
26662
  return;
@@ -9322,7 +9322,7 @@ var Composition = (props) => {
9322
9322
  ...props
9323
9323
  });
9324
9324
  };
9325
- var VERSION = "4.0.501";
9325
+ var VERSION = "4.0.502";
9326
9326
  var checkMultipleRemotionVersions = () => {
9327
9327
  if (typeof globalThis === "undefined") {
9328
9328
  return;
package/dist/team.js CHANGED
@@ -9503,7 +9503,7 @@ var Composition = (props) => {
9503
9503
  ...props
9504
9504
  });
9505
9505
  };
9506
- var VERSION = "4.0.501";
9506
+ var VERSION = "4.0.502";
9507
9507
  var checkMultipleRemotionVersions = () => {
9508
9508
  if (typeof globalThis === "undefined") {
9509
9509
  return;
@@ -9322,7 +9322,7 @@ var Composition = (props) => {
9322
9322
  ...props
9323
9323
  });
9324
9324
  };
9325
- var VERSION = "4.0.501";
9325
+ var VERSION = "4.0.502";
9326
9326
  var checkMultipleRemotionVersions = () => {
9327
9327
  if (typeof globalThis === "undefined") {
9328
9328
  return;
package/dist/templates.js CHANGED
@@ -9322,7 +9322,7 @@ var Composition = (props) => {
9322
9322
  ...props
9323
9323
  });
9324
9324
  };
9325
- var VERSION = "4.0.501";
9325
+ var VERSION = "4.0.502";
9326
9326
  var checkMultipleRemotionVersions = () => {
9327
9327
  if (typeof globalThis === "undefined") {
9328
9328
  return;
@@ -26906,7 +26906,7 @@ var listOfRemotionPackages = [
26906
26906
  "@remotion/remotion-media",
26907
26907
  "@remotion/web-renderer",
26908
26908
  "@remotion/design",
26909
- "@remotion/drag-and-drop",
26909
+ "@remotion/studio-protocol",
26910
26910
  "@remotion/light-leaks",
26911
26911
  "@remotion/rough-notation",
26912
26912
  "@remotion/starburst",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remotion/promo-pages",
3
- "version": "4.0.501",
3
+ "version": "4.0.502",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -11,19 +11,19 @@
11
11
  },
12
12
  "type": "module",
13
13
  "dependencies": {
14
- "@remotion/animated-emoji": "4.0.501",
15
- "@remotion/design": "4.0.501",
16
- "@remotion/web-renderer": "4.0.501",
17
- "@remotion/lottie": "4.0.501",
18
- "@remotion/paths": "4.0.501",
19
- "@remotion/player": "4.0.501",
20
- "@remotion/shapes": "4.0.501",
21
- "@remotion/media": "4.0.501",
22
- "@remotion/svg-3d-engine": "4.0.501",
23
- "create-video": "4.0.501",
14
+ "@remotion/animated-emoji": "4.0.502",
15
+ "@remotion/design": "4.0.502",
16
+ "@remotion/web-renderer": "4.0.502",
17
+ "@remotion/lottie": "4.0.502",
18
+ "@remotion/paths": "4.0.502",
19
+ "@remotion/player": "4.0.502",
20
+ "@remotion/shapes": "4.0.502",
21
+ "@remotion/media": "4.0.502",
22
+ "@remotion/svg-3d-engine": "4.0.502",
23
+ "create-video": "4.0.502",
24
24
  "hls.js": "1.5.19",
25
25
  "polished": "4.3.1",
26
- "remotion": "4.0.501",
26
+ "remotion": "4.0.502",
27
27
  "zod": "4.4.3",
28
28
  "@mux/upchunk": "3.5.0",
29
29
  "@vidstack/react": "1.12.13",
@@ -34,7 +34,7 @@
34
34
  "@mediabunny/mp3-encoder": "1.50.8"
35
35
  },
36
36
  "devDependencies": {
37
- "@remotion/eslint-config-internal": "4.0.501",
37
+ "@remotion/eslint-config-internal": "4.0.502",
38
38
  "@eslint/eslintrc": "3.1.0",
39
39
  "@types/react": "19.2.7",
40
40
  "@types/react-dom": "19.2.3",