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,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/