loopwind 0.23.0 โ†’ 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (497) 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 +4 -1
  32. package/dist/lib/renderer.js.map +1 -1
  33. package/dist/lib/utils.d.ts +13 -29
  34. package/dist/lib/utils.d.ts.map +1 -1
  35. package/dist/lib/utils.js +45 -155
  36. package/dist/lib/utils.js.map +1 -1
  37. package/dist/types/config.d.ts +0 -2
  38. package/dist/types/config.d.ts.map +1 -1
  39. package/dist/types/config.js.map +1 -1
  40. package/package.json +1 -15
  41. package/REGISTRY_SETUP.md +0 -363
  42. package/dist/default-templates/image/template.d.ts +0 -20
  43. package/dist/default-templates/image/template.d.ts.map +0 -1
  44. package/dist/default-templates/image/template.js +0 -18
  45. package/dist/default-templates/image/template.js.map +0 -1
  46. package/dist/default-templates/image/template.tsx +0 -20
  47. package/dist/default-templates/kitchen-sink/template.tsx +0 -64
  48. package/dist/default-templates/page/template.tsx +0 -37
  49. package/dist/default-templates/video/template.d.ts +0 -26
  50. package/dist/default-templates/video/template.d.ts.map +0 -1
  51. package/dist/default-templates/video/template.js +0 -33
  52. package/dist/default-templates/video/template.js.map +0 -1
  53. package/dist/default-templates/video/template.tsx +0 -37
  54. package/dist/default-templates/website/pages/home.tsx +0 -17
  55. package/dist/default-templates/website/parts/footer.tsx +0 -17
  56. package/dist/default-templates/website/parts/header.tsx +0 -17
  57. package/dist/default-templates/website/template.tsx +0 -17
  58. package/dist/default-templates/website-template/pages/home.tsx +0 -13
  59. package/dist/default-templates/website-template/parts/footer.tsx +0 -15
  60. package/dist/default-templates/website-template/parts/header.tsx +0 -15
  61. package/dist/default-templates/website-template/template.tsx +0 -32
  62. package/dist/lib/encode-worker.d.ts +0 -2
  63. package/dist/lib/encode-worker.d.ts.map +0 -1
  64. package/dist/lib/encode-worker.js +0 -29
  65. package/dist/lib/encode-worker.js.map +0 -1
  66. package/dist/lib/mjpeg-muxer.d.ts +0 -46
  67. package/dist/lib/mjpeg-muxer.d.ts.map +0 -1
  68. package/dist/lib/mjpeg-muxer.js +0 -513
  69. package/dist/lib/mjpeg-muxer.js.map +0 -1
  70. package/dist/lib/render-core.d.ts +0 -63
  71. package/dist/lib/render-core.d.ts.map +0 -1
  72. package/dist/lib/render-core.js +0 -65
  73. package/dist/lib/render-core.js.map +0 -1
  74. package/dist/lib/tailwind-browser.d.ts +0 -27
  75. package/dist/lib/tailwind-browser.d.ts.map +0 -1
  76. package/dist/lib/tailwind-browser.js +0 -853
  77. package/dist/lib/tailwind-browser.js.map +0 -1
  78. package/dist/lib/video-player.d.ts +0 -25
  79. package/dist/lib/video-player.d.ts.map +0 -1
  80. package/dist/lib/video-player.js +0 -392
  81. package/dist/lib/video-player.js.map +0 -1
  82. package/dist/sdk/compiler.d.ts +0 -94
  83. package/dist/sdk/compiler.d.ts.map +0 -1
  84. package/dist/sdk/compiler.js +0 -122
  85. package/dist/sdk/compiler.js.map +0 -1
  86. package/dist/sdk/edge/index.d.ts +0 -91
  87. package/dist/sdk/edge/index.d.ts.map +0 -1
  88. package/dist/sdk/edge/index.js +0 -187
  89. package/dist/sdk/edge/index.js.map +0 -1
  90. package/dist/sdk/index.d.ts +0 -62
  91. package/dist/sdk/index.d.ts.map +0 -1
  92. package/dist/sdk/index.js +0 -141
  93. package/dist/sdk/index.js.map +0 -1
  94. package/dist/sdk/preview.d.ts +0 -65
  95. package/dist/sdk/preview.d.ts.map +0 -1
  96. package/dist/sdk/preview.js +0 -262
  97. package/dist/sdk/preview.js.map +0 -1
  98. package/dist/sdk/template.d.ts +0 -162
  99. package/dist/sdk/template.d.ts.map +0 -1
  100. package/dist/sdk/template.js +0 -231
  101. package/dist/sdk/template.js.map +0 -1
  102. package/dist/sdk/workers/index.d.ts +0 -135
  103. package/dist/sdk/workers/index.d.ts.map +0 -1
  104. package/dist/sdk/workers/index.js +0 -271
  105. package/dist/sdk/workers/index.js.map +0 -1
  106. package/dist/sdk/workers/tailwind-config.d.ts +0 -48
  107. package/dist/sdk/workers/tailwind-config.d.ts.map +0 -1
  108. package/dist/sdk/workers/tailwind-config.js +0 -187
  109. package/dist/sdk/workers/tailwind-config.js.map +0 -1
  110. package/dist/sdk/workers/tailwind.d.ts +0 -9
  111. package/dist/sdk/workers/tailwind.d.ts.map +0 -1
  112. package/dist/sdk/workers/tailwind.js +0 -8
  113. package/dist/sdk/workers/tailwind.js.map +0 -1
  114. package/examples/code-editor-templates.ts +0 -173
  115. package/examples/nextjs-api/README.md +0 -180
  116. package/examples/nextjs-api/package.json +0 -21
  117. package/examples/nextjs-api/pages/api/intro-video.ts +0 -53
  118. package/examples/nextjs-api/pages/api/og-image.ts +0 -50
  119. package/examples/nextjs-template-import.ts +0 -58
  120. package/examples/sdk-video-preview.tsx +0 -120
  121. package/examples/template-compiler-workflow.ts +0 -251
  122. package/examples/visual-builder-templates.ts +0 -336
  123. package/render-examples-600x400.mjs +0 -161
  124. package/render-spring-variants-fixed.mjs +0 -60
  125. package/render-staggered-text.mjs +0 -56
  126. package/test-cloudflare-worker/README.md +0 -64
  127. package/test-cloudflare-worker/dist/README.md +0 -1
  128. package/test-cloudflare-worker/dist/index.js +0 -23743
  129. package/test-cloudflare-worker/dist/index.js.map +0 -8
  130. package/test-cloudflare-worker/package-lock.json +0 -1773
  131. package/test-cloudflare-worker/package.json +0 -25
  132. package/test-cloudflare-worker/test-sdk.mjs +0 -75
  133. package/test-cloudflare-worker/wrangler.toml +0 -14
  134. package/test-font-files.mjs +0 -72
  135. package/test-jsx-support.mjs +0 -146
  136. package/test-sdk-config.mjs +0 -454
  137. package/test-sdk-source-config.mjs +0 -427
  138. package/test-sdk-user-templates.mjs +0 -469
  139. package/test-static-debug.tsx +0 -19
  140. package/test-templates/TESTS.md +0 -63
  141. package/test-templates/config-test.mjs +0 -17
  142. package/test-templates/demo-intro-props.json +0 -4
  143. package/test-templates/run-tests.sh +0 -44
  144. package/test-templates/test-sdk.mjs +0 -139
  145. package/test-video-720p.mjs +0 -96
  146. package/test-video-breakdown.mjs +0 -98
  147. package/test-video-perf-1080.mjs +0 -67
  148. package/test-video-perf.mjs +0 -56
  149. package/test-video-props.json +0 -3
  150. package/test-worker-1080p.mjs +0 -103
  151. package/test-worker-viability.mjs +0 -140
  152. package/website/.astro/content.db +0 -0
  153. package/website/.astro/integrations/_inox-tools_astro-when/types.d.ts +0 -1
  154. package/website/.astro/integrations/astro_db/db.d.ts +0 -15
  155. package/website/.astro/settings.json +0 -5
  156. package/website/.astro/types.d.ts +0 -2
  157. package/website/DEPLOYMENT.md +0 -143
  158. package/website/OG_IMAGES.md +0 -142
  159. package/website/README.md +0 -158
  160. package/website/astro.config.mjs +0 -41
  161. package/website/dist/.gitkeep +0 -5
  162. package/website/dist/_astro/PlaygroundEditor.DzFavsm8.js +0 -26
  163. package/website/dist/_astro/VideoPreviewClient.BrajhYmh.js +0 -1
  164. package/website/dist/_astro/agents.CZXv4DCM.css +0 -1
  165. package/website/dist/_astro/client.BHSq4mdQ.js +0 -33
  166. package/website/dist/_astro/index.CTbGshLK.js +0 -9
  167. package/website/dist/_astro/jsx-runtime.BjG_zV1W.js +0 -9
  168. package/website/dist/_routes.json +0 -31
  169. package/website/dist/_worker.js/_@astrojs-ssr-adapter.mjs +0 -1033
  170. package/website/dist/_worker.js/_astro-internal_middleware.mjs +0 -40
  171. package/website/dist/_worker.js/chunks/Logo_Cud5QvBJ.mjs +0 -22
  172. package/website/dist/_worker.js/chunks/_@astro-renderers_-YVK7NHa.mjs +0 -15015
  173. package/website/dist/_worker.js/chunks/abap_BTmsHiP5.mjs +0 -1
  174. package/website/dist/_worker.js/chunks/actionscript-3_DmBelb1E.mjs +0 -1
  175. package/website/dist/_worker.js/chunks/ada_8-E0ahCN.mjs +0 -1
  176. package/website/dist/_worker.js/chunks/andromeeda_XI-CXx50.mjs +0 -1
  177. package/website/dist/_worker.js/chunks/angular-html_DKGh3gGH.mjs +0 -1
  178. package/website/dist/_worker.js/chunks/angular-ts_-qZGsJoA.mjs +0 -1
  179. package/website/dist/_worker.js/chunks/apache_ijTUt0Ee.mjs +0 -1
  180. package/website/dist/_worker.js/chunks/apex_agu1c6Sh.mjs +0 -1
  181. package/website/dist/_worker.js/chunks/apl_Bj2f7Art.mjs +0 -1
  182. package/website/dist/_worker.js/chunks/applescript_B_vXrOh3.mjs +0 -1
  183. package/website/dist/_worker.js/chunks/ara_DCEQ2rnh.mjs +0 -1
  184. package/website/dist/_worker.js/chunks/asciidoc_CGN_EkYS.mjs +0 -1
  185. package/website/dist/_worker.js/chunks/asm_BBWZgnDp.mjs +0 -1
  186. package/website/dist/_worker.js/chunks/astro/assets-service_j52rQLzU.mjs +0 -721
  187. package/website/dist/_worker.js/chunks/astro/server_CsUrSZgd.mjs +0 -2512
  188. package/website/dist/_worker.js/chunks/astro-designed-error-pages_1ELXm5Tt.mjs +0 -542
  189. package/website/dist/_worker.js/chunks/astro_Dr_hht3h.mjs +0 -1
  190. package/website/dist/_worker.js/chunks/aurora-x_9GHG8nSq.mjs +0 -1
  191. package/website/dist/_worker.js/chunks/awk_DHRvhXot.mjs +0 -1
  192. package/website/dist/_worker.js/chunks/ayu-dark_CcvqmEHE.mjs +0 -1
  193. package/website/dist/_worker.js/chunks/ballerina_C7SdeSZb.mjs +0 -1
  194. package/website/dist/_worker.js/chunks/bat_Dv4A3u45.mjs +0 -1
  195. package/website/dist/_worker.js/chunks/beancount_BfPf9Luv.mjs +0 -1
  196. package/website/dist/_worker.js/chunks/berry_B8rfM3lL.mjs +0 -1
  197. package/website/dist/_worker.js/chunks/bibtex_TcjYgtJM.mjs +0 -1
  198. package/website/dist/_worker.js/chunks/bicep_CrlFWCdN.mjs +0 -1
  199. package/website/dist/_worker.js/chunks/blade_lanKVYID.mjs +0 -1
  200. package/website/dist/_worker.js/chunks/bsl_BhppzXMB.mjs +0 -1
  201. package/website/dist/_worker.js/chunks/c_6FBALJTK.mjs +0 -1
  202. package/website/dist/_worker.js/chunks/cadence_2txU9LVE.mjs +0 -1
  203. package/website/dist/_worker.js/chunks/cairo_BkrFAIlP.mjs +0 -1
  204. package/website/dist/_worker.js/chunks/catppuccin-frappe_CkEqIYhU.mjs +0 -1
  205. package/website/dist/_worker.js/chunks/catppuccin-latte_DG4Gx_-v.mjs +0 -1
  206. package/website/dist/_worker.js/chunks/catppuccin-macchiato_Cwi3vCXf.mjs +0 -1
  207. package/website/dist/_worker.js/chunks/catppuccin-mocha_L9_OPlFX.mjs +0 -1
  208. package/website/dist/_worker.js/chunks/clarity_BEAe4Ulu.mjs +0 -1
  209. package/website/dist/_worker.js/chunks/clojure_VnUX6p2g.mjs +0 -1
  210. package/website/dist/_worker.js/chunks/cmake_0-SGkZEj.mjs +0 -1
  211. package/website/dist/_worker.js/chunks/cobol_92M_KGaE.mjs +0 -1
  212. package/website/dist/_worker.js/chunks/codeowners_CzMwskBv.mjs +0 -1
  213. package/website/dist/_worker.js/chunks/codeql_DWJZNHv1.mjs +0 -1
  214. package/website/dist/_worker.js/chunks/coffee_CQjKU2fh.mjs +0 -1
  215. package/website/dist/_worker.js/chunks/common-lisp_BBLWDpS5.mjs +0 -1
  216. package/website/dist/_worker.js/chunks/coq_hedRFV3D.mjs +0 -1
  217. package/website/dist/_worker.js/chunks/cpp_DlS1i6Zs.mjs +0 -1
  218. package/website/dist/_worker.js/chunks/crystal_D6n65fKV.mjs +0 -1
  219. package/website/dist/_worker.js/chunks/csharp_C6FCVFzc.mjs +0 -1
  220. package/website/dist/_worker.js/chunks/css_C5uJEgmJ.mjs +0 -1
  221. package/website/dist/_worker.js/chunks/csv_CtMYuuJl.mjs +0 -1
  222. package/website/dist/_worker.js/chunks/cue_BsPexqx6.mjs +0 -1
  223. package/website/dist/_worker.js/chunks/cypher_apzf6OBi.mjs +0 -1
  224. package/website/dist/_worker.js/chunks/d_DcvIRcgm.mjs +0 -1
  225. package/website/dist/_worker.js/chunks/dark-plus_C01ONtzj.mjs +0 -1
  226. package/website/dist/_worker.js/chunks/dart_WkzM5WrV.mjs +0 -1
  227. package/website/dist/_worker.js/chunks/dax_DjXAO5V4.mjs +0 -1
  228. package/website/dist/_worker.js/chunks/desktop_C92LCxdc.mjs +0 -1
  229. package/website/dist/_worker.js/chunks/diff_CVwM_9XJ.mjs +0 -1
  230. package/website/dist/_worker.js/chunks/docker_DPzgJf6Z.mjs +0 -1
  231. package/website/dist/_worker.js/chunks/dotenv_D_vgANvA.mjs +0 -1
  232. package/website/dist/_worker.js/chunks/dracula-soft_CLnUBwFm.mjs +0 -1
  233. package/website/dist/_worker.js/chunks/dracula_lBVpb6Lb.mjs +0 -1
  234. package/website/dist/_worker.js/chunks/dream-maker_DTLbzd_J.mjs +0 -1
  235. package/website/dist/_worker.js/chunks/edge_i54JYm3_.mjs +0 -1
  236. package/website/dist/_worker.js/chunks/elixir_BJCIjTu4.mjs +0 -1
  237. package/website/dist/_worker.js/chunks/elm_BbXD39-_.mjs +0 -1
  238. package/website/dist/_worker.js/chunks/emacs-lisp_pxa5cXaN.mjs +0 -1
  239. package/website/dist/_worker.js/chunks/erb_Ccjijeee.mjs +0 -1
  240. package/website/dist/_worker.js/chunks/erlang_B2VM_hi7.mjs +0 -1
  241. package/website/dist/_worker.js/chunks/everforest-dark_BxvIPBim.mjs +0 -1
  242. package/website/dist/_worker.js/chunks/everforest-light_B7VoyaJM.mjs +0 -1
  243. package/website/dist/_worker.js/chunks/fennel_D-uo7X6c.mjs +0 -1
  244. package/website/dist/_worker.js/chunks/fish_BjePoK3m.mjs +0 -1
  245. package/website/dist/_worker.js/chunks/fluent_C8fgkzLX.mjs +0 -1
  246. package/website/dist/_worker.js/chunks/fortran-fixed-form_D1pu5zrc.mjs +0 -1
  247. package/website/dist/_worker.js/chunks/fortran-free-form_CSGOhJD6.mjs +0 -1
  248. package/website/dist/_worker.js/chunks/fsharp_B0xy-A4Y.mjs +0 -1
  249. package/website/dist/_worker.js/chunks/gdresource_CWppjlHq.mjs +0 -1
  250. package/website/dist/_worker.js/chunks/gdscript_eQCHchcS.mjs +0 -1
  251. package/website/dist/_worker.js/chunks/gdshader_C4kxepX7.mjs +0 -1
  252. package/website/dist/_worker.js/chunks/genie_ACtQLcDW.mjs +0 -1
  253. package/website/dist/_worker.js/chunks/gherkin_BFp2uKUd.mjs +0 -1
  254. package/website/dist/_worker.js/chunks/git-commit_CLg9ZwMV.mjs +0 -1
  255. package/website/dist/_worker.js/chunks/git-rebase_DG8A80Nt.mjs +0 -1
  256. package/website/dist/_worker.js/chunks/github-dark-default_BI0EP2Kv.mjs +0 -1
  257. package/website/dist/_worker.js/chunks/github-dark-dimmed_a_NIC0Xb.mjs +0 -1
  258. package/website/dist/_worker.js/chunks/github-dark-high-contrast_jZGqT7hk.mjs +0 -1
  259. package/website/dist/_worker.js/chunks/github-dark_CHCDNd2O.mjs +0 -1
  260. package/website/dist/_worker.js/chunks/github-light-default_DRbOW5RG.mjs +0 -1
  261. package/website/dist/_worker.js/chunks/github-light-high-contrast_tn_kWutM.mjs +0 -1
  262. package/website/dist/_worker.js/chunks/github-light_D9brYzot.mjs +0 -1
  263. package/website/dist/_worker.js/chunks/gleam_Dmhu1oxW.mjs +0 -1
  264. package/website/dist/_worker.js/chunks/glimmer-js_BfZbXy8A.mjs +0 -1
  265. package/website/dist/_worker.js/chunks/glimmer-ts_B9QVICrD.mjs +0 -1
  266. package/website/dist/_worker.js/chunks/glsl_DD2PPwOs.mjs +0 -1
  267. package/website/dist/_worker.js/chunks/gnuplot_D2OYChUX.mjs +0 -1
  268. package/website/dist/_worker.js/chunks/go_DYGFTe3h.mjs +0 -1
  269. package/website/dist/_worker.js/chunks/graphql_B7XsT3nH.mjs +0 -1
  270. package/website/dist/_worker.js/chunks/groovy_BO12Uwkl.mjs +0 -1
  271. package/website/dist/_worker.js/chunks/hack_CB2_ztCP.mjs +0 -1
  272. package/website/dist/_worker.js/chunks/haml_CyfDcDD3.mjs +0 -1
  273. package/website/dist/_worker.js/chunks/handlebars_CfpxpWm2.mjs +0 -1
  274. package/website/dist/_worker.js/chunks/haskell_jUeC5uN5.mjs +0 -1
  275. package/website/dist/_worker.js/chunks/haxe_B6GxP1WB.mjs +0 -1
  276. package/website/dist/_worker.js/chunks/hcl_DwoHV2oh.mjs +0 -1
  277. package/website/dist/_worker.js/chunks/hjson_DV7cJRk4.mjs +0 -1
  278. package/website/dist/_worker.js/chunks/hlsl_BlFCscPI.mjs +0 -1
  279. package/website/dist/_worker.js/chunks/houston_COBFG1Mx.mjs +0 -1
  280. package/website/dist/_worker.js/chunks/html-derivative_C9pJ337h.mjs +0 -1
  281. package/website/dist/_worker.js/chunks/html_D1OkrZS5.mjs +0 -1
  282. package/website/dist/_worker.js/chunks/http_DIGXRqvJ.mjs +0 -1
  283. package/website/dist/_worker.js/chunks/hxml_DEwh9i-c.mjs +0 -1
  284. package/website/dist/_worker.js/chunks/hy_DDoIgW1K.mjs +0 -1
  285. package/website/dist/_worker.js/chunks/imba_B00zbHo4.mjs +0 -1
  286. package/website/dist/_worker.js/chunks/index_BDWR1Q-q.mjs +0 -1861
  287. package/website/dist/_worker.js/chunks/ini_D7XQA_p8.mjs +0 -1
  288. package/website/dist/_worker.js/chunks/java_B9wdFd8K.mjs +0 -1
  289. package/website/dist/_worker.js/chunks/javascript_CLsPGOON.mjs +0 -1
  290. package/website/dist/_worker.js/chunks/jinja_jarBCAN1.mjs +0 -1
  291. package/website/dist/_worker.js/chunks/jison_oGg3J708.mjs +0 -1
  292. package/website/dist/_worker.js/chunks/json5_DlZ1Kyaa.mjs +0 -1
  293. package/website/dist/_worker.js/chunks/json_DaYk_FMp.mjs +0 -1
  294. package/website/dist/_worker.js/chunks/jsonc_DlwgfSDs.mjs +0 -1
  295. package/website/dist/_worker.js/chunks/jsonl_BbCCVaZF.mjs +0 -1
  296. package/website/dist/_worker.js/chunks/jsonnet_Dt-G75xe.mjs +0 -1
  297. package/website/dist/_worker.js/chunks/jssm_BtKFTj2A.mjs +0 -1
  298. package/website/dist/_worker.js/chunks/jsx_DDx_xAZ8.mjs +0 -1
  299. package/website/dist/_worker.js/chunks/julia_CK0lv68l.mjs +0 -1
  300. package/website/dist/_worker.js/chunks/kanagawa-dragon_BldAK3Oo.mjs +0 -1
  301. package/website/dist/_worker.js/chunks/kanagawa-lotus_DVM8FX9_.mjs +0 -1
  302. package/website/dist/_worker.js/chunks/kanagawa-wave_Dpih0AKP.mjs +0 -1
  303. package/website/dist/_worker.js/chunks/kotlin_kWneB9V_.mjs +0 -1
  304. package/website/dist/_worker.js/chunks/kusto_BKVATd95.mjs +0 -1
  305. package/website/dist/_worker.js/chunks/laserwave_BqatxsVl.mjs +0 -1
  306. package/website/dist/_worker.js/chunks/latex_LVDcGBbc.mjs +0 -1
  307. package/website/dist/_worker.js/chunks/lean_W7qo-5M2.mjs +0 -1
  308. package/website/dist/_worker.js/chunks/less_DFNwJnBH.mjs +0 -1
  309. package/website/dist/_worker.js/chunks/light-plus_Dp0AoWsO.mjs +0 -1
  310. package/website/dist/_worker.js/chunks/liquid_D24qs0pc.mjs +0 -1
  311. package/website/dist/_worker.js/chunks/log_IPWMXriF.mjs +0 -1
  312. package/website/dist/_worker.js/chunks/logo_C6KaatrQ.mjs +0 -1
  313. package/website/dist/_worker.js/chunks/lua_CwnEf-T7.mjs +0 -1
  314. package/website/dist/_worker.js/chunks/luau_Br3-CXjS.mjs +0 -1
  315. package/website/dist/_worker.js/chunks/make_UBNG-kOo.mjs +0 -1
  316. package/website/dist/_worker.js/chunks/markdown_C7mhJFCm.mjs +0 -1
  317. package/website/dist/_worker.js/chunks/marko_4tchUvI7.mjs +0 -1
  318. package/website/dist/_worker.js/chunks/material-theme-darker_SKtaNEPn.mjs +0 -1
  319. package/website/dist/_worker.js/chunks/material-theme-lighter_zOX_DZCH.mjs +0 -1
  320. package/website/dist/_worker.js/chunks/material-theme-ocean_BN9WbhdC.mjs +0 -1
  321. package/website/dist/_worker.js/chunks/material-theme-palenight_DT_covjH.mjs +0 -1
  322. package/website/dist/_worker.js/chunks/material-theme_6RpeM3kc.mjs +0 -1
  323. package/website/dist/_worker.js/chunks/matlab_DCOXsPKR.mjs +0 -1
  324. package/website/dist/_worker.js/chunks/mdc_B9gb2UFP.mjs +0 -1
  325. package/website/dist/_worker.js/chunks/mdx_DGU7Nu9u.mjs +0 -1
  326. package/website/dist/_worker.js/chunks/mermaid_B69URzsZ.mjs +0 -1
  327. package/website/dist/_worker.js/chunks/min-dark_BgxifOMI.mjs +0 -1
  328. package/website/dist/_worker.js/chunks/min-light_BrPjXxUp.mjs +0 -1
  329. package/website/dist/_worker.js/chunks/mipsasm_9U-4_t7k.mjs +0 -1
  330. package/website/dist/_worker.js/chunks/mojo_B0wt7ug3.mjs +0 -1
  331. package/website/dist/_worker.js/chunks/monokai_B6Pxpoyi.mjs +0 -1
  332. package/website/dist/_worker.js/chunks/move_1eid4CyR.mjs +0 -1
  333. package/website/dist/_worker.js/chunks/narrat_Ds6-p5JZ.mjs +0 -1
  334. package/website/dist/_worker.js/chunks/nextflow_v2N1Qlqa.mjs +0 -1
  335. package/website/dist/_worker.js/chunks/nginx_Bp9Ab2NH.mjs +0 -1
  336. package/website/dist/_worker.js/chunks/night-owl_CdwOw_sc.mjs +0 -1
  337. package/website/dist/_worker.js/chunks/nim_BXGDUe53.mjs +0 -1
  338. package/website/dist/_worker.js/chunks/nix_CUig1nJH.mjs +0 -1
  339. package/website/dist/_worker.js/chunks/noop-middleware_B8fH5jha.mjs +0 -10
  340. package/website/dist/_worker.js/chunks/nord_SPoG1iae.mjs +0 -1
  341. package/website/dist/_worker.js/chunks/nushell_DJw1Lca8.mjs +0 -1
  342. package/website/dist/_worker.js/chunks/objective-c_Bktzl_CO.mjs +0 -1
  343. package/website/dist/_worker.js/chunks/objective-cpp_CP4DWdDp.mjs +0 -1
  344. package/website/dist/_worker.js/chunks/ocaml_CeEAs7bZ.mjs +0 -1
  345. package/website/dist/_worker.js/chunks/one-dark-pro_-hIwCNMi.mjs +0 -1
  346. package/website/dist/_worker.js/chunks/one-light_DSmYvJ05.mjs +0 -1
  347. package/website/dist/_worker.js/chunks/pascal_C-S_Ms_o.mjs +0 -1
  348. package/website/dist/_worker.js/chunks/perl_CKamvo15.mjs +0 -1
  349. package/website/dist/_worker.js/chunks/php_BlmcX_F3.mjs +0 -1
  350. package/website/dist/_worker.js/chunks/plastic_Ryt8tVoA.mjs +0 -1
  351. package/website/dist/_worker.js/chunks/plsql_Cb3v7cBj.mjs +0 -1
  352. package/website/dist/_worker.js/chunks/po_DZbdNRlo.mjs +0 -1
  353. package/website/dist/_worker.js/chunks/poimandres_bYmE3_5d.mjs +0 -1
  354. package/website/dist/_worker.js/chunks/polar_pJkMGwoW.mjs +0 -1
  355. package/website/dist/_worker.js/chunks/postcss_BAXSOKgk.mjs +0 -1
  356. package/website/dist/_worker.js/chunks/powerquery_oITMGN4x.mjs +0 -1
  357. package/website/dist/_worker.js/chunks/powershell_6306-xIF.mjs +0 -1
  358. package/website/dist/_worker.js/chunks/prisma_DSDxnZGz.mjs +0 -1
  359. package/website/dist/_worker.js/chunks/prolog_CxG7tjZR.mjs +0 -1
  360. package/website/dist/_worker.js/chunks/proto_CS9ByXm1.mjs +0 -1
  361. package/website/dist/_worker.js/chunks/pug_BMtLJo6U.mjs +0 -1
  362. package/website/dist/_worker.js/chunks/puppet_BfeeSzee.mjs +0 -1
  363. package/website/dist/_worker.js/chunks/purescript_BFfueNaH.mjs +0 -1
  364. package/website/dist/_worker.js/chunks/python_Cc4Faapv.mjs +0 -1
  365. package/website/dist/_worker.js/chunks/qml_C1CTJTK8.mjs +0 -1
  366. package/website/dist/_worker.js/chunks/qmldir_nG1KaqKR.mjs +0 -1
  367. package/website/dist/_worker.js/chunks/qss_Cncxk263.mjs +0 -1
  368. package/website/dist/_worker.js/chunks/r_ChR54Ihi.mjs +0 -1
  369. package/website/dist/_worker.js/chunks/racket_BDrhptDs.mjs +0 -1
  370. package/website/dist/_worker.js/chunks/raku_07OUHa0P.mjs +0 -1
  371. package/website/dist/_worker.js/chunks/razor_DIP3INLa.mjs +0 -1
  372. package/website/dist/_worker.js/chunks/red_DOPXfj-6.mjs +0 -1
  373. package/website/dist/_worker.js/chunks/reg_B64SwEDj.mjs +0 -1
  374. package/website/dist/_worker.js/chunks/regexp_ButFGoB5.mjs +0 -1
  375. package/website/dist/_worker.js/chunks/rel_BWJAWqZD.mjs +0 -1
  376. package/website/dist/_worker.js/chunks/riscv_79gXlbsF.mjs +0 -1
  377. package/website/dist/_worker.js/chunks/rose-pine-dawn_DHIjVGd3.mjs +0 -1
  378. package/website/dist/_worker.js/chunks/rose-pine-moon_t86aEbs0.mjs +0 -1
  379. package/website/dist/_worker.js/chunks/rose-pine_BHgrcDCs.mjs +0 -1
  380. package/website/dist/_worker.js/chunks/rst_D3F4Fcpj.mjs +0 -1
  381. package/website/dist/_worker.js/chunks/ruby_Cs7vM9iv.mjs +0 -1
  382. package/website/dist/_worker.js/chunks/rust_DpyRVatH.mjs +0 -1
  383. package/website/dist/_worker.js/chunks/sas_DW45xZXN.mjs +0 -1
  384. package/website/dist/_worker.js/chunks/sass_C6SiMwN_.mjs +0 -1
  385. package/website/dist/_worker.js/chunks/scala_DlZOjNZk.mjs +0 -1
  386. package/website/dist/_worker.js/chunks/scheme_D2ezSJXu.mjs +0 -1
  387. package/website/dist/_worker.js/chunks/scss_DG5Spjqu.mjs +0 -1
  388. package/website/dist/_worker.js/chunks/sdbl_ZCYaj4VN.mjs +0 -1
  389. package/website/dist/_worker.js/chunks/shaderlab_CAcRkg1_.mjs +0 -1
  390. package/website/dist/_worker.js/chunks/shellscript_BWwhkDVh.mjs +0 -1
  391. package/website/dist/_worker.js/chunks/shellsession_BfEA3juK.mjs +0 -1
  392. package/website/dist/_worker.js/chunks/slack-dark_CL3lSpCc.mjs +0 -1
  393. package/website/dist/_worker.js/chunks/slack-ochin_DdZKOQVh.mjs +0 -1
  394. package/website/dist/_worker.js/chunks/smalltalk_DgilzSui.mjs +0 -1
  395. package/website/dist/_worker.js/chunks/snazzy-light_eJU08Pz_.mjs +0 -1
  396. package/website/dist/_worker.js/chunks/solarized-dark_Dg_YQywx.mjs +0 -1
  397. package/website/dist/_worker.js/chunks/solarized-light_BnIsrA6p.mjs +0 -1
  398. package/website/dist/_worker.js/chunks/solidity_DkseH8pQ.mjs +0 -1
  399. package/website/dist/_worker.js/chunks/soy_DU7bOYoG.mjs +0 -1
  400. package/website/dist/_worker.js/chunks/sparql_BuI1DBDH.mjs +0 -1
  401. package/website/dist/_worker.js/chunks/splunk_B8Ha9Pkg.mjs +0 -1
  402. package/website/dist/_worker.js/chunks/sql_BniHwea5.mjs +0 -1
  403. package/website/dist/_worker.js/chunks/ssh-config_CkE1GuVe.mjs +0 -1
  404. package/website/dist/_worker.js/chunks/stata_Dtqpbd_l.mjs +0 -1
  405. package/website/dist/_worker.js/chunks/stylus_CXTtglzO.mjs +0 -1
  406. package/website/dist/_worker.js/chunks/svelte_BjWYcUCN.mjs +0 -1
  407. package/website/dist/_worker.js/chunks/swift_BzHql_rM.mjs +0 -1
  408. package/website/dist/_worker.js/chunks/synthwave-84_DLRNhxNA.mjs +0 -1
  409. package/website/dist/_worker.js/chunks/system-verilog_ChyInPph.mjs +0 -1
  410. package/website/dist/_worker.js/chunks/systemd_Bi9Qa2qD.mjs +0 -1
  411. package/website/dist/_worker.js/chunks/talonscript_B3sH_Y-V.mjs +0 -1
  412. package/website/dist/_worker.js/chunks/tasl_BJ5yipRs.mjs +0 -1
  413. package/website/dist/_worker.js/chunks/tcl_CoJQjNoP.mjs +0 -1
  414. package/website/dist/_worker.js/chunks/templ_CrU7Ffil.mjs +0 -1
  415. package/website/dist/_worker.js/chunks/terraform_DT9JSFpC.mjs +0 -1
  416. package/website/dist/_worker.js/chunks/tex_5PKu2yA0.mjs +0 -1
  417. package/website/dist/_worker.js/chunks/tokyo-night_Buo8OK7-.mjs +0 -1
  418. package/website/dist/_worker.js/chunks/toml_CPuXX3oc.mjs +0 -1
  419. package/website/dist/_worker.js/chunks/ts-tags_D0M_1VSH.mjs +0 -1
  420. package/website/dist/_worker.js/chunks/tsv_CuivVNot.mjs +0 -1
  421. package/website/dist/_worker.js/chunks/tsx_MkuGr8MY.mjs +0 -1
  422. package/website/dist/_worker.js/chunks/turtle_BqgEPK7f.mjs +0 -1
  423. package/website/dist/_worker.js/chunks/twig_r1G9rpYJ.mjs +0 -1
  424. package/website/dist/_worker.js/chunks/typescript_Au5buqzM.mjs +0 -1
  425. package/website/dist/_worker.js/chunks/typespec_47rhBK_z.mjs +0 -1
  426. package/website/dist/_worker.js/chunks/typst_BAtuQLh-.mjs +0 -1
  427. package/website/dist/_worker.js/chunks/v_BIvWImHg.mjs +0 -1
  428. package/website/dist/_worker.js/chunks/vala_DYEacj30.mjs +0 -1
  429. package/website/dist/_worker.js/chunks/vb_CikQuqGJ.mjs +0 -1
  430. package/website/dist/_worker.js/chunks/verilog_BQRENwI-.mjs +0 -1
  431. package/website/dist/_worker.js/chunks/vesper_DA0kvTmj.mjs +0 -1
  432. package/website/dist/_worker.js/chunks/vhdl_DHscJIyg.mjs +0 -1
  433. package/website/dist/_worker.js/chunks/viml_F2pvMwvG.mjs +0 -1
  434. package/website/dist/_worker.js/chunks/vitesse-black_D9tjNzd0.mjs +0 -1
  435. package/website/dist/_worker.js/chunks/vitesse-dark_Bnm5d0hd.mjs +0 -1
  436. package/website/dist/_worker.js/chunks/vitesse-light_CHwbyjNR.mjs +0 -1
  437. package/website/dist/_worker.js/chunks/vue-html_DyYtbbMK.mjs +0 -1
  438. package/website/dist/_worker.js/chunks/vue_DofN6juy.mjs +0 -1
  439. package/website/dist/_worker.js/chunks/vyper_CiR0m-OV.mjs +0 -1
  440. package/website/dist/_worker.js/chunks/wasm_CwIGgRGf.mjs +0 -1
  441. package/website/dist/_worker.js/chunks/wasm_jKWhg0J0.mjs +0 -1
  442. package/website/dist/_worker.js/chunks/wenyan_DKvVZKXW.mjs +0 -1
  443. package/website/dist/_worker.js/chunks/wgsl_BOWZY7yw.mjs +0 -1
  444. package/website/dist/_worker.js/chunks/wikitext_CXDhhHPy.mjs +0 -1
  445. package/website/dist/_worker.js/chunks/wolfram_ChkmGnW0.mjs +0 -1
  446. package/website/dist/_worker.js/chunks/xml_DXH3hHIu.mjs +0 -1
  447. package/website/dist/_worker.js/chunks/xsl_DuP2mFjg.mjs +0 -1
  448. package/website/dist/_worker.js/chunks/yaml_IGiEkTge.mjs +0 -1
  449. package/website/dist/_worker.js/chunks/zenscript_59iXGyNw.mjs +0 -1
  450. package/website/dist/_worker.js/chunks/zig_DKzb0zdT.mjs +0 -1
  451. package/website/dist/_worker.js/index.js +0 -61
  452. package/website/dist/_worker.js/manifest_Bk6136-u.mjs +0 -98
  453. package/website/dist/_worker.js/pages/_image.astro.mjs +0 -24
  454. package/website/dist/_worker.js/pages/agents.astro.mjs +0 -1
  455. package/website/dist/_worker.js/pages/animation.astro.mjs +0 -1
  456. package/website/dist/_worker.js/pages/api/playground/render.astro.mjs +0 -25562
  457. package/website/dist/_worker.js/pages/api/playground/templates.astro.mjs +0 -92
  458. package/website/dist/_worker.js/pages/api/raw-markdown/_---path_.astro.mjs +0 -44
  459. package/website/dist/_worker.js/pages/config.astro.mjs +0 -1
  460. package/website/dist/_worker.js/pages/fonts.astro.mjs +0 -1
  461. package/website/dist/_worker.js/pages/getting-started.astro.mjs +0 -1
  462. package/website/dist/_worker.js/pages/helpers.astro.mjs +0 -1
  463. package/website/dist/_worker.js/pages/images.astro.mjs +0 -1
  464. package/website/dist/_worker.js/pages/index.astro.mjs +0 -1
  465. package/website/dist/_worker.js/pages/llm.txt.astro.mjs +0 -1
  466. package/website/dist/_worker.js/pages/playground/_example_.astro.mjs +0 -95
  467. package/website/dist/_worker.js/pages/playground.astro.mjs +0 -1
  468. package/website/dist/_worker.js/pages/preview.astro.mjs +0 -1
  469. package/website/dist/_worker.js/pages/sdk.astro.mjs +0 -1
  470. package/website/dist/_worker.js/pages/sitemap.xml.astro.mjs +0 -1
  471. package/website/dist/_worker.js/pages/styling.astro.mjs +0 -1
  472. package/website/dist/_worker.js/pages/templates.astro.mjs +0 -1
  473. package/website/dist/_worker.js/pages/video.astro.mjs +0 -1
  474. package/website/dist/_worker.js/renderers.mjs +0 -2
  475. package/website/dist/agents/index.html +0 -54
  476. package/website/dist/animation/index.html +0 -1505
  477. package/website/dist/config/index.html +0 -186
  478. package/website/dist/fonts/index.html +0 -200
  479. package/website/dist/getting-started/index.html +0 -109
  480. package/website/dist/helpers/index.html +0 -350
  481. package/website/dist/images/index.html +0 -337
  482. package/website/dist/index.html +0 -141
  483. package/website/dist/llm.txt +0 -3626
  484. package/website/dist/playground/index.html +0 -6
  485. package/website/dist/preview/index.html +0 -113
  486. package/website/dist/robots.txt +0 -40
  487. package/website/dist/sdk/index.html +0 -1588
  488. package/website/dist/sitemap.xml +0 -76
  489. package/website/dist/styling/index.html +0 -368
  490. package/website/dist/templates/index.html +0 -76
  491. package/website/dist/video/index.html +0 -354
  492. package/website/package-lock.json +0 -8099
  493. package/website/package.json +0 -43
  494. package/website/public/.gitkeep +0 -5
  495. package/website/public/robots.txt +0 -40
  496. package/website/templates/og-image.tsx +0 -60
  497. package/website/wrangler.toml +0 -9
