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,336 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Example: Visual Builder - Templates from JSON schemas
|
|
3
|
-
*
|
|
4
|
-
* Use case: Building a drag-and-drop template builder where users
|
|
5
|
-
* construct templates visually without writing code.
|
|
6
|
-
*
|
|
7
|
-
* Safe for user-generated content - no code execution!
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
import {
|
|
11
|
-
defineTemplateFromSchema,
|
|
12
|
-
renderImage,
|
|
13
|
-
renderVideo,
|
|
14
|
-
type TemplateSchema,
|
|
15
|
-
} from 'loopwind/sdk';
|
|
16
|
-
import fs from 'fs/promises';
|
|
17
|
-
|
|
18
|
-
// Example 1: Simple card template
|
|
19
|
-
const cardSchema: TemplateSchema = {
|
|
20
|
-
name: 'simple-card',
|
|
21
|
-
size: { width: 1200, height: 630 },
|
|
22
|
-
config: {
|
|
23
|
-
colors: {
|
|
24
|
-
primary: '#3b82f6',
|
|
25
|
-
background: '#ffffff',
|
|
26
|
-
text: '#1f2937',
|
|
27
|
-
},
|
|
28
|
-
},
|
|
29
|
-
elements: [
|
|
30
|
-
{
|
|
31
|
-
type: 'div',
|
|
32
|
-
className: 'flex flex-col w-full h-full bg-background p-12 justify-center',
|
|
33
|
-
children: [
|
|
34
|
-
{
|
|
35
|
-
type: 'h1',
|
|
36
|
-
className: 'text-6xl font-bold text-primary mb-4',
|
|
37
|
-
content: '{{title}}',
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
type: 'p',
|
|
41
|
-
className: 'text-2xl text-text',
|
|
42
|
-
content: '{{description}}',
|
|
43
|
-
},
|
|
44
|
-
],
|
|
45
|
-
},
|
|
46
|
-
],
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
async function renderSimpleCard() {
|
|
50
|
-
const template = defineTemplateFromSchema(cardSchema);
|
|
51
|
-
|
|
52
|
-
const png = await renderImage(template, {
|
|
53
|
-
title: 'Visual Builder',
|
|
54
|
-
description: 'No code required!',
|
|
55
|
-
});
|
|
56
|
-
|
|
57
|
-
await fs.writeFile('simple-card.png', png);
|
|
58
|
-
console.log('✓ Rendered simple-card.png');
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
// Example 2: Complex layout with multiple sections
|
|
62
|
-
const complexSchema: TemplateSchema = {
|
|
63
|
-
name: 'complex-layout',
|
|
64
|
-
size: { width: 1200, height: 630 },
|
|
65
|
-
config: {
|
|
66
|
-
colors: {
|
|
67
|
-
primary: '#8b5cf6',
|
|
68
|
-
secondary: '#ec4899',
|
|
69
|
-
background: '#fafafa',
|
|
70
|
-
text: '#0f172a',
|
|
71
|
-
},
|
|
72
|
-
},
|
|
73
|
-
elements: [
|
|
74
|
-
{
|
|
75
|
-
type: 'div',
|
|
76
|
-
className: 'flex w-full h-full bg-background',
|
|
77
|
-
children: [
|
|
78
|
-
// Left sidebar
|
|
79
|
-
{
|
|
80
|
-
type: 'div',
|
|
81
|
-
className: 'flex flex-col w-1/3 bg-primary p-8 justify-between',
|
|
82
|
-
children: [
|
|
83
|
-
{
|
|
84
|
-
type: 'h2',
|
|
85
|
-
className: 'text-3xl font-bold text-white',
|
|
86
|
-
content: '{{category}}',
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
type: 'p',
|
|
90
|
-
className: 'text-lg text-white/80',
|
|
91
|
-
content: '{{subtitle}}',
|
|
92
|
-
},
|
|
93
|
-
],
|
|
94
|
-
},
|
|
95
|
-
// Right content area
|
|
96
|
-
{
|
|
97
|
-
type: 'div',
|
|
98
|
-
className: 'flex flex-col flex-1 p-12 justify-center',
|
|
99
|
-
children: [
|
|
100
|
-
{
|
|
101
|
-
type: 'h1',
|
|
102
|
-
className: 'text-6xl font-bold text-text mb-6',
|
|
103
|
-
content: '{{title}}',
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
type: 'div',
|
|
107
|
-
className: 'w-24 h-2 bg-secondary mb-6',
|
|
108
|
-
},
|
|
109
|
-
{
|
|
110
|
-
type: 'p',
|
|
111
|
-
className: 'text-2xl text-text/70',
|
|
112
|
-
content: '{{description}}',
|
|
113
|
-
},
|
|
114
|
-
],
|
|
115
|
-
},
|
|
116
|
-
],
|
|
117
|
-
},
|
|
118
|
-
],
|
|
119
|
-
};
|
|
120
|
-
|
|
121
|
-
async function renderComplexLayout() {
|
|
122
|
-
const template = defineTemplateFromSchema(complexSchema);
|
|
123
|
-
|
|
124
|
-
const png = await renderImage(template, {
|
|
125
|
-
category: 'TECHNOLOGY',
|
|
126
|
-
subtitle: 'Innovation Series',
|
|
127
|
-
title: 'The Future of AI',
|
|
128
|
-
description: 'Exploring the next generation of artificial intelligence',
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
await fs.writeFile('complex-layout.png', png);
|
|
132
|
-
console.log('✓ Rendered complex-layout.png');
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
// Example 3: Template with dynamic branding
|
|
136
|
-
const brandedSchema: TemplateSchema = {
|
|
137
|
-
name: 'branded-template',
|
|
138
|
-
size: { width: 1200, height: 630 },
|
|
139
|
-
elements: [
|
|
140
|
-
{
|
|
141
|
-
type: 'div',
|
|
142
|
-
className: 'flex flex-col w-full h-full bg-brand-bg p-12 justify-between',
|
|
143
|
-
children: [
|
|
144
|
-
{
|
|
145
|
-
type: 'div',
|
|
146
|
-
className: 'flex items-center gap-4',
|
|
147
|
-
children: [
|
|
148
|
-
{
|
|
149
|
-
type: 'div',
|
|
150
|
-
className: 'w-16 h-16 rounded-full bg-brand-primary',
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
type: 'span',
|
|
154
|
-
className: 'text-2xl font-bold text-brand-text',
|
|
155
|
-
content: '{{companyName}}',
|
|
156
|
-
},
|
|
157
|
-
],
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
type: 'div',
|
|
161
|
-
children: [
|
|
162
|
-
{
|
|
163
|
-
type: 'h1',
|
|
164
|
-
className: 'text-6xl font-bold text-brand-text mb-4',
|
|
165
|
-
content: '{{title}}',
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
type: 'p',
|
|
169
|
-
className: 'text-2xl text-brand-text/80',
|
|
170
|
-
content: '{{tagline}}',
|
|
171
|
-
},
|
|
172
|
-
],
|
|
173
|
-
},
|
|
174
|
-
],
|
|
175
|
-
},
|
|
176
|
-
],
|
|
177
|
-
};
|
|
178
|
-
|
|
179
|
-
async function renderWithBranding(brandColors: any, props: any) {
|
|
180
|
-
const template = defineTemplateFromSchema({
|
|
181
|
-
...brandedSchema,
|
|
182
|
-
config: { colors: brandColors },
|
|
183
|
-
});
|
|
184
|
-
|
|
185
|
-
const png = await renderImage(template, props);
|
|
186
|
-
return png;
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
async function renderMultipleBrands() {
|
|
190
|
-
// Brand 1: Blue theme
|
|
191
|
-
const brand1 = await renderWithBranding(
|
|
192
|
-
{
|
|
193
|
-
'brand-primary': '#3b82f6',
|
|
194
|
-
'brand-bg': '#eff6ff',
|
|
195
|
-
'brand-text': '#1e3a8a',
|
|
196
|
-
},
|
|
197
|
-
{
|
|
198
|
-
companyName: 'TechCorp',
|
|
199
|
-
title: 'Innovation Summit 2024',
|
|
200
|
-
tagline: 'Building the Future Together',
|
|
201
|
-
}
|
|
202
|
-
);
|
|
203
|
-
await fs.writeFile('brand-1.png', brand1);
|
|
204
|
-
console.log('✓ Rendered brand-1.png');
|
|
205
|
-
|
|
206
|
-
// Brand 2: Purple theme
|
|
207
|
-
const brand2 = await renderWithBranding(
|
|
208
|
-
{
|
|
209
|
-
'brand-primary': '#8b5cf6',
|
|
210
|
-
'brand-bg': '#faf5ff',
|
|
211
|
-
'brand-text': '#581c87',
|
|
212
|
-
},
|
|
213
|
-
{
|
|
214
|
-
companyName: 'DesignStudio',
|
|
215
|
-
title: 'Creative Workshop',
|
|
216
|
-
tagline: 'Unleash Your Creativity',
|
|
217
|
-
}
|
|
218
|
-
);
|
|
219
|
-
await fs.writeFile('brand-2.png', brand2);
|
|
220
|
-
console.log('✓ Rendered brand-2.png');
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
// Example 4: User interface builder output
|
|
224
|
-
// This simulates what a drag-and-drop builder would generate
|
|
225
|
-
interface BuilderElement {
|
|
226
|
-
id: string;
|
|
227
|
-
type: string;
|
|
228
|
-
className: string;
|
|
229
|
-
content?: string;
|
|
230
|
-
children?: BuilderElement[];
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
function convertBuilderToSchema(
|
|
234
|
-
name: string,
|
|
235
|
-
elements: BuilderElement[],
|
|
236
|
-
config?: any
|
|
237
|
-
): TemplateSchema {
|
|
238
|
-
// Remove IDs and convert to schema format
|
|
239
|
-
const cleanElements = (els: BuilderElement[]) => {
|
|
240
|
-
return els.map((el) => ({
|
|
241
|
-
type: el.type as any,
|
|
242
|
-
className: el.className,
|
|
243
|
-
content: el.content,
|
|
244
|
-
children: el.children ? cleanElements(el.children) : undefined,
|
|
245
|
-
}));
|
|
246
|
-
};
|
|
247
|
-
|
|
248
|
-
return {
|
|
249
|
-
name,
|
|
250
|
-
size: { width: 1200, height: 630 },
|
|
251
|
-
config,
|
|
252
|
-
elements: cleanElements(elements),
|
|
253
|
-
};
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
async function renderFromBuilder() {
|
|
257
|
-
// Simulated output from visual builder
|
|
258
|
-
const builderOutput: BuilderElement[] = [
|
|
259
|
-
{
|
|
260
|
-
id: 'root-1',
|
|
261
|
-
type: 'div',
|
|
262
|
-
className: 'flex items-center justify-center w-full h-full bg-gradient-to-br from-indigo-500 to-purple-600',
|
|
263
|
-
children: [
|
|
264
|
-
{
|
|
265
|
-
id: 'text-1',
|
|
266
|
-
type: 'h1',
|
|
267
|
-
className: 'text-8xl font-bold text-white',
|
|
268
|
-
content: '{{message}}',
|
|
269
|
-
},
|
|
270
|
-
],
|
|
271
|
-
},
|
|
272
|
-
];
|
|
273
|
-
|
|
274
|
-
const schema = convertBuilderToSchema('builder-output', builderOutput);
|
|
275
|
-
const template = defineTemplateFromSchema(schema);
|
|
276
|
-
|
|
277
|
-
const png = await renderImage(template, {
|
|
278
|
-
message: 'Built Visually!',
|
|
279
|
-
});
|
|
280
|
-
|
|
281
|
-
await fs.writeFile('builder-output.png', png);
|
|
282
|
-
console.log('✓ Rendered builder-output.png');
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
// Example 5: Video schema (for animated templates)
|
|
286
|
-
const videoSchema: TemplateSchema = {
|
|
287
|
-
name: 'animated-card',
|
|
288
|
-
type: 'video',
|
|
289
|
-
size: { width: 1920, height: 1080 },
|
|
290
|
-
video: { fps: 30, duration: 3 },
|
|
291
|
-
config: {
|
|
292
|
-
colors: {
|
|
293
|
-
background: '#000000',
|
|
294
|
-
text: '#ffffff',
|
|
295
|
-
},
|
|
296
|
-
},
|
|
297
|
-
elements: [
|
|
298
|
-
{
|
|
299
|
-
type: 'div',
|
|
300
|
-
className: 'flex items-center justify-center w-full h-full bg-background',
|
|
301
|
-
children: [
|
|
302
|
-
{
|
|
303
|
-
type: 'h1',
|
|
304
|
-
className: 'text-8xl font-bold text-text enter-fade-in/0/1500 exit-fade-out/2500/3000',
|
|
305
|
-
content: '{{title}}',
|
|
306
|
-
},
|
|
307
|
-
],
|
|
308
|
-
},
|
|
309
|
-
],
|
|
310
|
-
};
|
|
311
|
-
|
|
312
|
-
async function renderVideoSchema() {
|
|
313
|
-
const template = defineTemplateFromSchema(videoSchema);
|
|
314
|
-
|
|
315
|
-
const mp4 = await renderVideo(template, {
|
|
316
|
-
title: 'Schema Video',
|
|
317
|
-
});
|
|
318
|
-
|
|
319
|
-
await fs.writeFile('animated-card.mp4', mp4);
|
|
320
|
-
console.log('✓ Rendered animated-card.mp4');
|
|
321
|
-
}
|
|
322
|
-
|
|
323
|
-
// Run all examples
|
|
324
|
-
async function main() {
|
|
325
|
-
console.log('Visual Builder Examples\n');
|
|
326
|
-
|
|
327
|
-
await renderSimpleCard();
|
|
328
|
-
await renderComplexLayout();
|
|
329
|
-
await renderMultipleBrands();
|
|
330
|
-
await renderFromBuilder();
|
|
331
|
-
await renderVideoSchema();
|
|
332
|
-
|
|
333
|
-
console.log('\n✅ All visual builder examples completed!');
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
main().catch(console.error);
|
|
@@ -1,161 +0,0 @@
|
|
|
1
|
-
import { defineTemplate, renderVideo } from './dist/sdk/index.js';
|
|
2
|
-
import fs from 'fs/promises';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
|
|
5
|
-
const { createElement: h } = React;
|
|
6
|
-
|
|
7
|
-
function createTemplateModule(meta, render) {
|
|
8
|
-
return { meta, default: render };
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const templates = [
|
|
12
|
-
// 1. Bouncing ball with spring
|
|
13
|
-
createTemplateModule(
|
|
14
|
-
{
|
|
15
|
-
name: 'bouncing-ball',
|
|
16
|
-
description: 'Bouncing ball with spring easing animation',
|
|
17
|
-
type: 'video',
|
|
18
|
-
size: { width: 600, height: 400 },
|
|
19
|
-
video: { fps: 60, duration: 4 },
|
|
20
|
-
},
|
|
21
|
-
({ tw }) =>
|
|
22
|
-
h('div', { style: tw('flex items-center justify-center w-full h-full bg-gradient-to-br from-blue-900 to-purple-900') },
|
|
23
|
-
h('div', { style: tw('w-48 h-48 rounded-full bg-gradient-to-br from-yellow-400 to-orange-500 shadow-2xl spring loop-translate-y-16/1000') })
|
|
24
|
-
)
|
|
25
|
-
),
|
|
26
|
-
|
|
27
|
-
// 2. Linear easing
|
|
28
|
-
createTemplateModule(
|
|
29
|
-
{
|
|
30
|
-
name: 'easing-linear',
|
|
31
|
-
description: 'Bouncing ball with linear easing (constant speed)',
|
|
32
|
-
type: 'video',
|
|
33
|
-
size: { width: 600, height: 400 },
|
|
34
|
-
video: { fps: 60, duration: 4 },
|
|
35
|
-
},
|
|
36
|
-
({ tw }) =>
|
|
37
|
-
h('div', { style: tw('flex flex-col items-center justify-center gap-6 w-full h-full bg-gradient-to-br from-slate-900 to-slate-800') },
|
|
38
|
-
h('div', { style: tw('w-32 h-32 rounded-full bg-gradient-to-br from-cyan-400 to-blue-500 shadow-2xl linear loop-translate-y-12/1000') }),
|
|
39
|
-
h('div', { style: tw('text-white text-2xl font-bold') }, 'Linear Easing'),
|
|
40
|
-
h('div', { style: tw('text-white/60 text-sm text-center max-w-md px-4') }, 'Constant speed')
|
|
41
|
-
)
|
|
42
|
-
),
|
|
43
|
-
|
|
44
|
-
// 3. Ease-in
|
|
45
|
-
createTemplateModule(
|
|
46
|
-
{
|
|
47
|
-
name: 'easing-ease-in',
|
|
48
|
-
description: 'Bouncing ball with ease-in (accelerating)',
|
|
49
|
-
type: 'video',
|
|
50
|
-
size: { width: 600, height: 400 },
|
|
51
|
-
video: { fps: 60, duration: 4 },
|
|
52
|
-
},
|
|
53
|
-
({ tw }) =>
|
|
54
|
-
h('div', { style: tw('flex flex-col items-center justify-center gap-6 w-full h-full bg-gradient-to-br from-emerald-900 to-teal-800') },
|
|
55
|
-
h('div', { style: tw('w-32 h-32 rounded-full bg-gradient-to-br from-emerald-400 to-green-500 shadow-2xl ease-in loop-translate-y-12/1000') }),
|
|
56
|
-
h('div', { style: tw('text-white text-2xl font-bold') }, 'Ease In'),
|
|
57
|
-
h('div', { style: tw('text-white/60 text-sm text-center max-w-md px-4') }, 'Slow start, fast end')
|
|
58
|
-
)
|
|
59
|
-
),
|
|
60
|
-
|
|
61
|
-
// 4. Ease-out
|
|
62
|
-
createTemplateModule(
|
|
63
|
-
{
|
|
64
|
-
name: 'easing-ease-out',
|
|
65
|
-
description: 'Bouncing ball with ease-out (decelerating)',
|
|
66
|
-
type: 'video',
|
|
67
|
-
size: { width: 600, height: 400 },
|
|
68
|
-
video: { fps: 60, duration: 4 },
|
|
69
|
-
},
|
|
70
|
-
({ tw }) =>
|
|
71
|
-
h('div', { style: tw('flex flex-col items-center justify-center gap-6 w-full h-full bg-gradient-to-br from-rose-900 to-pink-800') },
|
|
72
|
-
h('div', { style: tw('w-32 h-32 rounded-full bg-gradient-to-br from-rose-400 to-pink-500 shadow-2xl ease-out loop-translate-y-12/1000') }),
|
|
73
|
-
h('div', { style: tw('text-white text-2xl font-bold') }, 'Ease Out'),
|
|
74
|
-
h('div', { style: tw('text-white/60 text-sm text-center max-w-md px-4') }, 'Fast start, slow end')
|
|
75
|
-
)
|
|
76
|
-
),
|
|
77
|
-
|
|
78
|
-
// 5. Easing comparison (3 balls)
|
|
79
|
-
createTemplateModule(
|
|
80
|
-
{
|
|
81
|
-
name: 'easing-comparison',
|
|
82
|
-
description: 'Three balls with different easings side-by-side',
|
|
83
|
-
type: 'video',
|
|
84
|
-
size: { width: 600, height: 400 },
|
|
85
|
-
video: { fps: 60, duration: 4 },
|
|
86
|
-
},
|
|
87
|
-
({ tw }) =>
|
|
88
|
-
h('div', { style: tw('flex items-center justify-center gap-8 w-full h-full bg-gradient-to-br from-slate-900 to-gray-900 px-8') },
|
|
89
|
-
h('div', { style: tw('flex flex-col items-center gap-4') },
|
|
90
|
-
h('div', { style: tw('w-24 h-24 rounded-full bg-gradient-to-br from-cyan-400 to-blue-500 shadow-2xl linear loop-translate-y-10/800') }),
|
|
91
|
-
h('div', { style: tw('text-white text-sm font-bold') }, 'Linear'),
|
|
92
|
-
h('div', { style: tw('text-white/50 text-xs') }, '800ms')
|
|
93
|
-
),
|
|
94
|
-
h('div', { style: tw('flex flex-col items-center gap-4') },
|
|
95
|
-
h('div', { style: tw('w-24 h-24 rounded-full bg-gradient-to-br from-pink-400 to-rose-500 shadow-2xl ease-out loop-translate-y-10/1000') }),
|
|
96
|
-
h('div', { style: tw('text-white text-sm font-bold') }, 'Ease Out'),
|
|
97
|
-
h('div', { style: tw('text-white/50 text-xs') }, '1000ms')
|
|
98
|
-
),
|
|
99
|
-
h('div', { style: tw('flex flex-col items-center gap-4') },
|
|
100
|
-
h('div', { style: tw('w-24 h-24 rounded-full bg-gradient-to-br from-yellow-400 to-orange-500 shadow-2xl spring loop-translate-y-10/1200') }),
|
|
101
|
-
h('div', { style: tw('text-white text-sm font-bold') }, 'Spring'),
|
|
102
|
-
h('div', { style: tw('text-white/50 text-xs') }, '1200ms')
|
|
103
|
-
)
|
|
104
|
-
)
|
|
105
|
-
),
|
|
106
|
-
|
|
107
|
-
// 6. Spring variants
|
|
108
|
-
createTemplateModule(
|
|
109
|
-
{
|
|
110
|
-
name: 'spring-variants',
|
|
111
|
-
description: 'Different spring configurations with varying bounce',
|
|
112
|
-
type: 'video',
|
|
113
|
-
size: { width: 600, height: 400 },
|
|
114
|
-
video: { fps: 60, duration: 4 },
|
|
115
|
-
},
|
|
116
|
-
({ tw }) =>
|
|
117
|
-
h('div', { style: tw('flex items-center justify-center gap-6 w-full h-full bg-gradient-to-br from-indigo-900 to-purple-900 px-6') },
|
|
118
|
-
h('div', { style: tw('flex flex-col items-center gap-3') },
|
|
119
|
-
h('div', { style: tw('w-24 h-24 rounded-full bg-gradient-to-br from-blue-400 to-cyan-500 shadow-2xl spring/1/100/10 loop-translate-y-10/1000') }),
|
|
120
|
-
h('div', { style: tw('text-white text-xs font-bold') }, 'Gentle'),
|
|
121
|
-
h('div', { style: tw('text-white/50 text-[10px]') }, '1/100/10')
|
|
122
|
-
),
|
|
123
|
-
h('div', { style: tw('flex flex-col items-center gap-3') },
|
|
124
|
-
h('div', { style: tw('w-24 h-24 rounded-full bg-gradient-to-br from-pink-400 to-rose-500 shadow-2xl spring/1/170/8 loop-translate-y-10/1000') }),
|
|
125
|
-
h('div', { style: tw('text-white text-xs font-bold') }, 'Bouncy'),
|
|
126
|
-
h('div', { style: tw('text-white/50 text-[10px]') }, '1/170/8')
|
|
127
|
-
),
|
|
128
|
-
h('div', { style: tw('flex flex-col items-center gap-3') },
|
|
129
|
-
h('div', { style: tw('w-24 h-24 rounded-full bg-gradient-to-br from-emerald-400 to-green-500 shadow-2xl spring/1/200/15 loop-translate-y-10/1000') }),
|
|
130
|
-
h('div', { style: tw('text-white text-xs font-bold') }, 'Snappy'),
|
|
131
|
-
h('div', { style: tw('text-white/50 text-[10px]') }, '1/200/15')
|
|
132
|
-
)
|
|
133
|
-
)
|
|
134
|
-
),
|
|
135
|
-
];
|
|
136
|
-
|
|
137
|
-
async function renderAll() {
|
|
138
|
-
console.log('Rendering all examples at 600x400...\n');
|
|
139
|
-
|
|
140
|
-
for (let i = 0; i < templates.length; i++) {
|
|
141
|
-
const templateModule = templates[i];
|
|
142
|
-
const template = defineTemplate(templateModule);
|
|
143
|
-
const outputName = `example-${templateModule.meta.name}.mp4`;
|
|
144
|
-
const outputPath = `output/${outputName}`;
|
|
145
|
-
|
|
146
|
-
console.log(`📹 Rendering ${outputName}...`);
|
|
147
|
-
|
|
148
|
-
try {
|
|
149
|
-
const buffer = await renderVideo(template, {}, { quality: 20 });
|
|
150
|
-
await fs.writeFile(outputPath, buffer);
|
|
151
|
-
console.log(` ✔ ${outputName} (${(buffer.length / 1024).toFixed(1)}KB)\n`);
|
|
152
|
-
} catch (err) {
|
|
153
|
-
console.log(` ✖ Failed: ${err.message}\n`);
|
|
154
|
-
console.error(err);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
console.log('✅ All examples rendered at 600x400!');
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
renderAll().catch(console.error);
|
|
@@ -1,60 +0,0 @@
|
|
|
1
|
-
import { defineTemplate, renderVideo } from './dist/sdk/index.js';
|
|
2
|
-
import fs from 'fs/promises';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
|
|
5
|
-
const { createElement: h } = React;
|
|
6
|
-
|
|
7
|
-
function createTemplateModule(meta, render) {
|
|
8
|
-
return { meta, default: render };
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
// Spring variants with enter animations to show the bounce better
|
|
12
|
-
const springVariantsTemplate = createTemplateModule(
|
|
13
|
-
{
|
|
14
|
-
name: 'spring-variants',
|
|
15
|
-
description: 'Different spring configurations with varying bounce',
|
|
16
|
-
type: 'video',
|
|
17
|
-
size: { width: 600, height: 400 },
|
|
18
|
-
video: { fps: 60, duration: 3 },
|
|
19
|
-
},
|
|
20
|
-
({ tw }) =>
|
|
21
|
-
h('div', { style: tw('flex items-center justify-center gap-6 w-full h-full bg-gradient-to-br from-indigo-900 to-purple-900 px-6') },
|
|
22
|
-
h('div', { style: tw('flex flex-col items-center gap-3') },
|
|
23
|
-
h('div', { style: tw('w-24 h-24 rounded-full bg-gradient-to-br from-blue-400 to-cyan-500 shadow-2xl opacity-0 enter-ease-spring/1/100/10 enter-fade-in/0/1500 enter--translate-y-32/0/1500') }),
|
|
24
|
-
h('div', { style: tw('text-white text-xs font-bold opacity-0 enter-fade-in/0/800') }, 'Gentle'),
|
|
25
|
-
h('div', { style: tw('text-white/50 text-[10px] opacity-0 enter-fade-in/0/800') }, '1/100/10')
|
|
26
|
-
),
|
|
27
|
-
h('div', { style: tw('flex flex-col items-center gap-3') },
|
|
28
|
-
h('div', { style: tw('w-24 h-24 rounded-full bg-gradient-to-br from-pink-400 to-rose-500 shadow-2xl opacity-0 enter-ease-spring/1/170/8 enter-fade-in/0/1500 enter--translate-y-32/0/1500') }),
|
|
29
|
-
h('div', { style: tw('text-white text-xs font-bold opacity-0 enter-fade-in/200/800') }, 'Bouncy'),
|
|
30
|
-
h('div', { style: tw('text-white/50 text-[10px] opacity-0 enter-fade-in/200/800') }, '1/170/8')
|
|
31
|
-
),
|
|
32
|
-
h('div', { style: tw('flex flex-col items-center gap-3') },
|
|
33
|
-
h('div', { style: tw('w-24 h-24 rounded-full bg-gradient-to-br from-emerald-400 to-green-500 shadow-2xl opacity-0 enter-ease-spring/1/200/15 enter-fade-in/0/1500 enter--translate-y-32/0/1500') }),
|
|
34
|
-
h('div', { style: tw('text-white text-xs font-bold opacity-0 enter-fade-in/400/800') }, 'Snappy'),
|
|
35
|
-
h('div', { style: tw('text-white/50 text-[10px] opacity-0 enter-fade-in/400/800') }, '1/200/15')
|
|
36
|
-
)
|
|
37
|
-
)
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
async function render() {
|
|
41
|
-
console.log('Rendering spring-variants with enter animations...\n');
|
|
42
|
-
|
|
43
|
-
const template = defineTemplate(springVariantsTemplate);
|
|
44
|
-
const outputPath = 'output/example-spring-variants.mp4';
|
|
45
|
-
|
|
46
|
-
try {
|
|
47
|
-
const buffer = await renderVideo(template, {}, { quality: 20 });
|
|
48
|
-
await fs.writeFile(outputPath, buffer);
|
|
49
|
-
console.log(`✔ example-spring-variants.mp4 (${(buffer.length / 1024).toFixed(1)}KB)\n`);
|
|
50
|
-
console.log('✅ Now you can see the spring differences!');
|
|
51
|
-
console.log(' - Gentle: smooth drop with slight overshoot bounce');
|
|
52
|
-
console.log(' - Bouncy: exaggerated drop with lots of bounce');
|
|
53
|
-
console.log(' - Snappy: fast drop with minimal/no bounce');
|
|
54
|
-
} catch (err) {
|
|
55
|
-
console.log(`✖ Failed: ${err.message}\n`);
|
|
56
|
-
console.error(err);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
render().catch(console.error);
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import { defineTemplate, renderVideo } from './dist/sdk/index.js';
|
|
2
|
-
import fs from 'fs/promises';
|
|
3
|
-
import React from 'react';
|
|
4
|
-
|
|
5
|
-
const { createElement: h } = React;
|
|
6
|
-
|
|
7
|
-
function createTemplateModule(meta, render) {
|
|
8
|
-
return { meta, default: render };
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
const staggeredTextTemplate = createTemplateModule(
|
|
12
|
-
{
|
|
13
|
-
name: 'staggered-text',
|
|
14
|
-
description: 'Staggered text animation with spring easing',
|
|
15
|
-
type: 'video',
|
|
16
|
-
size: { width: 600, height: 400 },
|
|
17
|
-
video: { fps: 60, duration: 3 },
|
|
18
|
-
},
|
|
19
|
-
({ tw }) => {
|
|
20
|
-
const text = 'loopwind';
|
|
21
|
-
const letters = text.split('');
|
|
22
|
-
const staggerDelay = 80; // ms between each letter
|
|
23
|
-
|
|
24
|
-
return h('div', { style: tw('flex items-center justify-center w-full h-full bg-gradient-to-br from-violet-900 via-purple-900 to-fuchsia-900') },
|
|
25
|
-
h('div', { style: tw('flex items-center justify-center gap-1') },
|
|
26
|
-
...letters.map((letter, i) =>
|
|
27
|
-
h('span', {
|
|
28
|
-
key: i,
|
|
29
|
-
style: tw(`text-8xl font-black bg-clip-text text-transparent bg-gradient-to-br from-cyan-400 via-blue-400 to-purple-400 opacity-0 enter-ease-spring enter-fade-in/${i * staggerDelay}/600 enter--translate-y-12/${i * staggerDelay}/600`)
|
|
30
|
-
}, letter)
|
|
31
|
-
)
|
|
32
|
-
)
|
|
33
|
-
);
|
|
34
|
-
}
|
|
35
|
-
);
|
|
36
|
-
|
|
37
|
-
async function render() {
|
|
38
|
-
console.log('Rendering staggered-text animation...\n');
|
|
39
|
-
|
|
40
|
-
const template = defineTemplate(staggeredTextTemplate);
|
|
41
|
-
const outputPath = 'output/example-staggered-text.mp4';
|
|
42
|
-
|
|
43
|
-
try {
|
|
44
|
-
const buffer = await renderVideo(template, {}, { quality: 20 });
|
|
45
|
-
await fs.writeFile(outputPath, buffer);
|
|
46
|
-
console.log(`✔ example-staggered-text.mp4 (${(buffer.length / 1024).toFixed(1)}KB)\n`);
|
|
47
|
-
console.log('✅ Staggered text animation complete!');
|
|
48
|
-
console.log(' Each letter animates in with spring easing');
|
|
49
|
-
console.log(' 80ms delay between each letter');
|
|
50
|
-
} catch (err) {
|
|
51
|
-
console.log(`✖ Failed: ${err.message}\n`);
|
|
52
|
-
console.error(err);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
render().catch(console.error);
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
# Loopwind Cloudflare Workers Test
|
|
2
|
-
|
|
3
|
-
This project tests the loopwind SDK in a Cloudflare Workers environment.
|
|
4
|
-
|
|
5
|
-
## Quick Start
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
# Install dependencies
|
|
9
|
-
npm install
|
|
10
|
-
|
|
11
|
-
# Test locally with Node.js (recommended)
|
|
12
|
-
node test-sdk.mjs
|
|
13
|
-
|
|
14
|
-
# Deploy to Cloudflare production
|
|
15
|
-
npm run deploy
|
|
16
|
-
```
|
|
17
|
-
|
|
18
|
-
## Local Development Limitations
|
|
19
|
-
|
|
20
|
-
**Note:** Local development with `wrangler dev` has WASM limitations that prevent full functionality. This is a known limitation of the local workerd runtime.
|
|
21
|
-
|
|
22
|
-
For local testing, use:
|
|
23
|
-
1. **Node.js test script:** `node test-sdk.mjs` (works fully)
|
|
24
|
-
2. **SVG format only:** `http://localhost:8787/?format=svg&title=Hello` (in wrangler dev)
|
|
25
|
-
|
|
26
|
-
## Production
|
|
27
|
-
|
|
28
|
-
When deployed to Cloudflare production, all features work:
|
|
29
|
-
- SVG rendering
|
|
30
|
-
- PNG rendering (with WASM)
|
|
31
|
-
|
|
32
|
-
## API
|
|
33
|
-
|
|
34
|
-
### GET /
|
|
35
|
-
|
|
36
|
-
Generate an image with query parameters:
|
|
37
|
-
- `title` - Main title text (default: "Hello from Loopwind!")
|
|
38
|
-
- `subtitle` - Subtitle text (default: "Running in Cloudflare Workers")
|
|
39
|
-
- `format` - Output format: `svg` or `png` (default: `svg`)
|
|
40
|
-
|
|
41
|
-
### GET /health
|
|
42
|
-
|
|
43
|
-
Health check endpoint returning JSON status.
|
|
44
|
-
|
|
45
|
-
## Example Usage
|
|
46
|
-
|
|
47
|
-
```bash
|
|
48
|
-
# Generate SVG
|
|
49
|
-
curl "https://your-worker.workers.dev/?title=Hello&format=svg" > image.svg
|
|
50
|
-
|
|
51
|
-
# Generate PNG
|
|
52
|
-
curl "https://your-worker.workers.dev/?title=Hello&format=png" > image.png
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Project Structure
|
|
56
|
-
|
|
57
|
-
```
|
|
58
|
-
test-cloudflare-worker/
|
|
59
|
-
├── src/
|
|
60
|
-
│ └── index.ts # Worker entry point
|
|
61
|
-
├── test-sdk.mjs # Node.js test script
|
|
62
|
-
├── wrangler.toml # Wrangler configuration
|
|
63
|
-
└── README.md
|
|
64
|
-
```
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
This folder contains the built output assets for the worker "loopwind-worker-test" generated at 2025-12-10T07:43:03.352Z.
|