@remotion/promo-pages 4.0.430 → 4.0.432

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 (304) hide show
  1. package/dist/Homepage.js +52617 -50097
  2. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/Homepage.js +52617 -50097
  3. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/design.js +410 -219
  4. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/experts/experts-data.js +15 -0
  5. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/experts.js +264 -74
  6. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/homepage/Pricing.js +410 -219
  7. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsGallery.js +410 -219
  8. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsShow.js +410 -219
  9. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/prompts/PromptsSubmit.js +410 -219
  10. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/team.js +15 -0
  11. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/template-modal-content.js +410 -219
  12. package/dist/Users/jonathanburger/remotion/packages/promo-pages/dist/templates.js +410 -219
  13. package/dist/design.js +410 -219
  14. package/dist/experts/experts-data.js +15 -0
  15. package/dist/experts.js +264 -74
  16. package/dist/homepage/Pricing.js +410 -219
  17. package/dist/prompts/PromptsGallery.js +410 -219
  18. package/dist/prompts/PromptsShow.js +410 -219
  19. package/dist/prompts/PromptsSubmit.js +410 -219
  20. package/dist/team.js +15 -0
  21. package/dist/template-modal-content.js +410 -219
  22. package/dist/templates.js +410 -219
  23. package/package.json +13 -13
  24. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/Homepage.css +0 -32
  25. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/Homepage.js +0 -63571
  26. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/design.js +0 -20053
  27. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/experts/experts-data.js +0 -689
  28. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/experts.js +0 -8378
  29. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/homepage/Pricing.js +0 -21502
  30. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/prompts/PromptsGallery.js +0 -19934
  31. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/prompts/PromptsShow.css +0 -2578
  32. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/prompts/PromptsShow.js +0 -39755
  33. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/prompts/PromptsSubmit.css +0 -2578
  34. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/prompts/PromptsSubmit.js +0 -39846
  35. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/prompts/prompt-types.js +0 -0
  36. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/team.js +0 -292
  37. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/template-modal-content.css +0 -32
  38. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/template-modal-content.js +0 -21671
  39. package/dist/Users/jonathanburger/remotion2/packages/promo-pages/dist/templates.js +0 -21014
  40. package/dist/cn.d.ts +0 -2
  41. package/dist/cn.js +0 -5
  42. package/dist/components/3DEngine/ButtonDemo.d.ts +0 -2
  43. package/dist/components/3DEngine/ButtonDemo.js +0 -43
  44. package/dist/components/3DEngine/Faces.d.ts +0 -5
  45. package/dist/components/3DEngine/Faces.js +0 -7
  46. package/dist/components/3DEngine/Outer.d.ts +0 -8
  47. package/dist/components/3DEngine/Outer.js +0 -56
  48. package/dist/components/3DEngine/Switch.d.ts +0 -4
  49. package/dist/components/3DEngine/Switch.js +0 -4
  50. package/dist/components/3DEngine/get-child-node-from.d.ts +0 -1
  51. package/dist/components/3DEngine/get-child-node-from.js +0 -14
  52. package/dist/components/3DEngine/hover-transforms.d.ts +0 -9
  53. package/dist/components/3DEngine/hover-transforms.js +0 -177
  54. package/dist/components/BackButton.d.ts +0 -6
  55. package/dist/components/BackButton.js +0 -9
  56. package/dist/components/CommandCopyButton.d.ts +0 -5
  57. package/dist/components/CommandCopyButton.js +0 -4
  58. package/dist/components/Homepage.d.ts +0 -6
  59. package/dist/components/Homepage.js +0 -20
  60. package/dist/components/ManageTeamMembers.d.ts +0 -2
  61. package/dist/components/ManageTeamMembers.js +0 -42
  62. package/dist/components/Spinner.d.ts +0 -3
  63. package/dist/components/Spinner.js +0 -4
  64. package/dist/components/TeamPicture.d.ts +0 -1
  65. package/dist/components/TeamPicture.js +0 -4
  66. package/dist/components/design.d.ts +0 -1
  67. package/dist/components/design.js +0 -33
  68. package/dist/components/experts/ExpertsPage.d.ts +0 -11
  69. package/dist/components/experts/ExpertsPage.js +0 -50
  70. package/dist/components/experts/experts-data.d.ts +0 -15
  71. package/dist/components/experts/experts-data.js +0 -263
  72. package/dist/components/experts/experts-icons.d.ts +0 -7
  73. package/dist/components/experts/experts-icons.js +0 -36
  74. package/dist/components/experts.d.ts +0 -3
  75. package/dist/components/experts.js +0 -2
  76. package/dist/components/homepage/BackgroundAnimation.d.ts +0 -2
  77. package/dist/components/homepage/BackgroundAnimation.js +0 -66
  78. package/dist/components/homepage/ChooseTemplate.d.ts +0 -2
  79. package/dist/components/homepage/ChooseTemplate.js +0 -25
  80. package/dist/components/homepage/CommunityStats.d.ts +0 -3
  81. package/dist/components/homepage/CommunityStats.js +0 -6
  82. package/dist/components/homepage/CommunityStatsItems.d.ts +0 -7
  83. package/dist/components/homepage/CommunityStatsItems.js +0 -58
  84. package/dist/components/homepage/Demo/Card.d.ts +0 -15
  85. package/dist/components/homepage/Demo/Card.js +0 -174
  86. package/dist/components/homepage/Demo/Cards.d.ts +0 -15
  87. package/dist/components/homepage/Demo/Cards.js +0 -57
  88. package/dist/components/homepage/Demo/Comp.d.ts +0 -38
  89. package/dist/components/homepage/Demo/Comp.js +0 -72
  90. package/dist/components/homepage/Demo/CurrentCountry.d.ts +0 -9
  91. package/dist/components/homepage/Demo/CurrentCountry.js +0 -48
  92. package/dist/components/homepage/Demo/DemoError.d.ts +0 -2
  93. package/dist/components/homepage/Demo/DemoError.js +0 -10
  94. package/dist/components/homepage/Demo/DemoErrorIcon.d.ts +0 -2
  95. package/dist/components/homepage/Demo/DemoErrorIcon.js +0 -16
  96. package/dist/components/homepage/Demo/DemoRender.d.ts +0 -33
  97. package/dist/components/homepage/Demo/DemoRender.js +0 -107
  98. package/dist/components/homepage/Demo/DigitWheel.d.ts +0 -9
  99. package/dist/components/homepage/Demo/DigitWheel.js +0 -94
  100. package/dist/components/homepage/Demo/DisplayedEmoji.d.ts +0 -5
  101. package/dist/components/homepage/Demo/DisplayedEmoji.js +0 -59
  102. package/dist/components/homepage/Demo/DoneCheckmark.d.ts +0 -2
  103. package/dist/components/homepage/Demo/DoneCheckmark.js +0 -20
  104. package/dist/components/homepage/Demo/DownloadNudge.d.ts +0 -2
  105. package/dist/components/homepage/Demo/DownloadNudge.js +0 -27
  106. package/dist/components/homepage/Demo/DragAndDropNudge.d.ts +0 -3
  107. package/dist/components/homepage/Demo/DragAndDropNudge.js +0 -26
  108. package/dist/components/homepage/Demo/EmojiCard.d.ts +0 -10
  109. package/dist/components/homepage/Demo/EmojiCard.js +0 -120
  110. package/dist/components/homepage/Demo/Minus.d.ts +0 -5
  111. package/dist/components/homepage/Demo/Minus.js +0 -11
  112. package/dist/components/homepage/Demo/PlayPauseButton.d.ts +0 -5
  113. package/dist/components/homepage/Demo/PlayPauseButton.js +0 -47
  114. package/dist/components/homepage/Demo/PlayerControls.d.ts +0 -8
  115. package/dist/components/homepage/Demo/PlayerControls.js +0 -15
  116. package/dist/components/homepage/Demo/PlayerSeekBar.d.ts +0 -11
  117. package/dist/components/homepage/Demo/PlayerSeekBar.js +0 -216
  118. package/dist/components/homepage/Demo/PlayerVolume.d.ts +0 -5
  119. package/dist/components/homepage/Demo/PlayerVolume.js +0 -53
  120. package/dist/components/homepage/Demo/Progress.d.ts +0 -4
  121. package/dist/components/homepage/Demo/Progress.js +0 -14
  122. package/dist/components/homepage/Demo/Spinner.d.ts +0 -5
  123. package/dist/components/homepage/Demo/Spinner.js +0 -37
  124. package/dist/components/homepage/Demo/Switcher.d.ts +0 -6
  125. package/dist/components/homepage/Demo/Switcher.js +0 -25
  126. package/dist/components/homepage/Demo/Temperature.d.ts +0 -6
  127. package/dist/components/homepage/Demo/Temperature.js +0 -21
  128. package/dist/components/homepage/Demo/TemperatureNumber.d.ts +0 -5
  129. package/dist/components/homepage/Demo/TemperatureNumber.js +0 -36
  130. package/dist/components/homepage/Demo/ThemeNudge.d.ts +0 -3
  131. package/dist/components/homepage/Demo/ThemeNudge.js +0 -35
  132. package/dist/components/homepage/Demo/TimeDisplay.d.ts +0 -6
  133. package/dist/components/homepage/Demo/TimeDisplay.js +0 -27
  134. package/dist/components/homepage/Demo/TrendingRepos.d.ts +0 -6
  135. package/dist/components/homepage/Demo/TrendingRepos.js +0 -65
  136. package/dist/components/homepage/Demo/icons.d.ts +0 -10
  137. package/dist/components/homepage/Demo/icons.js +0 -22
  138. package/dist/components/homepage/Demo/index.d.ts +0 -2
  139. package/dist/components/homepage/Demo/index.js +0 -95
  140. package/dist/components/homepage/Demo/math.d.ts +0 -10
  141. package/dist/components/homepage/Demo/math.js +0 -29
  142. package/dist/components/homepage/Demo/types.d.ts +0 -6
  143. package/dist/components/homepage/Demo/types.js +0 -0
  144. package/dist/components/homepage/EditorStarterSection.d.ts +0 -3
  145. package/dist/components/homepage/EditorStarterSection.js +0 -8
  146. package/dist/components/homepage/EvaluateRemotion.d.ts +0 -3
  147. package/dist/components/homepage/EvaluateRemotion.js +0 -21
  148. package/dist/components/homepage/FreePricing.d.ts +0 -4
  149. package/dist/components/homepage/FreePricing.js +0 -134
  150. package/dist/components/homepage/GetStartedStrip.d.ts +0 -2
  151. package/dist/components/homepage/GetStartedStrip.js +0 -14
  152. package/dist/components/homepage/GitHubButton.d.ts +0 -2
  153. package/dist/components/homepage/GitHubButton.js +0 -7
  154. package/dist/components/homepage/IconForTemplate.d.ts +0 -6
  155. package/dist/components/homepage/IconForTemplate.js +0 -101
  156. package/dist/components/homepage/IfYouKnowReact.d.ts +0 -3
  157. package/dist/components/homepage/IfYouKnowReact.js +0 -23
  158. package/dist/components/homepage/InfoTooltip.d.ts +0 -6
  159. package/dist/components/homepage/InfoTooltip.js +0 -6
  160. package/dist/components/homepage/MoreTemplatesButton.d.ts +0 -2
  161. package/dist/components/homepage/MoreTemplatesButton.js +0 -11
  162. package/dist/components/homepage/MuxVideo.d.ts +0 -7
  163. package/dist/components/homepage/MuxVideo.js +0 -45
  164. package/dist/components/homepage/NewsletterButton.d.ts +0 -2
  165. package/dist/components/homepage/NewsletterButton.js +0 -38
  166. package/dist/components/homepage/ParameterizeAndEdit.d.ts +0 -2
  167. package/dist/components/homepage/ParameterizeAndEdit.js +0 -22
  168. package/dist/components/homepage/Pricing.d.ts +0 -2
  169. package/dist/components/homepage/Pricing.js +0 -15
  170. package/dist/components/homepage/PricingBulletPoint.d.ts +0 -6
  171. package/dist/components/homepage/PricingBulletPoint.js +0 -19
  172. package/dist/components/homepage/RealMp4Videos.d.ts +0 -2
  173. package/dist/components/homepage/RealMp4Videos.js +0 -41
  174. package/dist/components/homepage/Spacer.d.ts +0 -2
  175. package/dist/components/homepage/Spacer.js +0 -4
  176. package/dist/components/homepage/TemplateIcon.d.ts +0 -5
  177. package/dist/components/homepage/TemplateIcon.js +0 -24
  178. package/dist/components/homepage/TextInput.d.ts +0 -7
  179. package/dist/components/homepage/TextInput.js +0 -34
  180. package/dist/components/homepage/TrustedByBanner.d.ts +0 -2
  181. package/dist/components/homepage/TrustedByBanner.js +0 -27
  182. package/dist/components/homepage/VideoApps.d.ts +0 -4
  183. package/dist/components/homepage/VideoApps.js +0 -72
  184. package/dist/components/homepage/VideoAppsShowcase.d.ts +0 -3
  185. package/dist/components/homepage/VideoAppsShowcase.js +0 -139
  186. package/dist/components/homepage/VideoAppsTitle.d.ts +0 -4
  187. package/dist/components/homepage/VideoAppsTitle.js +0 -4
  188. package/dist/components/homepage/VideoPlayerWithControls.d.ts +0 -20
  189. package/dist/components/homepage/VideoPlayerWithControls.js +0 -105
  190. package/dist/components/homepage/WriteInReact.d.ts +0 -2
  191. package/dist/components/homepage/WriteInReact.js +0 -10
  192. package/dist/components/homepage/YouAreHere.d.ts +0 -2
  193. package/dist/components/homepage/YouAreHere.js +0 -23
  194. package/dist/components/homepage/layout/Button.d.ts +0 -22
  195. package/dist/components/homepage/layout/Button.js +0 -30
  196. package/dist/components/homepage/layout/colors.d.ts +0 -13
  197. package/dist/components/homepage/layout/colors.js +0 -14
  198. package/dist/components/homepage/layout/use-color-mode.d.ts +0 -21
  199. package/dist/components/homepage/layout/use-color-mode.js +0 -22
  200. package/dist/components/homepage/layout/use-el-size.d.ts +0 -5
  201. package/dist/components/homepage/layout/use-el-size.js +0 -40
  202. package/dist/components/homepage/layout/use-mobile-layout.d.ts +0 -1
  203. package/dist/components/homepage/layout/use-mobile-layout.js +0 -6
  204. package/dist/components/icons/blank.d.ts +0 -3
  205. package/dist/components/icons/blank.js +0 -4
  206. package/dist/components/icons/brain.d.ts +0 -2
  207. package/dist/components/icons/brain.js +0 -4
  208. package/dist/components/icons/clone.d.ts +0 -2
  209. package/dist/components/icons/clone.js +0 -2
  210. package/dist/components/icons/code-hike.d.ts +0 -3
  211. package/dist/components/icons/code-hike.js +0 -4
  212. package/dist/components/icons/cubes.d.ts +0 -3
  213. package/dist/components/icons/cubes.js +0 -4
  214. package/dist/components/icons/editor.d.ts +0 -3
  215. package/dist/components/icons/editor.js +0 -4
  216. package/dist/components/icons/js.d.ts +0 -3
  217. package/dist/components/icons/js.js +0 -4
  218. package/dist/components/icons/music.d.ts +0 -2
  219. package/dist/components/icons/music.js +0 -4
  220. package/dist/components/icons/next.d.ts +0 -4
  221. package/dist/components/icons/next.js +0 -4
  222. package/dist/components/icons/overlay.d.ts +0 -3
  223. package/dist/components/icons/overlay.js +0 -4
  224. package/dist/components/icons/prompt-to-video.d.ts +0 -2
  225. package/dist/components/icons/prompt-to-video.js +0 -4
  226. package/dist/components/icons/recorder.d.ts +0 -3
  227. package/dist/components/icons/recorder.js +0 -4
  228. package/dist/components/icons/remix.d.ts +0 -3
  229. package/dist/components/icons/remix.js +0 -4
  230. package/dist/components/icons/render-server.d.ts +0 -3
  231. package/dist/components/icons/render-server.js +0 -4
  232. package/dist/components/icons/skia.d.ts +0 -3
  233. package/dist/components/icons/skia.js +0 -4
  234. package/dist/components/icons/stargazer.d.ts +0 -3
  235. package/dist/components/icons/stargazer.js +0 -4
  236. package/dist/components/icons/still.d.ts +0 -3
  237. package/dist/components/icons/still.js +0 -4
  238. package/dist/components/icons/tailwind.d.ts +0 -3
  239. package/dist/components/icons/tailwind.js +0 -4
  240. package/dist/components/icons/tiktok.d.ts +0 -3
  241. package/dist/components/icons/tiktok.js +0 -4
  242. package/dist/components/icons/timeline.d.ts +0 -3
  243. package/dist/components/icons/timeline.js +0 -4
  244. package/dist/components/icons/ts.d.ts +0 -3
  245. package/dist/components/icons/ts.js +0 -4
  246. package/dist/components/icons/tts.d.ts +0 -3
  247. package/dist/components/icons/tts.js +0 -4
  248. package/dist/components/icons/undo.d.ts +0 -3
  249. package/dist/components/icons/undo.js +0 -2
  250. package/dist/components/icons/vercel.d.ts +0 -4
  251. package/dist/components/icons/vercel.js +0 -4
  252. package/dist/components/icons/waveform.d.ts +0 -3
  253. package/dist/components/icons/waveform.js +0 -4
  254. package/dist/components/prompts/CardLikeButton.d.ts +0 -5
  255. package/dist/components/prompts/CardLikeButton.js +0 -49
  256. package/dist/components/prompts/ClipboardIcon.d.ts +0 -5
  257. package/dist/components/prompts/ClipboardIcon.js +0 -4
  258. package/dist/components/prompts/CopyPromptButton.d.ts +0 -4
  259. package/dist/components/prompts/CopyPromptButton.js +0 -13
  260. package/dist/components/prompts/LikeButton.d.ts +0 -5
  261. package/dist/components/prompts/LikeButton.js +0 -49
  262. package/dist/components/prompts/MuxPlayer.d.ts +0 -8
  263. package/dist/components/prompts/MuxPlayer.js +0 -21
  264. package/dist/components/prompts/NewBackButton.d.ts +0 -5
  265. package/dist/components/prompts/NewBackButton.js +0 -8
  266. package/dist/components/prompts/Page.d.ts +0 -8
  267. package/dist/components/prompts/Page.js +0 -7
  268. package/dist/components/prompts/PromptsGallery.d.ts +0 -7
  269. package/dist/components/prompts/PromptsGallery.js +0 -60
  270. package/dist/components/prompts/PromptsShow.d.ts +0 -5
  271. package/dist/components/prompts/PromptsShow.js +0 -17
  272. package/dist/components/prompts/PromptsSubmit.d.ts +0 -2
  273. package/dist/components/prompts/PromptsSubmit.js +0 -173
  274. package/dist/components/prompts/config.d.ts +0 -1
  275. package/dist/components/prompts/config.js +0 -1
  276. package/dist/components/prompts/prompt-helpers.d.ts +0 -8
  277. package/dist/components/prompts/prompt-helpers.js +0 -76
  278. package/dist/components/prompts/prompt-types.d.ts +0 -14
  279. package/dist/components/prompts/prompt-types.js +0 -0
  280. package/dist/components/prompts/use-heart-animation.d.ts +0 -5
  281. package/dist/components/prompts/use-heart-animation.js +0 -29
  282. package/dist/components/team/TeamCards.d.ts +0 -6
  283. package/dist/components/team/TeamCards.js +0 -19
  284. package/dist/components/team/TitleTeamCards.d.ts +0 -2
  285. package/dist/components/team/TitleTeamCards.js +0 -6
  286. package/dist/components/team.d.ts +0 -3
  287. package/dist/components/team.js +0 -14
  288. package/dist/components/template-modal-content.d.ts +0 -5
  289. package/dist/components/template-modal-content.js +0 -73
  290. package/dist/components/templates.d.ts +0 -2
  291. package/dist/components/templates.js +0 -27
  292. package/dist/helpers/mobile-layout.d.ts +0 -1
  293. package/dist/helpers/mobile-layout.js +0 -6
  294. package/dist/helpers/use-el-size.d.ts +0 -5
  295. package/dist/helpers/use-el-size.js +0 -40
  296. package/dist/main.d.ts +0 -1
  297. package/dist/main.js +0 -6
  298. package/dist/prompts-show.d.ts +0 -1
  299. package/dist/prompts-show.js +0 -20
  300. package/dist/prompts-submit.d.ts +0 -1
  301. package/dist/prompts-submit.js +0 -6
  302. package/dist/prompts.d.ts +0 -1
  303. package/dist/prompts.js +0 -6
  304. package/dist/team.d.ts +0 -1
