loopwind 0.17.0 → 0.18.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.
Files changed (352) hide show
  1. package/REGISTRY_SETUP.md +55 -1
  2. package/dist/commands/add.d.ts.map +1 -1
  3. package/dist/commands/add.js +3 -0
  4. package/dist/commands/add.js.map +1 -1
  5. package/dist/lib/installer.d.ts +8 -0
  6. package/dist/lib/installer.d.ts.map +1 -1
  7. package/dist/lib/installer.js +48 -1
  8. package/dist/lib/installer.js.map +1 -1
  9. package/dist/sdk/index.d.ts +2 -2
  10. package/dist/sdk/index.d.ts.map +1 -1
  11. package/dist/sdk/index.js +1 -1
  12. package/dist/sdk/index.js.map +1 -1
  13. package/dist/sdk/template.d.ts +133 -0
  14. package/dist/sdk/template.d.ts.map +1 -1
  15. package/dist/sdk/template.js +198 -0
  16. package/dist/sdk/template.js.map +1 -1
  17. package/examples/code-editor-templates.ts +173 -0
  18. package/examples/nextjs-template-import.ts +58 -0
  19. package/examples/visual-builder-templates.ts +336 -0
  20. package/package.json +1 -1
  21. package/test-sdk-user-templates.mjs +469 -0
  22. package/website/.astro/integrations/_inox-tools_astro-when/types.d.ts +1 -0
  23. package/website/.astro/types.d.ts +1 -0
  24. package/website/DEPLOYMENT.md +142 -0
  25. package/website/OG_IMAGES.md +141 -0
  26. package/website/astro.config.mjs +0 -2
  27. package/website/deploy.sh +19 -0
  28. package/website/dist/.gitkeep +1 -0
  29. package/website/dist/_astro/agents.Yx-L_igG.css +1 -0
  30. package/website/dist/_routes.json +30 -0
  31. package/website/dist/_worker.js/_@astrojs-ssr-adapter.mjs +1033 -0
  32. package/website/dist/_worker.js/_astro-internal_middleware.mjs +40 -0
  33. package/website/dist/_worker.js/chunks/abap_BTmsHiP5.mjs +1 -0
  34. package/website/dist/_worker.js/chunks/actionscript-3_DmBelb1E.mjs +1 -0
  35. package/website/dist/_worker.js/chunks/ada_8-E0ahCN.mjs +1 -0
  36. package/website/dist/_worker.js/chunks/andromeeda_XI-CXx50.mjs +1 -0
  37. package/website/dist/_worker.js/chunks/angular-html_DKGh3gGH.mjs +1 -0
  38. package/website/dist/_worker.js/chunks/angular-ts_-qZGsJoA.mjs +1 -0
  39. package/website/dist/_worker.js/chunks/apache_ijTUt0Ee.mjs +1 -0
  40. package/website/dist/_worker.js/chunks/apex_agu1c6Sh.mjs +1 -0
  41. package/website/dist/_worker.js/chunks/apl_Bj2f7Art.mjs +1 -0
  42. package/website/dist/_worker.js/chunks/applescript_B_vXrOh3.mjs +1 -0
  43. package/website/dist/_worker.js/chunks/ara_DCEQ2rnh.mjs +1 -0
  44. package/website/dist/_worker.js/chunks/asciidoc_CGN_EkYS.mjs +1 -0
  45. package/website/dist/_worker.js/chunks/asm_BBWZgnDp.mjs +1 -0
  46. package/website/dist/_worker.js/chunks/astro/assets-service_j52rQLzU.mjs +721 -0
  47. package/website/dist/_worker.js/chunks/astro/server_Y5_QHO8v.mjs +2401 -0
  48. package/website/dist/_worker.js/chunks/astro-designed-error-pages_BNTLO-TA.mjs +542 -0
  49. package/website/dist/_worker.js/chunks/astro_Dr_hht3h.mjs +1 -0
  50. package/website/dist/_worker.js/chunks/aurora-x_9GHG8nSq.mjs +1 -0
  51. package/website/dist/_worker.js/chunks/awk_DHRvhXot.mjs +1 -0
  52. package/website/dist/_worker.js/chunks/ayu-dark_CcvqmEHE.mjs +1 -0
  53. package/website/dist/_worker.js/chunks/ballerina_C7SdeSZb.mjs +1 -0
  54. package/website/dist/_worker.js/chunks/bat_Dv4A3u45.mjs +1 -0
  55. package/website/dist/_worker.js/chunks/beancount_BfPf9Luv.mjs +1 -0
  56. package/website/dist/_worker.js/chunks/berry_B8rfM3lL.mjs +1 -0
  57. package/website/dist/_worker.js/chunks/bibtex_TcjYgtJM.mjs +1 -0
  58. package/website/dist/_worker.js/chunks/bicep_CrlFWCdN.mjs +1 -0
  59. package/website/dist/_worker.js/chunks/blade_lanKVYID.mjs +1 -0
  60. package/website/dist/_worker.js/chunks/bsl_BhppzXMB.mjs +1 -0
  61. package/website/dist/_worker.js/chunks/c_6FBALJTK.mjs +1 -0
  62. package/website/dist/_worker.js/chunks/cadence_2txU9LVE.mjs +1 -0
  63. package/website/dist/_worker.js/chunks/cairo_BkrFAIlP.mjs +1 -0
  64. package/website/dist/_worker.js/chunks/catppuccin-frappe_CkEqIYhU.mjs +1 -0
  65. package/website/dist/_worker.js/chunks/catppuccin-latte_DG4Gx_-v.mjs +1 -0
  66. package/website/dist/_worker.js/chunks/catppuccin-macchiato_Cwi3vCXf.mjs +1 -0
  67. package/website/dist/_worker.js/chunks/catppuccin-mocha_L9_OPlFX.mjs +1 -0
  68. package/website/dist/_worker.js/chunks/clarity_BEAe4Ulu.mjs +1 -0
  69. package/website/dist/_worker.js/chunks/clojure_VnUX6p2g.mjs +1 -0
  70. package/website/dist/_worker.js/chunks/cmake_0-SGkZEj.mjs +1 -0
  71. package/website/dist/_worker.js/chunks/cobol_92M_KGaE.mjs +1 -0
  72. package/website/dist/_worker.js/chunks/codeowners_CzMwskBv.mjs +1 -0
  73. package/website/dist/_worker.js/chunks/codeql_DWJZNHv1.mjs +1 -0
  74. package/website/dist/_worker.js/chunks/coffee_CQjKU2fh.mjs +1 -0
  75. package/website/dist/_worker.js/chunks/common-lisp_BBLWDpS5.mjs +1 -0
  76. package/website/dist/_worker.js/chunks/coq_hedRFV3D.mjs +1 -0
  77. package/website/dist/_worker.js/chunks/cpp_DlS1i6Zs.mjs +1 -0
  78. package/website/dist/_worker.js/chunks/crystal_D6n65fKV.mjs +1 -0
  79. package/website/dist/_worker.js/chunks/csharp_C6FCVFzc.mjs +1 -0
  80. package/website/dist/_worker.js/chunks/css_C5uJEgmJ.mjs +1 -0
  81. package/website/dist/_worker.js/chunks/csv_CtMYuuJl.mjs +1 -0
  82. package/website/dist/_worker.js/chunks/cue_BsPexqx6.mjs +1 -0
  83. package/website/dist/_worker.js/chunks/cypher_apzf6OBi.mjs +1 -0
  84. package/website/dist/_worker.js/chunks/d_DcvIRcgm.mjs +1 -0
  85. package/website/dist/_worker.js/chunks/dark-plus_C01ONtzj.mjs +1 -0
  86. package/website/dist/_worker.js/chunks/dart_WkzM5WrV.mjs +1 -0
  87. package/website/dist/_worker.js/chunks/dax_DjXAO5V4.mjs +1 -0
  88. package/website/dist/_worker.js/chunks/desktop_C92LCxdc.mjs +1 -0
  89. package/website/dist/_worker.js/chunks/diff_CVwM_9XJ.mjs +1 -0
  90. package/website/dist/_worker.js/chunks/docker_DPzgJf6Z.mjs +1 -0
  91. package/website/dist/_worker.js/chunks/dotenv_D_vgANvA.mjs +1 -0
  92. package/website/dist/_worker.js/chunks/dracula-soft_CLnUBwFm.mjs +1 -0
  93. package/website/dist/_worker.js/chunks/dracula_lBVpb6Lb.mjs +1 -0
  94. package/website/dist/_worker.js/chunks/dream-maker_DTLbzd_J.mjs +1 -0
  95. package/website/dist/_worker.js/chunks/edge_i54JYm3_.mjs +1 -0
  96. package/website/dist/_worker.js/chunks/elixir_BJCIjTu4.mjs +1 -0
  97. package/website/dist/_worker.js/chunks/elm_BbXD39-_.mjs +1 -0
  98. package/website/dist/_worker.js/chunks/emacs-lisp_pxa5cXaN.mjs +1 -0
  99. package/website/dist/_worker.js/chunks/erb_Ccjijeee.mjs +1 -0
  100. package/website/dist/_worker.js/chunks/erlang_B2VM_hi7.mjs +1 -0
  101. package/website/dist/_worker.js/chunks/everforest-dark_BxvIPBim.mjs +1 -0
  102. package/website/dist/_worker.js/chunks/everforest-light_B7VoyaJM.mjs +1 -0
  103. package/website/dist/_worker.js/chunks/fennel_D-uo7X6c.mjs +1 -0
  104. package/website/dist/_worker.js/chunks/fish_BjePoK3m.mjs +1 -0
  105. package/website/dist/_worker.js/chunks/fluent_C8fgkzLX.mjs +1 -0
  106. package/website/dist/_worker.js/chunks/fortran-fixed-form_D1pu5zrc.mjs +1 -0
  107. package/website/dist/_worker.js/chunks/fortran-free-form_CSGOhJD6.mjs +1 -0
  108. package/website/dist/_worker.js/chunks/fsharp_B0xy-A4Y.mjs +1 -0
  109. package/website/dist/_worker.js/chunks/gdresource_CWppjlHq.mjs +1 -0
  110. package/website/dist/_worker.js/chunks/gdscript_eQCHchcS.mjs +1 -0
  111. package/website/dist/_worker.js/chunks/gdshader_C4kxepX7.mjs +1 -0
  112. package/website/dist/_worker.js/chunks/genie_ACtQLcDW.mjs +1 -0
  113. package/website/dist/_worker.js/chunks/gherkin_BFp2uKUd.mjs +1 -0
  114. package/website/dist/_worker.js/chunks/git-commit_CLg9ZwMV.mjs +1 -0
  115. package/website/dist/_worker.js/chunks/git-rebase_DG8A80Nt.mjs +1 -0
  116. package/website/dist/_worker.js/chunks/github-dark-default_BI0EP2Kv.mjs +1 -0
  117. package/website/dist/_worker.js/chunks/github-dark-dimmed_a_NIC0Xb.mjs +1 -0
  118. package/website/dist/_worker.js/chunks/github-dark-high-contrast_jZGqT7hk.mjs +1 -0
  119. package/website/dist/_worker.js/chunks/github-dark_CHCDNd2O.mjs +1 -0
  120. package/website/dist/_worker.js/chunks/github-light-default_DRbOW5RG.mjs +1 -0
  121. package/website/dist/_worker.js/chunks/github-light-high-contrast_tn_kWutM.mjs +1 -0
  122. package/website/dist/_worker.js/chunks/github-light_D9brYzot.mjs +1 -0
  123. package/website/dist/_worker.js/chunks/gleam_Dmhu1oxW.mjs +1 -0
  124. package/website/dist/_worker.js/chunks/glimmer-js_BfZbXy8A.mjs +1 -0
  125. package/website/dist/_worker.js/chunks/glimmer-ts_B9QVICrD.mjs +1 -0
  126. package/website/dist/_worker.js/chunks/glsl_DD2PPwOs.mjs +1 -0
  127. package/website/dist/_worker.js/chunks/gnuplot_D2OYChUX.mjs +1 -0
  128. package/website/dist/_worker.js/chunks/go_DYGFTe3h.mjs +1 -0
  129. package/website/dist/_worker.js/chunks/graphql_B7XsT3nH.mjs +1 -0
  130. package/website/dist/_worker.js/chunks/groovy_BO12Uwkl.mjs +1 -0
  131. package/website/dist/_worker.js/chunks/hack_CB2_ztCP.mjs +1 -0
  132. package/website/dist/_worker.js/chunks/haml_CyfDcDD3.mjs +1 -0
  133. package/website/dist/_worker.js/chunks/handlebars_CfpxpWm2.mjs +1 -0
  134. package/website/dist/_worker.js/chunks/haskell_jUeC5uN5.mjs +1 -0
  135. package/website/dist/_worker.js/chunks/haxe_B6GxP1WB.mjs +1 -0
  136. package/website/dist/_worker.js/chunks/hcl_DwoHV2oh.mjs +1 -0
  137. package/website/dist/_worker.js/chunks/hjson_DV7cJRk4.mjs +1 -0
  138. package/website/dist/_worker.js/chunks/hlsl_BlFCscPI.mjs +1 -0
  139. package/website/dist/_worker.js/chunks/houston_COBFG1Mx.mjs +1 -0
  140. package/website/dist/_worker.js/chunks/html-derivative_C9pJ337h.mjs +1 -0
  141. package/website/dist/_worker.js/chunks/html_D1OkrZS5.mjs +1 -0
  142. package/website/dist/_worker.js/chunks/http_DIGXRqvJ.mjs +1 -0
  143. package/website/dist/_worker.js/chunks/hxml_DEwh9i-c.mjs +1 -0
  144. package/website/dist/_worker.js/chunks/hy_DDoIgW1K.mjs +1 -0
  145. package/website/dist/_worker.js/chunks/imba_B00zbHo4.mjs +1 -0
  146. package/website/dist/_worker.js/chunks/index_C1UTDwYg.mjs +1861 -0
  147. package/website/dist/_worker.js/chunks/ini_D7XQA_p8.mjs +1 -0
  148. package/website/dist/_worker.js/chunks/java_B9wdFd8K.mjs +1 -0
  149. package/website/dist/_worker.js/chunks/javascript_CLsPGOON.mjs +1 -0
  150. package/website/dist/_worker.js/chunks/jinja_jarBCAN1.mjs +1 -0
  151. package/website/dist/_worker.js/chunks/jison_oGg3J708.mjs +1 -0
  152. package/website/dist/_worker.js/chunks/json5_DlZ1Kyaa.mjs +1 -0
  153. package/website/dist/_worker.js/chunks/json_DaYk_FMp.mjs +1 -0
  154. package/website/dist/_worker.js/chunks/jsonc_DlwgfSDs.mjs +1 -0
  155. package/website/dist/_worker.js/chunks/jsonl_BbCCVaZF.mjs +1 -0
  156. package/website/dist/_worker.js/chunks/jsonnet_Dt-G75xe.mjs +1 -0
  157. package/website/dist/_worker.js/chunks/jssm_BtKFTj2A.mjs +1 -0
  158. package/website/dist/_worker.js/chunks/jsx_DDx_xAZ8.mjs +1 -0
  159. package/website/dist/_worker.js/chunks/julia_CK0lv68l.mjs +1 -0
  160. package/website/dist/_worker.js/chunks/kanagawa-dragon_BldAK3Oo.mjs +1 -0
  161. package/website/dist/_worker.js/chunks/kanagawa-lotus_DVM8FX9_.mjs +1 -0
  162. package/website/dist/_worker.js/chunks/kanagawa-wave_Dpih0AKP.mjs +1 -0
  163. package/website/dist/_worker.js/chunks/kotlin_kWneB9V_.mjs +1 -0
  164. package/website/dist/_worker.js/chunks/kusto_BKVATd95.mjs +1 -0
  165. package/website/dist/_worker.js/chunks/laserwave_BqatxsVl.mjs +1 -0
  166. package/website/dist/_worker.js/chunks/latex_LVDcGBbc.mjs +1 -0
  167. package/website/dist/_worker.js/chunks/lean_W7qo-5M2.mjs +1 -0
  168. package/website/dist/_worker.js/chunks/less_DFNwJnBH.mjs +1 -0
  169. package/website/dist/_worker.js/chunks/light-plus_Dp0AoWsO.mjs +1 -0
  170. package/website/dist/_worker.js/chunks/liquid_D24qs0pc.mjs +1 -0
  171. package/website/dist/_worker.js/chunks/log_IPWMXriF.mjs +1 -0
  172. package/website/dist/_worker.js/chunks/logo_C6KaatrQ.mjs +1 -0
  173. package/website/dist/_worker.js/chunks/lua_CwnEf-T7.mjs +1 -0
  174. package/website/dist/_worker.js/chunks/luau_Br3-CXjS.mjs +1 -0
  175. package/website/dist/_worker.js/chunks/make_UBNG-kOo.mjs +1 -0
  176. package/website/dist/_worker.js/chunks/markdown_C7mhJFCm.mjs +1 -0
  177. package/website/dist/_worker.js/chunks/marko_4tchUvI7.mjs +1 -0
  178. package/website/dist/_worker.js/chunks/material-theme-darker_SKtaNEPn.mjs +1 -0
  179. package/website/dist/_worker.js/chunks/material-theme-lighter_zOX_DZCH.mjs +1 -0
  180. package/website/dist/_worker.js/chunks/material-theme-ocean_BN9WbhdC.mjs +1 -0
  181. package/website/dist/_worker.js/chunks/material-theme-palenight_DT_covjH.mjs +1 -0
  182. package/website/dist/_worker.js/chunks/material-theme_6RpeM3kc.mjs +1 -0
  183. package/website/dist/_worker.js/chunks/matlab_DCOXsPKR.mjs +1 -0
  184. package/website/dist/_worker.js/chunks/mdc_B9gb2UFP.mjs +1 -0
  185. package/website/dist/_worker.js/chunks/mdx_DGU7Nu9u.mjs +1 -0
  186. package/website/dist/_worker.js/chunks/mermaid_B69URzsZ.mjs +1 -0
  187. package/website/dist/_worker.js/chunks/min-dark_BgxifOMI.mjs +1 -0
  188. package/website/dist/_worker.js/chunks/min-light_BrPjXxUp.mjs +1 -0
  189. package/website/dist/_worker.js/chunks/mipsasm_9U-4_t7k.mjs +1 -0
  190. package/website/dist/_worker.js/chunks/mojo_B0wt7ug3.mjs +1 -0
  191. package/website/dist/_worker.js/chunks/monokai_B6Pxpoyi.mjs +1 -0
  192. package/website/dist/_worker.js/chunks/move_1eid4CyR.mjs +1 -0
  193. package/website/dist/_worker.js/chunks/narrat_Ds6-p5JZ.mjs +1 -0
  194. package/website/dist/_worker.js/chunks/nextflow_v2N1Qlqa.mjs +1 -0
  195. package/website/dist/_worker.js/chunks/nginx_Bp9Ab2NH.mjs +1 -0
  196. package/website/dist/_worker.js/chunks/night-owl_CdwOw_sc.mjs +1 -0
  197. package/website/dist/_worker.js/chunks/nim_BXGDUe53.mjs +1 -0
  198. package/website/dist/_worker.js/chunks/nix_CUig1nJH.mjs +1 -0
  199. package/website/dist/_worker.js/chunks/noop-middleware_DlWGj5t5.mjs +10 -0
  200. package/website/dist/_worker.js/chunks/nord_SPoG1iae.mjs +1 -0
  201. package/website/dist/_worker.js/chunks/nushell_DJw1Lca8.mjs +1 -0
  202. package/website/dist/_worker.js/chunks/objective-c_Bktzl_CO.mjs +1 -0
  203. package/website/dist/_worker.js/chunks/objective-cpp_CP4DWdDp.mjs +1 -0
  204. package/website/dist/_worker.js/chunks/ocaml_CeEAs7bZ.mjs +1 -0
  205. package/website/dist/_worker.js/chunks/one-dark-pro_-hIwCNMi.mjs +1 -0
  206. package/website/dist/_worker.js/chunks/one-light_DSmYvJ05.mjs +1 -0
  207. package/website/dist/_worker.js/chunks/pascal_C-S_Ms_o.mjs +1 -0
  208. package/website/dist/_worker.js/chunks/perl_CKamvo15.mjs +1 -0
  209. package/website/dist/_worker.js/chunks/php_BlmcX_F3.mjs +1 -0
  210. package/website/dist/_worker.js/chunks/plastic_Ryt8tVoA.mjs +1 -0
  211. package/website/dist/_worker.js/chunks/plsql_Cb3v7cBj.mjs +1 -0
  212. package/website/dist/_worker.js/chunks/po_DZbdNRlo.mjs +1 -0
  213. package/website/dist/_worker.js/chunks/poimandres_bYmE3_5d.mjs +1 -0
  214. package/website/dist/_worker.js/chunks/polar_pJkMGwoW.mjs +1 -0
  215. package/website/dist/_worker.js/chunks/postcss_BAXSOKgk.mjs +1 -0
  216. package/website/dist/_worker.js/chunks/powerquery_oITMGN4x.mjs +1 -0
  217. package/website/dist/_worker.js/chunks/powershell_6306-xIF.mjs +1 -0
  218. package/website/dist/_worker.js/chunks/prisma_DSDxnZGz.mjs +1 -0
  219. package/website/dist/_worker.js/chunks/prolog_CxG7tjZR.mjs +1 -0
  220. package/website/dist/_worker.js/chunks/proto_CS9ByXm1.mjs +1 -0
  221. package/website/dist/_worker.js/chunks/pug_BMtLJo6U.mjs +1 -0
  222. package/website/dist/_worker.js/chunks/puppet_BfeeSzee.mjs +1 -0
  223. package/website/dist/_worker.js/chunks/purescript_BFfueNaH.mjs +1 -0
  224. package/website/dist/_worker.js/chunks/python_Cc4Faapv.mjs +1 -0
  225. package/website/dist/_worker.js/chunks/qml_C1CTJTK8.mjs +1 -0
  226. package/website/dist/_worker.js/chunks/qmldir_nG1KaqKR.mjs +1 -0
  227. package/website/dist/_worker.js/chunks/qss_Cncxk263.mjs +1 -0
  228. package/website/dist/_worker.js/chunks/r_ChR54Ihi.mjs +1 -0
  229. package/website/dist/_worker.js/chunks/racket_BDrhptDs.mjs +1 -0
  230. package/website/dist/_worker.js/chunks/raku_07OUHa0P.mjs +1 -0
  231. package/website/dist/_worker.js/chunks/razor_DIP3INLa.mjs +1 -0
  232. package/website/dist/_worker.js/chunks/red_DOPXfj-6.mjs +1 -0
  233. package/website/dist/_worker.js/chunks/reg_B64SwEDj.mjs +1 -0
  234. package/website/dist/_worker.js/chunks/regexp_ButFGoB5.mjs +1 -0
  235. package/website/dist/_worker.js/chunks/rel_BWJAWqZD.mjs +1 -0
  236. package/website/dist/_worker.js/chunks/riscv_79gXlbsF.mjs +1 -0
  237. package/website/dist/_worker.js/chunks/rose-pine-dawn_DHIjVGd3.mjs +1 -0
  238. package/website/dist/_worker.js/chunks/rose-pine-moon_t86aEbs0.mjs +1 -0
  239. package/website/dist/_worker.js/chunks/rose-pine_BHgrcDCs.mjs +1 -0
  240. package/website/dist/_worker.js/chunks/rst_D3F4Fcpj.mjs +1 -0
  241. package/website/dist/_worker.js/chunks/ruby_Cs7vM9iv.mjs +1 -0
  242. package/website/dist/_worker.js/chunks/rust_DpyRVatH.mjs +1 -0
  243. package/website/dist/_worker.js/chunks/sas_DW45xZXN.mjs +1 -0
  244. package/website/dist/_worker.js/chunks/sass_C6SiMwN_.mjs +1 -0
  245. package/website/dist/_worker.js/chunks/scala_DlZOjNZk.mjs +1 -0
  246. package/website/dist/_worker.js/chunks/scheme_D2ezSJXu.mjs +1 -0
  247. package/website/dist/_worker.js/chunks/scss_DG5Spjqu.mjs +1 -0
  248. package/website/dist/_worker.js/chunks/sdbl_ZCYaj4VN.mjs +1 -0
  249. package/website/dist/_worker.js/chunks/shaderlab_CAcRkg1_.mjs +1 -0
  250. package/website/dist/_worker.js/chunks/shellscript_BWwhkDVh.mjs +1 -0
  251. package/website/dist/_worker.js/chunks/shellsession_BfEA3juK.mjs +1 -0
  252. package/website/dist/_worker.js/chunks/slack-dark_CL3lSpCc.mjs +1 -0
  253. package/website/dist/_worker.js/chunks/slack-ochin_DdZKOQVh.mjs +1 -0
  254. package/website/dist/_worker.js/chunks/smalltalk_DgilzSui.mjs +1 -0
  255. package/website/dist/_worker.js/chunks/snazzy-light_eJU08Pz_.mjs +1 -0
  256. package/website/dist/_worker.js/chunks/solarized-dark_Dg_YQywx.mjs +1 -0
  257. package/website/dist/_worker.js/chunks/solarized-light_BnIsrA6p.mjs +1 -0
  258. package/website/dist/_worker.js/chunks/solidity_DkseH8pQ.mjs +1 -0
  259. package/website/dist/_worker.js/chunks/soy_DU7bOYoG.mjs +1 -0
  260. package/website/dist/_worker.js/chunks/sparql_BuI1DBDH.mjs +1 -0
  261. package/website/dist/_worker.js/chunks/splunk_B8Ha9Pkg.mjs +1 -0
  262. package/website/dist/_worker.js/chunks/sql_BniHwea5.mjs +1 -0
  263. package/website/dist/_worker.js/chunks/ssh-config_CkE1GuVe.mjs +1 -0
  264. package/website/dist/_worker.js/chunks/stata_Dtqpbd_l.mjs +1 -0
  265. package/website/dist/_worker.js/chunks/stylus_CXTtglzO.mjs +1 -0
  266. package/website/dist/_worker.js/chunks/svelte_BjWYcUCN.mjs +1 -0
  267. package/website/dist/_worker.js/chunks/swift_BzHql_rM.mjs +1 -0
  268. package/website/dist/_worker.js/chunks/synthwave-84_DLRNhxNA.mjs +1 -0
  269. package/website/dist/_worker.js/chunks/system-verilog_ChyInPph.mjs +1 -0
  270. package/website/dist/_worker.js/chunks/systemd_Bi9Qa2qD.mjs +1 -0
  271. package/website/dist/_worker.js/chunks/talonscript_B3sH_Y-V.mjs +1 -0
  272. package/website/dist/_worker.js/chunks/tasl_BJ5yipRs.mjs +1 -0
  273. package/website/dist/_worker.js/chunks/tcl_CoJQjNoP.mjs +1 -0
  274. package/website/dist/_worker.js/chunks/templ_CrU7Ffil.mjs +1 -0
  275. package/website/dist/_worker.js/chunks/terraform_DT9JSFpC.mjs +1 -0
  276. package/website/dist/_worker.js/chunks/tex_5PKu2yA0.mjs +1 -0
  277. package/website/dist/_worker.js/chunks/tokyo-night_Buo8OK7-.mjs +1 -0
  278. package/website/dist/_worker.js/chunks/toml_CPuXX3oc.mjs +1 -0
  279. package/website/dist/_worker.js/chunks/ts-tags_D0M_1VSH.mjs +1 -0
  280. package/website/dist/_worker.js/chunks/tsv_CuivVNot.mjs +1 -0
  281. package/website/dist/_worker.js/chunks/tsx_MkuGr8MY.mjs +1 -0
  282. package/website/dist/_worker.js/chunks/turtle_BqgEPK7f.mjs +1 -0
  283. package/website/dist/_worker.js/chunks/twig_r1G9rpYJ.mjs +1 -0
  284. package/website/dist/_worker.js/chunks/typescript_Au5buqzM.mjs +1 -0
  285. package/website/dist/_worker.js/chunks/typespec_47rhBK_z.mjs +1 -0
  286. package/website/dist/_worker.js/chunks/typst_BAtuQLh-.mjs +1 -0
  287. package/website/dist/_worker.js/chunks/v_BIvWImHg.mjs +1 -0
  288. package/website/dist/_worker.js/chunks/vala_DYEacj30.mjs +1 -0
  289. package/website/dist/_worker.js/chunks/vb_CikQuqGJ.mjs +1 -0
  290. package/website/dist/_worker.js/chunks/verilog_BQRENwI-.mjs +1 -0
  291. package/website/dist/_worker.js/chunks/vesper_DA0kvTmj.mjs +1 -0
  292. package/website/dist/_worker.js/chunks/vhdl_DHscJIyg.mjs +1 -0
  293. package/website/dist/_worker.js/chunks/viml_F2pvMwvG.mjs +1 -0
  294. package/website/dist/_worker.js/chunks/vitesse-black_D9tjNzd0.mjs +1 -0
  295. package/website/dist/_worker.js/chunks/vitesse-dark_Bnm5d0hd.mjs +1 -0
  296. package/website/dist/_worker.js/chunks/vitesse-light_CHwbyjNR.mjs +1 -0
  297. package/website/dist/_worker.js/chunks/vue-html_DyYtbbMK.mjs +1 -0
  298. package/website/dist/_worker.js/chunks/vue_DofN6juy.mjs +1 -0
  299. package/website/dist/_worker.js/chunks/vyper_CiR0m-OV.mjs +1 -0
  300. package/website/dist/_worker.js/chunks/wasm_CwIGgRGf.mjs +1 -0
  301. package/website/dist/_worker.js/chunks/wasm_jKWhg0J0.mjs +1 -0
  302. package/website/dist/_worker.js/chunks/wenyan_DKvVZKXW.mjs +1 -0
  303. package/website/dist/_worker.js/chunks/wgsl_BOWZY7yw.mjs +1 -0
  304. package/website/dist/_worker.js/chunks/wikitext_CXDhhHPy.mjs +1 -0
  305. package/website/dist/_worker.js/chunks/wolfram_ChkmGnW0.mjs +1 -0
  306. package/website/dist/_worker.js/chunks/xml_DXH3hHIu.mjs +1 -0
  307. package/website/dist/_worker.js/chunks/xsl_DuP2mFjg.mjs +1 -0
  308. package/website/dist/_worker.js/chunks/yaml_IGiEkTge.mjs +1 -0
  309. package/website/dist/_worker.js/chunks/zenscript_59iXGyNw.mjs +1 -0
  310. package/website/dist/_worker.js/chunks/zig_DKzb0zdT.mjs +1 -0
  311. package/website/dist/_worker.js/index.js +53 -0
  312. package/website/dist/_worker.js/manifest_BAAoOzaU.mjs +98 -0
  313. package/website/dist/_worker.js/pages/_image.astro.mjs +24 -0
  314. package/website/dist/_worker.js/pages/agents.astro.mjs +1 -0
  315. package/website/dist/_worker.js/pages/animation.astro.mjs +1 -0
  316. package/website/dist/_worker.js/pages/api/raw-markdown/_---path_.astro.mjs +44 -0
  317. package/website/dist/_worker.js/pages/config.astro.mjs +1 -0
  318. package/website/dist/_worker.js/pages/fonts.astro.mjs +1 -0
  319. package/website/dist/_worker.js/pages/getting-started.astro.mjs +1 -0
  320. package/website/dist/_worker.js/pages/helpers.astro.mjs +1 -0
  321. package/website/dist/_worker.js/pages/images.astro.mjs +1 -0
  322. package/website/dist/_worker.js/pages/index.astro.mjs +1 -0
  323. package/website/dist/_worker.js/pages/llm.txt.astro.mjs +1 -0
  324. package/website/dist/_worker.js/pages/preview.astro.mjs +1 -0
  325. package/website/dist/_worker.js/pages/sdk.astro.mjs +1 -0
  326. package/website/dist/_worker.js/pages/sitemap.xml.astro.mjs +1 -0
  327. package/website/dist/_worker.js/pages/styling.astro.mjs +1 -0
  328. package/website/dist/_worker.js/pages/templates.astro.mjs +1 -0
  329. package/website/dist/_worker.js/pages/video.astro.mjs +1 -0
  330. package/website/dist/_worker.js/renderers.mjs +57 -0
  331. package/website/dist/agents/index.html +3 -2
  332. package/website/dist/animation/index.html +402 -128
  333. package/website/dist/config/index.html +184 -0
  334. package/website/dist/fonts/index.html +56 -52
  335. package/website/dist/getting-started/index.html +107 -0
  336. package/website/dist/helpers/index.html +8 -8
  337. package/website/dist/images/index.html +50 -23
  338. package/website/dist/index.html +114 -148
  339. package/website/dist/llm.txt +751 -1055
  340. package/website/dist/preview/index.html +111 -0
  341. package/website/dist/robots.txt +35 -0
  342. package/website/dist/sdk/index.html +390 -52
  343. package/website/dist/sitemap.xml +76 -0
  344. package/website/dist/styling/index.html +10 -7
  345. package/website/dist/templates/index.html +11 -59
  346. package/website/dist/video/index.html +106 -537
  347. package/website/package.json +1 -5
  348. package/website/public/.assetsignore +3 -0
  349. package/website/public/.gitkeep +0 -1
  350. package/website/templates/og-image.tsx +61 -0
  351. package/website/wrangler.toml +12 -0
  352. package/website/dist/_astro/agents.I1-fN38o.css +0 -1
