@lssm-tech/lib.video-gen 3.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +79 -0
- package/dist/browser/compositions/api-overview.js +1 -0
- package/dist/browser/compositions/index.js +1 -0
- package/dist/browser/compositions/primitives/animated-text.js +1 -0
- package/dist/browser/compositions/primitives/brand-frame.js +1 -0
- package/dist/browser/compositions/primitives/code-block.js +1 -0
- package/dist/browser/compositions/primitives/index.js +1 -0
- package/dist/browser/compositions/primitives/progress-bar.js +1 -0
- package/dist/browser/compositions/primitives/terminal.js +1 -0
- package/dist/browser/compositions/primitives/transition.js +1 -0
- package/dist/browser/compositions/social-clip.js +1 -0
- package/dist/browser/compositions/terminal-demo.js +1 -0
- package/dist/browser/design/index.js +1 -0
- package/dist/browser/design/layouts.js +1 -0
- package/dist/browser/design/motion.js +1 -0
- package/dist/browser/design/tokens.js +1 -0
- package/dist/browser/design/typography.js +1 -0
- package/dist/browser/docs/compositions.docblock.js +1 -0
- package/dist/browser/docs/design.docblock.js +172 -0
- package/dist/browser/docs/generators.docblock.js +165 -0
- package/dist/browser/docs/rendering.docblock.js +175 -0
- package/dist/browser/docs/video-gen.docblock.js +126 -0
- package/dist/browser/generators/index.js +82 -0
- package/dist/browser/generators/scene-planner.js +82 -0
- package/dist/browser/generators/script-generator.js +82 -0
- package/dist/browser/generators/video-generator.js +82 -0
- package/dist/browser/i18n/catalogs/en.js +28 -0
- package/dist/browser/i18n/catalogs/es.js +28 -0
- package/dist/browser/i18n/catalogs/fr.js +28 -0
- package/dist/browser/i18n/catalogs/index.js +82 -0
- package/dist/browser/i18n/index.js +82 -0
- package/dist/browser/i18n/keys.js +1 -0
- package/dist/browser/i18n/locale.js +1 -0
- package/dist/browser/i18n/messages.js +82 -0
- package/dist/browser/index.js +82 -0
- package/dist/browser/player/demo-player.js +1 -0
- package/dist/browser/player/index.js +1 -0
- package/dist/browser/remotion/Root.js +19 -0
- package/dist/browser/remotion/index.js +19 -0
- package/dist/browser/renderers/config.js +1 -0
- package/dist/browser/renderers/index.js +1 -0
- package/dist/browser/renderers/local.js +1 -0
- package/dist/browser/types.js +1 -0
- package/dist/browser/video-gen.feature.js +1 -0
- package/dist/compositions/api-overview.d.ts +16 -0
- package/dist/compositions/api-overview.js +2 -0
- package/dist/compositions/index.d.ts +7 -0
- package/dist/compositions/index.js +2 -0
- package/dist/compositions/primitives/animated-text.d.ts +22 -0
- package/dist/compositions/primitives/animated-text.js +2 -0
- package/dist/compositions/primitives/brand-frame.d.ts +14 -0
- package/dist/compositions/primitives/brand-frame.js +2 -0
- package/dist/compositions/primitives/code-block.d.ts +18 -0
- package/dist/compositions/primitives/code-block.js +2 -0
- package/dist/compositions/primitives/index.d.ts +12 -0
- package/dist/compositions/primitives/index.js +2 -0
- package/dist/compositions/primitives/progress-bar.d.ts +12 -0
- package/dist/compositions/primitives/progress-bar.js +2 -0
- package/dist/compositions/primitives/terminal.d.ts +24 -0
- package/dist/compositions/primitives/terminal.js +2 -0
- package/dist/compositions/primitives/transition.d.ts +14 -0
- package/dist/compositions/primitives/transition.js +2 -0
- package/dist/compositions/social-clip.d.ts +16 -0
- package/dist/compositions/social-clip.js +2 -0
- package/dist/compositions/terminal-demo.d.ts +17 -0
- package/dist/compositions/terminal-demo.js +2 -0
- package/dist/design/index.d.ts +4 -0
- package/dist/design/index.js +2 -0
- package/dist/design/layouts.d.ts +69 -0
- package/dist/design/layouts.js +2 -0
- package/dist/design/motion.d.ts +72 -0
- package/dist/design/motion.js +2 -0
- package/dist/design/tokens.d.ts +31 -0
- package/dist/design/tokens.js +2 -0
- package/dist/design/typography.d.ts +61 -0
- package/dist/design/typography.js +2 -0
- package/dist/docs/compositions.docblock.d.ts +1 -0
- package/dist/docs/compositions.docblock.js +2 -0
- package/dist/docs/design.docblock.d.ts +1 -0
- package/dist/docs/design.docblock.js +173 -0
- package/dist/docs/generators.docblock.d.ts +1 -0
- package/dist/docs/generators.docblock.js +166 -0
- package/dist/docs/rendering.docblock.d.ts +1 -0
- package/dist/docs/rendering.docblock.js +176 -0
- package/dist/docs/video-gen.docblock.d.ts +1 -0
- package/dist/docs/video-gen.docblock.js +127 -0
- package/dist/generators/index.d.ts +3 -0
- package/dist/generators/index.js +83 -0
- package/dist/generators/scene-planner.d.ts +31 -0
- package/dist/generators/scene-planner.js +83 -0
- package/dist/generators/script-generator.d.ts +57 -0
- package/dist/generators/script-generator.js +83 -0
- package/dist/generators/video-generator.d.ts +21 -0
- package/dist/generators/video-generator.js +83 -0
- package/dist/i18n/catalogs/en.d.ts +8 -0
- package/dist/i18n/catalogs/en.js +29 -0
- package/dist/i18n/catalogs/es.d.ts +6 -0
- package/dist/i18n/catalogs/es.js +29 -0
- package/dist/i18n/catalogs/fr.d.ts +6 -0
- package/dist/i18n/catalogs/fr.js +29 -0
- package/dist/i18n/catalogs/index.d.ts +8 -0
- package/dist/i18n/catalogs/index.js +83 -0
- package/dist/i18n/i18n.test.d.ts +1 -0
- package/dist/i18n/index.d.ts +22 -0
- package/dist/i18n/index.js +83 -0
- package/dist/i18n/keys.d.ts +116 -0
- package/dist/i18n/keys.js +2 -0
- package/dist/i18n/locale.d.ts +8 -0
- package/dist/i18n/locale.js +2 -0
- package/dist/i18n/messages.d.ts +14 -0
- package/dist/i18n/messages.js +83 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +83 -0
- package/dist/node/compositions/api-overview.js +1 -0
- package/dist/node/compositions/index.js +1 -0
- package/dist/node/compositions/primitives/animated-text.js +1 -0
- package/dist/node/compositions/primitives/brand-frame.js +1 -0
- package/dist/node/compositions/primitives/code-block.js +1 -0
- package/dist/node/compositions/primitives/index.js +1 -0
- package/dist/node/compositions/primitives/progress-bar.js +1 -0
- package/dist/node/compositions/primitives/terminal.js +1 -0
- package/dist/node/compositions/primitives/transition.js +1 -0
- package/dist/node/compositions/social-clip.js +1 -0
- package/dist/node/compositions/terminal-demo.js +1 -0
- package/dist/node/design/index.js +1 -0
- package/dist/node/design/layouts.js +1 -0
- package/dist/node/design/motion.js +1 -0
- package/dist/node/design/tokens.js +1 -0
- package/dist/node/design/typography.js +1 -0
- package/dist/node/docs/compositions.docblock.js +1 -0
- package/dist/node/docs/design.docblock.js +172 -0
- package/dist/node/docs/generators.docblock.js +165 -0
- package/dist/node/docs/rendering.docblock.js +175 -0
- package/dist/node/docs/video-gen.docblock.js +126 -0
- package/dist/node/generators/index.js +82 -0
- package/dist/node/generators/scene-planner.js +82 -0
- package/dist/node/generators/script-generator.js +82 -0
- package/dist/node/generators/video-generator.js +82 -0
- package/dist/node/i18n/catalogs/en.js +28 -0
- package/dist/node/i18n/catalogs/es.js +28 -0
- package/dist/node/i18n/catalogs/fr.js +28 -0
- package/dist/node/i18n/catalogs/index.js +82 -0
- package/dist/node/i18n/index.js +82 -0
- package/dist/node/i18n/keys.js +1 -0
- package/dist/node/i18n/locale.js +1 -0
- package/dist/node/i18n/messages.js +82 -0
- package/dist/node/index.js +82 -0
- package/dist/node/player/demo-player.js +1 -0
- package/dist/node/player/index.js +1 -0
- package/dist/node/remotion/Root.js +19 -0
- package/dist/node/remotion/index.js +19 -0
- package/dist/node/renderers/config.js +1 -0
- package/dist/node/renderers/index.js +1 -0
- package/dist/node/renderers/local.js +1 -0
- package/dist/node/types.js +1 -0
- package/dist/node/video-gen.feature.js +1 -0
- package/dist/player/demo-player.d.ts +55 -0
- package/dist/player/demo-player.js +2 -0
- package/dist/player/index.d.ts +2 -0
- package/dist/player/index.js +2 -0
- package/dist/remotion/Root.d.ts +2 -0
- package/dist/remotion/Root.js +20 -0
- package/dist/remotion/index.d.ts +1 -0
- package/dist/remotion/index.js +20 -0
- package/dist/renderers/config.d.ts +28 -0
- package/dist/renderers/config.js +2 -0
- package/dist/renderers/index.d.ts +3 -0
- package/dist/renderers/index.js +2 -0
- package/dist/renderers/local.d.ts +17 -0
- package/dist/renderers/local.js +2 -0
- package/dist/types.d.ts +85 -0
- package/dist/types.js +2 -0
- package/dist/video-gen.feature.d.ts +1 -0
- package/dist/video-gen.feature.js +2 -0
- package/package.json +675 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var yH=import.meta.require;import{Easing as V}from"remotion";var M={entrance:V.out(V.exp),exit:V.in(V.exp),emphasis:V.out(V.back(1.4)),linear:V.linear,gentle:V.bezier(0.25,0.1,0.25,1),spring:V.out(V.back(1.7))},w={sceneTransition:20,textEntrance:15,textExit:12,codeTypingPerChar:2,sectionPause:30,emphasisPause:15,brandReveal:25,minScene:60,shortScene:60,mediumScene:120,longScene:240},uH={fade:{type:"fade",durationInFrames:20},slideLeft:{type:"slide-left",durationInFrames:20},slideRight:{type:"slide-right",durationInFrames:20},wipe:{type:"wipe",durationInFrames:15},none:{type:"none",durationInFrames:0}};import{defaultTokens as v}from"@contractspec/lib.design-system";var f={canvasBackground:v.colors.background,codeBackground:"#1e1e2e",terminalBackground:"#0d1117",terminalForeground:"#c9d1d9",highlight:v.colors.accent,gradientStart:v.colors.primary,gradientEnd:v.colors.accent},P={...v,video:f};var b={title:{fontSize:72,lineHeight:1.1,fontWeight:700,letterSpacing:-1},heading:{fontSize:56,lineHeight:1.2,fontWeight:600,letterSpacing:-0.5},subheading:{fontSize:40,lineHeight:1.25,fontWeight:500},body:{fontSize:32,lineHeight:1.5,fontWeight:400},code:{fontSize:28,lineHeight:1.6,fontWeight:400},caption:{fontSize:24,lineHeight:1.4,fontWeight:400},label:{fontSize:20,lineHeight:1.3,fontWeight:600,letterSpacing:1}};function F(J,H){let K=H/1920;return{...J,fontSize:Math.round(J.fontSize*K),letterSpacing:J.letterSpacing?Math.round(J.letterSpacing*K*10)/10:void 0}}import{interpolate as S,useCurrentFrame as MH,useVideoConfig as RH}from"remotion";import{jsx as YH}from"react/jsx-runtime";var D=({text:J,variant:H="body",style:K,enterAt:Q=0,exitAt:z,color:$="#ffffff",align:G="left"})=>{let U=MH(),{width:R}=RH(),L=b[H],q={...F(L,R),...K},W=S(U,[Q,Q+w.textEntrance],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),N=S(W,[0,1],[0,1],{easing:M.entrance}),X=S(W,[0,1],[30,0],{easing:M.entrance}),Z=1,E=0;if(z!==void 0){let m=S(U,[z,z+w.textExit],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"});Z=S(m,[0,1],[1,0],{easing:M.exit}),E=S(m,[0,1],[0,-20],{easing:M.exit})}let k=N*Z,d=X+E;return YH("div",{style:{fontSize:q.fontSize,lineHeight:q.lineHeight,fontWeight:q.fontWeight,letterSpacing:q.letterSpacing,color:$,textAlign:G,opacity:k,transform:`translateY(${d}px)`,willChange:"opacity, transform"},children:J})};import{VIDEO_FORMATS as l}from"@contractspec/lib.contracts-integrations/integrations/providers/video";var iH=30,y={horizontal:120,vertical:80,contentWidth:1680,contentHeight:920};function a(J){let H=J.width/1920,K=J.height/1080;return{horizontal:Math.round(y.horizontal*H),vertical:Math.round(y.vertical*K),contentWidth:Math.round(y.contentWidth*H),contentHeight:Math.round(y.contentHeight*K)}}var tH={center:{x:960,y:540},topLeft:{x:120,y:80},topRight:{x:1800,y:80},bottomLeft:{x:120,y:1000},bottomRight:{x:1800,y:1000},bottomCenter:{x:960,y:960}};function eH(){return[l.landscape,l.square,l.portrait]}import{interpolate as i,useCurrentFrame as NH,useVideoConfig as ZH}from"remotion";import{jsx as n,jsxs as _H}from"react/jsx-runtime";var A=({styleOverrides:J,showBranding:H=!0,animateEntrance:K=!0,variant:Q="gradient",children:z})=>{let $=NH(),{width:G,height:U}=ZH(),R=P,L=a({type:"custom",width:G,height:U}),Y=J?.primaryColor??R.colors.primary,q=J?.accentColor??R.colors.accent,W=J?.darkMode??!0,N;switch(Q){case"solid":N=W?"#0a0a0a":R.colors.background;break;case"gradient":N=W?"linear-gradient(135deg, #0a0a14 0%, #0f172a 50%, #0a0a14 100%)":`linear-gradient(135deg, ${R.colors.background} 0%, ${R.colors.muted} 100%)`;break;case"dark":N="#000000";break}let X=K?i($,[0,15],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}):1,Z=H?i($,[w.brandReveal,w.brandReveal+15],[0,0.3],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}):0;return _H("div",{style:{width:G,height:U,background:N,position:"relative",overflow:"hidden",opacity:X},children:[Q==="gradient"&&n("div",{style:{position:"absolute",top:"-20%",right:"-10%",width:"50%",height:"50%",background:`radial-gradient(circle, ${Y}15 0%, transparent 70%)`,borderRadius:"50%",pointerEvents:"none"}}),n("div",{style:{position:"absolute",left:L.horizontal,top:L.vertical,width:L.contentWidth,height:L.contentHeight,display:"flex",flexDirection:"column"},children:z}),H&&n("div",{style:{position:"absolute",bottom:L.vertical/2,right:L.horizontal,opacity:Z,color:W?"#ffffff":"#000000",fontSize:Math.round(16*(G/1920)),fontWeight:500,letterSpacing:1},children:"ContractSpec"})]})};import{interpolate as t,useCurrentFrame as BH,useVideoConfig as DH}from"remotion";import{jsx as T,jsxs as g}from"react/jsx-runtime";var e=({code:J,language:H="typescript",startAt:K=0,typeAnimation:Q=!0,backgroundColor:z=f.codeBackground,textColor:$="#abb2bf",filename:G})=>{let U=BH(),{width:R}=DH(),L=F(b.code,R),Y=J.length,q=Y*w.codeTypingPerChar,W=Q?Math.floor(t(U,[K,K+q],[0,Y],{extrapolateLeft:"clamp",extrapolateRight:"clamp"})):Y,N=J.slice(0,W),X=t(U,[K,K+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}),Z=Q&&W<Y&&U%16<10;return g("div",{style:{backgroundColor:z,borderRadius:16,padding:0,opacity:X,overflow:"hidden",boxShadow:"0 8px 32px rgba(0,0,0,0.3)"},children:[g("div",{style:{display:"flex",alignItems:"center",padding:"12px 20px",backgroundColor:"rgba(0,0,0,0.2)",gap:8},children:[g("div",{style:{display:"flex",gap:8},children:[T("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#ff5f57"}}),T("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#febc2e"}}),T("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#28c840"}})]}),T("div",{style:{flex:1,textAlign:"center",color:"#666",fontSize:L.fontSize*0.7,fontFamily:"monospace"},children:G??H})]}),T("div",{style:{padding:"24px 32px"},children:g("pre",{style:{margin:0,fontFamily:"'SF Mono', 'Fira Code', 'JetBrains Mono', monospace",fontSize:L.fontSize,lineHeight:L.lineHeight,color:$,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:[N,Z&&T("span",{style:{backgroundColor:$,width:"2px",display:"inline-block",height:"1.2em",verticalAlign:"text-bottom"},children:"\xA0"})]})})]})};import{useCurrentFrame as IH,useVideoConfig as VH}from"remotion";import{jsx as HH}from"react/jsx-runtime";var C=({height:J=4,color:H=P.colors.primary,backgroundColor:K="rgba(255,255,255,0.1)",position:Q="bottom"})=>{let z=IH(),{durationInFrames:$,width:G}=VH(),U=z/$;return HH("div",{style:{position:"absolute",[Q]:0,left:0,width:G,height:J,backgroundColor:K,zIndex:100},children:HH("div",{style:{width:`${U*100}%`,height:"100%",backgroundColor:H,transition:"none"}})})};import{AbsoluteFill as wH,interpolate as j,Sequence as o,useCurrentFrame as JH,useVideoConfig as PH}from"remotion";import{jsx as _,jsxs as h}from"react/jsx-runtime";var KH=({specName:J,method:H="POST",endpoint:K="/api/users",specCode:Q,generatedOutputs:z=["REST Endpoint","GraphQL Mutation","Prisma Model","TypeScript SDK","MCP Tool","OpenAPI Spec"],tagline:$="One spec. Every surface."})=>{let{durationInFrames:G}=PH(),U=P,R=60,L=45,Y=210,q=180,W=G-90;return h(wH,{children:[h(A,{variant:"gradient",showBranding:!0,children:[_(o,{from:0,durationInFrames:210,children:h("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:16},children:[h("div",{style:{display:"flex",alignItems:"center",gap:16},children:[_(OH,{method:H,enterAt:10}),_(D,{text:K,variant:"subheading",enterAt:15,color:U.colors.mutedForeground})]}),_(D,{text:J,variant:"title",enterAt:5,color:"#ffffff"}),_("div",{style:{flex:1,marginTop:24},children:_(e,{code:Q,language:"typescript",filename:`${J.toLowerCase()}.contract.ts`,startAt:45,typeAnimation:!0})})]})}),_(o,{from:180,durationInFrames:G-180,children:h("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",gap:24},children:[_(D,{text:"Generates:",variant:"heading",enterAt:0,color:"#ffffff",align:"center"}),_("div",{style:{display:"flex",flexWrap:"wrap",gap:16,justifyContent:"center",maxWidth:"80%",marginTop:32},children:z.map((N,X)=>_(EH,{label:N,index:X,startFrame:20+X*8},N))}),_(o,{from:W-180,children:_("div",{style:{marginTop:48},children:_(D,{text:$,variant:"heading",enterAt:0,color:U.colors.accent,align:"center"})})})]})})]}),_(C,{})]})},OH=({method:J,enterAt:H})=>{let K=JH(),Q=j(K,[H,H+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}),z=j(K,[H,H+12],[0.8,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis}),$={GET:"#61afef",POST:"#98c379",PUT:"#e5c07b",PATCH:"#d19a66",DELETE:"#e06c75"};return _("div",{style:{opacity:Q,transform:`scale(${z})`,backgroundColor:$[J]??"#61afef",color:"#000",padding:"8px 20px",borderRadius:8,fontSize:24,fontWeight:700,fontFamily:"monospace",letterSpacing:1},children:J})},EH=({label:J,startFrame:H})=>{let K=JH(),Q=j(K,[H,H+12],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),z=j(K,[H,H+15],[20,0],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis}),$=j(K,[H,H+15],[0.9,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis});return _("div",{style:{opacity:Q,transform:`translateY(${z}px) scale(${$})`,backgroundColor:"rgba(255,255,255,0.08)",border:"1px solid rgba(255,255,255,0.15)",color:"#ffffff",padding:"16px 32px",borderRadius:12,fontSize:28,fontWeight:500},children:J})};import{interpolate as s,useCurrentFrame as kH,useVideoConfig as bH}from"remotion";import{jsx as O,jsxs as x}from"react/jsx-runtime";var QH={command:"#c9d1d9",output:"#8b949e",error:"#f85149",success:"#3fb950",comment:"#6e7681"},$H=({lines:J,startAt:H=0,prompt:K="$ ",title:Q="Terminal",backgroundColor:z=f.terminalBackground,typingSpeed:$=w.codeTypingPerChar})=>{let G=kH(),{width:U}=bH(),R=F(b.code,U),L=[],Y=H;for(let W of J){let N=W.delay??10,X=Y+N;if(W.type==="command"){let Z=W.text.length*$;L.push({startFrame:X,endFrame:X+Z}),Y=X+Z}else L.push({startFrame:X,endFrame:X+5}),Y=X+5}let q=s(G,[H,H+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance});return x("div",{style:{backgroundColor:z,borderRadius:16,overflow:"hidden",opacity:q,boxShadow:"0 8px 32px rgba(0,0,0,0.3)"},children:[x("div",{style:{display:"flex",alignItems:"center",padding:"12px 20px",backgroundColor:"rgba(255,255,255,0.05)",gap:8},children:[x("div",{style:{display:"flex",gap:8},children:[O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#ff5f57"}}),O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#febc2e"}}),O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#28c840"}})]}),O("div",{style:{flex:1,textAlign:"center",color:"#484f58",fontSize:R.fontSize*0.7,fontFamily:"monospace"},children:Q})]}),O("div",{style:{padding:"24px 32px",minHeight:200},children:J.map((W,N)=>{let X=L[N];if(!X||G<X.startFrame)return null;let Z=W.type==="command",E=QH[W.type],k=W.text;if(Z){let qH=s(G,[X.startFrame,X.endFrame],[0,W.text.length],{extrapolateLeft:"clamp",extrapolateRight:"clamp"});k=W.text.slice(0,Math.floor(qH))}let d=Z?1:s(G,[X.startFrame,X.startFrame+5],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),LH=Z&&G>=X.startFrame&&G<=X.endFrame&&G%16<10;return x("div",{style:{fontFamily:"'SF Mono', 'Fira Code', 'JetBrains Mono', monospace",fontSize:R.fontSize,lineHeight:1.8,color:E,opacity:d,whiteSpace:"pre-wrap"},children:[Z&&O("span",{style:{color:"#3fb950"},children:K}),W.type==="comment"&&O("span",{style:{color:QH.comment},children:"# "}),k,LH&&O("span",{style:{backgroundColor:"#c9d1d9",width:"2px",display:"inline-block",height:"1.2em",verticalAlign:"text-bottom"},children:"\xA0"})]},`${N}-${W.text.slice(0,20)}`)})})]})};import{AbsoluteFill as FH,interpolate as p,Sequence as u,useCurrentFrame as zH,useVideoConfig as SH}from"remotion";import{jsx as B,jsxs as c}from"react/jsx-runtime";var GH=({hook:J,message:H,points:K=[],cta:Q="Learn more",ctaUrl:z="contractspec.dev",accentColor:$})=>{let{durationInFrames:G,width:U,height:R}=SH(),Y=$??P.colors.accent,q=R>U,W=75,N=60,X=120,Z=G-90;return c(FH,{children:[B(A,{variant:"gradient",showBranding:!0,children:c("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",gap:q?48:32,textAlign:"center",padding:q?"0 20px":0},children:[B(u,{from:0,durationInFrames:105,children:B("div",{style:{width:"100%"},children:B(D,{text:J,variant:"title",enterAt:5,exitAt:75,color:"#ffffff",align:"center"})})}),B(u,{from:60,children:B("div",{style:{width:"100%"},children:B(D,{text:H,variant:q?"subheading":"heading",enterAt:0,color:"#ffffff",align:"center"})})}),K.length>0&&B(u,{from:120,children:B("div",{style:{display:"flex",flexDirection:"column",gap:16,alignItems:q?"flex-start":"center",width:"100%",maxWidth:q?"100%":"80%",marginTop:16},children:K.map((E,k)=>B(AH,{text:E,index:k,startFrame:k*15,accent:Y},E))})}),B(u,{from:Z,children:B(TH,{cta:Q,url:z,accent:Y})})]})}),B(C,{color:Y})]})},AH=({text:J,startFrame:H,accent:K})=>{let Q=zH(),z=p(Q,[H,H+12],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),$=p(Q,[H,H+15],[-30,0],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance});return c("div",{style:{opacity:z,transform:`translateX(${$}px)`,display:"flex",alignItems:"center",gap:16,fontSize:28,color:"#ffffff"},children:[B("div",{style:{width:8,height:8,borderRadius:"50%",backgroundColor:K,flexShrink:0}}),J]})},TH=({cta:J,url:H,accent:K})=>{let Q=zH(),z=p(Q,[0,15],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),$=p(Q,[0,18],[0.9,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis});return c("div",{style:{opacity:z,transform:`scale(${$})`,display:"flex",flexDirection:"column",alignItems:"center",gap:12,marginTop:24},children:[B("div",{style:{backgroundColor:K,color:"#ffffff",padding:"16px 48px",borderRadius:12,fontSize:28,fontWeight:600},children:J}),B("div",{style:{color:"rgba(255,255,255,0.5)",fontSize:20},children:H})]})};import{AbsoluteFill as CH,Sequence as WH,useVideoConfig as vH}from"remotion";import{jsx as I,jsxs as r}from"react/jsx-runtime";var XH=({title:J,subtitle:H,lines:K,terminalTitle:Q="Terminal",prompt:z="$ ",summary:$})=>{let{durationInFrames:G}=vH(),U=P,R=40,L=G-90;return r(CH,{children:[I(A,{variant:"dark",showBranding:!0,children:r("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:24},children:[r("div",{children:[I(D,{text:J,variant:"heading",enterAt:5,color:"#ffffff"}),H&&I("div",{style:{marginTop:8},children:I(D,{text:H,variant:"body",enterAt:15,color:U.colors.mutedForeground})})]}),I(WH,{from:40,children:I("div",{style:{flex:1},children:I($H,{lines:K,startAt:0,prompt:z,title:Q})})}),$&&I(WH,{from:L,children:I("div",{style:{marginTop:"auto",paddingTop:24},children:I(D,{text:$,variant:"subheading",enterAt:0,color:U.colors.accent,align:"center"})})})]})}),I(C,{})]})};import{Player as fH}from"@remotion/player";import{useMemo as hH}from"react";import{jsx as UH}from"react/jsx-runtime";var jH={ApiOverview:{component:KH,durationInFrames:450,fps:30,width:1920,height:1080},SocialClip:{component:GH,durationInFrames:300,fps:30,width:1920,height:1080},TerminalDemo:{component:XH,durationInFrames:600,fps:30,width:1920,height:1080}};function HK({compositionId:J,inputProps:H,controls:K=!0,autoPlay:Q=!1,loop:z=!1,width:$="100%",height:G,style:U,className:R,clickToPlay:L=!0,doubleClickToFullscreen:Y=!0}){let q=jH[J],W=hH(()=>({width:$,height:G??"auto",borderRadius:12,overflow:"hidden",...U}),[$,G,U]);return UH("div",{className:R,children:UH(fH,{component:q.component,durationInFrames:q.durationInFrames,fps:q.fps,compositionWidth:q.width,compositionHeight:q.height,inputProps:H,controls:K,autoPlay:Q,loop:z,style:W,clickToPlay:L,doubleClickToFullscreen:Y})})}export{HK as DemoPlayer};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var xH=import.meta.require;import{Easing as V}from"remotion";var M={entrance:V.out(V.exp),exit:V.in(V.exp),emphasis:V.out(V.back(1.4)),linear:V.linear,gentle:V.bezier(0.25,0.1,0.25,1),spring:V.out(V.back(1.7))},P={sceneTransition:20,textEntrance:15,textExit:12,codeTypingPerChar:2,sectionPause:30,emphasisPause:15,brandReveal:25,minScene:60,shortScene:60,mediumScene:120,longScene:240},pH={fade:{type:"fade",durationInFrames:20},slideLeft:{type:"slide-left",durationInFrames:20},slideRight:{type:"slide-right",durationInFrames:20},wipe:{type:"wipe",durationInFrames:15},none:{type:"none",durationInFrames:0}};import{defaultTokens as v}from"@contractspec/lib.design-system";var f={canvasBackground:v.colors.background,codeBackground:"#1e1e2e",terminalBackground:"#0d1117",terminalForeground:"#c9d1d9",highlight:v.colors.accent,gradientStart:v.colors.primary,gradientEnd:v.colors.accent},w={...v,video:f};var b={title:{fontSize:72,lineHeight:1.1,fontWeight:700,letterSpacing:-1},heading:{fontSize:56,lineHeight:1.2,fontWeight:600,letterSpacing:-0.5},subheading:{fontSize:40,lineHeight:1.25,fontWeight:500},body:{fontSize:32,lineHeight:1.5,fontWeight:400},code:{fontSize:28,lineHeight:1.6,fontWeight:400},caption:{fontSize:24,lineHeight:1.4,fontWeight:400},label:{fontSize:20,lineHeight:1.3,fontWeight:600,letterSpacing:1}};function F(J,H){let K=H/1920;return{...J,fontSize:Math.round(J.fontSize*K),letterSpacing:J.letterSpacing?Math.round(J.letterSpacing*K*10)/10:void 0}}import{interpolate as S,useCurrentFrame as MH,useVideoConfig as RH}from"remotion";import{jsx as YH}from"react/jsx-runtime";var B=({text:J,variant:H="body",style:K,enterAt:Q=0,exitAt:z,color:$="#ffffff",align:G="left"})=>{let U=MH(),{width:R}=RH(),L=b[H],q={...F(L,R),...K},W=S(U,[Q,Q+P.textEntrance],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),N=S(W,[0,1],[0,1],{easing:M.entrance}),X=S(W,[0,1],[30,0],{easing:M.entrance}),Z=1,E=0;if(z!==void 0){let m=S(U,[z,z+P.textExit],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"});Z=S(m,[0,1],[1,0],{easing:M.exit}),E=S(m,[0,1],[0,-20],{easing:M.exit})}let k=N*Z,d=X+E;return YH("div",{style:{fontSize:q.fontSize,lineHeight:q.lineHeight,fontWeight:q.fontWeight,letterSpacing:q.letterSpacing,color:$,textAlign:G,opacity:k,transform:`translateY(${d}px)`,willChange:"opacity, transform"},children:J})};import{VIDEO_FORMATS as l}from"@contractspec/lib.contracts-integrations/integrations/providers/video";var tH=30,j={horizontal:120,vertical:80,contentWidth:1680,contentHeight:920};function a(J){let H=J.width/1920,K=J.height/1080;return{horizontal:Math.round(j.horizontal*H),vertical:Math.round(j.vertical*K),contentWidth:Math.round(j.contentWidth*H),contentHeight:Math.round(j.contentHeight*K)}}var eH={center:{x:960,y:540},topLeft:{x:120,y:80},topRight:{x:1800,y:80},bottomLeft:{x:120,y:1000},bottomRight:{x:1800,y:1000},bottomCenter:{x:960,y:960}};function HJ(){return[l.landscape,l.square,l.portrait]}import{interpolate as i,useCurrentFrame as NH,useVideoConfig as ZH}from"remotion";import{jsx as o,jsxs as _H}from"react/jsx-runtime";var A=({styleOverrides:J,showBranding:H=!0,animateEntrance:K=!0,variant:Q="gradient",children:z})=>{let $=NH(),{width:G,height:U}=ZH(),R=w,L=a({type:"custom",width:G,height:U}),Y=J?.primaryColor??R.colors.primary,q=J?.accentColor??R.colors.accent,W=J?.darkMode??!0,N;switch(Q){case"solid":N=W?"#0a0a0a":R.colors.background;break;case"gradient":N=W?"linear-gradient(135deg, #0a0a14 0%, #0f172a 50%, #0a0a14 100%)":`linear-gradient(135deg, ${R.colors.background} 0%, ${R.colors.muted} 100%)`;break;case"dark":N="#000000";break}let X=K?i($,[0,15],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}):1,Z=H?i($,[P.brandReveal,P.brandReveal+15],[0,0.3],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}):0;return _H("div",{style:{width:G,height:U,background:N,position:"relative",overflow:"hidden",opacity:X},children:[Q==="gradient"&&o("div",{style:{position:"absolute",top:"-20%",right:"-10%",width:"50%",height:"50%",background:`radial-gradient(circle, ${Y}15 0%, transparent 70%)`,borderRadius:"50%",pointerEvents:"none"}}),o("div",{style:{position:"absolute",left:L.horizontal,top:L.vertical,width:L.contentWidth,height:L.contentHeight,display:"flex",flexDirection:"column"},children:z}),H&&o("div",{style:{position:"absolute",bottom:L.vertical/2,right:L.horizontal,opacity:Z,color:W?"#ffffff":"#000000",fontSize:Math.round(16*(G/1920)),fontWeight:500,letterSpacing:1},children:"ContractSpec"})]})};import{interpolate as t,useCurrentFrame as DH,useVideoConfig as BH}from"remotion";import{jsx as C,jsxs as x}from"react/jsx-runtime";var e=({code:J,language:H="typescript",startAt:K=0,typeAnimation:Q=!0,backgroundColor:z=f.codeBackground,textColor:$="#abb2bf",filename:G})=>{let U=DH(),{width:R}=BH(),L=F(b.code,R),Y=J.length,q=Y*P.codeTypingPerChar,W=Q?Math.floor(t(U,[K,K+q],[0,Y],{extrapolateLeft:"clamp",extrapolateRight:"clamp"})):Y,N=J.slice(0,W),X=t(U,[K,K+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}),Z=Q&&W<Y&&U%16<10;return x("div",{style:{backgroundColor:z,borderRadius:16,padding:0,opacity:X,overflow:"hidden",boxShadow:"0 8px 32px rgba(0,0,0,0.3)"},children:[x("div",{style:{display:"flex",alignItems:"center",padding:"12px 20px",backgroundColor:"rgba(0,0,0,0.2)",gap:8},children:[x("div",{style:{display:"flex",gap:8},children:[C("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#ff5f57"}}),C("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#febc2e"}}),C("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#28c840"}})]}),C("div",{style:{flex:1,textAlign:"center",color:"#666",fontSize:L.fontSize*0.7,fontFamily:"monospace"},children:G??H})]}),C("div",{style:{padding:"24px 32px"},children:x("pre",{style:{margin:0,fontFamily:"'SF Mono', 'Fira Code', 'JetBrains Mono', monospace",fontSize:L.fontSize,lineHeight:L.lineHeight,color:$,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:[N,Z&&C("span",{style:{backgroundColor:$,width:"2px",display:"inline-block",height:"1.2em",verticalAlign:"text-bottom"},children:"\xA0"})]})})]})};import{useCurrentFrame as IH,useVideoConfig as VH}from"remotion";import{jsx as HH}from"react/jsx-runtime";var T=({height:J=4,color:H=w.colors.primary,backgroundColor:K="rgba(255,255,255,0.1)",position:Q="bottom"})=>{let z=IH(),{durationInFrames:$,width:G}=VH(),U=z/$;return HH("div",{style:{position:"absolute",[Q]:0,left:0,width:G,height:J,backgroundColor:K,zIndex:100},children:HH("div",{style:{width:`${U*100}%`,height:"100%",backgroundColor:H,transition:"none"}})})};import{AbsoluteFill as PH,interpolate as y,Sequence as n,useCurrentFrame as JH,useVideoConfig as wH}from"remotion";import{jsx as _,jsxs as h}from"react/jsx-runtime";var KH=({specName:J,method:H="POST",endpoint:K="/api/users",specCode:Q,generatedOutputs:z=["REST Endpoint","GraphQL Mutation","Prisma Model","TypeScript SDK","MCP Tool","OpenAPI Spec"],tagline:$="One spec. Every surface."})=>{let{durationInFrames:G}=wH(),U=w,R=60,L=45,Y=210,q=180,W=G-90;return h(PH,{children:[h(A,{variant:"gradient",showBranding:!0,children:[_(n,{from:0,durationInFrames:210,children:h("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:16},children:[h("div",{style:{display:"flex",alignItems:"center",gap:16},children:[_(OH,{method:H,enterAt:10}),_(B,{text:K,variant:"subheading",enterAt:15,color:U.colors.mutedForeground})]}),_(B,{text:J,variant:"title",enterAt:5,color:"#ffffff"}),_("div",{style:{flex:1,marginTop:24},children:_(e,{code:Q,language:"typescript",filename:`${J.toLowerCase()}.contract.ts`,startAt:45,typeAnimation:!0})})]})}),_(n,{from:180,durationInFrames:G-180,children:h("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",gap:24},children:[_(B,{text:"Generates:",variant:"heading",enterAt:0,color:"#ffffff",align:"center"}),_("div",{style:{display:"flex",flexWrap:"wrap",gap:16,justifyContent:"center",maxWidth:"80%",marginTop:32},children:z.map((N,X)=>_(EH,{label:N,index:X,startFrame:20+X*8},N))}),_(n,{from:W-180,children:_("div",{style:{marginTop:48},children:_(B,{text:$,variant:"heading",enterAt:0,color:U.colors.accent,align:"center"})})})]})})]}),_(T,{})]})},OH=({method:J,enterAt:H})=>{let K=JH(),Q=y(K,[H,H+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}),z=y(K,[H,H+12],[0.8,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis}),$={GET:"#61afef",POST:"#98c379",PUT:"#e5c07b",PATCH:"#d19a66",DELETE:"#e06c75"};return _("div",{style:{opacity:Q,transform:`scale(${z})`,backgroundColor:$[J]??"#61afef",color:"#000",padding:"8px 20px",borderRadius:8,fontSize:24,fontWeight:700,fontFamily:"monospace",letterSpacing:1},children:J})},EH=({label:J,startFrame:H})=>{let K=JH(),Q=y(K,[H,H+12],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),z=y(K,[H,H+15],[20,0],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis}),$=y(K,[H,H+15],[0.9,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis});return _("div",{style:{opacity:Q,transform:`translateY(${z}px) scale(${$})`,backgroundColor:"rgba(255,255,255,0.08)",border:"1px solid rgba(255,255,255,0.15)",color:"#ffffff",padding:"16px 32px",borderRadius:12,fontSize:28,fontWeight:500},children:J})};import{interpolate as r,useCurrentFrame as kH,useVideoConfig as bH}from"remotion";import{jsx as O,jsxs as g}from"react/jsx-runtime";var QH={command:"#c9d1d9",output:"#8b949e",error:"#f85149",success:"#3fb950",comment:"#6e7681"},$H=({lines:J,startAt:H=0,prompt:K="$ ",title:Q="Terminal",backgroundColor:z=f.terminalBackground,typingSpeed:$=P.codeTypingPerChar})=>{let G=kH(),{width:U}=bH(),R=F(b.code,U),L=[],Y=H;for(let W of J){let N=W.delay??10,X=Y+N;if(W.type==="command"){let Z=W.text.length*$;L.push({startFrame:X,endFrame:X+Z}),Y=X+Z}else L.push({startFrame:X,endFrame:X+5}),Y=X+5}let q=r(G,[H,H+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance});return g("div",{style:{backgroundColor:z,borderRadius:16,overflow:"hidden",opacity:q,boxShadow:"0 8px 32px rgba(0,0,0,0.3)"},children:[g("div",{style:{display:"flex",alignItems:"center",padding:"12px 20px",backgroundColor:"rgba(255,255,255,0.05)",gap:8},children:[g("div",{style:{display:"flex",gap:8},children:[O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#ff5f57"}}),O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#febc2e"}}),O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#28c840"}})]}),O("div",{style:{flex:1,textAlign:"center",color:"#484f58",fontSize:R.fontSize*0.7,fontFamily:"monospace"},children:Q})]}),O("div",{style:{padding:"24px 32px",minHeight:200},children:J.map((W,N)=>{let X=L[N];if(!X||G<X.startFrame)return null;let Z=W.type==="command",E=QH[W.type],k=W.text;if(Z){let qH=r(G,[X.startFrame,X.endFrame],[0,W.text.length],{extrapolateLeft:"clamp",extrapolateRight:"clamp"});k=W.text.slice(0,Math.floor(qH))}let d=Z?1:r(G,[X.startFrame,X.startFrame+5],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),LH=Z&&G>=X.startFrame&&G<=X.endFrame&&G%16<10;return g("div",{style:{fontFamily:"'SF Mono', 'Fira Code', 'JetBrains Mono', monospace",fontSize:R.fontSize,lineHeight:1.8,color:E,opacity:d,whiteSpace:"pre-wrap"},children:[Z&&O("span",{style:{color:"#3fb950"},children:K}),W.type==="comment"&&O("span",{style:{color:QH.comment},children:"# "}),k,LH&&O("span",{style:{backgroundColor:"#c9d1d9",width:"2px",display:"inline-block",height:"1.2em",verticalAlign:"text-bottom"},children:"\xA0"})]},`${N}-${W.text.slice(0,20)}`)})})]})};import{AbsoluteFill as FH,interpolate as p,Sequence as u,useCurrentFrame as zH,useVideoConfig as SH}from"remotion";import{jsx as D,jsxs as c}from"react/jsx-runtime";var GH=({hook:J,message:H,points:K=[],cta:Q="Learn more",ctaUrl:z="contractspec.dev",accentColor:$})=>{let{durationInFrames:G,width:U,height:R}=SH(),Y=$??w.colors.accent,q=R>U,W=75,N=60,X=120,Z=G-90;return c(FH,{children:[D(A,{variant:"gradient",showBranding:!0,children:c("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",gap:q?48:32,textAlign:"center",padding:q?"0 20px":0},children:[D(u,{from:0,durationInFrames:105,children:D("div",{style:{width:"100%"},children:D(B,{text:J,variant:"title",enterAt:5,exitAt:75,color:"#ffffff",align:"center"})})}),D(u,{from:60,children:D("div",{style:{width:"100%"},children:D(B,{text:H,variant:q?"subheading":"heading",enterAt:0,color:"#ffffff",align:"center"})})}),K.length>0&&D(u,{from:120,children:D("div",{style:{display:"flex",flexDirection:"column",gap:16,alignItems:q?"flex-start":"center",width:"100%",maxWidth:q?"100%":"80%",marginTop:16},children:K.map((E,k)=>D(AH,{text:E,index:k,startFrame:k*15,accent:Y},E))})}),D(u,{from:Z,children:D(CH,{cta:Q,url:z,accent:Y})})]})}),D(T,{color:Y})]})},AH=({text:J,startFrame:H,accent:K})=>{let Q=zH(),z=p(Q,[H,H+12],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),$=p(Q,[H,H+15],[-30,0],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance});return c("div",{style:{opacity:z,transform:`translateX(${$}px)`,display:"flex",alignItems:"center",gap:16,fontSize:28,color:"#ffffff"},children:[D("div",{style:{width:8,height:8,borderRadius:"50%",backgroundColor:K,flexShrink:0}}),J]})},CH=({cta:J,url:H,accent:K})=>{let Q=zH(),z=p(Q,[0,15],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),$=p(Q,[0,18],[0.9,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis});return c("div",{style:{opacity:z,transform:`scale(${$})`,display:"flex",flexDirection:"column",alignItems:"center",gap:12,marginTop:24},children:[D("div",{style:{backgroundColor:K,color:"#ffffff",padding:"16px 48px",borderRadius:12,fontSize:28,fontWeight:600},children:J}),D("div",{style:{color:"rgba(255,255,255,0.5)",fontSize:20},children:H})]})};import{AbsoluteFill as TH,Sequence as WH,useVideoConfig as vH}from"remotion";import{jsx as I,jsxs as s}from"react/jsx-runtime";var XH=({title:J,subtitle:H,lines:K,terminalTitle:Q="Terminal",prompt:z="$ ",summary:$})=>{let{durationInFrames:G}=vH(),U=w,R=40,L=G-90;return s(TH,{children:[I(A,{variant:"dark",showBranding:!0,children:s("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:24},children:[s("div",{children:[I(B,{text:J,variant:"heading",enterAt:5,color:"#ffffff"}),H&&I("div",{style:{marginTop:8},children:I(B,{text:H,variant:"body",enterAt:15,color:U.colors.mutedForeground})})]}),I(WH,{from:40,children:I("div",{style:{flex:1},children:I($H,{lines:K,startAt:0,prompt:z,title:Q})})}),$&&I(WH,{from:L,children:I("div",{style:{marginTop:"auto",paddingTop:24},children:I(B,{text:$,variant:"subheading",enterAt:0,color:U.colors.accent,align:"center"})})})]})}),I(T,{})]})};import{Player as fH}from"@remotion/player";import{useMemo as hH}from"react";import{jsx as UH}from"react/jsx-runtime";var yH={ApiOverview:{component:KH,durationInFrames:450,fps:30,width:1920,height:1080},SocialClip:{component:GH,durationInFrames:300,fps:30,width:1920,height:1080},TerminalDemo:{component:XH,durationInFrames:600,fps:30,width:1920,height:1080}};function jH({compositionId:J,inputProps:H,controls:K=!0,autoPlay:Q=!1,loop:z=!1,width:$="100%",height:G,style:U,className:R,clickToPlay:L=!0,doubleClickToFullscreen:Y=!0}){let q=yH[J],W=hH(()=>({width:$,height:G??"auto",borderRadius:12,overflow:"hidden",...U}),[$,G,U]);return UH("div",{className:R,children:UH(fH,{component:q.component,durationInFrames:q.durationInFrames,fps:q.fps,compositionWidth:q.width,compositionHeight:q.height,inputProps:H,controls:K,autoPlay:Q,loop:z,style:W,clickToPlay:L,doubleClickToFullscreen:Y})})}export{jH as DemoPlayer};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var xH=import.meta.require;import{Easing as w}from"remotion";var M={entrance:w.out(w.exp),exit:w.in(w.exp),emphasis:w.out(w.back(1.4)),linear:w.linear,gentle:w.bezier(0.25,0.1,0.25,1),spring:w.out(w.back(1.7))},V={sceneTransition:20,textEntrance:15,textExit:12,codeTypingPerChar:2,sectionPause:30,emphasisPause:15,brandReveal:25,minScene:60,shortScene:60,mediumScene:120,longScene:240},dH={fade:{type:"fade",durationInFrames:20},slideLeft:{type:"slide-left",durationInFrames:20},slideRight:{type:"slide-right",durationInFrames:20},wipe:{type:"wipe",durationInFrames:15},none:{type:"none",durationInFrames:0}};import{defaultTokens as C}from"@contractspec/lib.design-system";var h={canvasBackground:C.colors.background,codeBackground:"#1e1e2e",terminalBackground:"#0d1117",terminalForeground:"#c9d1d9",highlight:C.colors.accent,gradientStart:C.colors.primary,gradientEnd:C.colors.accent},P={...C,video:h};var b={title:{fontSize:72,lineHeight:1.1,fontWeight:700,letterSpacing:-1},heading:{fontSize:56,lineHeight:1.2,fontWeight:600,letterSpacing:-0.5},subheading:{fontSize:40,lineHeight:1.25,fontWeight:500},body:{fontSize:32,lineHeight:1.5,fontWeight:400},code:{fontSize:28,lineHeight:1.6,fontWeight:400},caption:{fontSize:24,lineHeight:1.4,fontWeight:400},label:{fontSize:20,lineHeight:1.3,fontWeight:600,letterSpacing:1}};function F(J,H){let K=H/1920;return{...J,fontSize:Math.round(J.fontSize*K),letterSpacing:J.letterSpacing?Math.round(J.letterSpacing*K*10)/10:void 0}}import{interpolate as S,useCurrentFrame as RH,useVideoConfig as YH}from"remotion";import{jsx as ZH}from"react/jsx-runtime";var B=({text:J,variant:H="body",style:K,enterAt:Q=0,exitAt:z,color:$="#ffffff",align:W="left"})=>{let X=RH(),{width:q}=YH(),L=b[H],Y={...F(L,q),...K},U=S(X,[Q,Q+V.textEntrance],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),N=S(U,[0,1],[0,1],{easing:M.entrance}),G=S(U,[0,1],[30,0],{easing:M.entrance}),Z=1,k=0;if(z!==void 0){let n=S(X,[z,z+V.textExit],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"});Z=S(n,[0,1],[1,0],{easing:M.exit}),k=S(n,[0,1],[0,-20],{easing:M.exit})}let E=N*Z,o=G+k;return ZH("div",{style:{fontSize:Y.fontSize,lineHeight:Y.lineHeight,fontWeight:Y.fontWeight,letterSpacing:Y.letterSpacing,color:$,textAlign:W,opacity:E,transform:`translateY(${o}px)`,willChange:"opacity, transform"},children:J})};import{VIDEO_FORMATS as s}from"@contractspec/lib.contracts-integrations/integrations/providers/video";var HJ=30,u={horizontal:120,vertical:80,contentWidth:1680,contentHeight:920};function HH(J){let H=J.width/1920,K=J.height/1080;return{horizontal:Math.round(u.horizontal*H),vertical:Math.round(u.vertical*K),contentWidth:Math.round(u.contentWidth*H),contentHeight:Math.round(u.contentHeight*K)}}var JJ={center:{x:960,y:540},topLeft:{x:120,y:80},topRight:{x:1800,y:80},bottomLeft:{x:120,y:1000},bottomRight:{x:1800,y:1000},bottomCenter:{x:960,y:960}};function KJ(){return[s.landscape,s.square,s.portrait]}import{interpolate as JH,useCurrentFrame as _H,useVideoConfig as IH}from"remotion";import{jsx as r,jsxs as BH}from"react/jsx-runtime";var T=({styleOverrides:J,showBranding:H=!0,animateEntrance:K=!0,variant:Q="gradient",children:z})=>{let $=_H(),{width:W,height:X}=IH(),q=P,L=HH({type:"custom",width:W,height:X}),R=J?.primaryColor??q.colors.primary,Y=J?.accentColor??q.colors.accent,U=J?.darkMode??!0,N;switch(Q){case"solid":N=U?"#0a0a0a":q.colors.background;break;case"gradient":N=U?"linear-gradient(135deg, #0a0a14 0%, #0f172a 50%, #0a0a14 100%)":`linear-gradient(135deg, ${q.colors.background} 0%, ${q.colors.muted} 100%)`;break;case"dark":N="#000000";break}let G=K?JH($,[0,15],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}):1,Z=H?JH($,[V.brandReveal,V.brandReveal+15],[0,0.3],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}):0;return BH("div",{style:{width:W,height:X,background:N,position:"relative",overflow:"hidden",opacity:G},children:[Q==="gradient"&&r("div",{style:{position:"absolute",top:"-20%",right:"-10%",width:"50%",height:"50%",background:`radial-gradient(circle, ${R}15 0%, transparent 70%)`,borderRadius:"50%",pointerEvents:"none"}}),r("div",{style:{position:"absolute",left:L.horizontal,top:L.vertical,width:L.contentWidth,height:L.contentHeight,display:"flex",flexDirection:"column"},children:z}),H&&r("div",{style:{position:"absolute",bottom:L.vertical/2,right:L.horizontal,opacity:Z,color:U?"#ffffff":"#000000",fontSize:Math.round(16*(W/1920)),fontWeight:500,letterSpacing:1},children:"ContractSpec"})]})};import{interpolate as KH,useCurrentFrame as DH,useVideoConfig as wH}from"remotion";import{jsx as A,jsxs as x}from"react/jsx-runtime";var QH=({code:J,language:H="typescript",startAt:K=0,typeAnimation:Q=!0,backgroundColor:z=h.codeBackground,textColor:$="#abb2bf",filename:W})=>{let X=DH(),{width:q}=wH(),L=F(b.code,q),R=J.length,Y=R*V.codeTypingPerChar,U=Q?Math.floor(KH(X,[K,K+Y],[0,R],{extrapolateLeft:"clamp",extrapolateRight:"clamp"})):R,N=J.slice(0,U),G=KH(X,[K,K+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}),Z=Q&&U<R&&X%16<10;return x("div",{style:{backgroundColor:z,borderRadius:16,padding:0,opacity:G,overflow:"hidden",boxShadow:"0 8px 32px rgba(0,0,0,0.3)"},children:[x("div",{style:{display:"flex",alignItems:"center",padding:"12px 20px",backgroundColor:"rgba(0,0,0,0.2)",gap:8},children:[x("div",{style:{display:"flex",gap:8},children:[A("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#ff5f57"}}),A("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#febc2e"}}),A("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#28c840"}})]}),A("div",{style:{flex:1,textAlign:"center",color:"#666",fontSize:L.fontSize*0.7,fontFamily:"monospace"},children:W??H})]}),A("div",{style:{padding:"24px 32px"},children:x("pre",{style:{margin:0,fontFamily:"'SF Mono', 'Fira Code', 'JetBrains Mono', monospace",fontSize:L.fontSize,lineHeight:L.lineHeight,color:$,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:[N,Z&&A("span",{style:{backgroundColor:$,width:"2px",display:"inline-block",height:"1.2em",verticalAlign:"text-bottom"},children:"\xA0"})]})})]})};import{useCurrentFrame as VH,useVideoConfig as PH}from"remotion";import{jsx as $H}from"react/jsx-runtime";var v=({height:J=4,color:H=P.colors.primary,backgroundColor:K="rgba(255,255,255,0.1)",position:Q="bottom"})=>{let z=VH(),{durationInFrames:$,width:W}=PH(),X=z/$;return $H("div",{style:{position:"absolute",[Q]:0,left:0,width:W,height:J,backgroundColor:K,zIndex:100},children:$H("div",{style:{width:`${X*100}%`,height:"100%",backgroundColor:H,transition:"none"}})})};import{AbsoluteFill as OH,interpolate as f,Sequence as a,useCurrentFrame as zH,useVideoConfig as kH}from"remotion";import{jsx as _,jsxs as y}from"react/jsx-runtime";var GH=({specName:J,method:H="POST",endpoint:K="/api/users",specCode:Q,generatedOutputs:z=["REST Endpoint","GraphQL Mutation","Prisma Model","TypeScript SDK","MCP Tool","OpenAPI Spec"],tagline:$="One spec. Every surface."})=>{let{durationInFrames:W}=kH(),X=P,q=60,L=45,R=210,Y=180,U=W-90;return y(OH,{children:[y(T,{variant:"gradient",showBranding:!0,children:[_(a,{from:0,durationInFrames:210,children:y("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:16},children:[y("div",{style:{display:"flex",alignItems:"center",gap:16},children:[_(EH,{method:H,enterAt:10}),_(B,{text:K,variant:"subheading",enterAt:15,color:X.colors.mutedForeground})]}),_(B,{text:J,variant:"title",enterAt:5,color:"#ffffff"}),_("div",{style:{flex:1,marginTop:24},children:_(QH,{code:Q,language:"typescript",filename:`${J.toLowerCase()}.contract.ts`,startAt:45,typeAnimation:!0})})]})}),_(a,{from:180,durationInFrames:W-180,children:y("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",gap:24},children:[_(B,{text:"Generates:",variant:"heading",enterAt:0,color:"#ffffff",align:"center"}),_("div",{style:{display:"flex",flexWrap:"wrap",gap:16,justifyContent:"center",maxWidth:"80%",marginTop:32},children:z.map((N,G)=>_(bH,{label:N,index:G,startFrame:20+G*8},N))}),_(a,{from:U-180,children:_("div",{style:{marginTop:48},children:_(B,{text:$,variant:"heading",enterAt:0,color:X.colors.accent,align:"center"})})})]})})]}),_(v,{})]})},EH=({method:J,enterAt:H})=>{let K=zH(),Q=f(K,[H,H+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}),z=f(K,[H,H+12],[0.8,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis}),$={GET:"#61afef",POST:"#98c379",PUT:"#e5c07b",PATCH:"#d19a66",DELETE:"#e06c75"};return _("div",{style:{opacity:Q,transform:`scale(${z})`,backgroundColor:$[J]??"#61afef",color:"#000",padding:"8px 20px",borderRadius:8,fontSize:24,fontWeight:700,fontFamily:"monospace",letterSpacing:1},children:J})},bH=({label:J,startFrame:H})=>{let K=zH(),Q=f(K,[H,H+12],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),z=f(K,[H,H+15],[20,0],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis}),$=f(K,[H,H+15],[0.9,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis});return _("div",{style:{opacity:Q,transform:`translateY(${z}px) scale(${$})`,backgroundColor:"rgba(255,255,255,0.08)",border:"1px solid rgba(255,255,255,0.15)",color:"#ffffff",padding:"16px 32px",borderRadius:12,fontSize:28,fontWeight:500},children:J})};import{interpolate as i,useCurrentFrame as FH,useVideoConfig as SH}from"remotion";import{jsx as O,jsxs as p}from"react/jsx-runtime";var WH={command:"#c9d1d9",output:"#8b949e",error:"#f85149",success:"#3fb950",comment:"#6e7681"},UH=({lines:J,startAt:H=0,prompt:K="$ ",title:Q="Terminal",backgroundColor:z=h.terminalBackground,typingSpeed:$=V.codeTypingPerChar})=>{let W=FH(),{width:X}=SH(),q=F(b.code,X),L=[],R=H;for(let U of J){let N=U.delay??10,G=R+N;if(U.type==="command"){let Z=U.text.length*$;L.push({startFrame:G,endFrame:G+Z}),R=G+Z}else L.push({startFrame:G,endFrame:G+5}),R=G+5}let Y=i(W,[H,H+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance});return p("div",{style:{backgroundColor:z,borderRadius:16,overflow:"hidden",opacity:Y,boxShadow:"0 8px 32px rgba(0,0,0,0.3)"},children:[p("div",{style:{display:"flex",alignItems:"center",padding:"12px 20px",backgroundColor:"rgba(255,255,255,0.05)",gap:8},children:[p("div",{style:{display:"flex",gap:8},children:[O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#ff5f57"}}),O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#febc2e"}}),O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#28c840"}})]}),O("div",{style:{flex:1,textAlign:"center",color:"#484f58",fontSize:q.fontSize*0.7,fontFamily:"monospace"},children:Q})]}),O("div",{style:{padding:"24px 32px",minHeight:200},children:J.map((U,N)=>{let G=L[N];if(!G||W<G.startFrame)return null;let Z=U.type==="command",k=WH[U.type],E=U.text;if(Z){let qH=i(W,[G.startFrame,G.endFrame],[0,U.text.length],{extrapolateLeft:"clamp",extrapolateRight:"clamp"});E=U.text.slice(0,Math.floor(qH))}let o=Z?1:i(W,[G.startFrame,G.startFrame+5],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),NH=Z&&W>=G.startFrame&&W<=G.endFrame&&W%16<10;return p("div",{style:{fontFamily:"'SF Mono', 'Fira Code', 'JetBrains Mono', monospace",fontSize:q.fontSize,lineHeight:1.8,color:k,opacity:o,whiteSpace:"pre-wrap"},children:[Z&&O("span",{style:{color:"#3fb950"},children:K}),U.type==="comment"&&O("span",{style:{color:WH.comment},children:"# "}),E,NH&&O("span",{style:{backgroundColor:"#c9d1d9",width:"2px",display:"inline-block",height:"1.2em",verticalAlign:"text-bottom"},children:"\xA0"})]},`${N}-${U.text.slice(0,20)}`)})})]})};import{AbsoluteFill as TH,interpolate as d,Sequence as c,useCurrentFrame as XH,useVideoConfig as AH}from"remotion";import{jsx as I,jsxs as m}from"react/jsx-runtime";var l=({hook:J,message:H,points:K=[],cta:Q="Learn more",ctaUrl:z="contractspec.dev",accentColor:$})=>{let{durationInFrames:W,width:X,height:q}=AH(),R=$??P.colors.accent,Y=q>X,U=75,N=60,G=120,Z=W-90;return m(TH,{children:[I(T,{variant:"gradient",showBranding:!0,children:m("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",gap:Y?48:32,textAlign:"center",padding:Y?"0 20px":0},children:[I(c,{from:0,durationInFrames:105,children:I("div",{style:{width:"100%"},children:I(B,{text:J,variant:"title",enterAt:5,exitAt:75,color:"#ffffff",align:"center"})})}),I(c,{from:60,children:I("div",{style:{width:"100%"},children:I(B,{text:H,variant:Y?"subheading":"heading",enterAt:0,color:"#ffffff",align:"center"})})}),K.length>0&&I(c,{from:120,children:I("div",{style:{display:"flex",flexDirection:"column",gap:16,alignItems:Y?"flex-start":"center",width:"100%",maxWidth:Y?"100%":"80%",marginTop:16},children:K.map((k,E)=>I(vH,{text:k,index:E,startFrame:E*15,accent:R},k))})}),I(c,{from:Z,children:I(CH,{cta:Q,url:z,accent:R})})]})}),I(v,{color:R})]})},vH=({text:J,startFrame:H,accent:K})=>{let Q=XH(),z=d(Q,[H,H+12],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),$=d(Q,[H,H+15],[-30,0],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance});return m("div",{style:{opacity:z,transform:`translateX(${$}px)`,display:"flex",alignItems:"center",gap:16,fontSize:28,color:"#ffffff"},children:[I("div",{style:{width:8,height:8,borderRadius:"50%",backgroundColor:K,flexShrink:0}}),J]})},CH=({cta:J,url:H,accent:K})=>{let Q=XH(),z=d(Q,[0,15],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),$=d(Q,[0,18],[0.9,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis});return m("div",{style:{opacity:z,transform:`scale(${$})`,display:"flex",flexDirection:"column",alignItems:"center",gap:12,marginTop:24},children:[I("div",{style:{backgroundColor:K,color:"#ffffff",padding:"16px 48px",borderRadius:12,fontSize:28,fontWeight:600},children:J}),I("div",{style:{color:"rgba(255,255,255,0.5)",fontSize:20},children:H})]})};import{AbsoluteFill as hH,Sequence as LH,useVideoConfig as yH}from"remotion";import{jsx as D,jsxs as t}from"react/jsx-runtime";var MH=({title:J,subtitle:H,lines:K,terminalTitle:Q="Terminal",prompt:z="$ ",summary:$})=>{let{durationInFrames:W}=yH(),X=P,q=40,L=W-90;return t(hH,{children:[D(T,{variant:"dark",showBranding:!0,children:t("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:24},children:[t("div",{children:[D(B,{text:J,variant:"heading",enterAt:5,color:"#ffffff"}),H&&D("div",{style:{marginTop:8},children:D(B,{text:H,variant:"body",enterAt:15,color:X.colors.mutedForeground})})]}),D(LH,{from:40,children:D("div",{style:{flex:1},children:D(UH,{lines:K,startAt:0,prompt:z,title:Q})})}),$&&D(LH,{from:L,children:D("div",{style:{marginTop:"auto",paddingTop:24},children:D(B,{text:$,variant:"subheading",enterAt:0,color:X.colors.accent,align:"center"})})})]})}),D(v,{})]})};import{Composition as j}from"remotion";import{jsx as g,jsxs as uH,Fragment as gH}from"react/jsx-runtime";var fH={specName:"CreateUser",method:"POST",endpoint:"/api/users",specCode:`export const createUser = defineCommand({
|
|
3
|
+
meta: {
|
|
4
|
+
name: 'CreateUser',
|
|
5
|
+
version: '1.0.0',
|
|
6
|
+
stability: 'Stable',
|
|
7
|
+
},
|
|
8
|
+
io: {
|
|
9
|
+
input: z.object({
|
|
10
|
+
email: z.string().email(),
|
|
11
|
+
name: z.string(),
|
|
12
|
+
role: z.enum(['admin', 'user']),
|
|
13
|
+
}),
|
|
14
|
+
output: z.object({
|
|
15
|
+
id: z.string().uuid(),
|
|
16
|
+
email: z.string(),
|
|
17
|
+
createdAt: z.date(),
|
|
18
|
+
}),
|
|
19
|
+
},
|
|
20
|
+
});`,generatedOutputs:["REST Endpoint","GraphQL Mutation","Prisma Model","TypeScript SDK","MCP Tool","OpenAPI Spec"],tagline:"One spec. Every surface."},e={hook:"Stop rewriting the same API logic.",message:"ContractSpec generates REST, GraphQL, DB, SDK, and MCP from a single spec.",points:["Deterministic output","Fully ejectable","Standard tech, no lock-in"],cta:"Try ContractSpec",ctaUrl:"contractspec.dev"},jH={title:"Getting Started with ContractSpec",subtitle:"Define once, generate everything.",lines:[{type:"comment",text:"Initialize a new ContractSpec project"},{type:"command",text:"npx contractspec init my-api"},{type:"output",text:"Created my-api/ with 3 sample contracts"},{type:"command",text:"cd my-api && npx contractspec build"},{type:"success",text:"Built 3 contracts -> 18 generated files"},{type:"output",text:" REST endpoints: 3"},{type:"output",text:" GraphQL types: 3"},{type:"output",text:" Prisma models: 3"},{type:"output",text:" TypeScript SDK: 3"},{type:"output",text:" MCP tools: 3"},{type:"output",text:" OpenAPI specs: 3"},{type:"command",text:"npx contractspec validate"},{type:"success",text:"All contracts valid. 0 warnings."}],terminalTitle:"contractspec",summary:"Ship faster. Stay coherent."},JK=()=>{return uH(gH,{children:[g(j,{id:"ApiOverview",component:GH,durationInFrames:450,fps:30,width:1920,height:1080,defaultProps:fH}),g(j,{id:"SocialClip",component:l,durationInFrames:300,fps:30,width:1920,height:1080,defaultProps:e}),g(j,{id:"SocialClipSquare",component:l,durationInFrames:300,fps:30,width:1080,height:1080,defaultProps:e}),g(j,{id:"SocialClipPortrait",component:l,durationInFrames:300,fps:30,width:1080,height:1920,defaultProps:e}),g(j,{id:"TerminalDemo",component:MH,durationInFrames:600,fps:30,width:1920,height:1080,defaultProps:jH})]})};export{JK as RemotionRoot};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var cH=import.meta.require;import{Easing as w}from"remotion";var M={entrance:w.out(w.exp),exit:w.in(w.exp),emphasis:w.out(w.back(1.4)),linear:w.linear,gentle:w.bezier(0.25,0.1,0.25,1),spring:w.out(w.back(1.7))},V={sceneTransition:20,textEntrance:15,textExit:12,codeTypingPerChar:2,sectionPause:30,emphasisPause:15,brandReveal:25,minScene:60,shortScene:60,mediumScene:120,longScene:240},lH={fade:{type:"fade",durationInFrames:20},slideLeft:{type:"slide-left",durationInFrames:20},slideRight:{type:"slide-right",durationInFrames:20},wipe:{type:"wipe",durationInFrames:15},none:{type:"none",durationInFrames:0}};import{defaultTokens as C}from"@contractspec/lib.design-system";var h={canvasBackground:C.colors.background,codeBackground:"#1e1e2e",terminalBackground:"#0d1117",terminalForeground:"#c9d1d9",highlight:C.colors.accent,gradientStart:C.colors.primary,gradientEnd:C.colors.accent},P={...C,video:h};var b={title:{fontSize:72,lineHeight:1.1,fontWeight:700,letterSpacing:-1},heading:{fontSize:56,lineHeight:1.2,fontWeight:600,letterSpacing:-0.5},subheading:{fontSize:40,lineHeight:1.25,fontWeight:500},body:{fontSize:32,lineHeight:1.5,fontWeight:400},code:{fontSize:28,lineHeight:1.6,fontWeight:400},caption:{fontSize:24,lineHeight:1.4,fontWeight:400},label:{fontSize:20,lineHeight:1.3,fontWeight:600,letterSpacing:1}};function F(J,H){let K=H/1920;return{...J,fontSize:Math.round(J.fontSize*K),letterSpacing:J.letterSpacing?Math.round(J.letterSpacing*K*10)/10:void 0}}import{interpolate as S,useCurrentFrame as YH,useVideoConfig as ZH}from"remotion";import{jsx as _H}from"react/jsx-runtime";var B=({text:J,variant:H="body",style:K,enterAt:Q=0,exitAt:z,color:$="#ffffff",align:W="left"})=>{let X=YH(),{width:R}=ZH(),L=b[H],Y={...F(L,R),...K},U=S(X,[Q,Q+V.textEntrance],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),N=S(U,[0,1],[0,1],{easing:M.entrance}),G=S(U,[0,1],[30,0],{easing:M.entrance}),Z=1,k=0;if(z!==void 0){let n=S(X,[z,z+V.textExit],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"});Z=S(n,[0,1],[1,0],{easing:M.exit}),k=S(n,[0,1],[0,-20],{easing:M.exit})}let E=N*Z,o=G+k;return _H("div",{style:{fontSize:Y.fontSize,lineHeight:Y.lineHeight,fontWeight:Y.fontWeight,letterSpacing:Y.letterSpacing,color:$,textAlign:W,opacity:E,transform:`translateY(${o}px)`,willChange:"opacity, transform"},children:J})};import{VIDEO_FORMATS as s}from"@contractspec/lib.contracts-integrations/integrations/providers/video";var KJ=30,u={horizontal:120,vertical:80,contentWidth:1680,contentHeight:920};function HH(J){let H=J.width/1920,K=J.height/1080;return{horizontal:Math.round(u.horizontal*H),vertical:Math.round(u.vertical*K),contentWidth:Math.round(u.contentWidth*H),contentHeight:Math.round(u.contentHeight*K)}}var QJ={center:{x:960,y:540},topLeft:{x:120,y:80},topRight:{x:1800,y:80},bottomLeft:{x:120,y:1000},bottomRight:{x:1800,y:1000},bottomCenter:{x:960,y:960}};function $J(){return[s.landscape,s.square,s.portrait]}import{interpolate as JH,useCurrentFrame as IH,useVideoConfig as BH}from"remotion";import{jsx as r,jsxs as DH}from"react/jsx-runtime";var T=({styleOverrides:J,showBranding:H=!0,animateEntrance:K=!0,variant:Q="gradient",children:z})=>{let $=IH(),{width:W,height:X}=BH(),R=P,L=HH({type:"custom",width:W,height:X}),q=J?.primaryColor??R.colors.primary,Y=J?.accentColor??R.colors.accent,U=J?.darkMode??!0,N;switch(Q){case"solid":N=U?"#0a0a0a":R.colors.background;break;case"gradient":N=U?"linear-gradient(135deg, #0a0a14 0%, #0f172a 50%, #0a0a14 100%)":`linear-gradient(135deg, ${R.colors.background} 0%, ${R.colors.muted} 100%)`;break;case"dark":N="#000000";break}let G=K?JH($,[0,15],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}):1,Z=H?JH($,[V.brandReveal,V.brandReveal+15],[0,0.3],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}):0;return DH("div",{style:{width:W,height:X,background:N,position:"relative",overflow:"hidden",opacity:G},children:[Q==="gradient"&&r("div",{style:{position:"absolute",top:"-20%",right:"-10%",width:"50%",height:"50%",background:`radial-gradient(circle, ${q}15 0%, transparent 70%)`,borderRadius:"50%",pointerEvents:"none"}}),r("div",{style:{position:"absolute",left:L.horizontal,top:L.vertical,width:L.contentWidth,height:L.contentHeight,display:"flex",flexDirection:"column"},children:z}),H&&r("div",{style:{position:"absolute",bottom:L.vertical/2,right:L.horizontal,opacity:Z,color:U?"#ffffff":"#000000",fontSize:Math.round(16*(W/1920)),fontWeight:500,letterSpacing:1},children:"ContractSpec"})]})};import{interpolate as KH,useCurrentFrame as wH,useVideoConfig as VH}from"remotion";import{jsx as A,jsxs as x}from"react/jsx-runtime";var QH=({code:J,language:H="typescript",startAt:K=0,typeAnimation:Q=!0,backgroundColor:z=h.codeBackground,textColor:$="#abb2bf",filename:W})=>{let X=wH(),{width:R}=VH(),L=F(b.code,R),q=J.length,Y=q*V.codeTypingPerChar,U=Q?Math.floor(KH(X,[K,K+Y],[0,q],{extrapolateLeft:"clamp",extrapolateRight:"clamp"})):q,N=J.slice(0,U),G=KH(X,[K,K+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}),Z=Q&&U<q&&X%16<10;return x("div",{style:{backgroundColor:z,borderRadius:16,padding:0,opacity:G,overflow:"hidden",boxShadow:"0 8px 32px rgba(0,0,0,0.3)"},children:[x("div",{style:{display:"flex",alignItems:"center",padding:"12px 20px",backgroundColor:"rgba(0,0,0,0.2)",gap:8},children:[x("div",{style:{display:"flex",gap:8},children:[A("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#ff5f57"}}),A("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#febc2e"}}),A("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#28c840"}})]}),A("div",{style:{flex:1,textAlign:"center",color:"#666",fontSize:L.fontSize*0.7,fontFamily:"monospace"},children:W??H})]}),A("div",{style:{padding:"24px 32px"},children:x("pre",{style:{margin:0,fontFamily:"'SF Mono', 'Fira Code', 'JetBrains Mono', monospace",fontSize:L.fontSize,lineHeight:L.lineHeight,color:$,whiteSpace:"pre-wrap",wordBreak:"break-word"},children:[N,Z&&A("span",{style:{backgroundColor:$,width:"2px",display:"inline-block",height:"1.2em",verticalAlign:"text-bottom"},children:"\xA0"})]})})]})};import{useCurrentFrame as PH,useVideoConfig as OH}from"remotion";import{jsx as $H}from"react/jsx-runtime";var v=({height:J=4,color:H=P.colors.primary,backgroundColor:K="rgba(255,255,255,0.1)",position:Q="bottom"})=>{let z=PH(),{durationInFrames:$,width:W}=OH(),X=z/$;return $H("div",{style:{position:"absolute",[Q]:0,left:0,width:W,height:J,backgroundColor:K,zIndex:100},children:$H("div",{style:{width:`${X*100}%`,height:"100%",backgroundColor:H,transition:"none"}})})};import{AbsoluteFill as kH,interpolate as f,Sequence as a,useCurrentFrame as zH,useVideoConfig as EH}from"remotion";import{jsx as _,jsxs as y}from"react/jsx-runtime";var GH=({specName:J,method:H="POST",endpoint:K="/api/users",specCode:Q,generatedOutputs:z=["REST Endpoint","GraphQL Mutation","Prisma Model","TypeScript SDK","MCP Tool","OpenAPI Spec"],tagline:$="One spec. Every surface."})=>{let{durationInFrames:W}=EH(),X=P,R=60,L=45,q=210,Y=180,U=W-90;return y(kH,{children:[y(T,{variant:"gradient",showBranding:!0,children:[_(a,{from:0,durationInFrames:210,children:y("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:16},children:[y("div",{style:{display:"flex",alignItems:"center",gap:16},children:[_(bH,{method:H,enterAt:10}),_(B,{text:K,variant:"subheading",enterAt:15,color:X.colors.mutedForeground})]}),_(B,{text:J,variant:"title",enterAt:5,color:"#ffffff"}),_("div",{style:{flex:1,marginTop:24},children:_(QH,{code:Q,language:"typescript",filename:`${J.toLowerCase()}.contract.ts`,startAt:45,typeAnimation:!0})})]})}),_(a,{from:180,durationInFrames:W-180,children:y("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",gap:24},children:[_(B,{text:"Generates:",variant:"heading",enterAt:0,color:"#ffffff",align:"center"}),_("div",{style:{display:"flex",flexWrap:"wrap",gap:16,justifyContent:"center",maxWidth:"80%",marginTop:32},children:z.map((N,G)=>_(FH,{label:N,index:G,startFrame:20+G*8},N))}),_(a,{from:U-180,children:_("div",{style:{marginTop:48},children:_(B,{text:$,variant:"heading",enterAt:0,color:X.colors.accent,align:"center"})})})]})})]}),_(v,{})]})},bH=({method:J,enterAt:H})=>{let K=zH(),Q=f(K,[H,H+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance}),z=f(K,[H,H+12],[0.8,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis}),$={GET:"#61afef",POST:"#98c379",PUT:"#e5c07b",PATCH:"#d19a66",DELETE:"#e06c75"};return _("div",{style:{opacity:Q,transform:`scale(${z})`,backgroundColor:$[J]??"#61afef",color:"#000",padding:"8px 20px",borderRadius:8,fontSize:24,fontWeight:700,fontFamily:"monospace",letterSpacing:1},children:J})},FH=({label:J,startFrame:H})=>{let K=zH(),Q=f(K,[H,H+12],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),z=f(K,[H,H+15],[20,0],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis}),$=f(K,[H,H+15],[0.9,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis});return _("div",{style:{opacity:Q,transform:`translateY(${z}px) scale(${$})`,backgroundColor:"rgba(255,255,255,0.08)",border:"1px solid rgba(255,255,255,0.15)",color:"#ffffff",padding:"16px 32px",borderRadius:12,fontSize:28,fontWeight:500},children:J})};import{interpolate as i,useCurrentFrame as SH,useVideoConfig as TH}from"remotion";import{jsx as O,jsxs as p}from"react/jsx-runtime";var WH={command:"#c9d1d9",output:"#8b949e",error:"#f85149",success:"#3fb950",comment:"#6e7681"},UH=({lines:J,startAt:H=0,prompt:K="$ ",title:Q="Terminal",backgroundColor:z=h.terminalBackground,typingSpeed:$=V.codeTypingPerChar})=>{let W=SH(),{width:X}=TH(),R=F(b.code,X),L=[],q=H;for(let U of J){let N=U.delay??10,G=q+N;if(U.type==="command"){let Z=U.text.length*$;L.push({startFrame:G,endFrame:G+Z}),q=G+Z}else L.push({startFrame:G,endFrame:G+5}),q=G+5}let Y=i(W,[H,H+10],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance});return p("div",{style:{backgroundColor:z,borderRadius:16,overflow:"hidden",opacity:Y,boxShadow:"0 8px 32px rgba(0,0,0,0.3)"},children:[p("div",{style:{display:"flex",alignItems:"center",padding:"12px 20px",backgroundColor:"rgba(255,255,255,0.05)",gap:8},children:[p("div",{style:{display:"flex",gap:8},children:[O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#ff5f57"}}),O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#febc2e"}}),O("div",{style:{width:12,height:12,borderRadius:"50%",backgroundColor:"#28c840"}})]}),O("div",{style:{flex:1,textAlign:"center",color:"#484f58",fontSize:R.fontSize*0.7,fontFamily:"monospace"},children:Q})]}),O("div",{style:{padding:"24px 32px",minHeight:200},children:J.map((U,N)=>{let G=L[N];if(!G||W<G.startFrame)return null;let Z=U.type==="command",k=WH[U.type],E=U.text;if(Z){let qH=i(W,[G.startFrame,G.endFrame],[0,U.text.length],{extrapolateLeft:"clamp",extrapolateRight:"clamp"});E=U.text.slice(0,Math.floor(qH))}let o=Z?1:i(W,[G.startFrame,G.startFrame+5],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),RH=Z&&W>=G.startFrame&&W<=G.endFrame&&W%16<10;return p("div",{style:{fontFamily:"'SF Mono', 'Fira Code', 'JetBrains Mono', monospace",fontSize:R.fontSize,lineHeight:1.8,color:k,opacity:o,whiteSpace:"pre-wrap"},children:[Z&&O("span",{style:{color:"#3fb950"},children:K}),U.type==="comment"&&O("span",{style:{color:WH.comment},children:"# "}),E,RH&&O("span",{style:{backgroundColor:"#c9d1d9",width:"2px",display:"inline-block",height:"1.2em",verticalAlign:"text-bottom"},children:"\xA0"})]},`${N}-${U.text.slice(0,20)}`)})})]})};import{AbsoluteFill as AH,interpolate as d,Sequence as c,useCurrentFrame as XH,useVideoConfig as vH}from"remotion";import{jsx as I,jsxs as m}from"react/jsx-runtime";var l=({hook:J,message:H,points:K=[],cta:Q="Learn more",ctaUrl:z="contractspec.dev",accentColor:$})=>{let{durationInFrames:W,width:X,height:R}=vH(),q=$??P.colors.accent,Y=R>X,U=75,N=60,G=120,Z=W-90;return m(AH,{children:[I(T,{variant:"gradient",showBranding:!0,children:m("div",{style:{flex:1,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",gap:Y?48:32,textAlign:"center",padding:Y?"0 20px":0},children:[I(c,{from:0,durationInFrames:105,children:I("div",{style:{width:"100%"},children:I(B,{text:J,variant:"title",enterAt:5,exitAt:75,color:"#ffffff",align:"center"})})}),I(c,{from:60,children:I("div",{style:{width:"100%"},children:I(B,{text:H,variant:Y?"subheading":"heading",enterAt:0,color:"#ffffff",align:"center"})})}),K.length>0&&I(c,{from:120,children:I("div",{style:{display:"flex",flexDirection:"column",gap:16,alignItems:Y?"flex-start":"center",width:"100%",maxWidth:Y?"100%":"80%",marginTop:16},children:K.map((k,E)=>I(CH,{text:k,index:E,startFrame:E*15,accent:q},k))})}),I(c,{from:Z,children:I(hH,{cta:Q,url:z,accent:q})})]})}),I(v,{color:q})]})},CH=({text:J,startFrame:H,accent:K})=>{let Q=XH(),z=d(Q,[H,H+12],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),$=d(Q,[H,H+15],[-30,0],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.entrance});return m("div",{style:{opacity:z,transform:`translateX(${$}px)`,display:"flex",alignItems:"center",gap:16,fontSize:28,color:"#ffffff"},children:[I("div",{style:{width:8,height:8,borderRadius:"50%",backgroundColor:K,flexShrink:0}}),J]})},hH=({cta:J,url:H,accent:K})=>{let Q=XH(),z=d(Q,[0,15],[0,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp"}),$=d(Q,[0,18],[0.9,1],{extrapolateLeft:"clamp",extrapolateRight:"clamp",easing:M.emphasis});return m("div",{style:{opacity:z,transform:`scale(${$})`,display:"flex",flexDirection:"column",alignItems:"center",gap:12,marginTop:24},children:[I("div",{style:{backgroundColor:K,color:"#ffffff",padding:"16px 48px",borderRadius:12,fontSize:28,fontWeight:600},children:J}),I("div",{style:{color:"rgba(255,255,255,0.5)",fontSize:20},children:H})]})};import{AbsoluteFill as yH,Sequence as LH,useVideoConfig as fH}from"remotion";import{jsx as D,jsxs as t}from"react/jsx-runtime";var MH=({title:J,subtitle:H,lines:K,terminalTitle:Q="Terminal",prompt:z="$ ",summary:$})=>{let{durationInFrames:W}=fH(),X=P,R=40,L=W-90;return t(yH,{children:[D(T,{variant:"dark",showBranding:!0,children:t("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:24},children:[t("div",{children:[D(B,{text:J,variant:"heading",enterAt:5,color:"#ffffff"}),H&&D("div",{style:{marginTop:8},children:D(B,{text:H,variant:"body",enterAt:15,color:X.colors.mutedForeground})})]}),D(LH,{from:40,children:D("div",{style:{flex:1},children:D(UH,{lines:K,startAt:0,prompt:z,title:Q})})}),$&&D(LH,{from:L,children:D("div",{style:{marginTop:"auto",paddingTop:24},children:D(B,{text:$,variant:"subheading",enterAt:0,color:X.colors.accent,align:"center"})})})]})}),D(v,{})]})};import{Composition as j}from"remotion";import{jsx as g,jsxs as xH,Fragment as uH}from"react/jsx-runtime";var jH={specName:"CreateUser",method:"POST",endpoint:"/api/users",specCode:`export const createUser = defineCommand({
|
|
3
|
+
meta: {
|
|
4
|
+
name: 'CreateUser',
|
|
5
|
+
version: '1.0.0',
|
|
6
|
+
stability: 'Stable',
|
|
7
|
+
},
|
|
8
|
+
io: {
|
|
9
|
+
input: z.object({
|
|
10
|
+
email: z.string().email(),
|
|
11
|
+
name: z.string(),
|
|
12
|
+
role: z.enum(['admin', 'user']),
|
|
13
|
+
}),
|
|
14
|
+
output: z.object({
|
|
15
|
+
id: z.string().uuid(),
|
|
16
|
+
email: z.string(),
|
|
17
|
+
createdAt: z.date(),
|
|
18
|
+
}),
|
|
19
|
+
},
|
|
20
|
+
});`,generatedOutputs:["REST Endpoint","GraphQL Mutation","Prisma Model","TypeScript SDK","MCP Tool","OpenAPI Spec"],tagline:"One spec. Every surface."},e={hook:"Stop rewriting the same API logic.",message:"ContractSpec generates REST, GraphQL, DB, SDK, and MCP from a single spec.",points:["Deterministic output","Fully ejectable","Standard tech, no lock-in"],cta:"Try ContractSpec",ctaUrl:"contractspec.dev"},gH={title:"Getting Started with ContractSpec",subtitle:"Define once, generate everything.",lines:[{type:"comment",text:"Initialize a new ContractSpec project"},{type:"command",text:"npx contractspec init my-api"},{type:"output",text:"Created my-api/ with 3 sample contracts"},{type:"command",text:"cd my-api && npx contractspec build"},{type:"success",text:"Built 3 contracts -> 18 generated files"},{type:"output",text:" REST endpoints: 3"},{type:"output",text:" GraphQL types: 3"},{type:"output",text:" Prisma models: 3"},{type:"output",text:" TypeScript SDK: 3"},{type:"output",text:" MCP tools: 3"},{type:"output",text:" OpenAPI specs: 3"},{type:"command",text:"npx contractspec validate"},{type:"success",text:"All contracts valid. 0 warnings."}],terminalTitle:"contractspec",summary:"Ship faster. Stay coherent."},NH=()=>{return xH(uH,{children:[g(j,{id:"ApiOverview",component:GH,durationInFrames:450,fps:30,width:1920,height:1080,defaultProps:jH}),g(j,{id:"SocialClip",component:l,durationInFrames:300,fps:30,width:1920,height:1080,defaultProps:e}),g(j,{id:"SocialClipSquare",component:l,durationInFrames:300,fps:30,width:1080,height:1080,defaultProps:e}),g(j,{id:"SocialClipPortrait",component:l,durationInFrames:300,fps:30,width:1080,height:1920,defaultProps:e}),g(j,{id:"TerminalDemo",component:MH,durationInFrames:600,fps:30,width:1920,height:1080,defaultProps:gH})]})};import{registerRoot as pH}from"remotion";pH(NH);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { RenderConfig, VideoCodec, VideoOutputFormat } from '@contractspec/lib.contracts-integrations/integrations/providers/video';
|
|
2
|
+
/** Default render configuration for local rendering. */
|
|
3
|
+
export declare const defaultRenderConfig: Required<Pick<RenderConfig, 'codec' | 'outputFormat' | 'crf' | 'pixelFormat'>>;
|
|
4
|
+
/** Codec-to-output-format mapping. */
|
|
5
|
+
export declare const codecFormatMap: Record<VideoCodec, VideoOutputFormat>;
|
|
6
|
+
/** Quality presets. */
|
|
7
|
+
export declare const qualityPresets: {
|
|
8
|
+
/** Fastest render, lower quality (previews) */
|
|
9
|
+
readonly draft: {
|
|
10
|
+
readonly crf: 28;
|
|
11
|
+
readonly concurrency: 1;
|
|
12
|
+
};
|
|
13
|
+
/** Balanced quality/speed */
|
|
14
|
+
readonly standard: {
|
|
15
|
+
readonly crf: 18;
|
|
16
|
+
readonly concurrency: undefined;
|
|
17
|
+
};
|
|
18
|
+
/** Highest quality (final output) */
|
|
19
|
+
readonly high: {
|
|
20
|
+
readonly crf: 12;
|
|
21
|
+
readonly concurrency: undefined;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export type QualityPreset = keyof typeof qualityPresets;
|
|
25
|
+
/**
|
|
26
|
+
* Merge user config with defaults.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolveRenderConfig(userConfig: RenderConfig, preset?: QualityPreset): RenderConfig;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var x=import.meta.require;var m={codec:"h264",outputFormat:"mp4",crf:18,pixelFormat:"yuv420p"},A={h264:"mp4",h265:"mp4",vp8:"webm",vp9:"webm"},v={draft:{crf:28,concurrency:1},standard:{crf:18,concurrency:void 0},high:{crf:12,concurrency:void 0}};function B(j,b){let k=b?v[b]:{};return{...m,...k,...j}}export{B as resolveRenderConfig,v as qualityPresets,m as defaultRenderConfig,A as codecFormatMap};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var Y=import.meta.require;import{VIDEO_FORMATS as H}from"@contractspec/lib.contracts-integrations/integrations/providers/video";var M=30,G={horizontal:120,vertical:80,contentWidth:1680,contentHeight:920};function V(y){let Q=y.width/1920,x=y.height/1080;return{horizontal:Math.round(G.horizontal*Q),vertical:Math.round(G.vertical*x),contentWidth:Math.round(G.contentWidth*Q),contentHeight:Math.round(G.contentHeight*x)}}var b={center:{x:960,y:540},topLeft:{x:120,y:80},topRight:{x:1800,y:80},bottomLeft:{x:120,y:1000},bottomRight:{x:1800,y:1000},bottomCenter:{x:960,y:960}};function h(){return[H.landscape,H.square,H.portrait]}var k={codec:"h264",outputFormat:"mp4",crf:18,pixelFormat:"yuv420p"},_={h264:"mp4",h265:"mp4",vp8:"webm",vp9:"webm"},L={draft:{crf:28,concurrency:1},standard:{crf:18,concurrency:void 0},high:{crf:12,concurrency:void 0}};function J(y,Q){let x=Q?L[Q]:{};return{...k,...x,...y}}class P{entryPoint;constructor(y){this.entryPoint=y.entryPoint}async render(y,Q){let x=J(Q),{bundle:D}=await import("@remotion/bundler"),{renderMedia:K,selectComposition:N}=await import("@remotion/renderer"),B=await D({entryPoint:this.entryPoint}),U=y.scenes[0],W=y.scenes.length===1&&U?U.compositionId:"Master",E=await N({serveUrl:B,id:W,inputProps:{project:y}});await K({composition:E,serveUrl:B,codec:x.codec,outputLocation:x.outputPath,inputProps:{project:y},...x.crf&&{crf:x.crf},...x.concurrency&&{concurrency:x.concurrency}});let $={outputPath:x.outputPath,format:x.outputFormat??k.outputFormat,codec:x.codec??k.codec,durationSeconds:y.totalDurationInFrames/y.fps,fileSizeBytes:0,dimensions:{width:y.format.width,height:y.format.height}};if(Q.autoVariants){let T=h().filter((z)=>z.type!==y.format.type),q=[];for(let z of T){let w=x.outputPath.replace(/(\.[^.]+)$/,`-${z.type}$1`),X={...y,format:z},Z=await N({serveUrl:B,id:W,inputProps:{project:X}});await K({composition:Z,serveUrl:B,codec:x.codec,outputLocation:w,inputProps:{project:X},...x.crf&&{crf:x.crf}}),q.push({outputPath:w,format:x.outputFormat??k.outputFormat,codec:x.codec??k.codec,durationSeconds:y.totalDurationInFrames/y.fps,fileSizeBytes:0,dimensions:{width:z.width,height:z.height}})}$.variants=q}return $}}export{J as resolveRenderConfig,L as qualityPresets,k as defaultRenderConfig,_ as codecFormatMap,P as LocalRenderer};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { RenderConfig, RenderResult, VideoProject, VideoProvider } from '@contractspec/lib.contracts-integrations/integrations/providers/video';
|
|
2
|
+
/**
|
|
3
|
+
* Local video renderer using @remotion/renderer.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* ```ts
|
|
7
|
+
* const renderer = new LocalRenderer({ entryPoint: './src/remotion/index.ts' });
|
|
8
|
+
* const result = await renderer.render(project, { outputPath: 'out/video.mp4' });
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export declare class LocalRenderer implements VideoProvider {
|
|
12
|
+
private readonly entryPoint;
|
|
13
|
+
constructor(options: {
|
|
14
|
+
entryPoint: string;
|
|
15
|
+
});
|
|
16
|
+
render(project: VideoProject, config: RenderConfig): Promise<RenderResult>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var X=import.meta.require;import{VIDEO_FORMATS as K}from"@contractspec/lib.contracts-integrations/integrations/providers/video";var I=30,J={horizontal:120,vertical:80,contentWidth:1680,contentHeight:920};function V(x){let z=x.width/1920,k=x.height/1080;return{horizontal:Math.round(J.horizontal*z),vertical:Math.round(J.vertical*k),contentWidth:Math.round(J.contentWidth*z),contentHeight:Math.round(J.contentHeight*k)}}var b={center:{x:960,y:540},topLeft:{x:120,y:80},topRight:{x:1800,y:80},bottomLeft:{x:120,y:1000},bottomRight:{x:1800,y:1000},bottomCenter:{x:960,y:960}};function Y(){return[K.landscape,K.square,K.portrait]}var G={codec:"h264",outputFormat:"mp4",crf:18,pixelFormat:"yuv420p"},O={h264:"mp4",h265:"mp4",vp8:"webm",vp9:"webm"},Z={draft:{crf:28,concurrency:1},standard:{crf:18,concurrency:void 0},high:{crf:12,concurrency:void 0}};function h(x,z){let k=z?Z[z]:{};return{...G,...k,...x}}class _{entryPoint;constructor(x){this.entryPoint=x.entryPoint}async render(x,z){let k=h(z),{bundle:D}=await import("@remotion/bundler"),{renderMedia:N,selectComposition:Q}=await import("@remotion/renderer"),H=await D({entryPoint:this.entryPoint}),U=x.scenes[0],W=x.scenes.length===1&&U?U.compositionId:"Master",E=await Q({serveUrl:H,id:W,inputProps:{project:x}});await N({composition:E,serveUrl:H,codec:k.codec,outputLocation:k.outputPath,inputProps:{project:x},...k.crf&&{crf:k.crf},...k.concurrency&&{concurrency:k.concurrency}});let $={outputPath:k.outputPath,format:k.outputFormat??G.outputFormat,codec:k.codec??G.codec,durationSeconds:x.totalDurationInFrames/x.fps,fileSizeBytes:0,dimensions:{width:x.format.width,height:x.format.height}};if(z.autoVariants){let L=Y().filter((B)=>B.type!==x.format.type),w=[];for(let B of L){let q=k.outputPath.replace(/(\.[^.]+)$/,`-${B.type}$1`),y={...x,format:B},T=await Q({serveUrl:H,id:W,inputProps:{project:y}});await N({composition:T,serveUrl:H,codec:k.codec,outputLocation:q,inputProps:{project:y},...k.crf&&{crf:k.crf}}),w.push({outputPath:q,format:k.outputFormat??G.outputFormat,codec:k.codec??G.codec,durationSeconds:x.totalDurationInFrames/x.fps,fileSizeBytes:0,dimensions:{width:B.width,height:B.height}})}$.variants=w}return $}}export{_ as LocalRenderer};
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { ModelSelectionContext, ModelSelector } from '@contractspec/lib.ai-providers/selector-types';
|
|
2
|
+
import type { ContentBrief } from '@contractspec/lib.content-gen/types';
|
|
3
|
+
import type { LLMProvider } from '@contractspec/lib.contracts-integrations/integrations/providers/llm';
|
|
4
|
+
import type { NarrationConfig, VideoFormat, VideoProject, VideoStyleOverrides } from '@contractspec/lib.contracts-integrations/integrations/providers/video';
|
|
5
|
+
import type { ImageGenerator } from '@contractspec/lib.image-gen/generators/image-generator';
|
|
6
|
+
import type { Transcriber } from '@contractspec/lib.voice/stt';
|
|
7
|
+
import type { VoiceSynthesizer } from '@contractspec/lib.voice/tts';
|
|
8
|
+
export type { AudioTrack, CompositionMeta, CompositionRegistry, NarrationConfig, RenderConfig, RenderResult, SceneTransition, SceneTransitionType, VideoCodec, VideoFormat, VideoFormatCustom, VideoFormatLandscape, VideoFormatPortrait, VideoFormatSquare, VideoOutputFormat, VideoProject, VideoProjectMetadata, VideoProvider, VideoScene, VideoStyleOverrides, } from '@contractspec/lib.contracts-integrations/integrations/providers/video';
|
|
9
|
+
export { VIDEO_FORMATS } from '@contractspec/lib.contracts-integrations/integrations/providers/video';
|
|
10
|
+
export type { TTSProject } from '@contractspec/lib.voice/tts';
|
|
11
|
+
/**
|
|
12
|
+
* Input for the video generation pipeline.
|
|
13
|
+
* Builds on top of ContentBrief to keep a unified content pipeline.
|
|
14
|
+
*/
|
|
15
|
+
export interface VideoBrief {
|
|
16
|
+
/** The content brief driving the video narrative */
|
|
17
|
+
content: ContentBrief;
|
|
18
|
+
/** Target video format / dimensions */
|
|
19
|
+
format: VideoFormat;
|
|
20
|
+
/** Target duration in seconds. Auto-calculated from scenes if omitted. */
|
|
21
|
+
targetDurationSeconds?: number;
|
|
22
|
+
/** Narration configuration */
|
|
23
|
+
narration?: NarrationConfig;
|
|
24
|
+
/** Visual style overrides */
|
|
25
|
+
style?: VideoStyleOverrides;
|
|
26
|
+
/** Composition template to use (if known). Otherwise scene planner picks. */
|
|
27
|
+
compositionId?: string;
|
|
28
|
+
/** Locale for generated content and LLM prompts (defaults to "en") */
|
|
29
|
+
locale?: string;
|
|
30
|
+
}
|
|
31
|
+
export interface VideoGeneratorOptions {
|
|
32
|
+
/** Optional LLM for enhanced scene planning & script generation */
|
|
33
|
+
llm?: LLMProvider;
|
|
34
|
+
/** Optional voice synthesizer for narration synthesis */
|
|
35
|
+
voice?: VoiceSynthesizer;
|
|
36
|
+
/** Optional transcriber for subtitle generation */
|
|
37
|
+
transcriber?: Transcriber;
|
|
38
|
+
/** Optional image generator for thumbnail generation */
|
|
39
|
+
image?: ImageGenerator;
|
|
40
|
+
/** LLM model override */
|
|
41
|
+
model?: string;
|
|
42
|
+
/** LLM temperature (0-1). Default 0.4 for determinism. */
|
|
43
|
+
temperature?: number;
|
|
44
|
+
/** Default voice ID for narration */
|
|
45
|
+
defaultVoiceId?: string;
|
|
46
|
+
/** Default FPS. Default 30. */
|
|
47
|
+
fps?: number;
|
|
48
|
+
/** Locale for generated content and LLM prompts (defaults to "en") */
|
|
49
|
+
locale?: string;
|
|
50
|
+
/** Ranking-driven model selector for dynamic model routing */
|
|
51
|
+
modelSelector?: ModelSelector;
|
|
52
|
+
/** Per-call selection context override */
|
|
53
|
+
selectionContext?: ModelSelectionContext;
|
|
54
|
+
/** Transport mode for video/LLM providers. */
|
|
55
|
+
transport?: 'rest' | 'mcp' | 'sdk';
|
|
56
|
+
/** Auth method for video/LLM providers. */
|
|
57
|
+
authMethod?: 'api-key' | 'oauth2' | 'bearer';
|
|
58
|
+
/** Custom auth headers for video/LLM providers. */
|
|
59
|
+
authHeaders?: Record<string, string>;
|
|
60
|
+
}
|
|
61
|
+
export interface GeneratedVideo {
|
|
62
|
+
project: VideoProject;
|
|
63
|
+
/** Set after rendering */
|
|
64
|
+
outputPath?: string;
|
|
65
|
+
format: 'mp4' | 'webm' | 'gif';
|
|
66
|
+
/** Auto-generated social format variants */
|
|
67
|
+
variants?: GeneratedVideoVariant[];
|
|
68
|
+
}
|
|
69
|
+
export interface GeneratedVideoVariant {
|
|
70
|
+
format: VideoFormat;
|
|
71
|
+
outputPath: string;
|
|
72
|
+
durationSeconds: number;
|
|
73
|
+
}
|
|
74
|
+
export interface ScenePlan {
|
|
75
|
+
scenes: PlannedScene[];
|
|
76
|
+
estimatedDurationSeconds: number;
|
|
77
|
+
narrationScript?: string;
|
|
78
|
+
}
|
|
79
|
+
export interface PlannedScene {
|
|
80
|
+
compositionId: string;
|
|
81
|
+
props: Record<string, unknown>;
|
|
82
|
+
durationInFrames: number;
|
|
83
|
+
narrationText?: string;
|
|
84
|
+
notes?: string;
|
|
85
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const VideoGenFeature: import("@contractspec/lib.contracts-spec").FeatureModuleSpec;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
var h=import.meta.require;import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var m=g({meta:{key:"libs.video-gen",version:"1.0.0",title:"Video Gen",description:"ContractSpec package declaration for @contractspec/lib.video-gen.",domain:"video-gen",owners:["@contractspec-core"],tags:["package","libs","video-gen"],stability:"experimental"},operations:[{key:"createUser",version:"1.0.0"}]});export{m as VideoGenFeature};
|