loopwind 0.17.0 → 0.18.1
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/dist/sdk/index.d.ts +2 -2
- package/dist/sdk/index.d.ts.map +1 -1
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/template.d.ts +97 -0
- package/dist/sdk/template.d.ts.map +1 -1
- package/dist/sdk/template.js +217 -0
- package/dist/sdk/template.js.map +1 -1
- package/examples/code-editor-templates.ts +173 -0
- package/examples/nextjs-template-import.ts +58 -0
- package/examples/visual-builder-templates.ts +336 -0
- package/package.json +3 -1
- package/test-jsx-support.mjs +120 -0
- package/test-sdk-user-templates.mjs +469 -0
- package/website/.astro/integrations/_inox-tools_astro-when/types.d.ts +1 -0
- package/website/.astro/types.d.ts +1 -0
- package/website/DEPLOYMENT.md +142 -0
- package/website/OG_IMAGES.md +141 -0
- package/website/astro.config.mjs +9 -1
- package/website/dist/.gitkeep +1 -0
- package/website/dist/_astro/agents.Yx-L_igG.css +1 -0
- package/website/dist/_routes.json +30 -0
- package/website/dist/_worker.js/_@astrojs-ssr-adapter.mjs +1033 -0
- package/website/dist/_worker.js/_astro-internal_middleware.mjs +40 -0
- package/website/dist/_worker.js/chunks/abap_BTmsHiP5.mjs +1 -0
- package/website/dist/_worker.js/chunks/actionscript-3_DmBelb1E.mjs +1 -0
- package/website/dist/_worker.js/chunks/ada_8-E0ahCN.mjs +1 -0
- package/website/dist/_worker.js/chunks/andromeeda_XI-CXx50.mjs +1 -0
- package/website/dist/_worker.js/chunks/angular-html_DKGh3gGH.mjs +1 -0
- package/website/dist/_worker.js/chunks/angular-ts_-qZGsJoA.mjs +1 -0
- package/website/dist/_worker.js/chunks/apache_ijTUt0Ee.mjs +1 -0
- package/website/dist/_worker.js/chunks/apex_agu1c6Sh.mjs +1 -0
- package/website/dist/_worker.js/chunks/apl_Bj2f7Art.mjs +1 -0
- package/website/dist/_worker.js/chunks/applescript_B_vXrOh3.mjs +1 -0
- package/website/dist/_worker.js/chunks/ara_DCEQ2rnh.mjs +1 -0
- package/website/dist/_worker.js/chunks/asciidoc_CGN_EkYS.mjs +1 -0
- package/website/dist/_worker.js/chunks/asm_BBWZgnDp.mjs +1 -0
- package/website/dist/_worker.js/chunks/astro/assets-service_j52rQLzU.mjs +721 -0
- package/website/dist/_worker.js/chunks/astro/server_Y5_QHO8v.mjs +2401 -0
- package/website/dist/_worker.js/chunks/astro-designed-error-pages_BNTLO-TA.mjs +542 -0
- package/website/dist/_worker.js/chunks/astro_Dr_hht3h.mjs +1 -0
- package/website/dist/_worker.js/chunks/aurora-x_9GHG8nSq.mjs +1 -0
- package/website/dist/_worker.js/chunks/awk_DHRvhXot.mjs +1 -0
- package/website/dist/_worker.js/chunks/ayu-dark_CcvqmEHE.mjs +1 -0
- package/website/dist/_worker.js/chunks/ballerina_C7SdeSZb.mjs +1 -0
- package/website/dist/_worker.js/chunks/bat_Dv4A3u45.mjs +1 -0
- package/website/dist/_worker.js/chunks/beancount_BfPf9Luv.mjs +1 -0
- package/website/dist/_worker.js/chunks/berry_B8rfM3lL.mjs +1 -0
- package/website/dist/_worker.js/chunks/bibtex_TcjYgtJM.mjs +1 -0
- package/website/dist/_worker.js/chunks/bicep_CrlFWCdN.mjs +1 -0
- package/website/dist/_worker.js/chunks/blade_lanKVYID.mjs +1 -0
- package/website/dist/_worker.js/chunks/bsl_BhppzXMB.mjs +1 -0
- package/website/dist/_worker.js/chunks/c_6FBALJTK.mjs +1 -0
- package/website/dist/_worker.js/chunks/cadence_2txU9LVE.mjs +1 -0
- package/website/dist/_worker.js/chunks/cairo_BkrFAIlP.mjs +1 -0
- package/website/dist/_worker.js/chunks/catppuccin-frappe_CkEqIYhU.mjs +1 -0
- package/website/dist/_worker.js/chunks/catppuccin-latte_DG4Gx_-v.mjs +1 -0
- package/website/dist/_worker.js/chunks/catppuccin-macchiato_Cwi3vCXf.mjs +1 -0
- package/website/dist/_worker.js/chunks/catppuccin-mocha_L9_OPlFX.mjs +1 -0
- package/website/dist/_worker.js/chunks/clarity_BEAe4Ulu.mjs +1 -0
- package/website/dist/_worker.js/chunks/clojure_VnUX6p2g.mjs +1 -0
- package/website/dist/_worker.js/chunks/cmake_0-SGkZEj.mjs +1 -0
- package/website/dist/_worker.js/chunks/cobol_92M_KGaE.mjs +1 -0
- package/website/dist/_worker.js/chunks/codeowners_CzMwskBv.mjs +1 -0
- package/website/dist/_worker.js/chunks/codeql_DWJZNHv1.mjs +1 -0
- package/website/dist/_worker.js/chunks/coffee_CQjKU2fh.mjs +1 -0
- package/website/dist/_worker.js/chunks/common-lisp_BBLWDpS5.mjs +1 -0
- package/website/dist/_worker.js/chunks/coq_hedRFV3D.mjs +1 -0
- package/website/dist/_worker.js/chunks/cpp_DlS1i6Zs.mjs +1 -0
- package/website/dist/_worker.js/chunks/crystal_D6n65fKV.mjs +1 -0
- package/website/dist/_worker.js/chunks/csharp_C6FCVFzc.mjs +1 -0
- package/website/dist/_worker.js/chunks/css_C5uJEgmJ.mjs +1 -0
- package/website/dist/_worker.js/chunks/csv_CtMYuuJl.mjs +1 -0
- package/website/dist/_worker.js/chunks/cue_BsPexqx6.mjs +1 -0
- package/website/dist/_worker.js/chunks/cypher_apzf6OBi.mjs +1 -0
- package/website/dist/_worker.js/chunks/d_DcvIRcgm.mjs +1 -0
- package/website/dist/_worker.js/chunks/dark-plus_C01ONtzj.mjs +1 -0
- package/website/dist/_worker.js/chunks/dart_WkzM5WrV.mjs +1 -0
- package/website/dist/_worker.js/chunks/dax_DjXAO5V4.mjs +1 -0
- package/website/dist/_worker.js/chunks/desktop_C92LCxdc.mjs +1 -0
- package/website/dist/_worker.js/chunks/diff_CVwM_9XJ.mjs +1 -0
- package/website/dist/_worker.js/chunks/docker_DPzgJf6Z.mjs +1 -0
- package/website/dist/_worker.js/chunks/dotenv_D_vgANvA.mjs +1 -0
- package/website/dist/_worker.js/chunks/dracula-soft_CLnUBwFm.mjs +1 -0
- package/website/dist/_worker.js/chunks/dracula_lBVpb6Lb.mjs +1 -0
- package/website/dist/_worker.js/chunks/dream-maker_DTLbzd_J.mjs +1 -0
- package/website/dist/_worker.js/chunks/edge_i54JYm3_.mjs +1 -0
- package/website/dist/_worker.js/chunks/elixir_BJCIjTu4.mjs +1 -0
- package/website/dist/_worker.js/chunks/elm_BbXD39-_.mjs +1 -0
- package/website/dist/_worker.js/chunks/emacs-lisp_pxa5cXaN.mjs +1 -0
- package/website/dist/_worker.js/chunks/erb_Ccjijeee.mjs +1 -0
- package/website/dist/_worker.js/chunks/erlang_B2VM_hi7.mjs +1 -0
- package/website/dist/_worker.js/chunks/everforest-dark_BxvIPBim.mjs +1 -0
- package/website/dist/_worker.js/chunks/everforest-light_B7VoyaJM.mjs +1 -0
- package/website/dist/_worker.js/chunks/fennel_D-uo7X6c.mjs +1 -0
- package/website/dist/_worker.js/chunks/fish_BjePoK3m.mjs +1 -0
- package/website/dist/_worker.js/chunks/fluent_C8fgkzLX.mjs +1 -0
- package/website/dist/_worker.js/chunks/fortran-fixed-form_D1pu5zrc.mjs +1 -0
- package/website/dist/_worker.js/chunks/fortran-free-form_CSGOhJD6.mjs +1 -0
- package/website/dist/_worker.js/chunks/fsharp_B0xy-A4Y.mjs +1 -0
- package/website/dist/_worker.js/chunks/gdresource_CWppjlHq.mjs +1 -0
- package/website/dist/_worker.js/chunks/gdscript_eQCHchcS.mjs +1 -0
- package/website/dist/_worker.js/chunks/gdshader_C4kxepX7.mjs +1 -0
- package/website/dist/_worker.js/chunks/genie_ACtQLcDW.mjs +1 -0
- package/website/dist/_worker.js/chunks/gherkin_BFp2uKUd.mjs +1 -0
- package/website/dist/_worker.js/chunks/git-commit_CLg9ZwMV.mjs +1 -0
- package/website/dist/_worker.js/chunks/git-rebase_DG8A80Nt.mjs +1 -0
- package/website/dist/_worker.js/chunks/github-dark-default_BI0EP2Kv.mjs +1 -0
- package/website/dist/_worker.js/chunks/github-dark-dimmed_a_NIC0Xb.mjs +1 -0
- package/website/dist/_worker.js/chunks/github-dark-high-contrast_jZGqT7hk.mjs +1 -0
- package/website/dist/_worker.js/chunks/github-dark_CHCDNd2O.mjs +1 -0
- package/website/dist/_worker.js/chunks/github-light-default_DRbOW5RG.mjs +1 -0
- package/website/dist/_worker.js/chunks/github-light-high-contrast_tn_kWutM.mjs +1 -0
- package/website/dist/_worker.js/chunks/github-light_D9brYzot.mjs +1 -0
- package/website/dist/_worker.js/chunks/gleam_Dmhu1oxW.mjs +1 -0
- package/website/dist/_worker.js/chunks/glimmer-js_BfZbXy8A.mjs +1 -0
- package/website/dist/_worker.js/chunks/glimmer-ts_B9QVICrD.mjs +1 -0
- package/website/dist/_worker.js/chunks/glsl_DD2PPwOs.mjs +1 -0
- package/website/dist/_worker.js/chunks/gnuplot_D2OYChUX.mjs +1 -0
- package/website/dist/_worker.js/chunks/go_DYGFTe3h.mjs +1 -0
- package/website/dist/_worker.js/chunks/graphql_B7XsT3nH.mjs +1 -0
- package/website/dist/_worker.js/chunks/groovy_BO12Uwkl.mjs +1 -0
- package/website/dist/_worker.js/chunks/hack_CB2_ztCP.mjs +1 -0
- package/website/dist/_worker.js/chunks/haml_CyfDcDD3.mjs +1 -0
- package/website/dist/_worker.js/chunks/handlebars_CfpxpWm2.mjs +1 -0
- package/website/dist/_worker.js/chunks/haskell_jUeC5uN5.mjs +1 -0
- package/website/dist/_worker.js/chunks/haxe_B6GxP1WB.mjs +1 -0
- package/website/dist/_worker.js/chunks/hcl_DwoHV2oh.mjs +1 -0
- package/website/dist/_worker.js/chunks/hjson_DV7cJRk4.mjs +1 -0
- package/website/dist/_worker.js/chunks/hlsl_BlFCscPI.mjs +1 -0
- package/website/dist/_worker.js/chunks/houston_COBFG1Mx.mjs +1 -0
- package/website/dist/_worker.js/chunks/html-derivative_C9pJ337h.mjs +1 -0
- package/website/dist/_worker.js/chunks/html_D1OkrZS5.mjs +1 -0
- package/website/dist/_worker.js/chunks/http_DIGXRqvJ.mjs +1 -0
- package/website/dist/_worker.js/chunks/hxml_DEwh9i-c.mjs +1 -0
- package/website/dist/_worker.js/chunks/hy_DDoIgW1K.mjs +1 -0
- package/website/dist/_worker.js/chunks/imba_B00zbHo4.mjs +1 -0
- package/website/dist/_worker.js/chunks/index_C1UTDwYg.mjs +1861 -0
- package/website/dist/_worker.js/chunks/ini_D7XQA_p8.mjs +1 -0
- package/website/dist/_worker.js/chunks/java_B9wdFd8K.mjs +1 -0
- package/website/dist/_worker.js/chunks/javascript_CLsPGOON.mjs +1 -0
- package/website/dist/_worker.js/chunks/jinja_jarBCAN1.mjs +1 -0
- package/website/dist/_worker.js/chunks/jison_oGg3J708.mjs +1 -0
- package/website/dist/_worker.js/chunks/json5_DlZ1Kyaa.mjs +1 -0
- package/website/dist/_worker.js/chunks/json_DaYk_FMp.mjs +1 -0
- package/website/dist/_worker.js/chunks/jsonc_DlwgfSDs.mjs +1 -0
- package/website/dist/_worker.js/chunks/jsonl_BbCCVaZF.mjs +1 -0
- package/website/dist/_worker.js/chunks/jsonnet_Dt-G75xe.mjs +1 -0
- package/website/dist/_worker.js/chunks/jssm_BtKFTj2A.mjs +1 -0
- package/website/dist/_worker.js/chunks/jsx_DDx_xAZ8.mjs +1 -0
- package/website/dist/_worker.js/chunks/julia_CK0lv68l.mjs +1 -0
- package/website/dist/_worker.js/chunks/kanagawa-dragon_BldAK3Oo.mjs +1 -0
- package/website/dist/_worker.js/chunks/kanagawa-lotus_DVM8FX9_.mjs +1 -0
- package/website/dist/_worker.js/chunks/kanagawa-wave_Dpih0AKP.mjs +1 -0
- package/website/dist/_worker.js/chunks/kotlin_kWneB9V_.mjs +1 -0
- package/website/dist/_worker.js/chunks/kusto_BKVATd95.mjs +1 -0
- package/website/dist/_worker.js/chunks/laserwave_BqatxsVl.mjs +1 -0
- package/website/dist/_worker.js/chunks/latex_LVDcGBbc.mjs +1 -0
- package/website/dist/_worker.js/chunks/lean_W7qo-5M2.mjs +1 -0
- package/website/dist/_worker.js/chunks/less_DFNwJnBH.mjs +1 -0
- package/website/dist/_worker.js/chunks/light-plus_Dp0AoWsO.mjs +1 -0
- package/website/dist/_worker.js/chunks/liquid_D24qs0pc.mjs +1 -0
- package/website/dist/_worker.js/chunks/log_IPWMXriF.mjs +1 -0
- package/website/dist/_worker.js/chunks/logo_C6KaatrQ.mjs +1 -0
- package/website/dist/_worker.js/chunks/lua_CwnEf-T7.mjs +1 -0
- package/website/dist/_worker.js/chunks/luau_Br3-CXjS.mjs +1 -0
- package/website/dist/_worker.js/chunks/make_UBNG-kOo.mjs +1 -0
- package/website/dist/_worker.js/chunks/markdown_C7mhJFCm.mjs +1 -0
- package/website/dist/_worker.js/chunks/marko_4tchUvI7.mjs +1 -0
- package/website/dist/_worker.js/chunks/material-theme-darker_SKtaNEPn.mjs +1 -0
- package/website/dist/_worker.js/chunks/material-theme-lighter_zOX_DZCH.mjs +1 -0
- package/website/dist/_worker.js/chunks/material-theme-ocean_BN9WbhdC.mjs +1 -0
- package/website/dist/_worker.js/chunks/material-theme-palenight_DT_covjH.mjs +1 -0
- package/website/dist/_worker.js/chunks/material-theme_6RpeM3kc.mjs +1 -0
- package/website/dist/_worker.js/chunks/matlab_DCOXsPKR.mjs +1 -0
- package/website/dist/_worker.js/chunks/mdc_B9gb2UFP.mjs +1 -0
- package/website/dist/_worker.js/chunks/mdx_DGU7Nu9u.mjs +1 -0
- package/website/dist/_worker.js/chunks/mermaid_B69URzsZ.mjs +1 -0
- package/website/dist/_worker.js/chunks/min-dark_BgxifOMI.mjs +1 -0
- package/website/dist/_worker.js/chunks/min-light_BrPjXxUp.mjs +1 -0
- package/website/dist/_worker.js/chunks/mipsasm_9U-4_t7k.mjs +1 -0
- package/website/dist/_worker.js/chunks/mojo_B0wt7ug3.mjs +1 -0
- package/website/dist/_worker.js/chunks/monokai_B6Pxpoyi.mjs +1 -0
- package/website/dist/_worker.js/chunks/move_1eid4CyR.mjs +1 -0
- package/website/dist/_worker.js/chunks/narrat_Ds6-p5JZ.mjs +1 -0
- package/website/dist/_worker.js/chunks/nextflow_v2N1Qlqa.mjs +1 -0
- package/website/dist/_worker.js/chunks/nginx_Bp9Ab2NH.mjs +1 -0
- package/website/dist/_worker.js/chunks/night-owl_CdwOw_sc.mjs +1 -0
- package/website/dist/_worker.js/chunks/nim_BXGDUe53.mjs +1 -0
- package/website/dist/_worker.js/chunks/nix_CUig1nJH.mjs +1 -0
- package/website/dist/_worker.js/chunks/noop-middleware_DlWGj5t5.mjs +10 -0
- package/website/dist/_worker.js/chunks/nord_SPoG1iae.mjs +1 -0
- package/website/dist/_worker.js/chunks/nushell_DJw1Lca8.mjs +1 -0
- package/website/dist/_worker.js/chunks/objective-c_Bktzl_CO.mjs +1 -0
- package/website/dist/_worker.js/chunks/objective-cpp_CP4DWdDp.mjs +1 -0
- package/website/dist/_worker.js/chunks/ocaml_CeEAs7bZ.mjs +1 -0
- package/website/dist/_worker.js/chunks/one-dark-pro_-hIwCNMi.mjs +1 -0
- package/website/dist/_worker.js/chunks/one-light_DSmYvJ05.mjs +1 -0
- package/website/dist/_worker.js/chunks/pascal_C-S_Ms_o.mjs +1 -0
- package/website/dist/_worker.js/chunks/perl_CKamvo15.mjs +1 -0
- package/website/dist/_worker.js/chunks/php_BlmcX_F3.mjs +1 -0
- package/website/dist/_worker.js/chunks/plastic_Ryt8tVoA.mjs +1 -0
- package/website/dist/_worker.js/chunks/plsql_Cb3v7cBj.mjs +1 -0
- package/website/dist/_worker.js/chunks/po_DZbdNRlo.mjs +1 -0
- package/website/dist/_worker.js/chunks/poimandres_bYmE3_5d.mjs +1 -0
- package/website/dist/_worker.js/chunks/polar_pJkMGwoW.mjs +1 -0
- package/website/dist/_worker.js/chunks/postcss_BAXSOKgk.mjs +1 -0
- package/website/dist/_worker.js/chunks/powerquery_oITMGN4x.mjs +1 -0
- package/website/dist/_worker.js/chunks/powershell_6306-xIF.mjs +1 -0
- package/website/dist/_worker.js/chunks/prisma_DSDxnZGz.mjs +1 -0
- package/website/dist/_worker.js/chunks/prolog_CxG7tjZR.mjs +1 -0
- package/website/dist/_worker.js/chunks/proto_CS9ByXm1.mjs +1 -0
- package/website/dist/_worker.js/chunks/pug_BMtLJo6U.mjs +1 -0
- package/website/dist/_worker.js/chunks/puppet_BfeeSzee.mjs +1 -0
- package/website/dist/_worker.js/chunks/purescript_BFfueNaH.mjs +1 -0
- package/website/dist/_worker.js/chunks/python_Cc4Faapv.mjs +1 -0
- package/website/dist/_worker.js/chunks/qml_C1CTJTK8.mjs +1 -0
- package/website/dist/_worker.js/chunks/qmldir_nG1KaqKR.mjs +1 -0
- package/website/dist/_worker.js/chunks/qss_Cncxk263.mjs +1 -0
- package/website/dist/_worker.js/chunks/r_ChR54Ihi.mjs +1 -0
- package/website/dist/_worker.js/chunks/racket_BDrhptDs.mjs +1 -0
- package/website/dist/_worker.js/chunks/raku_07OUHa0P.mjs +1 -0
- package/website/dist/_worker.js/chunks/razor_DIP3INLa.mjs +1 -0
- package/website/dist/_worker.js/chunks/red_DOPXfj-6.mjs +1 -0
- package/website/dist/_worker.js/chunks/reg_B64SwEDj.mjs +1 -0
- package/website/dist/_worker.js/chunks/regexp_ButFGoB5.mjs +1 -0
- package/website/dist/_worker.js/chunks/rel_BWJAWqZD.mjs +1 -0
- package/website/dist/_worker.js/chunks/riscv_79gXlbsF.mjs +1 -0
- package/website/dist/_worker.js/chunks/rose-pine-dawn_DHIjVGd3.mjs +1 -0
- package/website/dist/_worker.js/chunks/rose-pine-moon_t86aEbs0.mjs +1 -0
- package/website/dist/_worker.js/chunks/rose-pine_BHgrcDCs.mjs +1 -0
- package/website/dist/_worker.js/chunks/rst_D3F4Fcpj.mjs +1 -0
- package/website/dist/_worker.js/chunks/ruby_Cs7vM9iv.mjs +1 -0
- package/website/dist/_worker.js/chunks/rust_DpyRVatH.mjs +1 -0
- package/website/dist/_worker.js/chunks/sas_DW45xZXN.mjs +1 -0
- package/website/dist/_worker.js/chunks/sass_C6SiMwN_.mjs +1 -0
- package/website/dist/_worker.js/chunks/scala_DlZOjNZk.mjs +1 -0
- package/website/dist/_worker.js/chunks/scheme_D2ezSJXu.mjs +1 -0
- package/website/dist/_worker.js/chunks/scss_DG5Spjqu.mjs +1 -0
- package/website/dist/_worker.js/chunks/sdbl_ZCYaj4VN.mjs +1 -0
- package/website/dist/_worker.js/chunks/shaderlab_CAcRkg1_.mjs +1 -0
- package/website/dist/_worker.js/chunks/shellscript_BWwhkDVh.mjs +1 -0
- package/website/dist/_worker.js/chunks/shellsession_BfEA3juK.mjs +1 -0
- package/website/dist/_worker.js/chunks/slack-dark_CL3lSpCc.mjs +1 -0
- package/website/dist/_worker.js/chunks/slack-ochin_DdZKOQVh.mjs +1 -0
- package/website/dist/_worker.js/chunks/smalltalk_DgilzSui.mjs +1 -0
- package/website/dist/_worker.js/chunks/snazzy-light_eJU08Pz_.mjs +1 -0
- package/website/dist/_worker.js/chunks/solarized-dark_Dg_YQywx.mjs +1 -0
- package/website/dist/_worker.js/chunks/solarized-light_BnIsrA6p.mjs +1 -0
- package/website/dist/_worker.js/chunks/solidity_DkseH8pQ.mjs +1 -0
- package/website/dist/_worker.js/chunks/soy_DU7bOYoG.mjs +1 -0
- package/website/dist/_worker.js/chunks/sparql_BuI1DBDH.mjs +1 -0
- package/website/dist/_worker.js/chunks/splunk_B8Ha9Pkg.mjs +1 -0
- package/website/dist/_worker.js/chunks/sql_BniHwea5.mjs +1 -0
- package/website/dist/_worker.js/chunks/ssh-config_CkE1GuVe.mjs +1 -0
- package/website/dist/_worker.js/chunks/stata_Dtqpbd_l.mjs +1 -0
- package/website/dist/_worker.js/chunks/stylus_CXTtglzO.mjs +1 -0
- package/website/dist/_worker.js/chunks/svelte_BjWYcUCN.mjs +1 -0
- package/website/dist/_worker.js/chunks/swift_BzHql_rM.mjs +1 -0
- package/website/dist/_worker.js/chunks/synthwave-84_DLRNhxNA.mjs +1 -0
- package/website/dist/_worker.js/chunks/system-verilog_ChyInPph.mjs +1 -0
- package/website/dist/_worker.js/chunks/systemd_Bi9Qa2qD.mjs +1 -0
- package/website/dist/_worker.js/chunks/talonscript_B3sH_Y-V.mjs +1 -0
- package/website/dist/_worker.js/chunks/tasl_BJ5yipRs.mjs +1 -0
- package/website/dist/_worker.js/chunks/tcl_CoJQjNoP.mjs +1 -0
- package/website/dist/_worker.js/chunks/templ_CrU7Ffil.mjs +1 -0
- package/website/dist/_worker.js/chunks/terraform_DT9JSFpC.mjs +1 -0
- package/website/dist/_worker.js/chunks/tex_5PKu2yA0.mjs +1 -0
- package/website/dist/_worker.js/chunks/tokyo-night_Buo8OK7-.mjs +1 -0
- package/website/dist/_worker.js/chunks/toml_CPuXX3oc.mjs +1 -0
- package/website/dist/_worker.js/chunks/ts-tags_D0M_1VSH.mjs +1 -0
- package/website/dist/_worker.js/chunks/tsv_CuivVNot.mjs +1 -0
- package/website/dist/_worker.js/chunks/tsx_MkuGr8MY.mjs +1 -0
- package/website/dist/_worker.js/chunks/turtle_BqgEPK7f.mjs +1 -0
- package/website/dist/_worker.js/chunks/twig_r1G9rpYJ.mjs +1 -0
- package/website/dist/_worker.js/chunks/typescript_Au5buqzM.mjs +1 -0
- package/website/dist/_worker.js/chunks/typespec_47rhBK_z.mjs +1 -0
- package/website/dist/_worker.js/chunks/typst_BAtuQLh-.mjs +1 -0
- package/website/dist/_worker.js/chunks/v_BIvWImHg.mjs +1 -0
- package/website/dist/_worker.js/chunks/vala_DYEacj30.mjs +1 -0
- package/website/dist/_worker.js/chunks/vb_CikQuqGJ.mjs +1 -0
- package/website/dist/_worker.js/chunks/verilog_BQRENwI-.mjs +1 -0
- package/website/dist/_worker.js/chunks/vesper_DA0kvTmj.mjs +1 -0
- package/website/dist/_worker.js/chunks/vhdl_DHscJIyg.mjs +1 -0
- package/website/dist/_worker.js/chunks/viml_F2pvMwvG.mjs +1 -0
- package/website/dist/_worker.js/chunks/vitesse-black_D9tjNzd0.mjs +1 -0
- package/website/dist/_worker.js/chunks/vitesse-dark_Bnm5d0hd.mjs +1 -0
- package/website/dist/_worker.js/chunks/vitesse-light_CHwbyjNR.mjs +1 -0
- package/website/dist/_worker.js/chunks/vue-html_DyYtbbMK.mjs +1 -0
- package/website/dist/_worker.js/chunks/vue_DofN6juy.mjs +1 -0
- package/website/dist/_worker.js/chunks/vyper_CiR0m-OV.mjs +1 -0
- package/website/dist/_worker.js/chunks/wasm_CwIGgRGf.mjs +1 -0
- package/website/dist/_worker.js/chunks/wasm_jKWhg0J0.mjs +1 -0
- package/website/dist/_worker.js/chunks/wenyan_DKvVZKXW.mjs +1 -0
- package/website/dist/_worker.js/chunks/wgsl_BOWZY7yw.mjs +1 -0
- package/website/dist/_worker.js/chunks/wikitext_CXDhhHPy.mjs +1 -0
- package/website/dist/_worker.js/chunks/wolfram_ChkmGnW0.mjs +1 -0
- package/website/dist/_worker.js/chunks/xml_DXH3hHIu.mjs +1 -0
- package/website/dist/_worker.js/chunks/xsl_DuP2mFjg.mjs +1 -0
- package/website/dist/_worker.js/chunks/yaml_IGiEkTge.mjs +1 -0
- package/website/dist/_worker.js/chunks/zenscript_59iXGyNw.mjs +1 -0
- package/website/dist/_worker.js/chunks/zig_DKzb0zdT.mjs +1 -0
- package/website/dist/_worker.js/index.js +53 -0
- package/website/dist/_worker.js/manifest_BAAoOzaU.mjs +98 -0
- package/website/dist/_worker.js/pages/_image.astro.mjs +24 -0
- package/website/dist/_worker.js/pages/agents.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/animation.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/api/raw-markdown/_---path_.astro.mjs +44 -0
- package/website/dist/_worker.js/pages/config.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/fonts.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/getting-started.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/helpers.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/images.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/index.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/llm.txt.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/preview.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/sdk.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/sitemap.xml.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/styling.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/templates.astro.mjs +1 -0
- package/website/dist/_worker.js/pages/video.astro.mjs +1 -0
- package/website/dist/_worker.js/renderers.mjs +57 -0
- package/website/dist/agents/index.html +3 -2
- package/website/dist/animation/index.html +402 -128
- package/website/dist/config/index.html +184 -0
- package/website/dist/fonts/index.html +56 -52
- package/website/dist/getting-started/index.html +107 -0
- package/website/dist/helpers/index.html +8 -8
- package/website/dist/images/index.html +50 -23
- package/website/dist/index.html +114 -148
- package/website/dist/llm.txt +751 -1055
- package/website/dist/preview/index.html +111 -0
- package/website/dist/robots.txt +35 -0
- package/website/dist/sdk/index.html +390 -52
- package/website/dist/sitemap.xml +76 -0
- package/website/dist/styling/index.html +10 -7
- package/website/dist/templates/index.html +11 -59
- package/website/dist/video/index.html +106 -537
- package/website/package-lock.json +1077 -17
- package/website/templates/og-image.tsx +61 -0
- package/website/dist/_astro/agents.I1-fN38o.css +0 -1
|
@@ -0,0 +1,336 @@
|
|
|
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);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "loopwind",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.1",
|
|
4
4
|
"description": "A CLI tool for AI code agents and developers for generating images and videos.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -46,6 +46,7 @@
|
|
|
46
46
|
"url": "https://github.com/tomtev/loopwind/issues"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
+
"@babel/standalone": "^7.28.5",
|
|
49
50
|
"@resvg/resvg-js": "^2.6.0",
|
|
50
51
|
"@vitejs/plugin-react": "^5.1.1",
|
|
51
52
|
"boxen": "^7.1.1",
|
|
@@ -74,6 +75,7 @@
|
|
|
74
75
|
"vite": "^7.2.2"
|
|
75
76
|
},
|
|
76
77
|
"devDependencies": {
|
|
78
|
+
"@types/babel__standalone": "^7.1.9",
|
|
77
79
|
"@types/chalk-animation": "^1.6.3",
|
|
78
80
|
"@types/express": "^5.0.5",
|
|
79
81
|
"@types/gradient-string": "^1.1.6",
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test JSX support in defineTemplateFromSource
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { defineTemplateFromSource, renderImage } from './dist/sdk/index.js';
|
|
6
|
+
|
|
7
|
+
console.log('Testing JSX Support in defineTemplateFromSource\n');
|
|
8
|
+
|
|
9
|
+
// Test 1: Simple JSX template
|
|
10
|
+
const simpleJSX = `
|
|
11
|
+
export const meta = {
|
|
12
|
+
name: 'jsx-test',
|
|
13
|
+
type: 'image',
|
|
14
|
+
size: { width: 400, height: 200 }
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export default ({ tw, title }) => (
|
|
18
|
+
<div style={tw('flex items-center justify-center w-full h-full bg-blue-500')}>
|
|
19
|
+
<h1 style={tw('text-4xl font-bold text-white')}>{title}</h1>
|
|
20
|
+
</div>
|
|
21
|
+
);
|
|
22
|
+
`;
|
|
23
|
+
|
|
24
|
+
try {
|
|
25
|
+
const template1 = defineTemplateFromSource(simpleJSX);
|
|
26
|
+
const png1 = await renderImage(template1, { title: 'JSX Works!' });
|
|
27
|
+
console.log('✓ Simple JSX template works');
|
|
28
|
+
console.log(' PNG size:', png1.length, 'bytes\n');
|
|
29
|
+
} catch (error) {
|
|
30
|
+
console.error('✗ Simple JSX template failed:', error.message);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Test 2: Nested JSX
|
|
34
|
+
const nestedJSX = `
|
|
35
|
+
export const meta = {
|
|
36
|
+
name: 'nested-jsx',
|
|
37
|
+
size: { width: 600, height: 300 }
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
export default ({ tw, title, subtitle, items }) => (
|
|
41
|
+
<div style={tw('flex flex-col w-full h-full bg-white p-8')}>
|
|
42
|
+
<h1 style={tw('text-5xl font-bold text-gray-900 mb-4')}>{title}</h1>
|
|
43
|
+
<p style={tw('text-2xl text-gray-600 mb-6')}>{subtitle}</p>
|
|
44
|
+
<div style={tw('flex gap-4')}>
|
|
45
|
+
{items.map((item, i) => (
|
|
46
|
+
<div style={tw('px-4 py-2 bg-blue-500 text-white rounded')}>
|
|
47
|
+
{item}
|
|
48
|
+
</div>
|
|
49
|
+
))}
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
);
|
|
53
|
+
`;
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
const template2 = defineTemplateFromSource(nestedJSX);
|
|
57
|
+
const png2 = await renderImage(template2, {
|
|
58
|
+
title: 'Nested JSX',
|
|
59
|
+
subtitle: 'With multiple levels',
|
|
60
|
+
items: ['One', 'Two', 'Three']
|
|
61
|
+
});
|
|
62
|
+
console.log('✓ Nested JSX template works');
|
|
63
|
+
console.log(' PNG size:', png2.length, 'bytes\n');
|
|
64
|
+
} catch (error) {
|
|
65
|
+
console.error('✗ Nested JSX template failed:', error.message);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Test 3: Self-closing tags
|
|
69
|
+
const selfClosing = `
|
|
70
|
+
export const meta = {
|
|
71
|
+
name: 'self-closing',
|
|
72
|
+
size: { width: 400, height: 200 }
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export default ({ tw }) => (
|
|
76
|
+
<div style={tw('flex flex-col items-center justify-center w-full h-full bg-gray-100 gap-4')}>
|
|
77
|
+
<div style={tw('w-32 h-32 bg-red-500 rounded-full')} />
|
|
78
|
+
<div style={tw('w-32 h-32 bg-blue-500 rounded-lg')} />
|
|
79
|
+
<div style={tw('w-32 h-32 bg-green-500')} />
|
|
80
|
+
</div>
|
|
81
|
+
);
|
|
82
|
+
`;
|
|
83
|
+
|
|
84
|
+
try {
|
|
85
|
+
const template3 = defineTemplateFromSource(selfClosing);
|
|
86
|
+
const png3 = await renderImage(template3, {});
|
|
87
|
+
console.log('✓ Self-closing tags work');
|
|
88
|
+
console.log(' PNG size:', png3.length, 'bytes\n');
|
|
89
|
+
} catch (error) {
|
|
90
|
+
console.error('✗ Self-closing tags failed:', error.message);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Test 4: Complex attributes
|
|
94
|
+
const complexAttrs = `
|
|
95
|
+
export const meta = {
|
|
96
|
+
name: 'complex-attrs',
|
|
97
|
+
size: { width: 500, height: 250 }
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export default ({ tw, title, count }) => (
|
|
101
|
+
<div style={tw('flex flex-col w-full h-full bg-gradient-to-br from-purple-600 to-pink-500 p-8')}>
|
|
102
|
+
<h1 style={tw('text-4xl font-bold text-white mb-4')}>{title}</h1>
|
|
103
|
+
<div style={tw('flex items-center gap-2')}>
|
|
104
|
+
<span style={tw('text-2xl text-white')}>Count:</span>
|
|
105
|
+
<span style={tw('text-3xl font-bold text-yellow-300')}>{count}</span>
|
|
106
|
+
</div>
|
|
107
|
+
</div>
|
|
108
|
+
);
|
|
109
|
+
`;
|
|
110
|
+
|
|
111
|
+
try {
|
|
112
|
+
const template4 = defineTemplateFromSource(complexAttrs);
|
|
113
|
+
const png4 = await renderImage(template4, { title: 'Complex JSX', count: 42 });
|
|
114
|
+
console.log('✓ Complex attributes work');
|
|
115
|
+
console.log(' PNG size:', png4.length, 'bytes\n');
|
|
116
|
+
} catch (error) {
|
|
117
|
+
console.error('✗ Complex attributes failed:', error.message);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
console.log('✅ All JSX tests completed!');
|