@@ -0,0 +1,173 @@
1
+ /**
2
+ * Example: Code Editor - User-created templates from source strings
3
+ *
4
+ * Use case: Building a code editor where users write template code
5
+ * directly as strings (e.g., Monaco Editor, CodeMirror).
6
+ *
7
+ * ⚠️ SECURITY WARNING:
8
+ * Only use defineTemplateFromSource() with TRUSTED sources!
9
+ * It evaluates code using new Function() which can execute arbitrary code.
10
+ * Never pass untrusted user input directly.
11
+ */
12
+
13
+ import { defineTemplateFromSource, renderImage, renderVideo } from 'loopwind/sdk';
14
+ import fs from 'fs/promises';
15
+
16
+ // Example 1: Simple image template from string
17
+ const imageTemplateSource = `
18
+ export const meta = {
19
+ name: 'user-card',
20
+ type: 'image',
21
+ size: { width: 1200, height: 630 }
22
+ };
23
+
24
+ export default ({ tw, title, description }) => {
25
+ const h = React.createElement;
26
+ return h('div', {
27
+ style: tw('flex flex-col w-full h-full bg-gradient-to-br from-blue-600 to-purple-700 p-12 justify-between')
28
+ },
29
+ h('div', { style: tw('flex items-center gap-4') },
30
+ h('div', { style: tw('w-16 h-16 rounded-full bg-white/20') })
31
+ ),
32
+ h('div', null,
33
+ h('h1', { style: tw('text-6xl font-bold text-white mb-4') }, title),
34
+ h('p', { style: tw('text-2xl text-white/80') }, description)
35
+ )
36
+ );
37
+ };
38
+ `;
39
+
40
+ async function renderUserTemplate() {
41
+ // Create template from source string
42
+ const template = defineTemplateFromSource(imageTemplateSource, {
43
+ config: {
44
+ colors: {
45
+ primary: '#3b82f6',
46
+ background: '#ffffff',
47
+ },
48
+ },
49
+ });
50
+
51
+ // Render with user props
52
+ const png = await renderImage(template, {
53
+ title: 'User Created Template',
54
+ description: 'Built with code editor',
55
+ });
56
+
57
+ await fs.writeFile('user-card.png', png);
58
+ console.log('✓ Rendered user-card.png');
59
+ }
60
+
61
+ // Example 2: Video template from string
62
+ const videoTemplateSource = `
63
+ export const meta = {
64
+ name: 'intro-animation',
65
+ type: 'video',
66
+ size: { width: 1920, height: 1080 },
67
+ video: { fps: 30, duration: 3 }
68
+ };
69
+
70
+ export default ({ tw, progress, title }) => {
71
+ const h = React.createElement;
72
+
73
+ // Fade in animation
74
+ const opacity = progress < 0.5 ? progress / 0.5 : 1;
75
+ const scale = 0.8 + (opacity * 0.2);
76
+
77
+ return h('div', {
78
+ style: tw('flex items-center justify-center w-full h-full bg-black')
79
+ },
80
+ h('h1', {
81
+ style: {
82
+ ...tw('text-8xl font-bold text-white'),
83
+ opacity,
84
+ transform: \`scale(\${scale})\`
85
+ }
86
+ }, title)
87
+ );
88
+ };
89
+ `;
90
+
91
+ async function renderVideoTemplate() {
92
+ const template = defineTemplateFromSource(videoTemplateSource);
93
+
94
+ const mp4 = await renderVideo(template, {
95
+ title: 'Hello World',
96
+ });
97
+
98
+ await fs.writeFile('intro-animation.mp4', mp4);
99
+ console.log('✓ Rendered intro-animation.mp4');
100
+ }
101
+
102
+ // Example 3: Database-stored template
103
+ // This simulates loading templates from a database
104
+ interface StoredTemplate {
105
+ id: string;
106
+ name: string;
107
+ source: string;
108
+ config?: any;
109
+ }
110
+
111
+ const templatesDB: StoredTemplate[] = [
112
+ {
113
+ id: 'og-1',
114
+ name: 'Blog OG Image',
115
+ source: `
116
+ export const meta = {
117
+ name: 'blog-og',
118
+ type: 'image',
119
+ size: { width: 1200, height: 630 }
120
+ };
121
+
122
+ export default ({ tw, title, author }) => {
123
+ const h = React.createElement;
124
+ return h('div', {
125
+ style: tw('flex flex-col w-full h-full bg-white p-12 justify-center')
126
+ },
127
+ h('h1', { style: tw('text-6xl font-bold text-gray-900 mb-4') }, title),
128
+ h('p', { style: tw('text-2xl text-gray-600') }, 'By ' + author)
129
+ );
130
+ };
131
+ `,
132
+ config: {
133
+ colors: {
134
+ primary: '#1f2937',
135
+ background: '#ffffff',
136
+ },
137
+ },
138
+ },
139
+ ];
140
+
141
+ async function renderFromDatabase(templateId: string, props: any) {
142
+ // Fetch template from "database"
143
+ const stored = templatesDB.find((t) => t.id === templateId);
144
+ if (!stored) {
145
+ throw new Error('Template not found');
146
+ }
147
+
148
+ // Create template from stored source
149
+ const template = defineTemplateFromSource(stored.source, {
150
+ config: stored.config,
151
+ });
152
+
153
+ // Render
154
+ const png = await renderImage(template, props);
155
+ await fs.writeFile(`${stored.id}.png`, png);
156
+ console.log(`✓ Rendered ${stored.id}.png`);
157
+ }
158
+
159
+ // Run examples
160
+ async function main() {
161
+ console.log('Code Editor Examples\n');
162
+
163
+ await renderUserTemplate();
164
+ await renderVideoTemplate();
165
+ await renderFromDatabase('og-1', {
166
+ title: 'Building a Template Editor',
167
+ author: 'John Doe',
168
+ });
169
+
170
+ console.log('\n✅ All code editor examples completed!');
171
+ }
172
+
173
+ main().catch(console.error);
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Example: Importing template files in Next.js API routes
3
+ *
4
+ * This demonstrates how to reuse _loopwind/templates/ files
5
+ * in your SDK code with Next.js (or any other bundler)
6
+ */
7
+
8
+ import type { NextApiRequest, NextApiResponse } from 'next';
9
+ import { defineTemplateFromFile, renderVideo } from 'loopwind/sdk';
10
+
11
+ // Import your template file (Next.js/bundler handles TSX automatically)
12
+ import * as videoIntroTemplate from '../../_loopwind/templates/video-intro/template';
13
+
14
+ // Create SDK template from file with custom config
15
+ const template = defineTemplateFromFile(videoIntroTemplate, {
16
+ config: {
17
+ colors: {
18
+ primary: '#ff0000', // Override gradient colors
19
+ 'indigo-900': '#1a0033',
20
+ },
21
+ },
22
+ });
23
+
24
+ export default async function handler(
25
+ req: NextApiRequest,
26
+ res: NextApiResponse
27
+ ) {
28
+ const { version = '1.0.0', changes } = req.query;
29
+
30
+ // Parse changes from query param (comma-separated)
31
+ const changeList = typeof changes === 'string'
32
+ ? changes.split(',').map(c => c.trim())
33
+ : undefined;
34
+
35
+ // Render video using imported template
36
+ const mp4 = await renderVideo(template, {
37
+ version: String(version),
38
+ changes: changeList,
39
+ });
40
+
41
+ res.setHeader('Content-Type', 'video/mp4');
42
+ res.setHeader('Cache-Control', 's-maxage=3600, stale-while-revalidate');
43
+ res.send(mp4);
44
+ }
45
+
46
+ /**
47
+ * Usage:
48
+ *
49
+ * GET /api/release-video?version=2.0.0&changes=New%20feature,Bug%20fix,Performance
50
+ *
51
+ * Returns: MP4 video with version 2.0.0 and custom changes list
52
+ *
53
+ * Benefits:
54
+ * - Reuse CLI templates in API
55
+ * - Override config for custom branding
56
+ * - Type-safe with TypeScript
57
+ * - No duplicate template code
58
+ */
@@ -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.17.0",
3
+ "version": "0.18.0",
4
4
  "description": "A CLI tool for AI code agents and developers for generating images and videos.",
5
5
  "type": "module",
6
6
  "bin": {