@@ -1,469 +0,0 @@
1
- /**
2
- * Test suite for user-generated templates
3
- * - defineTemplateFromSource (code editor)
4
- * - defineTemplateFromSchema (visual builder)
5
- */
6
-
7
- import { defineTemplateFromSource, defineTemplateFromSchema, renderImage, renderVideo } from './dist/sdk/index.js';
8
- import React from 'react';
9
- import fs from 'fs/promises';
10
-
11
- const h = React.createElement;
12
- let passed = 0;
13
- let failed = 0;
14
-
15
- function test(name, fn) {
16
- try {
17
- fn();
18
- console.log(`โœ“ ${name}`);
19
- passed++;
20
- } catch (error) {
21
- console.error(`โœ— ${name}`);
22
- console.error(` ${error.message}`);
23
- failed++;
24
- }
25
- }
26
-
27
- async function asyncTest(name, fn) {
28
- try {
29
- await fn();
30
- console.log(`โœ“ ${name}`);
31
- passed++;
32
- } catch (error) {
33
- console.error(`โœ— ${name}`);
34
- console.error(` ${error.message}`);
35
- failed++;
36
- }
37
- }
38
-
39
- console.log('Testing defineTemplateFromSource\n');
40
-
41
- // Test 1: Basic source template
42
- await asyncTest('Source: Basic image template', async () => {
43
- const source = `
44
- export const meta = {
45
- name: 'test',
46
- type: 'image',
47
- size: { width: 100, height: 100 }
48
- };
49
-
50
- export default ({ tw }) => {
51
- const h = React.createElement;
52
- return h('div', { style: tw('bg-blue-500 w-full h-full') });
53
- };
54
- `;
55
-
56
- const template = defineTemplateFromSource(source);
57
- if (template.name !== 'test') throw new Error('Template name incorrect');
58
- if (template.type !== 'image') throw new Error('Template type incorrect');
59
-
60
- const png = await renderImage(template, {});
61
- if (!Buffer.isBuffer(png)) throw new Error('Should return buffer');
62
- });
63
-
64
- // Test 2: Source template with props
65
- await asyncTest('Source: Template with props', async () => {
66
- const source = `
67
- export const meta = {
68
- name: 'with-props',
69
- type: 'image',
70
- size: { width: 200, height: 100 }
71
- };
72
-
73
- export default ({ tw, title }) => {
74
- const h = React.createElement;
75
- return h('div', { style: tw('flex flex-col bg-white p-4') },
76
- h('h1', { style: tw('text-black') }, title)
77
- );
78
- };
79
- `;
80
-
81
- const template = defineTemplateFromSource(source);
82
- const png = await renderImage(template, { title: 'Hello' });
83
- if (!Buffer.isBuffer(png)) throw new Error('Should return buffer');
84
- });
85
-
86
- // Test 3: Source template with config
87
- await asyncTest('Source: Template with config', async () => {
88
- const source = `
89
- export const meta = {
90
- name: 'with-config',
91
- type: 'image',
92
- size: { width: 200, height: 100 }
93
- };
94
-
95
- export default ({ tw }) => {
96
- const h = React.createElement;
97
- return h('div', { style: tw('bg-primary p-4') });
98
- };
99
- `;
100
-
101
- const template = defineTemplateFromSource(source, {
102
- config: {
103
- colors: { primary: '#ff0000' },
104
- },
105
- });
106
-
107
- const svg = await renderImage(template, {}, { format: 'svg' });
108
- const svgStr = svg.toString();
109
- if (!svgStr.includes('#ff0000')) throw new Error('Config colors not applied');
110
- });
111
-
112
- // Test 4: Source video template
113
- await asyncTest('Source: Video template', async () => {
114
- const source = `
115
- export const meta = {
116
- name: 'video-test',
117
- type: 'video',
118
- size: { width: 100, height: 100 },
119
- video: { fps: 2, duration: 0.5 }
120
- };
121
-
122
- export default ({ tw }) => {
123
- const h = React.createElement;
124
- return h('div', {
125
- style: tw('bg-blue-500 w-full h-full enter-fade-in/0/500')
126
- });
127
- };
128
- `;
129
-
130
- const template = defineTemplateFromSource(source);
131
- if (template.type !== 'video') throw new Error('Should be video type');
132
-
133
- const mp4 = await renderVideo(template, {});
134
- if (!Buffer.isBuffer(mp4)) throw new Error('Should return buffer');
135
- if (mp4.length === 0) throw new Error('Video should have content');
136
- });
137
-
138
- // Test 5: Invalid source - no meta
139
- test('Source: Error on missing meta', () => {
140
- const source = `
141
- export default () => {
142
- return React.createElement('div', {}, 'test');
143
- };
144
- `;
145
-
146
- try {
147
- defineTemplateFromSource(source);
148
- throw new Error('Should have thrown error');
149
- } catch (error) {
150
- if (!error.message.includes('meta')) throw new Error('Should mention meta');
151
- }
152
- });
153
-
154
- // Test 6: Invalid source - no default export
155
- test('Source: Error on missing default export', () => {
156
- const source = `
157
- export const meta = {
158
- name: 'test',
159
- size: { width: 100, height: 100 }
160
- };
161
- `;
162
-
163
- try {
164
- defineTemplateFromSource(source);
165
- throw new Error('Should have thrown error');
166
- } catch (error) {
167
- if (!error.message.includes('default')) throw new Error('Should mention default export');
168
- }
169
- });
170
-
171
- console.log('\nTesting defineTemplateFromSchema\n');
172
-
173
- // Test 7: Basic schema template
174
- await asyncTest('Schema: Basic template', async () => {
175
- const schema = {
176
- name: 'basic-schema',
177
- size: { width: 200, height: 100 },
178
- elements: [
179
- {
180
- type: 'div',
181
- className: 'bg-blue-500 w-full h-full',
182
- },
183
- ],
184
- };
185
-
186
- const template = defineTemplateFromSchema(schema);
187
- if (template.name !== 'basic-schema') throw new Error('Name incorrect');
188
-
189
- const png = await renderImage(template, {});
190
- if (!Buffer.isBuffer(png)) throw new Error('Should return buffer');
191
- });
192
-
193
- // Test 8: Schema with text interpolation
194
- await asyncTest('Schema: Text interpolation', async () => {
195
- const schema = {
196
- name: 'with-text',
197
- size: { width: 300, height: 150 },
198
- elements: [
199
- {
200
- type: 'div',
201
- className: 'flex flex-col bg-white p-4 w-full h-full',
202
- children: [
203
- {
204
- type: 'h1',
205
- className: 'text-black',
206
- content: '{{title}}',
207
- },
208
- ],
209
- },
210
- ],
211
- };
212
-
213
- const template = defineTemplateFromSchema(schema);
214
- const svg = await renderImage(template, { title: 'Test Title' }, { format: 'svg' });
215
- // SVG renders text as paths, so we can't check for literal strings
216
- // Just verify it renders without error and has content
217
- if (!Buffer.isBuffer(svg)) throw new Error('Should return buffer');
218
- if (svg.length === 0) throw new Error('Should have content');
219
- });
220
-
221
- // Test 9: Schema with nested children
222
- await asyncTest('Schema: Nested elements', async () => {
223
- const schema = {
224
- name: 'nested',
225
- size: { width: 400, height: 200 },
226
- elements: [
227
- {
228
- type: 'div',
229
- className: 'flex flex-col w-full h-full bg-white p-4',
230
- children: [
231
- {
232
- type: 'h1',
233
- className: 'text-2xl font-bold',
234
- content: '{{title}}',
235
- },
236
- {
237
- type: 'p',
238
- className: 'text-base',
239
- content: '{{description}}',
240
- },
241
- ],
242
- },
243
- ],
244
- };
245
-
246
- const template = defineTemplateFromSchema(schema);
247
- const svg = await renderImage(
248
- template,
249
- { title: 'Nested', description: 'Works!' },
250
- { format: 'svg' }
251
- );
252
- // SVG renders text as paths, just verify it has content
253
- if (!Buffer.isBuffer(svg)) throw new Error('Should return buffer');
254
- if (svg.length === 0) throw new Error('Should have content');
255
- });
256
-
257
- // Test 10: Schema with config
258
- await asyncTest('Schema: With config', async () => {
259
- const schema = {
260
- name: 'with-config',
261
- size: { width: 200, height: 100 },
262
- config: {
263
- colors: {
264
- primary: '#00ff00',
265
- background: '#ffffff',
266
- },
267
- },
268
- elements: [
269
- {
270
- type: 'div',
271
- className: 'bg-primary w-full h-full',
272
- },
273
- ],
274
- };
275
-
276
- const template = defineTemplateFromSchema(schema);
277
- const svg = await renderImage(template, {}, { format: 'svg' });
278
- const svgStr = svg.toString();
279
- if (!svgStr.includes('#00ff00')) throw new Error('Primary color not applied');
280
- });
281
-
282
- // Test 11: Schema with multiple root elements
283
- await asyncTest('Schema: Multiple root elements', async () => {
284
- const schema = {
285
- name: 'multi-root',
286
- size: { width: 400, height: 200 },
287
- elements: [
288
- {
289
- type: 'div',
290
- className: 'flex w-full h-full bg-white',
291
- children: [
292
- {
293
- type: 'div',
294
- className: 'flex-1 bg-red-500',
295
- content: 'First',
296
- },
297
- {
298
- type: 'div',
299
- className: 'flex-1 bg-blue-500',
300
- content: 'Second',
301
- },
302
- ],
303
- },
304
- ],
305
- };
306
-
307
- const template = defineTemplateFromSchema(schema);
308
- const svg = await renderImage(template, {}, { format: 'svg' });
309
- // SVG renders text as paths, just verify it has content
310
- if (!Buffer.isBuffer(svg)) throw new Error('Should return buffer');
311
- if (svg.length === 0) throw new Error('Should have content');
312
- });
313
-
314
- // Test 12: Schema video template
315
- await asyncTest('Schema: Video template', async () => {
316
- const schema = {
317
- name: 'video-schema',
318
- type: 'video',
319
- size: { width: 100, height: 100 },
320
- video: { fps: 2, duration: 0.5 },
321
- elements: [
322
- {
323
- type: 'div',
324
- className: 'bg-purple-500 w-full h-full',
325
- },
326
- ],
327
- };
328
-
329
- const template = defineTemplateFromSchema(schema);
330
- if (template.type !== 'video') throw new Error('Should be video type');
331
-
332
- const mp4 = await renderVideo(template, {});
333
- if (!Buffer.isBuffer(mp4)) throw new Error('Should return buffer');
334
- if (mp4.length === 0) throw new Error('Video should have content');
335
- });
336
-
337
- // Test 13: Schema with img element
338
- await asyncTest('Schema: Image element with interpolation', async () => {
339
- const schema = {
340
- name: 'with-image',
341
- size: { width: 400, height: 200 },
342
- elements: [
343
- {
344
- type: 'div',
345
- className: 'bg-white w-full h-full flex items-center justify-center',
346
- children: [
347
- {
348
- type: 'img',
349
- src: '{{imageUrl}}',
350
- style: { width: '128px', height: '128px' },
351
- },
352
- ],
353
- },
354
- ],
355
- };
356
-
357
- const template = defineTemplateFromSchema(schema);
358
- // Use a minimal valid 1x1 red PNG
359
- const redPixel = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PchI7wAAAABJRU5ErkJggg==';
360
- const svg = await renderImage(
361
- template,
362
- { imageUrl: redPixel },
363
- { format: 'svg' }
364
- );
365
- const svgStr = svg.toString();
366
- if (!svgStr.includes('data:image/png')) throw new Error('Image src not interpolated');
367
- });
368
-
369
- // Test 14: Schema error - empty elements
370
- test('Schema: Error on empty elements', () => {
371
- const schema = {
372
- name: 'empty',
373
- size: { width: 100, height: 100 },
374
- elements: [],
375
- };
376
-
377
- try {
378
- const template = defineTemplateFromSchema(schema);
379
- // Try to render - should fail
380
- renderImage(template, {});
381
- throw new Error('Should have thrown error');
382
- } catch (error) {
383
- if (!error.message.includes('element')) throw new Error('Should mention elements');
384
- }
385
- });
386
-
387
- // Test 15: Complex real-world schema
388
- await asyncTest('Schema: Complex real-world example', async () => {
389
- const schema = {
390
- name: 'og-card',
391
- size: { width: 1200, height: 630 },
392
- config: {
393
- colors: {
394
- primary: '#3b82f6',
395
- secondary: '#8b5cf6',
396
- background: '#ffffff',
397
- text: '#1f2937',
398
- },
399
- },
400
- elements: [
401
- {
402
- type: 'div',
403
- className: 'flex w-full h-full bg-background',
404
- children: [
405
- {
406
- type: 'div',
407
- className: 'flex flex-col w-1/3 bg-primary p-8 justify-between',
408
- children: [
409
- {
410
- type: 'h2',
411
- className: 'text-2xl font-bold text-white',
412
- content: '{{category}}',
413
- },
414
- {
415
- type: 'p',
416
- className: 'text-white/80',
417
- content: '{{date}}',
418
- },
419
- ],
420
- },
421
- {
422
- type: 'div',
423
- className: 'flex flex-col flex-1 p-12 justify-center',
424
- children: [
425
- {
426
- type: 'h1',
427
- className: 'text-6xl font-bold text-text mb-4',
428
- content: '{{title}}',
429
- },
430
- {
431
- type: 'div',
432
- className: 'w-24 h-2 bg-secondary mb-4',
433
- },
434
- {
435
- type: 'p',
436
- className: 'text-2xl text-text/70',
437
- content: '{{description}}',
438
- },
439
- ],
440
- },
441
- ],
442
- },
443
- ],
444
- };
445
-
446
- const template = defineTemplateFromSchema(schema);
447
- const png = await renderImage(template, {
448
- category: 'TECHNOLOGY',
449
- date: 'March 2024',
450
- title: 'The Future of AI',
451
- description: 'Exploring next-generation artificial intelligence',
452
- });
453
-
454
- if (!Buffer.isBuffer(png)) throw new Error('Should return buffer');
455
- if (png.length === 0) throw new Error('Image should have content');
456
-
457
- // Save for visual inspection
458
- await fs.writeFile('test-complex-schema.png', png);
459
- });
460
-
461
- // Summary
462
- console.log('\n' + '='.repeat(50));
463
- console.log(`Tests passed: ${passed}`);
464
- console.log(`Tests failed: ${failed}`);
465
- console.log('='.repeat(50));
466
-
467
- if (failed > 0) {
468
- process.exit(1);
469
- }
@@ -1,19 +0,0 @@
1
- import React from 'react';
2
-
3
- export const meta = {
4
- name: 'test-static-debug',
5
- description: 'Simple static image for debug testing',
6
- type: 'image' as const,
7
- size: { width: 600, height: 400 },
8
- };
9
-
10
- export default function TestStatic({ tw }: { tw: any }) {
11
- return (
12
- <div style={tw('flex items-center justify-center w-full h-full bg-gradient-to-br from-blue-500 to-purple-600')}>
13
- <div style={tw('flex flex-col items-center gap-4 p-8 bg-white rounded-lg')}>
14
- <h1 style={tw('text-4xl font-bold text-gray-900')}>Debug Test</h1>
15
- <p style={tw('text-lg text-gray-600')}>Testing Satori debug mode</p>
16
- </div>
17
- </div>
18
- );
19
- }
@@ -1,63 +0,0 @@
1
- # Test Templates
2
-
3
- This folder contains test templates and scripts to verify loopwind functionality.
4
-
5
- ## CLI Tests
6
-
7
- Test all template types using the CLI:
8
-
9
- ```bash
10
- # Create output directory
11
- mkdir -p output
12
-
13
- # Static image
14
- node ../dist/cli.js render static-image --format png --out output/static-image.png '{"title":"Hello","subtitle":"World"}'
15
-
16
- # QR code
17
- node ../dist/cli.js render qr-code --format png --out output/qr-code.png '{"url":"https://example.com","title":"Test QR"}'
18
-
19
- # Animated intro (transitions)
20
- node ../dist/cli.js render animated-intro --format mp4 --out output/animated-intro.mp4 '{"title":"Welcome","subtitle":"Test Subtitle"}'
21
-
22
- # Video loops
23
- node ../dist/cli.js render video-loops --format mp4 --out output/video-loops.mp4 '{"title":"Loops"}'
24
-
25
- # Composite (embedded templates)
26
- node ../dist/cli.js render composite --format png --out output/composite.png '{"title":"Test Composite","qrUrl":"https://example.com"}'
27
-
28
- # Easing test
29
- node ../dist/cli.js render easing-test --format mp4 --out output/easing-test.mp4 '{}'
30
- ```
31
-
32
- ## SDK Tests
33
-
34
- Test programmatic rendering with the SDK:
35
-
36
- ```bash
37
- node test-sdk.mjs
38
- ```
39
-
40
- This tests:
41
- 1. Static image rendering (PNG, JPEG, WebP formats)
42
- 2. Animated video rendering with transitions
43
- 3. QR code generation
44
- 4. Different output formats
45
-
46
- ## Templates
47
-
48
- | Template | Type | Description |
49
- |----------|------|-------------|
50
- | `static-image` | image | Basic OG image with gradient background |
51
- | `qr-code` | image | QR code generation with `qr()` helper |
52
- | `animated-intro` | video | Transition animations (bounce-in, fade-in-up) |
53
- | `video-loops` | video | Loop animations (pulse, bounce, spin, float, wiggle, ping) |
54
- | `composite` | image | Template composition with `template()` helper |
55
- | `easing-test` | video | Visual comparison of easing functions |
56
-
57
- ## Features Tested
58
-
59
- - **Helpers**: `tw()`, `qr()`, `template()`
60
- - **Animations**: Transition animations with progress, loop animations with frame
61
- - **Easing**: linear, ease-in, ease-out, ease-in-out, cubic, quart variants
62
- - **Formats**: PNG, JPEG, WebP, MP4
63
- - **SDK**: `defineTemplate()`, `renderImage()`, `renderVideo()`
@@ -1,17 +0,0 @@
1
- import React from 'react';
2
- const { createElement: h } = React;
3
-
4
- export const meta = {
5
- name: 'test-config-template',
6
- type: 'image',
7
- size: { width: 400, height: 400 },
8
- props: {
9
- title: 'string',
10
- },
11
- };
12
-
13
- export default function ConfigTest({ tw, title }) {
14
- return h('div', { style: tw('flex items-center justify-center w-full h-full bg-background') },
15
- h('h1', { style: tw('text-4xl font-bold text-primary') }, title)
16
- );
17
- }
@@ -1,4 +0,0 @@
1
- {
2
- "title": "Welcome!",
3
- "subtitle": "Built with loopwind"
4
- }
@@ -1,44 +0,0 @@
1
- #!/bin/bash
2
-
3
- # Test script for loopwind templates
4
- # Outputs to test-templates/output/
5
-
6
- cd "$(dirname "$0")"
7
-
8
- # Use local build
9
- LW="node ../dist/cli.js"
10
-
11
- echo "๐Ÿงช Running loopwind template tests..."
12
- echo ""
13
-
14
- mkdir -p output
15
-
16
- # Static image test
17
- echo "๐Ÿ“ท Testing static-image..."
18
- $LW render static-image '{"title":"Hello World","subtitle":"Testing static image template"}' --out output/static-image.png
19
-
20
- # QR code test
21
- echo "๐Ÿ“ฑ Testing qr-code..."
22
- $LW render qr-code '{"url":"https://loopwind.dev","title":"Scan to visit"}' --out output/qr-code.png
23
-
24
- # Composite template test
25
- echo "๐Ÿงฉ Testing composite..."
26
- $LW render composite '{"title":"Composite Test","qrUrl":"https://github.com/tomtev/loopwind"}' --out output/composite.png
27
-
28
- # Animated intro video test
29
- echo "๐ŸŽฌ Testing animated-intro..."
30
- $LW render animated-intro '{"title":"Welcome","subtitle":"Animation classes test"}' --out output/animated-intro.mp4
31
-
32
- # Video loops test
33
- echo "๐Ÿ”„ Testing video-loops..."
34
- $LW render video-loops '{"title":"Loop Test"}' --out output/video-loops.mp4
35
-
36
- # Easing test video
37
- echo "๐Ÿ“ˆ Testing easing-test..."
38
- $LW render easing-test '{}' --out output/easing-test.mp4
39
-
40
- echo ""
41
- echo "โœ… All tests complete! Check output/ for results."
42
- echo ""
43
- echo "Output files:"
44
- ls -la output/