@remotion/promo-pages 4.0.433 → 4.0.435

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 (284) hide show
  1. package/dist/Homepage.js +452 -25364
  2. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/Homepage.js +452 -25364
  3. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/design.js +1 -1
  4. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/experts/experts-data.js +69 -18
  5. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/experts.js +70 -19
  6. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/homepage/Pricing.js +1 -1
  7. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsGallery.js +1 -1
  8. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsShow.js +1 -1
  9. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsSubmit.js +1 -1
  10. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/template-modal-content.js +1 -1
  11. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/templates.js +3 -1
  12. package/dist/cn.d.ts +2 -0
  13. package/dist/cn.js +5 -0
  14. package/dist/components/3DEngine/ButtonDemo.d.ts +2 -0
  15. package/dist/components/3DEngine/ButtonDemo.js +43 -0
  16. package/dist/components/3DEngine/Faces.d.ts +5 -0
  17. package/dist/components/3DEngine/Faces.js +7 -0
  18. package/dist/components/3DEngine/Outer.d.ts +8 -0
  19. package/dist/components/3DEngine/Outer.js +56 -0
  20. package/dist/components/3DEngine/Switch.d.ts +4 -0
  21. package/dist/components/3DEngine/Switch.js +4 -0
  22. package/dist/components/3DEngine/get-child-node-from.d.ts +1 -0
  23. package/dist/components/3DEngine/get-child-node-from.js +14 -0
  24. package/dist/components/3DEngine/hover-transforms.d.ts +9 -0
  25. package/dist/components/3DEngine/hover-transforms.js +177 -0
  26. package/dist/components/BackButton.d.ts +6 -0
  27. package/dist/components/BackButton.js +9 -0
  28. package/dist/components/CommandCopyButton.d.ts +5 -0
  29. package/dist/components/CommandCopyButton.js +4 -0
  30. package/dist/components/Homepage.d.ts +6 -0
  31. package/dist/components/Homepage.js +20 -0
  32. package/dist/components/ManageTeamMembers.d.ts +2 -0
  33. package/dist/components/ManageTeamMembers.js +42 -0
  34. package/dist/components/Spinner.d.ts +3 -0
  35. package/dist/components/Spinner.js +4 -0
  36. package/dist/components/TeamPicture.d.ts +1 -0
  37. package/dist/components/TeamPicture.js +4 -0
  38. package/dist/components/design.d.ts +1 -0
  39. package/dist/components/design.js +33 -0
  40. package/dist/components/experts/ExpertsPage.d.ts +11 -0
  41. package/dist/components/experts/ExpertsPage.js +50 -0
  42. package/dist/components/experts/experts-data.d.ts +15 -0
  43. package/dist/components/experts/experts-data.js +263 -0
  44. package/dist/components/experts/experts-icons.d.ts +7 -0
  45. package/dist/components/experts/experts-icons.js +36 -0
  46. package/dist/components/experts.d.ts +3 -0
  47. package/dist/components/experts.js +2 -0
  48. package/dist/components/homepage/BackgroundAnimation.d.ts +2 -0
  49. package/dist/components/homepage/BackgroundAnimation.js +66 -0
  50. package/dist/components/homepage/ChooseTemplate.d.ts +2 -0
  51. package/dist/components/homepage/ChooseTemplate.js +25 -0
  52. package/dist/components/homepage/CommunityStats.d.ts +3 -0
  53. package/dist/components/homepage/CommunityStats.js +6 -0
  54. package/dist/components/homepage/CommunityStatsItems.d.ts +7 -0
  55. package/dist/components/homepage/CommunityStatsItems.js +58 -0
  56. package/dist/components/homepage/Demo/Card.d.ts +15 -0
  57. package/dist/components/homepage/Demo/Card.js +174 -0
  58. package/dist/components/homepage/Demo/Cards.d.ts +15 -0
  59. package/dist/components/homepage/Demo/Cards.js +57 -0
  60. package/dist/components/homepage/Demo/Comp.d.ts +38 -0
  61. package/dist/components/homepage/Demo/Comp.js +72 -0
  62. package/dist/components/homepage/Demo/CurrentCountry.d.ts +9 -0
  63. package/dist/components/homepage/Demo/CurrentCountry.js +48 -0
  64. package/dist/components/homepage/Demo/DemoError.d.ts +2 -0
  65. package/dist/components/homepage/Demo/DemoError.js +10 -0
  66. package/dist/components/homepage/Demo/DemoErrorIcon.d.ts +2 -0
  67. package/dist/components/homepage/Demo/DemoErrorIcon.js +16 -0
  68. package/dist/components/homepage/Demo/DemoRender.d.ts +33 -0
  69. package/dist/components/homepage/Demo/DemoRender.js +107 -0
  70. package/dist/components/homepage/Demo/DigitWheel.d.ts +9 -0
  71. package/dist/components/homepage/Demo/DigitWheel.js +94 -0
  72. package/dist/components/homepage/Demo/DisplayedEmoji.d.ts +5 -0
  73. package/dist/components/homepage/Demo/DisplayedEmoji.js +59 -0
  74. package/dist/components/homepage/Demo/DoneCheckmark.d.ts +2 -0
  75. package/dist/components/homepage/Demo/DoneCheckmark.js +20 -0
  76. package/dist/components/homepage/Demo/DownloadNudge.d.ts +2 -0
  77. package/dist/components/homepage/Demo/DownloadNudge.js +27 -0
  78. package/dist/components/homepage/Demo/DragAndDropNudge.d.ts +3 -0
  79. package/dist/components/homepage/Demo/DragAndDropNudge.js +26 -0
  80. package/dist/components/homepage/Demo/EmojiCard.d.ts +10 -0
  81. package/dist/components/homepage/Demo/EmojiCard.js +120 -0
  82. package/dist/components/homepage/Demo/Minus.d.ts +5 -0
  83. package/dist/components/homepage/Demo/Minus.js +11 -0
  84. package/dist/components/homepage/Demo/PlayPauseButton.d.ts +5 -0
  85. package/dist/components/homepage/Demo/PlayPauseButton.js +47 -0
  86. package/dist/components/homepage/Demo/PlayerControls.d.ts +8 -0
  87. package/dist/components/homepage/Demo/PlayerControls.js +15 -0
  88. package/dist/components/homepage/Demo/PlayerSeekBar.d.ts +11 -0
  89. package/dist/components/homepage/Demo/PlayerSeekBar.js +216 -0
  90. package/dist/components/homepage/Demo/PlayerVolume.d.ts +5 -0
  91. package/dist/components/homepage/Demo/PlayerVolume.js +53 -0
  92. package/dist/components/homepage/Demo/Progress.d.ts +4 -0
  93. package/dist/components/homepage/Demo/Progress.js +14 -0
  94. package/dist/components/homepage/Demo/Spinner.d.ts +5 -0
  95. package/dist/components/homepage/Demo/Spinner.js +37 -0
  96. package/dist/components/homepage/Demo/Switcher.d.ts +6 -0
  97. package/dist/components/homepage/Demo/Switcher.js +25 -0
  98. package/dist/components/homepage/Demo/Temperature.d.ts +6 -0
  99. package/dist/components/homepage/Demo/Temperature.js +21 -0
  100. package/dist/components/homepage/Demo/TemperatureNumber.d.ts +5 -0
  101. package/dist/components/homepage/Demo/TemperatureNumber.js +36 -0
  102. package/dist/components/homepage/Demo/ThemeNudge.d.ts +3 -0
  103. package/dist/components/homepage/Demo/ThemeNudge.js +35 -0
  104. package/dist/components/homepage/Demo/TimeDisplay.d.ts +6 -0
  105. package/dist/components/homepage/Demo/TimeDisplay.js +27 -0
  106. package/dist/components/homepage/Demo/TrendingRepos.d.ts +6 -0
  107. package/dist/components/homepage/Demo/TrendingRepos.js +65 -0
  108. package/dist/components/homepage/Demo/icons.d.ts +10 -0
  109. package/dist/components/homepage/Demo/icons.js +22 -0
  110. package/dist/components/homepage/Demo/index.d.ts +2 -0
  111. package/dist/components/homepage/Demo/index.js +95 -0
  112. package/dist/components/homepage/Demo/math.d.ts +10 -0
  113. package/dist/components/homepage/Demo/math.js +29 -0
  114. package/dist/components/homepage/Demo/types.d.ts +6 -0
  115. package/dist/components/homepage/Demo/types.js +0 -0
  116. package/dist/components/homepage/EditorStarterSection.d.ts +3 -0
  117. package/dist/components/homepage/EditorStarterSection.js +8 -0
  118. package/dist/components/homepage/EvaluateRemotion.d.ts +3 -0
  119. package/dist/components/homepage/EvaluateRemotion.js +21 -0
  120. package/dist/components/homepage/FreePricing.d.ts +4 -0
  121. package/dist/components/homepage/FreePricing.js +134 -0
  122. package/dist/components/homepage/GetStartedStrip.d.ts +2 -0
  123. package/dist/components/homepage/GetStartedStrip.js +14 -0
  124. package/dist/components/homepage/GitHubButton.d.ts +2 -0
  125. package/dist/components/homepage/GitHubButton.js +7 -0
  126. package/dist/components/homepage/IconForTemplate.d.ts +6 -0
  127. package/dist/components/homepage/IconForTemplate.js +101 -0
  128. package/dist/components/homepage/IfYouKnowReact.d.ts +3 -0
  129. package/dist/components/homepage/IfYouKnowReact.js +23 -0
  130. package/dist/components/homepage/InfoTooltip.d.ts +6 -0
  131. package/dist/components/homepage/InfoTooltip.js +6 -0
  132. package/dist/components/homepage/MoreTemplatesButton.d.ts +2 -0
  133. package/dist/components/homepage/MoreTemplatesButton.js +11 -0
  134. package/dist/components/homepage/MuxVideo.d.ts +7 -0
  135. package/dist/components/homepage/MuxVideo.js +45 -0
  136. package/dist/components/homepage/NewsletterButton.d.ts +2 -0
  137. package/dist/components/homepage/NewsletterButton.js +38 -0
  138. package/dist/components/homepage/ParameterizeAndEdit.d.ts +2 -0
  139. package/dist/components/homepage/ParameterizeAndEdit.js +22 -0
  140. package/dist/components/homepage/Pricing.d.ts +2 -0
  141. package/dist/components/homepage/Pricing.js +15 -0
  142. package/dist/components/homepage/PricingBulletPoint.d.ts +6 -0
  143. package/dist/components/homepage/PricingBulletPoint.js +19 -0
  144. package/dist/components/homepage/RealMp4Videos.d.ts +2 -0
  145. package/dist/components/homepage/RealMp4Videos.js +41 -0
  146. package/dist/components/homepage/Spacer.d.ts +2 -0
  147. package/dist/components/homepage/Spacer.js +4 -0
  148. package/dist/components/homepage/TemplateIcon.d.ts +5 -0
  149. package/dist/components/homepage/TemplateIcon.js +24 -0
  150. package/dist/components/homepage/TextInput.d.ts +7 -0
  151. package/dist/components/homepage/TextInput.js +34 -0
  152. package/dist/components/homepage/TrustedByBanner.d.ts +2 -0
  153. package/dist/components/homepage/TrustedByBanner.js +27 -0
  154. package/dist/components/homepage/VideoApps.d.ts +4 -0
  155. package/dist/components/homepage/VideoApps.js +72 -0
  156. package/dist/components/homepage/VideoAppsShowcase.d.ts +3 -0
  157. package/dist/components/homepage/VideoAppsShowcase.js +139 -0
  158. package/dist/components/homepage/VideoAppsTitle.d.ts +4 -0
  159. package/dist/components/homepage/VideoAppsTitle.js +4 -0
  160. package/dist/components/homepage/VideoPlayerWithControls.d.ts +20 -0
  161. package/dist/components/homepage/VideoPlayerWithControls.js +105 -0
  162. package/dist/components/homepage/WriteInReact.d.ts +2 -0
  163. package/dist/components/homepage/WriteInReact.js +10 -0
  164. package/dist/components/homepage/YouAreHere.d.ts +2 -0
  165. package/dist/components/homepage/YouAreHere.js +23 -0
  166. package/dist/components/homepage/layout/Button.d.ts +22 -0
  167. package/dist/components/homepage/layout/Button.js +30 -0
  168. package/dist/components/homepage/layout/colors.d.ts +13 -0
  169. package/dist/components/homepage/layout/colors.js +14 -0
  170. package/dist/components/homepage/layout/use-color-mode.d.ts +21 -0
  171. package/dist/components/homepage/layout/use-color-mode.js +22 -0
  172. package/dist/components/homepage/layout/use-el-size.d.ts +5 -0
  173. package/dist/components/homepage/layout/use-el-size.js +40 -0
  174. package/dist/components/homepage/layout/use-mobile-layout.d.ts +1 -0
  175. package/dist/components/homepage/layout/use-mobile-layout.js +6 -0
  176. package/dist/components/icons/blank.d.ts +3 -0
  177. package/dist/components/icons/blank.js +4 -0
  178. package/dist/components/icons/brain.d.ts +2 -0
  179. package/dist/components/icons/brain.js +4 -0
  180. package/dist/components/icons/clone.d.ts +2 -0
  181. package/dist/components/icons/clone.js +2 -0
  182. package/dist/components/icons/code-hike.d.ts +3 -0
  183. package/dist/components/icons/code-hike.js +4 -0
  184. package/dist/components/icons/cubes.d.ts +3 -0
  185. package/dist/components/icons/cubes.js +4 -0
  186. package/dist/components/icons/editor.d.ts +3 -0
  187. package/dist/components/icons/editor.js +4 -0
  188. package/dist/components/icons/js.d.ts +3 -0
  189. package/dist/components/icons/js.js +4 -0
  190. package/dist/components/icons/music.d.ts +2 -0
  191. package/dist/components/icons/music.js +4 -0
  192. package/dist/components/icons/next.d.ts +4 -0
  193. package/dist/components/icons/next.js +4 -0
  194. package/dist/components/icons/overlay.d.ts +3 -0
  195. package/dist/components/icons/overlay.js +4 -0
  196. package/dist/components/icons/prompt-to-video.d.ts +2 -0
  197. package/dist/components/icons/prompt-to-video.js +4 -0
  198. package/dist/components/icons/recorder.d.ts +3 -0
  199. package/dist/components/icons/recorder.js +4 -0
  200. package/dist/components/icons/remix.d.ts +3 -0
  201. package/dist/components/icons/remix.js +4 -0
  202. package/dist/components/icons/render-server.d.ts +3 -0
  203. package/dist/components/icons/render-server.js +4 -0
  204. package/dist/components/icons/skia.d.ts +3 -0
  205. package/dist/components/icons/skia.js +4 -0
  206. package/dist/components/icons/stargazer.d.ts +3 -0
  207. package/dist/components/icons/stargazer.js +4 -0
  208. package/dist/components/icons/still.d.ts +3 -0
  209. package/dist/components/icons/still.js +4 -0
  210. package/dist/components/icons/tailwind.d.ts +3 -0
  211. package/dist/components/icons/tailwind.js +4 -0
  212. package/dist/components/icons/tiktok.d.ts +3 -0
  213. package/dist/components/icons/tiktok.js +4 -0
  214. package/dist/components/icons/timeline.d.ts +3 -0
  215. package/dist/components/icons/timeline.js +4 -0
  216. package/dist/components/icons/ts.d.ts +3 -0
  217. package/dist/components/icons/ts.js +4 -0
  218. package/dist/components/icons/undo.d.ts +3 -0
  219. package/dist/components/icons/undo.js +2 -0
  220. package/dist/components/icons/vercel.d.ts +4 -0
  221. package/dist/components/icons/vercel.js +4 -0
  222. package/dist/components/icons/waveform.d.ts +3 -0
  223. package/dist/components/icons/waveform.js +4 -0
  224. package/dist/components/prompts/CardLikeButton.d.ts +5 -0
  225. package/dist/components/prompts/CardLikeButton.js +49 -0
  226. package/dist/components/prompts/ClipboardIcon.d.ts +5 -0
  227. package/dist/components/prompts/ClipboardIcon.js +4 -0
  228. package/dist/components/prompts/CopyPromptButton.d.ts +4 -0
  229. package/dist/components/prompts/CopyPromptButton.js +13 -0
  230. package/dist/components/prompts/LikeButton.d.ts +5 -0
  231. package/dist/components/prompts/LikeButton.js +49 -0
  232. package/dist/components/prompts/MuxPlayer.d.ts +8 -0
  233. package/dist/components/prompts/MuxPlayer.js +21 -0
  234. package/dist/components/prompts/NewBackButton.d.ts +5 -0
  235. package/dist/components/prompts/NewBackButton.js +8 -0
  236. package/dist/components/prompts/Page.d.ts +8 -0
  237. package/dist/components/prompts/Page.js +7 -0
  238. package/dist/components/prompts/PromptsGallery.d.ts +7 -0
  239. package/dist/components/prompts/PromptsGallery.js +60 -0
  240. package/dist/components/prompts/PromptsShow.d.ts +5 -0
  241. package/dist/components/prompts/PromptsShow.js +17 -0
  242. package/dist/components/prompts/PromptsSubmit.d.ts +2 -0
  243. package/dist/components/prompts/PromptsSubmit.js +173 -0
  244. package/dist/components/prompts/config.d.ts +1 -0
  245. package/dist/components/prompts/config.js +1 -0
  246. package/dist/components/prompts/prompt-helpers.d.ts +8 -0
  247. package/dist/components/prompts/prompt-helpers.js +76 -0
  248. package/dist/components/prompts/prompt-types.d.ts +14 -0
  249. package/dist/components/prompts/prompt-types.js +0 -0
  250. package/dist/components/prompts/use-heart-animation.d.ts +5 -0
  251. package/dist/components/prompts/use-heart-animation.js +29 -0
  252. package/dist/components/team/TeamCards.d.ts +6 -0
  253. package/dist/components/team/TeamCards.js +19 -0
  254. package/dist/components/team/TitleTeamCards.d.ts +2 -0
  255. package/dist/components/team/TitleTeamCards.js +6 -0
  256. package/dist/components/team.d.ts +3 -0
  257. package/dist/components/team.js +14 -0
  258. package/dist/components/template-modal-content.d.ts +5 -0
  259. package/dist/components/template-modal-content.js +73 -0
  260. package/dist/components/templates.d.ts +2 -0
  261. package/dist/components/templates.js +27 -0
  262. package/dist/design.js +1 -1
  263. package/dist/experts/experts-data.js +69 -18
  264. package/dist/experts.js +70 -19
  265. package/dist/helpers/mobile-layout.d.ts +1 -0
  266. package/dist/helpers/mobile-layout.js +6 -0
  267. package/dist/helpers/use-el-size.d.ts +5 -0
  268. package/dist/helpers/use-el-size.js +40 -0
  269. package/dist/homepage/Pricing.js +1 -1
  270. package/dist/main.d.ts +1 -0
  271. package/dist/main.js +6 -0
  272. package/dist/prompts/PromptsGallery.js +1 -1
  273. package/dist/prompts/PromptsShow.js +1 -1
  274. package/dist/prompts/PromptsSubmit.js +1 -1
  275. package/dist/prompts-show.d.ts +1 -0
  276. package/dist/prompts-show.js +20 -0
  277. package/dist/prompts-submit.d.ts +1 -0
  278. package/dist/prompts-submit.js +6 -0
  279. package/dist/prompts.d.ts +1 -0
  280. package/dist/prompts.js +6 -0
  281. package/dist/team.d.ts +1 -0
  282. package/dist/template-modal-content.js +1 -1
  283. package/dist/templates.js +3 -1
  284. package/package.json +13 -13
