@remotion/promo-pages 4.0.457 → 4.0.459

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 (38) hide show
  1. package/dist/Homepage.js +699 -495
  2. package/dist/components/experts/experts-data.js +13 -0
  3. package/dist/components/homepage/CommunityStatsItems.js +1 -1
  4. package/dist/components/homepage/FreePricing.js +10 -11
  5. package/dist/components/homepage/GitHubButton.js +1 -1
  6. package/dist/components/prompts/PromptsGallery.js +1 -1
  7. package/dist/components/prompts/PromptsSubmit.js +1 -1
  8. package/dist/components/team/TrustSection.js +1 -1
  9. package/dist/design.js +396 -335
  10. package/dist/experts/experts-data.js +124 -2
  11. package/dist/experts.js +535 -331
  12. package/dist/homepage/Pricing.js +399 -338
  13. package/dist/prompts/PromptsGallery.js +396 -335
  14. package/dist/prompts/PromptsShow.js +396 -335
  15. package/dist/prompts/PromptsSubmit.js +396 -335
  16. package/dist/team.js +396 -335
  17. package/dist/template-modal-content.js +398 -337
  18. package/dist/templates.js +396 -335
  19. package/package.json +13 -13
  20. package/public/img/freelancers/huang-chi-chang.jpg +0 -0
  21. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/Homepage.css +0 -32
  22. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/Homepage.js +0 -42672
  23. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/design.js +0 -20460
  24. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/experts/experts-data.js +0 -740
  25. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/experts.js +0 -8778
  26. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/homepage/Pricing.js +0 -21875
  27. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsGallery.js +0 -20301
  28. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsShow.css +0 -2578
  29. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsShow.js +0 -40128
  30. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsSubmit.css +0 -2578
  31. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsSubmit.js +0 -40219
  32. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/prompt-types.js +0 -0
  33. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/team.js +0 -292
  34. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/template-modal-content.css +0 -32
  35. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/template-modal-content.js +0 -22044
  36. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/templates.js +0 -21306
  37. package/dist/components/homepage/InfoTooltip.d.ts +0 -6
  38. package/dist/components/homepage/InfoTooltip.js +0 -6