@@ -1,3 +0,0 @@
1
- import type { SVGProps } from 'react';
2
- import React from 'react';
3
- export declare const UndoIcon: React.FC<SVGProps<SVGSVGElement>>;
@@ -1,2 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- export const UndoIcon = (props) => (_jsx("svg", { viewBox: "0 0 512 512", ...props, children: _jsx("path", { fill: "currentcolor", d: "M48.5 224L40 224c-13.3 0-24-10.7-24-24L16 72c0-9.7 5.8-18.5 14.8-22.2s19.3-1.7 26.2 5.2L98.6 96.6c87.6-86.5 228.7-86.2 315.8 1c87.5 87.5 87.5 229.3 0 316.8s-229.3 87.5-316.8 0c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0c62.5 62.5 163.8 62.5 226.3 0s62.5-163.8 0-226.3c-62.2-62.2-162.7-62.5-225.3-1L185 183c6.9 6.9 8.9 17.2 5.2 26.2s-12.5 14.8-22.2 14.8L48.5 224z" }) }));
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- export declare const VercelIcon: React.FC<{
3
- readonly style: React.CSSProperties;
4
- }>;
@@ -1,4 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- export const VercelIcon = ({ style }) => {
3
- return (_jsx("svg", { fill: "currentcolor", viewBox: "0 0 76 65", style: style, xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M37.5274 0L75.0548 65H0L37.5274 0Z" }) }));
4
- };
@@ -1,3 +0,0 @@
1
- import type { SVGProps } from 'react';
2
- import React from 'react';
3
- export declare const Waveform: React.FC<SVGProps<SVGSVGElement>>;
@@ -1,4 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- export const Waveform = (props) => {
3
- return (_jsx("svg", { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 640 512", ...props, children: _jsx("path", { fill: "currentColor", d: "M224 96C215.2 96 208 103.2 208 111.1v288C208 408.8 215.2 416 223.1 416C232.8 416 240 408.8 240 400V111.1C240 103.2 232.8 96 224 96zM128 192C119.2 192 112 199.2 112 207.1V304C112 312.8 119.2 320 127.1 320S144 312.8 144 304V207.1C144 199.2 136.8 192 128 192zM32 224C23.2 224 16 231.2 16 239.1V272C16 280.8 23.2 288 31.1 288S48 280.8 48 272V239.1C48 231.2 40.8 224 32 224zM416 128C407.2 128 400 135.2 400 143.1v224C400 376.8 407.2 384 415.1 384S432 376.8 432 368V143.1C432 135.2 424.8 128 416 128zM608 224c-8.8 0-16 7.2-16 15.1V272C592 280.8 599.2 288 608 288s16-7.2 16-15.1V239.1C624 231.2 616.8 224 608 224zM512 64c-8.8 0-16 7.2-16 15.1V432C496 440.8 503.2 448 511.1 448C520.8 448 528 440.8 528 432V79.1C528 71.2 520.8 64 512 64zM320 0C311.2 0 304 7.2 304 15.1V496C304 504.8 311.2 512 319.1 512S336 504.8 336 496V15.1C336 7.2 328.8 0 320 0z" }) }));
4
- };
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const CardLikeButton: React.FC<{
3
- readonly submissionId: string;
4
- readonly initialLikeCount: number;
5
- }>;
@@ -1,49 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Heart } from '@remotion/shapes';
3
- import { useCallback, useEffect, useState } from 'react';
4
- import { REMOTION_PRO_ORIGIN } from './config';
5
- import { formatLikeCount, getLikedIds, removeLikedId, saveLikedId, } from './prompt-helpers';
6
- import { useHeartAnimation } from './use-heart-animation';
7
- export const CardLikeButton = ({ submissionId, initialLikeCount }) => {
8
- const [liked, setLiked] = useState(false);
9
- const [likeCount, setLikeCount] = useState(initialLikeCount);
10
- const { scale, roundness, animate } = useHeartAnimation();
11
- useEffect(() => {
12
- setLiked(getLikedIds().has(submissionId));
13
- }, [submissionId]);
14
- const onClick = useCallback(async (e) => {
15
- e.preventDefault();
16
- if (liked) {
17
- setLiked(false);
18
- setLikeCount((c) => c - 1);
19
- removeLikedId(submissionId);
20
- try {
21
- await fetch(`${REMOTION_PRO_ORIGIN}/api/prompts/unlike`, {
22
- method: 'POST',
23
- headers: { 'content-type': 'application/json' },
24
- body: JSON.stringify({ submissionId }),
25
- });
26
- }
27
- catch (_a) {
28
- // Optimistic
29
- }
30
- }
31
- else {
32
- animate();
33
- setLiked(true);
34
- setLikeCount((c) => c + 1);
35
- saveLikedId(submissionId);
36
- try {
37
- await fetch(`${REMOTION_PRO_ORIGIN}/api/prompts/like`, {
38
- method: 'POST',
39
- headers: { 'content-type': 'application/json' },
40
- body: JSON.stringify({ submissionId }),
41
- });
42
- }
43
- catch (_b) {
44
- // Optimistic
45
- }
46
- }
47
- }, [liked, submissionId, animate]);
48
- return (_jsxs("button", { onClick: onClick, className: "flex items-center bg-transparent border-none cursor-pointer p-0", type: "button", children: [_jsx(Heart, { height: 16, fill: liked ? 'var(--color-brand)' : 'none', stroke: liked ? 'var(--color-brand)' : 'var(--text-color)', strokeWidth: 2, bottomRoundnessAdjustment: roundness, style: { transform: `scale(${scale})`, marginTop: 2 } }), _jsx("span", { className: "font-brand font-medium data-[liked=true]:text-brand data-[liked=false]:text-text", "data-liked": liked, style: { marginLeft: 8, flex: 1 }, children: formatLikeCount(likeCount) })] }));
49
- };
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const ClipboardIcon: React.FC<{
3
- readonly size?: number;
4
- readonly color?: string;
5
- }>;
@@ -1,4 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- export const ClipboardIcon = ({ size = 16, color = 'currentColor' }) => {
3
- return (_jsx("svg", { width: size, height: size, viewBox: "0 0 448 512", fill: color, xmlns: "http://www.w3.org/2000/svg", children: _jsx("path", { d: "M193.8 57.5c4.5-33.1 42.1-29 51 2 3.1 11.3 4.6 23.4 5.2 36.5l-60.1 0c.8-13.8 2.1-27.5 3.9-38.5zM303.1 32.4c-28.6-78.7-141.6-84.6-168.4-2-1-.1-52.9 .6-53.9 .6-83.2 4.6-88.7 75.4-86.5 143l0 1.5c-.8 85.3-5.3 182.8 8.1 262.5 1.6 36.1 28.4 68.6 66.9 71.6 86.7 9.3 178.9 6.3 266.1 .3 55 3.5 106.6-13.8 106.2-76.2-.7-18.9-.6-35.3 1-47.3 5.8-92.7 3.3-165.2-.5-267.9-1.7-46.5-39.3-83.6-85.8-84.8l-53.2-1.3zm10.9 64.3c20.6 2.3 62.6-7.6 64.1 24.2 3.8 102.5 6.2 171.9 .7 260.5-3.9 17.9 2 43.3-3.2 61.1-10.9 4.9-24.9 1.6-38.4 3.2-87.3 5.5-171.5 9.8-262.7 0-3.3-.3-7.2-3.2-7.7-8.6-13.6-84.2-9.3-175.1-8.5-260.2 5-25.2-12.6-79.3 23.2-82l44.4-.5c-2.6 27.2-4.4 64.6 31.1 65.5l125.3 0c34.4-.6 33.8-37 31.7-63.3z" }) }));
4
- };
@@ -1,4 +0,0 @@
1
- import React from 'react';
2
- export declare const CopyPromptButton: React.FC<{
3
- readonly prompt: string;
4
- }>;
@@ -1,13 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button } from '@remotion/design';
3
- import { useCallback, useState } from 'react';
4
- import { ClipboardIcon } from './ClipboardIcon';
5
- export const CopyPromptButton = ({ prompt }) => {
6
- const [copied, setCopied] = useState(false);
7
- const onCopy = useCallback(() => {
8
- navigator.clipboard.writeText(prompt);
9
- setCopied(true);
10
- setTimeout(() => setCopied(false), 2000);
11
- }, [prompt]);
12
- return (_jsx(Button, { className: "font-brand rounded-full flex items-center ", onClick: onCopy, style: { width: 160 }, depth: 0.6, children: _jsxs("div", { className: "flex items-center flex-row flex-1 w-[130px]", children: [_jsx(ClipboardIcon, { size: 20 }), _jsx("div", { className: "w-2" }), _jsx("div", { style: { fontSize: 14, flex: 1, textAlign: 'center' }, children: copied ? 'Copied prompt!' : 'Copy prompt' })] }) }));
13
- };
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const LikeButton: React.FC<{
3
- readonly submissionId: string;
4
- readonly initialLikeCount: number;
5
- }>;
@@ -1,49 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button } from '@remotion/design';
3
- import { Heart } from '@remotion/shapes';
4
- import { useCallback, useEffect, useState } from 'react';
5
- import { REMOTION_PRO_ORIGIN } from './config';
6
- import { formatLikeCount, getLikedIds, removeLikedId, saveLikedId, } from './prompt-helpers';
7
- import { useHeartAnimation } from './use-heart-animation';
8
- export const LikeButton = ({ submissionId, initialLikeCount }) => {
9
- const [liked, setLiked] = useState(false);
10
- const [likeCount, setLikeCount] = useState(initialLikeCount);
11
- const { scale, roundness, animate } = useHeartAnimation();
12
- useEffect(() => {
13
- setLiked(getLikedIds().has(submissionId));
14
- }, [submissionId]);
15
- const onClick = useCallback(async () => {
16
- if (liked) {
17
- setLiked(false);
18
- setLikeCount((c) => c - 1);
19
- removeLikedId(submissionId);
20
- try {
21
- await fetch(`${REMOTION_PRO_ORIGIN}/api/prompts/unlike`, {
22
- method: 'POST',
23
- headers: { 'content-type': 'application/json' },
24
- body: JSON.stringify({ submissionId }),
25
- });
26
- }
27
- catch (_a) {
28
- // Optimistic
29
- }
30
- }
31
- else {
32
- animate();
33
- setLiked(true);
34
- setLikeCount((c) => c + 1);
35
- saveLikedId(submissionId);
36
- try {
37
- await fetch(`${REMOTION_PRO_ORIGIN}/api/prompts/like`, {
38
- method: 'POST',
39
- headers: { 'content-type': 'application/json' },
40
- body: JSON.stringify({ submissionId }),
41
- });
42
- }
43
- catch (_b) {
44
- // Optimistic
45
- }
46
- }
47
- }, [liked, submissionId, animate]);
48
- return (_jsx(Button, { className: `font-brand rounded-full flex items-center ${liked ? 'bg-brand text-white' : ''}`, onClick: onClick, style: { width: 90 }, children: _jsxs("div", { className: "flex items-center flex-row flex-1 w-[40px] justify-center", children: [_jsx(Heart, { height: 14, fill: liked ? 'white' : 'none', stroke: liked ? 'white' : 'var(--text-color)', strokeWidth: 2, bottomRoundnessAdjustment: roundness, style: { transform: `scale(${scale})` } }), _jsx("span", { style: { fontSize: 15, marginLeft: 10 }, children: formatLikeCount(likeCount) })] }) }));
49
- };
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- import '@vidstack/react/player/styles/default/layouts/video.css';
3
- import '@vidstack/react/player/styles/default/theme.css';
4
- export declare const MuxPlayer: React.FC<{
5
- readonly playbackId: string;
6
- readonly title?: string;
7
- readonly rounded?: boolean;
8
- }>;
@@ -1,21 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { isHLSProvider, MediaPlayer, MediaProvider, } from '@vidstack/react';
3
- import { defaultLayoutIcons, DefaultVideoLayout, } from '@vidstack/react/player/layouts/default';
4
- import { useCallback } from 'react';
5
- import '@vidstack/react/player/styles/default/layouts/video.css';
6
- import '@vidstack/react/player/styles/default/theme.css';
7
- export const MuxPlayer = ({ playbackId, title, rounded = true }) => {
8
- const onProviderChange = useCallback((provider, _e) => {
9
- if (isHLSProvider(provider)) {
10
- // @ts-expect-error - hls.js is not typed
11
- provider.library = () => import('hls.js');
12
- }
13
- }, []);
14
- return (_jsxs(MediaPlayer, { src: `https://stream.mux.com/${playbackId}.m3u8`, crossOrigin: true, playsInline: true, autoPlay: true, muted: true, title: title, className: `w-full aspect-video bg-black overflow-hidden ${rounded ? 'rounded' : ''}`, onProviderChange: onProviderChange, children: [_jsx(MediaProvider, {}), _jsx(DefaultVideoLayout, { icons: defaultLayoutIcons, slots: {
15
- captionButton: null,
16
- pipButton: null,
17
- airPlayButton: null,
18
- googleCastButton: null,
19
- settingsMenu: null,
20
- } })] }));
21
- };
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- export declare const NewBackButton: React.FC<{
3
- readonly text: string;
4
- readonly link: string;
5
- }>;
@@ -1,8 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button } from '@remotion/design';
3
- export const NewBackButton = ({ text, link }) => {
4
- return (_jsx("div", { className: "justify-center items-center font-medium mb-4 block text-text", style: {
5
- fontFamily: 'GTPlanar',
6
- fontWeight: 500,
7
- }, children: _jsx(Button, { href: link, className: "px-8 rounded-full text-sm h-10", children: _jsxs("div", { className: "flex row items-center justify-start font-normal", children: [_jsx("svg", { className: "h-4 mr-[8px] inline-block text-text", xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 448 512", children: _jsx("path", { fill: "currentcolor", d: "M9.4 233.4c-12.5 12.5-12.5 32.8 0 45.3l160 160c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3L109.2 288 416 288c17.7 0 32-14.3 32-32s-14.3-32-32-32l-306.7 0L214.6 118.6c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0l-160 160z" }) }), text] }) }) }));
8
- };
@@ -1,8 +0,0 @@
1
- import React from 'react';
2
- export declare const pageRef: React.RefObject<HTMLDivElement | null>;
3
- export declare const Page: React.FC<{
4
- readonly children: React.ReactNode;
5
- readonly className?: string;
6
- readonly onDrop?: React.DragEventHandler<HTMLDivElement>;
7
- readonly onDragOver?: React.DragEventHandler<HTMLDivElement>;
8
- }>;
@@ -1,7 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import clsx from 'clsx';
3
- import React from 'react';
4
- export const pageRef = React.createRef();
5
- export const Page = ({ children, className, onDrop, onDragOver }) => {
6
- return (_jsx("div", { ref: pageRef, onDrop: onDrop, onDragOver: onDragOver, className: clsx('overflow-y-auto w-full bg-[var(--background)] min-h-screen', className), children: children }));
7
- };
@@ -1,7 +0,0 @@
1
- import React from 'react';
2
- import type { PromptSubmission } from './prompt-types';
3
- export declare const PromptsGalleryPage: React.FC<{
4
- readonly promptSubmissions: PromptSubmission[];
5
- readonly currentPage: number;
6
- readonly totalPages: number;
7
- }>;
@@ -1,60 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Button, Card } from '@remotion/design';
3
- import { useEffect, useRef, useState } from 'react';
4
- import { CardLikeButton } from './CardLikeButton';
5
- import { Page } from './Page';
6
- import { getAuthorName, getAvatarUrl } from './prompt-helpers';
7
- const PromptSubmissionCard = ({ promptSubmission }) => {
8
- const [hovered, setHovered] = useState(false);
9
- const [inView, setInView] = useState(false);
10
- const cardRef = useRef(null);
11
- const avatarUrl = getAvatarUrl(promptSubmission);
12
- useEffect(() => {
13
- const el = cardRef.current;
14
- if (!el)
15
- return;
16
- const observer = new IntersectionObserver(([entry]) => {
17
- setInView(entry.isIntersecting);
18
- }, { rootMargin: '-30% 0px -30% 0px' });
19
- observer.observe(el);
20
- return () => observer.disconnect();
21
- }, []);
22
- const isTouchDevice = typeof window !== 'undefined' && window.matchMedia('(hover: none)').matches;
23
- const showGif = hovered || (isTouchDevice && inView);
24
- return (_jsx("a", { ref: cardRef, href: `/prompts/${promptSubmission.slug}`, className: "block no-underline hover:no-underline", onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), children: _jsxs(Card, { className: "overflow-hidden hover:shadow-md transition-shadow", children: [_jsx("div", { className: "w-full aspect-video bg-black flex items-center justify-center overflow-hidden", children: _jsx("img", { src: showGif
25
- ? `https://image.mux.com/${promptSubmission.muxPlaybackId}/animated.gif?height=225&fit_mode=smartcrop`
26
- : `https://image.mux.com/${promptSubmission.muxPlaybackId}/thumbnail.png?width=400&height=225&fit_mode=smartcrop`, className: showGif ? 'h-full' : 'w-full h-full object-cover', alt: promptSubmission.title }) }), _jsxs("div", { className: "p-4", children: [_jsx("h3", { className: "font-brand font-bold text-lg truncate", children: promptSubmission.title }), _jsxs("div", { className: "flex items-center justify-between mt-1", children: [_jsxs("div", { className: "flex items-center gap-2", children: [avatarUrl && (_jsx("img", { src: avatarUrl, width: 20, height: 20, className: "rounded-full", alt: `${getAuthorName(promptSubmission)}'s avatar` })), _jsx("span", { className: "text-sm font-brand text-text", children: getAuthorName(promptSubmission) })] }), _jsx(CardLikeButton, { submissionId: promptSubmission.id, initialLikeCount: promptSubmission.likeCount })] })] })] }) }));
27
- };
28
- const Pagination = ({ currentPage, totalPages }) => {
29
- if (totalPages <= 1) {
30
- return null;
31
- }
32
- const getPageUrl = (page) => {
33
- return page === 1 ? '/prompts' : `/prompts/${page}`;
34
- };
35
- const getVisiblePages = () => {
36
- const pages = [];
37
- pages.push(1);
38
- if (currentPage > 3) {
39
- pages.push('ellipsis-start');
40
- }
41
- for (let i = Math.max(2, currentPage - 1); i <= Math.min(totalPages - 1, currentPage + 1); i++) {
42
- if (!pages.includes(i)) {
43
- pages.push(i);
44
- }
45
- }
46
- if (currentPage < totalPages - 2) {
47
- pages.push('ellipsis-end');
48
- }
49
- if (totalPages > 1 && !pages.includes(totalPages)) {
50
- pages.push(totalPages);
51
- }
52
- return pages;
53
- };
54
- return (_jsxs("div", { className: "flex items-center justify-center gap-4 mt-12 font-brand text-sm", children: [currentPage > 1 ? (_jsx("a", { href: getPageUrl(currentPage - 1), className: "text-muted-foreground hover:text-text no-underline hover:no-underline", children: "\u2190 Previous" })) : (_jsx("span", { className: "text-gray-300 cursor-not-allowed", children: "\u2190 Previous" })), _jsx("span", { className: "flex items-center gap-1", children: getVisiblePages().map((page) => typeof page === 'string' ? (_jsx("span", { className: "px-1 text-muted-foreground", children: "..." }, page)) : (_jsx("a", { href: getPageUrl(page), style: { fontFeatureSettings: "'ss03' on" }, className: `px-2 py-1 no-underline hover:no-underline ${page === currentPage
55
- ? 'text-text font-bold'
56
- : 'text-muted-foreground hover:text-text'}`, children: page }, page))) }), currentPage < totalPages ? (_jsx("a", { href: getPageUrl(currentPage + 1), className: "text-muted-foreground hover:text-text no-underline hover:no-underline", children: "Next \u2192" })) : (_jsx("span", { className: "text-gray-300 cursor-not-allowed", children: "Next \u2192" }))] }));
57
- };
58
- export const PromptsGalleryPage = ({ promptSubmissions, currentPage, totalPages }) => {
59
- return (_jsx(Page, { className: "flex-col", children: _jsxs("div", { className: "m-auto max-w-[1200px] w-full px-4 py-12", children: [_jsxs("div", { className: "mb-8", children: [_jsx("h1", { className: "text-3xl font-brand font-black", children: "Create a video with just a prompt" }), _jsxs("p", { className: "font-brand text-muted-foreground mt-4 max-w-[700px]", children: ["With", ' ', _jsx("a", { href: "/docs/ai/skills", className: "underline hover:text-text underline-offset-4", children: "Remotion Skills" }), ", you can create videos simply by giving a prompt to your coding agent, whether it's Claude Code, Codex, or OpenCode. Browse the gallery for inspiration!"] })] }), _jsxs("div", { className: "flex items-center gap-2", children: [_jsxs(Button, { href: "/docs/ai/claude-code", className: "font-brand rounded-full bg-[#D97757] flex items-center text-white", children: [_jsx("svg", { width: "20", height: "20", viewBox: "0 0 149 149", fill: "none", xmlns: "http://www.w3.org/2000/svg", style: { marginRight: 8 }, children: _jsx("path", { d: "M29.05 98.54L58.19 82.19L58.68 80.77L58.19 79.98H56.77L51.9 79.68L35.25 79.23L20.81 78.63L6.82 77.88L3.3 77.13L0 72.78L0.340004 70.61L3.3 68.62L7.54 68.99L16.91 69.63L30.97 70.6L41.17 71.2L56.28 72.77H58.68L59.02 71.8L58.2 71.2L57.56 70.6L43.01 60.74L27.26 50.32L19.01 44.32L14.55 41.28L12.3 38.43L11.33 32.21L15.38 27.75L20.82 28.12L22.21 28.49L27.72 32.73L39.49 41.84L54.86 53.16L57.11 55.03L58.01 54.39L58.12 53.94L57.11 52.25L48.75 37.14L39.83 21.77L35.86 15.4L34.81 11.58C34.44 10.01 34.17 8.69 34.17 7.08L38.78 0.820007L41.33 0L47.48 0.820007L50.07 3.07001L53.89 11.81L60.08 25.57L69.68 44.28L72.49 49.83L73.99 54.97L74.55 56.54H75.52V55.64L76.31 45.1L77.77 32.16L79.19 15.51L79.68 10.82L82 5.2L86.61 2.16L90.21 3.88L93.17 8.12L92.76 10.86L91 22.3L87.55 40.22L85.3 52.22H86.61L88.11 50.72L94.18 42.66L104.38 29.91L108.88 24.85L114.13 19.26L117.5 16.6H123.87L128.56 23.57L126.46 30.77L119.9 39.09L114.46 46.14L106.66 56.64L101.79 65.04L102.24 65.71L103.4 65.6L121.02 61.85L130.54 60.13L141.9 58.18L147.04 60.58L147.6 63.02L145.58 68.01L133.43 71.01L119.18 73.86L97.96 78.88L97.7 79.07L98 79.44L107.56 80.34L111.65 80.56H121.66L140.3 81.95L145.17 85.17L148.09 89.11L147.6 92.11L140.1 95.93L129.98 93.53L106.36 87.91L98.26 85.89H97.14V86.56L103.89 93.16L116.26 104.33L131.75 118.73L132.54 122.29L130.55 125.1L128.45 124.8L114.84 114.56L109.59 109.95L97.7 99.94H96.91V100.99L99.65 105L114.12 126.75L114.87 133.42L113.82 135.59L110.07 136.9L105.95 136.15L97.48 124.26L88.74 110.87L81.69 98.87L80.83 99.36L76.67 144.17L74.72 146.46L70.22 148.18L66.47 145.33L64.48 140.72L66.47 131.61L68.87 119.72L70.82 110.27L72.58 98.53L73.63 94.63L73.56 94.37L72.7 94.48L63.85 106.63L50.39 124.82L39.74 136.22L37.19 137.23L32.77 134.94L33.18 130.85L35.65 127.21L50.39 108.46L59.28 96.84L65.02 90.13L64.98 89.16H64.64L25.49 114.58L18.52 115.48L15.52 112.67L15.89 108.06L17.31 106.56L29.08 98.46L29.04 98.5L29.05 98.54Z", fill: "#fff" }) }), _jsx("div", { className: "text-sm", children: "Create your own video" })] }), _jsx(Button, { href: "/prompts/submit", className: "font-brand rounded-full text-sm", children: "Submit a prompt" })] }), _jsx("div", { className: "h-12" }), _jsx("div", { className: "grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6", children: promptSubmissions.map((p) => (_jsx(PromptSubmissionCard, { promptSubmission: p }, p.id))) }), _jsx(Pagination, { currentPage: currentPage, totalPages: totalPages })] }) }));
60
- };
@@ -1,5 +0,0 @@
1
- import React from 'react';
2
- import type { PromptSubmission } from './prompt-types';
3
- export declare const PromptsShowPage: React.FC<{
4
- readonly promptSubmission: PromptSubmission;
5
- }>;
@@ -1,17 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { CopyPromptButton } from './CopyPromptButton';
3
- import { LikeButton } from './LikeButton';
4
- import { MuxPlayer } from './MuxPlayer';
5
- import { NewBackButton } from './NewBackButton';
6
- import { Page } from './Page';
7
- import { getAuthorName, getAvatarUrl, getRelativeTime } from './prompt-helpers';
8
- export const PromptsShowPage = ({ promptSubmission }) => {
9
- const avatarUrl = getAvatarUrl(promptSubmission);
10
- const authorName = getAuthorName(promptSubmission);
11
- const authorLink = promptSubmission.githubUsername
12
- ? `https://github.com/${promptSubmission.githubUsername}`
13
- : promptSubmission.xUsername
14
- ? `https://x.com/${promptSubmission.xUsername}`
15
- : null;
16
- return (_jsx(Page, { className: "flex-col", children: _jsxs("div", { className: "m-auto max-w-[800px] w-full px-4 py-12", children: [_jsx(NewBackButton, { text: "Back to gallery", link: "/prompts" }), _jsx("div", { className: "h-1" }), _jsx("h1", { className: "text-2xl font-brand font-black", children: promptSubmission.title }), _jsxs("div", { children: [_jsxs("div", { className: "flex items-center gap-3 mt-4 mb-4", children: [avatarUrl && (_jsx("img", { src: avatarUrl, width: 32, height: 32, className: "rounded-full", alt: authorName ? `${authorName}'s avatar` : 'Author avatar' })), _jsxs("div", { children: [_jsxs("div", { className: "text-sm font-brand", children: ["Prompted by", ' ', authorLink ? (_jsx("a", { href: authorLink, target: "_blank", rel: "noopener noreferrer", className: "font-medium hover:underline", children: authorName })) : (_jsx("span", { className: "font-medium", children: authorName }))] }), _jsx("div", { className: "text-xs text-muted-foreground font-brand", title: new Date(promptSubmission.createdAt).toLocaleString(), children: getRelativeTime(promptSubmission.createdAt) })] })] }), _jsxs("div", { children: [_jsx(MuxPlayer, { playbackId: promptSubmission.muxPlaybackId, title: promptSubmission.title, rounded: false }), promptSubmission.toolUsed && (_jsxs(_Fragment, { children: [_jsx("h2", { className: "font-brand font-bold mt-6 mb-2", children: "Tool used" }), _jsx("p", { className: "text-sm font-brand", children: promptSubmission.toolUsed })] })), promptSubmission.modelUsed && (_jsxs(_Fragment, { children: [_jsx("h2", { className: "font-brand font-bold mt-6 mb-2", children: "Model used" }), _jsx("p", { className: "text-sm font-brand", children: promptSubmission.modelUsed })] })), _jsx("h2", { className: "font-brand font-bold mt-6 mb-2", children: "Prompt" }), _jsx("pre", { className: "whitespace-pre-wrap text-sm rounded p-4 text-white", style: { backgroundColor: '#272A36' }, children: promptSubmission.prompt }), _jsxs("div", { className: "mt-6 flex items-center gap-2", children: [_jsx(LikeButton, { submissionId: promptSubmission.id, initialLikeCount: promptSubmission.likeCount }), _jsx(CopyPromptButton, { prompt: promptSubmission.prompt })] })] })] })] }) }));
17
- };
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare const PromptsSubmitPage: React.FC;
@@ -1,173 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { Button, Input, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, } from '@remotion/design';
3
- import { useCallback, useEffect, useRef, useState } from 'react';
4
- import { REMOTION_PRO_ORIGIN } from './config';
5
- import { MuxPlayer } from './MuxPlayer';
6
- import { NewBackButton } from './NewBackButton';
7
- import { Page } from './Page';
8
- export const PromptsSubmitPage = () => {
9
- const [title, setTitle] = useState('');
10
- const [prompt, setPrompt] = useState('');
11
- const [toolUsed, setToolUsed] = useState('');
12
- const [modelUsed, setModelUsed] = useState('');
13
- const [usernameType, setUsernameType] = useState('github');
14
- const [username, setUsername] = useState('');
15
- const [uploadState, setUploadState] = useState({ type: 'idle' });
16
- const [submitStatus, setSubmitStatus] = useState({
17
- type: 'idle',
18
- });
19
- const [isDragging, setIsDragging] = useState(false);
20
- const pollRef = useRef(null);
21
- useEffect(() => {
22
- return () => {
23
- if (pollRef.current)
24
- clearInterval(pollRef.current);
25
- };
26
- }, []);
27
- const fileInputRef = useRef(null);
28
- const startUpload = useCallback(async (file) => {
29
- setUploadState({ type: 'uploading', progress: 0 });
30
- try {
31
- const res = await fetch(`${REMOTION_PRO_ORIGIN}/api/prompts/upload`, {
32
- method: 'POST',
33
- headers: { 'content-type': 'application/json' },
34
- });
35
- const { id, url } = await res.json();
36
- const { createUpload } = await import('@mux/upchunk');
37
- const upload = createUpload({ endpoint: url, file });
38
- upload.on('progress', (p) => {
39
- setUploadState({ type: 'uploading', progress: p.detail });
40
- });
41
- upload.on('success', () => {
42
- setUploadState({ type: 'processing' });
43
- pollRef.current = setInterval(async () => {
44
- try {
45
- const statusRes = await fetch(`${REMOTION_PRO_ORIGIN}/api/prompts/upload/${id}`);
46
- if (!statusRes.ok) {
47
- throw new Error(`Failed to fetch upload status: ${statusRes.status}`);
48
- }
49
- const data = await statusRes.json();
50
- if (data.status === 'asset_created' &&
51
- data.playback_id &&
52
- data.asset_status === 'ready') {
53
- if (pollRef.current)
54
- clearInterval(pollRef.current);
55
- setUploadState({
56
- type: 'ready',
57
- muxAssetId: data.asset_id,
58
- muxPlaybackId: data.playback_id,
59
- });
60
- }
61
- }
62
- catch (error) {
63
- // eslint-disable-next-line no-console
64
- console.error('Error while polling upload status', error);
65
- }
66
- }, 2000);
67
- });
68
- upload.on('error', (err) => {
69
- setUploadState({
70
- type: 'error',
71
- message: err.detail.message,
72
- });
73
- });
74
- }
75
- catch (err) {
76
- setUploadState({
77
- type: 'error',
78
- message: err instanceof Error ? err.message : 'Upload failed',
79
- });
80
- }
81
- }, []);
82
- const onFileSelect = useCallback((e) => {
83
- var _a;
84
- const file = (_a = e.target.files) === null || _a === void 0 ? void 0 : _a[0];
85
- if (!file)
86
- return;
87
- startUpload(file);
88
- }, [startUpload]);
89
- const onDrop = useCallback((e) => {
90
- var _a, _b;
91
- e.preventDefault();
92
- setIsDragging(false);
93
- if (uploadState.type !== 'idle')
94
- return;
95
- const file = (_b = (_a = e.dataTransfer) === null || _a === void 0 ? void 0 : _a.files) === null || _b === void 0 ? void 0 : _b[0];
96
- if (!file)
97
- return;
98
- if (!file.type.startsWith('video/'))
99
- return;
100
- startUpload(file);
101
- }, [startUpload, uploadState.type]);
102
- const onDragOver = useCallback((e) => {
103
- e.preventDefault();
104
- }, []);
105
- const onDragEnter = useCallback(() => {
106
- if (uploadState.type === 'idle') {
107
- setIsDragging(true);
108
- }
109
- }, [uploadState.type]);
110
- const onDragLeave = useCallback((e) => {
111
- if (e.currentTarget === e.target) {
112
- setIsDragging(false);
113
- }
114
- }, []);
115
- const submitPossible = title.length > 0 &&
116
- title.length <= 80 &&
117
- prompt.length > 0 &&
118
- usernameType &&
119
- username.length > 0 &&
120
- uploadState.type === 'ready' &&
121
- (submitStatus.type === 'idle' || submitStatus.type === 'error');
122
- const submit = useCallback(async () => {
123
- if (!submitPossible || uploadState.type !== 'ready')
124
- return;
125
- setSubmitStatus({ type: 'submitting' });
126
- try {
127
- const res = await fetch(`${REMOTION_PRO_ORIGIN}/api/prompts/submit`, {
128
- method: 'POST',
129
- headers: { 'content-type': 'application/json' },
130
- body: JSON.stringify({
131
- muxAssetId: uploadState.muxAssetId,
132
- muxPlaybackId: uploadState.muxPlaybackId,
133
- title,
134
- prompt,
135
- toolUsed: toolUsed || undefined,
136
- modelUsed: modelUsed || undefined,
137
- githubUsername: usernameType === 'github' ? username : undefined,
138
- xUsername: usernameType === 'x' ? username : undefined,
139
- }),
140
- });
141
- if (!res.ok) {
142
- const submissionData = await res.json();
143
- throw new Error(submissionData.error || 'Submission failed');
144
- }
145
- const data = await res.json();
146
- setSubmitStatus({ type: 'done', slug: data.slug });
147
- }
148
- catch (err) {
149
- setSubmitStatus({ type: 'error', err: err });
150
- }
151
- }, [
152
- submitPossible,
153
- uploadState,
154
- title,
155
- prompt,
156
- usernameType,
157
- username,
158
- toolUsed,
159
- modelUsed,
160
- ]);
161
- if (submitStatus.type === 'done') {
162
- return (_jsx(Page, { className: "flex-col", children: _jsx("div", { className: "m-auto max-w-[800px] w-full", children: _jsxs("div", { className: "mx-4 px-8 py-8 mt-12 pt-8", children: [_jsx("h1", { className: "text-3xl font-brand font-black", children: "Submission received!" }), _jsxs("div", { className: "mt-4 text-muted-foreground font-brand", children: ["Thanks for submitting your prompt! Your prompt submission is pending review.", _jsx("br", {}), " Once approved, it will appear on the", ' ', _jsx("a", { href: "/prompts", className: "underline", children: "prompts gallery" }), "."] }), _jsx("div", { className: "mt-4 text-muted-foreground font-brand", children: "Note that this showcase is curated - we may reject submissions if they are repetitive or not up to our quality standards. In that case, we will not give notification or reason." }), _jsx(Button, { onClick: () => {
163
- window.location.href = '/prompts';
164
- }, className: "font-brand rounded-full mt-4", children: "Back to gallery" })] }) }) }));
165
- }
166
- return (_jsx(Page, { className: "flex-col", children: _jsx("div", { className: "m-auto max-w-[800px] w-full", children: _jsxs("div", { className: "mx-4 px-8 py-8 pt-8", children: [_jsx(NewBackButton, { text: "Back to gallery", link: "/prompts" }), _jsx("h1", { className: "text-3xl font-brand font-black", children: "Submit a prompt" }), _jsxs("p", { className: "text-muted-foreground text-sm font-brand", children: ["Submit a prompt to be featured in the", ' ', _jsx("a", { href: "/prompts", className: "underline hover:text-text underline-offset-4", children: "prompt gallery." })] }), _jsx("p", { className: "text-muted-foreground text-sm font-brand", children: "Note that this showcase is curated - we may reject submissions if they are repetitive or not up to our quality standards. In that case, we will not give notification or reason." }), _jsx("h2", { className: "font-brand mt-5 font-bold", children: "Title *" }), _jsx("p", { className: "text-muted-foreground text-sm mb-0 font-brand", children: "A short title for your prompt (max 80 characters)." }), _jsx(Input, { name: "title", placeholder: "Newspaper highlighting animation", className: "font-brand mt-3", value: title, maxLength: 80, onChange: (e) => setTitle(e.target.value) }), _jsxs("p", { className: "text-muted-foreground text-xs mt-1 mb-0 font-brand", children: [title.length, "/80"] }), _jsx("h2", { className: "font-brand mt-5 font-bold", children: "Video *" }), _jsx("p", { className: "text-muted-foreground text-sm mb-0 font-brand", children: "Upload a video showing the result of your prompt." }), _jsx("input", { ref: fileInputRef, type: "file", accept: "video/*", onChange: onFileSelect, className: "hidden" }), _jsxs("div", { onDrop: onDrop, onDragOver: onDragOver, onDragEnter: onDragEnter, onDragLeave: onDragLeave, className: `flex flex-col items-center py-12 mt-3 rounded-lg border-2 border-dashed transition-colors ${isDragging
167
- ? 'border-brand bg-brand/10'
168
- : 'border-muted-foreground/25'}`, children: [uploadState.type === 'idle' &&
169
- (isDragging ? (_jsx("div", { className: "font-brand text-sm text-brand font-medium", children: "Drop your video here" })) : (_jsxs(_Fragment, { children: [_jsx(Button, { className: "font-brand rounded-full", onClick: () => { var _a; return (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click(); }, children: "Choose video file" }), _jsx("div", { className: "font-brand text-sm mt-3 text-muted-foreground", children: "or drag and drop a video file here" })] }))), uploadState.type === 'uploading' && (_jsxs("div", { className: "text-muted-foreground font-brand font-medium text-sm", children: ["Uploading ", Math.round(uploadState.progress), "%"] })), uploadState.type === 'processing' && (_jsx("div", { className: "text-muted-foreground font-brand font-medium text-sm", children: "Processing video..." })), uploadState.type === 'ready' && (_jsxs("div", { className: "w-full flex flex-col items-center px-4 gap-4", children: [_jsx(MuxPlayer, { playbackId: uploadState.muxPlaybackId, title: title || 'Preview' }), _jsx("button", { type: "button", className: "font-brand text-sm text-muted-foreground hover:text-foreground transition-colors", onClick: () => setUploadState({ type: 'idle' }), children: "Remove video" })] })), uploadState.type === 'error' && (_jsx("div", { className: "text-red-500 font-brand font-medium text-sm", children: uploadState.message }))] }), _jsx("h2", { className: "font-brand mt-5 font-bold", children: "Prompt(s) *" }), _jsx("p", { className: "text-muted-foreground text-sm mb-0 font-brand", children: "The prompts you used to generate this video. Separate multiple prompts with an empty line." }), _jsx(Textarea, { name: "prompt", className: "font-brand mt-3", placeholder: "Enter your full prompt here", value: prompt, onChange: (e) => setPrompt(e.target.value) }), _jsx("h2", { className: "font-brand mt-5 font-bold", children: "Tool used" }), _jsx("p", { className: "text-muted-foreground text-sm mb-0 font-brand", children: "Which tool did you use to generate this video? (e.g. Claude Code, Cursor, Codex)" }), _jsx(Input, { name: "toolUsed", placeholder: "Claude Code", className: "font-brand mt-3", value: toolUsed, onChange: (e) => setToolUsed(e.target.value) }), _jsx("h2", { className: "font-brand mt-5 font-bold", children: "Model used" }), _jsx("p", { className: "text-muted-foreground text-sm mb-0 font-brand", children: "Which AI model did you use? (e.g. Opus 4.5, GPT-5.2)" }), _jsx(Input, { name: "modelUsed", placeholder: "Opus 4.5", className: "font-brand mt-3", value: modelUsed, onChange: (e) => setModelUsed(e.target.value) }), _jsx("h2", { className: "font-brand mt-5 font-bold", children: "How should we credit you? *" }), _jsxs(Tabs, { defaultValue: "github", className: "mt-3", onValueChange: (value) => {
170
- setUsernameType(value);
171
- setUsername('');
172
- }, children: [_jsxs(TabsList, { children: [_jsx(TabsTrigger, { value: "github", children: "GitHub" }), _jsx(TabsTrigger, { value: "x", children: "X (Twitter)" })] }), _jsx(TabsContent, { value: "github", children: _jsx(Input, { name: "username", className: "font-brand", placeholder: "Your GitHub username", value: usernameType === 'github' ? username : '', onChange: (e) => setUsername(e.target.value) }) }), _jsx(TabsContent, { value: "x", children: _jsx(Input, { name: "username", className: "font-brand", placeholder: "Your X username (without @)", value: usernameType === 'x' ? username : '', onChange: (e) => setUsername(e.target.value) }) })] }), _jsx("div", { className: "h-8" }), _jsx(Button, { onClick: submit, disabled: !submitPossible, type: "submit", className: "font-brand rounded-full w-full bg-brand text-white", children: "Submit" }), submitStatus.type === 'error' && (_jsxs("p", { className: "text-red-500 mt-4 text-sm font-brand", children: ["An error occurred: ", submitStatus.err.message] }))] }) }) }));
173
- };
@@ -1 +0,0 @@
1
- export declare const REMOTION_PRO_ORIGIN = "https://www.remotion.pro";
@@ -1 +0,0 @@
1
- export const REMOTION_PRO_ORIGIN = 'https://www.remotion.pro';
@@ -1,8 +0,0 @@
1
- import type { PromptSubmission } from './prompt-types';
2
- export declare const formatLikeCount: (n: number) => string;
3
- export declare const getLikedIds: () => Set<string>;
4
- export declare const saveLikedId: (id: string) => void;
5
- export declare const removeLikedId: (id: string) => void;
6
- export declare const getAvatarUrl: (s: PromptSubmission) => string | null;
7
- export declare const getAuthorName: (s: PromptSubmission) => string;
8
- export declare const getRelativeTime: (dateStr: string) => string;