loopwind 0.23.0 → 0.24.0
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 +13 -117
- package/dist/cli.js +16 -10
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts.map +1 -1
- package/dist/commands/add.js +6 -10
- package/dist/commands/add.js.map +1 -1
- package/dist/commands/agent.d.ts +8 -0
- package/dist/commands/agent.d.ts.map +1 -0
- package/dist/commands/agent.js +101 -0
- package/dist/commands/agent.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +17 -7
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/render.d.ts.map +1 -1
- package/dist/commands/render.js +17 -19
- package/dist/commands/render.js.map +1 -1
- package/dist/default-templates/AGENTS.md +10 -24
- package/dist/lib/config.d.ts +2 -3
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +4 -9
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/constants.d.ts +1 -3
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +2 -4
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/installer.d.ts +2 -0
- package/dist/lib/installer.d.ts.map +1 -1
- package/dist/lib/installer.js +6 -7
- package/dist/lib/installer.js.map +1 -1
- package/dist/lib/renderer.d.ts.map +1 -1
- package/dist/lib/renderer.js +4 -1
- package/dist/lib/renderer.js.map +1 -1
- package/dist/lib/utils.d.ts +13 -29
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +45 -155
- package/dist/lib/utils.js.map +1 -1
- package/dist/types/config.d.ts +0 -2
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/config.js.map +1 -1
- package/package.json +1 -15
- package/REGISTRY_SETUP.md +0 -363
- package/dist/default-templates/image/template.d.ts +0 -20
- package/dist/default-templates/image/template.d.ts.map +0 -1
- package/dist/default-templates/image/template.js +0 -18
- package/dist/default-templates/image/template.js.map +0 -1
- package/dist/default-templates/image/template.tsx +0 -20
- package/dist/default-templates/kitchen-sink/template.tsx +0 -64
- package/dist/default-templates/page/template.tsx +0 -37
- package/dist/default-templates/video/template.d.ts +0 -26
- package/dist/default-templates/video/template.d.ts.map +0 -1
- package/dist/default-templates/video/template.js +0 -33
- package/dist/default-templates/video/template.js.map +0 -1
- package/dist/default-templates/video/template.tsx +0 -37
- package/dist/default-templates/website/pages/home.tsx +0 -17
- package/dist/default-templates/website/parts/footer.tsx +0 -17
- package/dist/default-templates/website/parts/header.tsx +0 -17
- package/dist/default-templates/website/template.tsx +0 -17
- package/dist/default-templates/website-template/pages/home.tsx +0 -13
- package/dist/default-templates/website-template/parts/footer.tsx +0 -15
- package/dist/default-templates/website-template/parts/header.tsx +0 -15
- package/dist/default-templates/website-template/template.tsx +0 -32
- package/dist/lib/encode-worker.d.ts +0 -2
- package/dist/lib/encode-worker.d.ts.map +0 -1
- package/dist/lib/encode-worker.js +0 -29
- package/dist/lib/encode-worker.js.map +0 -1
- package/dist/lib/mjpeg-muxer.d.ts +0 -46
- package/dist/lib/mjpeg-muxer.d.ts.map +0 -1
- package/dist/lib/mjpeg-muxer.js +0 -513
- package/dist/lib/mjpeg-muxer.js.map +0 -1
- package/dist/lib/render-core.d.ts +0 -63
- package/dist/lib/render-core.d.ts.map +0 -1
- package/dist/lib/render-core.js +0 -65
- package/dist/lib/render-core.js.map +0 -1
- package/dist/lib/tailwind-browser.d.ts +0 -27
- package/dist/lib/tailwind-browser.d.ts.map +0 -1
- package/dist/lib/tailwind-browser.js +0 -853
- package/dist/lib/tailwind-browser.js.map +0 -1
- package/dist/lib/video-player.d.ts +0 -25
- package/dist/lib/video-player.d.ts.map +0 -1
- package/dist/lib/video-player.js +0 -392
- package/dist/lib/video-player.js.map +0 -1
- package/dist/sdk/compiler.d.ts +0 -94
- package/dist/sdk/compiler.d.ts.map +0 -1
- package/dist/sdk/compiler.js +0 -122
- package/dist/sdk/compiler.js.map +0 -1
- package/dist/sdk/edge/index.d.ts +0 -91
- package/dist/sdk/edge/index.d.ts.map +0 -1
- package/dist/sdk/edge/index.js +0 -187
- package/dist/sdk/edge/index.js.map +0 -1
- package/dist/sdk/index.d.ts +0 -62
- package/dist/sdk/index.d.ts.map +0 -1
- package/dist/sdk/index.js +0 -141
- package/dist/sdk/index.js.map +0 -1
- package/dist/sdk/preview.d.ts +0 -65
- package/dist/sdk/preview.d.ts.map +0 -1
- package/dist/sdk/preview.js +0 -262
- package/dist/sdk/preview.js.map +0 -1
- package/dist/sdk/template.d.ts +0 -162
- package/dist/sdk/template.d.ts.map +0 -1
- package/dist/sdk/template.js +0 -231
- package/dist/sdk/template.js.map +0 -1
- package/dist/sdk/workers/index.d.ts +0 -135
- package/dist/sdk/workers/index.d.ts.map +0 -1
- package/dist/sdk/workers/index.js +0 -271
- package/dist/sdk/workers/index.js.map +0 -1
- package/dist/sdk/workers/tailwind-config.d.ts +0 -48
- package/dist/sdk/workers/tailwind-config.d.ts.map +0 -1
- package/dist/sdk/workers/tailwind-config.js +0 -187
- package/dist/sdk/workers/tailwind-config.js.map +0 -1
- package/dist/sdk/workers/tailwind.d.ts +0 -9
- package/dist/sdk/workers/tailwind.d.ts.map +0 -1
- package/dist/sdk/workers/tailwind.js +0 -8
- package/dist/sdk/workers/tailwind.js.map +0 -1
- package/examples/code-editor-templates.ts +0 -173
- package/examples/nextjs-api/README.md +0 -180
- package/examples/nextjs-api/package.json +0 -21
- package/examples/nextjs-api/pages/api/intro-video.ts +0 -53
- package/examples/nextjs-api/pages/api/og-image.ts +0 -50
- package/examples/nextjs-template-import.ts +0 -58
- package/examples/sdk-video-preview.tsx +0 -120
- package/examples/template-compiler-workflow.ts +0 -251
- package/examples/visual-builder-templates.ts +0 -336
- package/render-examples-600x400.mjs +0 -161
- package/render-spring-variants-fixed.mjs +0 -60
- package/render-staggered-text.mjs +0 -56
- package/test-cloudflare-worker/README.md +0 -64
- package/test-cloudflare-worker/dist/README.md +0 -1
- package/test-cloudflare-worker/dist/index.js +0 -23743
- package/test-cloudflare-worker/dist/index.js.map +0 -8
- package/test-cloudflare-worker/package-lock.json +0 -1773
- package/test-cloudflare-worker/package.json +0 -25
- package/test-cloudflare-worker/test-sdk.mjs +0 -75
- package/test-cloudflare-worker/wrangler.toml +0 -14
- package/test-font-files.mjs +0 -72
- package/test-jsx-support.mjs +0 -146
- package/test-sdk-config.mjs +0 -454
- package/test-sdk-source-config.mjs +0 -427
- package/test-sdk-user-templates.mjs +0 -469
- package/test-static-debug.tsx +0 -19
- package/test-templates/TESTS.md +0 -63
- package/test-templates/config-test.mjs +0 -17
- package/test-templates/demo-intro-props.json +0 -4
- package/test-templates/run-tests.sh +0 -44
- package/test-templates/test-sdk.mjs +0 -139
- package/test-video-720p.mjs +0 -96
- package/test-video-breakdown.mjs +0 -98
- package/test-video-perf-1080.mjs +0 -67
- package/test-video-perf.mjs +0 -56
- package/test-video-props.json +0 -3
- package/test-worker-1080p.mjs +0 -103
- package/test-worker-viability.mjs +0 -140
- package/website/.astro/content.db +0 -0
- package/website/.astro/integrations/_inox-tools_astro-when/types.d.ts +0 -1
- package/website/.astro/integrations/astro_db/db.d.ts +0 -15
- package/website/.astro/settings.json +0 -5
- package/website/.astro/types.d.ts +0 -2
- package/website/DEPLOYMENT.md +0 -143
- package/website/OG_IMAGES.md +0 -142
- package/website/README.md +0 -158
- package/website/astro.config.mjs +0 -41
- package/website/dist/.gitkeep +0 -5
- package/website/dist/_astro/PlaygroundEditor.DzFavsm8.js +0 -26
- package/website/dist/_astro/VideoPreviewClient.BrajhYmh.js +0 -1
- package/website/dist/_astro/agents.CZXv4DCM.css +0 -1
- package/website/dist/_astro/client.BHSq4mdQ.js +0 -33
- package/website/dist/_astro/index.CTbGshLK.js +0 -9
- package/website/dist/_astro/jsx-runtime.BjG_zV1W.js +0 -9
- package/website/dist/_routes.json +0 -31
- package/website/dist/_worker.js/_@astrojs-ssr-adapter.mjs +0 -1033
- package/website/dist/_worker.js/_astro-internal_middleware.mjs +0 -40
- package/website/dist/_worker.js/chunks/Logo_Cud5QvBJ.mjs +0 -22
- package/website/dist/_worker.js/chunks/_@astro-renderers_-YVK7NHa.mjs +0 -15015
- package/website/dist/_worker.js/chunks/abap_BTmsHiP5.mjs +0 -1
- package/website/dist/_worker.js/chunks/actionscript-3_DmBelb1E.mjs +0 -1
- package/website/dist/_worker.js/chunks/ada_8-E0ahCN.mjs +0 -1
- package/website/dist/_worker.js/chunks/andromeeda_XI-CXx50.mjs +0 -1
- package/website/dist/_worker.js/chunks/angular-html_DKGh3gGH.mjs +0 -1
- package/website/dist/_worker.js/chunks/angular-ts_-qZGsJoA.mjs +0 -1
- package/website/dist/_worker.js/chunks/apache_ijTUt0Ee.mjs +0 -1
- package/website/dist/_worker.js/chunks/apex_agu1c6Sh.mjs +0 -1
- package/website/dist/_worker.js/chunks/apl_Bj2f7Art.mjs +0 -1
- package/website/dist/_worker.js/chunks/applescript_B_vXrOh3.mjs +0 -1
- package/website/dist/_worker.js/chunks/ara_DCEQ2rnh.mjs +0 -1
- package/website/dist/_worker.js/chunks/asciidoc_CGN_EkYS.mjs +0 -1
- package/website/dist/_worker.js/chunks/asm_BBWZgnDp.mjs +0 -1
- package/website/dist/_worker.js/chunks/astro/assets-service_j52rQLzU.mjs +0 -721
- package/website/dist/_worker.js/chunks/astro/server_CsUrSZgd.mjs +0 -2512
- package/website/dist/_worker.js/chunks/astro-designed-error-pages_1ELXm5Tt.mjs +0 -542
- package/website/dist/_worker.js/chunks/astro_Dr_hht3h.mjs +0 -1
- package/website/dist/_worker.js/chunks/aurora-x_9GHG8nSq.mjs +0 -1
- package/website/dist/_worker.js/chunks/awk_DHRvhXot.mjs +0 -1
- package/website/dist/_worker.js/chunks/ayu-dark_CcvqmEHE.mjs +0 -1
- package/website/dist/_worker.js/chunks/ballerina_C7SdeSZb.mjs +0 -1
- package/website/dist/_worker.js/chunks/bat_Dv4A3u45.mjs +0 -1
- package/website/dist/_worker.js/chunks/beancount_BfPf9Luv.mjs +0 -1
- package/website/dist/_worker.js/chunks/berry_B8rfM3lL.mjs +0 -1
- package/website/dist/_worker.js/chunks/bibtex_TcjYgtJM.mjs +0 -1
- package/website/dist/_worker.js/chunks/bicep_CrlFWCdN.mjs +0 -1
- package/website/dist/_worker.js/chunks/blade_lanKVYID.mjs +0 -1
- package/website/dist/_worker.js/chunks/bsl_BhppzXMB.mjs +0 -1
- package/website/dist/_worker.js/chunks/c_6FBALJTK.mjs +0 -1
- package/website/dist/_worker.js/chunks/cadence_2txU9LVE.mjs +0 -1
- package/website/dist/_worker.js/chunks/cairo_BkrFAIlP.mjs +0 -1
- package/website/dist/_worker.js/chunks/catppuccin-frappe_CkEqIYhU.mjs +0 -1
- package/website/dist/_worker.js/chunks/catppuccin-latte_DG4Gx_-v.mjs +0 -1
- package/website/dist/_worker.js/chunks/catppuccin-macchiato_Cwi3vCXf.mjs +0 -1
- package/website/dist/_worker.js/chunks/catppuccin-mocha_L9_OPlFX.mjs +0 -1
- package/website/dist/_worker.js/chunks/clarity_BEAe4Ulu.mjs +0 -1
- package/website/dist/_worker.js/chunks/clojure_VnUX6p2g.mjs +0 -1
- package/website/dist/_worker.js/chunks/cmake_0-SGkZEj.mjs +0 -1
- package/website/dist/_worker.js/chunks/cobol_92M_KGaE.mjs +0 -1
- package/website/dist/_worker.js/chunks/codeowners_CzMwskBv.mjs +0 -1
- package/website/dist/_worker.js/chunks/codeql_DWJZNHv1.mjs +0 -1
- package/website/dist/_worker.js/chunks/coffee_CQjKU2fh.mjs +0 -1
- package/website/dist/_worker.js/chunks/common-lisp_BBLWDpS5.mjs +0 -1
- package/website/dist/_worker.js/chunks/coq_hedRFV3D.mjs +0 -1
- package/website/dist/_worker.js/chunks/cpp_DlS1i6Zs.mjs +0 -1
- package/website/dist/_worker.js/chunks/crystal_D6n65fKV.mjs +0 -1
- package/website/dist/_worker.js/chunks/csharp_C6FCVFzc.mjs +0 -1
- package/website/dist/_worker.js/chunks/css_C5uJEgmJ.mjs +0 -1
- package/website/dist/_worker.js/chunks/csv_CtMYuuJl.mjs +0 -1
- package/website/dist/_worker.js/chunks/cue_BsPexqx6.mjs +0 -1
- package/website/dist/_worker.js/chunks/cypher_apzf6OBi.mjs +0 -1
- package/website/dist/_worker.js/chunks/d_DcvIRcgm.mjs +0 -1
- package/website/dist/_worker.js/chunks/dark-plus_C01ONtzj.mjs +0 -1
- package/website/dist/_worker.js/chunks/dart_WkzM5WrV.mjs +0 -1
- package/website/dist/_worker.js/chunks/dax_DjXAO5V4.mjs +0 -1
- package/website/dist/_worker.js/chunks/desktop_C92LCxdc.mjs +0 -1
- package/website/dist/_worker.js/chunks/diff_CVwM_9XJ.mjs +0 -1
- package/website/dist/_worker.js/chunks/docker_DPzgJf6Z.mjs +0 -1
- package/website/dist/_worker.js/chunks/dotenv_D_vgANvA.mjs +0 -1
- package/website/dist/_worker.js/chunks/dracula-soft_CLnUBwFm.mjs +0 -1
- package/website/dist/_worker.js/chunks/dracula_lBVpb6Lb.mjs +0 -1
- package/website/dist/_worker.js/chunks/dream-maker_DTLbzd_J.mjs +0 -1
- package/website/dist/_worker.js/chunks/edge_i54JYm3_.mjs +0 -1
- package/website/dist/_worker.js/chunks/elixir_BJCIjTu4.mjs +0 -1
- package/website/dist/_worker.js/chunks/elm_BbXD39-_.mjs +0 -1
- package/website/dist/_worker.js/chunks/emacs-lisp_pxa5cXaN.mjs +0 -1
- package/website/dist/_worker.js/chunks/erb_Ccjijeee.mjs +0 -1
- package/website/dist/_worker.js/chunks/erlang_B2VM_hi7.mjs +0 -1
- package/website/dist/_worker.js/chunks/everforest-dark_BxvIPBim.mjs +0 -1
- package/website/dist/_worker.js/chunks/everforest-light_B7VoyaJM.mjs +0 -1
- package/website/dist/_worker.js/chunks/fennel_D-uo7X6c.mjs +0 -1
- package/website/dist/_worker.js/chunks/fish_BjePoK3m.mjs +0 -1
- package/website/dist/_worker.js/chunks/fluent_C8fgkzLX.mjs +0 -1
- package/website/dist/_worker.js/chunks/fortran-fixed-form_D1pu5zrc.mjs +0 -1
- package/website/dist/_worker.js/chunks/fortran-free-form_CSGOhJD6.mjs +0 -1
- package/website/dist/_worker.js/chunks/fsharp_B0xy-A4Y.mjs +0 -1
- package/website/dist/_worker.js/chunks/gdresource_CWppjlHq.mjs +0 -1
- package/website/dist/_worker.js/chunks/gdscript_eQCHchcS.mjs +0 -1
- package/website/dist/_worker.js/chunks/gdshader_C4kxepX7.mjs +0 -1
- package/website/dist/_worker.js/chunks/genie_ACtQLcDW.mjs +0 -1
- package/website/dist/_worker.js/chunks/gherkin_BFp2uKUd.mjs +0 -1
- package/website/dist/_worker.js/chunks/git-commit_CLg9ZwMV.mjs +0 -1
- package/website/dist/_worker.js/chunks/git-rebase_DG8A80Nt.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-dark-default_BI0EP2Kv.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-dark-dimmed_a_NIC0Xb.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-dark-high-contrast_jZGqT7hk.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-dark_CHCDNd2O.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-light-default_DRbOW5RG.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-light-high-contrast_tn_kWutM.mjs +0 -1
- package/website/dist/_worker.js/chunks/github-light_D9brYzot.mjs +0 -1
- package/website/dist/_worker.js/chunks/gleam_Dmhu1oxW.mjs +0 -1
- package/website/dist/_worker.js/chunks/glimmer-js_BfZbXy8A.mjs +0 -1
- package/website/dist/_worker.js/chunks/glimmer-ts_B9QVICrD.mjs +0 -1
- package/website/dist/_worker.js/chunks/glsl_DD2PPwOs.mjs +0 -1
- package/website/dist/_worker.js/chunks/gnuplot_D2OYChUX.mjs +0 -1
- package/website/dist/_worker.js/chunks/go_DYGFTe3h.mjs +0 -1
- package/website/dist/_worker.js/chunks/graphql_B7XsT3nH.mjs +0 -1
- package/website/dist/_worker.js/chunks/groovy_BO12Uwkl.mjs +0 -1
- package/website/dist/_worker.js/chunks/hack_CB2_ztCP.mjs +0 -1
- package/website/dist/_worker.js/chunks/haml_CyfDcDD3.mjs +0 -1
- package/website/dist/_worker.js/chunks/handlebars_CfpxpWm2.mjs +0 -1
- package/website/dist/_worker.js/chunks/haskell_jUeC5uN5.mjs +0 -1
- package/website/dist/_worker.js/chunks/haxe_B6GxP1WB.mjs +0 -1
- package/website/dist/_worker.js/chunks/hcl_DwoHV2oh.mjs +0 -1
- package/website/dist/_worker.js/chunks/hjson_DV7cJRk4.mjs +0 -1
- package/website/dist/_worker.js/chunks/hlsl_BlFCscPI.mjs +0 -1
- package/website/dist/_worker.js/chunks/houston_COBFG1Mx.mjs +0 -1
- package/website/dist/_worker.js/chunks/html-derivative_C9pJ337h.mjs +0 -1
- package/website/dist/_worker.js/chunks/html_D1OkrZS5.mjs +0 -1
- package/website/dist/_worker.js/chunks/http_DIGXRqvJ.mjs +0 -1
- package/website/dist/_worker.js/chunks/hxml_DEwh9i-c.mjs +0 -1
- package/website/dist/_worker.js/chunks/hy_DDoIgW1K.mjs +0 -1
- package/website/dist/_worker.js/chunks/imba_B00zbHo4.mjs +0 -1
- package/website/dist/_worker.js/chunks/index_BDWR1Q-q.mjs +0 -1861
- package/website/dist/_worker.js/chunks/ini_D7XQA_p8.mjs +0 -1
- package/website/dist/_worker.js/chunks/java_B9wdFd8K.mjs +0 -1
- package/website/dist/_worker.js/chunks/javascript_CLsPGOON.mjs +0 -1
- package/website/dist/_worker.js/chunks/jinja_jarBCAN1.mjs +0 -1
- package/website/dist/_worker.js/chunks/jison_oGg3J708.mjs +0 -1
- package/website/dist/_worker.js/chunks/json5_DlZ1Kyaa.mjs +0 -1
- package/website/dist/_worker.js/chunks/json_DaYk_FMp.mjs +0 -1
- package/website/dist/_worker.js/chunks/jsonc_DlwgfSDs.mjs +0 -1
- package/website/dist/_worker.js/chunks/jsonl_BbCCVaZF.mjs +0 -1
- package/website/dist/_worker.js/chunks/jsonnet_Dt-G75xe.mjs +0 -1
- package/website/dist/_worker.js/chunks/jssm_BtKFTj2A.mjs +0 -1
- package/website/dist/_worker.js/chunks/jsx_DDx_xAZ8.mjs +0 -1
- package/website/dist/_worker.js/chunks/julia_CK0lv68l.mjs +0 -1
- package/website/dist/_worker.js/chunks/kanagawa-dragon_BldAK3Oo.mjs +0 -1
- package/website/dist/_worker.js/chunks/kanagawa-lotus_DVM8FX9_.mjs +0 -1
- package/website/dist/_worker.js/chunks/kanagawa-wave_Dpih0AKP.mjs +0 -1
- package/website/dist/_worker.js/chunks/kotlin_kWneB9V_.mjs +0 -1
- package/website/dist/_worker.js/chunks/kusto_BKVATd95.mjs +0 -1
- package/website/dist/_worker.js/chunks/laserwave_BqatxsVl.mjs +0 -1
- package/website/dist/_worker.js/chunks/latex_LVDcGBbc.mjs +0 -1
- package/website/dist/_worker.js/chunks/lean_W7qo-5M2.mjs +0 -1
- package/website/dist/_worker.js/chunks/less_DFNwJnBH.mjs +0 -1
- package/website/dist/_worker.js/chunks/light-plus_Dp0AoWsO.mjs +0 -1
- package/website/dist/_worker.js/chunks/liquid_D24qs0pc.mjs +0 -1
- package/website/dist/_worker.js/chunks/log_IPWMXriF.mjs +0 -1
- package/website/dist/_worker.js/chunks/logo_C6KaatrQ.mjs +0 -1
- package/website/dist/_worker.js/chunks/lua_CwnEf-T7.mjs +0 -1
- package/website/dist/_worker.js/chunks/luau_Br3-CXjS.mjs +0 -1
- package/website/dist/_worker.js/chunks/make_UBNG-kOo.mjs +0 -1
- package/website/dist/_worker.js/chunks/markdown_C7mhJFCm.mjs +0 -1
- package/website/dist/_worker.js/chunks/marko_4tchUvI7.mjs +0 -1
- package/website/dist/_worker.js/chunks/material-theme-darker_SKtaNEPn.mjs +0 -1
- package/website/dist/_worker.js/chunks/material-theme-lighter_zOX_DZCH.mjs +0 -1
- package/website/dist/_worker.js/chunks/material-theme-ocean_BN9WbhdC.mjs +0 -1
- package/website/dist/_worker.js/chunks/material-theme-palenight_DT_covjH.mjs +0 -1
- package/website/dist/_worker.js/chunks/material-theme_6RpeM3kc.mjs +0 -1
- package/website/dist/_worker.js/chunks/matlab_DCOXsPKR.mjs +0 -1
- package/website/dist/_worker.js/chunks/mdc_B9gb2UFP.mjs +0 -1
- package/website/dist/_worker.js/chunks/mdx_DGU7Nu9u.mjs +0 -1
- package/website/dist/_worker.js/chunks/mermaid_B69URzsZ.mjs +0 -1
- package/website/dist/_worker.js/chunks/min-dark_BgxifOMI.mjs +0 -1
- package/website/dist/_worker.js/chunks/min-light_BrPjXxUp.mjs +0 -1
- package/website/dist/_worker.js/chunks/mipsasm_9U-4_t7k.mjs +0 -1
- package/website/dist/_worker.js/chunks/mojo_B0wt7ug3.mjs +0 -1
- package/website/dist/_worker.js/chunks/monokai_B6Pxpoyi.mjs +0 -1
- package/website/dist/_worker.js/chunks/move_1eid4CyR.mjs +0 -1
- package/website/dist/_worker.js/chunks/narrat_Ds6-p5JZ.mjs +0 -1
- package/website/dist/_worker.js/chunks/nextflow_v2N1Qlqa.mjs +0 -1
- package/website/dist/_worker.js/chunks/nginx_Bp9Ab2NH.mjs +0 -1
- package/website/dist/_worker.js/chunks/night-owl_CdwOw_sc.mjs +0 -1
- package/website/dist/_worker.js/chunks/nim_BXGDUe53.mjs +0 -1
- package/website/dist/_worker.js/chunks/nix_CUig1nJH.mjs +0 -1
- package/website/dist/_worker.js/chunks/noop-middleware_B8fH5jha.mjs +0 -10
- package/website/dist/_worker.js/chunks/nord_SPoG1iae.mjs +0 -1
- package/website/dist/_worker.js/chunks/nushell_DJw1Lca8.mjs +0 -1
- package/website/dist/_worker.js/chunks/objective-c_Bktzl_CO.mjs +0 -1
- package/website/dist/_worker.js/chunks/objective-cpp_CP4DWdDp.mjs +0 -1
- package/website/dist/_worker.js/chunks/ocaml_CeEAs7bZ.mjs +0 -1
- package/website/dist/_worker.js/chunks/one-dark-pro_-hIwCNMi.mjs +0 -1
- package/website/dist/_worker.js/chunks/one-light_DSmYvJ05.mjs +0 -1
- package/website/dist/_worker.js/chunks/pascal_C-S_Ms_o.mjs +0 -1
- package/website/dist/_worker.js/chunks/perl_CKamvo15.mjs +0 -1
- package/website/dist/_worker.js/chunks/php_BlmcX_F3.mjs +0 -1
- package/website/dist/_worker.js/chunks/plastic_Ryt8tVoA.mjs +0 -1
- package/website/dist/_worker.js/chunks/plsql_Cb3v7cBj.mjs +0 -1
- package/website/dist/_worker.js/chunks/po_DZbdNRlo.mjs +0 -1
- package/website/dist/_worker.js/chunks/poimandres_bYmE3_5d.mjs +0 -1
- package/website/dist/_worker.js/chunks/polar_pJkMGwoW.mjs +0 -1
- package/website/dist/_worker.js/chunks/postcss_BAXSOKgk.mjs +0 -1
- package/website/dist/_worker.js/chunks/powerquery_oITMGN4x.mjs +0 -1
- package/website/dist/_worker.js/chunks/powershell_6306-xIF.mjs +0 -1
- package/website/dist/_worker.js/chunks/prisma_DSDxnZGz.mjs +0 -1
- package/website/dist/_worker.js/chunks/prolog_CxG7tjZR.mjs +0 -1
- package/website/dist/_worker.js/chunks/proto_CS9ByXm1.mjs +0 -1
- package/website/dist/_worker.js/chunks/pug_BMtLJo6U.mjs +0 -1
- package/website/dist/_worker.js/chunks/puppet_BfeeSzee.mjs +0 -1
- package/website/dist/_worker.js/chunks/purescript_BFfueNaH.mjs +0 -1
- package/website/dist/_worker.js/chunks/python_Cc4Faapv.mjs +0 -1
- package/website/dist/_worker.js/chunks/qml_C1CTJTK8.mjs +0 -1
- package/website/dist/_worker.js/chunks/qmldir_nG1KaqKR.mjs +0 -1
- package/website/dist/_worker.js/chunks/qss_Cncxk263.mjs +0 -1
- package/website/dist/_worker.js/chunks/r_ChR54Ihi.mjs +0 -1
- package/website/dist/_worker.js/chunks/racket_BDrhptDs.mjs +0 -1
- package/website/dist/_worker.js/chunks/raku_07OUHa0P.mjs +0 -1
- package/website/dist/_worker.js/chunks/razor_DIP3INLa.mjs +0 -1
- package/website/dist/_worker.js/chunks/red_DOPXfj-6.mjs +0 -1
- package/website/dist/_worker.js/chunks/reg_B64SwEDj.mjs +0 -1
- package/website/dist/_worker.js/chunks/regexp_ButFGoB5.mjs +0 -1
- package/website/dist/_worker.js/chunks/rel_BWJAWqZD.mjs +0 -1
- package/website/dist/_worker.js/chunks/riscv_79gXlbsF.mjs +0 -1
- package/website/dist/_worker.js/chunks/rose-pine-dawn_DHIjVGd3.mjs +0 -1
- package/website/dist/_worker.js/chunks/rose-pine-moon_t86aEbs0.mjs +0 -1
- package/website/dist/_worker.js/chunks/rose-pine_BHgrcDCs.mjs +0 -1
- package/website/dist/_worker.js/chunks/rst_D3F4Fcpj.mjs +0 -1
- package/website/dist/_worker.js/chunks/ruby_Cs7vM9iv.mjs +0 -1
- package/website/dist/_worker.js/chunks/rust_DpyRVatH.mjs +0 -1
- package/website/dist/_worker.js/chunks/sas_DW45xZXN.mjs +0 -1
- package/website/dist/_worker.js/chunks/sass_C6SiMwN_.mjs +0 -1
- package/website/dist/_worker.js/chunks/scala_DlZOjNZk.mjs +0 -1
- package/website/dist/_worker.js/chunks/scheme_D2ezSJXu.mjs +0 -1
- package/website/dist/_worker.js/chunks/scss_DG5Spjqu.mjs +0 -1
- package/website/dist/_worker.js/chunks/sdbl_ZCYaj4VN.mjs +0 -1
- package/website/dist/_worker.js/chunks/shaderlab_CAcRkg1_.mjs +0 -1
- package/website/dist/_worker.js/chunks/shellscript_BWwhkDVh.mjs +0 -1
- package/website/dist/_worker.js/chunks/shellsession_BfEA3juK.mjs +0 -1
- package/website/dist/_worker.js/chunks/slack-dark_CL3lSpCc.mjs +0 -1
- package/website/dist/_worker.js/chunks/slack-ochin_DdZKOQVh.mjs +0 -1
- package/website/dist/_worker.js/chunks/smalltalk_DgilzSui.mjs +0 -1
- package/website/dist/_worker.js/chunks/snazzy-light_eJU08Pz_.mjs +0 -1
- package/website/dist/_worker.js/chunks/solarized-dark_Dg_YQywx.mjs +0 -1
- package/website/dist/_worker.js/chunks/solarized-light_BnIsrA6p.mjs +0 -1
- package/website/dist/_worker.js/chunks/solidity_DkseH8pQ.mjs +0 -1
- package/website/dist/_worker.js/chunks/soy_DU7bOYoG.mjs +0 -1
- package/website/dist/_worker.js/chunks/sparql_BuI1DBDH.mjs +0 -1
- package/website/dist/_worker.js/chunks/splunk_B8Ha9Pkg.mjs +0 -1
- package/website/dist/_worker.js/chunks/sql_BniHwea5.mjs +0 -1
- package/website/dist/_worker.js/chunks/ssh-config_CkE1GuVe.mjs +0 -1
- package/website/dist/_worker.js/chunks/stata_Dtqpbd_l.mjs +0 -1
- package/website/dist/_worker.js/chunks/stylus_CXTtglzO.mjs +0 -1
- package/website/dist/_worker.js/chunks/svelte_BjWYcUCN.mjs +0 -1
- package/website/dist/_worker.js/chunks/swift_BzHql_rM.mjs +0 -1
- package/website/dist/_worker.js/chunks/synthwave-84_DLRNhxNA.mjs +0 -1
- package/website/dist/_worker.js/chunks/system-verilog_ChyInPph.mjs +0 -1
- package/website/dist/_worker.js/chunks/systemd_Bi9Qa2qD.mjs +0 -1
- package/website/dist/_worker.js/chunks/talonscript_B3sH_Y-V.mjs +0 -1
- package/website/dist/_worker.js/chunks/tasl_BJ5yipRs.mjs +0 -1
- package/website/dist/_worker.js/chunks/tcl_CoJQjNoP.mjs +0 -1
- package/website/dist/_worker.js/chunks/templ_CrU7Ffil.mjs +0 -1
- package/website/dist/_worker.js/chunks/terraform_DT9JSFpC.mjs +0 -1
- package/website/dist/_worker.js/chunks/tex_5PKu2yA0.mjs +0 -1
- package/website/dist/_worker.js/chunks/tokyo-night_Buo8OK7-.mjs +0 -1
- package/website/dist/_worker.js/chunks/toml_CPuXX3oc.mjs +0 -1
- package/website/dist/_worker.js/chunks/ts-tags_D0M_1VSH.mjs +0 -1
- package/website/dist/_worker.js/chunks/tsv_CuivVNot.mjs +0 -1
- package/website/dist/_worker.js/chunks/tsx_MkuGr8MY.mjs +0 -1
- package/website/dist/_worker.js/chunks/turtle_BqgEPK7f.mjs +0 -1
- package/website/dist/_worker.js/chunks/twig_r1G9rpYJ.mjs +0 -1
- package/website/dist/_worker.js/chunks/typescript_Au5buqzM.mjs +0 -1
- package/website/dist/_worker.js/chunks/typespec_47rhBK_z.mjs +0 -1
- package/website/dist/_worker.js/chunks/typst_BAtuQLh-.mjs +0 -1
- package/website/dist/_worker.js/chunks/v_BIvWImHg.mjs +0 -1
- package/website/dist/_worker.js/chunks/vala_DYEacj30.mjs +0 -1
- package/website/dist/_worker.js/chunks/vb_CikQuqGJ.mjs +0 -1
- package/website/dist/_worker.js/chunks/verilog_BQRENwI-.mjs +0 -1
- package/website/dist/_worker.js/chunks/vesper_DA0kvTmj.mjs +0 -1
- package/website/dist/_worker.js/chunks/vhdl_DHscJIyg.mjs +0 -1
- package/website/dist/_worker.js/chunks/viml_F2pvMwvG.mjs +0 -1
- package/website/dist/_worker.js/chunks/vitesse-black_D9tjNzd0.mjs +0 -1
- package/website/dist/_worker.js/chunks/vitesse-dark_Bnm5d0hd.mjs +0 -1
- package/website/dist/_worker.js/chunks/vitesse-light_CHwbyjNR.mjs +0 -1
- package/website/dist/_worker.js/chunks/vue-html_DyYtbbMK.mjs +0 -1
- package/website/dist/_worker.js/chunks/vue_DofN6juy.mjs +0 -1
- package/website/dist/_worker.js/chunks/vyper_CiR0m-OV.mjs +0 -1
- package/website/dist/_worker.js/chunks/wasm_CwIGgRGf.mjs +0 -1
- package/website/dist/_worker.js/chunks/wasm_jKWhg0J0.mjs +0 -1
- package/website/dist/_worker.js/chunks/wenyan_DKvVZKXW.mjs +0 -1
- package/website/dist/_worker.js/chunks/wgsl_BOWZY7yw.mjs +0 -1
- package/website/dist/_worker.js/chunks/wikitext_CXDhhHPy.mjs +0 -1
- package/website/dist/_worker.js/chunks/wolfram_ChkmGnW0.mjs +0 -1
- package/website/dist/_worker.js/chunks/xml_DXH3hHIu.mjs +0 -1
- package/website/dist/_worker.js/chunks/xsl_DuP2mFjg.mjs +0 -1
- package/website/dist/_worker.js/chunks/yaml_IGiEkTge.mjs +0 -1
- package/website/dist/_worker.js/chunks/zenscript_59iXGyNw.mjs +0 -1
- package/website/dist/_worker.js/chunks/zig_DKzb0zdT.mjs +0 -1
- package/website/dist/_worker.js/index.js +0 -61
- package/website/dist/_worker.js/manifest_Bk6136-u.mjs +0 -98
- package/website/dist/_worker.js/pages/_image.astro.mjs +0 -24
- package/website/dist/_worker.js/pages/agents.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/animation.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/api/playground/render.astro.mjs +0 -25562
- package/website/dist/_worker.js/pages/api/playground/templates.astro.mjs +0 -92
- package/website/dist/_worker.js/pages/api/raw-markdown/_---path_.astro.mjs +0 -44
- package/website/dist/_worker.js/pages/config.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/fonts.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/getting-started.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/helpers.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/images.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/index.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/llm.txt.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/playground/_example_.astro.mjs +0 -95
- package/website/dist/_worker.js/pages/playground.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/preview.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/sdk.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/sitemap.xml.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/styling.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/templates.astro.mjs +0 -1
- package/website/dist/_worker.js/pages/video.astro.mjs +0 -1
- package/website/dist/_worker.js/renderers.mjs +0 -2
- package/website/dist/agents/index.html +0 -54
- package/website/dist/animation/index.html +0 -1505
- package/website/dist/config/index.html +0 -186
- package/website/dist/fonts/index.html +0 -200
- package/website/dist/getting-started/index.html +0 -109
- package/website/dist/helpers/index.html +0 -350
- package/website/dist/images/index.html +0 -337
- package/website/dist/index.html +0 -141
- package/website/dist/llm.txt +0 -3626
- package/website/dist/playground/index.html +0 -6
- package/website/dist/preview/index.html +0 -113
- package/website/dist/robots.txt +0 -40
- package/website/dist/sdk/index.html +0 -1588
- package/website/dist/sitemap.xml +0 -76
- package/website/dist/styling/index.html +0 -368
- package/website/dist/templates/index.html +0 -76
- package/website/dist/video/index.html +0 -354
- package/website/package-lock.json +0 -8099
- package/website/package.json +0 -43
- package/website/public/.gitkeep +0 -5
- package/website/public/robots.txt +0 -40
- package/website/templates/og-image.tsx +0 -60
- package/website/wrangler.toml +0 -9
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import type { NextApiRequest, NextApiResponse } from 'next';
|
|
2
|
-
import { defineTemplate, renderVideo } from 'loopwind/sdk';
|
|
3
|
-
|
|
4
|
-
// Define video template programmatically
|
|
5
|
-
const introTemplate = defineTemplate({
|
|
6
|
-
name: 'intro-video',
|
|
7
|
-
type: 'video',
|
|
8
|
-
size: { width: 1920, height: 1080 },
|
|
9
|
-
video: { fps: 30, duration: 3 },
|
|
10
|
-
render: ({ tw, progress, title }) => {
|
|
11
|
-
// Fade in animation
|
|
12
|
-
const opacity = progress < 0.5 ? progress / 0.5 : 1;
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<div
|
|
16
|
-
style={tw(
|
|
17
|
-
'flex items-center justify-center w-full h-full bg-gradient-to-br from-black to-gray-900'
|
|
18
|
-
)}
|
|
19
|
-
>
|
|
20
|
-
<h1
|
|
21
|
-
style={{
|
|
22
|
-
...tw('text-8xl font-bold text-white'),
|
|
23
|
-
opacity,
|
|
24
|
-
}}
|
|
25
|
-
>
|
|
26
|
-
{title}
|
|
27
|
-
</h1>
|
|
28
|
-
</div>
|
|
29
|
-
);
|
|
30
|
-
},
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
export default async function handler(
|
|
34
|
-
req: NextApiRequest,
|
|
35
|
-
res: NextApiResponse
|
|
36
|
-
) {
|
|
37
|
-
const { title = 'Welcome!' } = req.query;
|
|
38
|
-
|
|
39
|
-
try {
|
|
40
|
-
// Render video as MP4 buffer
|
|
41
|
-
const mp4 = await renderVideo(introTemplate, {
|
|
42
|
-
title: String(title),
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
// Return video
|
|
46
|
-
res.setHeader('Content-Type', 'video/mp4');
|
|
47
|
-
res.setHeader('Cache-Control', 's-maxage=3600');
|
|
48
|
-
res.send(mp4);
|
|
49
|
-
} catch (error) {
|
|
50
|
-
console.error('Error rendering video:', error);
|
|
51
|
-
res.status(500).json({ error: 'Failed to render video' });
|
|
52
|
-
}
|
|
53
|
-
}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import type { NextApiRequest, NextApiResponse } from 'next';
|
|
2
|
-
import { defineTemplate, renderImage } from 'loopwind/sdk';
|
|
3
|
-
|
|
4
|
-
// Define template programmatically
|
|
5
|
-
const ogTemplate = defineTemplate({
|
|
6
|
-
name: 'og-image',
|
|
7
|
-
type: 'image',
|
|
8
|
-
size: { width: 1200, height: 630 },
|
|
9
|
-
render: ({ tw, title, description }) => (
|
|
10
|
-
<div
|
|
11
|
-
style={tw(
|
|
12
|
-
'flex flex-col w-full h-full bg-gradient-to-br from-blue-600 to-purple-700 p-12 justify-between'
|
|
13
|
-
)}
|
|
14
|
-
>
|
|
15
|
-
<div style={tw('flex items-center gap-4')}>
|
|
16
|
-
<div style={tw('w-12 h-12 rounded-full bg-white/20')} />
|
|
17
|
-
<span style={tw('text-white/80 text-2xl')}>yoursite.com</span>
|
|
18
|
-
</div>
|
|
19
|
-
|
|
20
|
-
<div>
|
|
21
|
-
<h1 style={tw('text-6xl font-bold text-white mb-4')}>{title}</h1>
|
|
22
|
-
<p style={tw('text-2xl text-white/80')}>{description}</p>
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
25
|
-
),
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
export default async function handler(
|
|
29
|
-
req: NextApiRequest,
|
|
30
|
-
res: NextApiResponse
|
|
31
|
-
) {
|
|
32
|
-
const { title = 'Welcome', description = 'Generated with loopwind SDK' } =
|
|
33
|
-
req.query;
|
|
34
|
-
|
|
35
|
-
try {
|
|
36
|
-
// Render image as PNG buffer
|
|
37
|
-
const png = await renderImage(ogTemplate, {
|
|
38
|
-
title: String(title),
|
|
39
|
-
description: String(description),
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
// Return image
|
|
43
|
-
res.setHeader('Content-Type', 'image/png');
|
|
44
|
-
res.setHeader('Cache-Control', 's-maxage=86400, stale-while-revalidate');
|
|
45
|
-
res.send(png);
|
|
46
|
-
} catch (error) {
|
|
47
|
-
console.error('Error rendering OG image:', error);
|
|
48
|
-
res.status(500).json({ error: 'Failed to render image' });
|
|
49
|
-
}
|
|
50
|
-
}
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example: Importing template files in Next.js API routes
|
|
3
|
-
*
|
|
4
|
-
* This demonstrates how to reuse _loopwind/templates/ files
|
|
5
|
-
* in your SDK code with Next.js (or any other bundler)
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { NextApiRequest, NextApiResponse } from 'next';
|
|
9
|
-
import { defineTemplate, renderVideo } from 'loopwind/sdk';
|
|
10
|
-
|
|
11
|
-
// Import your template file (Next.js/bundler handles TSX automatically)
|
|
12
|
-
import * as videoIntroTemplate from '../../_loopwind/templates/video-intro/template';
|
|
13
|
-
|
|
14
|
-
// Create SDK template from file with custom config
|
|
15
|
-
const template = defineTemplate(videoIntroTemplate, {
|
|
16
|
-
config: {
|
|
17
|
-
colors: {
|
|
18
|
-
primary: '#ff0000', // Override gradient colors
|
|
19
|
-
'indigo-900': '#1a0033',
|
|
20
|
-
},
|
|
21
|
-
},
|
|
22
|
-
});
|
|
23
|
-
|
|
24
|
-
export default async function handler(
|
|
25
|
-
req: NextApiRequest,
|
|
26
|
-
res: NextApiResponse
|
|
27
|
-
) {
|
|
28
|
-
const { version = '1.0.0', changes } = req.query;
|
|
29
|
-
|
|
30
|
-
// Parse changes from query param (comma-separated)
|
|
31
|
-
const changeList = typeof changes === 'string'
|
|
32
|
-
? changes.split(',').map(c => c.trim())
|
|
33
|
-
: undefined;
|
|
34
|
-
|
|
35
|
-
// Render video using imported template
|
|
36
|
-
const mp4 = await renderVideo(template, {
|
|
37
|
-
version: String(version),
|
|
38
|
-
changes: changeList,
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
res.setHeader('Content-Type', 'video/mp4');
|
|
42
|
-
res.setHeader('Cache-Control', 's-maxage=3600, stale-while-revalidate');
|
|
43
|
-
res.send(mp4);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Usage:
|
|
48
|
-
*
|
|
49
|
-
* GET /api/release-video?version=2.0.0&changes=New%20feature,Bug%20fix,Performance
|
|
50
|
-
*
|
|
51
|
-
* Returns: MP4 video with version 2.0.0 and custom changes list
|
|
52
|
-
*
|
|
53
|
-
* Benefits:
|
|
54
|
-
* - Reuse CLI templates in API
|
|
55
|
-
* - Override config for custom branding
|
|
56
|
-
* - Type-safe with TypeScript
|
|
57
|
-
* - No duplicate template code
|
|
58
|
-
*/
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example: Using the SDK Video Preview Component
|
|
3
|
-
*
|
|
4
|
-
* This demonstrates how to use previewVideo() and <VideoPreview>
|
|
5
|
-
* to display video templates in React applications.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import { defineTemplate, previewVideo, VideoPreview, type PreviewFrames } from 'loopwind/sdk';
|
|
9
|
-
import { useState, useEffect } from 'react';
|
|
10
|
-
|
|
11
|
-
// Define a video template
|
|
12
|
-
const introTemplate = defineTemplate({
|
|
13
|
-
name: 'intro-animation',
|
|
14
|
-
type: 'video',
|
|
15
|
-
size: { width: 1920, height: 1080 },
|
|
16
|
-
video: { fps: 30, duration: 3 },
|
|
17
|
-
render: ({ tw, progress, title = 'Hello World' }) => (
|
|
18
|
-
<div style={tw('flex items-center justify-center w-full h-full bg-gradient-to-r from-blue-500 to-purple-600')}>
|
|
19
|
-
<h1
|
|
20
|
-
style={{
|
|
21
|
-
...tw('text-8xl font-bold text-white enter-fade-in/0/1000'),
|
|
22
|
-
opacity: progress
|
|
23
|
-
}}
|
|
24
|
-
>
|
|
25
|
-
{title}
|
|
26
|
-
</h1>
|
|
27
|
-
</div>
|
|
28
|
-
)
|
|
29
|
-
});
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* Example 1: Pre-render at build time or on server
|
|
33
|
-
* (Next.js getStaticProps, getServerSideProps, etc.)
|
|
34
|
-
*/
|
|
35
|
-
export async function getStaticProps() {
|
|
36
|
-
// Pre-render all frames on the server
|
|
37
|
-
const frames = await previewVideo(introTemplate, {
|
|
38
|
-
title: 'Welcome!'
|
|
39
|
-
});
|
|
40
|
-
|
|
41
|
-
return {
|
|
42
|
-
props: {
|
|
43
|
-
frames // Pass serialized frames to client
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Example 2: Client component that displays pre-rendered frames
|
|
50
|
-
*/
|
|
51
|
-
export function IntroPreview({ frames }: { frames: PreviewFrames }) {
|
|
52
|
-
return (
|
|
53
|
-
<div className="container">
|
|
54
|
-
<h2>Video Preview</h2>
|
|
55
|
-
<VideoPreview
|
|
56
|
-
frames={frames}
|
|
57
|
-
autoPlay={true}
|
|
58
|
-
loop={true}
|
|
59
|
-
controls={true}
|
|
60
|
-
onFrameChange={(frame) => console.log(`Current frame: ${frame}`)}
|
|
61
|
-
/>
|
|
62
|
-
</div>
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
/**
|
|
67
|
-
* Example 3: Loading frames on demand (client-side)
|
|
68
|
-
* Note: This only works if you can run Node.js code (e.g., Electron, desktop apps)
|
|
69
|
-
*/
|
|
70
|
-
export function DynamicPreview() {
|
|
71
|
-
const [frames, setFrames] = useState<PreviewFrames | null>(null);
|
|
72
|
-
const [loading, setLoading] = useState(true);
|
|
73
|
-
|
|
74
|
-
useEffect(() => {
|
|
75
|
-
// Load frames (only works in Node.js environment)
|
|
76
|
-
previewVideo(introTemplate, { title: 'Dynamic!' })
|
|
77
|
-
.then(setFrames)
|
|
78
|
-
.finally(() => setLoading(false));
|
|
79
|
-
}, []);
|
|
80
|
-
|
|
81
|
-
if (loading) return <div>Rendering preview...</div>;
|
|
82
|
-
if (!frames) return <div>Failed to load preview</div>;
|
|
83
|
-
|
|
84
|
-
return <VideoPreview frames={frames} autoPlay loop />;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Example 4: Minimal preview without controls
|
|
89
|
-
*/
|
|
90
|
-
export function MinimalPreview({ frames }: { frames: PreviewFrames }) {
|
|
91
|
-
return (
|
|
92
|
-
<VideoPreview
|
|
93
|
-
frames={frames}
|
|
94
|
-
controls={false}
|
|
95
|
-
autoPlay={true}
|
|
96
|
-
loop={true}
|
|
97
|
-
style={{ border: '2px solid #7c3aed', borderRadius: '8px' }}
|
|
98
|
-
/>
|
|
99
|
-
);
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
/**
|
|
103
|
-
* Example 5: Next.js API Route for on-demand preview generation
|
|
104
|
-
*/
|
|
105
|
-
// pages/api/preview/[template].ts
|
|
106
|
-
export async function handler(req, res) {
|
|
107
|
-
const { template } = req.query;
|
|
108
|
-
const props = req.body;
|
|
109
|
-
|
|
110
|
-
try {
|
|
111
|
-
// Generate preview frames on-demand
|
|
112
|
-
const frames = await previewVideo(introTemplate, props, {
|
|
113
|
-
format: 'data-url' // Use data URLs for easy JSON serialization
|
|
114
|
-
});
|
|
115
|
-
|
|
116
|
-
res.json(frames);
|
|
117
|
-
} catch (error) {
|
|
118
|
-
res.status(500).json({ error: error.message });
|
|
119
|
-
}
|
|
120
|
-
}
|
|
@@ -1,251 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example: Template Compiler Workflow
|
|
3
|
-
*
|
|
4
|
-
* This example demonstrates the recommended production workflow for JSX templates:
|
|
5
|
-
*
|
|
6
|
-
* 1. ADMIN PANEL: Use compileTemplate() to transform JSX → JavaScript
|
|
7
|
-
* 2. DATABASE: Store the compiled JavaScript
|
|
8
|
-
* 3. PRODUCTION API: Use defineTemplateFromSource() to render
|
|
9
|
-
*
|
|
10
|
-
* Benefits:
|
|
11
|
-
* - JSX developer experience in admin panel
|
|
12
|
-
* - No @babel/standalone in production (36 MB smaller!)
|
|
13
|
-
* - Faster cold starts in serverless functions
|
|
14
|
-
* - Syntax errors caught at save time, not render time
|
|
15
|
-
*/
|
|
16
|
-
|
|
17
|
-
import { compileTemplate, containsJSX } from 'loopwind/sdk/compiler';
|
|
18
|
-
import { defineTemplateFromSource, renderImage } from 'loopwind/sdk';
|
|
19
|
-
import fs from 'fs/promises';
|
|
20
|
-
|
|
21
|
-
// ============================================================================
|
|
22
|
-
// PART 1: Admin Panel - Compile and Save
|
|
23
|
-
// ============================================================================
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* Simulates an admin panel API where users edit templates in a code editor
|
|
27
|
-
*/
|
|
28
|
-
async function adminPanelSaveTemplate(templateId: string, userCode: string) {
|
|
29
|
-
console.log('📝 Admin Panel: User saved template\n');
|
|
30
|
-
console.log('User-provided JSX:');
|
|
31
|
-
console.log(userCode.substring(0, 200) + '...\n');
|
|
32
|
-
|
|
33
|
-
try {
|
|
34
|
-
// Check if the code contains JSX
|
|
35
|
-
if (containsJSX(userCode)) {
|
|
36
|
-
console.log('✓ Detected JSX syntax, compiling...');
|
|
37
|
-
|
|
38
|
-
// Compile JSX to JavaScript
|
|
39
|
-
const compiled = compileTemplate(userCode);
|
|
40
|
-
|
|
41
|
-
console.log('✓ Compilation successful!');
|
|
42
|
-
console.log(' Original size:', userCode.length, 'bytes');
|
|
43
|
-
console.log(' Compiled size:', compiled.length, 'bytes\n');
|
|
44
|
-
|
|
45
|
-
// In a real app, you would save to a database:
|
|
46
|
-
// await db.templates.update(templateId, {
|
|
47
|
-
// sourceCode: compiled,
|
|
48
|
-
// updatedAt: new Date()
|
|
49
|
-
// });
|
|
50
|
-
|
|
51
|
-
// For this example, save to a file
|
|
52
|
-
await fs.writeFile(`template-${templateId}-compiled.js`, compiled);
|
|
53
|
-
console.log('✓ Saved compiled template to database\n');
|
|
54
|
-
|
|
55
|
-
return { success: true, compiled };
|
|
56
|
-
} else {
|
|
57
|
-
console.log('ℹ No JSX detected, saving as-is\n');
|
|
58
|
-
return { success: true, compiled: userCode };
|
|
59
|
-
}
|
|
60
|
-
} catch (error) {
|
|
61
|
-
console.error('✗ Compilation failed:', (error as Error).message);
|
|
62
|
-
return {
|
|
63
|
-
success: false,
|
|
64
|
-
error: (error as Error).message,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
// ============================================================================
|
|
70
|
-
// PART 2: Production API - Load and Render
|
|
71
|
-
// ============================================================================
|
|
72
|
-
|
|
73
|
-
/**
|
|
74
|
-
* Simulates a production API endpoint that renders templates
|
|
75
|
-
* This runs in Vercel, AWS Lambda, or any serverless function
|
|
76
|
-
*/
|
|
77
|
-
async function productionApiRenderTemplate(
|
|
78
|
-
templateId: string,
|
|
79
|
-
props: Record<string, any>
|
|
80
|
-
) {
|
|
81
|
-
console.log('🚀 Production API: Rendering template\n');
|
|
82
|
-
|
|
83
|
-
try {
|
|
84
|
-
// Load pre-compiled template from database
|
|
85
|
-
// In a real app:
|
|
86
|
-
// const template = await db.templates.findById(templateId);
|
|
87
|
-
// const compiledCode = template.sourceCode;
|
|
88
|
-
|
|
89
|
-
// For this example, load from file
|
|
90
|
-
const compiledCode = await fs.readFile(
|
|
91
|
-
`template-${templateId}-compiled.js`,
|
|
92
|
-
'utf-8'
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
console.log('✓ Loaded pre-compiled template from database');
|
|
96
|
-
console.log(' Size:', compiledCode.length, 'bytes');
|
|
97
|
-
console.log(' No Babel needed! 🎉\n');
|
|
98
|
-
|
|
99
|
-
// Define template from pre-compiled JavaScript
|
|
100
|
-
// This is FAST - no JSX transformation at runtime
|
|
101
|
-
const templateDef = defineTemplateFromSource(compiledCode, {
|
|
102
|
-
config: {
|
|
103
|
-
colors: {
|
|
104
|
-
primary: '#3b82f6',
|
|
105
|
-
secondary: '#8b5cf6',
|
|
106
|
-
},
|
|
107
|
-
},
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
console.log('✓ Template loaded');
|
|
111
|
-
console.log(' Name:', templateDef.name);
|
|
112
|
-
console.log(' Type:', templateDef.type);
|
|
113
|
-
console.log(' Size:', templateDef.size.width, 'x', templateDef.size.height, '\n');
|
|
114
|
-
|
|
115
|
-
// Render the image
|
|
116
|
-
const png = await renderImage(templateDef, props);
|
|
117
|
-
|
|
118
|
-
console.log('✓ Image rendered');
|
|
119
|
-
console.log(' PNG size:', png.length, 'bytes\n');
|
|
120
|
-
|
|
121
|
-
return png;
|
|
122
|
-
} catch (error) {
|
|
123
|
-
console.error('✗ Rendering failed:', (error as Error).message);
|
|
124
|
-
throw error;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
// ============================================================================
|
|
129
|
-
// DEMO: Full Workflow
|
|
130
|
-
// ============================================================================
|
|
131
|
-
|
|
132
|
-
async function demo() {
|
|
133
|
-
console.log('='.repeat(70));
|
|
134
|
-
console.log('🎨 Template Compiler Workflow Demo');
|
|
135
|
-
console.log('='.repeat(70) + '\n');
|
|
136
|
-
|
|
137
|
-
// Example JSX template that a user might write in a code editor
|
|
138
|
-
const userJSX = `
|
|
139
|
-
export const meta = {
|
|
140
|
-
name: 'social-card',
|
|
141
|
-
type: 'image',
|
|
142
|
-
size: { width: 1200, height: 630 }
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
export default ({ tw, title, description, author }) => (
|
|
146
|
-
<div style={tw('flex flex-col justify-between w-full h-full bg-gradient-to-br from-primary to-secondary p-12')}>
|
|
147
|
-
<div style={tw('flex flex-col')}>
|
|
148
|
-
<h1 style={tw('text-6xl font-bold text-white mb-4')}>
|
|
149
|
-
{title}
|
|
150
|
-
</h1>
|
|
151
|
-
<p style={tw('text-2xl text-white/90')}>
|
|
152
|
-
{description}
|
|
153
|
-
</p>
|
|
154
|
-
</div>
|
|
155
|
-
<div style={tw('flex items-center gap-4')}>
|
|
156
|
-
<div style={tw('w-16 h-16 rounded-full bg-white/20')} />
|
|
157
|
-
<span style={tw('text-xl text-white/80')}>{author}</span>
|
|
158
|
-
</div>
|
|
159
|
-
</div>
|
|
160
|
-
);
|
|
161
|
-
`;
|
|
162
|
-
|
|
163
|
-
const templateId = 'card-123';
|
|
164
|
-
|
|
165
|
-
// STEP 1: Admin panel compiles and saves
|
|
166
|
-
console.log('STEP 1: Admin Panel Workflow');
|
|
167
|
-
console.log('-'.repeat(70) + '\n');
|
|
168
|
-
await adminPanelSaveTemplate(templateId, userJSX);
|
|
169
|
-
|
|
170
|
-
// STEP 2: Production API loads and renders
|
|
171
|
-
console.log('STEP 2: Production API Workflow');
|
|
172
|
-
console.log('-'.repeat(70) + '\n');
|
|
173
|
-
const png = await productionApiRenderTemplate(templateId, {
|
|
174
|
-
title: 'Building with loopwind',
|
|
175
|
-
description: 'Generate images and videos programmatically',
|
|
176
|
-
author: 'Tommy Vedvik',
|
|
177
|
-
});
|
|
178
|
-
|
|
179
|
-
// Save the final result
|
|
180
|
-
await fs.writeFile('social-card-demo.png', png);
|
|
181
|
-
console.log('✅ Saved final image to social-card-demo.png\n');
|
|
182
|
-
|
|
183
|
-
// Cleanup
|
|
184
|
-
await fs.unlink(`template-${templateId}-compiled.js`);
|
|
185
|
-
|
|
186
|
-
console.log('='.repeat(70));
|
|
187
|
-
console.log('📊 Workflow Summary');
|
|
188
|
-
console.log('='.repeat(70));
|
|
189
|
-
console.log('\n✅ Benefits of this approach:\n');
|
|
190
|
-
console.log('1. Users write natural JSX syntax in admin panel');
|
|
191
|
-
console.log('2. JSX compiled once at save time (not every render)');
|
|
192
|
-
console.log('3. Compiled templates stored in database');
|
|
193
|
-
console.log('4. Production bundle 36 MB smaller (no @babel/standalone)');
|
|
194
|
-
console.log('5. Faster cold starts in serverless functions');
|
|
195
|
-
console.log('6. Syntax errors caught early (at save, not production)\n');
|
|
196
|
-
|
|
197
|
-
console.log('🔧 For Vercel/Lambda deployments:\n');
|
|
198
|
-
console.log('- Admin panel imports: loopwind/sdk/compiler');
|
|
199
|
-
console.log('- Production API imports: loopwind/sdk');
|
|
200
|
-
console.log('- Result: Only admin panel includes Babel\n');
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
// ============================================================================
|
|
204
|
-
// Example Integration Code
|
|
205
|
-
// ============================================================================
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Example: Next.js Admin Panel API Route
|
|
209
|
-
*/
|
|
210
|
-
async function exampleNextJSAdminRoute(req: any, res: any) {
|
|
211
|
-
const { templateId, code } = req.body;
|
|
212
|
-
|
|
213
|
-
try {
|
|
214
|
-
// Compile JSX
|
|
215
|
-
const compiled = compileTemplate(code);
|
|
216
|
-
|
|
217
|
-
// Save to database
|
|
218
|
-
// await db.templates.update(templateId, { sourceCode: compiled });
|
|
219
|
-
|
|
220
|
-
res.json({ success: true });
|
|
221
|
-
} catch (error) {
|
|
222
|
-
res.status(400).json({
|
|
223
|
-
error: 'Compilation failed',
|
|
224
|
-
message: (error as Error).message,
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
/**
|
|
230
|
-
* Example: Next.js Production API Route
|
|
231
|
-
*/
|
|
232
|
-
async function exampleNextJSProductionRoute(req: any, res: any) {
|
|
233
|
-
const { templateId, props } = req.body;
|
|
234
|
-
|
|
235
|
-
try {
|
|
236
|
-
// Load pre-compiled template
|
|
237
|
-
// const template = await db.templates.findById(templateId);
|
|
238
|
-
// const templateDef = defineTemplateFromSource(template.sourceCode);
|
|
239
|
-
|
|
240
|
-
// Render
|
|
241
|
-
// const png = await renderImage(templateDef, props);
|
|
242
|
-
|
|
243
|
-
// res.setHeader('Content-Type', 'image/png');
|
|
244
|
-
// res.send(png);
|
|
245
|
-
} catch (error) {
|
|
246
|
-
res.status(500).json({ error: 'Rendering failed' });
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
|
|
250
|
-
// Run the demo
|
|
251
|
-
demo().catch(console.error);
|