package/dist/Homepage.js CHANGED
@@ -45,6 +45,10 @@ var experts = [
45
45
  linkedin: "in/sterv/",
46
46
  email: "stephen@middy.com",
47
47
  videocall: null,
48
+ discord: {
49
+ username: "stervdotcom",
50
+ userId: "613828260534550719"
51
+ },
48
52
  since: new Date("2022-08-15").getTime(),
49
53
  description: /* @__PURE__ */ jsxs("div", {
50
54
  children: [
@@ -69,6 +73,10 @@ var experts = [
69
73
  linkedin: "in/just-moh-it/",
70
74
  email: "yo@mohitya.dev",
71
75
  videocall: null,
76
+ discord: {
77
+ username: "justmohit",
78
+ userId: "616199379530940426"
79
+ },
72
80
  since: new Date("2022-08-15").getTime(),
73
81
  description: /* @__PURE__ */ jsxs("div", {
74
82
  children: [
@@ -95,6 +103,10 @@ var experts = [
95
103
  linkedin: "in/satelllte/",
96
104
  email: "lunaerxs@gmail.com",
97
105
  videocall: null,
106
+ discord: {
107
+ username: "satelllte",
108
+ userId: "564382615105306634"
109
+ },
98
110
  since: new Date("2022-09-16").getTime(),
99
111
  description: /* @__PURE__ */ jsxs("div", {
100
112
  children: [
@@ -124,6 +136,10 @@ var experts = [
124
136
  linkedin: null,
125
137
  email: "ben@captok.ai",
126
138
  videocall: null,
139
+ discord: {
140
+ username: "ben201000",
141
+ userId: "833862694372245515"
142
+ },
127
143
  since: new Date("2022-11-03").getTime(),
128
144
  description: /* @__PURE__ */ jsxs("div", {
129
145
  children: [
@@ -151,6 +167,7 @@ var experts = [
151
167
  since: new Date("2022-08-22").getTime(),
152
168
  email: "karel@asius.ai",
153
169
  videocall: null,
170
+ discord: null,
154
171
  description: /* @__PURE__ */ jsxs("div", {
155
172
  children: [
156
173
  "I have created Remotion videos for many companies and helped them with deployment, some examples are visible",
@@ -184,6 +201,10 @@ var experts = [
184
201
  linkedin: "in/alex-f-17a5bb56/",
185
202
  email: "alex.frndz@gmail.com",
186
203
  videocall: "https://cal.com/remotion-expert-alex-fernandez",
204
+ discord: {
205
+ username: "alex12345670000",
206
+ userId: "1046357837976182894"
207
+ },
187
208
  since: new Date("2022-12-02").getTime(),
188
209
  description: /* @__PURE__ */ jsx("div", {
189
210
  children: "I am an experienced integration developer using Mulesoft, a backend developer and on the side frontend and animation enthusiast."
@@ -199,6 +220,10 @@ var experts = [
199
220
  linkedin: "in/matthew-mcgillivray-68295a55",
200
221
  email: "mm@mattm9y.com",
201
222
  videocall: "https://cal.com/remotion-expert-matt-mcgillivray",
223
+ discord: {
224
+ username: "umungobungo",
225
+ userId: "225141342894948352"
226
+ },
202
227
  since: new Date("2023-01-30").getTime(),
203
228
  description: /* @__PURE__ */ jsx("div", {
204
229
  children: /* @__PURE__ */ jsxs("p", {
@@ -263,6 +288,10 @@ var experts = [
263
288
  linkedin: "in/raymond-lotmar/",
264
289
  email: "ray@blocklab.ch",
265
290
  videocall: "https://cal.com/remotion-expert-ray-lotmar",
291
+ discord: {
292
+ username: "ray_block",
293
+ userId: "402806969980944384"
294
+ },
266
295
  since: new Date("2023-01-30").getTime(),
267
296
  description: /* @__PURE__ */ jsxs("div", {
268
297
  children: [
@@ -293,6 +322,10 @@ var experts = [
293
322
  linkedin: "in/lorenzobertolini/",
294
323
  email: "ciao@lorenzobertolini.com",
295
324
  videocall: null,
325
+ discord: {
326
+ username: "lorenzobertolini",
327
+ userId: "933408520789950516"
328
+ },
296
329
  since: new Date("2023-03-14").getTime(),
297
330
  description: /* @__PURE__ */ jsxs("div", {
298
331
  children: [
@@ -333,6 +366,10 @@ var experts = [
333
366
  linkedin: "in/antoine-caron-slash/",
334
367
  email: "antoine395.caron+remotion@gmail.com",
335
368
  videocall: null,
369
+ discord: {
370
+ username: "antoinecaron.",
371
+ userId: "199566011849113600"
372
+ },
336
373
  since: new Date("2023-03-17").getTime(),
337
374
  description: /* @__PURE__ */ jsx("div", {
338
375
  children: /* @__PURE__ */ jsxs("p", {
@@ -359,6 +396,10 @@ var experts = [
359
396
  linkedin: "in/mickaelalves/",
360
397
  email: "alves.mckl@gmail.com",
361
398
  videocall: null,
399
+ discord: {
400
+ username: "cruuzazul",
401
+ userId: "455697698050277378"
402
+ },
362
403
  since: new Date("2023-03-17").getTime(),
363
404
  description: /* @__PURE__ */ jsx("div", {
364
405
  children: /* @__PURE__ */ jsxs("p", {
@@ -385,6 +426,10 @@ var experts = [
385
426
  linkedin: "in/pranavk7/",
386
427
  email: "hey@pranava.dev",
387
428
  videocall: null,
429
+ discord: {
430
+ username: "thecmdrunner",
431
+ userId: "768013898385063936"
432
+ },
388
433
  since: new Date("2023-07-03").getTime(),
389
434
  description: /* @__PURE__ */ jsxs("div", {
390
435
  children: [
@@ -419,6 +464,10 @@ var experts = [
419
464
  linkedin: "in/rahulbansalrb/",
420
465
  email: "bansalrahul14@gmail.com",
421
466
  videocall: "https://cal.com/remotion-expert-rahul-bansal",
467
+ discord: {
468
+ username: "raxrb",
469
+ userId: "564805165211713536"
470
+ },
422
471
  since: new Date("2023-08-04").getTime(),
423
472
  description: /* @__PURE__ */ jsxs("div", {
424
473
  children: [
@@ -438,12 +487,16 @@ var experts = [
438
487
  slug: "pramod-kumar",
439
488
  name: "Pramod Kumar",
440
489
  image: "/img/freelancers/pramod.jpg",
441
- website: "https://www.pramod73.in/",
490
+ website: null,
442
491
  x: "pramodk73",
443
492
  github: "pskd73",
444
493
  linkedin: "in/pramod-kumar-1a135b74/",
445
494
  email: "pramodkumar.damam73@gmail.com",
446
495
  videocall: "https://cal.com/remotion-expert-pramod-kumar",
496
+ discord: {
497
+ username: "pskd73",
498
+ userId: "517057574483525655"
499
+ },
447
500
  since: new Date("2024-03-10").getTime(),
448
501
  description: /* @__PURE__ */ jsxs("div", {
449
502
  children: [
@@ -473,7 +526,14 @@ var experts = [
473
526
  children: "remotion-animate-text"
474
527
  }),
475
528
  " ",
476
- "for Remotion to animate text. I build products in public on X. I love helping the community. Feel free to reach out. Looking forward!"
529
+ "for Remotion to animate text. I build products in public on X and currently building",
530
+ " ",
531
+ /* @__PURE__ */ jsx("a", {
532
+ target: "_blank",
533
+ href: "https://crawlchat.app",
534
+ children: "CrawlChat"
535
+ }),
536
+ ". I love helping the community. Feel free to reach out. Looking forward!"
477
537
  ]
478
538
  })
479
539
  },
@@ -487,6 +547,10 @@ var experts = [
487
547
  linkedin: "in/ayushsoni1001/",
488
548
  email: "hi@ayushsoni.com",
489
549
  videocall: "https://cal.com/remotion-expert-ayush-soni",
550
+ discord: {
551
+ username: "ayushsoni",
552
+ userId: "624968675916513310"
553
+ },
490
554
  since: new Date("2024-03-17").getTime(),
491
555
  description: /* @__PURE__ */ jsxs("div", {
492
556
  children: [
@@ -518,6 +582,10 @@ var experts = [
518
582
  linkedin: "in/andrei-terteci-935331151/",
519
583
  email: "hello@andreiterteci.com",
520
584
  videocall: "https://cal.com/remotion-expert-andrei-terteci",
585
+ discord: {
586
+ username: "andreiterteci",
587
+ userId: "710924274361172078"
588
+ },
521
589
  since: new Date("2024-03-17").getTime(),
522
590
  description: /* @__PURE__ */ jsxs("div", {
523
591
  children: [
@@ -549,6 +617,10 @@ var experts = [
549
617
  linkedin: "in/sambowenhughes/",
550
618
  email: "sam@reactvideoeditor.com",
551
619
  videocall: "https://calendly.com/reactvideoeditor/30min",
620
+ discord: {
621
+ username: ".samelliott",
622
+ userId: "862593906972688385"
623
+ },
552
624
  since: new Date("2025-06-03").getTime(),
553
625
  description: /* @__PURE__ */ jsxs("div", {
554
626
  children: [
@@ -634,6 +706,10 @@ var experts = [
634
706
  email: "shankhadeepdey99@gmail.com",
635
707
  slug: "iamshankhadeep",
636
708
  videocall: "https://cal.com/iamshankhadeep",
709
+ discord: {
710
+ username: "iamshankhadeep",
711
+ userId: "441576588937527306"
712
+ },
637
713
  since: new Date("2021-02-13").getTime(),
638
714
  description: /* @__PURE__ */ jsx("div", {
639
715
  children: "I created @remotion/player and @remotion/lambda with Jonny. I have 5+ years of experience in building products using Remotion, React, Next.js, and Typescript. I have worked in companies like Camcorder and early-stage startups like a funnel builder marketplace. I can build products super fast from scratch. Looking forward to helping you."
@@ -649,6 +725,10 @@ var experts = [
649
725
  linkedin: "in/amirtadrisi/",
650
726
  email: "amir@cubite.io",
651
727
  videocall: null,
728
+ discord: {
729
+ username: "aioppsos1565",
730
+ userId: "709545234882756711"
731
+ },
652
732
  since: new Date("2025-01-01").getTime(),
653
733
  description: /* @__PURE__ */ jsxs("div", {
654
734
  children: [
@@ -718,6 +798,10 @@ var experts = [
718
798
  linkedin: "in/pablito-jean-pool-silva-inca-735a03192/",
719
799
  email: "pablito.silvainca@gmail.com",
720
800
  videocall: null,
801
+ discord: {
802
+ username: "pablituuu",
803
+ userId: "513743221109555206"
804
+ },
721
805
  since: new Date("2026-02-13").getTime(),
722
806
  description: /* @__PURE__ */ jsxs("div", {
723
807
  children: [
@@ -744,6 +828,10 @@ var experts = [
744
828
  linkedin: "in/haingt-dev/",
745
829
  email: "hai@haingt.dev",
746
830
  videocall: null,
831
+ discord: {
832
+ username: "haingt.dev",
833
+ userId: "384392709902827522"
834
+ },
747
835
  since: new Date("2026-04-02").getTime(),
748
836
  description: /* @__PURE__ */ jsxs("div", {
749
837
  children: [
@@ -771,6 +859,10 @@ var experts = [
771
859
  linkedin: "in/ashok-reddy-kakumanu-8a3078247/",
772
860
  email: "ashok17748@gmail.com",
773
861
  videocall: null,
862
+ discord: {
863
+ username: ".8gates",
864
+ userId: "668293302767845376"
865
+ },
774
866
  since: new Date("2026-04-30").getTime(),
775
867
  description: /* @__PURE__ */ jsxs("div", {
776
868
  children: [
@@ -786,10 +878,40 @@ var experts = [
786
878
  "Available for hourly and project/milestone-based engagements."
787
879
  ]
788
880
  })
881
+ },
882
+ {
883
+ slug: "huang-chi-chang",
884
+ name: "Huang Chi Chang",
885
+ image: "/img/freelancers/huang-chi-chang.jpg",
886
+ website: "https://swift-clip.vercel.app/",
887
+ x: null,
888
+ github: "zz41354899",
889
+ linkedin: null,
890
+ email: "zz41354899@gmail.com",
891
+ videocall: null,
892
+ discord: {
893
+ username: "Nocts",
894
+ userId: "444852671191580672"
895
+ },
896
+ since: new Date("2026-05-05").getTime(),
897
+ description: /* @__PURE__ */ jsxs("div", {
898
+ children: [
899
+ "I'm a Product Designer and Indie Hacker based in Taiwan. I specialize in using Remotion to automate video production, building dynamic templates and automated rendering pipelines.",
900
+ /* @__PURE__ */ jsx("br", {}),
901
+ "My project,",
902
+ " ",
903
+ /* @__PURE__ */ jsx("a", {
904
+ target: "_blank",
905
+ href: "https://swift-clip.vercel.app/",
906
+ children: "SwiftClip"
907
+ }),
908
+ ", is a tool designed to streamline professional video creation through programmatic workflows."
909
+ ]
910
+ })
789
911
  }
790
912
  ];
791
913
  // src/components/experts/ExpertsPage.tsx
792
- import { useMemo as useMemo39 } from "react";
914
+ import { useMemo as useMemo38 } from "react";
793
915
 
794
916
  // ../core/dist/esm/index.mjs
795
917
  import { createContext } from "react";
@@ -834,11 +956,11 @@ import { jsx as jsx8 } from "react/jsx-runtime";
834
956
  import { useEffect as useEffect3, useMemo as useMemo10, useRef as useRef4 } from "react";
835
957
  import { jsx as jsx9 } from "react/jsx-runtime";
836
958
  import {
837
- forwardRef as forwardRef2,
838
- useContext as useContext15,
959
+ forwardRef as forwardRef3,
960
+ useContext as useContext16,
839
961
  useEffect as useEffect5,
840
- useMemo as useMemo15,
841
- useState as useState5
962
+ useMemo as useMemo16,
963
+ useState as useState6
842
964
  } from "react";
843
965
  import { useRef as useRef5 } from "react";
844
966
  import { useContext as useContext14, useMemo as useMemo13 } from "react";
@@ -848,16 +970,17 @@ import { jsx as jsx10 } from "react/jsx-runtime";
848
970
  import { createContext as createContext14 } from "react";
849
971
  import React12, { useCallback as useCallback5, useMemo as useMemo14, useRef as useRef6, useState as useState4 } from "react";
850
972
  import { jsx as jsx11 } from "react/jsx-runtime";
973
+ import React13, { forwardRef as forwardRef2, useState as useState5, useContext as useContext15, useMemo as useMemo15 } from "react";
851
974
  import { jsx as jsx12 } from "react/jsx-runtime";
852
975
  import {
853
- forwardRef as forwardRef3,
976
+ forwardRef as forwardRef4,
854
977
  useEffect as useEffect6,
855
978
  useImperativeHandle as useImperativeHandle2,
856
979
  useLayoutEffect as useLayoutEffect2,
857
980
  useRef as useRef8,
858
- useState as useState6
981
+ useState as useState7
859
982
  } from "react";
860
- import React14, { useCallback as useCallback6, useImperativeHandle, useRef as useRef7 } from "react";
983
+ import React15, { useCallback as useCallback6, useImperativeHandle, useRef as useRef7 } from "react";
861
984
  import { jsx as jsx13 } from "react/jsx-runtime";
862
985
  import { jsx as jsx14 } from "react/jsx-runtime";
863
986
  import {
@@ -866,12 +989,10 @@ import {
866
989
  useCallback as useCallback7,
867
990
  useContext as useContext17,
868
991
  useLayoutEffect as useLayoutEffect3,
869
- useMemo as useMemo18,
992
+ useMemo as useMemo17,
870
993
  useRef as useRef9,
871
994
  useState as useState8
872
995
  } from "react";
873
- import React15, { forwardRef as forwardRef4, useMemo as useMemo17 } from "react";
874
- import { useContext as useContext16, useMemo as useMemo16, useState as useState7 } from "react";
875
996
  import { jsx as jsx15 } from "react/jsx-runtime";
876
997
  import { useContext as useContext18, useLayoutEffect as useLayoutEffect5, useState as useState10 } from "react";
877
998
  import {
@@ -879,25 +1000,25 @@ import {
879
1000
  useCallback as useCallback8,
880
1001
  useImperativeHandle as useImperativeHandle3,
881
1002
  useLayoutEffect as useLayoutEffect4,
882
- useMemo as useMemo19,
1003
+ useMemo as useMemo18,
883
1004
  useRef as useRef10,
884
1005
  useState as useState9
885
1006
  } from "react";
886
1007
  import { jsx as jsx16 } from "react/jsx-runtime";
887
1008
  import { forwardRef as forwardRef8, useCallback as useCallback13, useContext as useContext30 } from "react";
888
- import React17, { createContext as createContext17, useMemo as useMemo20 } from "react";
1009
+ import React17, { createContext as createContext17, useMemo as useMemo19 } from "react";
889
1010
  import { jsx as jsx17 } from "react/jsx-runtime";
890
1011
  import { useContext as useContext19 } from "react";
891
1012
  import { createContext as createContext18, useEffect as useEffect7, useState as useState11 } from "react";
892
1013
  import { jsx as jsx18 } from "react/jsx-runtime";
893
- import { createContext as createContext19, useMemo as useMemo21, useReducer } from "react";
1014
+ import { createContext as createContext19, useMemo as useMemo20, useReducer } from "react";
894
1015
  import { jsx as jsx19 } from "react/jsx-runtime";
895
1016
  import React23, {
896
1017
  forwardRef as forwardRef6,
897
1018
  useContext as useContext28,
898
1019
  useEffect as useEffect14,
899
1020
  useImperativeHandle as useImperativeHandle4,
900
- useMemo as useMemo29,
1021
+ useMemo as useMemo28,
901
1022
  useRef as useRef18,
902
1023
  useState as useState16
903
1024
  } from "react";
@@ -907,14 +1028,14 @@ import React20, {
907
1028
  createRef as createRef2,
908
1029
  useCallback as useCallback9,
909
1030
  useContext as useContext20,
910
- useMemo as useMemo23,
1031
+ useMemo as useMemo22,
911
1032
  useRef as useRef11,
912
1033
  useState as useState12
913
1034
  } from "react";
914
- import { useMemo as useMemo22 } from "react";
1035
+ import { useMemo as useMemo21 } from "react";
915
1036
  import { jsx as jsx20, jsxs as jsxs22 } from "react/jsx-runtime";
916
1037
  import { useRef as useRef12 } from "react";
917
- import { useContext as useContext23, useEffect as useEffect8, useMemo as useMemo24, useState as useState13 } from "react";
1038
+ import { useContext as useContext23, useEffect as useEffect8, useMemo as useMemo23, useState as useState13 } from "react";
918
1039
  import { useContext as useContext22 } from "react";
919
1040
  import {
920
1041
  useCallback as useCallback12,
@@ -923,14 +1044,14 @@ import {
923
1044
  useLayoutEffect as useLayoutEffect8,
924
1045
  useRef as useRef17
925
1046
  } from "react";
926
- import { useCallback as useCallback11, useMemo as useMemo27, useRef as useRef15 } from "react";
927
- import { useContext as useContext25, useMemo as useMemo26 } from "react";
1047
+ import { useCallback as useCallback11, useMemo as useMemo26, useRef as useRef15 } from "react";
1048
+ import { useContext as useContext25, useMemo as useMemo25 } from "react";
928
1049
  import React21, {
929
1050
  useCallback as useCallback10,
930
1051
  useContext as useContext24,
931
1052
  useEffect as useEffect9,
932
1053
  useLayoutEffect as useLayoutEffect7,
933
- useMemo as useMemo25,
1054
+ useMemo as useMemo24,
934
1055
  useRef as useRef14,
935
1056
  useState as useState14
936
1057
  } from "react";
@@ -939,7 +1060,7 @@ import React22 from "react";
939
1060
  import { useEffect as useEffect10, useState as useState15 } from "react";
940
1061
  import { useEffect as useEffect11, useRef as useRef16 } from "react";
941
1062
  import { useEffect as useEffect13 } from "react";
942
- import { createContext as createContext21, useContext as useContext27, useMemo as useMemo28 } from "react";
1063
+ import { createContext as createContext21, useContext as useContext27, useMemo as useMemo27 } from "react";
943
1064
  import { jsx as jsx222 } from "react/jsx-runtime";
944
1065
  import {
945
1066
  forwardRef as forwardRef7,
@@ -947,7 +1068,7 @@ import {
947
1068
  useEffect as useEffect15,
948
1069
  useImperativeHandle as useImperativeHandle5,
949
1070
  useLayoutEffect as useLayoutEffect9,
950
- useMemo as useMemo30,
1071
+ useMemo as useMemo29,
951
1072
  useRef as useRef19
952
1073
  } from "react";
953
1074
  import { jsx as jsx23 } from "react/jsx-runtime";
@@ -968,14 +1089,14 @@ import React28 from "react";
968
1089
  import {
969
1090
  useCallback as useCallback16,
970
1091
  useImperativeHandle as useImperativeHandle7,
971
- useMemo as useMemo31,
1092
+ useMemo as useMemo30,
972
1093
  useRef as useRef21,
973
1094
  useState as useState19
974
1095
  } from "react";
975
1096
  import { jsx as jsx27 } from "react/jsx-runtime";
976
1097
  import React29 from "react";
977
- import { useMemo as useMemo33 } from "react";
978
- import { createContext as createContext22, useContext as useContext32, useMemo as useMemo32 } from "react";
1098
+ import { useMemo as useMemo32 } from "react";
1099
+ import { createContext as createContext22, useContext as useContext32, useMemo as useMemo31 } from "react";
979
1100
  import { jsx as jsx28 } from "react/jsx-runtime";
980
1101
  import { jsx as jsx29 } from "react/jsx-runtime";
981
1102
  import React31 from "react";
@@ -987,7 +1108,7 @@ import {
987
1108
  useContext as useContext34,
988
1109
  useEffect as useEffect16,
989
1110
  useLayoutEffect as useLayoutEffect11,
990
- useMemo as useMemo34,
1111
+ useMemo as useMemo33,
991
1112
  useState as useState20
992
1113
  } from "react";
993
1114
  import { jsx as jsx30 } from "react/jsx-runtime";
@@ -996,16 +1117,16 @@ import React34, {
996
1117
  useContext as useContext35,
997
1118
  useEffect as useEffect18,
998
1119
  useImperativeHandle as useImperativeHandle8,
999
- useMemo as useMemo35,
1120
+ useMemo as useMemo34,
1000
1121
  useRef as useRef22,
1001
1122
  useState as useState21
1002
1123
  } from "react";
1003
1124
  import { useEffect as useEffect17 } from "react";
1004
1125
  import { jsx as jsx31 } from "react/jsx-runtime";
1005
1126
  import { jsx as jsx32 } from "react/jsx-runtime";
1006
- import React36, { useMemo as useMemo36 } from "react";
1127
+ import React36, { useMemo as useMemo35 } from "react";
1007
1128
  import { jsx as jsx33 } from "react/jsx-runtime";
1008
- import { Children, forwardRef as forwardRef11, useMemo as useMemo37 } from "react";
1129
+ import { Children, forwardRef as forwardRef11, useMemo as useMemo36 } from "react";
1009
1130
  import React37 from "react";
1010
1131
  import React38, { createContext as createContext24 } from "react";
1011
1132
  import { jsx as jsx34 } from "react/jsx-runtime";
@@ -1018,7 +1139,7 @@ import {
1018
1139
  useEffect as useEffect19,
1019
1140
  useImperativeHandle as useImperativeHandle9,
1020
1141
  useLayoutEffect as useLayoutEffect12,
1021
- useMemo as useMemo38,
1142
+ useMemo as useMemo37,
1022
1143
  useRef as useRef23
1023
1144
  } from "react";
1024
1145
  import { jsx as jsx36 } from "react/jsx-runtime";
@@ -2097,6 +2218,7 @@ __export2(exports_timeline_position_state, {
2097
2218
  useTimelinePosition: () => useTimelinePosition,
2098
2219
  useTimelineContext: () => useTimelineContext,
2099
2220
  usePlayingState: () => usePlayingState,
2221
+ usePlaybackRate: () => usePlaybackRate,
2100
2222
  useAbsoluteTimelinePosition: () => useAbsoluteTimelinePosition,
2101
2223
  persistCurrentFrame: () => persistCurrentFrame,
2102
2224
  getInitialFrameState: () => getInitialFrameState,
@@ -2143,6 +2265,7 @@ var SetTimelineContext = createContext13({
2143
2265
  }
2144
2266
  });
2145
2267
  var TimelineContext = createContext13(null);
2268
+ var PlaybackRateContext = createContext13(null);
2146
2269
  var AbsoluteTimeContext = createContext13(null);
2147
2270
  var TimelineContextProvider = ({ children, frameState }) => {
2148
2271
  const [playing, setPlaying] = useState2(false);
@@ -2185,11 +2308,15 @@ var TimelineContextProvider = ({ children, frameState }) => {
2185
2308
  playing,
2186
2309
  imperativePlaying,
2187
2310
  rootId: remotionRootId,
2188
- playbackRate,
2189
- setPlaybackRate,
2190
2311
  audioAndVideoTags
2191
2312
  };
2192
- }, [frame, playbackRate, playing, remotionRootId]);
2313
+ }, [frame, playing, remotionRootId]);
2314
+ const playbackRateContextValue = useMemo8(() => {
2315
+ return {
2316
+ playbackRate,
2317
+ setPlaybackRate
2318
+ };
2319
+ }, [playbackRate]);
2193
2320
  const setTimelineContextValue = useMemo8(() => {
2194
2321
  return {
2195
2322
  setFrame,
@@ -2198,11 +2325,14 @@ var TimelineContextProvider = ({ children, frameState }) => {
2198
2325
  }, []);
2199
2326
  return /* @__PURE__ */ jsx8(AbsoluteTimeContext.Provider, {
2200
2327
  value: timelineContextValue,
2201
- children: /* @__PURE__ */ jsx8(TimelineContext.Provider, {
2202
- value: timelineContextValue,
2203
- children: /* @__PURE__ */ jsx8(SetTimelineContext.Provider, {
2204
- value: setTimelineContextValue,
2205
- children
2328
+ children: /* @__PURE__ */ jsx8(PlaybackRateContext.Provider, {
2329
+ value: playbackRateContextValue,
2330
+ children: /* @__PURE__ */ jsx8(TimelineContext.Provider, {
2331
+ value: timelineContextValue,
2332
+ children: /* @__PURE__ */ jsx8(SetTimelineContext.Provider, {
2333
+ value: setTimelineContextValue,
2334
+ children
2335
+ })
2206
2336
  })
2207
2337
  })
2208
2338
  });
@@ -2245,6 +2375,13 @@ var useTimelineContext = () => {
2245
2375
  }
2246
2376
  return state;
2247
2377
  };
2378
+ var usePlaybackRate = () => {
2379
+ const state = useContext10(PlaybackRateContext);
2380
+ if (state === null) {
2381
+ throw new Error("PlaybackRateContext is not available. This hook must be used inside a <Player> or the Remotion Studio.");
2382
+ }
2383
+ return state;
2384
+ };
2248
2385
  var useTimelinePosition = () => {
2249
2386
  const state = useTimelineContext();
2250
2387
  return useTimelinePositionFromContext(state);
@@ -2536,7 +2673,7 @@ var getComponentsToAddStacksTo = () => componentsToAddStacksTo;
2536
2673
  var addSequenceStackTraces = (component) => {
2537
2674
  componentsToAddStacksTo.push(component);
2538
2675
  };
2539
- var VERSION = "4.0.457";
2676
+ var VERSION = "4.0.459";
2540
2677
  var checkMultipleRemotionVersions = () => {
2541
2678
  if (typeof globalThis === "undefined") {
2542
2679
  return;
@@ -2707,6 +2844,54 @@ var Freeze = ({
2707
2844
  var PremountContext = createContext14({
2708
2845
  premountFramesRemaining: 0
2709
2846
  });
2847
+ var sequenceStyleSchema = {
2848
+ "style.translate": {
2849
+ type: "translate",
2850
+ step: 1,
2851
+ default: "0px 0px",
2852
+ description: "Offset"
2853
+ },
2854
+ "style.scale": {
2855
+ type: "number",
2856
+ min: 0.05,
2857
+ max: 100,
2858
+ step: 0.01,
2859
+ default: 1,
2860
+ description: "Scale"
2861
+ },
2862
+ "style.rotate": {
2863
+ type: "rotation",
2864
+ step: 1,
2865
+ default: "0deg",
2866
+ description: "Rotation"
2867
+ },
2868
+ "style.opacity": {
2869
+ type: "number",
2870
+ min: 0,
2871
+ max: 1,
2872
+ step: 0.01,
2873
+ default: 1,
2874
+ description: "Opacity"
2875
+ }
2876
+ };
2877
+ var sequenceSchema = {
2878
+ layout: {
2879
+ type: "enum",
2880
+ default: "absolute-fill",
2881
+ description: "Layout",
2882
+ variants: {
2883
+ "absolute-fill": sequenceStyleSchema,
2884
+ none: {}
2885
+ }
2886
+ }
2887
+ };
2888
+ var sequenceSchemaDefaultLayoutNone = {
2889
+ ...sequenceSchema,
2890
+ layout: {
2891
+ ...sequenceSchema.layout,
2892
+ default: "none"
2893
+ }
2894
+ };
2710
2895
  var SequenceManager = React12.createContext({
2711
2896
  registerSequence: () => {
2712
2897
  throw new Error("SequenceManagerContext not initialized");
@@ -2828,6 +3013,204 @@ var SequenceManagerProvider = ({ children, visualModeEnabled }) => {
2828
3013
  });
2829
3014
  };
2830
3015
  var ENABLE_V5_BREAKING_CHANGES = false;
3016
+ var flattenActiveSchema = (schema, resolve) => {
3017
+ const out = {};
3018
+ for (const key of Object.keys(schema)) {
3019
+ const field = schema[key];
3020
+ if (field.type === "enum") {
3021
+ out[key] = field;
3022
+ const current = resolve(key) ?? field.default;
3023
+ const variant = field.variants[current];
3024
+ if (variant) {
3025
+ Object.assign(out, flattenActiveSchema(variant, resolve));
3026
+ }
3027
+ } else {
3028
+ out[key] = field;
3029
+ }
3030
+ }
3031
+ return out;
3032
+ };
3033
+ var getFlatSchemaWithAllKeys = (schema) => {
3034
+ const out = {};
3035
+ const addKey = (key, field) => {
3036
+ if (key in out) {
3037
+ throw new Error(`Duplicate key "${key}" in schema: discriminated union variants must not share keys`);
3038
+ }
3039
+ out[key] = field;
3040
+ };
3041
+ for (const key of Object.keys(schema)) {
3042
+ const field = schema[key];
3043
+ addKey(key, field);
3044
+ if (field.type === "enum") {
3045
+ for (const variant of Object.values(field.variants)) {
3046
+ const flatVariant = getFlatSchemaWithAllKeys(variant);
3047
+ for (const variantKey of Object.keys(flatVariant)) {
3048
+ addKey(variantKey, flatVariant[variantKey]);
3049
+ }
3050
+ }
3051
+ }
3052
+ }
3053
+ return out;
3054
+ };
3055
+ var getEffectiveVisualModeValue = ({
3056
+ codeValue,
3057
+ runtimeValue,
3058
+ dragOverrideValue,
3059
+ defaultValue,
3060
+ shouldResortToDefaultValueIfUndefined = false
3061
+ }) => {
3062
+ if (dragOverrideValue !== undefined) {
3063
+ return dragOverrideValue;
3064
+ }
3065
+ if (!codeValue) {
3066
+ return runtimeValue;
3067
+ }
3068
+ if (!codeValue.canUpdate) {
3069
+ return runtimeValue;
3070
+ }
3071
+ if (codeValue.codeValue === undefined && shouldResortToDefaultValueIfUndefined) {
3072
+ return defaultValue;
3073
+ }
3074
+ return codeValue.codeValue;
3075
+ };
3076
+ var findFieldInSchema = (schema, key) => {
3077
+ if (key in schema) {
3078
+ return schema[key];
3079
+ }
3080
+ for (const field of Object.values(schema)) {
3081
+ if (field.type !== "enum") {
3082
+ continue;
3083
+ }
3084
+ for (const variant of Object.values(field.variants)) {
3085
+ const found = findFieldInSchema(variant, key);
3086
+ if (found) {
3087
+ return found;
3088
+ }
3089
+ }
3090
+ }
3091
+ return;
3092
+ };
3093
+ var computeEffectiveSchemaValuesDotNotation = ({
3094
+ schema,
3095
+ currentValue,
3096
+ overrideValues,
3097
+ propStatus
3098
+ }) => {
3099
+ const merged = {};
3100
+ for (const key of Object.keys(currentValue)) {
3101
+ const codeValueStatus = propStatus?.[key] ?? null;
3102
+ merged[key] = getEffectiveVisualModeValue({
3103
+ codeValue: codeValueStatus,
3104
+ runtimeValue: currentValue[key],
3105
+ dragOverrideValue: overrideValues[key],
3106
+ defaultValue: findFieldInSchema(schema, key)?.default,
3107
+ shouldResortToDefaultValueIfUndefined: false
3108
+ });
3109
+ }
3110
+ return merged;
3111
+ };
3112
+ var getNestedValue = (obj, key) => {
3113
+ const parts = key.split(".");
3114
+ let current = obj;
3115
+ for (const part of parts) {
3116
+ if (current === null || current === undefined || typeof current !== "object")
3117
+ return;
3118
+ current = current[part];
3119
+ }
3120
+ return current;
3121
+ };
3122
+ var readValuesFromProps = (props, keys) => {
3123
+ const out = {};
3124
+ for (const key of keys) {
3125
+ out[key] = getNestedValue(props, key);
3126
+ }
3127
+ return out;
3128
+ };
3129
+ var selectActiveKeys = (schema, values) => {
3130
+ return Object.keys(flattenActiveSchema(schema, (key) => values[key]));
3131
+ };
3132
+ var mergeValues = ({
3133
+ props,
3134
+ valuesDotNotation,
3135
+ schemaKeys
3136
+ }) => {
3137
+ const merged = { ...props };
3138
+ for (const key of schemaKeys) {
3139
+ const value = valuesDotNotation[key];
3140
+ const parts = key.split(".");
3141
+ if (parts.length === 1) {
3142
+ merged[key] = value;
3143
+ continue;
3144
+ }
3145
+ let current = merged;
3146
+ for (let i = 0;i < parts.length - 1; i++) {
3147
+ const part = parts[i];
3148
+ if (typeof current[part] === "object" && current[part] !== null) {
3149
+ current[part] = { ...current[part] };
3150
+ } else {
3151
+ current[part] = {};
3152
+ }
3153
+ current = current[part];
3154
+ }
3155
+ current[parts[parts.length - 1]] = value;
3156
+ }
3157
+ return merged;
3158
+ };
3159
+ var wrapInSchema = (Component, schema) => {
3160
+ if (typeof process === "undefined" || !process.env?.EXPERIMENTAL_VISUAL_MODE_ENABLED) {
3161
+ return Component;
3162
+ }
3163
+ const flatSchema = getFlatSchemaWithAllKeys(schema);
3164
+ const flatKeys = Object.keys(flatSchema);
3165
+ const Wrapped = forwardRef2((props, ref) => {
3166
+ const env = useRemotionEnvironment();
3167
+ const { visualModeEnabled, dragOverrides, codeValues } = useContext15(VisualModeOverridesContext);
3168
+ if (!env.isStudio || env.isReadOnlyStudio || env.isRendering || !visualModeEnabled) {
3169
+ return React13.createElement(Component, {
3170
+ ...props,
3171
+ _experimentalControls: null,
3172
+ ref
3173
+ });
3174
+ }
3175
+ if (props._experimentalControls) {
3176
+ return React13.createElement(Component, {
3177
+ ...props,
3178
+ ref
3179
+ });
3180
+ }
3181
+ const [overrideId] = useState5(() => String(Math.random()));
3182
+ const runtimeValues = flatKeys.map((k) => getNestedValue(props, k));
3183
+ const currentRuntimeValueDotNotation = useMemo15(() => readValuesFromProps(props, flatKeys), runtimeValues);
3184
+ const controls = useMemo15(() => {
3185
+ return {
3186
+ schema,
3187
+ currentRuntimeValueDotNotation,
3188
+ overrideId
3189
+ };
3190
+ }, [currentRuntimeValueDotNotation, overrideId]);
3191
+ const valuesDotNotation = useMemo15(() => {
3192
+ return computeEffectiveSchemaValuesDotNotation({
3193
+ schema,
3194
+ currentValue: currentRuntimeValueDotNotation,
3195
+ overrideValues: dragOverrides[overrideId] ?? {},
3196
+ propStatus: codeValues[overrideId]
3197
+ });
3198
+ }, [currentRuntimeValueDotNotation, dragOverrides, overrideId, codeValues]);
3199
+ const activeKeys = selectActiveKeys(schema, valuesDotNotation);
3200
+ const mergedProps = mergeValues({
3201
+ props,
3202
+ valuesDotNotation,
3203
+ schemaKeys: activeKeys
3204
+ });
3205
+ return React13.createElement(Component, {
3206
+ ...mergedProps,
3207
+ _experimentalControls: controls,
3208
+ ref
3209
+ });
3210
+ });
3211
+ Wrapped.displayName = `wrapInSchema(${Component.displayName || Component.name || "Component"})`;
3212
+ return Wrapped;
3213
+ };
2831
3214
  var RegularSequenceRefForwardingFunction = ({
2832
3215
  from = 0,
2833
3216
  durationInFrames = Infinity,
@@ -2846,8 +3229,8 @@ var RegularSequenceRefForwardingFunction = ({
2846
3229
  ...other
2847
3230
  }, ref) => {
2848
3231
  const { layout = "absolute-fill" } = other;
2849
- const [id] = useState5(() => String(Math.random()));
2850
- const parentSequence = useContext15(SequenceContext);
3232
+ const [id] = useState6(() => String(Math.random()));
3233
+ const parentSequence = useContext16(SequenceContext);
2851
3234
  const { rootId } = useTimelineContext();
2852
3235
  const cumulatedFrom = parentSequence ? parentSequence.cumulatedFrom + parentSequence.relativeFrom : 0;
2853
3236
  const nonce = useNonce();
@@ -2855,7 +3238,7 @@ var RegularSequenceRefForwardingFunction = ({
2855
3238
  throw new TypeError(`The layout prop of <Sequence /> expects either "absolute-fill" or "none", but you passed: ${layout}`);
2856
3239
  }
2857
3240
  if (layout === "none" && typeof other.style !== "undefined") {
2858
- throw new TypeError('If layout="none", you may not pass a style.');
3241
+ throw new TypeError('If layout="none", you may not pass a style. Passed: ' + JSON.stringify(other.style));
2859
3242
  }
2860
3243
  if (typeof durationInFrames !== "number") {
2861
3244
  throw new TypeError(`You passed to durationInFrames an argument of type ${typeof durationInFrames}, but it must be a number.`);
@@ -2873,15 +3256,15 @@ var RegularSequenceRefForwardingFunction = ({
2873
3256
  const videoConfig = useVideoConfig();
2874
3257
  const parentSequenceDuration = parentSequence ? Math.min(parentSequence.durationInFrames - from, durationInFrames) : durationInFrames;
2875
3258
  const actualDurationInFrames = Math.max(0, Math.min(videoConfig.durationInFrames - from, parentSequenceDuration));
2876
- const { registerSequence, unregisterSequence } = useContext15(SequenceManager);
2877
- const { hidden } = useContext15(SequenceVisibilityToggleContext);
2878
- const premounting = useMemo15(() => {
3259
+ const { registerSequence, unregisterSequence } = useContext16(SequenceManager);
3260
+ const { hidden } = useContext16(SequenceVisibilityToggleContext);
3261
+ const premounting = useMemo16(() => {
2879
3262
  return parentSequence?.premounting || Boolean(other._remotionInternalIsPremounting);
2880
3263
  }, [other._remotionInternalIsPremounting, parentSequence?.premounting]);
2881
- const postmounting = useMemo15(() => {
3264
+ const postmounting = useMemo16(() => {
2882
3265
  return parentSequence?.postmounting || Boolean(other._remotionInternalIsPostmounting);
2883
3266
  }, [other._remotionInternalIsPostmounting, parentSequence?.postmounting]);
2884
- const contextValue = useMemo15(() => {
3267
+ const contextValue = useMemo16(() => {
2885
3268
  return {
2886
3269
  cumulatedFrom,
2887
3270
  relativeFrom: from,
@@ -2908,7 +3291,7 @@ var RegularSequenceRefForwardingFunction = ({
2908
3291
  premountDisplay,
2909
3292
  postmountDisplay
2910
3293
  ]);
2911
- const timelineClipName = useMemo15(() => {
3294
+ const timelineClipName = useMemo16(() => {
2912
3295
  return name ?? "";
2913
3296
  }, [name]);
2914
3297
  const env = useRemotionEnvironment();
@@ -2991,7 +3374,7 @@ var RegularSequenceRefForwardingFunction = ({
2991
3374
  const endThreshold = Math.ceil(cumulatedFrom + from + durationInFrames - 1);
2992
3375
  const content = absoluteFrame < cumulatedFrom + from ? null : absoluteFrame > endThreshold ? null : children;
2993
3376
  const styleIfThere = other.layout === "none" ? undefined : other.style;
2994
- const defaultStyle = useMemo15(() => {
3377
+ const defaultStyle = useMemo16(() => {
2995
3378
  return {
2996
3379
  flexDirection: undefined,
2997
3380
  ...width ? { width } : {},
@@ -3016,9 +3399,9 @@ var RegularSequenceRefForwardingFunction = ({
3016
3399
  })
3017
3400
  });
3018
3401
  };
3019
- var RegularSequence = forwardRef2(RegularSequenceRefForwardingFunction);
3402
+ var RegularSequence = forwardRef3(RegularSequenceRefForwardingFunction);
3020
3403
  var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3021
- const parentPremountContext = useContext15(PremountContext);
3404
+ const parentPremountContext = useContext16(PremountContext);
3022
3405
  const frame = useCurrentFrame() - parentPremountContext.premountFramesRemaining;
3023
3406
  if (props.layout === "none") {
3024
3407
  throw new Error('`<Sequence>` with `premountFor` and `postmountFor` props does not support layout="none"');
@@ -3038,7 +3421,7 @@ var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3038
3421
  const postmountingActive = frame > endThreshold && frame <= endThreshold + postmountFor;
3039
3422
  const freezeFrame = premountingActive ? from : postmountingActive ? from + durationInFrames - 1 : 0;
3040
3423
  const isFreezingActive = premountingActive || postmountingActive;
3041
- const style = useMemo15(() => {
3424
+ const style = useMemo16(() => {
3042
3425
  return {
3043
3426
  ...passedStyle,
3044
3427
  opacity: premountingActive || postmountingActive ? 0 : 1,
@@ -3056,7 +3439,7 @@ var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3056
3439
  return /* @__PURE__ */ jsx12(Freeze, {
3057
3440
  frame: freezeFrame,
3058
3441
  active: isFreezingActive,
3059
- children: /* @__PURE__ */ jsx12(Sequence, {
3442
+ children: /* @__PURE__ */ jsx12(SequenceInner, {
3060
3443
  ref,
3061
3444
  from,
3062
3445
  durationInFrames,
@@ -3069,7 +3452,7 @@ var PremountedPostmountedSequenceRefForwardingFunction = (props, ref) => {
3069
3452
  })
3070
3453
  });
3071
3454
  };
3072
- var PremountedPostmountedSequence = forwardRef2(PremountedPostmountedSequenceRefForwardingFunction);
3455
+ var PremountedPostmountedSequence = forwardRef3(PremountedPostmountedSequenceRefForwardingFunction);
3073
3456
  var SequenceRefForwardingFunction = (props, ref) => {
3074
3457
  const env = useRemotionEnvironment();
3075
3458
  const { fps } = useVideoConfig();
@@ -3088,7 +3471,8 @@ var SequenceRefForwardingFunction = (props, ref) => {
3088
3471
  ref
3089
3472
  });
3090
3473
  };
3091
- var Sequence = forwardRef2(SequenceRefForwardingFunction);
3474
+ var SequenceInner = forwardRef3(SequenceRefForwardingFunction);
3475
+ var Sequence = wrapInSchema(SequenceInner, sequenceSchema);
3092
3476
  var calcArgs = (fit, frameSize, canvasSize) => {
3093
3477
  switch (fit) {
3094
3478
  case "fill": {
@@ -3184,7 +3568,7 @@ var CanvasRefForwardingFunction = ({ width, height, fit, className, style }, ref
3184
3568
  style
3185
3569
  });
3186
3570
  };
3187
- var Canvas = React14.forwardRef(CanvasRefForwardingFunction);
3571
+ var Canvas = React15.forwardRef(CanvasRefForwardingFunction);
3188
3572
  var CACHE_SIZE = 5;
3189
3573
  var getActualTime = ({
3190
3574
  loopBehavior,
@@ -3331,7 +3715,7 @@ var resolveAnimatedImageSource = (src) => {
3331
3715
  }
3332
3716
  return new URL(src, window.origin).href;
3333
3717
  };
3334
- var AnimatedImage = forwardRef3(({
3718
+ var AnimatedImage = forwardRef4(({
3335
3719
  src,
3336
3720
  width,
3337
3721
  height,
@@ -3350,9 +3734,9 @@ var AnimatedImage = forwardRef3(({
3350
3734
  };
3351
3735
  }, []);
3352
3736
  const resolvedSrc = resolveAnimatedImageSource(src);
3353
- const [imageDecoder, setImageDecoder] = useState6(null);
3737
+ const [imageDecoder, setImageDecoder] = useState7(null);
3354
3738
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
3355
- const [decodeHandle] = useState6(() => delayRender2(`Rendering <AnimatedImage/> with src="${resolvedSrc}"`));
3739
+ const [decodeHandle] = useState7(() => delayRender2(`Rendering <AnimatedImage/> with src="${resolvedSrc}"`));
3356
3740
  const frame = useCurrentFrame();
3357
3741
  const { fps } = useVideoConfig();
3358
3742
  const currentTime = frame / playbackRate / fps;
@@ -3366,7 +3750,7 @@ var AnimatedImage = forwardRef3(({
3366
3750
  }
3367
3751
  return c;
3368
3752
  }, []);
3369
- const [initialLoopBehavior] = useState6(() => loopBehavior);
3753
+ const [initialLoopBehavior] = useState7(() => loopBehavior);
3370
3754
  useEffect6(() => {
3371
3755
  const controller = new AbortController;
3372
3756
  decodeImage({
@@ -3438,158 +3822,6 @@ var AnimatedImage = forwardRef3(({
3438
3822
  ...props
3439
3823
  });
3440
3824
  });
3441
- var getEffectiveVisualModeValue = ({
3442
- codeValue,
3443
- runtimeValue,
3444
- dragOverrideValue,
3445
- defaultValue,
3446
- shouldResortToDefaultValueIfUndefined = false
3447
- }) => {
3448
- if (dragOverrideValue !== undefined) {
3449
- return dragOverrideValue;
3450
- }
3451
- if (!codeValue) {
3452
- return runtimeValue;
3453
- }
3454
- if (!codeValue.canUpdate) {
3455
- return runtimeValue;
3456
- }
3457
- if (codeValue.codeValue === undefined && shouldResortToDefaultValueIfUndefined) {
3458
- return defaultValue;
3459
- }
3460
- return codeValue.codeValue;
3461
- };
3462
- var useSchema = (schema, currentValue) => {
3463
- const env = useRemotionEnvironment();
3464
- const earlyReturn = useMemo16(() => {
3465
- if (!env.isStudio || env.isReadOnlyStudio) {
3466
- return {
3467
- controls: undefined,
3468
- values: currentValue ?? {}
3469
- };
3470
- }
3471
- return;
3472
- }, [env.isStudio, env.isReadOnlyStudio, currentValue]);
3473
- if (earlyReturn) {
3474
- return earlyReturn;
3475
- }
3476
- const [overrideId] = useState7(() => String(Math.random()));
3477
- const {
3478
- visualModeEnabled,
3479
- dragOverrides: overrides,
3480
- codeValues
3481
- } = useContext16(VisualModeOverridesContext);
3482
- const controls = useMemo16(() => {
3483
- if (!visualModeEnabled) {
3484
- return;
3485
- }
3486
- if (schema === null || currentValue === null) {
3487
- return;
3488
- }
3489
- return {
3490
- schema,
3491
- currentValue,
3492
- overrideId
3493
- };
3494
- }, [schema, currentValue, overrideId, visualModeEnabled]);
3495
- return useMemo16(() => {
3496
- if (controls === undefined || currentValue === null || schema === null || !visualModeEnabled) {
3497
- return {
3498
- controls: undefined,
3499
- values: currentValue ?? {}
3500
- };
3501
- }
3502
- const overrideValues = overrides[overrideId] ?? {};
3503
- const propStatus = codeValues[overrideId];
3504
- const currentValueKeys = Object.keys(currentValue);
3505
- const keysToUpdate = [...new Set(currentValueKeys)];
3506
- const merged = {};
3507
- for (const key of keysToUpdate) {
3508
- const codeValueStatus = propStatus?.[key] ?? null;
3509
- merged[key] = getEffectiveVisualModeValue({
3510
- codeValue: codeValueStatus,
3511
- runtimeValue: currentValue[key],
3512
- dragOverrideValue: overrideValues[key],
3513
- defaultValue: schema[key]?.default,
3514
- shouldResortToDefaultValueIfUndefined: false
3515
- });
3516
- }
3517
- return {
3518
- controls,
3519
- values: merged
3520
- };
3521
- }, [
3522
- controls,
3523
- currentValue,
3524
- overrideId,
3525
- overrides,
3526
- codeValues,
3527
- schema,
3528
- visualModeEnabled
3529
- ]);
3530
- };
3531
- var getNestedValue = (obj, key) => {
3532
- const parts = key.split(".");
3533
- let current = obj;
3534
- for (const part of parts) {
3535
- if (current === null || current === undefined || typeof current !== "object")
3536
- return;
3537
- current = current[part];
3538
- }
3539
- return current;
3540
- };
3541
- var mergeValues = (props, values, schemaKeys) => {
3542
- const merged = { ...props };
3543
- for (const key of schemaKeys) {
3544
- const value = values[key];
3545
- const parts = key.split(".");
3546
- if (parts.length === 1) {
3547
- merged[key] = value;
3548
- continue;
3549
- }
3550
- let current = merged;
3551
- for (let i = 0;i < parts.length - 1; i++) {
3552
- const part = parts[i];
3553
- if (typeof current[part] === "object" && current[part] !== null) {
3554
- current[part] = { ...current[part] };
3555
- } else {
3556
- current[part] = {};
3557
- }
3558
- current = current[part];
3559
- }
3560
- current[parts[parts.length - 1]] = value;
3561
- }
3562
- return merged;
3563
- };
3564
- var wrapInSchema = (Component, schema) => {
3565
- const schemaKeys = Object.keys(schema);
3566
- const Wrapped = forwardRef4((props, ref) => {
3567
- const env = useRemotionEnvironment();
3568
- if (!env.isStudio || env.isReadOnlyStudio || env.isRendering || !process.env.EXPERIMENTAL_VISUAL_MODE_ENABLED) {
3569
- return React15.createElement(Component, {
3570
- ...props,
3571
- _experimentalControls: null,
3572
- ref
3573
- });
3574
- }
3575
- const schemaInput = useMemo17(() => {
3576
- const input = {};
3577
- for (const key of schemaKeys) {
3578
- input[key] = getNestedValue(props, key);
3579
- }
3580
- return input;
3581
- }, schemaKeys.map((key) => getNestedValue(props, key)));
3582
- const { controls, values } = useSchema(schema, schemaInput);
3583
- const mergedProps = mergeValues(props, values, schemaKeys);
3584
- return React15.createElement(Component, {
3585
- ...mergedProps,
3586
- _experimentalControls: controls,
3587
- ref
3588
- });
3589
- });
3590
- Wrapped.displayName = `wrapInSchema(${Component.displayName || Component.name || "Component"})`;
3591
- return Wrapped;
3592
- };
3593
3825
  var cachedSupport = null;
3594
3826
  var isHtmlInCanvasSupported = () => {
3595
3827
  if (cachedSupport !== null) {
@@ -3628,40 +3860,10 @@ var defaultOnPaint = ({
3628
3860
  element.style.transform = transform.toString();
3629
3861
  };
3630
3862
  var HtmlInCanvasAncestorContext = createContext15(false);
3631
- var htmlInCanvasSchema = {
3632
- "style.translate": {
3633
- type: "translate",
3634
- step: 1,
3635
- default: "0px 0px",
3636
- description: "Position"
3637
- },
3638
- "style.scale": {
3639
- type: "number",
3640
- min: 0.05,
3641
- max: 100,
3642
- step: 0.01,
3643
- default: 1,
3644
- description: "Scale"
3645
- },
3646
- "style.rotate": {
3647
- type: "rotation",
3648
- step: 1,
3649
- default: "0deg",
3650
- description: "Rotation"
3651
- },
3652
- "style.opacity": {
3653
- type: "number",
3654
- min: 0,
3655
- max: 1,
3656
- step: 0.01,
3657
- default: 1,
3658
- description: "Opacity"
3659
- }
3660
- };
3661
3863
  var HtmlInCanvasInner = forwardRef5(({
3662
3864
  width,
3663
3865
  height,
3664
- _experimentalEffects: experimentalEffects = [],
3866
+ _experimentalEffects: effects = [],
3665
3867
  children,
3666
3868
  onPaint,
3667
3869
  onInit,
@@ -3691,8 +3893,8 @@ var HtmlInCanvasInner = forwardRef5(({
3691
3893
  }, [ref]);
3692
3894
  const [offscreenCanvas] = useState8(() => new OffscreenCanvas(1, 1));
3693
3895
  const chainState = useEffectChainState();
3694
- const effectsRef = useRef9(experimentalEffects);
3695
- effectsRef.current = experimentalEffects;
3896
+ const effectsRef = useRef9(effects);
3897
+ effectsRef.current = effects;
3696
3898
  const frameRef = useRef9(frame);
3697
3899
  frameRef.current = frame;
3698
3900
  const onPaintRef = useRef9(onPaint);
@@ -3806,13 +4008,12 @@ var HtmlInCanvasInner = forwardRef5(({
3806
4008
  continueRender2(handle);
3807
4009
  };
3808
4010
  }, [width, height, continueRender2]);
3809
- const innerStyle = useMemo18(() => {
4011
+ const innerStyle = useMemo17(() => {
3810
4012
  return {
3811
4013
  width,
3812
- height,
3813
- ...style
4014
+ height
3814
4015
  };
3815
- }, [width, height, style]);
4016
+ }, [width, height]);
3816
4017
  if (isInsideAncestorHtmlInCanvas) {
3817
4018
  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.");
3818
4019
  }
@@ -3820,6 +4021,7 @@ var HtmlInCanvasInner = forwardRef5(({
3820
4021
  durationInFrames: resolvedDuration,
3821
4022
  name: "<HtmlInCanvas>",
3822
4023
  _experimentalControls: controls,
4024
+ _experimentalEffects: effects,
3823
4025
  layout: "none",
3824
4026
  ...sequenceProps,
3825
4027
  children: /* @__PURE__ */ jsx15(HtmlInCanvasAncestorContext.Provider, {
@@ -3828,6 +4030,7 @@ var HtmlInCanvasInner = forwardRef5(({
3828
4030
  ref: setLayoutCanvasRef,
3829
4031
  width,
3830
4032
  height,
4033
+ style,
3831
4034
  children: /* @__PURE__ */ jsx15("div", {
3832
4035
  ref: divRef,
3833
4036
  style: innerStyle,
@@ -3838,7 +4041,7 @@ var HtmlInCanvasInner = forwardRef5(({
3838
4041
  });
3839
4042
  });
3840
4043
  HtmlInCanvasInner.displayName = "HtmlInCanvas";
3841
- var HtmlInCanvasWrapped = wrapInSchema(HtmlInCanvasInner, htmlInCanvasSchema);
4044
+ var HtmlInCanvasWrapped = wrapInSchema(HtmlInCanvasInner, sequenceStyleSchema);
3842
4045
  var HtmlInCanvas = Object.assign(HtmlInCanvasWrapped, {
3843
4046
  isSupported: isHtmlInCanvasSupported
3844
4047
  });
@@ -3916,7 +4119,7 @@ var RenderAssetManagerProvider = ({ children, collectAssets }) => {
3916
4119
  };
3917
4120
  }
3918
4121
  }, []);
3919
- const contextValue = useMemo19(() => {
4122
+ const contextValue = useMemo18(() => {
3920
4123
  return {
3921
4124
  registerRenderAsset,
3922
4125
  unregisterRenderAsset,
@@ -4045,14 +4248,14 @@ var Loop = ({
4045
4248
  const iteration = Math.floor(currentFrame / durationInFrames);
4046
4249
  const start = iteration * durationInFrames;
4047
4250
  const from = Math.min(start, maxFrame);
4048
- const loopDisplay = useMemo20(() => {
4251
+ const loopDisplay = useMemo19(() => {
4049
4252
  return {
4050
4253
  numberOfTimes: Math.min(compDuration / durationInFrames, times),
4051
4254
  startOffset: -from,
4052
4255
  durationInFrames
4053
4256
  };
4054
4257
  }, [compDuration, durationInFrames, from, times]);
4055
- const loopContext = useMemo20(() => {
4258
+ const loopContext = useMemo19(() => {
4056
4259
  return {
4057
4260
  iteration: Math.floor(currentFrame / durationInFrames),
4058
4261
  durationInFrames
@@ -4411,7 +4614,7 @@ var DurationsContext = createContext19({
4411
4614
  });
4412
4615
  var DurationsContextProvider = ({ children }) => {
4413
4616
  const [durations, setDurations] = useReducer(durationReducer, {});
4414
- const value = useMemo21(() => {
4617
+ const value = useMemo20(() => {
4415
4618
  return {
4416
4619
  durations,
4417
4620
  setDurations
@@ -4545,7 +4748,7 @@ var useSingletonAudioContext = ({
4545
4748
  audioEnabled
4546
4749
  }) => {
4547
4750
  const env = useRemotionEnvironment();
4548
- return useMemo22(() => {
4751
+ const context = useMemo21(() => {
4549
4752
  if (env.isRendering) {
4550
4753
  return null;
4551
4754
  }
@@ -4562,11 +4765,14 @@ var useSingletonAudioContext = ({
4562
4765
  });
4563
4766
  const gainNode = audioContext.createGain();
4564
4767
  gainNode.connect(audioContext.destination);
4768
+ Log.trace({ logLevel, tag: "audio" }, "Creating new audio context");
4769
+ audioContext.suspend();
4565
4770
  return {
4566
4771
  audioContext,
4567
4772
  gainNode
4568
4773
  };
4569
4774
  }, [logLevel, latencyHint, env.isRendering, audioEnabled]);
4775
+ return context;
4570
4776
  };
4571
4777
  var waitUntilActuallyResumed = (audioContext, logLevel) => {
4572
4778
  return new Promise((resolve) => {
@@ -4625,9 +4831,9 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4625
4831
  });
4626
4832
  const audioContextIsPlayingEventually = useRef11(false);
4627
4833
  const isResuming = useRef11(null);
4628
- const audioSyncAnchor = useMemo23(() => ({ value: 0 }), []);
4834
+ const audioSyncAnchor = useMemo22(() => ({ value: 0 }), []);
4629
4835
  const audioSyncAnchorListeners = useRef11([]);
4630
- const audioSyncAnchorEmitter = useMemo23(() => {
4836
+ const audioSyncAnchorEmitter = useMemo22(() => {
4631
4837
  return {
4632
4838
  dispatch: (event) => {
4633
4839
  audioSyncAnchorListeners.current.forEach((l) => l(event));
@@ -4647,7 +4853,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4647
4853
  const unscheduleAudioNode = useCallback9((node) => {
4648
4854
  nodesToResume.current.delete(node);
4649
4855
  }, []);
4650
- const scheduleAudioNode = useMemo23(() => {
4856
+ const scheduleAudioNode = useMemo22(() => {
4651
4857
  return ({
4652
4858
  node,
4653
4859
  mediaTimestamp,
@@ -4710,12 +4916,11 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4710
4916
  isResuming.current = null;
4711
4917
  });
4712
4918
  ctxAndGain.gainNode.gain.cancelScheduledValues(ctxAndGain.audioContext.currentTime);
4713
- ctxAndGain.gainNode?.gain.setValueAtTime(0, ctxAndGain.audioContext.currentTime);
4714
- ctxAndGain.gainNode?.gain.linearRampToValueAtTime(1, ctxAndGain.audioContext.currentTime + 0.03);
4715
- return resumePromise.then(() => {
4716
- nodesToResume.current.forEach((r, node) => node.start(r.scheduledTime, r.offset, r.duration));
4717
- nodesToResume.current.clear();
4718
- }).catch(() => {});
4919
+ ctxAndGain.gainNode.gain.setValueAtTime(0, ctxAndGain.audioContext.currentTime);
4920
+ ctxAndGain.gainNode.gain.linearRampToValueAtTime(1, ctxAndGain.audioContext.currentTime + 0.03);
4921
+ nodesToResume.current.forEach((r, node) => node.start(r.scheduledTime, r.offset, r.duration));
4922
+ nodesToResume.current.clear();
4923
+ return resumePromise.catch(() => {});
4719
4924
  }, [ctxAndGain, logLevel]);
4720
4925
  const getIsResumingAudioContext = useCallback9(() => {
4721
4926
  return isResuming.current;
@@ -4730,7 +4935,7 @@ var SharedAudioContextProvider = ({ children, audioLatencyHint, audioEnabled })
4730
4935
  audioContextIsPlayingEventually.current = false;
4731
4936
  ctxAndGain.audioContext.suspend();
4732
4937
  }, [ctxAndGain]);
4733
- const audioContextValue = useMemo23(() => {
4938
+ const audioContextValue = useMemo22(() => {
4734
4939
  return {
4735
4940
  audioContext: ctxAndGain?.audioContext ?? null,
4736
4941
  gainNode: ctxAndGain?.gainNode ?? null,
@@ -4769,7 +4974,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
4769
4974
  const audioCtx = useContext20(SharedAudioContext);
4770
4975
  const audioContext = audioCtx?.audioContext ?? null;
4771
4976
  const resume = audioCtx?.resume;
4772
- const refs = useMemo23(() => {
4977
+ const refs = useMemo22(() => {
4773
4978
  return new Array(numberOfAudioTags).fill(true).map(() => {
4774
4979
  const ref = createRef2();
4775
4980
  return {
@@ -4906,7 +5111,7 @@ var SharedAudioTagsContextProvider = ({ children, numberOfAudioTags }) => {
4906
5111
  });
4907
5112
  resume?.();
4908
5113
  }, [logLevel, mountTime, refs, env.isPlayer, resume]);
4909
- const audioTagsValue = useMemo23(() => {
5114
+ const audioTagsValue = useMemo22(() => {
4910
5115
  return {
4911
5116
  registerAudio,
4912
5117
  unregisterAudio,
@@ -5285,7 +5490,7 @@ var useBasicMediaInTimeline = ({
5285
5490
  parentSequenceDurationInFrames: parentSequence?.durationInFrames ?? null,
5286
5491
  loop
5287
5492
  });
5288
- const volumes = useMemo24(() => {
5493
+ const volumes = useMemo23(() => {
5289
5494
  if (typeof volume === "number") {
5290
5495
  return volume;
5291
5496
  }
@@ -5306,7 +5511,7 @@ var useBasicMediaInTimeline = ({
5306
5511
  const nonce = useNonce();
5307
5512
  const { rootId } = useTimelineContext();
5308
5513
  const startMediaFrom = 0 - mediaStartsAt + (trimBefore ?? 0);
5309
- const memoizedResult = useMemo24(() => {
5514
+ const memoizedResult = useMemo23(() => {
5310
5515
  return {
5311
5516
  volumes,
5312
5517
  duration,
@@ -5575,7 +5780,7 @@ var useBufferManager = (logLevel, mountTime) => {
5575
5780
  }
5576
5781
  }, [blocks]);
5577
5782
  }
5578
- return useMemo25(() => {
5783
+ return useMemo24(() => {
5579
5784
  return { addBlock, listenForBuffering, listenForResume, buffering };
5580
5785
  }, [addBlock, buffering, listenForBuffering, listenForResume]);
5581
5786
  };
@@ -5613,7 +5818,7 @@ var useIsPlayerBuffering = (bufferManager) => {
5613
5818
  var useBufferState = () => {
5614
5819
  const buffer = useContext25(BufferingContextReact);
5615
5820
  const addBlock = buffer ? buffer.addBlock : null;
5616
- return useMemo26(() => ({
5821
+ return useMemo25(() => ({
5617
5822
  delayPlayback: () => {
5618
5823
  if (!addBlock) {
5619
5824
  throw new Error("Tried to enable the buffering state, but a Remotion context was not found. This API can only be called in a component that was passed to the Remotion Player or a <Composition>. Or you might have experienced a version mismatch - run `npx remotion versions` and ensure all packages have the same version. This error is thrown by the buffer state https://remotion.dev/docs/player/buffer-state");
@@ -5710,7 +5915,7 @@ var useBufferUntilFirstFrame = ({
5710
5915
  onVariableFpsVideoDetected,
5711
5916
  pauseWhenBuffering
5712
5917
  ]);
5713
- return useMemo27(() => {
5918
+ return useMemo26(() => {
5714
5919
  return {
5715
5920
  isBuffering: () => bufferingRef.current,
5716
5921
  bufferUntilFirstFrame
@@ -6112,7 +6317,7 @@ var useMediaPlayback = ({
6112
6317
  isPostmounting,
6113
6318
  onAutoPlayError
6114
6319
  }) => {
6115
- const { playbackRate: globalPlaybackRate } = useTimelineContext();
6320
+ const { playbackRate: globalPlaybackRate } = usePlaybackRate();
6116
6321
  const frame = useCurrentFrame();
6117
6322
  const absoluteFrame = useTimelinePosition();
6118
6323
  const [playing] = usePlayingState();
@@ -6406,14 +6611,14 @@ var SetMediaVolumeContext = createContext21({
6406
6611
  var useMediaVolumeState = () => {
6407
6612
  const { mediaVolume } = useContext27(MediaVolumeContext);
6408
6613
  const { setMediaVolume } = useContext27(SetMediaVolumeContext);
6409
- return useMemo28(() => {
6614
+ return useMemo27(() => {
6410
6615
  return [mediaVolume, setMediaVolume];
6411
6616
  }, [mediaVolume, setMediaVolume]);
6412
6617
  };
6413
6618
  var useMediaMutedState = () => {
6414
6619
  const { mediaMuted } = useContext27(MediaVolumeContext);
6415
6620
  const { setMediaMuted } = useContext27(SetMediaVolumeContext);
6416
- return useMemo28(() => {
6621
+ return useMemo27(() => {
6417
6622
  return [mediaMuted, setMediaMuted];
6418
6623
  }, [mediaMuted, setMediaMuted]);
6419
6624
  };
@@ -6481,7 +6686,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
6481
6686
  requestsVideoFrame: false,
6482
6687
  isClientSideRendering: false
6483
6688
  });
6484
- const propsToPass = useMemo29(() => {
6689
+ const propsToPass = useMemo28(() => {
6485
6690
  return {
6486
6691
  muted: muted || mediaMuted || isSequenceHidden || userPreferredVolume <= 0,
6487
6692
  src: preloadedSrc,
@@ -6499,7 +6704,7 @@ var AudioForDevelopmentForwardRefFunction = (props, ref) => {
6499
6704
  userPreferredVolume,
6500
6705
  crossOriginValue
6501
6706
  ]);
6502
- const id = useMemo29(() => `audio-${random(src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}-muted:${props.muted}-loop:${props.loop}`, [
6707
+ const id = useMemo28(() => `audio-${random(src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}-muted:${props.muted}-loop:${props.loop}`, [
6503
6708
  src,
6504
6709
  sequenceContext?.relativeFrom,
6505
6710
  sequenceContext?.cumulatedFrom,
@@ -6625,7 +6830,7 @@ var AudioForRenderingRefForwardingFunction = (props, ref) => {
6625
6830
  const sequenceContext = useContext29(SequenceContext);
6626
6831
  const { registerRenderAsset, unregisterRenderAsset } = useContext29(RenderAssetManager);
6627
6832
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
6628
- const id = useMemo30(() => `audio-${random(props.src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}`, [
6833
+ const id = useMemo29(() => `audio-${random(props.src ?? "")}-${sequenceContext?.relativeFrom}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.durationInFrames}`, [
6629
6834
  props.src,
6630
6835
  sequenceContext?.relativeFrom,
6631
6836
  sequenceContext?.cumulatedFrom,
@@ -6890,36 +7095,6 @@ function truncateSrcForLabel(src) {
6890
7095
  }
6891
7096
  return src;
6892
7097
  }
6893
- var imgSchema = {
6894
- "style.translate": {
6895
- type: "translate",
6896
- step: 1,
6897
- default: "0px 0px",
6898
- description: "Position"
6899
- },
6900
- "style.scale": {
6901
- type: "number",
6902
- min: 0.05,
6903
- max: 100,
6904
- step: 0.01,
6905
- default: 1,
6906
- description: "Scale"
6907
- },
6908
- "style.rotate": {
6909
- type: "rotation",
6910
- step: 1,
6911
- default: "0deg",
6912
- description: "Rotation"
6913
- },
6914
- "style.opacity": {
6915
- type: "number",
6916
- min: 0,
6917
- max: 1,
6918
- step: 0.01,
6919
- default: 1,
6920
- description: "Opacity"
6921
- }
6922
- };
6923
7098
  var ImgInner = ({
6924
7099
  onError,
6925
7100
  maxRetries = 2,
@@ -7083,7 +7258,7 @@ var ImgInner = ({
7083
7258
  decoding: "sync"
7084
7259
  });
7085
7260
  };
7086
- var Img = wrapInSchema(ImgInner, imgSchema);
7261
+ var Img = wrapInSchema(ImgInner, sequenceStyleSchema);
7087
7262
  addSequenceStackTraces(Img);
7088
7263
  var compositionsRef = React28.createRef();
7089
7264
  var CompositionManagerProvider = ({
@@ -7139,7 +7314,7 @@ var CompositionManagerProvider = ({
7139
7314
  getCompositions: () => currentcompositionsRef.current
7140
7315
  };
7141
7316
  }, []);
7142
- const compositionManagerSetters = useMemo31(() => {
7317
+ const compositionManagerSetters = useMemo30(() => {
7143
7318
  return {
7144
7319
  registerComposition,
7145
7320
  unregisterComposition,
@@ -7155,7 +7330,7 @@ var CompositionManagerProvider = ({
7155
7330
  unregisterFolder,
7156
7331
  onlyRenderComposition
7157
7332
  ]);
7158
- const compositionManagerContextValue = useMemo31(() => {
7333
+ const compositionManagerContextValue = useMemo30(() => {
7159
7334
  return {
7160
7335
  compositions,
7161
7336
  folders,
@@ -7285,7 +7460,7 @@ var MediaEnabledProvider = ({
7285
7460
  videoEnabled,
7286
7461
  audioEnabled
7287
7462
  }) => {
7288
- const value = useMemo32(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
7463
+ const value = useMemo31(() => ({ videoEnabled, audioEnabled }), [videoEnabled, audioEnabled]);
7289
7464
  return /* @__PURE__ */ jsx28(MediaEnabledContext.Provider, {
7290
7465
  value,
7291
7466
  children
@@ -7301,13 +7476,13 @@ var RemotionRootContexts = ({
7301
7476
  frameState,
7302
7477
  visualModeEnabled
7303
7478
  }) => {
7304
- const nonceContext = useMemo33(() => {
7479
+ const nonceContext = useMemo32(() => {
7305
7480
  let counter = 0;
7306
7481
  return {
7307
7482
  getNonce: () => counter++
7308
7483
  };
7309
7484
  }, []);
7310
- const logging = useMemo33(() => {
7485
+ const logging = useMemo32(() => {
7311
7486
  return { logLevel, mountTime: Date.now() };
7312
7487
  }, [logLevel]);
7313
7488
  return /* @__PURE__ */ jsx29(LogLevelContext.Provider, {
@@ -7609,7 +7784,7 @@ var OffthreadVideoForRendering = ({
7609
7784
  if (!src) {
7610
7785
  throw new TypeError("No `src` was passed to <OffthreadVideo>.");
7611
7786
  }
7612
- const id = useMemo34(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
7787
+ const id = useMemo33(() => `offthreadvideo-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
7613
7788
  src,
7614
7789
  sequenceContext?.cumulatedFrom,
7615
7790
  sequenceContext?.relativeFrom,
@@ -7664,14 +7839,14 @@ var OffthreadVideoForRendering = ({
7664
7839
  sequenceContext?.relativeFrom,
7665
7840
  audioStreamIndex
7666
7841
  ]);
7667
- const currentTime = useMemo34(() => {
7842
+ const currentTime = useMemo33(() => {
7668
7843
  return getExpectedMediaFrameUncorrected({
7669
7844
  frame,
7670
7845
  playbackRate: playbackRate || 1,
7671
7846
  startFrom: -mediaStartsAt
7672
7847
  }) / videoConfig.fps;
7673
7848
  }, [frame, mediaStartsAt, playbackRate, videoConfig.fps]);
7674
- const actualSrc = useMemo34(() => {
7849
+ const actualSrc = useMemo33(() => {
7675
7850
  return getOffthreadVideoSource({
7676
7851
  src,
7677
7852
  currentTime,
@@ -7759,7 +7934,7 @@ var OffthreadVideoForRendering = ({
7759
7934
  cancelRender("Failed to load image with src " + imageSrc);
7760
7935
  }
7761
7936
  }, [imageSrc, onError]);
7762
- const className = useMemo34(() => {
7937
+ const className = useMemo33(() => {
7763
7938
  return [OBJECTFIT_CONTAIN_CLASS_NAME, props2.className].filter(truthy).join(" ");
7764
7939
  }, [props2.className]);
7765
7940
  const onImageFrame = useCallback17((img) => {
@@ -7822,7 +7997,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
7822
7997
  throw new Error("SharedAudioContext not found");
7823
7998
  }
7824
7999
  const videoRef = useRef22(null);
7825
- const sharedSource = useMemo35(() => {
8000
+ const sharedSource = useMemo34(() => {
7826
8001
  if (!context.audioContext) {
7827
8002
  return null;
7828
8003
  }
@@ -8020,7 +8195,7 @@ var VideoForDevelopmentRefForwardingFunction = (props2, ref) => {
8020
8195
  current.preload = "auto";
8021
8196
  }
8022
8197
  }, []);
8023
- const actualStyle = useMemo35(() => {
8198
+ const actualStyle = useMemo34(() => {
8024
8199
  return {
8025
8200
  ...style,
8026
8201
  opacity: isSequenceHidden ? 0 : style?.opacity ?? 1
@@ -8214,7 +8389,7 @@ function useRemotionContexts() {
8214
8389
  const sequenceManagerContext = React36.useContext(SequenceManager);
8215
8390
  const bufferManagerContext = React36.useContext(BufferingContextReact);
8216
8391
  const logLevelContext = React36.useContext(LogLevelContext);
8217
- return useMemo36(() => ({
8392
+ return useMemo35(() => ({
8218
8393
  compositionManagerCtx,
8219
8394
  timelineContext,
8220
8395
  setTimelineContext,
@@ -8302,8 +8477,11 @@ var Internals = {
8302
8477
  SequenceManager,
8303
8478
  SequenceStackTracesUpdateContext,
8304
8479
  SequenceVisibilityToggleContext,
8305
- useSchema,
8306
8480
  wrapInSchema,
8481
+ sequenceSchema,
8482
+ sequenceStyleSchema,
8483
+ flattenActiveSchema,
8484
+ getFlatSchemaWithAllKeys,
8307
8485
  useSequenceControlOverride,
8308
8486
  RemotionRootContexts,
8309
8487
  CompositionManagerProvider,
@@ -8353,6 +8531,7 @@ var Internals = {
8353
8531
  REMOTION_STUDIO_CONTAINER_ELEMENT,
8354
8532
  RenderAssetManager,
8355
8533
  persistCurrentFrame,
8534
+ usePlaybackRate,
8356
8535
  useTimelineContext,
8357
8536
  useTimelineSetFrame,
8358
8537
  isIosSafari,
@@ -8386,6 +8565,7 @@ var Internals = {
8386
8565
  TimelinePosition: exports_timeline_position_state,
8387
8566
  DelayRenderContextType,
8388
8567
  TimelineContext,
8568
+ PlaybackRateContext,
8389
8569
  AbsoluteTimeContext,
8390
8570
  RenderAssetManagerProvider,
8391
8571
  getEffectiveVisualModeValue,
@@ -8394,7 +8574,8 @@ var Internals = {
8394
8574
  runEffectChain,
8395
8575
  useMemoizedEffects,
8396
8576
  defineEffect,
8397
- createDescriptor
8577
+ createDescriptor,
8578
+ computeEffectiveSchemaValuesDotNotation
8398
8579
  };
8399
8580
  var NUMBER = "[-+]?\\d*\\.?\\d+";
8400
8581
  var PERCENTAGE = NUMBER + "%";
@@ -8458,8 +8639,8 @@ var SeriesSequenceRefForwardingFunction = ({ children }, _ref) => {
8458
8639
  });
8459
8640
  };
8460
8641
  var SeriesSequence = forwardRef11(SeriesSequenceRefForwardingFunction);
8461
- var Series = (props2) => {
8462
- const childrenValue = useMemo37(() => {
8642
+ var SeriesInner = (props2) => {
8643
+ const childrenValue = useMemo36(() => {
8463
8644
  let startFrame = 0;
8464
8645
  const flattenedChildren = flattenChildren(props2.children);
8465
8646
  return Children.map(flattenedChildren, (child, i) => {
@@ -8522,7 +8703,9 @@ var Series = (props2) => {
8522
8703
  })
8523
8704
  });
8524
8705
  };
8525
- Series.Sequence = SeriesSequence;
8706
+ var Series = Object.assign(wrapInSchema(SeriesInner, sequenceSchemaDefaultLayoutNone), {
8707
+ Sequence: SeriesSequence
8708
+ });
8526
8709
  addSequenceStackTraces(Series);
8527
8710
  addSequenceStackTraces(SeriesSequence);
8528
8711
  var validateSpringDuration = (dur) => {
@@ -8997,7 +9180,7 @@ var VideoForRenderingForwardFunction = ({
8997
9180
  const mountTime = useMountTime();
8998
9181
  const { delayRender: delayRender2, continueRender: continueRender2 } = useDelayRender();
8999
9182
  const { registerRenderAsset, unregisterRenderAsset } = useContext36(RenderAssetManager);
9000
- const id = useMemo38(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
9183
+ const id = useMemo37(() => `video-${random(props2.src ?? "")}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
9001
9184
  props2.src,
9002
9185
  sequenceContext?.cumulatedFrom,
9003
9186
  sequenceContext?.relativeFrom,
@@ -9473,6 +9656,20 @@ var TeamCardsLayout = () => {
9473
9656
 
9474
9657
  // src/components/experts/experts-icons.tsx
9475
9658
  import { jsx as jsx40 } from "react/jsx-runtime";
9659
+ var DiscordLogo = () => {
9660
+ return /* @__PURE__ */ jsx40("svg", {
9661
+ xmlns: "http://www.w3.org/2000/svg",
9662
+ viewBox: "0 0 24 24",
9663
+ style: {
9664
+ width: 30,
9665
+ marginRight: 10
9666
+ },
9667
+ children: /* @__PURE__ */ jsx40("path", {
9668
+ fill: "white",
9669
+ d: "M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0 12.64 12.64 0 0 0-.617-1.25.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057 19.9 19.9 0 0 0 5.993 3.03.078.078 0 0 0 .084-.028c.462-.63.874-1.295 1.226-1.994a.076.076 0 0 0-.041-.106 13.107 13.107 0 0 1-1.872-.892.077.077 0 0 1-.008-.128 10.2 10.2 0 0 0 .372-.292.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127 12.299 12.299 0 0 1-1.873.892.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028 19.839 19.839 0 0 0 6.002-3.03.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.956-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419 0-1.333.955-2.419 2.157-2.419 1.21 0 2.176 1.096 2.157 2.42 0 1.333-.946 2.418-2.157 2.418z"
9670
+ })
9671
+ });
9672
+ };
9476
9673
  var PersonalWebsite = () => {
9477
9674
  return /* @__PURE__ */ jsx40("svg", {
9478
9675
  xmlns: "http://www.w3.org/2000/svg",
@@ -9626,6 +9823,13 @@ var ExpertCard = ({ expert, Link }) => {
9626
9823
  target: "_blank",
9627
9824
  href: `mailto:${expert.email}`,
9628
9825
  children: /* @__PURE__ */ jsx41(EmailLogo, {})
9826
+ }) : null,
9827
+ expert.discord ? /* @__PURE__ */ jsx41("a", {
9828
+ className: "no-underline text-inherit",
9829
+ target: "_blank",
9830
+ href: `https://discord.com/users/${expert.discord.userId}`,
9831
+ title: `@${expert.discord.username} on Discord`,
9832
+ children: /* @__PURE__ */ jsx41(DiscordLogo, {})
9629
9833
  }) : null
9630
9834
  ]
9631
9835
  })
@@ -9635,7 +9839,7 @@ var ExpertCard = ({ expert, Link }) => {
9635
9839
  });
9636
9840
  };
9637
9841
  var ExpertsPageContent = ({ Link }) => {
9638
- const expertsInRandomOrder = useMemo39(() => {
9842
+ const expertsInRandomOrder = useMemo38(() => {
9639
9843
  if (typeof window === "undefined") {
9640
9844
  return [];
9641
9845
  }
@@ -11078,7 +11282,7 @@ var getDefaultConfig = () => {
11078
11282
  var twMerge = /* @__PURE__ */ createTailwindMerge(getDefaultConfig);
11079
11283
 
11080
11284
  // ../design/dist/esm/index.mjs
11081
- import React33, { useEffect as useEffect20, useMemo as useMemo42, useState as useState23 } from "react";
11285
+ import React33, { useEffect as useEffect20, useMemo as useMemo41, useState as useState23 } from "react";
11082
11286
 
11083
11287
  // ../paths/dist/esm/index.mjs
11084
11288
  var cutLInstruction = ({
@@ -13844,7 +14048,7 @@ var PathInternals = {
13844
14048
  };
13845
14049
 
13846
14050
  // ../shapes/dist/esm/index.mjs
13847
- import React3, { useMemo as useMemo41 } from "react";
14051
+ import React3, { useMemo as useMemo40 } from "react";
13848
14052
  import { version } from "react-dom";
13849
14053
  import { jsx as jsx42, jsxs as jsxs5 } from "react/jsx-runtime";
13850
14054
  import { jsx as jsx210 } from "react/jsx-runtime";
@@ -13875,13 +14079,13 @@ var RenderSvg = ({
13875
14079
  instructions,
13876
14080
  ...props
13877
14081
  }) => {
13878
- const actualStyle = useMemo41(() => {
14082
+ const actualStyle = useMemo40(() => {
13879
14083
  return {
13880
14084
  overflow: "visible",
13881
14085
  ...style ?? {}
13882
14086
  };
13883
14087
  }, [style]);
13884
- const actualPathStyle = useMemo41(() => {
14088
+ const actualPathStyle = useMemo40(() => {
13885
14089
  return {
13886
14090
  transformBox: "fill-box",
13887
14091
  ...pathStyle ?? {}
@@ -15442,10 +15646,10 @@ import { jsx as jsx152 } from "react/jsx-runtime";
15442
15646
  import * as React122 from "react";
15443
15647
  import { jsx as jsx162 } from "react/jsx-runtime";
15444
15648
  import * as React16 from "react";
15445
- import * as React13 from "react";
15649
+ import * as React132 from "react";
15446
15650
  import * as ReactDOM from "react-dom";
15447
15651
  import { jsx as jsx172 } from "react/jsx-runtime";
15448
- import * as React142 from "react";
15652
+ import * as React14 from "react";
15449
15653
  import * as React152 from "react";
15450
15654
  import { jsx as jsx182 } from "react/jsx-runtime";
15451
15655
  import * as React172 from "react";
@@ -15672,7 +15876,7 @@ var useHoverTransforms = (ref, disabled) => {
15672
15876
  progress: 0,
15673
15877
  isActive: false
15674
15878
  });
15675
- const eventTarget = useMemo42(() => new EventTarget, []);
15879
+ const eventTarget = useMemo41(() => new EventTarget, []);
15676
15880
  useEffect20(() => {
15677
15881
  if (disabled) {
15678
15882
  eventTarget.dispatchEvent(new Event("disabled"));
@@ -16484,7 +16688,7 @@ var NODES = [
16484
16688
  "ul"
16485
16689
  ];
16486
16690
  var Primitive = NODES.reduce((primitive, node) => {
16487
- const Node2 = React13.forwardRef((props, forwardedRef) => {
16691
+ const Node2 = React132.forwardRef((props, forwardedRef) => {
16488
16692
  const { asChild, ...primitiveProps } = props;
16489
16693
  const Comp = asChild ? Slot2 : node;
16490
16694
  if (typeof window !== "undefined") {
@@ -16500,11 +16704,11 @@ function dispatchDiscreteCustomEvent(target, event) {
16500
16704
  ReactDOM.flushSync(() => target.dispatchEvent(event));
16501
16705
  }
16502
16706
  function useCallbackRef(callback) {
16503
- const callbackRef = React142.useRef(callback);
16504
- React142.useEffect(() => {
16707
+ const callbackRef = React14.useRef(callback);
16708
+ React14.useEffect(() => {
16505
16709
  callbackRef.current = callback;
16506
16710
  });
16507
- return React142.useMemo(() => (...args) => callbackRef.current?.(...args), []);
16711
+ return React14.useMemo(() => (...args) => callbackRef.current?.(...args), []);
16508
16712
  }
16509
16713
  function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {
16510
16714
  const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);
@@ -22119,7 +22323,7 @@ var Triangle2 = (props) => {
22119
22323
  };
22120
22324
 
22121
22325
  // src/components/homepage/FreePricing.tsx
22122
- import React53, { useCallback as useCallback33, useMemo as useMemo51 } from "react";
22326
+ import React53, { useCallback as useCallback33, useMemo as useMemo50 } from "react";
22123
22327
 
22124
22328
  // ../../node_modules/.bun/tailwind-merge@2.5.2/node_modules/tailwind-merge/dist/bundle-mjs.mjs
22125
22329
  var CLASS_PART_SEPARATOR2 = "-";
@@ -23776,14 +23980,14 @@ var CompanyPricing = () => {
23776
23980
  }, []);
23777
23981
  const creatorsPrice = creatorsSelected ? devSeatCount * SEAT_PRICE : 0;
23778
23982
  const automatorsPrice = automatorsSelected ? Math.ceil(cloudRenders / 1000) * RENDER_UNIT_PRICE : 0;
23779
- const totalPrice = useMemo51(() => {
23983
+ const totalPrice = useMemo50(() => {
23780
23984
  const basePrice = creatorsPrice + automatorsPrice;
23781
23985
  if (automatorsSelected) {
23782
23986
  return Math.max(100, basePrice);
23783
23987
  }
23784
23988
  return basePrice;
23785
23989
  }, [creatorsPrice, automatorsPrice, automatorsSelected]);
23786
- const totalPriceString = useMemo51(() => {
23990
+ const totalPriceString = useMemo50(() => {
23787
23991
  return formatPrice(totalPrice);
23788
23992
  }, [formatPrice, totalPrice]);
23789
23993
  const showMinimumMessage = automatorsSelected && creatorsPrice + automatorsPrice < 100;
@@ -24496,7 +24700,7 @@ import { useEffect as useEffect24, useState as useState24 } from "react";
24496
24700
  import { useLayoutEffect as useLayoutEffect23 } from "react";
24497
24701
  import { useContext as useContext45, useEffect as useEffect52, useRef as useRef52 } from "react";
24498
24702
  import { useEffect as useEffect310, useRef as useRef310 } from "react";
24499
- import { useCallback as useCallback24, useContext as useContext39, useMemo as useMemo52, useRef as useRef26, useState as useState310 } from "react";
24703
+ import { useCallback as useCallback24, useContext as useContext39, useMemo as useMemo51, useRef as useRef26, useState as useState310 } from "react";
24500
24704
  import { useEffect as useEffect43, useRef as useRef43 } from "react";
24501
24705
  import { useCallback as useCallback35, useEffect as useEffect62, useMemo as useMemo212, useState as useState42 } from "react";
24502
24706
  import {
@@ -24526,10 +24730,10 @@ import { jsx as jsx55 } from "react/jsx-runtime";
24526
24730
  import { useCallback as useCallback82, useEffect as useEffect112, useMemo as useMemo92, useRef as useRef92, useState as useState102 } from "react";
24527
24731
  import { jsx as jsx64 } from "react/jsx-runtime";
24528
24732
  import { useCallback as useCallback52, useMemo as useMemo410, useRef as useRef62, useState as useState62 } from "react";
24529
- import React54, { useCallback as useCallback42, useMemo as useMemo310, useState as useState52 } from "react";
24733
+ import React54, { useCallback as useCallback42, useMemo as useMemo39, useState as useState52 } from "react";
24530
24734
  import { jsx as jsx74, jsxs as jsxs33 } from "react/jsx-runtime";
24531
24735
  import { jsx as jsx84, jsxs as jsxs43 } from "react/jsx-runtime";
24532
- import { useCallback as useCallback62, useEffect as useEffect92, useMemo as useMemo53, useState as useState82 } from "react";
24736
+ import { useCallback as useCallback62, useEffect as useEffect92, useMemo as useMemo52, useState as useState82 } from "react";
24533
24737
  import { useEffect as useEffect83, useRef as useRef72, useState as useState72 } from "react";
24534
24738
  import { jsx as jsx94, jsxs as jsxs53 } from "react/jsx-runtime";
24535
24739
  import { useCallback as useCallback72, useEffect as useEffect102, useMemo as useMemo62, useRef as useRef82, useState as useState92 } from "react";
@@ -25338,7 +25542,7 @@ import {
25338
25542
  useRef as useRef142,
25339
25543
  useState as useState142
25340
25544
  } from "react";
25341
- import React132, {
25545
+ import React133, {
25342
25546
  forwardRef as forwardRef34,
25343
25547
  Suspense as Suspense22,
25344
25548
  useCallback as useCallback132,
@@ -25995,7 +26199,7 @@ var usePlayer = () => {
25995
26199
  const isBuffering = useCallback24(() => {
25996
26200
  return buffering.current;
25997
26201
  }, [buffering]);
25998
- const returnValue = useMemo52(() => {
26202
+ const returnValue = useMemo51(() => {
25999
26203
  return {
26000
26204
  frameBack,
26001
26205
  frameForward,
@@ -26228,7 +26432,6 @@ var usePlayback = ({
26228
26432
  const setFrame = Internals.Timeline.useTimelineSetFrame();
26229
26433
  const sharedAudioContext = useContext45(Internals.SharedAudioContext);
26230
26434
  const logLevel = Internals.useLogLevel();
26231
- const timelineContext = Internals.useTimelineContext();
26232
26435
  const isBackgroundedRef = useIsBackgrounded();
26233
26436
  const lastTimeUpdateTimestamp = useRef52(0);
26234
26437
  const context = useContext45(Internals.BufferingContextReact);
@@ -26254,19 +26457,13 @@ var usePlayback = ({
26254
26457
  audioContext: sharedAudioContext.audioContext,
26255
26458
  audioSyncAnchor: sharedAudioContext.audioSyncAnchor,
26256
26459
  absoluteTimeInSeconds: frame / config.fps,
26257
- globalPlaybackRate: timelineContext.playbackRate,
26460
+ globalPlaybackRate: playbackRate,
26258
26461
  logLevel
26259
26462
  });
26260
26463
  if (changed) {
26261
26464
  sharedAudioContext.audioSyncAnchorEmitter.dispatch("changed");
26262
26465
  }
26263
- }, [
26264
- config,
26265
- frame,
26266
- logLevel,
26267
- sharedAudioContext,
26268
- timelineContext.playbackRate
26269
- ]);
26466
+ }, [config, frame, logLevel, playbackRate, sharedAudioContext]);
26270
26467
  useEffect52(() => {
26271
26468
  if (!config) {
26272
26469
  return;
@@ -26343,7 +26540,7 @@ var usePlayback = ({
26343
26540
  audioContext: sharedAudioContext.audioContext,
26344
26541
  audioSyncAnchor: sharedAudioContext.audioSyncAnchor,
26345
26542
  absoluteTimeInSeconds: getCurrentFrame() / config.fps,
26346
- globalPlaybackRate: timelineContext.playbackRate,
26543
+ globalPlaybackRate: playbackRate,
26347
26544
  logLevel
26348
26545
  });
26349
26546
  startedTime = performance.now();
@@ -26400,7 +26597,6 @@ var usePlayback = ({
26400
26597
  context,
26401
26598
  isPlaying,
26402
26599
  sharedAudioContext,
26403
- timelineContext.playbackRate,
26404
26600
  logLevel,
26405
26601
  muted
26406
26602
  ]);
@@ -26675,7 +26871,7 @@ var DefaultVolumeSlider = ({
26675
26871
  inputRef,
26676
26872
  setVolume
26677
26873
  }) => {
26678
- const sliderContainer = useMemo310(() => {
26874
+ const sliderContainer = useMemo39(() => {
26679
26875
  const paddingLeft = 5;
26680
26876
  const common = {
26681
26877
  paddingLeft,
@@ -26700,7 +26896,7 @@ var DefaultVolumeSlider = ({
26700
26896
  const onVolumeChange = useCallback42((e) => {
26701
26897
  setVolume(parseFloat(e.target.value));
26702
26898
  }, [setVolume]);
26703
- const inputStyle = useMemo310(() => {
26899
+ const inputStyle = useMemo39(() => {
26704
26900
  const commonStyle = {
26705
26901
  WebkitAppearance: "none",
26706
26902
  backgroundColor: "rgba(255, 255, 255, 0.5)",
@@ -26920,7 +27116,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
26920
27116
  setHovered(false);
26921
27117
  }, []);
26922
27118
  const isFocused = keyboardSelectedRate === rate;
26923
- const actualStyle = useMemo53(() => {
27119
+ const actualStyle = useMemo52(() => {
26924
27120
  return {
26925
27121
  ...rateDiv,
26926
27122
  backgroundColor: hovered || isFocused ? "#eee" : "transparent"
@@ -26943,7 +27139,7 @@ var PlaybackrateOption = ({ rate, onSelect, selectedRate, keyboardSelectedRate }
26943
27139
  }, rate);
26944
27140
  };
26945
27141
  var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
26946
- const { setPlaybackRate, playbackRate } = Internals.useTimelineContext();
27142
+ const { setPlaybackRate, playbackRate } = Internals.usePlaybackRate();
26947
27143
  const [keyboardSelectedRate, setKeyboardSelectedRate] = useState82(playbackRate);
26948
27144
  useEffect92(() => {
26949
27145
  const listener = (e) => {
@@ -26987,7 +27183,7 @@ var PlaybackPopup = ({ setIsComponentVisible, playbackRates, canvasSize }) => {
26987
27183
  setPlaybackRate(rate);
26988
27184
  setIsComponentVisible(false);
26989
27185
  }, [setIsComponentVisible, setPlaybackRate]);
26990
- const playbackPopup = useMemo53(() => {
27186
+ const playbackPopup = useMemo52(() => {
26991
27187
  return {
26992
27188
  position: "absolute",
26993
27189
  right: 0,
@@ -27045,7 +27241,7 @@ var button = {
27045
27241
  };
27046
27242
  var PlaybackrateControl = ({ playbackRates, canvasSize }) => {
27047
27243
  const { ref, isComponentVisible, setIsComponentVisible } = useComponentVisible(false);
27048
- const { playbackRate } = Internals.useTimelineContext();
27244
+ const { playbackRate } = Internals.usePlaybackRate();
27049
27245
  const onClick = useCallback62((e) => {
27050
27246
  e.stopPropagation();
27051
27247
  e.preventDefault();
@@ -28162,6 +28358,7 @@ var PLAYER_COMP_ID = "player-comp";
28162
28358
  var SharedPlayerContexts = ({
28163
28359
  children,
28164
28360
  timelineContext,
28361
+ playbackRateContext,
28165
28362
  fps,
28166
28363
  compositionHeight,
28167
28364
  compositionWidth,
@@ -28262,23 +28459,26 @@ var SharedPlayerContexts = ({
28262
28459
  children: /* @__PURE__ */ jsx133(Internals.CanUseRemotionHooksProvider, {
28263
28460
  children: /* @__PURE__ */ jsx133(Internals.AbsoluteTimeContext.Provider, {
28264
28461
  value: timelineContext,
28265
- children: /* @__PURE__ */ jsx133(Internals.TimelineContext.Provider, {
28266
- value: timelineContext,
28267
- children: /* @__PURE__ */ jsx133(Internals.CompositionManager.Provider, {
28268
- value: compositionManagerContext,
28269
- children: /* @__PURE__ */ jsx133(Internals.PrefetchProvider, {
28270
- children: /* @__PURE__ */ jsx133(Internals.DurationsContextProvider, {
28271
- children: /* @__PURE__ */ jsx133(Internals.MediaVolumeContext.Provider, {
28272
- value: mediaVolumeContextValue,
28273
- children: /* @__PURE__ */ jsx133(Internals.SetMediaVolumeContext.Provider, {
28274
- value: setMediaVolumeContextValue,
28275
- children: /* @__PURE__ */ jsx133(Internals.BufferingProvider, {
28276
- children: /* @__PURE__ */ jsx133(Internals.SharedAudioContextProvider, {
28277
- audioLatencyHint,
28278
- audioEnabled,
28279
- children: /* @__PURE__ */ jsx133(Internals.SharedAudioTagsContextProvider, {
28280
- numberOfAudioTags: numberOfSharedAudioTags,
28281
- children
28462
+ children: /* @__PURE__ */ jsx133(Internals.PlaybackRateContext.Provider, {
28463
+ value: playbackRateContext,
28464
+ children: /* @__PURE__ */ jsx133(Internals.TimelineContext.Provider, {
28465
+ value: timelineContext,
28466
+ children: /* @__PURE__ */ jsx133(Internals.CompositionManager.Provider, {
28467
+ value: compositionManagerContext,
28468
+ children: /* @__PURE__ */ jsx133(Internals.PrefetchProvider, {
28469
+ children: /* @__PURE__ */ jsx133(Internals.DurationsContextProvider, {
28470
+ children: /* @__PURE__ */ jsx133(Internals.MediaVolumeContext.Provider, {
28471
+ value: mediaVolumeContextValue,
28472
+ children: /* @__PURE__ */ jsx133(Internals.SetMediaVolumeContext.Provider, {
28473
+ value: setMediaVolumeContextValue,
28474
+ children: /* @__PURE__ */ jsx133(Internals.BufferingProvider, {
28475
+ children: /* @__PURE__ */ jsx133(Internals.SharedAudioContextProvider, {
28476
+ audioLatencyHint,
28477
+ audioEnabled,
28478
+ children: /* @__PURE__ */ jsx133(Internals.SharedAudioTagsContextProvider, {
28479
+ numberOfAudioTags: numberOfSharedAudioTags,
28480
+ children
28481
+ })
28282
28482
  })
28283
28483
  })
28284
28484
  })
@@ -28550,14 +28750,16 @@ var PlayerFn = ({
28550
28750
  frame,
28551
28751
  playing,
28552
28752
  rootId,
28553
- playbackRate: currentPlaybackRate,
28554
28753
  imperativePlaying,
28555
- setPlaybackRate: (rate) => {
28556
- setCurrentPlaybackRate(rate);
28557
- },
28558
28754
  audioAndVideoTags
28559
28755
  };
28560
- }, [frame, currentPlaybackRate, playing, rootId]);
28756
+ }, [frame, playing, rootId]);
28757
+ const playbackRateContextValue = useMemo142(() => {
28758
+ return {
28759
+ playbackRate: currentPlaybackRate,
28760
+ setPlaybackRate: setCurrentPlaybackRate
28761
+ };
28762
+ }, [currentPlaybackRate]);
28561
28763
  const setTimelineContextValue = useMemo142(() => {
28562
28764
  return {
28563
28765
  setFrame,
@@ -28578,6 +28780,7 @@ var PlayerFn = ({
28578
28780
  return /* @__PURE__ */ jsx143(Internals.IsPlayerContextProvider, {
28579
28781
  children: /* @__PURE__ */ jsx143(SharedPlayerContexts, {
28580
28782
  timelineContext: timelineContextValue,
28783
+ playbackRateContext: playbackRateContextValue,
28581
28784
  component,
28582
28785
  compositionHeight,
28583
28786
  compositionWidth,
@@ -28655,7 +28858,7 @@ var useThumbnail = () => {
28655
28858
  }, [emitter]);
28656
28859
  return returnValue;
28657
28860
  };
28658
- var reactVersion2 = React132.version.split(".")[0];
28861
+ var reactVersion2 = React133.version.split(".")[0];
28659
28862
  if (reactVersion2 === "0") {
28660
28863
  throw new Error(`Version ${reactVersion2} of "react" is not supported by Remotion`);
28661
28864
  }
@@ -28809,14 +29012,18 @@ var ThumbnailFn = ({
28809
29012
  imperativePlaying: {
28810
29013
  current: false
28811
29014
  },
28812
- playbackRate: 1,
28813
- setPlaybackRate: () => {
28814
- throw new Error("thumbnail");
28815
- },
28816
29015
  audioAndVideoTags: { current: [] }
28817
29016
  };
28818
29017
  return value;
28819
29018
  }, [frameToDisplay, thumbnailId]);
29019
+ const playbackRateContext = useMemo172(() => {
29020
+ return {
29021
+ playbackRate: 1,
29022
+ setPlaybackRate: () => {
29023
+ throw new Error("thumbnail");
29024
+ }
29025
+ };
29026
+ }, []);
28820
29027
  useImperativeHandle42(ref, () => rootRef.current, []);
28821
29028
  const Component = Internals.useLazyComponent({
28822
29029
  compProps: componentProps,
@@ -28830,6 +29037,7 @@ var ThumbnailFn = ({
28830
29037
  return /* @__PURE__ */ jsx163(Internals.IsPlayerContextProvider, {
28831
29038
  children: /* @__PURE__ */ jsx163(SharedPlayerContexts, {
28832
29039
  timelineContext: timelineState,
29040
+ playbackRateContext,
28833
29041
  component: Component,
28834
29042
  compositionHeight,
28835
29043
  compositionWidth,
@@ -28865,7 +29073,7 @@ var Thumbnail = forward2(ThumbnailFn);
28865
29073
  import {
28866
29074
  useCallback as useCallback49,
28867
29075
  useEffect as useEffect58,
28868
- useMemo as useMemo66,
29076
+ useMemo as useMemo64,
28869
29077
  useRef as useRef53,
28870
29078
  useState as useState56
28871
29079
  } from "react";
@@ -29616,7 +29824,7 @@ var UNDERLAY_RED = curriedTransparentize$1(0.9, RED);
29616
29824
  var BLUE_TEXT = curriedDarken$1(0.3, "#42e9f5");
29617
29825
 
29618
29826
  // src/components/homepage/layout/use-color-mode.tsx
29619
- import React57, { useContext as useContext46, useMemo as useMemo54 } from "react";
29827
+ import React57, { useContext as useContext46, useMemo as useMemo53 } from "react";
29620
29828
  import { jsx as jsx57 } from "react/jsx-runtime";
29621
29829
  var Context = React57.createContext(undefined);
29622
29830
  var ColorModeProvider = ({
@@ -29624,7 +29832,7 @@ var ColorModeProvider = ({
29624
29832
  colorMode,
29625
29833
  setColorMode
29626
29834
  }) => {
29627
- const value = useMemo54(() => {
29835
+ const value = useMemo53(() => {
29628
29836
  return { colorMode, setColorMode };
29629
29837
  }, [colorMode, setColorMode]);
29630
29838
  return /* @__PURE__ */ jsx57(Context.Provider, {
@@ -29642,8 +29850,8 @@ function useColorMode() {
29642
29850
 
29643
29851
  // ../media/dist/esm/index.mjs
29644
29852
  import { useState as useState312 } from "react";
29645
- import { useMemo as useMemo312 } from "react";
29646
- import { useContext as useContext212, useEffect as useEffect44, useMemo as useMemo56, useRef as useRef44, useState as useState41 } from "react";
29853
+ import { useMemo as useMemo311 } from "react";
29854
+ import { useContext as useContext212, useEffect as useEffect44, useMemo as useMemo55, useRef as useRef44, useState as useState41 } from "react";
29647
29855
  import { ALL_FORMATS, Input as Input2, UrlSource } from "mediabunny";
29648
29856
  import { AudioBufferSink, InputDisposedError } from "mediabunny";
29649
29857
  import { CanvasSink } from "mediabunny";
@@ -29676,7 +29884,7 @@ import { jsx as jsx412 } from "react/jsx-runtime";
29676
29884
  import {
29677
29885
  useContext as useContext53,
29678
29886
  useLayoutEffect as useLayoutEffect43,
29679
- useMemo as useMemo55,
29887
+ useMemo as useMemo54,
29680
29888
  useRef as useRef312,
29681
29889
  useState as useState53
29682
29890
  } from "react";
@@ -30471,65 +30679,90 @@ var makeNonceManager = () => {
30471
30679
  createAsyncOperation
30472
30680
  };
30473
30681
  };
30682
+ var BUFFER_SIZE = 3;
30474
30683
  var canvasesAheadOfTime = (videoSink, startTimestamp) => {
30475
30684
  const iterator = videoSink.canvases(startTimestamp);
30476
- let inFlight = iterator.next();
30477
- let resolved = null;
30478
- const trackResolution = () => {
30479
- const captured = inFlight;
30480
- captured.then((result) => {
30481
- if (captured === inFlight) {
30482
- resolved = result;
30685
+ const buffer = [];
30686
+ let chaining = false;
30687
+ let reachedEnd = false;
30688
+ let closed = false;
30689
+ let inFlight = null;
30690
+ const closeFrame = (frame) => {
30691
+ frame.close?.();
30692
+ };
30693
+ const fillNext = () => {
30694
+ if (chaining || reachedEnd || closed)
30695
+ return;
30696
+ if (buffer.length >= BUFFER_SIZE)
30697
+ return;
30698
+ chaining = true;
30699
+ const slot = { promise: iterator.next(), resolved: null };
30700
+ buffer.push(slot);
30701
+ inFlight = slot.promise.then((result) => {
30702
+ slot.resolved = result;
30703
+ chaining = false;
30704
+ inFlight = null;
30705
+ if (result.done) {
30706
+ reachedEnd = true;
30707
+ return;
30708
+ }
30709
+ if (closed) {
30710
+ closeFrame(result.value);
30711
+ return;
30483
30712
  }
30713
+ fillNext();
30484
30714
  }, () => {
30485
- return;
30715
+ chaining = false;
30716
+ inFlight = null;
30486
30717
  });
30487
30718
  };
30488
- trackResolution();
30489
- const advance2 = () => {
30490
- inFlight = iterator.next();
30491
- resolved = null;
30492
- trackResolution();
30493
- };
30719
+ fillNext();
30494
30720
  const next = () => {
30495
- if (resolved) {
30496
- if (resolved.done) {
30721
+ const slot = buffer.shift();
30722
+ fillNext();
30723
+ if (!slot) {
30724
+ if (reachedEnd || closed) {
30497
30725
  return { type: "ready", frame: null };
30498
30726
  }
30499
- const frame = resolved.value;
30500
- advance2();
30501
- return { type: "ready", frame };
30727
+ const chain = inFlight;
30728
+ return {
30729
+ type: "pending",
30730
+ wait: async () => {
30731
+ await chain;
30732
+ const next2 = buffer.shift();
30733
+ fillNext();
30734
+ if (!next2)
30735
+ return null;
30736
+ if (next2.resolved) {
30737
+ return next2.resolved.done ? null : next2.resolved.value;
30738
+ }
30739
+ const result = await next2.promise;
30740
+ return result.done ? null : result.value;
30741
+ }
30742
+ };
30743
+ }
30744
+ if (slot.resolved) {
30745
+ if (slot.resolved.done) {
30746
+ return { type: "ready", frame: null };
30747
+ }
30748
+ return { type: "ready", frame: slot.resolved.value };
30502
30749
  }
30503
- const captured = inFlight;
30504
30750
  return {
30505
30751
  type: "pending",
30506
30752
  wait: async () => {
30507
- const result = await captured;
30508
- if (captured === inFlight && !result.done) {
30509
- advance2();
30510
- }
30753
+ const result = await slot.promise;
30511
30754
  return result.done ? null : result.value;
30512
30755
  }
30513
30756
  };
30514
30757
  };
30515
- const closeFrame = (frame) => {
30516
- frame.close?.();
30517
- };
30518
30758
  const closeIterator = async () => {
30519
- if (resolved) {
30520
- if (!resolved.done) {
30521
- closeFrame(resolved.value);
30759
+ closed = true;
30760
+ for (const slot of buffer) {
30761
+ if (slot.resolved && !slot.resolved.done) {
30762
+ closeFrame(slot.resolved.value);
30522
30763
  }
30523
- } else {
30524
- const captured = inFlight;
30525
- captured.then((result) => {
30526
- if (!result.done) {
30527
- closeFrame(result.value);
30528
- }
30529
- }, () => {
30530
- return;
30531
- });
30532
30764
  }
30765
+ buffer.length = 0;
30533
30766
  await iterator.return();
30534
30767
  };
30535
30768
  return { next, closeIterator };
@@ -31555,8 +31788,7 @@ var AudioForPreviewAssertedShowing = ({
31555
31788
  const [mediaPlayerReady, setMediaPlayerReady] = useState41(false);
31556
31789
  const [shouldFallbackToNativeAudio, setShouldFallbackToNativeAudio] = useState41(false);
31557
31790
  const [playing] = Timeline.usePlayingState();
31558
- const timelineContext = Internals.useTimelineContext();
31559
- const globalPlaybackRate = timelineContext.playbackRate;
31791
+ const { playbackRate: globalPlaybackRate } = Internals.usePlaybackRate();
31560
31792
  const sharedAudioContext = useContext212(SharedAudioContext2);
31561
31793
  const buffer = useBufferState();
31562
31794
  const [mediaMuted] = useMediaMutedState2();
@@ -31807,7 +32039,7 @@ var AudioForPreview2 = ({
31807
32039
  const frame = useCurrentFrame();
31808
32040
  const videoConfig = useVideoConfig();
31809
32041
  const currentTime = frame / videoConfig.fps;
31810
- const showShow = useMemo56(() => {
32042
+ const showShow = useMemo55(() => {
31811
32043
  return getTimeInSeconds({
31812
32044
  unloopedTimeInSeconds: currentTime,
31813
32045
  playbackRate,
@@ -33895,7 +34127,7 @@ var AudioInner = (props) => {
33895
34127
  loop: props.loop ?? false
33896
34128
  });
33897
34129
  const [mediaDurationInSeconds, setMediaDurationInSeconds] = useState312(null);
33898
- const loopDisplay = useMemo312(() => getLoopDisplay({
34130
+ const loopDisplay = useMemo311(() => getLoopDisplay({
33899
34131
  loop: props.loop ?? false,
33900
34132
  mediaDurationInSeconds,
33901
34133
  playbackRate: props.playbackRate ?? 1,
@@ -33912,7 +34144,7 @@ var AudioInner = (props) => {
33912
34144
  sequenceDurationInFrames,
33913
34145
  videoConfig.fps
33914
34146
  ]);
33915
- const isMedia = useMemo312(() => ({
34147
+ const isMedia = useMemo311(() => ({
33916
34148
  type: "audio",
33917
34149
  data: basicInfo
33918
34150
  }), [basicInfo]);
@@ -34034,8 +34266,7 @@ var VideoForPreviewAssertedShowing = ({
34034
34266
  const [mediaPlayerReady, setMediaPlayerReady] = useState43(false);
34035
34267
  const [shouldFallbackToNativeVideo, setShouldFallbackToNativeVideo] = useState43(false);
34036
34268
  const [playing] = Timeline2.usePlayingState();
34037
- const timelineContext = Internals.useTimelineContext();
34038
- const globalPlaybackRate = timelineContext.playbackRate;
34269
+ const { playbackRate: globalPlaybackRate } = Internals.usePlaybackRate();
34039
34270
  const sharedAudioContext = useContext47(SharedAudioContext22);
34040
34271
  const buffer = useBufferState();
34041
34272
  const [mediaMuted] = useMediaMutedState22();
@@ -34397,7 +34628,7 @@ var VideoForRendering2 = ({
34397
34628
  const { registerRenderAsset, unregisterRenderAsset } = useContext53(Internals.RenderAssetManager);
34398
34629
  const startsAt = Internals.useMediaStartsAt();
34399
34630
  const sequenceContext = useContext53(Internals.SequenceContext);
34400
- const id = useMemo55(() => `media-video-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
34631
+ const id = useMemo54(() => `media-video-${random(src)}-${sequenceContext?.cumulatedFrom}-${sequenceContext?.relativeFrom}-${sequenceContext?.durationInFrames}`, [
34401
34632
  src,
34402
34633
  sequenceContext?.cumulatedFrom,
34403
34634
  sequenceContext?.relativeFrom,
@@ -34590,10 +34821,10 @@ var VideoForRendering2 = ({
34590
34821
  credentials
34591
34822
  ]);
34592
34823
  warnAboutObjectFitInStyleOrClassName({ style: style2, className: className2, logLevel });
34593
- const classNameValue = useMemo55(() => {
34824
+ const classNameValue = useMemo54(() => {
34594
34825
  return [Internals.OBJECTFIT_CONTAIN_CLASS_NAME, className2].filter(Internals.truthy).join(" ");
34595
34826
  }, [className2]);
34596
- const styleWithObjectFit = useMemo55(() => {
34827
+ const styleWithObjectFit = useMemo54(() => {
34597
34828
  return {
34598
34829
  ...style2,
34599
34830
  objectFit: objectFitProp
@@ -34678,34 +34909,7 @@ var videoSchema = {
34678
34909
  description: "Playback Rate"
34679
34910
  },
34680
34911
  loop: { type: "boolean", default: false, description: "Loop" },
34681
- "style.translate": {
34682
- type: "translate",
34683
- step: 1,
34684
- default: "0px 0px",
34685
- description: "Position"
34686
- },
34687
- "style.scale": {
34688
- type: "number",
34689
- min: 0.05,
34690
- max: 100,
34691
- step: 0.01,
34692
- default: 1,
34693
- description: "Scale"
34694
- },
34695
- "style.rotate": {
34696
- type: "rotation",
34697
- step: 1,
34698
- default: "0deg",
34699
- description: "Rotation"
34700
- },
34701
- "style.opacity": {
34702
- type: "number",
34703
- min: 0,
34704
- max: 1,
34705
- step: 0.01,
34706
- default: 1,
34707
- description: "Opacity"
34708
- }
34912
+ ...Internals.sequenceStyleSchema
34709
34913
  };
34710
34914
  var InnerVideo = ({
34711
34915
  src,
@@ -34934,7 +35138,7 @@ var Video = Internals.wrapInSchema(VideoInner, videoSchema);
34934
35138
  Internals.addSequenceStackTraces(Video);
34935
35139
 
34936
35140
  // src/components/homepage/Demo/Comp.tsx
34937
- import { useCallback as useCallback41, useEffect as useEffect50, useMemo as useMemo59, useState as useState48 } from "react";
35141
+ import { useCallback as useCallback41, useEffect as useEffect50, useMemo as useMemo58, useState as useState48 } from "react";
34938
35142
 
34939
35143
  // src/components/homepage/Demo/Cards.tsx
34940
35144
  import {
@@ -35486,14 +35690,14 @@ var Lottie = ({
35486
35690
  };
35487
35691
 
35488
35692
  // src/components/homepage/Demo/DisplayedEmoji.tsx
35489
- import { useEffect as useEffect47, useMemo as useMemo57, useState as useState46 } from "react";
35693
+ import { useEffect as useEffect47, useMemo as useMemo56, useState as useState46 } from "react";
35490
35694
  import { jsx as jsx70 } from "react/jsx-runtime";
35491
35695
  var DisplayedEmoji = ({ emoji }) => {
35492
35696
  const [data, setData] = useState46(null);
35493
35697
  const { durationInFrames, fps } = useVideoConfig();
35494
35698
  const [browser, setBrowser] = useState46(typeof document !== "undefined");
35495
35699
  const { delayRender: delayRender2, continueRender, cancelRender: cancelRender2 } = useDelayRender();
35496
- const src = useMemo57(() => {
35700
+ const src = useMemo56(() => {
35497
35701
  if (emoji === "melting") {
35498
35702
  return "https://fonts.gstatic.com/s/e/notoemoji/latest/1fae0/lottie.json";
35499
35703
  }
@@ -35920,7 +36124,7 @@ var Temperature = ({ theme, city, temperatureInCelsius }) => {
35920
36124
  };
35921
36125
 
35922
36126
  // src/components/homepage/Demo/TrendingRepos.tsx
35923
- import { useMemo as useMemo58 } from "react";
36127
+ import { useMemo as useMemo57 } from "react";
35924
36128
  import { jsx as jsx80, jsxs as jsxs21 } from "react/jsx-runtime";
35925
36129
  var TrendingRepoItem = ({ repo, theme, number }) => {
35926
36130
  const frame = useCurrentFrame();
@@ -35933,7 +36137,7 @@ var TrendingRepoItem = ({ repo, theme, number }) => {
35933
36137
  },
35934
36138
  delay: number * 10 + 20
35935
36139
  });
35936
- const item = useMemo58(() => {
36140
+ const item = useMemo57(() => {
35937
36141
  return {
35938
36142
  lineHeight: 1.1,
35939
36143
  fontFamily: "GTPlanar",
@@ -36140,7 +36344,7 @@ var HomepageVideoComp = ({
36140
36344
  setRerenders(rerenders + 1);
36141
36345
  updateCardOrder(newIndices);
36142
36346
  }, [rerenders, updateCardOrder]);
36143
- const emoji = useMemo59(() => {
36347
+ const emoji = useMemo58(() => {
36144
36348
  if ((emojiIndex + 1e4 * 3) % 3 === 1) {
36145
36349
  return "melting";
36146
36350
  }
@@ -36149,7 +36353,7 @@ var HomepageVideoComp = ({
36149
36353
  }
36150
36354
  return "partying-face";
36151
36355
  }, [emojiIndex]);
36152
- const audioSrc = useMemo59(() => {
36356
+ const audioSrc = useMemo58(() => {
36153
36357
  if (emoji === "fire") {
36154
36358
  return fireAudio;
36155
36359
  }
@@ -36234,7 +36438,7 @@ import {
36234
36438
  import { BufferTarget, StreamTarget } from "mediabunny";
36235
36439
 
36236
36440
  // ../core/dist/esm/version.mjs
36237
- var VERSION2 = "4.0.457";
36441
+ var VERSION2 = "4.0.459";
36238
36442
 
36239
36443
  // ../web-renderer/dist/esm/index.mjs
36240
36444
  import { AudioSample, VideoSample } from "mediabunny";
@@ -37568,7 +37772,7 @@ var turnSvgIntoDrawable = (svg) => {
37568
37772
  svg.style.color = originalColor;
37569
37773
  return new Promise((resolve, reject) => {
37570
37774
  const image = new Image;
37571
- const url = `data:image/svg+xml;base64,${btoa(svgData)}`;
37775
+ const url = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgData)}`;
37572
37776
  image.onload = function() {
37573
37777
  resolve(image);
37574
37778
  };
@@ -40970,7 +41174,7 @@ var Progress = ({ progress }) => {
40970
41174
  };
40971
41175
 
40972
41176
  // src/components/homepage/Demo/Spinner.tsx
40973
- import { useMemo as useMemo60 } from "react";
41177
+ import { useMemo as useMemo59 } from "react";
40974
41178
  import { jsx as jsx95, jsxs as jsxs29, Fragment as Fragment14 } from "react/jsx-runtime";
40975
41179
  var viewBox2 = 100;
40976
41180
  var lines2 = 8;
@@ -40978,7 +41182,7 @@ var className2 = "__remotion_spinner_line";
40978
41182
  var remotionSpinnerAnimation = "__remotion_spinner_animation";
40979
41183
  var translated3 = "M 44 0 L 50 0 a 6 6 0 0 1 6 6 L 56 26 a 6 6 0 0 1 -6 6 L 50 32 a 6 6 0 0 1 -6 -6 L 44 6 a 6 6 0 0 1 6 -6 Z";
40980
41184
  var Spinner2 = ({ size: size4, duration }) => {
40981
- const style2 = useMemo60(() => {
41185
+ const style2 = useMemo59(() => {
40982
41186
  return {
40983
41187
  width: size4,
40984
41188
  height: size4
@@ -41240,13 +41444,13 @@ var DragAndDropNudge = () => {
41240
41444
  };
41241
41445
 
41242
41446
  // src/components/homepage/Demo/PlayerSeekBar.tsx
41243
- import { useCallback as useCallback46, useEffect as useEffect53, useMemo as useMemo64, useRef as useRef50, useState as useState51 } from "react";
41447
+ import { useCallback as useCallback46, useEffect as useEffect53, useMemo as useMemo61, useRef as useRef50, useState as useState51 } from "react";
41244
41448
 
41245
41449
  // src/components/homepage/layout/use-el-size.ts
41246
- import { useCallback as useCallback45, useEffect as useEffect51, useMemo as useMemo61, useState as useState50 } from "react";
41450
+ import { useCallback as useCallback45, useEffect as useEffect51, useMemo as useMemo60, useState as useState50 } from "react";
41247
41451
  var useElementSize2 = (ref) => {
41248
41452
  const [size4, setSize] = useState50(null);
41249
- const observer = useMemo61(() => {
41453
+ const observer = useMemo60(() => {
41250
41454
  if (typeof ResizeObserver === "undefined") {
41251
41455
  return;
41252
41456
  }
@@ -41460,7 +41664,7 @@ var PlayerSeekBar2 = ({
41460
41664
  body.removeEventListener("pointerup", onPointerUp);
41461
41665
  };
41462
41666
  }, [dragging.dragging, onPointerMove, onPointerUp]);
41463
- const knobStyle = useMemo64(() => {
41667
+ const knobStyle = useMemo61(() => {
41464
41668
  return {
41465
41669
  height: KNOB_SIZE3,
41466
41670
  width: KNOB_SIZE3,
@@ -41474,7 +41678,7 @@ var PlayerSeekBar2 = ({
41474
41678
  transition: "opacity 0.s ease"
41475
41679
  };
41476
41680
  }, [barHovered, durationInFrames, frame, width2]);
41477
- const fillStyle = useMemo64(() => {
41681
+ const fillStyle = useMemo61(() => {
41478
41682
  return {
41479
41683
  height: BAR_HEIGHT3,
41480
41684
  backgroundColor: "var(--ifm-font-color-base)",
@@ -41483,7 +41687,7 @@ var PlayerSeekBar2 = ({
41483
41687
  borderRadius: BAR_HEIGHT3 / 2
41484
41688
  };
41485
41689
  }, [durationInFrames, frame, inFrame]);
41486
- const active = useMemo64(() => {
41690
+ const active = useMemo61(() => {
41487
41691
  return {
41488
41692
  height: BAR_HEIGHT3,
41489
41693
  backgroundColor: "var(--ifm-font-color-base)",
@@ -41896,7 +42100,7 @@ var Demo = () => {
41896
42100
  const updateCardOrder = useCallback49((newCardOrder) => {
41897
42101
  setCardOrder(newCardOrder);
41898
42102
  }, []);
41899
- const props = useMemo66(() => {
42103
+ const props = useMemo64(() => {
41900
42104
  return {
41901
42105
  theme: colorMode,
41902
42106
  onToggle: () => {