@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
@@ -35,7 +35,7 @@ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require
35
35
  // ../design/dist/esm/index.mjs
36
36
  import * as React23 from "react";
37
37
  import * as React3 from "react";
38
- import { Fragment as Fragment2, jsx as jsx43 } from "react/jsx-runtime";
38
+ import { Fragment as Fragment22, jsx as jsx43 } from "react/jsx-runtime";
39
39
  import React52, { useCallback as useCallback27, useRef as useRef210, useState as useState22 } from "react";
40
40
 
41
41
  // ../../node_modules/.bun/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs
@@ -4383,13 +4383,12 @@ import { jsx as jsx34 } from "react/jsx-runtime";
4383
4383
  import { jsx as jsx35 } from "react/jsx-runtime";
4384
4384
  import React39, { useMemo as useMemo37 } from "react";
4385
4385
  import { jsx as jsx36 } from "react/jsx-runtime";
4386
- import {
4387
- Children,
4386
+ import React41, {
4388
4387
  forwardRef as forwardRef14,
4389
4388
  useMemo as useMemo38
4390
4389
  } from "react";
4391
4390
  import React40 from "react";
4392
- import { jsx as jsx37 } from "react/jsx-runtime";
4391
+ import { jsx as jsx37, jsxs as jsxs3, Fragment } from "react/jsx-runtime";
4393
4392
  import React42 from "react";
4394
4393
  import { forwardRef as forwardRef16, useCallback as useCallback25, useContext as useContext39 } from "react";
4395
4394
  import {
@@ -5279,26 +5278,20 @@ var continueRenderInternal = ({
5279
5278
  if (typeof handle !== "number") {
5280
5279
  throw new TypeError("The parameter passed into continueRender() must be the return value of delayRender() which is a number. Got: " + JSON.stringify(handle));
5281
5280
  }
5282
- scope.remotion_delayRenderHandles = scope.remotion_delayRenderHandles.filter((h) => {
5283
- if (h === handle) {
5284
- if (environment.isRendering && scope !== undefined) {
5285
- if (!scope.remotion_delayRenderTimeouts[handle]) {
5286
- return false;
5287
- }
5288
- const { label: label2, startTime, timeout } = scope.remotion_delayRenderTimeouts[handle];
5289
- clearTimeout(timeout);
5290
- const message = [
5291
- label2 ? `"${label2}"` : "A handle",
5292
- DELAY_RENDER_CLEAR_TOKEN,
5293
- `${Date.now() - startTime}ms`
5294
- ].filter(truthy).join(" ");
5295
- Log.verbose({ logLevel, tag: "delayRender()" }, message);
5296
- delete scope.remotion_delayRenderTimeouts[handle];
5297
- }
5298
- return false;
5299
- }
5300
- return true;
5301
- });
5281
+ const handleExists = scope.remotion_delayRenderHandles.includes(handle);
5282
+ const timeoutEntry = scope.remotion_delayRenderTimeouts[handle];
5283
+ if (handleExists && environment.isRendering && timeoutEntry) {
5284
+ const { label: label2, startTime, timeout } = timeoutEntry;
5285
+ clearTimeout(timeout);
5286
+ const message = [
5287
+ label2 ? `"${label2}"` : "A handle",
5288
+ DELAY_RENDER_CLEAR_TOKEN,
5289
+ `${Date.now() - startTime}ms`
5290
+ ].filter(truthy).join(" ");
5291
+ Log.verbose({ logLevel, tag: "delayRender()" }, message);
5292
+ delete scope.remotion_delayRenderTimeouts[handle];
5293
+ }
5294
+ scope.remotion_delayRenderHandles = scope.remotion_delayRenderHandles.filter((h) => h !== handle);
5302
5295
  if (scope.remotion_delayRenderHandles.length === 0) {
5303
5296
  scope.remotion_renderReady = true;
5304
5297
  }
@@ -5571,7 +5564,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
5571
5564
  var addSequenceStackTraces = (component) => {
5572
5565
  componentsToAddStacksTo.push(component);
5573
5566
  };
5574
- var VERSION = "4.0.489";
5567
+ var VERSION = "4.0.491";
5575
5568
  var checkMultipleRemotionVersions = () => {
5576
5569
  if (typeof globalThis === "undefined") {
5577
5570
  return;
@@ -5952,7 +5945,8 @@ var transformSchema = {
5952
5945
  max: 100,
5953
5946
  step: 0.01,
5954
5947
  default: 1,
5955
- description: "Scale"
5948
+ description: "Scale",
5949
+ defaultKeyframeOutput: "perceptual-scale"
5956
5950
  },
5957
5951
  "style.rotate": {
5958
5952
  type: "rotation-css",
@@ -6183,7 +6177,7 @@ var SequenceManagerRefContext = React11.createContext({
6183
6177
  current: []
6184
6178
  });
6185
6179
  var makeSequencePropsSubscriptionKey = (key) => {
6186
- return `${key.nodePath.join(".")}.${key.sequenceKeys.join(".")}.${key.effectKeys.map((keys) => keys.join(".")).join(".")}`;
6180
+ return `${key.absolutePath}\x00${key.nodePath.join(".")}\x00${key.sequenceKeys.join(".")}\x00${key.effectKeys.map((keys) => keys.join(".")).join(".")}`;
6187
6181
  };
6188
6182
  var VisualModePropStatusesContext = React11.createContext({
6189
6183
  propStatuses: {}
@@ -6756,8 +6750,20 @@ var serializeStringInterpolationValue = ({
6756
6750
  }
6757
6751
  return values.slice(0, dimensions).map((value, index) => `${stringifyNumber(value)}${units[index]}`).join(" ");
6758
6752
  };
6753
+ var toSignedArea = (scale) => {
6754
+ if (scale === 0) {
6755
+ return 0;
6756
+ }
6757
+ return Math.sign(scale) * scale * scale;
6758
+ };
6759
+ var fromSignedArea = (area) => {
6760
+ if (area === 0) {
6761
+ return 0;
6762
+ }
6763
+ return Math.sign(area) * Math.sqrt(Math.abs(area));
6764
+ };
6759
6765
  function interpolateFunction(input, inputRange, outputRange, options) {
6760
- const { extrapolateLeft, extrapolateRight, easing } = options;
6766
+ const { extrapolateLeft, extrapolateRight, easing, output } = options;
6761
6767
  let result = input;
6762
6768
  const [inputMin, inputMax] = inputRange;
6763
6769
  const [outputMin, outputMax] = outputRange;
@@ -6788,7 +6794,13 @@ function interpolateFunction(input, inputRange, outputRange, options) {
6788
6794
  }
6789
6795
  result = (result - inputMin) / (inputMax - inputMin);
6790
6796
  result = easing(result);
6791
- result = result * (outputMax - outputMin) + outputMin;
6797
+ if (output === "perceptual-scale") {
6798
+ const signedAreaMin = toSignedArea(outputMin);
6799
+ const signedAreaMax = toSignedArea(outputMax);
6800
+ result = fromSignedArea(result * (signedAreaMax - signedAreaMin) + signedAreaMin);
6801
+ } else {
6802
+ result = result * (outputMax - outputMin) + outputMin;
6803
+ }
6792
6804
  return result;
6793
6805
  }
6794
6806
  function findRange(input, inputRange) {
@@ -6801,6 +6813,9 @@ function findRange(input, inputRange) {
6801
6813
  return i - 1;
6802
6814
  }
6803
6815
  var defaultEasing = (num) => num;
6816
+ var resolveOutputOption = (output) => {
6817
+ return output ?? "linear";
6818
+ };
6804
6819
  var shouldExtendRightForEasing = (easing) => {
6805
6820
  return easing.remotionShouldExtendRight === true;
6806
6821
  };
@@ -6822,12 +6837,14 @@ var interpolateSegment = ({
6822
6837
  outputRange,
6823
6838
  easing,
6824
6839
  extrapolateLeft,
6825
- extrapolateRight
6840
+ extrapolateRight,
6841
+ output
6826
6842
  }) => {
6827
6843
  return interpolateFunction(input, inputRange, outputRange, {
6828
6844
  easing,
6829
6845
  extrapolateLeft,
6830
- extrapolateRight: input > inputRange[1] && extrapolateRight === "clamp" && shouldExtendRightForEasing(easing) ? "extend" : extrapolateRight
6846
+ extrapolateRight: input > inputRange[1] && extrapolateRight === "clamp" && shouldExtendRightForEasing(easing) ? "extend" : extrapolateRight,
6847
+ output
6831
6848
  });
6832
6849
  };
6833
6850
  var interpolateNumber = ({
@@ -6836,6 +6853,7 @@ var interpolateNumber = ({
6836
6853
  outputRange,
6837
6854
  options
6838
6855
  }) => {
6856
+ const output = resolveOutputOption(options?.output);
6839
6857
  if (inputRange.length === 1) {
6840
6858
  return outputRange[0];
6841
6859
  }
@@ -6860,7 +6878,8 @@ var interpolateNumber = ({
6860
6878
  outputRange: [outputRange[range], outputRange[range + 1]],
6861
6879
  easing,
6862
6880
  extrapolateLeft,
6863
- extrapolateRight
6881
+ extrapolateRight,
6882
+ output
6864
6883
  });
6865
6884
  for (let segmentIndex = 0;segmentIndex < range; segmentIndex++) {
6866
6885
  const previousEasing = resolveEasingForSegment({
@@ -6880,7 +6899,8 @@ var interpolateNumber = ({
6880
6899
  outputRange: [outputRange[segmentIndex], outputRange[segmentIndex + 1]],
6881
6900
  easing: previousEasing,
6882
6901
  extrapolateLeft,
6883
- extrapolateRight: "extend"
6902
+ extrapolateRight: "extend",
6903
+ output
6884
6904
  });
6885
6905
  result += continuedSegmentValue - outputRange[segmentIndex + 1];
6886
6906
  }
@@ -6928,14 +6948,18 @@ var interpolateString = ({
6928
6948
  }
6929
6949
  }
6930
6950
  }
6931
- return serializeStringInterpolationValue({
6932
- kind,
6933
- values: [0, 0, 0].map((_, axis) => interpolateNumber({
6951
+ const values = [0, 0, 0];
6952
+ for (let axis = 0;axis < dimensions; axis++) {
6953
+ values[axis] = interpolateNumber({
6934
6954
  input,
6935
6955
  inputRange,
6936
6956
  outputRange: parsedOutputRange.map((parsed) => parsed.values[axis]),
6937
6957
  options
6938
- })),
6958
+ });
6959
+ }
6960
+ return serializeStringInterpolationValue({
6961
+ kind,
6962
+ values,
6939
6963
  units,
6940
6964
  dimensions
6941
6965
  });
@@ -7019,6 +7043,12 @@ function assertValidInterpolatePosterizeOption(posterize) {
7019
7043
  throw new Error(`posterize must be a positive finite number, but got ${posterize}`);
7020
7044
  }
7021
7045
  }
7046
+ function assertValidInterpolateOutputOption(output) {
7047
+ if (output === undefined || output === "linear" || output === "perceptual-scale") {
7048
+ return;
7049
+ }
7050
+ throw new Error(`output must be "linear" or "perceptual-scale", but got ${String(output)}`);
7051
+ }
7022
7052
  function interpolate(input, inputRange, outputRange, options) {
7023
7053
  if (typeof input === "undefined") {
7024
7054
  throw new Error("input can not be undefined");
@@ -7036,6 +7066,7 @@ function interpolate(input, inputRange, outputRange, options) {
7036
7066
  checkValidInputRange(inputRange);
7037
7067
  assertValidInterpolateEasingOption(options?.easing, inputRange.length);
7038
7068
  assertValidInterpolatePosterizeOption(options?.posterize);
7069
+ assertValidInterpolateOutputOption(options?.output);
7039
7070
  if (typeof input !== "number") {
7040
7071
  throw new TypeError("Cannot interpolate an input which is not a number");
7041
7072
  }
@@ -7980,6 +8011,7 @@ var interpolateKeyframedStatus = ({
7980
8011
  easing: easing.map((e) => easingToFn({ easing: e, forceSpringAllowTail })),
7981
8012
  extrapolateLeft: clamping.left,
7982
8013
  extrapolateRight: clamping.right,
8014
+ output: status.output,
7983
8015
  posterize: status.posterize
7984
8016
  });
7985
8017
  } catch {
@@ -8220,7 +8252,7 @@ var getFlatSchemaWithAllKeys = (schema) => {
8220
8252
  const out = {};
8221
8253
  const addKey = (key, field) => {
8222
8254
  if (key in out) {
8223
- throw new Error(`Duplicate key "${key}" in schema: discriminated union variants must not share keys`);
8255
+ return;
8224
8256
  }
8225
8257
  out[key] = field;
8226
8258
  };
@@ -8758,6 +8790,7 @@ var RegularSequenceRefForwardingFunction = ({
8758
8790
  src: isMedia.data.src,
8759
8791
  getStack: () => stackRef.current,
8760
8792
  startMediaFrom: startMediaFrom ?? isMedia.data.startMediaFrom,
8793
+ mediaFrameAtSequenceZero,
8761
8794
  volume: isMedia.data.volumes,
8762
8795
  refForOutline: refForOutline ?? null,
8763
8796
  isInsideSeries,
@@ -8821,6 +8854,7 @@ var RegularSequenceRefForwardingFunction = ({
8821
8854
  isInsideSeries,
8822
8855
  registeredFrozenFrame,
8823
8856
  startMediaFrom,
8857
+ mediaFrameAtSequenceZero,
8824
8858
  frozenMediaFrame
8825
8859
  ]);
8826
8860
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
@@ -10771,7 +10805,9 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10771
10805
  return;
10772
10806
  }
10773
10807
  if (data === undefined) {
10774
- current.src = EMPTY_AUDIO;
10808
+ if (current.src !== EMPTY_AUDIO) {
10809
+ current.src = EMPTY_AUDIO;
10810
+ }
10775
10811
  return;
10776
10812
  }
10777
10813
  if (!data) {
@@ -10840,7 +10876,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10840
10876
  if (prevA.id === id) {
10841
10877
  const isTheSame = compareProps(aud, prevA.props) && prevA.premounting === premounting && prevA.postmounting === postmounting;
10842
10878
  if (isTheSame) {
10843
- return prevA;
10879
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
10844
10880
  }
10845
10881
  changed = true;
10846
10882
  return {
@@ -10852,7 +10888,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10852
10888
  audioMounted
10853
10889
  };
10854
10890
  }
10855
- return prevA;
10891
+ return prevA.audioMounted === audioMounted ? prevA : { ...prevA, audioMounted };
10856
10892
  });
10857
10893
  if (changed) {
10858
10894
  rerenderAudios();
@@ -10891,16 +10927,19 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
10891
10927
  unregisterAudio,
10892
10928
  updateAudio
10893
10929
  ]);
10930
+ const sharedAudioTagElements = useMemo21(() => {
10931
+ return refs.map(({ id, ref }) => {
10932
+ return /* @__PURE__ */ jsx19("audio", {
10933
+ ref,
10934
+ preload: "metadata",
10935
+ src: EMPTY_AUDIO
10936
+ }, id);
10937
+ });
10938
+ }, [refs]);
10894
10939
  return /* @__PURE__ */ jsxs2(SharedAudioTagsContext.Provider, {
10895
10940
  value: audioTagsValue,
10896
10941
  children: [
10897
- refs.map(({ id, ref }) => {
10898
- return /* @__PURE__ */ jsx19("audio", {
10899
- ref,
10900
- preload: "metadata",
10901
- src: EMPTY_AUDIO
10902
- }, id);
10903
- }),
10942
+ sharedAudioTagElements,
10904
10943
  children
10905
10944
  ]
10906
10945
  });
@@ -11361,6 +11400,7 @@ var useMediaInTimeline = ({
11361
11400
  showInTimeline: true,
11362
11401
  nonce: nonce.get(),
11363
11402
  startMediaFrom: 0 - startsAt,
11403
+ mediaFrameAtSequenceZero: null,
11364
11404
  doesVolumeChange,
11365
11405
  loopDisplay,
11366
11406
  playbackRate,
@@ -12994,16 +13034,16 @@ var isMissingPaintRecordError = (error2) => {
12994
13034
  return error2 instanceof DOMException && error2.name === "InvalidStateError";
12995
13035
  };
12996
13036
  var missingPaintRecordMessage = "HtmlInCanvas: Expected the element to be inside the viewport during rendering, but Chrome had no cached paint record for it.";
12997
- var resizeOffscreenCanvas = ({
12998
- offscreen,
13037
+ var resizePaintTarget = ({
13038
+ target,
12999
13039
  width,
13000
13040
  height
13001
13041
  }) => {
13002
- if (offscreen.width !== width) {
13003
- offscreen.width = width;
13042
+ if (target.width !== width) {
13043
+ target.width = width;
13004
13044
  }
13005
- if (offscreen.height !== height) {
13006
- offscreen.height = height;
13045
+ if (target.height !== height) {
13046
+ target.height = height;
13007
13047
  }
13008
13048
  };
13009
13049
  var defaultOnPaint = ({
@@ -13019,7 +13059,7 @@ var defaultOnPaint = ({
13019
13059
  const transform = ctx.drawElementImage(elementImage, 0, 0);
13020
13060
  element.style.transform = transform.toString();
13021
13061
  };
13022
- var HtmlInCanvasAncestorContext = createContext23(false);
13062
+ var HtmlInCanvasAncestorContext = createContext23(null);
13023
13063
  var HtmlInCanvasContent = forwardRef9(({
13024
13064
  width,
13025
13065
  height,
@@ -13031,20 +13071,22 @@ var HtmlInCanvasContent = forwardRef9(({
13031
13071
  controls,
13032
13072
  style
13033
13073
  }, ref) => {
13034
- const isInsideAncestorHtmlInCanvas = useContext31(HtmlInCanvasAncestorContext);
13074
+ const ancestor = useContext31(HtmlInCanvasAncestorContext);
13035
13075
  assertHtmlInCanvasDimensions(width, height);
13036
13076
  const resolvedPixelDensity = resolveHtmlInCanvasPixelDensity(pixelDensity);
13037
13077
  const canvasWidth = Math.ceil(width * resolvedPixelDensity);
13038
13078
  const canvasHeight = Math.ceil(height * resolvedPixelDensity);
13039
13079
  const { continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
13040
- const { isRendering } = useRemotionEnvironment();
13080
+ const { isClientSideRendering, isRendering } = useRemotionEnvironment();
13081
+ const canRetryMissingPaintRecord = !isRendering || isClientSideRendering;
13082
+ const usesDirectLayoutCanvas = onPaint === undefined && onInit === undefined;
13041
13083
  if (!isHtmlInCanvasSupported()) {
13042
13084
  cancelRender2(new Error(HTML_IN_CANVAS_UNSUPPORTED_MESSAGE));
13043
13085
  }
13044
13086
  const canvas2dRef = useRef22(null);
13045
- const offscreenRef = useRef22(null);
13087
+ const paintTargetRef = useRef22(null);
13046
13088
  const divRef = useRef22(null);
13047
- const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}`;
13089
+ const canvasSizeKey = `${width}x${height}@${resolvedPixelDensity}-${usesDirectLayoutCanvas ? "direct" : "offscreen"}`;
13048
13090
  const setLayoutCanvasRef = useCallback16((node) => {
13049
13091
  canvas2dRef.current = node;
13050
13092
  if (typeof ref === "function") {
@@ -13067,17 +13109,19 @@ var HtmlInCanvasContent = forwardRef9(({
13067
13109
  const initializedRef = useRef22(false);
13068
13110
  const onInitCleanupRef = useRef22(null);
13069
13111
  const unmountedRef = useRef22(false);
13112
+ const ancestorRef = useRef22(ancestor);
13113
+ ancestorRef.current = ancestor;
13070
13114
  const onPaintCb = useCallback16(async () => {
13071
13115
  const element = divRef.current;
13072
13116
  if (!element) {
13073
13117
  throw new Error("Canvas or scene element not found");
13074
13118
  }
13075
- const offscreen = offscreenRef.current;
13076
- if (!offscreen) {
13077
- throw new Error("HtmlInCanvas: offscreen canvas not ready (transferControlToOffscreen failed or canvas is remounting)");
13119
+ const paintTarget = paintTargetRef.current;
13120
+ if (!paintTarget) {
13121
+ throw new Error("HtmlInCanvas: paint target is not ready because the canvas is remounting");
13078
13122
  }
13079
- resizeOffscreenCanvas({
13080
- offscreen,
13123
+ resizePaintTarget({
13124
+ target: paintTarget,
13081
13125
  width: canvasWidth,
13082
13126
  height: canvasHeight
13083
13127
  });
@@ -13088,22 +13132,30 @@ var HtmlInCanvasContent = forwardRef9(({
13088
13132
  }
13089
13133
  const handle = delayRender("onPaint");
13090
13134
  if (!initializedRef.current) {
13091
- let initImage = null;
13092
- try {
13093
- initImage = placeholderCanvas.captureElementImage(element);
13094
- } catch (error2) {
13095
- if (isMissingPaintRecordError(error2) && !isRendering) {} else if (isMissingPaintRecordError(error2)) {
13096
- throw new Error(missingPaintRecordMessage);
13097
- } else {
13135
+ const currentOnInit = onInitRef.current;
13136
+ if (!currentOnInit) {
13137
+ initializedRef.current = true;
13138
+ } else {
13139
+ let initImage;
13140
+ try {
13141
+ initImage = placeholderCanvas.captureElementImage(element);
13142
+ } catch (error2) {
13143
+ if (isMissingPaintRecordError(error2) && canRetryMissingPaintRecord) {
13144
+ continueRender2(handle);
13145
+ return;
13146
+ }
13147
+ if (isMissingPaintRecordError(error2)) {
13148
+ throw new Error(missingPaintRecordMessage);
13149
+ }
13098
13150
  throw error2;
13099
13151
  }
13100
- }
13101
- if (initImage) {
13102
13152
  initializedRef.current = true;
13103
- const currentOnInit = onInitRef.current;
13104
- if (currentOnInit) {
13153
+ try {
13154
+ if (paintTarget instanceof HTMLCanvasElement) {
13155
+ throw new Error("HtmlInCanvas: onInit requires an OffscreenCanvas paint target");
13156
+ }
13105
13157
  const cleanup = await currentOnInit({
13106
- canvas: offscreen,
13158
+ canvas: paintTarget,
13107
13159
  element,
13108
13160
  elementImage: initImage,
13109
13161
  pixelDensity: resolvedPixelDensity
@@ -13116,15 +13168,16 @@ var HtmlInCanvasContent = forwardRef9(({
13116
13168
  } else {
13117
13169
  onInitCleanupRef.current = cleanup;
13118
13170
  }
13171
+ } finally {
13172
+ initImage.close();
13119
13173
  }
13120
13174
  }
13121
13175
  }
13122
- const handler = onPaintRef.current ?? defaultOnPaint;
13123
13176
  let elImage;
13124
13177
  try {
13125
13178
  elImage = placeholderCanvas.captureElementImage(element);
13126
13179
  } catch (error2) {
13127
- if (isMissingPaintRecordError(error2) && !isRendering) {
13180
+ if (isMissingPaintRecordError(error2) && canRetryMissingPaintRecord) {
13128
13181
  continueRender2(handle);
13129
13182
  return;
13130
13183
  }
@@ -13133,20 +13186,41 @@ var HtmlInCanvasContent = forwardRef9(({
13133
13186
  }
13134
13187
  throw error2;
13135
13188
  }
13136
- await handler({
13137
- canvas: offscreen,
13138
- element,
13139
- elementImage: elImage,
13140
- pixelDensity: resolvedPixelDensity
13141
- });
13142
- await runEffectChain({
13143
- state: chainState.get(canvasWidth, canvasHeight),
13144
- source: offscreen,
13145
- effects: effectsRef.current,
13146
- output: offscreen,
13147
- width: canvasWidth,
13148
- height: canvasHeight
13149
- });
13189
+ try {
13190
+ const currentOnPaint = onPaintRef.current;
13191
+ if (currentOnPaint) {
13192
+ if (paintTarget instanceof HTMLCanvasElement) {
13193
+ throw new Error("HtmlInCanvas: onPaint requires an OffscreenCanvas paint target");
13194
+ }
13195
+ const paintResult = currentOnPaint({
13196
+ canvas: paintTarget,
13197
+ element,
13198
+ elementImage: elImage,
13199
+ pixelDensity: resolvedPixelDensity
13200
+ });
13201
+ if (paintResult) {
13202
+ await paintResult;
13203
+ }
13204
+ } else {
13205
+ defaultOnPaint({
13206
+ canvas: paintTarget,
13207
+ element,
13208
+ elementImage: elImage,
13209
+ pixelDensity: resolvedPixelDensity
13210
+ });
13211
+ }
13212
+ await runEffectChain({
13213
+ state: chainState.get(canvasWidth, canvasHeight),
13214
+ source: paintTarget,
13215
+ effects: effectsRef.current,
13216
+ output: paintTarget,
13217
+ width: canvasWidth,
13218
+ height: canvasHeight
13219
+ });
13220
+ } finally {
13221
+ elImage.close();
13222
+ }
13223
+ ancestorRef.current?.requestParentPaint();
13150
13224
  continueRender2(handle);
13151
13225
  } catch (error2) {
13152
13226
  cancelRender2(error2);
@@ -13158,7 +13232,7 @@ var HtmlInCanvasContent = forwardRef9(({
13158
13232
  continueRender2,
13159
13233
  cancelRender2,
13160
13234
  resolvedPixelDensity,
13161
- isRendering
13235
+ canRetryMissingPaintRecord
13162
13236
  ]);
13163
13237
  useLayoutEffect9(() => {
13164
13238
  const placeholder = canvas2dRef.current;
@@ -13166,10 +13240,10 @@ var HtmlInCanvasContent = forwardRef9(({
13166
13240
  throw new Error("Canvas not found");
13167
13241
  }
13168
13242
  placeholder.layoutSubtree = true;
13169
- const offscreen = placeholder.transferControlToOffscreen();
13170
- offscreenRef.current = offscreen;
13171
- resizeOffscreenCanvas({
13172
- offscreen,
13243
+ const paintTarget = usesDirectLayoutCanvas ? placeholder : placeholder.transferControlToOffscreen();
13244
+ paintTargetRef.current = paintTarget;
13245
+ resizePaintTarget({
13246
+ target: paintTarget,
13173
13247
  width: canvasWidth,
13174
13248
  height: canvasHeight
13175
13249
  });
@@ -13178,13 +13252,19 @@ var HtmlInCanvasContent = forwardRef9(({
13178
13252
  placeholder.addEventListener("paint", onPaintCb);
13179
13253
  return () => {
13180
13254
  placeholder.removeEventListener("paint", onPaintCb);
13181
- offscreenRef.current = null;
13255
+ paintTargetRef.current = null;
13182
13256
  initializedRef.current = false;
13183
13257
  unmountedRef.current = true;
13184
13258
  onInitCleanupRef.current?.();
13185
13259
  onInitCleanupRef.current = null;
13186
13260
  };
13187
- }, [onPaintCb, cancelRender2, canvasWidth, canvasHeight]);
13261
+ }, [
13262
+ onPaintCb,
13263
+ cancelRender2,
13264
+ canvasWidth,
13265
+ canvasHeight,
13266
+ usesDirectLayoutCanvas
13267
+ ]);
13188
13268
  const onPaintChangedRef = useRef22(false);
13189
13269
  useLayoutEffect9(() => {
13190
13270
  if (!onPaintChangedRef.current) {
@@ -13223,11 +13303,15 @@ var HtmlInCanvasContent = forwardRef9(({
13223
13303
  ...style ?? {}
13224
13304
  };
13225
13305
  }, [height, style, width]);
13226
- if (isInsideAncestorHtmlInCanvas) {
13227
- 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.");
13228
- }
13306
+ const ancestorValue = useMemo30(() => {
13307
+ return {
13308
+ requestParentPaint: () => {
13309
+ canvas2dRef.current?.requestPaint?.();
13310
+ }
13311
+ };
13312
+ }, []);
13229
13313
  return /* @__PURE__ */ jsx25(HtmlInCanvasAncestorContext.Provider, {
13230
- value: true,
13314
+ value: ancestorValue,
13231
13315
  children: /* @__PURE__ */ jsx25("canvas", {
13232
13316
  ref: setLayoutCanvasRef,
13233
13317
  width: canvasWidth,
@@ -14099,6 +14183,22 @@ var Img = withInteractivitySchema({
14099
14183
  supportsEffects: true
14100
14184
  });
14101
14185
  addSequenceStackTraces(Img);
14186
+ var sourcePathToIdentityPrefix = (packageName) => {
14187
+ if (packageName === "remotion") {
14188
+ return "dev.remotion.remotion";
14189
+ }
14190
+ if (packageName.startsWith("@remotion/")) {
14191
+ const normalizedPackageName = packageName.slice("@remotion/".length).replace(/-([a-z])/g, (_, char) => char.toUpperCase());
14192
+ return `dev.remotion.${normalizedPackageName}`;
14193
+ }
14194
+ throw new Error(`Unsupported Remotion package name: ${packageName}`);
14195
+ };
14196
+ var makeRemotionComponentIdentity = ({
14197
+ packageName,
14198
+ componentName
14199
+ }) => {
14200
+ return `${sourcePathToIdentityPrefix(packageName)}.${componentName}`;
14201
+ };
14102
14202
  var interactiveElementSchema = {
14103
14203
  ...baseSchema,
14104
14204
  ...transformSchema,
@@ -14112,6 +14212,11 @@ var setRef = (ref, value) => {
14112
14212
  ref.current = value;
14113
14213
  }
14114
14214
  };
14215
+ var withSchema = (options) => {
14216
+ const Wrapped = withInteractivitySchema(options);
14217
+ addSequenceStackTraces(Wrapped);
14218
+ return Wrapped;
14219
+ };
14115
14220
  var makeInteractiveElement = (tag, displayName) => {
14116
14221
  const Inner = forwardRef12((propsWithControls, ref) => {
14117
14222
  const {
@@ -14151,15 +14256,17 @@ var makeInteractiveElement = (tag, displayName) => {
14151
14256
  });
14152
14257
  });
14153
14258
  Inner.displayName = displayName;
14154
- const Wrapped = withInteractivitySchema({
14259
+ const Wrapped = withSchema({
14155
14260
  Component: Inner,
14156
14261
  componentName: displayName,
14157
- componentIdentity: `dev.remotion.remotion.${displayName.slice(1, -1)}`,
14262
+ componentIdentity: makeRemotionComponentIdentity({
14263
+ packageName: "remotion",
14264
+ componentName: displayName.slice(1, -1)
14265
+ }),
14158
14266
  schema: interactiveElementSchema,
14159
14267
  supportsEffects: false
14160
14268
  });
14161
14269
  Wrapped.displayName = displayName;
14162
- addSequenceStackTraces(Wrapped);
14163
14270
  return Wrapped;
14164
14271
  };
14165
14272
  var Interactive = {
@@ -14168,7 +14275,8 @@ var Interactive = {
14168
14275
  textSchema,
14169
14276
  premountSchema,
14170
14277
  sequenceSchema,
14171
- withSchema: withInteractivitySchema,
14278
+ withSchema,
14279
+ _internalMakeRemotionComponentIdentity: makeRemotionComponentIdentity,
14172
14280
  A: makeInteractiveElement("a", "<Interactive.A>"),
14173
14281
  Article: makeInteractiveElement("article", "<Interactive.Article>"),
14174
14282
  Aside: makeInteractiveElement("aside", "<Interactive.Aside>"),
@@ -15573,66 +15681,130 @@ var flattenChildren = (children) => {
15573
15681
  return flatChildren;
15574
15682
  }, []);
15575
15683
  };
15576
- var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
15684
+ var seriesSequenceSchema = {
15685
+ durationInFrames: Interactive.baseSchema.durationInFrames,
15686
+ name: Interactive.sequenceSchema.name,
15687
+ hidden: Interactive.sequenceSchema.hidden,
15688
+ showInTimeline: Interactive.sequenceSchema.showInTimeline,
15689
+ freeze: Interactive.baseSchema.freeze,
15690
+ layout: Interactive.sequenceSchema.layout
15691
+ };
15692
+ var SeriesSequenceInner = forwardRef14(({
15693
+ offset = 0,
15694
+ className = "",
15695
+ stack = null,
15696
+ _remotionInternalRender = null,
15697
+ ...props2
15698
+ }, ref) => {
15577
15699
  useRequireToBeInsideSeries();
15700
+ if (_remotionInternalRender) {
15701
+ return _remotionInternalRender({ ...props2, offset, className: className || undefined, stack }, ref);
15702
+ }
15578
15703
  return /* @__PURE__ */ jsx37(IsNotInsideSeriesProvider, {
15579
- children
15704
+ children: props2.children
15580
15705
  });
15581
- };
15582
- var SeriesSequence = forwardRef14(SeriesSequenceRefForwardingFunction);
15706
+ });
15707
+ var SeriesSequence = Interactive.withSchema({
15708
+ Component: SeriesSequenceInner,
15709
+ componentName: "<Series.Sequence>",
15710
+ componentIdentity: "dev.remotion.remotion.Series.Sequence",
15711
+ schema: seriesSequenceSchema,
15712
+ supportsEffects: false
15713
+ });
15583
15714
  var SequenceWithoutSchemaWithRef = SequenceWithoutSchema;
15715
+ var validateSeriesSequenceProps = ({
15716
+ durationInFrames,
15717
+ offset: offsetProp,
15718
+ index,
15719
+ childrenLength
15720
+ }) => {
15721
+ const debugInfo = `index = ${index}, duration = ${durationInFrames}`;
15722
+ if (index !== childrenLength - 1 || durationInFrames !== Infinity) {
15723
+ validateDurationInFrames(durationInFrames, {
15724
+ component: `of a <Series.Sequence /> component`,
15725
+ allowFloats: true
15726
+ });
15727
+ }
15728
+ const offset = offsetProp ?? 0;
15729
+ if (Number.isNaN(offset)) {
15730
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`);
15731
+ }
15732
+ if (!Number.isFinite(offset)) {
15733
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
15734
+ }
15735
+ if (offset % 1 !== 0) {
15736
+ throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
15737
+ }
15738
+ return offset;
15739
+ };
15584
15740
  var SeriesInner = (props2) => {
15585
15741
  const childrenValue = useMemo38(() => {
15586
- let startFrame = 0;
15587
15742
  const flattenedChildren = flattenChildren(props2.children);
15588
- return Children.map(flattenedChildren, (child, i) => {
15743
+ const renderChildren = (i, startFrame) => {
15744
+ if (i === flattenedChildren.length) {
15745
+ return null;
15746
+ }
15747
+ const child = flattenedChildren[i];
15589
15748
  const castedChild = child;
15590
15749
  if (typeof castedChild === "string") {
15591
15750
  if (castedChild.trim() === "") {
15592
- return null;
15751
+ return renderChildren(i + 1, startFrame);
15593
15752
  }
15594
15753
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but you passed a string "${castedChild}"`);
15595
15754
  }
15596
15755
  if (castedChild.type !== SeriesSequence) {
15597
15756
  throw new TypeError(`The <Series /> component only accepts a list of <Series.Sequence /> components as its children, but got ${castedChild} instead`);
15598
15757
  }
15599
- const debugInfo = `index = ${i}, duration = ${castedChild.props.durationInFrames}`;
15600
- const durationInFramesProp = castedChild.props.durationInFrames;
15601
- const {
15602
- durationInFrames,
15603
- children: _children,
15604
- from,
15605
- name,
15606
- ...passedProps
15607
- } = castedChild.props;
15608
- if (i !== flattenedChildren.length - 1 || durationInFramesProp !== Infinity) {
15609
- validateDurationInFrames(durationInFramesProp, {
15610
- component: `of a <Series.Sequence /> component`,
15611
- allowFloats: true
15612
- });
15613
- }
15614
- const offset = castedChild.props.offset ?? 0;
15615
- if (Number.isNaN(offset)) {
15616
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must not be NaN, but got NaN (${debugInfo}).`);
15617
- }
15618
- if (!Number.isFinite(offset)) {
15619
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
15620
- }
15621
- if (offset % 1 !== 0) {
15622
- throw new TypeError(`The "offset" property of a <Series.Sequence /> must be finite, but got ${offset} (${debugInfo}).`);
15623
- }
15624
- const currentStartFrame = startFrame + offset;
15625
- startFrame += durationInFramesProp + offset;
15626
- return /* @__PURE__ */ jsx37(SequenceWithoutSchemaWithRef, {
15627
- ref: castedChild.ref,
15628
- name: name || "<Series.Sequence>",
15629
- _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
15630
- from: currentStartFrame,
15631
- durationInFrames: durationInFramesProp,
15632
- ...passedProps,
15633
- children: child
15758
+ const castedElement = castedChild;
15759
+ validateSeriesSequenceProps({
15760
+ durationInFrames: castedElement.props.durationInFrames,
15761
+ offset: castedElement.props.offset,
15762
+ index: i,
15763
+ childrenLength: flattenedChildren.length
15634
15764
  });
15635
- });
15765
+ return React41.cloneElement(castedElement, {
15766
+ _remotionInternalRender: (resolvedProps, ref) => {
15767
+ const durationInFramesProp = resolvedProps.durationInFrames;
15768
+ const {
15769
+ durationInFrames: _durationInFrames,
15770
+ children: sequenceChildren,
15771
+ offset: offsetProp,
15772
+ controls,
15773
+ stack,
15774
+ from: _from,
15775
+ name,
15776
+ ...passedProps
15777
+ } = resolvedProps;
15778
+ const offset = validateSeriesSequenceProps({
15779
+ durationInFrames: durationInFramesProp,
15780
+ offset: offsetProp,
15781
+ index: i,
15782
+ childrenLength: flattenedChildren.length
15783
+ });
15784
+ const currentStartFrame = startFrame + offset;
15785
+ const nextStartFrame = startFrame + durationInFramesProp + offset;
15786
+ return /* @__PURE__ */ jsxs3(Fragment, {
15787
+ children: [
15788
+ /* @__PURE__ */ jsx37(SequenceWithoutSchemaWithRef, {
15789
+ ref,
15790
+ name: name || "<Series.Sequence>",
15791
+ _remotionInternalDocumentationLink: name ? undefined : "https://www.remotion.dev/docs/series",
15792
+ _remotionInternalStack: stack ?? undefined,
15793
+ controls: controls ?? undefined,
15794
+ from: currentStartFrame,
15795
+ durationInFrames: durationInFramesProp,
15796
+ ...passedProps,
15797
+ children: /* @__PURE__ */ jsx37(IsNotInsideSeriesProvider, {
15798
+ children: sequenceChildren
15799
+ })
15800
+ }),
15801
+ renderChildren(i + 1, nextStartFrame)
15802
+ ]
15803
+ });
15804
+ }
15805
+ });
15806
+ };
15807
+ return renderChildren(0, 0);
15636
15808
  }, [props2.children]);
15637
15809
  return /* @__PURE__ */ jsx37(IsInsideSeriesContainer, {
15638
15810
  children: /* @__PURE__ */ jsx37(Sequence, {
@@ -16233,7 +16405,7 @@ addSequenceStackTraces(Folder);
16233
16405
  // ../shapes/dist/esm/index.mjs
16234
16406
  import React, { useCallback as useCallback26, useMemo as useMemo40, useRef as useRef29 } from "react";
16235
16407
  import { version } from "react-dom";
16236
- import { jsx as jsx40, jsxs as jsxs3 } from "react/jsx-runtime";
16408
+ import { jsx as jsx40, jsxs as jsxs4 } from "react/jsx-runtime";
16237
16409
  import { jsx as jsx210 } from "react/jsx-runtime";
16238
16410
  import { jsx as jsx310 } from "react/jsx-runtime";
16239
16411
  import { jsx as jsx42 } from "react/jsx-runtime";
@@ -16435,7 +16607,7 @@ var RenderSvg = ({
16435
16607
  const memoizedEffectDefinitions = Internals.useMemoizedEffectDefinitions(effects);
16436
16608
  const videoConfig = Internals.useUnsafeVideoConfig();
16437
16609
  const reactSupportsTransformOrigin = doesReactSupportTransformOriginProperty(version);
16438
- const svg = /* @__PURE__ */ jsxs3("svg", {
16610
+ const svg = /* @__PURE__ */ jsxs4("svg", {
16439
16611
  ref: effects.length === 0 || !videoConfig ? setSvgRef : undefined,
16440
16612
  width,
16441
16613
  height,
@@ -16461,7 +16633,7 @@ var RenderSvg = ({
16461
16633
  }
16462
16634
  const prevX = prevInstruction.x;
16463
16635
  const prevY = prevInstruction.y;
16464
- return /* @__PURE__ */ jsxs3(React.Fragment, {
16636
+ return /* @__PURE__ */ jsxs4(React.Fragment, {
16465
16637
  children: [
16466
16638
  /* @__PURE__ */ jsx40("path", {
16467
16639
  d: `M ${prevX} ${prevY} ${i.cp1x} ${i.cp1y}`,
@@ -16651,7 +16823,6 @@ var Arrow = Interactive.withSchema({
16651
16823
  schema: arrowSchema,
16652
16824
  supportsEffects: true
16653
16825
  });
16654
- Internals.addSequenceStackTraces(Arrow);
16655
16826
  var shortenVector = (vector, radius) => {
16656
16827
  const [x, y] = vector;
16657
16828
  const currentLength = Math.sqrt(x * x + y * y);
@@ -17076,7 +17247,6 @@ var Callout = Interactive.withSchema({
17076
17247
  schema: calloutSchema,
17077
17248
  supportsEffects: true
17078
17249
  });
17079
- Internals.addSequenceStackTraces(Callout);
17080
17250
  var makeCircle = ({ radius }) => {
17081
17251
  const instructions = [
17082
17252
  {
@@ -17139,7 +17309,6 @@ var Circle = Interactive.withSchema({
17139
17309
  schema: circleSchema,
17140
17310
  supportsEffects: true
17141
17311
  });
17142
- Internals.addSequenceStackTraces(Circle);
17143
17312
  var makeEllipse = ({ rx, ry }) => {
17144
17313
  const instructions = [
17145
17314
  {
@@ -17197,7 +17366,6 @@ var Ellipse = Interactive.withSchema({
17197
17366
  schema: ellipseSchema,
17198
17367
  supportsEffects: true
17199
17368
  });
17200
- Internals.addSequenceStackTraces(Ellipse);
17201
17369
  var makeHeart = ({
17202
17370
  height,
17203
17371
  aspectRatio = 1.1,
@@ -17336,7 +17504,6 @@ var Heart = Interactive.withSchema({
17336
17504
  schema: heartSchema,
17337
17505
  supportsEffects: true
17338
17506
  });
17339
- Internals.addSequenceStackTraces(Heart);
17340
17507
  var getCoord = ({
17341
17508
  counterClockwise,
17342
17509
  actualProgress,
@@ -17491,7 +17658,6 @@ var Pie = Interactive.withSchema({
17491
17658
  schema: pieSchema,
17492
17659
  supportsEffects: true
17493
17660
  });
17494
- Internals.addSequenceStackTraces(Pie);
17495
17661
  function polygon({
17496
17662
  points,
17497
17663
  radius,
@@ -17591,7 +17757,6 @@ var Polygon = Interactive.withSchema({
17591
17757
  schema: polygonSchema,
17592
17758
  supportsEffects: true
17593
17759
  });
17594
- Internals.addSequenceStackTraces(Polygon);
17595
17760
  var makeRect = ({
17596
17761
  width,
17597
17762
  height,
@@ -17658,7 +17823,6 @@ var Rect = Interactive.withSchema({
17658
17823
  schema: rectSchema,
17659
17824
  supportsEffects: true
17660
17825
  });
17661
- Internals.addSequenceStackTraces(Rect);
17662
17826
  var KAPPA = 0.5522847498307936;
17663
17827
  var CAP_HANDLE = 4 / 3;
17664
17828
  var curve = ({
@@ -17870,7 +18034,6 @@ var Spark = Interactive.withSchema({
17870
18034
  schema: sparkSchema,
17871
18035
  supportsEffects: true
17872
18036
  });
17873
- Internals.addSequenceStackTraces(Spark);
17874
18037
  var star = ({
17875
18038
  centerX,
17876
18039
  centerY,
@@ -17981,7 +18144,6 @@ var Star = Interactive.withSchema({
17981
18144
  schema: starSchema,
17982
18145
  supportsEffects: true
17983
18146
  });
17984
- Internals.addSequenceStackTraces(Star);
17985
18147
  var makeTriangle = ({
17986
18148
  length: length2,
17987
18149
  direction = "right",
@@ -18088,7 +18250,6 @@ var Triangle = Interactive.withSchema({
18088
18250
  schema: triangleSchema,
18089
18251
  supportsEffects: true
18090
18252
  });
18091
- Internals.addSequenceStackTraces(Triangle);
18092
18253
 
18093
18254
  // ../svg-3d-engine/dist/esm/index.mjs
18094
18255
  function truthy2(value) {
@@ -19154,7 +19315,7 @@ var extrudeAndTransformElement = (options) => {
19154
19315
 
19155
19316
  // ../design/dist/esm/index.mjs
19156
19317
  import { jsx as jsx212, Fragment as Fragment3 } from "react/jsx-runtime";
19157
- import { jsx as jsx312, jsxs as jsxs5 } from "react/jsx-runtime";
19318
+ import { jsx as jsx312, jsxs as jsxs6 } from "react/jsx-runtime";
19158
19319
  import { useEffect as useEffect22, useMemo as useMemo210, useRef as useRef31 } from "react";
19159
19320
  import { jsx as jsx44 } from "react/jsx-runtime";
19160
19321
  import { jsx as jsx53, jsxs as jsxs22 } from "react/jsx-runtime";
@@ -19213,11 +19374,11 @@ import * as React302 from "react";
19213
19374
  import * as React342 from "react";
19214
19375
  import * as React332 from "react";
19215
19376
  import * as React322 from "react";
19216
- import { Fragment as Fragment8, jsx as jsx242, jsxs as jsxs4 } from "react/jsx-runtime";
19377
+ import { Fragment as Fragment8, jsx as jsx242, jsxs as jsxs42 } from "react/jsx-runtime";
19217
19378
  import { forwardRef as forwardRef142, createElement as createElement7 } from "react";
19218
19379
  import { forwardRef as forwardRef132, createElement as createElement6 } from "react";
19219
19380
  import * as React372 from "react";
19220
- import { jsx as jsx252, jsxs as jsxs52 } from "react/jsx-runtime";
19381
+ import { jsx as jsx252, jsxs as jsxs5 } from "react/jsx-runtime";
19221
19382
  import { jsx as jsx262 } from "react/jsx-runtime";
19222
19383
  import * as React49 from "react";
19223
19384
  import * as React38 from "react";
@@ -19225,12 +19386,12 @@ import { jsx as jsx272 } from "react/jsx-runtime";
19225
19386
  import * as React47 from "react";
19226
19387
  import React402 from "react";
19227
19388
  import * as React392 from "react";
19228
- import { Fragment as Fragment22, jsx as jsx282 } from "react/jsx-runtime";
19389
+ import { Fragment as Fragment222, jsx as jsx282 } from "react/jsx-runtime";
19229
19390
  import { jsx as jsx292 } from "react/jsx-runtime";
19230
19391
  import React210 from "react";
19231
19392
  import { jsx as jsx2102 } from "react/jsx-runtime";
19232
19393
  import * as React422 from "react";
19233
- import * as React41 from "react";
19394
+ import * as React412 from "react";
19234
19395
  import * as React43 from "react";
19235
19396
  import * as ReactDOM5 from "react-dom";
19236
19397
  import { jsx as jsx302 } from "react/jsx-runtime";
@@ -19340,7 +19501,7 @@ function createSlotClone(ownerName) {
19340
19501
  var SLOTTABLE_IDENTIFIER = Symbol("radix.slottable");
19341
19502
  function createSlottable(ownerName) {
19342
19503
  const Slottable2 = ({ children }) => {
19343
- return /* @__PURE__ */ jsx43(Fragment2, { children });
19504
+ return /* @__PURE__ */ jsx43(Fragment22, { children });
19344
19505
  };
19345
19506
  Slottable2.displayName = `${ownerName}.Slottable`;
19346
19507
  Slottable2.__radixId = SLOTTABLE_IDENTIFIER;
@@ -19637,7 +19798,7 @@ var Outer = ({
19637
19798
  description: "rect",
19638
19799
  transformations: centerOriented
19639
19800
  });
19640
- return /* @__PURE__ */ jsxs5("div", {
19801
+ return /* @__PURE__ */ jsxs6("div", {
19641
19802
  className: "relative",
19642
19803
  style: { width, height },
19643
19804
  children: [
@@ -23685,7 +23846,7 @@ var Select = (props) => {
23685
23846
  const isFormControl = trigger ? Boolean(trigger.closest("form")) : true;
23686
23847
  const [nativeOptionsSet, setNativeOptionsSet] = React36.useState(/* @__PURE__ */ new Set);
23687
23848
  const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(";");
23688
- return /* @__PURE__ */ jsx242(Root22, { ...popperScope, children: /* @__PURE__ */ jsxs4(SelectProvider, {
23849
+ return /* @__PURE__ */ jsx242(Root22, { ...popperScope, children: /* @__PURE__ */ jsxs42(SelectProvider, {
23689
23850
  required,
23690
23851
  scope: __scopeSelect,
23691
23852
  trigger,
@@ -23717,7 +23878,7 @@ var Select = (props) => {
23717
23878
  }, []),
23718
23879
  children
23719
23880
  }) }),
23720
- isFormControl ? /* @__PURE__ */ jsxs4(BubbleSelect, {
23881
+ isFormControl ? /* @__PURE__ */ jsxs42(BubbleSelect, {
23721
23882
  "aria-hidden": true,
23722
23883
  required,
23723
23884
  tabIndex: -1,
@@ -24225,7 +24386,7 @@ var SelectViewport = React36.forwardRef((props, forwardedRef) => {
24225
24386
  const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);
24226
24387
  const composedRefs = useComposedRefs2(forwardedRef, contentContext.onViewportChange);
24227
24388
  const prevScrollTopRef = React36.useRef(0);
24228
- return /* @__PURE__ */ jsxs4(Fragment8, { children: [
24389
+ return /* @__PURE__ */ jsxs42(Fragment8, { children: [
24229
24390
  /* @__PURE__ */ jsx242("style", {
24230
24391
  dangerouslySetInnerHTML: {
24231
24392
  __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`
@@ -24382,7 +24543,7 @@ var SelectItemText = React36.forwardRef((props, forwardedRef) => {
24382
24543
  onNativeOptionAdd(nativeOption);
24383
24544
  return () => onNativeOptionRemove(nativeOption);
24384
24545
  }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);
24385
- return /* @__PURE__ */ jsxs4(Fragment8, { children: [
24546
+ return /* @__PURE__ */ jsxs42(Fragment8, { children: [
24386
24547
  /* @__PURE__ */ jsx242(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),
24387
24548
  itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM4.createPortal(itemTextProps.children, context.valueNode) : null
24388
24549
  ] });
@@ -24641,7 +24802,7 @@ var ChevronDown = createLucideIcon("ChevronDown", [
24641
24802
  var ChevronUp = createLucideIcon("ChevronUp", [["path", { d: "m18 15-6-6-6 6", key: "153udz" }]]);
24642
24803
  var Select2 = Root222;
24643
24804
  var SelectValue2 = Value;
24644
- var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Trigger, {
24805
+ var SelectTrigger2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(Trigger, {
24645
24806
  ref,
24646
24807
  className: cn("flex h-10 w-full items-center justify-between rounded-md border-black border-2 border-b-4 bg-card-bg px-3 py-5 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-hidden focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 font-brand", className),
24647
24808
  ...props,
@@ -24675,7 +24836,7 @@ var SelectScrollDownButton2 = React372.forwardRef(({ className, ...props }, ref)
24675
24836
  }));
24676
24837
  SelectScrollDownButton2.displayName = ScrollDownButton.displayName;
24677
24838
  var SelectContent2 = React372.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ jsx252(Portal2, {
24678
- children: /* @__PURE__ */ jsxs52(Content2, {
24839
+ children: /* @__PURE__ */ jsxs5(Content2, {
24679
24840
  ref,
24680
24841
  className: cn(" border-2 border-black relative z-50 max-h-96 min-w-32 overflow-hidden rounded-md font-brand bg-card-bg text-text shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2", position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1", className),
24681
24842
  position,
@@ -24697,7 +24858,7 @@ var SelectLabel2 = React372.forwardRef(({ className, ...props }, ref) => /* @__P
24697
24858
  ...props
24698
24859
  }));
24699
24860
  SelectLabel2.displayName = Label.displayName;
24700
- var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs52(Item, {
24861
+ var SelectItem2 = React372.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs5(Item, {
24701
24862
  ref,
24702
24863
  className: cn("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-hidden focus:bg-slate-200 dark:focus:bg-white/10 data-disabled:pointer-events-none data-disabled:opacity-50 font-brand", className),
24703
24864
  ...props,
@@ -25239,7 +25400,7 @@ function toSafeIndex(array, index2) {
25239
25400
  function toSafeInteger(number) {
25240
25401
  return number !== number || number === 0 ? 0 : Math.trunc(number);
25241
25402
  }
25242
- var useLayoutEffect222 = globalThis?.document ? React41.useLayoutEffect : () => {};
25403
+ var useLayoutEffect222 = globalThis?.document ? React412.useLayoutEffect : () => {};
25243
25404
  var useReactId2 = React422[" useId ".trim().toString()] || (() => {
25244
25405
  return;
25245
25406
  });
@@ -27223,7 +27384,7 @@ var useMobileLayout = () => {
27223
27384
  };
27224
27385
 
27225
27386
  // src/components/BackButton.tsx
27226
- import { jsx as jsx45, jsxs as jsxs6 } from "react/jsx-runtime";
27387
+ import { jsx as jsx45, jsxs as jsxs7 } from "react/jsx-runtime";
27227
27388
  var BackButton = ({ color, text, link }) => {
27228
27389
  return /* @__PURE__ */ jsx45("div", {
27229
27390
  className: "justify-center items-center font-medium mb-4 block",
@@ -27235,7 +27396,7 @@ var BackButton = ({ color, text, link }) => {
27235
27396
  children: /* @__PURE__ */ jsx45(Button, {
27236
27397
  href: link,
27237
27398
  className: "px-4 rounded-full text-sm h-10",
27238
- children: /* @__PURE__ */ jsxs6("div", {
27399
+ children: /* @__PURE__ */ jsxs7("div", {
27239
27400
  className: "flex row items-center justify-center px-4",
27240
27401
  children: [
27241
27402
  /* @__PURE__ */ jsx45("svg", {
@@ -27420,9 +27581,9 @@ var MuxVideoForward = ({ muxId, ...props }, ref) => {
27420
27581
  var MuxVideo = forwardRef37(MuxVideoForward);
27421
27582
 
27422
27583
  // src/components/icons/tailwind.tsx
27423
- import { jsx as jsx49, jsxs as jsxs7 } from "react/jsx-runtime";
27584
+ import { jsx as jsx49, jsxs as jsxs8 } from "react/jsx-runtime";
27424
27585
  var Tailwind = (props) => {
27425
- return /* @__PURE__ */ jsxs7("svg", {
27586
+ return /* @__PURE__ */ jsxs8("svg", {
27426
27587
  viewBox: "0 0 51 31",
27427
27588
  fill: "none",
27428
27589
  xmlns: "http://www.w3.org/2000/svg",
@@ -27441,7 +27602,7 @@ var Tailwind = (props) => {
27441
27602
  };
27442
27603
 
27443
27604
  // src/components/template-modal-content.tsx
27444
- import { jsx as jsx50, jsxs as jsxs8, Fragment as Fragment9 } from "react/jsx-runtime";
27605
+ import { jsx as jsx50, jsxs as jsxs9, Fragment as Fragment9 } from "react/jsx-runtime";
27445
27606
  var RESERVED_FOR_SIDEBAR = 350;
27446
27607
  var GithubIcon = () => {
27447
27608
  return /* @__PURE__ */ jsx50("svg", {
@@ -27503,7 +27664,7 @@ var TemplateModalContent = ({ template }) => {
27503
27664
  const npmCommand = `npx create-video@latest --${template.cliId}`;
27504
27665
  const pnpmCommand = `pnpm create video --${template.cliId}`;
27505
27666
  const bunCommand = `bun create video --${template.cliId}`;
27506
- return /* @__PURE__ */ jsxs8("div", {
27667
+ return /* @__PURE__ */ jsxs9("div", {
27507
27668
  children: [
27508
27669
  /* @__PURE__ */ jsx50(BackButton, {
27509
27670
  link: "/templates",
@@ -27514,10 +27675,10 @@ var TemplateModalContent = ({ template }) => {
27514
27675
  className: "mt-0",
27515
27676
  children: template.shortName
27516
27677
  }),
27517
- /* @__PURE__ */ jsxs8(Card, {
27678
+ /* @__PURE__ */ jsxs9(Card, {
27518
27679
  className: "mb-7 overflow-hidden w-full",
27519
27680
  children: [
27520
- /* @__PURE__ */ jsxs8("div", {
27681
+ /* @__PURE__ */ jsxs9("div", {
27521
27682
  className: `mb-0 flex overflow-auto ${mobileLayout ? "flex-col h-full left-0 top-0" : "flex-row"} w-full border-b-2 border-black`,
27522
27683
  children: [
27523
27684
  /* @__PURE__ */ jsx50("div", {
@@ -27545,7 +27706,7 @@ var TemplateModalContent = ({ template }) => {
27545
27706
  className: "w-full h-auto border border-[var(--ifm-color-emphasis-300)]"
27546
27707
  })
27547
27708
  }),
27548
- /* @__PURE__ */ jsxs8("div", {
27709
+ /* @__PURE__ */ jsxs9("div", {
27549
27710
  className: `overflow-auto ${mobileLayout ? "w-full" : ""} p-5 font-brand`,
27550
27711
  style: {
27551
27712
  width: mobileLayout ? "100%" : RESERVED_FOR_SIDEBAR
@@ -27553,14 +27714,14 @@ var TemplateModalContent = ({ template }) => {
27553
27714
  children: [
27554
27715
  /* @__PURE__ */ jsx50("div", {
27555
27716
  className: "flex flex-row items-center pt-1 pb-1 align-middle pr-4",
27556
- children: /* @__PURE__ */ jsxs8("a", {
27717
+ children: /* @__PURE__ */ jsxs9("a", {
27557
27718
  className: "text-inherit inline-flex flex-row items-center cursor-pointer select-none",
27558
27719
  onPointerDown: () => copyCommand(npmCommand),
27559
27720
  children: [
27560
27721
  /* @__PURE__ */ jsx50("div", {
27561
27722
  className: "w-6 h-9 mr-3 inline-flex items-center justify-center",
27562
27723
  children: /* @__PURE__ */ jsx50(CommandCopyButton, {
27563
- customSvg: /* @__PURE__ */ jsxs8("svg", {
27724
+ customSvg: /* @__PURE__ */ jsxs9("svg", {
27564
27725
  viewBox: "0 0 2500 2500",
27565
27726
  xmlns: "http://www.w3.org/2000/svg",
27566
27727
  className: "h-5",
@@ -27587,7 +27748,7 @@ var TemplateModalContent = ({ template }) => {
27587
27748
  }),
27588
27749
  /* @__PURE__ */ jsx50("div", {
27589
27750
  className: "flex flex-row items-center pt-1 pb-1 align-middle pr-4",
27590
- children: /* @__PURE__ */ jsxs8("a", {
27751
+ children: /* @__PURE__ */ jsxs9("a", {
27591
27752
  target: "_blank",
27592
27753
  className: "text-inherit inline-flex flex-row items-center cursor-pointer select-none",
27593
27754
  onPointerDown: () => copyCommand(bunCommand),
@@ -27595,7 +27756,7 @@ var TemplateModalContent = ({ template }) => {
27595
27756
  /* @__PURE__ */ jsx50("div", {
27596
27757
  className: "w-6 h-9 mr-3 inline-flex items-center justify-center",
27597
27758
  children: /* @__PURE__ */ jsx50(CommandCopyButton, {
27598
- customSvg: /* @__PURE__ */ jsxs8("svg", {
27759
+ customSvg: /* @__PURE__ */ jsxs9("svg", {
27599
27760
  id: "Bun",
27600
27761
  xmlns: "http://www.w3.org/2000/svg",
27601
27762
  viewBox: "0 0 80 70",
@@ -27605,7 +27766,7 @@ var TemplateModalContent = ({ template }) => {
27605
27766
  id: "Shadow",
27606
27767
  d: "M71.09,20.74c-.16-.17-.33-.34-.5-.5s-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5-.33-.34-.5-.5A26.46,26.46,0,0,1,75.5,35.7c0,16.57-16.82,30.05-37.5,30.05-11.58,0-21.94-4.23-28.83-10.86l.5.5.5.5.5.5.5.5.5.5.5.5.5.5C19.55,65.3,30.14,69.75,42,69.75c20.68,0,37.5-13.48,37.5-30C79.5,32.69,76.46,26,71.09,20.74Z"
27607
27768
  }),
27608
- /* @__PURE__ */ jsxs8("g", {
27769
+ /* @__PURE__ */ jsxs9("g", {
27609
27770
  id: "Body",
27610
27771
  children: [
27611
27772
  /* @__PURE__ */ jsx50("path", {
@@ -27636,7 +27797,7 @@ var TemplateModalContent = ({ template }) => {
27636
27797
  })
27637
27798
  ]
27638
27799
  }),
27639
- /* @__PURE__ */ jsxs8("g", {
27800
+ /* @__PURE__ */ jsxs9("g", {
27640
27801
  id: "Mouth",
27641
27802
  children: [
27642
27803
  /* @__PURE__ */ jsx50("g", {
@@ -27647,7 +27808,7 @@ var TemplateModalContent = ({ template }) => {
27647
27808
  style: { fill: "#b71422" }
27648
27809
  })
27649
27810
  }),
27650
- /* @__PURE__ */ jsxs8("g", {
27811
+ /* @__PURE__ */ jsxs9("g", {
27651
27812
  id: "Tongue",
27652
27813
  children: [
27653
27814
  /* @__PURE__ */ jsx50("path", {
@@ -27670,7 +27831,7 @@ var TemplateModalContent = ({ template }) => {
27670
27831
  })
27671
27832
  ]
27672
27833
  }),
27673
- /* @__PURE__ */ jsxs8("g", {
27834
+ /* @__PURE__ */ jsxs9("g", {
27674
27835
  id: "Face",
27675
27836
  children: [
27676
27837
  /* @__PURE__ */ jsx50("ellipse", {
@@ -27717,14 +27878,14 @@ var TemplateModalContent = ({ template }) => {
27717
27878
  }),
27718
27879
  /* @__PURE__ */ jsx50("div", {
27719
27880
  className: "flex flex-row items-center pt-1 pb-1 align-middle pr-4",
27720
- children: /* @__PURE__ */ jsxs8("a", {
27881
+ children: /* @__PURE__ */ jsxs9("a", {
27721
27882
  className: "text-inherit inline-flex flex-row items-center cursor-pointer select-none",
27722
27883
  onPointerDown: () => copyCommand(pnpmCommand),
27723
27884
  children: [
27724
27885
  /* @__PURE__ */ jsx50("div", {
27725
27886
  className: "w-6 h-9 mr-3 inline-flex items-center justify-center",
27726
27887
  children: /* @__PURE__ */ jsx50(CommandCopyButton, {
27727
- customSvg: /* @__PURE__ */ jsxs8("svg", {
27888
+ customSvg: /* @__PURE__ */ jsxs9("svg", {
27728
27889
  version: "1.1",
27729
27890
  xmlns: "http://www.w3.org/2000/svg",
27730
27891
  preserveAspectRatio: "xMidYMid meet",
@@ -27733,7 +27894,7 @@ var TemplateModalContent = ({ template }) => {
27733
27894
  height: "160",
27734
27895
  className: "h-5",
27735
27896
  children: [
27736
- /* @__PURE__ */ jsxs8("defs", {
27897
+ /* @__PURE__ */ jsxs9("defs", {
27737
27898
  children: [
27738
27899
  /* @__PURE__ */ jsx50("path", {
27739
27900
  d: "M237.6 95L187.6 95L187.6 45L237.6 45L237.6 95Z",
@@ -27769,7 +27930,7 @@ var TemplateModalContent = ({ template }) => {
27769
27930
  })
27770
27931
  ]
27771
27932
  }),
27772
- /* @__PURE__ */ jsxs8("g", {
27933
+ /* @__PURE__ */ jsxs9("g", {
27773
27934
  children: [
27774
27935
  /* @__PURE__ */ jsx50("g", {
27775
27936
  children: /* @__PURE__ */ jsx50("use", {
@@ -27851,7 +28012,7 @@ var TemplateModalContent = ({ template }) => {
27851
28012
  }),
27852
28013
  /* @__PURE__ */ jsx50("div", {
27853
28014
  className: "flex flex-row items-center pt-1 pb-1 align-middle pr-4",
27854
- children: /* @__PURE__ */ jsxs8("a", {
28015
+ children: /* @__PURE__ */ jsxs9("a", {
27855
28016
  target: "_blank",
27856
28017
  className: "text-inherit inline-flex flex-row items-center cursor-pointer select-none",
27857
28018
  href: `https://github.com/${template.org}/${template.repoName}/generate`,
@@ -27867,7 +28028,7 @@ var TemplateModalContent = ({ template }) => {
27867
28028
  }),
27868
28029
  /* @__PURE__ */ jsx50("div", {
27869
28030
  className: "flex flex-row items-center pt-1 pb-1 align-middle pr-4",
27870
- children: /* @__PURE__ */ jsxs8("a", {
28031
+ children: /* @__PURE__ */ jsxs9("a", {
27871
28032
  target: "_blank",
27872
28033
  className: "text-inherit inline-flex flex-row items-center cursor-pointer select-none",
27873
28034
  href: `https://github.com/${template.org}/${template.repoName}`,
@@ -27885,18 +28046,18 @@ var TemplateModalContent = ({ template }) => {
27885
28046
  target: "_blank",
27886
28047
  className: "text-inherit inline-flex flex-row items-center cursor-pointer select-none",
27887
28048
  href: template.previewURL,
27888
- children: /* @__PURE__ */ jsxs8("div", {
28049
+ children: /* @__PURE__ */ jsxs9("div", {
27889
28050
  className: "flex flex-row items-center pt-1 pb-1 align-middle pr-4",
27890
28051
  children: [
27891
28052
  /* @__PURE__ */ jsx50("div", {
27892
28053
  className: "w-6 h-9 mr-3 inline-flex items-center justify-center",
27893
28054
  children: /* @__PURE__ */ jsx50(PreviewIcon, {})
27894
28055
  }),
27895
- template.previewLabel ?? /* @__PURE__ */ jsxs8(Fragment9, {
28056
+ template.previewLabel ?? /* @__PURE__ */ jsxs9(Fragment9, {
27896
28057
  children: [
27897
28058
  "See Preview",
27898
28059
  " ",
27899
- /* @__PURE__ */ jsxs8("span", {
28060
+ /* @__PURE__ */ jsxs9("span", {
27900
28061
  className: "whitespace-pre text-[var(--light-text-color)]",
27901
28062
  children: [
27902
28063
  " ",
@@ -27912,7 +28073,7 @@ var TemplateModalContent = ({ template }) => {
27912
28073
  target: "_blank",
27913
28074
  className: "text-inherit inline-flex flex-row items-center cursor-pointer select-none",
27914
28075
  href: `https://stackblitz.com/github/${template.org}/${template.repoName}`,
27915
- children: /* @__PURE__ */ jsxs8("div", {
28076
+ children: /* @__PURE__ */ jsxs9("div", {
27916
28077
  className: "flex flex-row items-center pt-1 pb-1 align-middle pr-4",
27917
28078
  children: [
27918
28079
  /* @__PURE__ */ jsx50("div", {
@@ -27921,7 +28082,7 @@ var TemplateModalContent = ({ template }) => {
27921
28082
  }),
27922
28083
  "Try online",
27923
28084
  " ",
27924
- /* @__PURE__ */ jsxs8("span", {
28085
+ /* @__PURE__ */ jsxs9("span", {
27925
28086
  className: "whitespace-pre text-[var(--light-text-color)]",
27926
28087
  children: [
27927
28088
  " ",
@@ -27931,7 +28092,7 @@ var TemplateModalContent = ({ template }) => {
27931
28092
  ]
27932
28093
  })
27933
28094
  }) : null,
27934
- template.allowEnableTailwind ? /* @__PURE__ */ jsxs8("div", {
28095
+ template.allowEnableTailwind ? /* @__PURE__ */ jsxs9("div", {
27935
28096
  className: "flex flex-row items-center pt-1 pb-1 align-middle pr-4",
27936
28097
  children: [
27937
28098
  /* @__PURE__ */ jsx50("div", {
@@ -27945,7 +28106,7 @@ var TemplateModalContent = ({ template }) => {
27945
28106
  })
27946
28107
  ]
27947
28108
  }),
27948
- /* @__PURE__ */ jsxs8("div", {
28109
+ /* @__PURE__ */ jsxs9("div", {
27949
28110
  className: cn2("flex flex-row w-full", template.contributedBy !== null && mobileLayout ? "flex-col" : "flex-row"),
27950
28111
  children: [
27951
28112
  /* @__PURE__ */ jsx50("div", {
@@ -27957,14 +28118,14 @@ var TemplateModalContent = ({ template }) => {
27957
28118
  /* @__PURE__ */ jsx50("div", {
27958
28119
  style: { width: mobileLayout ? "100%" : RESERVED_FOR_SIDEBAR },
27959
28120
  className: cn2(mobileLayout && template.contributedBy === null ? "hidden" : "flex", template.contributedBy !== null && mobileLayout ? "border-t-2 border-black w-full py-4 justify-start px-5" : "pl-5 pr-8 justify-end ", "items-center text-brand dark:text-white gap-2"),
27960
- children: template.contributedBy ? /* @__PURE__ */ jsxs8("div", {
28121
+ children: template.contributedBy ? /* @__PURE__ */ jsxs9("div", {
27961
28122
  className: cn2("flex flex-row pt-1 pb-1 pr-4 gap-2 text-text font-brand items-center"),
27962
28123
  children: [
27963
28124
  /* @__PURE__ */ jsx50("img", {
27964
28125
  src: `https://github.com/${template.contributedBy}.png`,
27965
28126
  className: "w-6 h-6 rounded-full"
27966
28127
  }),
27967
- /* @__PURE__ */ jsxs8("div", {
28128
+ /* @__PURE__ */ jsxs9("div", {
27968
28129
  className: "text-text leading-tight",
27969
28130
  children: [
27970
28131
  "Thanks to",