@@ -5977,7 +5977,7 @@ var useIsPlayer = () => {
5977
5977
  function truthy2(value) {
5978
5978
  return Boolean(value);
5979
5979
  }
5980
- var VERSION = "4.0.433";
5980
+ var VERSION = "4.0.435";
5981
5981
  var checkMultipleRemotionVersions = () => {
5982
5982
  if (typeof globalThis === "undefined") {
5983
5983
  return;
@@ -547,29 +547,80 @@ var experts = [
547
547
  x: null,
548
548
  github: "sambowenhughes",
549
549
  linkedin: "in/sambowenhughes/",
550
- email: "sambowenhughes@icloud.com",
551
- videocall: "https://calendly.com/hello-reactvideoeditor/30min",
550
+ email: "sam@reactvideoeditor.com",
551
+ videocall: "https://calendly.com/reactvideoeditor/30min",
552
552
  since: new Date("2025-06-03").getTime(),
553
553
  description: /* @__PURE__ */ jsxs("div", {
554
554
  children: [
555
- "Full-stack engineer with 10+ years experience. I built",
556
- " ",
557
- /* @__PURE__ */ jsx("a", {
558
- target: "_blank",
559
- href: "https://reactvideoeditor.com?utm_source=remotion",
560
- children: "React Video Editor"
555
+ /* @__PURE__ */ jsxs("p", {
556
+ children: [
557
+ "Experienced engineer with 10+ years building advanced software products. Creator of",
558
+ " ",
559
+ /* @__PURE__ */ jsx("a", {
560
+ target: "_blank",
561
+ href: "https://reactvideoeditor.com",
562
+ children: "React Video Editor"
563
+ }),
564
+ "and",
565
+ " ",
566
+ /* @__PURE__ */ jsx("a", {
567
+ target: "_blank",
568
+ href: "https://clippkit.com",
569
+ children: "Clippkit"
570
+ }),
571
+ "."
572
+ ]
561
573
  }),
562
- " ",
563
- "and",
564
- " ",
565
- /* @__PURE__ */ jsx("a", {
566
- target: "_blank",
567
- href: "https://clippkit.com?utm_source=remotion",
568
- children: "Clippkit"
574
+ /* @__PURE__ */ jsxs("p", {
575
+ children: [
576
+ "I work with companies building products with",
577
+ " ",
578
+ /* @__PURE__ */ jsx("strong", {
579
+ children: "Remotion at their core"
580
+ }),
581
+ ". Custom video editors, automated video generation tools, and scalable rendering pipelines."
582
+ ]
569
583
  }),
570
- ".",
571
- /* @__PURE__ */ jsx("br", {}),
572
- "I can help with anything Remotion-related, or just be a reliable engineering partner if you need someone who moves fast and builds things right – SaaS, design, backend, whatever's needed."
584
+ /* @__PURE__ */ jsxs("ul", {
585
+ children: [
586
+ /* @__PURE__ */ jsxs("li", {
587
+ children: [
588
+ /* @__PURE__ */ jsx("strong", {
589
+ children: "Custom video editors"
590
+ }),
591
+ " built with Remotion"
592
+ ]
593
+ }),
594
+ /* @__PURE__ */ jsxs("li", {
595
+ children: [
596
+ /* @__PURE__ */ jsx("strong", {
597
+ children: "Automated video generation"
598
+ }),
599
+ " systems"
600
+ ]
601
+ }),
602
+ /* @__PURE__ */ jsxs("li", {
603
+ children: [
604
+ /* @__PURE__ */ jsx("strong", {
605
+ children: "Rendering infrastructure"
606
+ }),
607
+ " and media pipelines"
608
+ ]
609
+ }),
610
+ /* @__PURE__ */ jsx("li", {
611
+ children: /* @__PURE__ */ jsx("strong", {
612
+ children: "UI/UX and full-stack product development"
613
+ })
614
+ })
615
+ ]
616
+ }),
617
+ /* @__PURE__ */ jsxs("p", {
618
+ children: [
619
+ "If you",
620
+ "'",
621
+ "re building software around video, or just need a reliable engineering partner who moves fast and builds things right, feel free to reach out."
622
+ ]
623
+ })
573
624
  ]
574
625
  })
575
626
  },
@@ -547,29 +547,80 @@ var experts = [
547
547
  x: null,
548
548
  github: "sambowenhughes",
549
549
  linkedin: "in/sambowenhughes/",
550
- email: "sambowenhughes@icloud.com",
551
- videocall: "https://calendly.com/hello-reactvideoeditor/30min",
550
+ email: "sam@reactvideoeditor.com",
551
+ videocall: "https://calendly.com/reactvideoeditor/30min",
552
552
  since: new Date("2025-06-03").getTime(),
553
553
  description: /* @__PURE__ */ jsxs("div", {
554
554
  children: [
555
- "Full-stack engineer with 10+ years experience. I built",
556
- " ",
557
- /* @__PURE__ */ jsx("a", {
558
- target: "_blank",
559
- href: "https://reactvideoeditor.com?utm_source=remotion",
560
- children: "React Video Editor"
555
+ /* @__PURE__ */ jsxs("p", {
556
+ children: [
557
+ "Experienced engineer with 10+ years building advanced software products. Creator of",
558
+ " ",
559
+ /* @__PURE__ */ jsx("a", {
560
+ target: "_blank",
561
+ href: "https://reactvideoeditor.com",
562
+ children: "React Video Editor"
563
+ }),
564
+ "and",
565
+ " ",
566
+ /* @__PURE__ */ jsx("a", {
567
+ target: "_blank",
568
+ href: "https://clippkit.com",
569
+ children: "Clippkit"
570
+ }),
571
+ "."
572
+ ]
561
573
  }),
562
- " ",
563
- "and",
564
- " ",
565
- /* @__PURE__ */ jsx("a", {
566
- target: "_blank",
567
- href: "https://clippkit.com?utm_source=remotion",
568
- children: "Clippkit"
574
+ /* @__PURE__ */ jsxs("p", {
575
+ children: [
576
+ "I work with companies building products with",
577
+ " ",
578
+ /* @__PURE__ */ jsx("strong", {
579
+ children: "Remotion at their core"
580
+ }),
581
+ ". Custom video editors, automated video generation tools, and scalable rendering pipelines."
582
+ ]
569
583
  }),
570
- ".",
571
- /* @__PURE__ */ jsx("br", {}),
572
- "I can help with anything Remotion-related, or just be a reliable engineering partner if you need someone who moves fast and builds things right – SaaS, design, backend, whatever's needed."
584
+ /* @__PURE__ */ jsxs("ul", {
585
+ children: [
586
+ /* @__PURE__ */ jsxs("li", {
587
+ children: [
588
+ /* @__PURE__ */ jsx("strong", {
589
+ children: "Custom video editors"
590
+ }),
591
+ " built with Remotion"
592
+ ]
593
+ }),
594
+ /* @__PURE__ */ jsxs("li", {
595
+ children: [
596
+ /* @__PURE__ */ jsx("strong", {
597
+ children: "Automated video generation"
598
+ }),
599
+ " systems"
600
+ ]
601
+ }),
602
+ /* @__PURE__ */ jsxs("li", {
603
+ children: [
604
+ /* @__PURE__ */ jsx("strong", {
605
+ children: "Rendering infrastructure"
606
+ }),
607
+ " and media pipelines"
608
+ ]
609
+ }),
610
+ /* @__PURE__ */ jsx("li", {
611
+ children: /* @__PURE__ */ jsx("strong", {
612
+ children: "UI/UX and full-stack product development"
613
+ })
614
+ })
615
+ ]
616
+ }),
617
+ /* @__PURE__ */ jsxs("p", {
618
+ children: [
619
+ "If you",
620
+ "'",
621
+ "re building software around video, or just need a reliable engineering partner who moves fast and builds things right, feel free to reach out."
622
+ ]
623
+ })
573
624
  ]
574
625
  })
575
626
  },
@@ -952,7 +1003,7 @@ var useIsPlayer = () => {
952
1003
  function truthy(value) {
953
1004
  return Boolean(value);
954
1005
  }
955
- var VERSION = "4.0.433";
1006
+ var VERSION = "4.0.435";
956
1007
  var checkMultipleRemotionVersions = () => {
957
1008
  if (typeof globalThis === "undefined") {
958
1009
  return;
@@ -5977,7 +5977,7 @@ var useIsPlayer = () => {
5977
5977
  function truthy2(value) {
5978
5978
  return Boolean(value);
5979
5979
  }
5980
- var VERSION = "4.0.433";
5980
+ var VERSION = "4.0.435";
5981
5981
  var checkMultipleRemotionVersions = () => {
5982
5982
  if (typeof globalThis === "undefined") {
5983
5983
  return;
@@ -5977,7 +5977,7 @@ var useIsPlayer = () => {
5977
5977
  function truthy2(value) {
5978
5978
  return Boolean(value);
5979
5979
  }
5980
- var VERSION = "4.0.433";
5980
+ var VERSION = "4.0.435";
5981
5981
  var checkMultipleRemotionVersions = () => {
5982
5982
  if (typeof globalThis === "undefined") {
5983
5983
  return;
@@ -23311,7 +23311,7 @@ var useIsPlayer = () => {
23311
23311
  function truthy2(value) {
23312
23312
  return Boolean(value);
23313
23313
  }
23314
- var VERSION = "4.0.433";
23314
+ var VERSION = "4.0.435";
23315
23315
  var checkMultipleRemotionVersions = () => {
23316
23316
  if (typeof globalThis === "undefined") {
23317
23317
  return;
@@ -23311,7 +23311,7 @@ var useIsPlayer = () => {
23311
23311
  function truthy2(value) {
23312
23312
  return Boolean(value);
23313
23313
  }
23314
- var VERSION = "4.0.433";
23314
+ var VERSION = "4.0.435";
23315
23315
  var checkMultipleRemotionVersions = () => {
23316
23316
  if (typeof globalThis === "undefined") {
23317
23317
  return;
@@ -5977,7 +5977,7 @@ var useIsPlayer = () => {
5977
5977
  function truthy2(value) {
5978
5978
  return Boolean(value);
5979
5979
  }
5980
- var VERSION = "4.0.433";
5980
+ var VERSION = "4.0.435";
5981
5981
  var checkMultipleRemotionVersions = () => {
5982
5982
  if (typeof globalThis === "undefined") {
5983
5983
  return;
@@ -5977,7 +5977,7 @@ var useIsPlayer = () => {
5977
5977
  function truthy2(value) {
5978
5978
  return Boolean(value);
5979
5979
  }
5980
- var VERSION = "4.0.433";
5980
+ var VERSION = "4.0.435";
5981
5981
  var checkMultipleRemotionVersions = () => {
5982
5982
  if (typeof globalThis === "undefined") {
5983
5983
  return;
@@ -19911,6 +19911,7 @@ var listOfRemotionPackages = [
19911
19911
  "@remotion/astro-example",
19912
19912
  "@remotion/babel-loader",
19913
19913
  "@remotion/bugs",
19914
+ "@remotion/brand",
19914
19915
  "@remotion/bundler",
19915
19916
  "@remotion/cli",
19916
19917
  "@remotion/cloudrun",
@@ -19989,6 +19990,7 @@ var listOfRemotionPackages = [
19989
19990
  "@remotion/web-renderer",
19990
19991
  "@remotion/design",
19991
19992
  "@remotion/light-leaks",
19993
+ "@remotion/starburst",
19992
19994
  "@remotion/vercel",
19993
19995
  "@remotion/sfx"
19994
19996
  ];
package/dist/cn.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import { type ClassValue } from 'clsx';
2
+ export declare function cn(...inputs: ClassValue[]): string;
package/dist/cn.js ADDED
@@ -0,0 +1,5 @@
1
+ import { clsx } from 'clsx';
2
+ import { twMerge } from 'tailwind-merge';
3
+ export function cn(...inputs) {
4
+ return twMerge(clsx(inputs));
5
+ }
@@ -0,0 +1,2 @@
1
+ import React from 'react';
2
+ export declare const Button3D: React.FC<React.ButtonHTMLAttributes<HTMLButtonElement>>;
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useCallback, useRef, useState } from 'react';
3
+ import { cn } from '../../cn';
4
+ import { useHoverTransforms } from './hover-transforms';
5
+ import { Outer } from './Outer';
6
+ export const Button3D = ({ children, className, disabled, ...buttonProps }) => {
7
+ const [dimensions, setDimensions] = useState(null);
8
+ const ref = useRef(null);
9
+ const { isActive, progress } = useHoverTransforms(ref, Boolean(disabled));
10
+ const onPointerEnter = useCallback((e) => {
11
+ if (e.pointerType !== 'mouse') {
12
+ return;
13
+ }
14
+ setDimensions((prevDim) => {
15
+ if (prevDim) {
16
+ return prevDim;
17
+ }
18
+ if (!ref.current) {
19
+ throw new Error('Ref is not set');
20
+ }
21
+ const { childNodes } = ref.current;
22
+ if (childNodes.length === 0) {
23
+ throw new Error('No child nodes');
24
+ }
25
+ const childNode = childNodes[0];
26
+ if (!childNode) {
27
+ throw new Error('No child node');
28
+ }
29
+ const rect = childNode.getBoundingClientRect();
30
+ const { borderRadius } = getComputedStyle(childNode);
31
+ const cornerRadius = borderRadius.includes('e+0')
32
+ ? Infinity
33
+ : parseInt(borderRadius !== null && borderRadius !== void 0 ? borderRadius : '0', 10);
34
+ return {
35
+ width: rect.width,
36
+ height: rect.height,
37
+ borderRadius: Math.min(cornerRadius, rect.width / 2, rect.height / 2),
38
+ };
39
+ });
40
+ }, []);
41
+ const content = (_jsx("button", { type: "button", disabled: disabled, className: cn('text-black', 'flex', 'justify-center', 'bg-white', 'items-center', 'font-brand', 'border-solid', 'text-[1em]', 'rounded-md', 'border-black', 'border-2', 'border-b-4', 'cursor-pointer', 'px-4', 'py-3', 'disabled:cursor-default', 'disabled:border-gray-500', 'disabled:text-gray-500', 'transition-colors', className), ...buttonProps, children: children }));
42
+ return (_jsx("div", { ref: ref, className: "contents", onPointerEnter: onPointerEnter, children: dimensions && (isActive || progress > 0) ? (_jsx(Outer, { parentRef: ref, width: dimensions.width, height: dimensions.height, cornerRadius: dimensions.borderRadius, hoverTransform: progress, children: content })) : (content) }));
43
+ };
@@ -0,0 +1,5 @@
1
+ import type { FaceType } from '@remotion/svg-3d-engine';
2
+ import React from 'react';
3
+ export declare const Faces: React.FC<{
4
+ readonly elements: FaceType[];
5
+ }>;
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { threeDIntoSvgPath } from '@remotion/svg-3d-engine';
3
+ export const Faces = ({ elements, ...svgProps }) => {
4
+ return (_jsx(_Fragment, { children: elements.map(({ points, color, crispEdges }, idx) => {
5
+ return (_jsx("path", { d: threeDIntoSvgPath(points), fill: color, shapeRendering: crispEdges ? 'crispEdges' : undefined, ...svgProps }, idx));
6
+ }) }));
7
+ };
@@ -0,0 +1,8 @@
1
+ export declare const Outer: React.FC<{
2
+ children: React.ReactNode;
3
+ width: number;
4
+ height: number;
5
+ cornerRadius: number;
6
+ hoverTransform: number;
7
+ parentRef: React.RefObject<HTMLDivElement | null>;
8
+ }>;
@@ -0,0 +1,56 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { parsePath, PathInternals, reduceInstructions } from '@remotion/paths';
3
+ import { makeRect } from '@remotion/shapes';
4
+ import { extrudeAndTransformElement, interpolateMatrix4d, makeMatrix3dTransform, reduceMatrices, rotateX, rotateY, scaled, translateX, translateY, translateZ, } from '@remotion/svg-3d-engine';
5
+ import { interpolate } from 'remotion';
6
+ import { Faces } from './Faces';
7
+ import { useClickTransforms, useMousePosition } from './hover-transforms';
8
+ export const Outer = ({ children, width, height, cornerRadius, hoverTransform, parentRef }) => {
9
+ const clickTransform = useClickTransforms(parentRef);
10
+ const angle = useMousePosition(parentRef);
11
+ const appropriateScale = Math.min(1.1, (20 + width) / width);
12
+ const transformationUnhovered = reduceMatrices([
13
+ rotateX(-Math.PI / 20),
14
+ ]);
15
+ const transformationHovered = reduceMatrices([
16
+ scaled(appropriateScale),
17
+ rotateX(-Math.PI / 16),
18
+ rotateX(Math.sin(angle) / 4),
19
+ rotateY(-Math.cos(angle) / 4),
20
+ ]);
21
+ const transformation = interpolateMatrix4d(hoverTransform, transformationUnhovered, transformationHovered);
22
+ const depthFromClick = clickTransform * 15;
23
+ const depthFromHover = interpolate(hoverTransform, [0, 1], [10, 20]);
24
+ const depth = depthFromHover;
25
+ const frontFace = reduceMatrices([
26
+ translateZ(-depth / 2 + depthFromClick),
27
+ transformation,
28
+ ]);
29
+ const centerOriented = reduceMatrices([
30
+ translateX(-width / 2),
31
+ translateY(-height / 2),
32
+ transformation,
33
+ translateX(width / 2),
34
+ translateY(height / 2),
35
+ ]);
36
+ const { path, instructions } = makeRect({ height, width, cornerRadius });
37
+ const { viewBox } = PathInternals.getBoundingBoxFromInstructions(reduceInstructions(instructions));
38
+ const inbetween = extrudeAndTransformElement({
39
+ sideColor: 'black',
40
+ crispEdges: false,
41
+ depth,
42
+ pressInDepth: depthFromClick,
43
+ points: parsePath(path),
44
+ description: 'rect',
45
+ transformations: centerOriented,
46
+ });
47
+ return (_jsxs("div", { className: "relative", style: { width, height }, children: [_jsx("svg", { viewBox: viewBox, style: {
48
+ overflow: 'visible',
49
+ height,
50
+ width,
51
+ position: 'absolute',
52
+ top: 0,
53
+ }, pointerEvents: "none", children: _jsx(Faces, { elements: inbetween }) }), _jsx("div", { style: {
54
+ transform: makeMatrix3dTransform(frontFace),
55
+ }, children: children })] }));
56
+ };
@@ -0,0 +1,4 @@
1
+ export declare const Switch: React.FC<{
2
+ readonly active: boolean;
3
+ readonly onToggle: () => void;
4
+ }>;
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export const Switch = ({ active, onToggle }) => {
3
+ return (_jsx("div", { "data-active": active, className: "h-6 transition-all rounded-full w-12 border-2 border-b-4 bg-gray-200 p-[2px] cursor-pointer data-[active=true]:bg-brand border-black relative", onClick: onToggle, children: _jsx("div", { "data-active": active, className: "h-4 w-4 left-[4px] top-[4px] transition-all rounded-full bg-white border-2 border-black absolute data-[active=true]:left-[calc(100%-24px)]" }) }));
4
+ };
@@ -0,0 +1 @@
1
+ export declare const getChildNodeFrom: (htmlElement: HTMLDivElement | null) => HTMLElement | null;
@@ -0,0 +1,14 @@
1
+ export const getChildNodeFrom = (htmlElement) => {
2
+ if (!htmlElement) {
3
+ return null;
4
+ }
5
+ const { childNodes } = htmlElement;
6
+ if (childNodes.length === 0) {
7
+ return null;
8
+ }
9
+ const childNode = childNodes[0];
10
+ if (!childNode) {
11
+ return null;
12
+ }
13
+ return childNode;
14
+ };
@@ -0,0 +1,9 @@
1
+ import React from 'react';
2
+ type State = {
3
+ progress: number;
4
+ isActive: boolean;
5
+ };
6
+ export declare const useHoverTransforms: (ref: React.RefObject<HTMLDivElement | null>, disabled: boolean) => State;
7
+ export declare const useClickTransforms: (ref: React.RefObject<HTMLDivElement | null>) => number;
8
+ export declare const useMousePosition: (ref: React.RefObject<HTMLDivElement | null>) => number;
9
+ export {};
@@ -0,0 +1,177 @@
1
+ import React, { useEffect, useMemo, useState } from 'react';
2
+ import { getChildNodeFrom } from './get-child-node-from';
3
+ export const useHoverTransforms = (ref, disabled) => {
4
+ const [state, setState] = React.useState({
5
+ progress: 0,
6
+ isActive: false,
7
+ });
8
+ const eventTarget = useMemo(() => new EventTarget(), []);
9
+ useEffect(() => {
10
+ if (disabled) {
11
+ eventTarget.dispatchEvent(new Event('disabled'));
12
+ }
13
+ else {
14
+ eventTarget.dispatchEvent(new Event('enabled'));
15
+ }
16
+ }, [disabled, eventTarget]);
17
+ React.useEffect(() => {
18
+ const element = ref.current;
19
+ if (!element)
20
+ return;
21
+ let animationFrame;
22
+ let start = null;
23
+ let isHovered = false;
24
+ let internalDisabled = disabled;
25
+ const getIsActive = () => {
26
+ return isHovered && !internalDisabled;
27
+ };
28
+ const animate = (timestamp) => {
29
+ if (start === null)
30
+ start = timestamp;
31
+ const progress = Math.min((timestamp - start) / 150, 1);
32
+ setState(() => ({
33
+ isActive: getIsActive(),
34
+ progress: getIsActive() ? progress : 1 - progress,
35
+ }));
36
+ if (progress < 1) {
37
+ animationFrame = requestAnimationFrame(animate);
38
+ }
39
+ };
40
+ const animateIn = () => {
41
+ start = null;
42
+ cancelAnimationFrame(animationFrame);
43
+ animationFrame = requestAnimationFrame(animate);
44
+ };
45
+ const handleMouseEnter = () => {
46
+ const prevIsActive = getIsActive();
47
+ isHovered = true;
48
+ if (prevIsActive === getIsActive()) {
49
+ return;
50
+ }
51
+ animateIn();
52
+ };
53
+ const handleMouseLeave = () => {
54
+ const prevIsActive = getIsActive();
55
+ isHovered = false;
56
+ if (prevIsActive === getIsActive()) {
57
+ return;
58
+ }
59
+ animateIn();
60
+ };
61
+ const handleDisabled = () => {
62
+ const prevIsActive = getIsActive();
63
+ internalDisabled = true;
64
+ if (prevIsActive === getIsActive()) {
65
+ return;
66
+ }
67
+ animateIn();
68
+ };
69
+ const handleEnabled = () => {
70
+ const prevIsActive = getIsActive();
71
+ internalDisabled = false;
72
+ if (prevIsActive === getIsActive()) {
73
+ return;
74
+ }
75
+ animateIn();
76
+ };
77
+ element.addEventListener('mouseenter', handleMouseEnter);
78
+ element.addEventListener('mouseleave', handleMouseLeave);
79
+ eventTarget.addEventListener('disabled', handleDisabled);
80
+ eventTarget.addEventListener('enabled', handleEnabled);
81
+ return () => {
82
+ element.removeEventListener('mouseenter', handleMouseEnter);
83
+ element.removeEventListener('mouseleave', handleMouseLeave);
84
+ eventTarget.removeEventListener('disabled', handleDisabled);
85
+ eventTarget.removeEventListener('enabled', handleEnabled);
86
+ cancelAnimationFrame(animationFrame);
87
+ };
88
+ // eslint-disable-next-line react-hooks/exhaustive-deps
89
+ }, [ref, eventTarget]);
90
+ return state;
91
+ };
92
+ export const useClickTransforms = (ref) => {
93
+ const [hoverProgress, setHoverProgress] = React.useState(0);
94
+ React.useEffect(() => {
95
+ const element = getChildNodeFrom(ref.current);
96
+ if (!element) {
97
+ return;
98
+ }
99
+ let animationFrame;
100
+ let start = null;
101
+ let isHovered = false;
102
+ const animate = (timestamp) => {
103
+ if (start === null)
104
+ start = timestamp;
105
+ const progress = Math.min((timestamp - start) / 150, 1);
106
+ setHoverProgress(isHovered ? progress : 1 - progress);
107
+ if (progress < 1) {
108
+ animationFrame = requestAnimationFrame(animate);
109
+ }
110
+ };
111
+ const handleMouseEnter = () => {
112
+ isHovered = true;
113
+ start = null;
114
+ cancelAnimationFrame(animationFrame);
115
+ animationFrame = requestAnimationFrame(animate);
116
+ };
117
+ const handleMouseLeave = () => {
118
+ isHovered = false;
119
+ start = null;
120
+ cancelAnimationFrame(animationFrame);
121
+ animationFrame = requestAnimationFrame(animate);
122
+ };
123
+ element.addEventListener('pointerdown', handleMouseEnter);
124
+ element.addEventListener('pointerup', handleMouseLeave);
125
+ return () => {
126
+ element.removeEventListener('pointerdown', handleMouseEnter);
127
+ element.removeEventListener('pointerup', handleMouseLeave);
128
+ cancelAnimationFrame(animationFrame);
129
+ };
130
+ }, [ref]);
131
+ return hoverProgress;
132
+ };
133
+ const getAngle = (ref, coordinates) => {
134
+ const element = getChildNodeFrom(ref);
135
+ if (!element) {
136
+ return 0;
137
+ }
138
+ if (coordinates === null) {
139
+ return 0;
140
+ }
141
+ const clientRect = element.getClientRects();
142
+ if (!clientRect) {
143
+ return 0;
144
+ }
145
+ if (clientRect.length === 0) {
146
+ return 0;
147
+ }
148
+ const center = {
149
+ x: clientRect[0].x + clientRect[0].width / 2,
150
+ y: clientRect[0].y + clientRect[0].height / 2,
151
+ };
152
+ const angle = Math.atan2(coordinates.y - center.y, coordinates.x - center.x);
153
+ return angle;
154
+ };
155
+ let lastCoordinates = null;
156
+ export const useMousePosition = (ref) => {
157
+ const [angle, setAngle] = useState(getAngle(ref.current, lastCoordinates));
158
+ useEffect(() => {
159
+ const element = ref.current;
160
+ if (!element) {
161
+ return;
162
+ }
163
+ const onMouseMove = (e) => {
164
+ const clientRect = element.getClientRects();
165
+ if (!clientRect) {
166
+ return;
167
+ }
168
+ lastCoordinates = { y: e.clientY, x: e.clientX };
169
+ setAngle(getAngle(element, { y: e.clientY, x: e.clientX }));
170
+ };
171
+ window.addEventListener('mousemove', onMouseMove);
172
+ return () => {
173
+ window.removeEventListener('mousemove', onMouseMove);
174
+ };
175
+ }, [ref]);
176
+ return angle;
177
+ };
@@ -0,0 +1,6 @@
1
+ import React from 'react';
2
+ export declare const BackButton: React.FC<{
3
+ readonly color: string;
4
+ readonly text: string;
5
+ readonly link: string;
6
+ }>;