@remotion/promo-pages 4.0.482 → 4.0.484

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
@@ -2335,7 +2335,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2335
2335
  var addSequenceStackTraces = (component) => {
2336
2336
  componentsToAddStacksTo.push(component);
2337
2337
  };
2338
- var VERSION = "4.0.482";
2338
+ var VERSION = "4.0.484";
2339
2339
  var checkMultipleRemotionVersions = () => {
2340
2340
  if (typeof globalThis === "undefined") {
2341
2341
  return;
@@ -3551,6 +3551,35 @@ function findRange(input, inputRange) {
3551
3551
  return i - 1;
3552
3552
  }
3553
3553
  var defaultEasing = (num) => num;
3554
+ var shouldExtendRightForEasing = (easing) => {
3555
+ return easing.remotionShouldExtendRight === true;
3556
+ };
3557
+ var resolveEasingForSegment = ({
3558
+ easing,
3559
+ segmentIndex
3560
+ }) => {
3561
+ if (easing === undefined) {
3562
+ return defaultEasing;
3563
+ }
3564
+ if (typeof easing === "function") {
3565
+ return easing;
3566
+ }
3567
+ return easing[segmentIndex];
3568
+ };
3569
+ var interpolateSegment = ({
3570
+ input,
3571
+ inputRange,
3572
+ outputRange,
3573
+ easing,
3574
+ extrapolateLeft,
3575
+ extrapolateRight
3576
+ }) => {
3577
+ return interpolateFunction(input, inputRange, outputRange, {
3578
+ easing,
3579
+ extrapolateLeft,
3580
+ extrapolateRight: input > inputRange[1] && extrapolateRight === "clamp" && shouldExtendRightForEasing(easing) ? "extend" : extrapolateRight
3581
+ });
3582
+ };
3554
3583
  var interpolateNumber = ({
3555
3584
  input,
3556
3585
  inputRange,
@@ -3561,15 +3590,6 @@ var interpolateNumber = ({
3561
3590
  return outputRange[0];
3562
3591
  }
3563
3592
  const easingOption = options?.easing;
3564
- const resolveEasingForSegment = (segmentIndex) => {
3565
- if (easingOption === undefined) {
3566
- return defaultEasing;
3567
- }
3568
- if (typeof easingOption === "function") {
3569
- return easingOption;
3570
- }
3571
- return easingOption[segmentIndex];
3572
- };
3573
3593
  let extrapolateLeft = "extend";
3574
3594
  if (options?.extrapolateLeft !== undefined) {
3575
3595
  extrapolateLeft = options.extrapolateLeft;
@@ -3580,11 +3600,41 @@ var interpolateNumber = ({
3580
3600
  }
3581
3601
  const posterizedInput = options?.posterize === undefined ? input : Math.floor(input / options.posterize) * options.posterize;
3582
3602
  const range = findRange(posterizedInput, inputRange);
3583
- return interpolateFunction(posterizedInput, [inputRange[range], inputRange[range + 1]], [outputRange[range], outputRange[range + 1]], {
3584
- easing: resolveEasingForSegment(range),
3603
+ const easing = resolveEasingForSegment({
3604
+ easing: easingOption,
3605
+ segmentIndex: range
3606
+ });
3607
+ let result = interpolateSegment({
3608
+ input: posterizedInput,
3609
+ inputRange: [inputRange[range], inputRange[range + 1]],
3610
+ outputRange: [outputRange[range], outputRange[range + 1]],
3611
+ easing,
3585
3612
  extrapolateLeft,
3586
3613
  extrapolateRight
3587
3614
  });
3615
+ for (let segmentIndex = 0;segmentIndex < range; segmentIndex++) {
3616
+ const previousEasing = resolveEasingForSegment({
3617
+ easing: easingOption,
3618
+ segmentIndex
3619
+ });
3620
+ if (!shouldExtendRightForEasing(previousEasing)) {
3621
+ continue;
3622
+ }
3623
+ const previousSegmentEnd = inputRange[segmentIndex + 1];
3624
+ if (posterizedInput <= previousSegmentEnd) {
3625
+ continue;
3626
+ }
3627
+ const continuedSegmentValue = interpolateSegment({
3628
+ input: posterizedInput,
3629
+ inputRange: [inputRange[segmentIndex], previousSegmentEnd],
3630
+ outputRange: [outputRange[segmentIndex], outputRange[segmentIndex + 1]],
3631
+ easing: previousEasing,
3632
+ extrapolateLeft,
3633
+ extrapolateRight: "extend"
3634
+ });
3635
+ result += continuedSegmentValue - outputRange[segmentIndex + 1];
3636
+ }
3637
+ return result;
3588
3638
  };
3589
3639
  var interpolateString = ({
3590
3640
  input,
@@ -4058,21 +4108,40 @@ class Easing {
4058
4108
  static back(s = 1.70158) {
4059
4109
  return (t) => t * t * ((s + 1) * t - s);
4060
4110
  }
4061
- static spring(config = {}) {
4062
- return (t) => {
4111
+ static spring({
4112
+ allowTail = false,
4113
+ durationRestThreshold,
4114
+ ...config
4115
+ } = {}) {
4116
+ const easing = (t) => {
4063
4117
  if (t <= 0) {
4064
4118
  return 0;
4065
4119
  }
4066
- if (t >= 1) {
4120
+ if (!allowTail && t >= 1) {
4067
4121
  return 1;
4068
4122
  }
4123
+ if (allowTail) {
4124
+ return spring({
4125
+ fps: springEasingDurationInFrames,
4126
+ frame: t * measureSpring({
4127
+ fps: springEasingDurationInFrames,
4128
+ config,
4129
+ threshold: durationRestThreshold
4130
+ }),
4131
+ config
4132
+ });
4133
+ }
4069
4134
  return spring({
4070
4135
  fps: springEasingDurationInFrames,
4071
4136
  frame: t * springEasingDurationInFrames,
4072
4137
  config,
4073
- durationInFrames: springEasingDurationInFrames
4138
+ durationInFrames: springEasingDurationInFrames,
4139
+ durationRestThreshold
4074
4140
  });
4075
4141
  };
4142
+ return Object.assign(easing, {
4143
+ remotionShouldExtendRight: allowTail
4144
+ });
4076
4145
  }
4077
4146
  static bounce(t) {
4078
4147
  const u = clampUnit(t);
@@ -4603,25 +4672,31 @@ var interpolateColors = (input, inputRange, outputRange, options) => {
4603
4672
  const processedOutputRange = outputRange.map((c2) => processColor(c2));
4604
4673
  return interpolateColorsRGB(input, inputRange, processedOutputRange, options);
4605
4674
  };
4606
- var easingToFn = (e) => {
4607
- switch (e.type) {
4675
+ var easingToFn = ({
4676
+ easing,
4677
+ forceSpringAllowTail
4678
+ }) => {
4679
+ switch (easing.type) {
4608
4680
  case "linear":
4609
4681
  return Easing.linear;
4610
4682
  case "spring":
4611
4683
  return Easing.spring({
4612
- damping: e.damping,
4613
- mass: e.mass,
4614
- overshootClamping: e.overshootClamping,
4615
- stiffness: e.stiffness
4684
+ allowTail: forceSpringAllowTail ?? easing.allowTail ?? undefined,
4685
+ damping: easing.damping,
4686
+ durationRestThreshold: easing.durationRestThreshold ?? undefined,
4687
+ mass: easing.mass,
4688
+ overshootClamping: easing.overshootClamping,
4689
+ stiffness: easing.stiffness
4616
4690
  });
4617
4691
  case "bezier":
4618
- return bezier(e.x1, e.y1, e.x2, e.y2);
4692
+ return bezier(easing.x1, easing.y1, easing.x2, easing.y2);
4619
4693
  default:
4620
- throw new TypeError(`Unsupported easing: ${JSON.stringify(e)}`);
4694
+ throw new TypeError(`Unsupported easing: ${JSON.stringify(easing)}`);
4621
4695
  }
4622
4696
  };
4623
4697
  var interpolateKeyframedStatus = ({
4624
4698
  frame,
4699
+ forceSpringAllowTail,
4625
4700
  status
4626
4701
  }) => {
4627
4702
  const { keyframes, easing, clamping, interpolationFunction } = status;
@@ -4640,7 +4715,7 @@ var interpolateKeyframedStatus = ({
4640
4715
  }
4641
4716
  try {
4642
4717
  return interpolateColors(frame, inputRange, outputs, {
4643
- easing: easing.map(easingToFn),
4718
+ easing: easing.map((e) => easingToFn({ easing: e, forceSpringAllowTail })),
4644
4719
  posterize: status.posterize
4645
4720
  });
4646
4721
  } catch {
@@ -4652,7 +4727,7 @@ var interpolateKeyframedStatus = ({
4652
4727
  }
4653
4728
  try {
4654
4729
  return interpolate(frame, inputRange, outputs, {
4655
- easing: easing.map(easingToFn),
4730
+ easing: easing.map((e) => easingToFn({ easing: e, forceSpringAllowTail })),
4656
4731
  extrapolateLeft: clamping.left,
4657
4732
  extrapolateRight: clamping.right,
4658
4733
  posterize: status.posterize
@@ -4675,6 +4750,7 @@ var resolveDragOverrideValue = ({
4675
4750
  return { type: "none" };
4676
4751
  }
4677
4752
  const interpolated = interpolateKeyframedStatus({
4753
+ forceSpringAllowTail: null,
4678
4754
  frame,
4679
4755
  status: dragOverrideValue.status
4680
4756
  });
@@ -4700,6 +4776,7 @@ var getEffectiveVisualModeValue = ({
4700
4776
  if (propStatus.status === "keyframed") {
4701
4777
  if (frame !== null) {
4702
4778
  return interpolateKeyframedStatus({
4779
+ forceSpringAllowTail: null,
4703
4780
  frame,
4704
4781
  status: propStatus
4705
4782
  });
@@ -4768,6 +4845,7 @@ var resolvePropStatusOverrides = (propStatus, frame) => {
4768
4845
  }
4769
4846
  if (status.status === "keyframed") {
4770
4847
  const value = interpolateKeyframedStatus({
4848
+ forceSpringAllowTail: null,
4771
4849
  frame,
4772
4850
  status
4773
4851
  });
@@ -4943,6 +5021,17 @@ var findPropsToDelete = ({
4943
5021
  var DEFAULT_LINEAR_EASING = {
4944
5022
  type: "linear"
4945
5023
  };
5024
+ var getEasingIndexToDuplicate = ({
5025
+ insertedKeyframeIndex,
5026
+ easingLength,
5027
+ keyframeCount
5028
+ }) => {
5029
+ const isSplittingExistingSegment = insertedKeyframeIndex > 0 && insertedKeyframeIndex < keyframeCount - 1;
5030
+ if (!isSplittingExistingSegment || easingLength === 0) {
5031
+ return null;
5032
+ }
5033
+ return Math.min(insertedKeyframeIndex - 1, easingLength - 1);
5034
+ };
4946
5035
  var makeStaticDragOverride = (value) => {
4947
5036
  return { type: "static", value };
4948
5037
  };
@@ -4954,6 +5043,16 @@ var makeKeyframedDragOverride = ({
4954
5043
  const existingIndex = status.keyframes.findIndex((keyframe) => keyframe.frame === frame);
4955
5044
  const keyframes = existingIndex === -1 ? [...status.keyframes, { frame, value }].sort((first, second) => first.frame - second.frame) : status.keyframes.map((keyframe, index) => index === existingIndex ? { frame, value } : keyframe);
4956
5045
  const easing = [...status.easing];
5046
+ if (existingIndex === -1) {
5047
+ const insertedKeyframeIndex = keyframes.findIndex((keyframe) => keyframe.frame === frame);
5048
+ const easingIndexToDuplicate = getEasingIndexToDuplicate({
5049
+ insertedKeyframeIndex,
5050
+ easingLength: easing.length,
5051
+ keyframeCount: keyframes.length
5052
+ });
5053
+ const easingToDuplicate = easingIndexToDuplicate === null ? DEFAULT_LINEAR_EASING : easing[easingIndexToDuplicate];
5054
+ easing.splice(insertedKeyframeIndex, 0, easingToDuplicate);
5055
+ }
4957
5056
  while (easing.length < keyframes.length - 1) {
4958
5057
  easing.push(DEFAULT_LINEAR_EASING);
4959
5058
  }
@@ -5025,6 +5124,7 @@ var computeEffectiveSchemaValuesDotNotation = ({
5025
5124
  value = dragOverride.value;
5026
5125
  } else if (frame !== null) {
5027
5126
  const interpolated = interpolateKeyframedStatus({
5127
+ forceSpringAllowTail: null,
5028
5128
  frame,
5029
5129
  status
5030
5130
  });
@@ -9176,6 +9276,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
9176
9276
  var AudioForRendering = forwardRef6(AudioForRenderingRefForwardingFunction);
9177
9277
  var AudioRefForwardingFunction = (props, ref) => {
9178
9278
  const audioTagsContext = useContext30(SharedAudioTagsContext);
9279
+ const propsWithFreeze = props;
9179
9280
  const {
9180
9281
  startFrom,
9181
9282
  endAt,
@@ -9186,14 +9287,18 @@ var AudioRefForwardingFunction = (props, ref) => {
9186
9287
  pauseWhenBuffering,
9187
9288
  showInTimeline,
9188
9289
  onError: onRemotionError,
9290
+ freeze,
9189
9291
  ...otherProps
9190
- } = props;
9191
- const { loop, ...propsOtherThanLoop } = props;
9292
+ } = propsWithFreeze;
9293
+ const { loop, freeze: _freeze, ...propsOtherThanLoop } = propsWithFreeze;
9192
9294
  const { fps } = useVideoConfig();
9193
9295
  const environment = useRemotionEnvironment();
9194
9296
  if (environment.isClientSideRendering) {
9195
9297
  throw new Error("<Html5Audio> is not supported in @remotion/web-renderer. Use <Audio> from @remotion/media instead. See https://remotion.dev/docs/client-side-rendering/limitations");
9196
9298
  }
9299
+ if (typeof freeze !== "undefined") {
9300
+ throw new TypeError('The "freeze" prop is not supported on <Html5Audio />. Use <Sequence freeze={...}> to freeze media playback.');
9301
+ }
9197
9302
  const { durations, setDurations } = useContext30(DurationsContext);
9198
9303
  if (typeof props.src !== "string") {
9199
9304
  throw new TypeError(`The \`<Html5Audio>\` tag requires a string for \`src\`, but got ${JSON.stringify(props.src)} instead.`);
@@ -9532,6 +9637,10 @@ function resolveHtmlInCanvasPixelDensity(pixelDensity) {
9532
9637
  }
9533
9638
  return pixelDensity;
9534
9639
  }
9640
+ var isMissingPaintRecordError = (error2) => {
9641
+ return error2 instanceof DOMException && error2.name === "InvalidStateError";
9642
+ };
9643
+ var missingPaintRecordMessage = "HtmlInCanvas: Expected the element to be inside the viewport during rendering, but Chrome had no cached paint record for it.";
9535
9644
  var resizeOffscreenCanvas = ({
9536
9645
  offscreen,
9537
9646
  width,
@@ -9575,6 +9684,7 @@ var HtmlInCanvasContent = forwardRef9(({
9575
9684
  const canvasWidth = Math.ceil(width * resolvedPixelDensity);
9576
9685
  const canvasHeight = Math.ceil(height * resolvedPixelDensity);
9577
9686
  const { continueRender: continueRender2, cancelRender: cancelRender2 } = useDelayRender();
9687
+ const { isRendering } = useRemotionEnvironment();
9578
9688
  if (!isHtmlInCanvasSupported()) {
9579
9689
  cancelRender2(new Error(HTML_IN_CANVAS_UNSUPPORTED_MESSAGE));
9580
9690
  }
@@ -9625,28 +9735,51 @@ var HtmlInCanvasContent = forwardRef9(({
9625
9735
  }
9626
9736
  const handle = delayRender("onPaint");
9627
9737
  if (!initializedRef.current) {
9628
- initializedRef.current = true;
9629
- const initImage = placeholderCanvas.captureElementImage(element);
9630
- const currentOnInit = onInitRef.current;
9631
- if (currentOnInit) {
9632
- const cleanup = await currentOnInit({
9633
- canvas: offscreen,
9634
- element,
9635
- elementImage: initImage,
9636
- pixelDensity: resolvedPixelDensity
9637
- });
9638
- if (typeof cleanup !== "function") {
9639
- throw new Error("HtmlInCanvas: when `onInit` is provided, it must return a cleanup function, or a Promise that resolves to one.");
9640
- }
9641
- if (unmountedRef.current) {
9642
- cleanup();
9738
+ let initImage = null;
9739
+ try {
9740
+ initImage = placeholderCanvas.captureElementImage(element);
9741
+ } catch (error2) {
9742
+ if (isMissingPaintRecordError(error2) && !isRendering) {} else if (isMissingPaintRecordError(error2)) {
9743
+ throw new Error(missingPaintRecordMessage);
9643
9744
  } else {
9644
- onInitCleanupRef.current = cleanup;
9745
+ throw error2;
9746
+ }
9747
+ }
9748
+ if (initImage) {
9749
+ initializedRef.current = true;
9750
+ const currentOnInit = onInitRef.current;
9751
+ if (currentOnInit) {
9752
+ const cleanup = await currentOnInit({
9753
+ canvas: offscreen,
9754
+ element,
9755
+ elementImage: initImage,
9756
+ pixelDensity: resolvedPixelDensity
9757
+ });
9758
+ if (typeof cleanup !== "function") {
9759
+ throw new Error("HtmlInCanvas: when `onInit` is provided, it must return a cleanup function, or a Promise that resolves to one.");
9760
+ }
9761
+ if (unmountedRef.current) {
9762
+ cleanup();
9763
+ } else {
9764
+ onInitCleanupRef.current = cleanup;
9765
+ }
9645
9766
  }
9646
9767
  }
9647
9768
  }
9648
9769
  const handler = onPaintRef.current ?? defaultOnPaint;
9649
- const elImage = placeholderCanvas.captureElementImage(element);
9770
+ let elImage;
9771
+ try {
9772
+ elImage = placeholderCanvas.captureElementImage(element);
9773
+ } catch (error2) {
9774
+ if (isMissingPaintRecordError(error2) && !isRendering) {
9775
+ continueRender2(handle);
9776
+ return;
9777
+ }
9778
+ if (isMissingPaintRecordError(error2)) {
9779
+ throw new Error(missingPaintRecordMessage);
9780
+ }
9781
+ throw error2;
9782
+ }
9650
9783
  await handler({
9651
9784
  canvas: offscreen,
9652
9785
  element,
@@ -9671,7 +9804,8 @@ var HtmlInCanvasContent = forwardRef9(({
9671
9804
  chainState,
9672
9805
  continueRender2,
9673
9806
  cancelRender2,
9674
- resolvedPixelDensity
9807
+ resolvedPixelDensity,
9808
+ isRendering
9675
9809
  ]);
9676
9810
  useLayoutEffect9(() => {
9677
9811
  const placeholder = canvas2dRef.current;
@@ -29332,7 +29466,7 @@ var PagesOfDocs = () => {
29332
29466
  width: "40px"
29333
29467
  }),
29334
29468
  /* @__PURE__ */ jsx57(StatItemContent, {
29335
- content: "900",
29469
+ content: "1000",
29336
29470
  width: "85px",
29337
29471
  maxWidth: "100px",
29338
29472
  fontSize: "2.5rem",
@@ -29388,7 +29522,7 @@ var GitHubStars = () => {
29388
29522
  width: "45px"
29389
29523
  }),
29390
29524
  /* @__PURE__ */ jsx57(StatItemContent, {
29391
- content: "50K",
29525
+ content: "51K",
29392
29526
  width: "80px",
29393
29527
  fontSize: "2.5rem",
29394
29528
  fontWeight: "bold"
@@ -29564,8 +29698,8 @@ var CommunityStats_default = CommunityStats;
29564
29698
 
29565
29699
  // ../player/dist/esm/index.mjs
29566
29700
  import { createContext as createContext32 } from "react";
29567
- import { jsx as jsx59, jsxs as jsxs14 } from "react/jsx-runtime";
29568
- import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment12 } from "react/jsx-runtime";
29701
+ import { jsx as jsx59, jsxs as jsxs14, Fragment as Fragment12 } from "react/jsx-runtime";
29702
+ import { jsx as jsx214, jsxs as jsxs24, Fragment as Fragment23 } from "react/jsx-runtime";
29569
29703
  import React56 from "react";
29570
29704
  import { useContext as useContext210, useEffect as useEffect42, useState as useState38 } from "react";
29571
29705
  import { useContext as useContext46, useLayoutEffect as useLayoutEffect17 } from "react";
@@ -29615,10 +29749,10 @@ import { jsx as jsx104, jsxs as jsxs62 } from "react/jsx-runtime";
29615
29749
  import { useMemo as useMemo72 } from "react";
29616
29750
  import { jsxs as jsxs72 } from "react/jsx-runtime";
29617
29751
  import { useMemo as useMemo82 } from "react";
29618
- import { jsx as jsx114, jsxs as jsxs82, Fragment as Fragment23 } from "react/jsx-runtime";
29752
+ import { jsx as jsx114, jsxs as jsxs82, Fragment as Fragment32 } from "react/jsx-runtime";
29619
29753
  import { useCallback as useCallback92, useMemo as useMemo112 } from "react";
29620
29754
  import { useCallback as useCallback82, useMemo as useMemo102, useRef as useRef92 } from "react";
29621
- import { jsx as jsx124, jsxs as jsxs92, Fragment as Fragment32 } from "react/jsx-runtime";
29755
+ import { jsx as jsx124, jsxs as jsxs92, Fragment as Fragment42 } from "react/jsx-runtime";
29622
29756
  import { useCallback as useCallback112, useMemo as useMemo132, useState as useState122 } from "react";
29623
29757
  import { jsx as jsx133 } from "react/jsx-runtime";
29624
29758
 
@@ -29918,6 +30052,35 @@ function findRange2(input, inputRange) {
29918
30052
  return i - 1;
29919
30053
  }
29920
30054
  var defaultEasing2 = (num) => num;
30055
+ var shouldExtendRightForEasing2 = (easing) => {
30056
+ return easing.remotionShouldExtendRight === true;
30057
+ };
30058
+ var resolveEasingForSegment2 = ({
30059
+ easing,
30060
+ segmentIndex
30061
+ }) => {
30062
+ if (easing === undefined) {
30063
+ return defaultEasing2;
30064
+ }
30065
+ if (typeof easing === "function") {
30066
+ return easing;
30067
+ }
30068
+ return easing[segmentIndex];
30069
+ };
30070
+ var interpolateSegment2 = ({
30071
+ input,
30072
+ inputRange,
30073
+ outputRange,
30074
+ easing,
30075
+ extrapolateLeft,
30076
+ extrapolateRight
30077
+ }) => {
30078
+ return interpolateFunction2(input, inputRange, outputRange, {
30079
+ easing,
30080
+ extrapolateLeft,
30081
+ extrapolateRight: input > inputRange[1] && extrapolateRight === "clamp" && shouldExtendRightForEasing2(easing) ? "extend" : extrapolateRight
30082
+ });
30083
+ };
29921
30084
  var interpolateNumber2 = ({
29922
30085
  input,
29923
30086
  inputRange,
@@ -29928,15 +30091,6 @@ var interpolateNumber2 = ({
29928
30091
  return outputRange[0];
29929
30092
  }
29930
30093
  const easingOption = options2?.easing;
29931
- const resolveEasingForSegment = (segmentIndex) => {
29932
- if (easingOption === undefined) {
29933
- return defaultEasing2;
29934
- }
29935
- if (typeof easingOption === "function") {
29936
- return easingOption;
29937
- }
29938
- return easingOption[segmentIndex];
29939
- };
29940
30094
  let extrapolateLeft = "extend";
29941
30095
  if (options2?.extrapolateLeft !== undefined) {
29942
30096
  extrapolateLeft = options2.extrapolateLeft;
@@ -29947,11 +30101,41 @@ var interpolateNumber2 = ({
29947
30101
  }
29948
30102
  const posterizedInput = options2?.posterize === undefined ? input : Math.floor(input / options2.posterize) * options2.posterize;
29949
30103
  const range = findRange2(posterizedInput, inputRange);
29950
- return interpolateFunction2(posterizedInput, [inputRange[range], inputRange[range + 1]], [outputRange[range], outputRange[range + 1]], {
29951
- easing: resolveEasingForSegment(range),
30104
+ const easing = resolveEasingForSegment2({
30105
+ easing: easingOption,
30106
+ segmentIndex: range
30107
+ });
30108
+ let result = interpolateSegment2({
30109
+ input: posterizedInput,
30110
+ inputRange: [inputRange[range], inputRange[range + 1]],
30111
+ outputRange: [outputRange[range], outputRange[range + 1]],
30112
+ easing,
29952
30113
  extrapolateLeft,
29953
30114
  extrapolateRight
29954
30115
  });
30116
+ for (let segmentIndex = 0;segmentIndex < range; segmentIndex++) {
30117
+ const previousEasing = resolveEasingForSegment2({
30118
+ easing: easingOption,
30119
+ segmentIndex
30120
+ });
30121
+ if (!shouldExtendRightForEasing2(previousEasing)) {
30122
+ continue;
30123
+ }
30124
+ const previousSegmentEnd = inputRange[segmentIndex + 1];
30125
+ if (posterizedInput <= previousSegmentEnd) {
30126
+ continue;
30127
+ }
30128
+ const continuedSegmentValue = interpolateSegment2({
30129
+ input: posterizedInput,
30130
+ inputRange: [inputRange[segmentIndex], previousSegmentEnd],
30131
+ outputRange: [outputRange[segmentIndex], outputRange[segmentIndex + 1]],
30132
+ easing: previousEasing,
30133
+ extrapolateLeft,
30134
+ extrapolateRight: "extend"
30135
+ });
30136
+ result += continuedSegmentValue - outputRange[segmentIndex + 1];
30137
+ }
30138
+ return result;
29955
30139
  };
29956
30140
  var interpolateString2 = ({
29957
30141
  input,
@@ -31061,27 +31245,113 @@ if (typeof createContext32 !== "function") {
31061
31245
  }
31062
31246
  var ICON_SIZE2 = 25;
31063
31247
  var fullscreenIconSize = 16;
31064
- var PlayIcon = () => {
31065
- return /* @__PURE__ */ jsx59("svg", {
31248
+ var focusRingFallbackColor = "Highlight";
31249
+ var focusRingColor = "-webkit-focus-ring-color";
31250
+ var focusRingStyle = {
31251
+ stroke: focusRingColor
31252
+ };
31253
+ var playPath = "M8 6.375C7.40904 8.17576 7.06921 10.2486 7.01438 12.3871C6.95955 14.5255 7.19163 16.6547 7.6875 18.5625C9.95364 18.2995 12.116 17.6164 14.009 16.5655C15.902 15.5147 17.4755 14.124 18.6088 12.5C17.5158 10.8949 15.9949 9.51103 14.1585 8.45082C12.3222 7.3906 10.2174 6.68116 8 6.375Z";
31254
+ var playFocusPath = "M93.4691 0.0367432C84.4873 0.520935 77.2494 1.93634 69.9553 4.69266C66.3176 6.05219 60.3548 9.0134 57.0734 11.062C43.3476 19.6103 32.8846 32.4606 27.428 47.4154C26.3405 50.3766 23.3966 59.8188 21.5027 66.3185C8.88329 109.768 1.7204 157.277 0.182822 207.561C-0.0609408 215.569 -0.0609408 234.639 0.182822 242.517C1.21413 275.854 4.42055 305.949 10.2334 336.641C12.596 349.063 16.3837 365.75 18.5776 373.33C23.059 388.732 32.2095 401.843 45.2227 411.453C53.9419 417.896 63.8425 422.217 74.8118 424.34C80.0996 425.365 87.075 425.83 92.2127 425.495C99.3194 425.029 113.42 423.148 124.877 421.118C176.517 411.974 224.22 395.604 267.478 372.175C294.874 357.332 318.294 341.26 340.888 321.761C363.408 302.355 382.609 281.478 399.504 258.049C403.423 252.63 405.392 249.464 407.361 245.478C412.424 235.198 414.805 224.974 414.786 213.539C414.786 202.886 412.761 193.425 408.392 183.741C406.292 179.066 404.286 175.714 399.785 169.345C383.21 145.898 364.815 125.467 342.389 105.614C307.624 74.8481 266.335 49.613 220.226 30.9334C210.232 26.8921 200.387 23.335 188.537 19.4799C163.448 11.3413 132.396 4.28293 106.126 0.763062C102.001 0.204346 96.3942 -0.112244 93.4691 0.0367432Z";
31255
+ var playIconStrokeWidth = 6.25;
31256
+ var playFocusStrokeWidth = 1.5;
31257
+ var playFocusPadding = 2;
31258
+ var playPathBounds = {
31259
+ x1: 7.006500987565134,
31260
+ y1: 6.375,
31261
+ x2: 18.6088,
31262
+ y2: 18.5625
31263
+ };
31264
+ var playFocusPathBounds = {
31265
+ x1: -0.00000009999999999649709,
31266
+ y1: 0.000013203698169792638,
31267
+ x2: 414.7861127950162,
31268
+ y2: 425.60252460486765
31269
+ };
31270
+ var expandBounds = (bounds, padding) => {
31271
+ return {
31272
+ x1: bounds.x1 - padding,
31273
+ y1: bounds.y1 - padding,
31274
+ x2: bounds.x2 + padding,
31275
+ y2: bounds.y2 + padding
31276
+ };
31277
+ };
31278
+ var getBoundsWidth = (bounds) => bounds.x2 - bounds.x1;
31279
+ var getBoundsHeight = (bounds) => bounds.y2 - bounds.y1;
31280
+ var fitBoundsTransform = ({
31281
+ source,
31282
+ target
31283
+ }) => {
31284
+ const scale = Math.min(getBoundsWidth(target) / getBoundsWidth(source), getBoundsHeight(target) / getBoundsHeight(source));
31285
+ const x = target.x1 + (getBoundsWidth(target) - getBoundsWidth(source) * scale) / 2 - source.x1 * scale;
31286
+ const y = target.y1 + (getBoundsHeight(target) - getBoundsHeight(source) * scale) / 2 - source.y1 * scale;
31287
+ return `translate(${x.toFixed(4)} ${y.toFixed(4)}) scale(${scale.toFixed(5)})`;
31288
+ };
31289
+ var playFocusTransform = fitBoundsTransform({
31290
+ source: playFocusPathBounds,
31291
+ target: expandBounds(expandBounds(playPathBounds, playIconStrokeWidth / 2), playFocusPadding)
31292
+ });
31293
+ var PlayIcon = ({ focused }) => {
31294
+ return /* @__PURE__ */ jsxs14("svg", {
31066
31295
  width: ICON_SIZE2,
31067
31296
  height: ICON_SIZE2,
31068
31297
  viewBox: "0 0 25 25",
31069
31298
  fill: "none",
31070
- children: /* @__PURE__ */ jsx59("path", {
31071
- d: "M8 6.375C7.40904 8.17576 7.06921 10.2486 7.01438 12.3871C6.95955 14.5255 7.19163 16.6547 7.6875 18.5625C9.95364 18.2995 12.116 17.6164 14.009 16.5655C15.902 15.5147 17.4755 14.124 18.6088 12.5C17.5158 10.8949 15.9949 9.51103 14.1585 8.45082C12.3222 7.3906 10.2174 6.68116 8 6.375Z",
31072
- fill: "white",
31073
- stroke: "white",
31074
- strokeWidth: "6.25",
31075
- strokeLinejoin: "round"
31076
- })
31299
+ children: [
31300
+ focused ? /* @__PURE__ */ jsx59("path", {
31301
+ d: playFocusPath,
31302
+ fill: "none",
31303
+ stroke: focusRingFallbackColor,
31304
+ strokeWidth: playFocusStrokeWidth,
31305
+ style: focusRingStyle,
31306
+ transform: playFocusTransform,
31307
+ vectorEffect: "non-scaling-stroke"
31308
+ }) : null,
31309
+ /* @__PURE__ */ jsx59("path", {
31310
+ d: playPath,
31311
+ fill: "white",
31312
+ stroke: "white",
31313
+ strokeWidth: playIconStrokeWidth,
31314
+ strokeLinejoin: "round"
31315
+ })
31316
+ ]
31077
31317
  });
31078
31318
  };
31079
- var PauseIcon = () => {
31319
+ var PauseIcon = ({
31320
+ focused
31321
+ }) => {
31080
31322
  return /* @__PURE__ */ jsxs14("svg", {
31081
31323
  viewBox: "0 0 100 100",
31082
31324
  width: ICON_SIZE2,
31083
31325
  height: ICON_SIZE2,
31084
31326
  children: [
31327
+ focused ? /* @__PURE__ */ jsxs14(Fragment12, {
31328
+ children: [
31329
+ /* @__PURE__ */ jsx59("rect", {
31330
+ x: "21",
31331
+ y: "16",
31332
+ width: "28",
31333
+ height: "68",
31334
+ fill: "none",
31335
+ stroke: focusRingFallbackColor,
31336
+ strokeWidth: "4",
31337
+ ry: "9",
31338
+ rx: "9",
31339
+ style: focusRingStyle
31340
+ }),
31341
+ /* @__PURE__ */ jsx59("rect", {
31342
+ x: "51",
31343
+ y: "16",
31344
+ width: "28",
31345
+ height: "68",
31346
+ fill: "none",
31347
+ stroke: focusRingFallbackColor,
31348
+ strokeWidth: "4",
31349
+ ry: "9",
31350
+ rx: "9",
31351
+ style: focusRingStyle
31352
+ })
31353
+ ]
31354
+ }) : null,
31085
31355
  /* @__PURE__ */ jsx59("rect", {
31086
31356
  x: "25",
31087
31357
  y: "20",
@@ -31199,7 +31469,7 @@ var studioStyle = {
31199
31469
  };
31200
31470
  var BufferingIndicator = ({ type }) => {
31201
31471
  const style = type === "player" ? playerStyle : studioStyle;
31202
- return /* @__PURE__ */ jsxs24(Fragment12, {
31472
+ return /* @__PURE__ */ jsxs24(Fragment23, {
31203
31473
  children: [
31204
31474
  /* @__PURE__ */ jsx214("style", {
31205
31475
  type: "text/css",
@@ -32413,16 +32683,20 @@ var RenderWarningIfBlacklist = () => {
32413
32683
  })
32414
32684
  });
32415
32685
  };
32416
- var DefaultPlayPauseButton = ({ playing, buffering }) => {
32686
+ var DefaultPlayPauseButton = ({ playing, buffering, focused }) => {
32417
32687
  if (playing && buffering) {
32418
32688
  return /* @__PURE__ */ jsx64(BufferingIndicator, {
32419
32689
  type: "player"
32420
32690
  });
32421
32691
  }
32422
32692
  if (playing) {
32423
- return /* @__PURE__ */ jsx64(PauseIcon, {});
32693
+ return /* @__PURE__ */ jsx64(PauseIcon, {
32694
+ focused
32695
+ });
32424
32696
  }
32425
- return /* @__PURE__ */ jsx64(PlayIcon, {});
32697
+ return /* @__PURE__ */ jsx64(PlayIcon, {
32698
+ focused
32699
+ });
32426
32700
  };
32427
32701
  var KNOB_SIZE = 12;
32428
32702
  var BAR_HEIGHT = 5;
@@ -33146,6 +33420,7 @@ var Controls = ({
33146
33420
  renderCustomControls
33147
33421
  }) => {
33148
33422
  const playButtonRef = useRef82(null);
33423
+ const [playButtonFocused, setPlayButtonFocused] = useState102(false);
33149
33424
  const [supportsFullscreen, setSupportsFullscreen] = useState102(false);
33150
33425
  const hovered = useHoverState(containerRef, hideControlsWhenPointerDoesntMove);
33151
33426
  const { maxTimeLabelWidth, displayVerticalVolumeSlider } = useVideoControlsResize({
@@ -33180,6 +33455,15 @@ var Controls = ({
33180
33455
  opacity: Number(shouldShow)
33181
33456
  };
33182
33457
  }, [hovered, shouldShowInitially, playing, alwaysShowControls]);
33458
+ const playPauseButtonStyle = useMemo92(() => {
33459
+ if (renderPlayPauseButton !== null || playing && buffering) {
33460
+ return playerButtonStyle;
33461
+ }
33462
+ return {
33463
+ ...playerButtonStyle,
33464
+ outline: "none"
33465
+ };
33466
+ }, [buffering, playing, renderPlayPauseButton]);
33183
33467
  useEffect112(() => {
33184
33468
  if (playButtonRef.current && spaceKeyToPlayOrPause) {
33185
33469
  playButtonRef.current.focus({
@@ -33232,6 +33516,12 @@ var Controls = ({
33232
33516
  onDoubleClick?.(e);
33233
33517
  }
33234
33518
  }, [onDoubleClick]);
33519
+ const onPlayButtonFocus = useCallback72(() => {
33520
+ setPlayButtonFocused(true);
33521
+ }, []);
33522
+ const onPlayButtonBlur = useCallback72(() => {
33523
+ setPlayButtonFocused(false);
33524
+ }, []);
33235
33525
  return /* @__PURE__ */ jsxs82("div", {
33236
33526
  ref,
33237
33527
  style: containerCss,
@@ -33248,22 +33538,26 @@ var Controls = ({
33248
33538
  /* @__PURE__ */ jsx114("button", {
33249
33539
  ref: playButtonRef,
33250
33540
  type: "button",
33251
- style: playerButtonStyle,
33541
+ style: playPauseButtonStyle,
33252
33542
  onClick: toggle,
33543
+ onFocus: onPlayButtonFocus,
33544
+ onBlur: onPlayButtonBlur,
33253
33545
  "aria-label": playing ? "Pause video" : "Play video",
33254
33546
  title: playing ? "Pause video" : "Play video",
33255
33547
  children: renderPlayPauseButton === null ? /* @__PURE__ */ jsx114(DefaultPlayPauseButton, {
33256
33548
  buffering,
33549
+ focused: playButtonFocused,
33257
33550
  playing
33258
33551
  }) : renderPlayPauseButton({
33259
33552
  playing,
33260
33553
  isBuffering: buffering
33261
33554
  }) ?? /* @__PURE__ */ jsx114(DefaultPlayPauseButton, {
33262
33555
  buffering,
33556
+ focused: false,
33263
33557
  playing
33264
33558
  })
33265
33559
  }),
33266
- showVolumeControls ? /* @__PURE__ */ jsxs82(Fragment23, {
33560
+ showVolumeControls ? /* @__PURE__ */ jsxs82(Fragment32, {
33267
33561
  children: [
33268
33562
  /* @__PURE__ */ jsx114("div", {
33269
33563
  style: xSpacer
@@ -33800,7 +34094,7 @@ var PlayerUI = ({
33800
34094
  showPosterWhenBufferingAndPaused && showBufferIndicator && !player.isPlaying()
33801
34095
  ].some(Boolean);
33802
34096
  const { left, top, width, height, ...outerWithoutScale } = outer;
33803
- const content = /* @__PURE__ */ jsxs92(Fragment32, {
34097
+ const content = /* @__PURE__ */ jsxs92(Fragment42, {
33804
34098
  children: [
33805
34099
  /* @__PURE__ */ jsxs92("div", {
33806
34100
  style: outer,
@@ -35773,9 +36067,14 @@ class StaleWaiterError extends Error {
35773
36067
  var CONCURRENCY = 1;
35774
36068
  var waiters = [];
35775
36069
  var running = 0;
36070
+ var runningEntry = null;
35776
36071
  var processNext = () => {
35777
36072
  if (running >= CONCURRENCY) {
35778
- return;
36073
+ if (runningEntry?.waiter.getPriority() === null) {
36074
+ runningEntry.cancel();
36075
+ } else {
36076
+ return;
36077
+ }
35779
36078
  }
35780
36079
  const staleWaiters = [];
35781
36080
  for (let i = waiters.length - 1;i >= 0; i--) {
@@ -35810,11 +36109,37 @@ var processNext = () => {
35810
36109
  }
35811
36110
  const [next] = waiters.splice(bestIndex, 1);
35812
36111
  running++;
36112
+ let settled = false;
36113
+ let cancelled = false;
36114
+ const entry = {
36115
+ waiter: next,
36116
+ cancel: () => {
36117
+ cancelled = true;
36118
+ entry.settle();
36119
+ },
36120
+ settle: () => {
36121
+ if (settled) {
36122
+ return;
36123
+ }
36124
+ settled = true;
36125
+ running--;
36126
+ if (runningEntry === entry) {
36127
+ runningEntry = null;
36128
+ }
36129
+ }
36130
+ };
36131
+ runningEntry = entry;
35813
36132
  next.fn().then((value) => {
35814
- running--;
36133
+ entry.settle();
36134
+ if (cancelled) {
36135
+ return;
36136
+ }
35815
36137
  next.onDone(value, processNext);
35816
36138
  }, (err) => {
35817
- running--;
36139
+ entry.settle();
36140
+ if (cancelled) {
36141
+ return;
36142
+ }
35818
36143
  next.onError(err);
35819
36144
  });
35820
36145
  };
@@ -40187,32 +40512,19 @@ var VideoForPreviewAssertedShowing = ({
40187
40512
  };
40188
40513
  }, [_experimentalInitiallyDrawCachedFrame, src]);
40189
40514
  useEffect212(() => {
40190
- if (!sharedAudioContext)
40191
- return;
40192
- if (!sharedAudioContext.audioContext)
40193
- return;
40194
- const {
40195
- audioContext,
40196
- gainNode,
40197
- audioSyncAnchor,
40198
- scheduleAudioNode,
40199
- unscheduleAudioNode
40200
- } = sharedAudioContext;
40201
- if (!gainNode) {
40202
- return;
40203
- }
40515
+ const sharedAudioContextForMediaPlayer = sharedAudioContext?.audioContext && sharedAudioContext.gainNode ? {
40516
+ audioContext: sharedAudioContext.audioContext,
40517
+ gainNode: sharedAudioContext.gainNode,
40518
+ audioSyncAnchor: sharedAudioContext.audioSyncAnchor,
40519
+ scheduleAudioNode: sharedAudioContext.scheduleAudioNode,
40520
+ unscheduleAudioNode: sharedAudioContext.unscheduleAudioNode
40521
+ } : null;
40204
40522
  try {
40205
40523
  const player = new MediaPlayer({
40206
40524
  canvas: canvasRef.current,
40207
40525
  src: preloadedSrc,
40208
40526
  logLevel,
40209
- sharedAudioContext: {
40210
- audioContext,
40211
- gainNode,
40212
- audioSyncAnchor,
40213
- scheduleAudioNode,
40214
- unscheduleAudioNode
40215
- },
40527
+ sharedAudioContext: sharedAudioContextForMediaPlayer,
40216
40528
  loop,
40217
40529
  trimAfter: initialTrimAfterRef.current,
40218
40530
  trimBefore: initialTrimBeforeRef.current,
@@ -42350,7 +42662,7 @@ import {
42350
42662
  import { BufferTarget, StreamTarget } from "mediabunny";
42351
42663
 
42352
42664
  // ../core/dist/esm/version.mjs
42353
- var VERSION2 = "4.0.482";
42665
+ var VERSION2 = "4.0.484";
42354
42666
 
42355
42667
  // ../web-renderer/dist/esm/index.mjs
42356
42668
  import { AudioSample, VideoSample } from "mediabunny";
@@ -43677,7 +43989,7 @@ var turnSvgIntoDrawable = (svg) => {
43677
43989
  svg.style.marginBottom = "0";
43678
43990
  svg.style.fill = fill;
43679
43991
  svg.style.color = color;
43680
- const svgData = new XMLSerializer().serializeToString(svg);
43992
+ const svgData = new XMLSerializer().serializeToString(svg).replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F]/g, "");
43681
43993
  svg.style.marginLeft = originalMarginLeft;
43682
43994
  svg.style.marginRight = originalMarginRight;
43683
43995
  svg.style.marginTop = originalMarginTop;
@@ -46084,6 +46396,124 @@ var parsePaintOrder = (paintOrder) => {
46084
46396
  var parseTextShadow = (textShadowValue) => {
46085
46397
  return parseShadowValues(textShadowValue);
46086
46398
  };
46399
+ var textDecorationLines = [
46400
+ "underline",
46401
+ "overline",
46402
+ "line-through"
46403
+ ];
46404
+ var currentColorValues = new Set(["currentcolor", "currentColor"]);
46405
+ var getDefaultTextDecorationThickness = (fontSizePx) => {
46406
+ return Math.max(1, Number.isFinite(fontSizePx) ? fontSizePx / 16 : 1);
46407
+ };
46408
+ var parseTextDecoration = ({
46409
+ onlyBackgroundClipText,
46410
+ style: style2
46411
+ }) => {
46412
+ const textDecorationStyle = style2.getPropertyValue("text-decoration-style");
46413
+ if (textDecorationStyle && textDecorationStyle !== "solid") {
46414
+ return null;
46415
+ }
46416
+ const textDecorationLine = style2.getPropertyValue("text-decoration-line");
46417
+ const lineParts = textDecorationLine.split(/\s+/);
46418
+ const lines2 = textDecorationLines.filter((line) => lineParts.includes(line));
46419
+ if (lines2.length === 0) {
46420
+ return null;
46421
+ }
46422
+ const textDecorationThickness = style2.getPropertyValue("text-decoration-thickness");
46423
+ const thicknessValue = parseFloat(textDecorationThickness);
46424
+ const thickness = Number.isFinite(thicknessValue) ? thicknessValue : getDefaultTextDecorationThickness(parseFloat(style2.fontSize));
46425
+ if (thickness <= 0) {
46426
+ return null;
46427
+ }
46428
+ const textDecorationColor = style2.getPropertyValue("text-decoration-color");
46429
+ return {
46430
+ lines: lines2,
46431
+ color: onlyBackgroundClipText || !textDecorationColor || currentColorValues.has(textDecorationColor) ? onlyBackgroundClipText ? "black" : style2.color : textDecorationColor,
46432
+ thickness
46433
+ };
46434
+ };
46435
+ var getTextDecorations = ({
46436
+ computedStyle,
46437
+ onlyBackgroundClipText,
46438
+ span
46439
+ }) => {
46440
+ const decorations = [];
46441
+ const spanDecoration = parseTextDecoration({
46442
+ onlyBackgroundClipText,
46443
+ style: computedStyle
46444
+ });
46445
+ if (spanDecoration) {
46446
+ decorations.push(spanDecoration);
46447
+ }
46448
+ let parent = span.parentElement;
46449
+ while (parent) {
46450
+ const parentDecoration = parseTextDecoration({
46451
+ onlyBackgroundClipText,
46452
+ style: getComputedStyle(parent)
46453
+ });
46454
+ if (parentDecoration) {
46455
+ decorations.push(parentDecoration);
46456
+ }
46457
+ parent = parent.parentElement;
46458
+ }
46459
+ return decorations;
46460
+ };
46461
+ var getTextDecorationY = ({
46462
+ line,
46463
+ measurements,
46464
+ y,
46465
+ thickness,
46466
+ fontSizePx
46467
+ }) => {
46468
+ const fontAscent = measurements.fontBoundingBoxAscent || measurements.actualBoundingBoxAscent || fontSizePx;
46469
+ const fontDescent = measurements.fontBoundingBoxDescent || measurements.actualBoundingBoxDescent || fontSizePx * 0.2;
46470
+ const actualAscent = measurements.actualBoundingBoxAscent || fontAscent;
46471
+ if (line === "underline") {
46472
+ return y + Math.max(thickness, fontDescent * 0.4);
46473
+ }
46474
+ if (line === "overline") {
46475
+ return y - fontAscent + thickness / 2;
46476
+ }
46477
+ return y - actualAscent * 0.35;
46478
+ };
46479
+ var drawTextDecoration = ({
46480
+ contextToDraw,
46481
+ fontSizePx,
46482
+ measurements,
46483
+ parentRect,
46484
+ textDecorations,
46485
+ token,
46486
+ y
46487
+ }) => {
46488
+ if (textDecorations.length === 0) {
46489
+ return;
46490
+ }
46491
+ const startX = token.rect.left - parentRect.x;
46492
+ const endX = token.rect.right - parentRect.x;
46493
+ if (endX <= startX) {
46494
+ return;
46495
+ }
46496
+ contextToDraw.save();
46497
+ contextToDraw.lineCap = "butt";
46498
+ for (const textDecoration of textDecorations) {
46499
+ contextToDraw.strokeStyle = textDecoration.color;
46500
+ contextToDraw.lineWidth = textDecoration.thickness;
46501
+ for (const line of textDecoration.lines) {
46502
+ const lineY = getTextDecorationY({
46503
+ line,
46504
+ measurements,
46505
+ y,
46506
+ thickness: textDecoration.thickness,
46507
+ fontSizePx
46508
+ });
46509
+ contextToDraw.beginPath();
46510
+ contextToDraw.moveTo(startX, lineY);
46511
+ contextToDraw.lineTo(endX, lineY);
46512
+ contextToDraw.stroke();
46513
+ }
46514
+ }
46515
+ contextToDraw.restore();
46516
+ };
46087
46517
  var drawText = ({
46088
46518
  span,
46089
46519
  logLevel,
@@ -46134,6 +46564,11 @@ var drawText = ({
46134
46564
  contextToDraw.fillStyle = onlyBackgroundClipText ? "black" : webkitTextFillColor;
46135
46565
  contextToDraw.letterSpacing = letterSpacing;
46136
46566
  contextToDraw.wordSpacing = wordSpacing;
46567
+ const textDecorations = getTextDecorations({
46568
+ computedStyle,
46569
+ onlyBackgroundClipText,
46570
+ span
46571
+ });
46137
46572
  const strokeWidth2 = parseFloat(webkitTextStrokeWidth);
46138
46573
  const hasStroke = strokeWidth2 > 0;
46139
46574
  if (hasStroke) {
@@ -46184,6 +46619,15 @@ var drawText = ({
46184
46619
  drawFill();
46185
46620
  drawStroke();
46186
46621
  }
46622
+ drawTextDecoration({
46623
+ contextToDraw,
46624
+ fontSizePx,
46625
+ measurements,
46626
+ parentRect,
46627
+ textDecorations,
46628
+ token,
46629
+ y
46630
+ });
46187
46631
  }
46188
46632
  span.textContent = originalText;
46189
46633
  finishFilter();
@@ -49201,6 +49645,7 @@ var listOfRemotionPackages = [
49201
49645
  "@remotion/bugs",
49202
49646
  "@remotion/brand",
49203
49647
  "@remotion/bundler",
49648
+ "@remotion/browser-studio",
49204
49649
  "@remotion/canvas-capture",
49205
49650
  "@remotion/cli",
49206
49651
  "@remotion/cloudrun",
@@ -50543,7 +50988,7 @@ var GithubButton = () => {
50543
50988
  " ",
50544
50989
  /* @__PURE__ */ jsx167("div", {
50545
50990
  className: "text-xs inline-block ml-2 leading-none mt-[3px] self-center",
50546
- children: "50k"
50991
+ children: "51k"
50547
50992
  })
50548
50993
  ]
50549
50994
  });
@@ -50615,32 +51060,6 @@ var GetStarted = () => {
50615
51060
  className: "w-full",
50616
51061
  children: /* @__PURE__ */ jsx168(GithubButton, {})
50617
51062
  })
50618
- }),
50619
- " ",
50620
- /* @__PURE__ */ jsx168("div", {
50621
- className: "w-2 h-2"
50622
- }),
50623
- /* @__PURE__ */ jsx168("div", {
50624
- className: "w-full lg:w-auto",
50625
- children: /* @__PURE__ */ jsxs66(Button, {
50626
- href: "/prompts",
50627
- className: "w-full",
50628
- children: [
50629
- /* @__PURE__ */ jsx168("svg", {
50630
- width: "20",
50631
- height: "20",
50632
- viewBox: "0 0 149 149",
50633
- fill: "none",
50634
- xmlns: "http://www.w3.org/2000/svg",
50635
- style: { marginRight: 8 },
50636
- children: /* @__PURE__ */ jsx168("path", {
50637
- d: "M29.05 98.54L58.19 82.19L58.68 80.77L58.19 79.98H56.77L51.9 79.68L35.25 79.23L20.81 78.63L6.82 77.88L3.3 77.13L0 72.78L0.340004 70.61L3.3 68.62L7.54 68.99L16.91 69.63L30.97 70.6L41.17 71.2L56.28 72.77H58.68L59.02 71.8L58.2 71.2L57.56 70.6L43.01 60.74L27.26 50.32L19.01 44.32L14.55 41.28L12.3 38.43L11.33 32.21L15.38 27.75L20.82 28.12L22.21 28.49L27.72 32.73L39.49 41.84L54.86 53.16L57.11 55.03L58.01 54.39L58.12 53.94L57.11 52.25L48.75 37.14L39.83 21.77L35.86 15.4L34.81 11.58C34.44 10.01 34.17 8.69 34.17 7.08L38.78 0.820007L41.33 0L47.48 0.820007L50.07 3.07001L53.89 11.81L60.08 25.57L69.68 44.28L72.49 49.83L73.99 54.97L74.55 56.54H75.52V55.64L76.31 45.1L77.77 32.16L79.19 15.51L79.68 10.82L82 5.2L86.61 2.16L90.21 3.88L93.17 8.12L92.76 10.86L91 22.3L87.55 40.22L85.3 52.22H86.61L88.11 50.72L94.18 42.66L104.38 29.91L108.88 24.85L114.13 19.26L117.5 16.6H123.87L128.56 23.57L126.46 30.77L119.9 39.09L114.46 46.14L106.66 56.64L101.79 65.04L102.24 65.71L103.4 65.6L121.02 61.85L130.54 60.13L141.9 58.18L147.04 60.58L147.6 63.02L145.58 68.01L133.43 71.01L119.18 73.86L97.96 78.88L97.7 79.07L98 79.44L107.56 80.34L111.65 80.56H121.66L140.3 81.95L145.17 85.17L148.09 89.11L147.6 92.11L140.1 95.93L129.98 93.53L106.36 87.91L98.26 85.89H97.14V86.56L103.89 93.16L116.26 104.33L131.75 118.73L132.54 122.29L130.55 125.1L128.45 124.8L114.84 114.56L109.59 109.95L97.7 99.94H96.91V100.99L99.65 105L114.12 126.75L114.87 133.42L113.82 135.59L110.07 136.9L105.95 136.15L97.48 124.26L88.74 110.87L81.69 98.87L80.83 99.36L76.67 144.17L74.72 146.46L70.22 148.18L66.47 145.33L64.48 140.72L66.47 131.61L68.87 119.72L70.82 110.27L72.58 98.53L73.63 94.63L73.56 94.37L72.7 94.48L63.85 106.63L50.39 124.82L39.74 136.22L37.19 137.23L32.77 134.94L33.18 130.85L35.65 127.21L50.39 108.46L59.28 96.84L65.02 90.13L64.98 89.16H64.64L25.49 114.58L18.52 115.48L15.52 112.67L15.89 108.06L17.31 106.56L29.08 98.46L29.04 98.5L29.05 98.54Z",
50638
- fill: "#D97757"
50639
- })
50640
- }),
50641
- "Prompt a video"
50642
- ]
50643
- })
50644
51063
  })
50645
51064
  ]
50646
51065
  });