loopwind 0.22.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.
Files changed (486) hide show
  1. package/README.md +13 -117
  2. package/dist/cli.js +16 -10
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/add.d.ts.map +1 -1
  5. package/dist/commands/add.js +6 -10
  6. package/dist/commands/add.js.map +1 -1
  7. package/dist/commands/agent.d.ts +8 -0
  8. package/dist/commands/agent.d.ts.map +1 -0
  9. package/dist/commands/agent.js +101 -0
  10. package/dist/commands/agent.js.map +1 -0
  11. package/dist/commands/init.d.ts.map +1 -1
  12. package/dist/commands/init.js +17 -7
  13. package/dist/commands/init.js.map +1 -1
  14. package/dist/commands/render.d.ts.map +1 -1
  15. package/dist/commands/render.js +17 -19
  16. package/dist/commands/render.js.map +1 -1
  17. package/dist/default-templates/AGENTS.md +10 -24
  18. package/dist/lib/config.d.ts +2 -3
  19. package/dist/lib/config.d.ts.map +1 -1
  20. package/dist/lib/config.js +4 -9
  21. package/dist/lib/config.js.map +1 -1
  22. package/dist/lib/constants.d.ts +1 -3
  23. package/dist/lib/constants.d.ts.map +1 -1
  24. package/dist/lib/constants.js +2 -4
  25. package/dist/lib/constants.js.map +1 -1
  26. package/dist/lib/installer.d.ts +2 -0
  27. package/dist/lib/installer.d.ts.map +1 -1
  28. package/dist/lib/installer.js +6 -7
  29. package/dist/lib/installer.js.map +1 -1
  30. package/dist/lib/renderer.d.ts.map +1 -1
  31. package/dist/lib/renderer.js +14 -8
  32. package/dist/lib/renderer.js.map +1 -1
  33. package/dist/lib/resvg-init.d.ts +15 -0
  34. package/dist/lib/resvg-init.d.ts.map +1 -0
  35. package/dist/lib/resvg-init.js +55 -0
  36. package/dist/lib/resvg-init.js.map +1 -0
  37. package/dist/lib/tailwind/colors.d.ts +8 -0
  38. package/dist/lib/tailwind/colors.d.ts.map +1 -0
  39. package/dist/lib/tailwind/colors.js +102 -0
  40. package/dist/lib/tailwind/colors.js.map +1 -0
  41. package/dist/lib/tailwind/index.d.ts +10 -0
  42. package/dist/lib/tailwind/index.d.ts.map +1 -0
  43. package/dist/lib/tailwind/index.js +9 -0
  44. package/dist/lib/tailwind/index.js.map +1 -0
  45. package/dist/lib/tailwind/resolvers.d.ts +28 -0
  46. package/dist/lib/tailwind/resolvers.d.ts.map +1 -0
  47. package/dist/lib/tailwind/resolvers.js +94 -0
  48. package/dist/lib/tailwind/resolvers.js.map +1 -0
  49. package/dist/lib/tailwind/types.d.ts +29 -0
  50. package/dist/lib/tailwind/types.d.ts.map +1 -0
  51. package/dist/lib/tailwind/types.js +8 -0
  52. package/dist/lib/tailwind/types.js.map +1 -0
  53. package/dist/lib/tailwind-config-loader.d.ts +8 -45
  54. package/dist/lib/tailwind-config-loader.d.ts.map +1 -1
  55. package/dist/lib/tailwind-config-loader.js +6 -429
  56. package/dist/lib/tailwind-config-loader.js.map +1 -1
  57. package/dist/lib/tailwind.d.ts +1 -1
  58. package/dist/lib/tailwind.d.ts.map +1 -1
  59. package/dist/lib/tailwind.js +1 -1
  60. package/dist/lib/tailwind.js.map +1 -1
  61. package/dist/lib/utils.d.ts +13 -29
  62. package/dist/lib/utils.d.ts.map +1 -1
  63. package/dist/lib/utils.js +45 -155
  64. package/dist/lib/utils.js.map +1 -1
  65. package/dist/lib/video-renderer.d.ts.map +1 -1
  66. package/dist/lib/video-renderer.js +6 -5
  67. package/dist/lib/video-renderer.js.map +1 -1
  68. package/dist/types/config.d.ts +0 -2
  69. package/dist/types/config.d.ts.map +1 -1
  70. package/dist/types/config.js.map +1 -1
  71. package/package.json +2 -12
  72. package/REGISTRY_SETUP.md +0 -363
  73. package/_dsgn/templates/dashed-stroke-test/template.tsx +0 -73
  74. package/_dsgn/templates/path-follow-test/template.tsx +0 -176
  75. package/_dsgn/templates/path-simple-test/template.tsx +0 -98
  76. package/_dsgn/templates/stroke-dash-test/meta.json +0 -12
  77. package/_dsgn/templates/stroke-dash-test/template.tsx +0 -53
  78. package/dist/default-templates/image/template.d.ts +0 -20
  79. package/dist/default-templates/image/template.d.ts.map +0 -1
  80. package/dist/default-templates/image/template.js +0 -18
  81. package/dist/default-templates/image/template.js.map +0 -1
  82. package/dist/default-templates/image/template.tsx +0 -20
  83. package/dist/default-templates/kitchen-sink/template.tsx +0 -64
  84. package/dist/default-templates/page/template.tsx +0 -37
  85. package/dist/default-templates/video/template.d.ts +0 -26
  86. package/dist/default-templates/video/template.d.ts.map +0 -1
  87. package/dist/default-templates/video/template.js +0 -33
  88. package/dist/default-templates/video/template.js.map +0 -1
  89. package/dist/default-templates/video/template.tsx +0 -37
  90. package/dist/default-templates/website/pages/home.tsx +0 -17
  91. package/dist/default-templates/website/parts/footer.tsx +0 -17
  92. package/dist/default-templates/website/parts/header.tsx +0 -17
  93. package/dist/default-templates/website/template.tsx +0 -17
  94. package/dist/default-templates/website-template/pages/home.tsx +0 -13
  95. package/dist/default-templates/website-template/parts/footer.tsx +0 -15
  96. package/dist/default-templates/website-template/parts/header.tsx +0 -15
  97. package/dist/default-templates/website-template/template.tsx +0 -32
  98. package/dist/lib/encode-worker.d.ts +0 -2
  99. package/dist/lib/encode-worker.d.ts.map +0 -1
  100. package/dist/lib/encode-worker.js +0 -29
  101. package/dist/lib/encode-worker.js.map +0 -1
  102. package/dist/lib/mjpeg-muxer.d.ts +0 -46
  103. package/dist/lib/mjpeg-muxer.d.ts.map +0 -1
  104. package/dist/lib/mjpeg-muxer.js +0 -513
  105. package/dist/lib/mjpeg-muxer.js.map +0 -1
  106. package/dist/lib/tailwind-browser.d.ts +0 -27
  107. package/dist/lib/tailwind-browser.d.ts.map +0 -1
  108. package/dist/lib/tailwind-browser.js +0 -853
  109. package/dist/lib/tailwind-browser.js.map +0 -1
  110. package/dist/lib/video-player.d.ts +0 -25
  111. package/dist/lib/video-player.d.ts.map +0 -1
  112. package/dist/lib/video-player.js +0 -392
  113. package/dist/lib/video-player.js.map +0 -1
  114. package/dist/sdk/compiler.d.ts +0 -94
  115. package/dist/sdk/compiler.d.ts.map +0 -1
  116. package/dist/sdk/compiler.js +0 -122
  117. package/dist/sdk/compiler.js.map +0 -1
  118. package/dist/sdk/index.d.ts +0 -62
  119. package/dist/sdk/index.d.ts.map +0 -1
  120. package/dist/sdk/index.js +0 -141
  121. package/dist/sdk/index.js.map +0 -1
  122. package/dist/sdk/preview.d.ts +0 -65
  123. package/dist/sdk/preview.d.ts.map +0 -1
  124. package/dist/sdk/preview.js +0 -262
  125. package/dist/sdk/preview.js.map +0 -1
  126. package/dist/sdk/template.d.ts +0 -162
  127. package/dist/sdk/template.d.ts.map +0 -1
  128. package/dist/sdk/template.js +0 -231
  129. package/dist/sdk/template.js.map +0 -1
  130. package/examples/code-editor-templates.ts +0 -173
  131. package/examples/nextjs-api/README.md +0 -180
  132. package/examples/nextjs-api/package.json +0 -21
  133. package/examples/nextjs-api/pages/api/intro-video.ts +0 -53
  134. package/examples/nextjs-api/pages/api/og-image.ts +0 -50
  135. package/examples/nextjs-template-import.ts +0 -58
  136. package/examples/sdk-video-preview.tsx +0 -120
  137. package/examples/template-compiler-workflow.ts +0 -251
  138. package/examples/visual-builder-templates.ts +0 -336
  139. package/render-examples-600x400.mjs +0 -161
  140. package/render-spring-variants-fixed.mjs +0 -60
  141. package/render-staggered-text.mjs +0 -56
  142. package/test-font-files.mjs +0 -72
  143. package/test-jsx-support.mjs +0 -146
  144. package/test-sdk-config.mjs +0 -454
  145. package/test-sdk-source-config.mjs +0 -427
  146. package/test-sdk-user-templates.mjs +0 -469
  147. package/test-static-debug.tsx +0 -19
  148. package/test-templates/TESTS.md +0 -63
  149. package/test-templates/config-test.mjs +0 -17
  150. package/test-templates/demo-intro-props.json +0 -4
  151. package/test-templates/run-tests.sh +0 -44
  152. package/test-templates/test-sdk.mjs +0 -139
  153. package/test-video-props.json +0 -3
  154. package/website/.astro/content.db +0 -0
  155. package/website/.astro/integrations/_inox-tools_astro-when/types.d.ts +0 -1
  156. package/website/.astro/integrations/astro_db/db.d.ts +0 -15
  157. package/website/.astro/settings.json +0 -5
  158. package/website/.astro/types.d.ts +0 -2
  159. package/website/DEPLOYMENT.md +0 -143
  160. package/website/OG_IMAGES.md +0 -142
  161. package/website/README.md +0 -158
  162. package/website/astro.config.mjs +0 -46
  163. package/website/dist/.gitkeep +0 -5
  164. package/website/dist/_astro/agents.Yx-L_igG.css +0 -1
  165. package/website/dist/_routes.json +0 -30
  166. package/website/dist/_worker.js/_@astrojs-ssr-adapter.mjs +0 -1033
  167. package/website/dist/_worker.js/_astro-internal_middleware.mjs +0 -40
  168. package/website/dist/_worker.js/chunks/abap_BTmsHiP5.mjs +0 -1
  169. package/website/dist/_worker.js/chunks/actionscript-3_DmBelb1E.mjs +0 -1
  170. package/website/dist/_worker.js/chunks/ada_8-E0ahCN.mjs +0 -1
  171. package/website/dist/_worker.js/chunks/andromeeda_XI-CXx50.mjs +0 -1
  172. package/website/dist/_worker.js/chunks/angular-html_DKGh3gGH.mjs +0 -1
  173. package/website/dist/_worker.js/chunks/angular-ts_-qZGsJoA.mjs +0 -1
  174. package/website/dist/_worker.js/chunks/apache_ijTUt0Ee.mjs +0 -1
  175. package/website/dist/_worker.js/chunks/apex_agu1c6Sh.mjs +0 -1
  176. package/website/dist/_worker.js/chunks/apl_Bj2f7Art.mjs +0 -1
  177. package/website/dist/_worker.js/chunks/applescript_B_vXrOh3.mjs +0 -1
  178. package/website/dist/_worker.js/chunks/ara_DCEQ2rnh.mjs +0 -1
  179. package/website/dist/_worker.js/chunks/asciidoc_CGN_EkYS.mjs +0 -1
  180. package/website/dist/_worker.js/chunks/asm_BBWZgnDp.mjs +0 -1
  181. package/website/dist/_worker.js/chunks/astro/assets-service_j52rQLzU.mjs +0 -721
  182. package/website/dist/_worker.js/chunks/astro/server_Y5_QHO8v.mjs +0 -2401
  183. package/website/dist/_worker.js/chunks/astro-designed-error-pages_BNTLO-TA.mjs +0 -542
  184. package/website/dist/_worker.js/chunks/astro_Dr_hht3h.mjs +0 -1
  185. package/website/dist/_worker.js/chunks/aurora-x_9GHG8nSq.mjs +0 -1
  186. package/website/dist/_worker.js/chunks/awk_DHRvhXot.mjs +0 -1
  187. package/website/dist/_worker.js/chunks/ayu-dark_CcvqmEHE.mjs +0 -1
  188. package/website/dist/_worker.js/chunks/ballerina_C7SdeSZb.mjs +0 -1
  189. package/website/dist/_worker.js/chunks/bat_Dv4A3u45.mjs +0 -1
  190. package/website/dist/_worker.js/chunks/beancount_BfPf9Luv.mjs +0 -1
  191. package/website/dist/_worker.js/chunks/berry_B8rfM3lL.mjs +0 -1
  192. package/website/dist/_worker.js/chunks/bibtex_TcjYgtJM.mjs +0 -1
  193. package/website/dist/_worker.js/chunks/bicep_CrlFWCdN.mjs +0 -1
  194. package/website/dist/_worker.js/chunks/blade_lanKVYID.mjs +0 -1
  195. package/website/dist/_worker.js/chunks/bsl_BhppzXMB.mjs +0 -1
  196. package/website/dist/_worker.js/chunks/c_6FBALJTK.mjs +0 -1
  197. package/website/dist/_worker.js/chunks/cadence_2txU9LVE.mjs +0 -1
  198. package/website/dist/_worker.js/chunks/cairo_BkrFAIlP.mjs +0 -1
  199. package/website/dist/_worker.js/chunks/catppuccin-frappe_CkEqIYhU.mjs +0 -1
  200. package/website/dist/_worker.js/chunks/catppuccin-latte_DG4Gx_-v.mjs +0 -1
  201. package/website/dist/_worker.js/chunks/catppuccin-macchiato_Cwi3vCXf.mjs +0 -1
  202. package/website/dist/_worker.js/chunks/catppuccin-mocha_L9_OPlFX.mjs +0 -1
  203. package/website/dist/_worker.js/chunks/clarity_BEAe4Ulu.mjs +0 -1
  204. package/website/dist/_worker.js/chunks/clojure_VnUX6p2g.mjs +0 -1
  205. package/website/dist/_worker.js/chunks/cmake_0-SGkZEj.mjs +0 -1
  206. package/website/dist/_worker.js/chunks/cobol_92M_KGaE.mjs +0 -1
  207. package/website/dist/_worker.js/chunks/codeowners_CzMwskBv.mjs +0 -1
  208. package/website/dist/_worker.js/chunks/codeql_DWJZNHv1.mjs +0 -1
  209. package/website/dist/_worker.js/chunks/coffee_CQjKU2fh.mjs +0 -1
  210. package/website/dist/_worker.js/chunks/common-lisp_BBLWDpS5.mjs +0 -1
  211. package/website/dist/_worker.js/chunks/coq_hedRFV3D.mjs +0 -1
  212. package/website/dist/_worker.js/chunks/cpp_DlS1i6Zs.mjs +0 -1
  213. package/website/dist/_worker.js/chunks/crystal_D6n65fKV.mjs +0 -1
  214. package/website/dist/_worker.js/chunks/csharp_C6FCVFzc.mjs +0 -1
  215. package/website/dist/_worker.js/chunks/css_C5uJEgmJ.mjs +0 -1
  216. package/website/dist/_worker.js/chunks/csv_CtMYuuJl.mjs +0 -1
  217. package/website/dist/_worker.js/chunks/cue_BsPexqx6.mjs +0 -1
  218. package/website/dist/_worker.js/chunks/cypher_apzf6OBi.mjs +0 -1
  219. package/website/dist/_worker.js/chunks/d_DcvIRcgm.mjs +0 -1
  220. package/website/dist/_worker.js/chunks/dark-plus_C01ONtzj.mjs +0 -1
  221. package/website/dist/_worker.js/chunks/dart_WkzM5WrV.mjs +0 -1
  222. package/website/dist/_worker.js/chunks/dax_DjXAO5V4.mjs +0 -1
  223. package/website/dist/_worker.js/chunks/desktop_C92LCxdc.mjs +0 -1
  224. package/website/dist/_worker.js/chunks/diff_CVwM_9XJ.mjs +0 -1
  225. package/website/dist/_worker.js/chunks/docker_DPzgJf6Z.mjs +0 -1
  226. package/website/dist/_worker.js/chunks/dotenv_D_vgANvA.mjs +0 -1
  227. package/website/dist/_worker.js/chunks/dracula-soft_CLnUBwFm.mjs +0 -1
  228. package/website/dist/_worker.js/chunks/dracula_lBVpb6Lb.mjs +0 -1
  229. package/website/dist/_worker.js/chunks/dream-maker_DTLbzd_J.mjs +0 -1
  230. package/website/dist/_worker.js/chunks/edge_i54JYm3_.mjs +0 -1
  231. package/website/dist/_worker.js/chunks/elixir_BJCIjTu4.mjs +0 -1
  232. package/website/dist/_worker.js/chunks/elm_BbXD39-_.mjs +0 -1
  233. package/website/dist/_worker.js/chunks/emacs-lisp_pxa5cXaN.mjs +0 -1
  234. package/website/dist/_worker.js/chunks/erb_Ccjijeee.mjs +0 -1
  235. package/website/dist/_worker.js/chunks/erlang_B2VM_hi7.mjs +0 -1
  236. package/website/dist/_worker.js/chunks/everforest-dark_BxvIPBim.mjs +0 -1
  237. package/website/dist/_worker.js/chunks/everforest-light_B7VoyaJM.mjs +0 -1
  238. package/website/dist/_worker.js/chunks/fennel_D-uo7X6c.mjs +0 -1
  239. package/website/dist/_worker.js/chunks/fish_BjePoK3m.mjs +0 -1
  240. package/website/dist/_worker.js/chunks/fluent_C8fgkzLX.mjs +0 -1
  241. package/website/dist/_worker.js/chunks/fortran-fixed-form_D1pu5zrc.mjs +0 -1
  242. package/website/dist/_worker.js/chunks/fortran-free-form_CSGOhJD6.mjs +0 -1
  243. package/website/dist/_worker.js/chunks/fsharp_B0xy-A4Y.mjs +0 -1
  244. package/website/dist/_worker.js/chunks/gdresource_CWppjlHq.mjs +0 -1
  245. package/website/dist/_worker.js/chunks/gdscript_eQCHchcS.mjs +0 -1
  246. package/website/dist/_worker.js/chunks/gdshader_C4kxepX7.mjs +0 -1
  247. package/website/dist/_worker.js/chunks/genie_ACtQLcDW.mjs +0 -1
  248. package/website/dist/_worker.js/chunks/gherkin_BFp2uKUd.mjs +0 -1
  249. package/website/dist/_worker.js/chunks/git-commit_CLg9ZwMV.mjs +0 -1
  250. package/website/dist/_worker.js/chunks/git-rebase_DG8A80Nt.mjs +0 -1
  251. package/website/dist/_worker.js/chunks/github-dark-default_BI0EP2Kv.mjs +0 -1
  252. package/website/dist/_worker.js/chunks/github-dark-dimmed_a_NIC0Xb.mjs +0 -1
  253. package/website/dist/_worker.js/chunks/github-dark-high-contrast_jZGqT7hk.mjs +0 -1
  254. package/website/dist/_worker.js/chunks/github-dark_CHCDNd2O.mjs +0 -1
  255. package/website/dist/_worker.js/chunks/github-light-default_DRbOW5RG.mjs +0 -1
  256. package/website/dist/_worker.js/chunks/github-light-high-contrast_tn_kWutM.mjs +0 -1
  257. package/website/dist/_worker.js/chunks/github-light_D9brYzot.mjs +0 -1
  258. package/website/dist/_worker.js/chunks/gleam_Dmhu1oxW.mjs +0 -1
  259. package/website/dist/_worker.js/chunks/glimmer-js_BfZbXy8A.mjs +0 -1
  260. package/website/dist/_worker.js/chunks/glimmer-ts_B9QVICrD.mjs +0 -1
  261. package/website/dist/_worker.js/chunks/glsl_DD2PPwOs.mjs +0 -1
  262. package/website/dist/_worker.js/chunks/gnuplot_D2OYChUX.mjs +0 -1
  263. package/website/dist/_worker.js/chunks/go_DYGFTe3h.mjs +0 -1
  264. package/website/dist/_worker.js/chunks/graphql_B7XsT3nH.mjs +0 -1
  265. package/website/dist/_worker.js/chunks/groovy_BO12Uwkl.mjs +0 -1
  266. package/website/dist/_worker.js/chunks/hack_CB2_ztCP.mjs +0 -1
  267. package/website/dist/_worker.js/chunks/haml_CyfDcDD3.mjs +0 -1
  268. package/website/dist/_worker.js/chunks/handlebars_CfpxpWm2.mjs +0 -1
  269. package/website/dist/_worker.js/chunks/haskell_jUeC5uN5.mjs +0 -1
  270. package/website/dist/_worker.js/chunks/haxe_B6GxP1WB.mjs +0 -1
  271. package/website/dist/_worker.js/chunks/hcl_DwoHV2oh.mjs +0 -1
  272. package/website/dist/_worker.js/chunks/hjson_DV7cJRk4.mjs +0 -1
  273. package/website/dist/_worker.js/chunks/hlsl_BlFCscPI.mjs +0 -1
  274. package/website/dist/_worker.js/chunks/houston_COBFG1Mx.mjs +0 -1
  275. package/website/dist/_worker.js/chunks/html-derivative_C9pJ337h.mjs +0 -1
  276. package/website/dist/_worker.js/chunks/html_D1OkrZS5.mjs +0 -1
  277. package/website/dist/_worker.js/chunks/http_DIGXRqvJ.mjs +0 -1
  278. package/website/dist/_worker.js/chunks/hxml_DEwh9i-c.mjs +0 -1
  279. package/website/dist/_worker.js/chunks/hy_DDoIgW1K.mjs +0 -1
  280. package/website/dist/_worker.js/chunks/imba_B00zbHo4.mjs +0 -1
  281. package/website/dist/_worker.js/chunks/index_C1UTDwYg.mjs +0 -1861
  282. package/website/dist/_worker.js/chunks/ini_D7XQA_p8.mjs +0 -1
  283. package/website/dist/_worker.js/chunks/java_B9wdFd8K.mjs +0 -1
  284. package/website/dist/_worker.js/chunks/javascript_CLsPGOON.mjs +0 -1
  285. package/website/dist/_worker.js/chunks/jinja_jarBCAN1.mjs +0 -1
  286. package/website/dist/_worker.js/chunks/jison_oGg3J708.mjs +0 -1
  287. package/website/dist/_worker.js/chunks/json5_DlZ1Kyaa.mjs +0 -1
  288. package/website/dist/_worker.js/chunks/json_DaYk_FMp.mjs +0 -1
  289. package/website/dist/_worker.js/chunks/jsonc_DlwgfSDs.mjs +0 -1
  290. package/website/dist/_worker.js/chunks/jsonl_BbCCVaZF.mjs +0 -1
  291. package/website/dist/_worker.js/chunks/jsonnet_Dt-G75xe.mjs +0 -1
  292. package/website/dist/_worker.js/chunks/jssm_BtKFTj2A.mjs +0 -1
  293. package/website/dist/_worker.js/chunks/jsx_DDx_xAZ8.mjs +0 -1
  294. package/website/dist/_worker.js/chunks/julia_CK0lv68l.mjs +0 -1
  295. package/website/dist/_worker.js/chunks/kanagawa-dragon_BldAK3Oo.mjs +0 -1
  296. package/website/dist/_worker.js/chunks/kanagawa-lotus_DVM8FX9_.mjs +0 -1
  297. package/website/dist/_worker.js/chunks/kanagawa-wave_Dpih0AKP.mjs +0 -1
  298. package/website/dist/_worker.js/chunks/kotlin_kWneB9V_.mjs +0 -1
  299. package/website/dist/_worker.js/chunks/kusto_BKVATd95.mjs +0 -1
  300. package/website/dist/_worker.js/chunks/laserwave_BqatxsVl.mjs +0 -1
  301. package/website/dist/_worker.js/chunks/latex_LVDcGBbc.mjs +0 -1
  302. package/website/dist/_worker.js/chunks/lean_W7qo-5M2.mjs +0 -1
  303. package/website/dist/_worker.js/chunks/less_DFNwJnBH.mjs +0 -1
  304. package/website/dist/_worker.js/chunks/light-plus_Dp0AoWsO.mjs +0 -1
  305. package/website/dist/_worker.js/chunks/liquid_D24qs0pc.mjs +0 -1
  306. package/website/dist/_worker.js/chunks/log_IPWMXriF.mjs +0 -1
  307. package/website/dist/_worker.js/chunks/logo_C6KaatrQ.mjs +0 -1
  308. package/website/dist/_worker.js/chunks/lua_CwnEf-T7.mjs +0 -1
  309. package/website/dist/_worker.js/chunks/luau_Br3-CXjS.mjs +0 -1
  310. package/website/dist/_worker.js/chunks/make_UBNG-kOo.mjs +0 -1
  311. package/website/dist/_worker.js/chunks/markdown_C7mhJFCm.mjs +0 -1
  312. package/website/dist/_worker.js/chunks/marko_4tchUvI7.mjs +0 -1
  313. package/website/dist/_worker.js/chunks/material-theme-darker_SKtaNEPn.mjs +0 -1
  314. package/website/dist/_worker.js/chunks/material-theme-lighter_zOX_DZCH.mjs +0 -1
  315. package/website/dist/_worker.js/chunks/material-theme-ocean_BN9WbhdC.mjs +0 -1
  316. package/website/dist/_worker.js/chunks/material-theme-palenight_DT_covjH.mjs +0 -1
  317. package/website/dist/_worker.js/chunks/material-theme_6RpeM3kc.mjs +0 -1
  318. package/website/dist/_worker.js/chunks/matlab_DCOXsPKR.mjs +0 -1
  319. package/website/dist/_worker.js/chunks/mdc_B9gb2UFP.mjs +0 -1
  320. package/website/dist/_worker.js/chunks/mdx_DGU7Nu9u.mjs +0 -1
  321. package/website/dist/_worker.js/chunks/mermaid_B69URzsZ.mjs +0 -1
  322. package/website/dist/_worker.js/chunks/min-dark_BgxifOMI.mjs +0 -1
  323. package/website/dist/_worker.js/chunks/min-light_BrPjXxUp.mjs +0 -1
  324. package/website/dist/_worker.js/chunks/mipsasm_9U-4_t7k.mjs +0 -1
  325. package/website/dist/_worker.js/chunks/mojo_B0wt7ug3.mjs +0 -1
  326. package/website/dist/_worker.js/chunks/monokai_B6Pxpoyi.mjs +0 -1
  327. package/website/dist/_worker.js/chunks/move_1eid4CyR.mjs +0 -1
  328. package/website/dist/_worker.js/chunks/narrat_Ds6-p5JZ.mjs +0 -1
  329. package/website/dist/_worker.js/chunks/nextflow_v2N1Qlqa.mjs +0 -1
  330. package/website/dist/_worker.js/chunks/nginx_Bp9Ab2NH.mjs +0 -1
  331. package/website/dist/_worker.js/chunks/night-owl_CdwOw_sc.mjs +0 -1
  332. package/website/dist/_worker.js/chunks/nim_BXGDUe53.mjs +0 -1
  333. package/website/dist/_worker.js/chunks/nix_CUig1nJH.mjs +0 -1
  334. package/website/dist/_worker.js/chunks/noop-middleware_DlWGj5t5.mjs +0 -10
  335. package/website/dist/_worker.js/chunks/nord_SPoG1iae.mjs +0 -1
  336. package/website/dist/_worker.js/chunks/nushell_DJw1Lca8.mjs +0 -1
  337. package/website/dist/_worker.js/chunks/objective-c_Bktzl_CO.mjs +0 -1
  338. package/website/dist/_worker.js/chunks/objective-cpp_CP4DWdDp.mjs +0 -1
  339. package/website/dist/_worker.js/chunks/ocaml_CeEAs7bZ.mjs +0 -1
  340. package/website/dist/_worker.js/chunks/one-dark-pro_-hIwCNMi.mjs +0 -1
  341. package/website/dist/_worker.js/chunks/one-light_DSmYvJ05.mjs +0 -1
  342. package/website/dist/_worker.js/chunks/pascal_C-S_Ms_o.mjs +0 -1
  343. package/website/dist/_worker.js/chunks/perl_CKamvo15.mjs +0 -1
  344. package/website/dist/_worker.js/chunks/php_BlmcX_F3.mjs +0 -1
  345. package/website/dist/_worker.js/chunks/plastic_Ryt8tVoA.mjs +0 -1
  346. package/website/dist/_worker.js/chunks/plsql_Cb3v7cBj.mjs +0 -1
  347. package/website/dist/_worker.js/chunks/po_DZbdNRlo.mjs +0 -1
  348. package/website/dist/_worker.js/chunks/poimandres_bYmE3_5d.mjs +0 -1
  349. package/website/dist/_worker.js/chunks/polar_pJkMGwoW.mjs +0 -1
  350. package/website/dist/_worker.js/chunks/postcss_BAXSOKgk.mjs +0 -1
  351. package/website/dist/_worker.js/chunks/powerquery_oITMGN4x.mjs +0 -1
  352. package/website/dist/_worker.js/chunks/powershell_6306-xIF.mjs +0 -1
  353. package/website/dist/_worker.js/chunks/prisma_DSDxnZGz.mjs +0 -1
  354. package/website/dist/_worker.js/chunks/prolog_CxG7tjZR.mjs +0 -1
  355. package/website/dist/_worker.js/chunks/proto_CS9ByXm1.mjs +0 -1
  356. package/website/dist/_worker.js/chunks/pug_BMtLJo6U.mjs +0 -1
  357. package/website/dist/_worker.js/chunks/puppet_BfeeSzee.mjs +0 -1
  358. package/website/dist/_worker.js/chunks/purescript_BFfueNaH.mjs +0 -1
  359. package/website/dist/_worker.js/chunks/python_Cc4Faapv.mjs +0 -1
  360. package/website/dist/_worker.js/chunks/qml_C1CTJTK8.mjs +0 -1
  361. package/website/dist/_worker.js/chunks/qmldir_nG1KaqKR.mjs +0 -1
  362. package/website/dist/_worker.js/chunks/qss_Cncxk263.mjs +0 -1
  363. package/website/dist/_worker.js/chunks/r_ChR54Ihi.mjs +0 -1
  364. package/website/dist/_worker.js/chunks/racket_BDrhptDs.mjs +0 -1
  365. package/website/dist/_worker.js/chunks/raku_07OUHa0P.mjs +0 -1
  366. package/website/dist/_worker.js/chunks/razor_DIP3INLa.mjs +0 -1
  367. package/website/dist/_worker.js/chunks/red_DOPXfj-6.mjs +0 -1
  368. package/website/dist/_worker.js/chunks/reg_B64SwEDj.mjs +0 -1
  369. package/website/dist/_worker.js/chunks/regexp_ButFGoB5.mjs +0 -1
  370. package/website/dist/_worker.js/chunks/rel_BWJAWqZD.mjs +0 -1
  371. package/website/dist/_worker.js/chunks/riscv_79gXlbsF.mjs +0 -1
  372. package/website/dist/_worker.js/chunks/rose-pine-dawn_DHIjVGd3.mjs +0 -1
  373. package/website/dist/_worker.js/chunks/rose-pine-moon_t86aEbs0.mjs +0 -1
  374. package/website/dist/_worker.js/chunks/rose-pine_BHgrcDCs.mjs +0 -1
  375. package/website/dist/_worker.js/chunks/rst_D3F4Fcpj.mjs +0 -1
  376. package/website/dist/_worker.js/chunks/ruby_Cs7vM9iv.mjs +0 -1
  377. package/website/dist/_worker.js/chunks/rust_DpyRVatH.mjs +0 -1
  378. package/website/dist/_worker.js/chunks/sas_DW45xZXN.mjs +0 -1
  379. package/website/dist/_worker.js/chunks/sass_C6SiMwN_.mjs +0 -1
  380. package/website/dist/_worker.js/chunks/scala_DlZOjNZk.mjs +0 -1
  381. package/website/dist/_worker.js/chunks/scheme_D2ezSJXu.mjs +0 -1
  382. package/website/dist/_worker.js/chunks/scss_DG5Spjqu.mjs +0 -1
  383. package/website/dist/_worker.js/chunks/sdbl_ZCYaj4VN.mjs +0 -1
  384. package/website/dist/_worker.js/chunks/shaderlab_CAcRkg1_.mjs +0 -1
  385. package/website/dist/_worker.js/chunks/shellscript_BWwhkDVh.mjs +0 -1
  386. package/website/dist/_worker.js/chunks/shellsession_BfEA3juK.mjs +0 -1
  387. package/website/dist/_worker.js/chunks/slack-dark_CL3lSpCc.mjs +0 -1
  388. package/website/dist/_worker.js/chunks/slack-ochin_DdZKOQVh.mjs +0 -1
  389. package/website/dist/_worker.js/chunks/smalltalk_DgilzSui.mjs +0 -1
  390. package/website/dist/_worker.js/chunks/snazzy-light_eJU08Pz_.mjs +0 -1
  391. package/website/dist/_worker.js/chunks/solarized-dark_Dg_YQywx.mjs +0 -1
  392. package/website/dist/_worker.js/chunks/solarized-light_BnIsrA6p.mjs +0 -1
  393. package/website/dist/_worker.js/chunks/solidity_DkseH8pQ.mjs +0 -1
  394. package/website/dist/_worker.js/chunks/soy_DU7bOYoG.mjs +0 -1
  395. package/website/dist/_worker.js/chunks/sparql_BuI1DBDH.mjs +0 -1
  396. package/website/dist/_worker.js/chunks/splunk_B8Ha9Pkg.mjs +0 -1
  397. package/website/dist/_worker.js/chunks/sql_BniHwea5.mjs +0 -1
  398. package/website/dist/_worker.js/chunks/ssh-config_CkE1GuVe.mjs +0 -1
  399. package/website/dist/_worker.js/chunks/stata_Dtqpbd_l.mjs +0 -1
  400. package/website/dist/_worker.js/chunks/stylus_CXTtglzO.mjs +0 -1
  401. package/website/dist/_worker.js/chunks/svelte_BjWYcUCN.mjs +0 -1
  402. package/website/dist/_worker.js/chunks/swift_BzHql_rM.mjs +0 -1
  403. package/website/dist/_worker.js/chunks/synthwave-84_DLRNhxNA.mjs +0 -1
  404. package/website/dist/_worker.js/chunks/system-verilog_ChyInPph.mjs +0 -1
  405. package/website/dist/_worker.js/chunks/systemd_Bi9Qa2qD.mjs +0 -1
  406. package/website/dist/_worker.js/chunks/talonscript_B3sH_Y-V.mjs +0 -1
  407. package/website/dist/_worker.js/chunks/tasl_BJ5yipRs.mjs +0 -1
  408. package/website/dist/_worker.js/chunks/tcl_CoJQjNoP.mjs +0 -1
  409. package/website/dist/_worker.js/chunks/templ_CrU7Ffil.mjs +0 -1
  410. package/website/dist/_worker.js/chunks/terraform_DT9JSFpC.mjs +0 -1
  411. package/website/dist/_worker.js/chunks/tex_5PKu2yA0.mjs +0 -1
  412. package/website/dist/_worker.js/chunks/tokyo-night_Buo8OK7-.mjs +0 -1
  413. package/website/dist/_worker.js/chunks/toml_CPuXX3oc.mjs +0 -1
  414. package/website/dist/_worker.js/chunks/ts-tags_D0M_1VSH.mjs +0 -1
  415. package/website/dist/_worker.js/chunks/tsv_CuivVNot.mjs +0 -1
  416. package/website/dist/_worker.js/chunks/tsx_MkuGr8MY.mjs +0 -1
  417. package/website/dist/_worker.js/chunks/turtle_BqgEPK7f.mjs +0 -1
  418. package/website/dist/_worker.js/chunks/twig_r1G9rpYJ.mjs +0 -1
  419. package/website/dist/_worker.js/chunks/typescript_Au5buqzM.mjs +0 -1
  420. package/website/dist/_worker.js/chunks/typespec_47rhBK_z.mjs +0 -1
  421. package/website/dist/_worker.js/chunks/typst_BAtuQLh-.mjs +0 -1
  422. package/website/dist/_worker.js/chunks/v_BIvWImHg.mjs +0 -1
  423. package/website/dist/_worker.js/chunks/vala_DYEacj30.mjs +0 -1
  424. package/website/dist/_worker.js/chunks/vb_CikQuqGJ.mjs +0 -1
  425. package/website/dist/_worker.js/chunks/verilog_BQRENwI-.mjs +0 -1
  426. package/website/dist/_worker.js/chunks/vesper_DA0kvTmj.mjs +0 -1
  427. package/website/dist/_worker.js/chunks/vhdl_DHscJIyg.mjs +0 -1
  428. package/website/dist/_worker.js/chunks/viml_F2pvMwvG.mjs +0 -1
  429. package/website/dist/_worker.js/chunks/vitesse-black_D9tjNzd0.mjs +0 -1
  430. package/website/dist/_worker.js/chunks/vitesse-dark_Bnm5d0hd.mjs +0 -1
  431. package/website/dist/_worker.js/chunks/vitesse-light_CHwbyjNR.mjs +0 -1
  432. package/website/dist/_worker.js/chunks/vue-html_DyYtbbMK.mjs +0 -1
  433. package/website/dist/_worker.js/chunks/vue_DofN6juy.mjs +0 -1
  434. package/website/dist/_worker.js/chunks/vyper_CiR0m-OV.mjs +0 -1
  435. package/website/dist/_worker.js/chunks/wasm_CwIGgRGf.mjs +0 -1
  436. package/website/dist/_worker.js/chunks/wasm_jKWhg0J0.mjs +0 -1
  437. package/website/dist/_worker.js/chunks/wenyan_DKvVZKXW.mjs +0 -1
  438. package/website/dist/_worker.js/chunks/wgsl_BOWZY7yw.mjs +0 -1
  439. package/website/dist/_worker.js/chunks/wikitext_CXDhhHPy.mjs +0 -1
  440. package/website/dist/_worker.js/chunks/wolfram_ChkmGnW0.mjs +0 -1
  441. package/website/dist/_worker.js/chunks/xml_DXH3hHIu.mjs +0 -1
  442. package/website/dist/_worker.js/chunks/xsl_DuP2mFjg.mjs +0 -1
  443. package/website/dist/_worker.js/chunks/yaml_IGiEkTge.mjs +0 -1
  444. package/website/dist/_worker.js/chunks/zenscript_59iXGyNw.mjs +0 -1
  445. package/website/dist/_worker.js/chunks/zig_DKzb0zdT.mjs +0 -1
  446. package/website/dist/_worker.js/index.js +0 -53
  447. package/website/dist/_worker.js/manifest_CT_D-YDe.mjs +0 -98
  448. package/website/dist/_worker.js/pages/_image.astro.mjs +0 -24
  449. package/website/dist/_worker.js/pages/agents.astro.mjs +0 -1
  450. package/website/dist/_worker.js/pages/animation.astro.mjs +0 -1
  451. package/website/dist/_worker.js/pages/api/raw-markdown/_---path_.astro.mjs +0 -44
  452. package/website/dist/_worker.js/pages/config.astro.mjs +0 -1
  453. package/website/dist/_worker.js/pages/fonts.astro.mjs +0 -1
  454. package/website/dist/_worker.js/pages/getting-started.astro.mjs +0 -1
  455. package/website/dist/_worker.js/pages/helpers.astro.mjs +0 -1
  456. package/website/dist/_worker.js/pages/images.astro.mjs +0 -1
  457. package/website/dist/_worker.js/pages/index.astro.mjs +0 -1
  458. package/website/dist/_worker.js/pages/llm.txt.astro.mjs +0 -1
  459. package/website/dist/_worker.js/pages/preview.astro.mjs +0 -1
  460. package/website/dist/_worker.js/pages/sdk.astro.mjs +0 -1
  461. package/website/dist/_worker.js/pages/sitemap.xml.astro.mjs +0 -1
  462. package/website/dist/_worker.js/pages/styling.astro.mjs +0 -1
  463. package/website/dist/_worker.js/pages/templates.astro.mjs +0 -1
  464. package/website/dist/_worker.js/pages/video.astro.mjs +0 -1
  465. package/website/dist/_worker.js/renderers.mjs +0 -57
  466. package/website/dist/agents/index.html +0 -52
  467. package/website/dist/animation/index.html +0 -879
  468. package/website/dist/config/index.html +0 -184
  469. package/website/dist/fonts/index.html +0 -198
  470. package/website/dist/getting-started/index.html +0 -107
  471. package/website/dist/helpers/index.html +0 -164
  472. package/website/dist/images/index.html +0 -335
  473. package/website/dist/index.html +0 -140
  474. package/website/dist/llm.txt +0 -2776
  475. package/website/dist/preview/index.html +0 -111
  476. package/website/dist/robots.txt +0 -40
  477. package/website/dist/sdk/index.html +0 -1076
  478. package/website/dist/sitemap.xml +0 -76
  479. package/website/dist/styling/index.html +0 -366
  480. package/website/dist/templates/index.html +0 -74
  481. package/website/dist/video/index.html +0 -319
  482. package/website/package-lock.json +0 -8089
  483. package/website/package.json +0 -41
  484. package/website/public/.gitkeep +0 -5
  485. package/website/public/robots.txt +0 -40
  486. package/website/templates/og-image.tsx +0 -60
@@ -1,251 +0,0 @@
1
- /**
2
- * Example: Template Compiler Workflow
3
- *
4
- * This example demonstrates the recommended production workflow for JSX templates:
5
- *
6
- * 1. ADMIN PANEL: Use compileTemplate() to transform JSX → JavaScript
7
- * 2. DATABASE: Store the compiled JavaScript
8
- * 3. PRODUCTION API: Use defineTemplateFromSource() to render
9
- *
10
- * Benefits:
11
- * - JSX developer experience in admin panel
12
- * - No @babel/standalone in production (36 MB smaller!)
13
- * - Faster cold starts in serverless functions
14
- * - Syntax errors caught at save time, not render time
15
- */
16
-
17
- import { compileTemplate, containsJSX } from 'loopwind/sdk/compiler';
18
- import { defineTemplateFromSource, renderImage } from 'loopwind/sdk';
19
- import fs from 'fs/promises';
20
-
21
- // ============================================================================
22
- // PART 1: Admin Panel - Compile and Save
23
- // ============================================================================
24
-
25
- /**
26
- * Simulates an admin panel API where users edit templates in a code editor
27
- */
28
- async function adminPanelSaveTemplate(templateId: string, userCode: string) {
29
- console.log('📝 Admin Panel: User saved template\n');
30
- console.log('User-provided JSX:');
31
- console.log(userCode.substring(0, 200) + '...\n');
32
-
33
- try {
34
- // Check if the code contains JSX
35
- if (containsJSX(userCode)) {
36
- console.log('✓ Detected JSX syntax, compiling...');
37
-
38
- // Compile JSX to JavaScript
39
- const compiled = compileTemplate(userCode);
40
-
41
- console.log('✓ Compilation successful!');
42
- console.log(' Original size:', userCode.length, 'bytes');
43
- console.log(' Compiled size:', compiled.length, 'bytes\n');
44
-
45
- // In a real app, you would save to a database:
46
- // await db.templates.update(templateId, {
47
- // sourceCode: compiled,
48
- // updatedAt: new Date()
49
- // });
50
-
51
- // For this example, save to a file
52
- await fs.writeFile(`template-${templateId}-compiled.js`, compiled);
53
- console.log('✓ Saved compiled template to database\n');
54
-
55
- return { success: true, compiled };
56
- } else {
57
- console.log('ℹ No JSX detected, saving as-is\n');
58
- return { success: true, compiled: userCode };
59
- }
60
- } catch (error) {
61
- console.error('✗ Compilation failed:', (error as Error).message);
62
- return {
63
- success: false,
64
- error: (error as Error).message,
65
- };
66
- }
67
- }
68
-
69
- // ============================================================================
70
- // PART 2: Production API - Load and Render
71
- // ============================================================================
72
-
73
- /**
74
- * Simulates a production API endpoint that renders templates
75
- * This runs in Vercel, AWS Lambda, or any serverless function
76
- */
77
- async function productionApiRenderTemplate(
78
- templateId: string,
79
- props: Record<string, any>
80
- ) {
81
- console.log('🚀 Production API: Rendering template\n');
82
-
83
- try {
84
- // Load pre-compiled template from database
85
- // In a real app:
86
- // const template = await db.templates.findById(templateId);
87
- // const compiledCode = template.sourceCode;
88
-
89
- // For this example, load from file
90
- const compiledCode = await fs.readFile(
91
- `template-${templateId}-compiled.js`,
92
- 'utf-8'
93
- );
94
-
95
- console.log('✓ Loaded pre-compiled template from database');
96
- console.log(' Size:', compiledCode.length, 'bytes');
97
- console.log(' No Babel needed! 🎉\n');
98
-
99
- // Define template from pre-compiled JavaScript
100
- // This is FAST - no JSX transformation at runtime
101
- const templateDef = defineTemplateFromSource(compiledCode, {
102
- config: {
103
- colors: {
104
- primary: '#3b82f6',
105
- secondary: '#8b5cf6',
106
- },
107
- },
108
- });
109
-
110
- console.log('✓ Template loaded');
111
- console.log(' Name:', templateDef.name);
112
- console.log(' Type:', templateDef.type);
113
- console.log(' Size:', templateDef.size.width, 'x', templateDef.size.height, '\n');
114
-
115
- // Render the image
116
- const png = await renderImage(templateDef, props);
117
-
118
- console.log('✓ Image rendered');
119
- console.log(' PNG size:', png.length, 'bytes\n');
120
-
121
- return png;
122
- } catch (error) {
123
- console.error('✗ Rendering failed:', (error as Error).message);
124
- throw error;
125
- }
126
- }
127
-
128
- // ============================================================================
129
- // DEMO: Full Workflow
130
- // ============================================================================
131
-
132
- async function demo() {
133
- console.log('='.repeat(70));
134
- console.log('🎨 Template Compiler Workflow Demo');
135
- console.log('='.repeat(70) + '\n');
136
-
137
- // Example JSX template that a user might write in a code editor
138
- const userJSX = `
139
- export const meta = {
140
- name: 'social-card',
141
- type: 'image',
142
- size: { width: 1200, height: 630 }
143
- };
144
-
145
- export default ({ tw, title, description, author }) => (
146
- <div style={tw('flex flex-col justify-between w-full h-full bg-gradient-to-br from-primary to-secondary p-12')}>
147
- <div style={tw('flex flex-col')}>
148
- <h1 style={tw('text-6xl font-bold text-white mb-4')}>
149
- {title}
150
- </h1>
151
- <p style={tw('text-2xl text-white/90')}>
152
- {description}
153
- </p>
154
- </div>
155
- <div style={tw('flex items-center gap-4')}>
156
- <div style={tw('w-16 h-16 rounded-full bg-white/20')} />
157
- <span style={tw('text-xl text-white/80')}>{author}</span>
158
- </div>
159
- </div>
160
- );
161
- `;
162
-
163
- const templateId = 'card-123';
164
-
165
- // STEP 1: Admin panel compiles and saves
166
- console.log('STEP 1: Admin Panel Workflow');
167
- console.log('-'.repeat(70) + '\n');
168
- await adminPanelSaveTemplate(templateId, userJSX);
169
-
170
- // STEP 2: Production API loads and renders
171
- console.log('STEP 2: Production API Workflow');
172
- console.log('-'.repeat(70) + '\n');
173
- const png = await productionApiRenderTemplate(templateId, {
174
- title: 'Building with loopwind',
175
- description: 'Generate images and videos programmatically',
176
- author: 'Tommy Vedvik',
177
- });
178
-
179
- // Save the final result
180
- await fs.writeFile('social-card-demo.png', png);
181
- console.log('✅ Saved final image to social-card-demo.png\n');
182
-
183
- // Cleanup
184
- await fs.unlink(`template-${templateId}-compiled.js`);
185
-
186
- console.log('='.repeat(70));
187
- console.log('📊 Workflow Summary');
188
- console.log('='.repeat(70));
189
- console.log('\n✅ Benefits of this approach:\n');
190
- console.log('1. Users write natural JSX syntax in admin panel');
191
- console.log('2. JSX compiled once at save time (not every render)');
192
- console.log('3. Compiled templates stored in database');
193
- console.log('4. Production bundle 36 MB smaller (no @babel/standalone)');
194
- console.log('5. Faster cold starts in serverless functions');
195
- console.log('6. Syntax errors caught early (at save, not production)\n');
196
-
197
- console.log('🔧 For Vercel/Lambda deployments:\n');
198
- console.log('- Admin panel imports: loopwind/sdk/compiler');
199
- console.log('- Production API imports: loopwind/sdk');
200
- console.log('- Result: Only admin panel includes Babel\n');
201
- }
202
-
203
- // ============================================================================
204
- // Example Integration Code
205
- // ============================================================================
206
-
207
- /**
208
- * Example: Next.js Admin Panel API Route
209
- */
210
- async function exampleNextJSAdminRoute(req: any, res: any) {
211
- const { templateId, code } = req.body;
212
-
213
- try {
214
- // Compile JSX
215
- const compiled = compileTemplate(code);
216
-
217
- // Save to database
218
- // await db.templates.update(templateId, { sourceCode: compiled });
219
-
220
- res.json({ success: true });
221
- } catch (error) {
222
- res.status(400).json({
223
- error: 'Compilation failed',
224
- message: (error as Error).message,
225
- });
226
- }
227
- }
228
-
229
- /**
230
- * Example: Next.js Production API Route
231
- */
232
- async function exampleNextJSProductionRoute(req: any, res: any) {
233
- const { templateId, props } = req.body;
234
-
235
- try {
236
- // Load pre-compiled template
237
- // const template = await db.templates.findById(templateId);
238
- // const templateDef = defineTemplateFromSource(template.sourceCode);
239
-
240
- // Render
241
- // const png = await renderImage(templateDef, props);
242
-
243
- // res.setHeader('Content-Type', 'image/png');
244
- // res.send(png);
245
- } catch (error) {
246
- res.status(500).json({ error: 'Rendering failed' });
247
- }
248
- }
249
-
250
- // Run the demo
251
- demo().catch(console.error);
@@ -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);