loopwind 0.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/FONTS.md +156 -0
- package/HELPERS_DEMO.md +134 -0
- package/PROJECT_STRUCTURE.md +286 -0
- package/PUBLISHING.md +171 -0
- package/README.md +1020 -0
- package/REGISTRY_SETUP.md +427 -0
- package/SHADCN_INTEGRATION.md +269 -0
- package/TAILWIND.md +228 -0
- package/TEMPLATE_SOURCES.md +363 -0
- package/_dsgn/templates/banner-hero/banner-hero.tsx +57 -0
- package/_dsgn/templates/banner-hero/meta.json +14 -0
- package/_dsgn/templates/composite-card/meta.json +16 -0
- package/_dsgn/templates/composite-card/template.tsx +44 -0
- package/_dsgn/templates/image/meta.json +13 -0
- package/_dsgn/templates/image/template.tsx +28 -0
- package/_dsgn/templates/kitchen-sink/meta.json +13 -0
- package/_dsgn/templates/kitchen-sink/template.tsx +72 -0
- package/_dsgn/templates/qr-card/meta.json +14 -0
- package/_dsgn/templates/qr-card/template.tsx +39 -0
- package/_dsgn/templates/test-parent/child/meta.json +11 -0
- package/_dsgn/templates/test-parent/child/template.tsx +27 -0
- package/_dsgn/templates/test-parent/meta.json +12 -0
- package/_dsgn/templates/test-parent/template.tsx +30 -0
- package/_dsgn/templates/test-sibling/meta.json +11 -0
- package/_dsgn/templates/test-sibling/template.tsx +20 -0
- package/_dsgn/templates/video/.tmp/template-1763421345296.mjs +43 -0
- package/_dsgn/templates/video/.tmp/template-1763421362228.mjs +43 -0
- package/_dsgn/templates/video/.tmp/template-1763421377706.mjs +43 -0
- package/_dsgn/templates/video/meta.json +17 -0
- package/_dsgn/templates/video/template.tsx +48 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +70 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/add.d.ts +6 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +86 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/default.d.ts +2 -0
- package/dist/commands/default.d.ts.map +1 -0
- package/dist/commands/default.js +69 -0
- package/dist/commands/default.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +75 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +83 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/preview.d.ts +3 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +296 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/render.d.ts +10 -0
- package/dist/commands/render.d.ts.map +1 -0
- package/dist/commands/render.js +204 -0
- package/dist/commands/render.js.map +1 -0
- package/dist/commands/validate.d.ts +2 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +107 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/default-templates/AGENTS.md +229 -0
- package/dist/default-templates/image/meta.json +13 -0
- package/dist/default-templates/image/template.d.ts +20 -0
- package/dist/default-templates/image/template.d.ts.map +1 -0
- package/dist/default-templates/image/template.js +18 -0
- package/dist/default-templates/image/template.js.map +1 -0
- package/dist/default-templates/image/template.tsx +20 -0
- package/dist/default-templates/image-template/meta.json +13 -0
- package/dist/default-templates/image-template/template.tsx +19 -0
- package/dist/default-templates/kitchen-sink/meta.json +13 -0
- package/dist/default-templates/kitchen-sink/template.tsx +64 -0
- package/dist/default-templates/page/meta.json +17 -0
- package/dist/default-templates/page/template.tsx +37 -0
- package/dist/default-templates/video/meta.json +17 -0
- package/dist/default-templates/video/template.d.ts +26 -0
- package/dist/default-templates/video/template.d.ts.map +1 -0
- package/dist/default-templates/video/template.js +33 -0
- package/dist/default-templates/video/template.js.map +1 -0
- package/dist/default-templates/video/template.tsx +37 -0
- package/dist/default-templates/video-template/meta.json +17 -0
- package/dist/default-templates/video-template/template.tsx +36 -0
- package/dist/default-templates/website/meta.json +16 -0
- package/dist/default-templates/website/pages/home.tsx +17 -0
- package/dist/default-templates/website/parts/footer.tsx +17 -0
- package/dist/default-templates/website/parts/header.tsx +17 -0
- package/dist/default-templates/website/template.tsx +17 -0
- package/dist/default-templates/website-template/meta.json +16 -0
- package/dist/default-templates/website-template/pages/home.tsx +16 -0
- package/dist/default-templates/website-template/parts/footer.tsx +16 -0
- package/dist/default-templates/website-template/parts/header.tsx +16 -0
- package/dist/default-templates/website-template/template.tsx +16 -0
- package/dist/lib/config.d.ts +34 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +248 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/constants.d.ts +7 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +12 -0
- package/dist/lib/constants.js.map +1 -0
- package/dist/lib/helpers.d.ts +29 -0
- package/dist/lib/helpers.d.ts.map +1 -0
- package/dist/lib/helpers.js +159 -0
- package/dist/lib/helpers.js.map +1 -0
- package/dist/lib/installer.d.ts +51 -0
- package/dist/lib/installer.d.ts.map +1 -0
- package/dist/lib/installer.js +215 -0
- package/dist/lib/installer.js.map +1 -0
- package/dist/lib/renderer.d.ts +51 -0
- package/dist/lib/renderer.d.ts.map +1 -0
- package/dist/lib/renderer.js +524 -0
- package/dist/lib/renderer.js.map +1 -0
- package/dist/lib/tailwind-config-loader.d.ts +47 -0
- package/dist/lib/tailwind-config-loader.d.ts.map +1 -0
- package/dist/lib/tailwind-config-loader.js +432 -0
- package/dist/lib/tailwind-config-loader.js.map +1 -0
- package/dist/lib/tailwind-detector.d.ts +36 -0
- package/dist/lib/tailwind-detector.d.ts.map +1 -0
- package/dist/lib/tailwind-detector.js +156 -0
- package/dist/lib/tailwind-detector.js.map +1 -0
- package/dist/lib/tailwind.d.ts +8 -0
- package/dist/lib/tailwind.d.ts.map +1 -0
- package/dist/lib/tailwind.js +994 -0
- package/dist/lib/tailwind.js.map +1 -0
- package/dist/lib/template-validator.d.ts +22 -0
- package/dist/lib/template-validator.d.ts.map +1 -0
- package/dist/lib/template-validator.js +174 -0
- package/dist/lib/template-validator.js.map +1 -0
- package/dist/lib/utils.d.ts +44 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +207 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/version-check.d.ts +16 -0
- package/dist/lib/version-check.d.ts.map +1 -0
- package/dist/lib/version-check.js +88 -0
- package/dist/lib/version-check.js.map +1 -0
- package/dist/lib/video-renderer.d.ts +32 -0
- package/dist/lib/video-renderer.d.ts.map +1 -0
- package/dist/lib/video-renderer.js +226 -0
- package/dist/lib/video-renderer.js.map +1 -0
- package/dist/sdk/index.d.ts +58 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +119 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/template.d.ts +40 -0
- package/dist/sdk/template.d.ts.map +1 -0
- package/dist/sdk/template.js +60 -0
- package/dist/sdk/template.js.map +1 -0
- package/dist/types/config.d.ts +62 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +47 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/template.d.ts +79 -0
- package/dist/types/template.d.ts.map +1 -0
- package/dist/types/template.js +2 -0
- package/dist/types/template.js.map +1 -0
- package/examples/nextjs-api/README.md +180 -0
- package/examples/nextjs-api/package.json +21 -0
- package/examples/nextjs-api/pages/api/intro-video.ts +53 -0
- package/examples/nextjs-api/pages/api/og-image.ts +50 -0
- package/netlify.toml +13 -0
- package/package.json +84 -0
- package/patches/satori+0.18.3.patch +13 -0
- package/test-templates/TESTS.md +63 -0
- package/test-templates/_dsgn/templates/absolute-spin/meta.json +7 -0
- package/test-templates/_dsgn/templates/absolute-spin/template.tsx +16 -0
- package/test-templates/_dsgn/templates/animated-intro/.tmp/template-1763468771640.mjs +7 -0
- package/test-templates/_dsgn/templates/animated-intro/meta.json +10 -0
- package/test-templates/_dsgn/templates/animated-intro/template.tsx +23 -0
- package/test-templates/_dsgn/templates/centered-spin/.tmp/template-1763468525386.mjs +7 -0
- package/test-templates/_dsgn/templates/centered-spin/meta.json +7 -0
- package/test-templates/_dsgn/templates/centered-spin/template.tsx +11 -0
- package/test-templates/_dsgn/templates/composite/.tmp/template-1763468815645.mjs +7 -0
- package/test-templates/_dsgn/templates/composite/meta.json +9 -0
- package/test-templates/_dsgn/templates/composite/template.tsx +23 -0
- package/test-templates/_dsgn/templates/easing-test/.tmp/template-1763468824501.mjs +7 -0
- package/test-templates/_dsgn/templates/easing-test/meta.json +7 -0
- package/test-templates/_dsgn/templates/easing-test/template.tsx +47 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466364336.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466584319.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466667797.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466746504.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763466930225.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467004552.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467060334.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467124493.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467174690.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467359134.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467451928.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467758275.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763467985201.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468020563.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468090428.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468211036.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/.tmp/template-1763468394057.mjs +10 -0
- package/test-templates/_dsgn/templates/minimal-spin/meta.json +7 -0
- package/test-templates/_dsgn/templates/minimal-spin/template.tsx +13 -0
- package/test-templates/_dsgn/templates/no-origin-spin/meta.json +7 -0
- package/test-templates/_dsgn/templates/no-origin-spin/template.tsx +10 -0
- package/test-templates/_dsgn/templates/opacity-test/meta.json +7 -0
- package/test-templates/_dsgn/templates/opacity-test/template.tsx +9 -0
- package/test-templates/_dsgn/templates/qr-code/.tmp/template-1763468758954.mjs +17 -0
- package/test-templates/_dsgn/templates/qr-code/.tmp/template-1763468815672.mjs +17 -0
- package/test-templates/_dsgn/templates/qr-code/meta.json +9 -0
- package/test-templates/_dsgn/templates/qr-code/template.tsx +20 -0
- package/test-templates/_dsgn/templates/rotation-abs-test/meta.json +7 -0
- package/test-templates/_dsgn/templates/rotation-abs-test/template.tsx +15 -0
- package/test-templates/_dsgn/templates/rotation-corner/meta.json +7 -0
- package/test-templates/_dsgn/templates/rotation-corner/template.tsx +12 -0
- package/test-templates/_dsgn/templates/rotation-test/meta.json +7 -0
- package/test-templates/_dsgn/templates/rotation-test/template.tsx +12 -0
- package/test-templates/_dsgn/templates/shake-test/meta.json +7 -0
- package/test-templates/_dsgn/templates/shake-test/template.tsx +12 -0
- package/test-templates/_dsgn/templates/static-image/.tmp/template-1763468746271.mjs +7 -0
- package/test-templates/_dsgn/templates/static-image/meta.json +9 -0
- package/test-templates/_dsgn/templates/static-image/template.tsx +19 -0
- package/test-templates/_dsgn/templates/translate-test/meta.json +7 -0
- package/test-templates/_dsgn/templates/translate-test/template.tsx +9 -0
- package/test-templates/_dsgn/templates/video-loops/.tmp/template-1763468793192.mjs +15 -0
- package/test-templates/_dsgn/templates/video-loops/meta.json +9 -0
- package/test-templates/_dsgn/templates/video-loops/template.tsx +39 -0
- package/test-templates/_dsgn/templates/wrapped-spin/meta.json +7 -0
- package/test-templates/_dsgn/templates/wrapped-spin/template.tsx +17 -0
- package/test-templates/compare-svgs.mjs +30 -0
- package/test-templates/convert-frames.mjs +15 -0
- package/test-templates/debug-rotation.mjs +25 -0
- package/test-templates/run-tests.sh +39 -0
- package/test-templates/test-sdk.mjs +115 -0
- package/website/.astro/settings.json +5 -0
- package/website/.astro/types.d.ts +1 -0
- package/website/README.md +112 -0
- package/website/astro.config.mjs +18 -0
- package/website/dist/_astro/fonts.DHdiHGBO.css +1 -0
- package/website/dist/fonts/index.html +193 -0
- package/website/dist/helpers/index.html +166 -0
- package/website/dist/images/index.html +314 -0
- package/website/dist/index.html +219 -0
- package/website/dist/llm.txt +2448 -0
- package/website/dist/styling/index.html +365 -0
- package/website/dist/templates/index.html +124 -0
- package/website/dist/video/index.html +636 -0
- package/website/package-lock.json +7606 -0
- package/website/package.json +23 -0
- package/website/public/robots.txt +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG/F;;GAEG;AACH,SAAS,YAAY,CAAC,IAAS,EAAE,YAAoB;IACnD,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,wBAAwB;IACxB,IAAI,CAAC,IAAI,CAAC,IAAI;QAAE,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC5D,IAAI,CAAC,IAAI,CAAC,WAAW;QAAE,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;IAE1E,aAAa;IACb,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;SAAM,CAAC;QACN,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,KAAK,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;QACpF,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ;YAAE,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IACxF,CAAC;IAED,cAAc;IACd,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QAClD,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;IAED,6CAA6C;IAC7C,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,wBAAwB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/D,CAAC;IAED,+BAA+B;IAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACzC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;QACvD,MAAM,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,YAAqB;IACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAEvD,IAAI,CAAC;QACH,MAAM,mBAAmB,GAAG,YAAY;YACtC,CAAC,CAAC,CAAC,YAAY,CAAC;YAChB,CAAC,CAAC,MAAM,qBAAqB,EAAE,CAAC;QAElC,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACtD,OAAO;QACT,CAAC;QAED,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,cAAc,GAAG,CAAC,CAAC;QAEvB,KAAK,MAAM,IAAI,IAAI,mBAAmB,EAAE,CAAC;YACvC,cAAc,EAAE,CAAC;YAEjB,qBAAqB;YACrB,MAAM,SAAS,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAC,CAAC;gBACxD,WAAW,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAExC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC,CAAC,CAAC;gBAC/C,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,MAAM,CAAC,MAAM,WAAW,CAAC,CAAC,CAAC;oBAC/D,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;wBACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC;oBACvC,CAAC,CAAC,CAAC;oBACH,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC;gBAC/B,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,2BAA2B,CAAC,CAAC,CAAC;gBAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAQ,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC1D,WAAW,EAAE,CAAC;YAChB,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,IAAI,WAAW,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,cAAc,2BAA2B,CAAC,CAAC,CAAC;QAC7E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,WAAW,gBAAgB,cAAc,gBAAgB,CAAC,CAAC,CAAC;YAC9F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAa,KAAe,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# loopwind CLI - Quick Reference for AI Agents
|
|
2
|
+
|
|
3
|
+
> Template-based CLI for generating images and videos using Tailwind CSS + Satori
|
|
4
|
+
|
|
5
|
+
## Essential Commands
|
|
6
|
+
|
|
7
|
+
### 1. Initialize Project
|
|
8
|
+
```bash
|
|
9
|
+
loopwind init
|
|
10
|
+
```
|
|
11
|
+
Creates `loopwind.json` config file. Run this first in new projects.
|
|
12
|
+
|
|
13
|
+
### 2. Add Templates
|
|
14
|
+
```bash
|
|
15
|
+
loopwind add <template> # From registry ('image' or 'video' default)
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
### 3. List Installed Templates
|
|
19
|
+
```bash
|
|
20
|
+
loopwind list
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### 4. Render Images
|
|
24
|
+
```bash
|
|
25
|
+
# With inline props (JSON string)
|
|
26
|
+
loopwind render banner-hero '{"title":"Hello World"}'
|
|
27
|
+
|
|
28
|
+
# With props file
|
|
29
|
+
loopwind render banner-hero props.json
|
|
30
|
+
|
|
31
|
+
# Specify output path and format
|
|
32
|
+
loopwind render banner-hero props.json --out output.png --format png
|
|
33
|
+
|
|
34
|
+
# Supported formats: png (default), svg, webp, jpg, jpeg
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### 5. Render Videos
|
|
38
|
+
```bash
|
|
39
|
+
# Requires ffmpeg installed
|
|
40
|
+
loopwind render my-video '{"title":"Video Title"}'
|
|
41
|
+
|
|
42
|
+
# With options
|
|
43
|
+
loopwind render my-video props.json --preset fast --crf 23
|
|
44
|
+
|
|
45
|
+
# Export frames only (no ffmpeg needed)
|
|
46
|
+
loopwind render my-video props.json --frames-only
|
|
47
|
+
|
|
48
|
+
# Keep frames after encoding
|
|
49
|
+
loopwind render my-video props.json --keep-frames
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 6. Validate Templates
|
|
53
|
+
```bash
|
|
54
|
+
loopwind validate [template] # Validate one or all templates
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Project Structure
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
project/
|
|
61
|
+
├── loopwind.json # Config (colors, fonts, paths)
|
|
62
|
+
└── _loopwind/
|
|
63
|
+
├── AGENTS.md # This file
|
|
64
|
+
├── templates/ # Installed templates
|
|
65
|
+
└── outputs/ # Generated files
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Template Types
|
|
69
|
+
|
|
70
|
+
### Image Template
|
|
71
|
+
**meta.json:**
|
|
72
|
+
```json
|
|
73
|
+
{
|
|
74
|
+
"name": "my-template",
|
|
75
|
+
"type": "image",
|
|
76
|
+
"size": { "width": 1200, "height": 630 },
|
|
77
|
+
"props": { "title": "string" }
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**template.tsx:**
|
|
82
|
+
```tsx
|
|
83
|
+
export default function Template({ title, tw }) {
|
|
84
|
+
return (
|
|
85
|
+
<div style={tw('flex items-center justify-center w-full h-full bg-primary')}>
|
|
86
|
+
<h1 style={tw('text-6xl font-bold text-white')}>{title}</h1>
|
|
87
|
+
</div>
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Video Template
|
|
93
|
+
**meta.json:**
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"name": "my-video",
|
|
97
|
+
"type": "video",
|
|
98
|
+
"size": { "width": 1920, "height": 1080 },
|
|
99
|
+
"video": { "fps": 30, "duration": 3 },
|
|
100
|
+
"props": { "title": "string" }
|
|
101
|
+
}
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**template.tsx:**
|
|
105
|
+
```tsx
|
|
106
|
+
export default function VideoTemplate({ title, tw, progress }) {
|
|
107
|
+
const opacity = progress < 0.2 ? progress / 0.2 : 1;
|
|
108
|
+
|
|
109
|
+
return (
|
|
110
|
+
<div style={tw('flex items-center justify-center w-full h-full bg-black')}>
|
|
111
|
+
<h1 style={{ ...tw('text-8xl font-bold text-white'), opacity }}>
|
|
112
|
+
{title}
|
|
113
|
+
</h1>
|
|
114
|
+
</div>
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Template Helpers
|
|
120
|
+
|
|
121
|
+
All templates receive these helper functions:
|
|
122
|
+
|
|
123
|
+
```tsx
|
|
124
|
+
export default function Template({
|
|
125
|
+
// User props
|
|
126
|
+
title,
|
|
127
|
+
subtitle,
|
|
128
|
+
|
|
129
|
+
// Built-in helpers
|
|
130
|
+
tw, // Convert Tailwind classes to inline styles
|
|
131
|
+
qr, // Generate QR code data URIs
|
|
132
|
+
image, // Load images as data URIs
|
|
133
|
+
video, // Load video frames (video templates only)
|
|
134
|
+
template, // Embed other templates
|
|
135
|
+
config, // Access loopwind.json config
|
|
136
|
+
|
|
137
|
+
// Video template props
|
|
138
|
+
frame, // Current frame number (0, 1, 2, ...)
|
|
139
|
+
progress, // Animation progress (0 to 1)
|
|
140
|
+
}) {
|
|
141
|
+
return (
|
|
142
|
+
<div style={tw('flex w-full h-full')}>
|
|
143
|
+
{/* Your template code */}
|
|
144
|
+
</div>
|
|
145
|
+
);
|
|
146
|
+
}
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Helper Examples
|
|
150
|
+
|
|
151
|
+
**`tw()` - Tailwind to inline styles:**
|
|
152
|
+
```tsx
|
|
153
|
+
<div style={tw('flex items-center justify-center bg-primary text-white p-8')}>
|
|
154
|
+
<h1 style={tw('text-6xl font-bold')}>Title</h1>
|
|
155
|
+
</div>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**`qr()` - Generate QR codes:**
|
|
159
|
+
```tsx
|
|
160
|
+
<img src={qr('https://example.com')} width={200} height={200} />
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**`image()` - Embed images:**
|
|
164
|
+
```tsx
|
|
165
|
+
// Props: { background: "./bg.jpg" }
|
|
166
|
+
<img src={image('background')} style={tw('w-full h-full')} />
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**`video()` - Embed videos (auto-syncs to frame):**
|
|
170
|
+
```tsx
|
|
171
|
+
// Props: { background: "./video.mp4" }
|
|
172
|
+
<img src={video('background')} style={tw('absolute inset-0')} />
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**`template()` - Embed templates:**
|
|
176
|
+
```tsx
|
|
177
|
+
{template('banner-hero', { title: 'Nested', subtitle: 'Template' })}
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
## Common Workflows
|
|
181
|
+
|
|
182
|
+
### Generate Image
|
|
183
|
+
```bash
|
|
184
|
+
loopwind init
|
|
185
|
+
loopwind add banner-hero
|
|
186
|
+
loopwind render banner-hero '{"title":"Hello","subtitle":"World"}'
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Generate Video
|
|
190
|
+
```bash
|
|
191
|
+
loopwind add my-video
|
|
192
|
+
loopwind render my-video '{"title":"Amazing Video"}' # Requires ffmpeg
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### Use Custom Branding
|
|
196
|
+
```bash
|
|
197
|
+
loopwind init # Detects tailwind.config.js automatically
|
|
198
|
+
# Edit loopwind.json to customize colors/fonts
|
|
199
|
+
loopwind add og-image
|
|
200
|
+
loopwind render og-image '{"title":"My Page"}'
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Satori Limitations
|
|
204
|
+
|
|
205
|
+
**Not Supported:**
|
|
206
|
+
- Backdrop filters, 3D transforms, calc(), z-index
|
|
207
|
+
|
|
208
|
+
**Workarounds:**
|
|
209
|
+
- Pre-calculate values instead of calc()
|
|
210
|
+
- Use DOM order instead of z-index
|
|
211
|
+
|
|
212
|
+
**Fully Supported:**
|
|
213
|
+
- Flexbox, colors, gradients, typography, spacing, borders, opacity, shadows, text-shadow, filters (blur, brightness, contrast, etc.)
|
|
214
|
+
|
|
215
|
+
## Key Points for Agents
|
|
216
|
+
|
|
217
|
+
1. Always run `loopwind init` first in new projects
|
|
218
|
+
2. Check `loopwind list` to see available templates
|
|
219
|
+
3. Video rendering requires ffmpeg (or use `--frames-only`)
|
|
220
|
+
4. Image props are auto-detected (any prop ending in .jpg, .png, etc.)
|
|
221
|
+
5. Video props are extracted at template FPS and cached
|
|
222
|
+
6. Use `tw()` for all styling - it uses project's Tailwind config
|
|
223
|
+
7. Templates use React/JSX but render to static images/videos
|
|
224
|
+
8. Default output: `_loopwind/outputs/<template>.<format>`
|
|
225
|
+
|
|
226
|
+
## Need Help?
|
|
227
|
+
|
|
228
|
+
- Documentation: https://github.com/tomtev/loopwind
|
|
229
|
+
- Issues: https://github.com/tomtev/loopwind/issues
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const meta: {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
type: string;
|
|
6
|
+
size: {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
};
|
|
10
|
+
props: {
|
|
11
|
+
title: string;
|
|
12
|
+
description: string;
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
export default function Template({ title, description, tw }: {
|
|
16
|
+
title: any;
|
|
17
|
+
description: any;
|
|
18
|
+
tw: any;
|
|
19
|
+
}): React.JSX.Element;
|
|
20
|
+
//# sourceMappingURL=template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/default-templates/image/template.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,IAAI;;;;;;;;;;;;CAShB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;;;;CAAA,qBAe1D"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const meta = {
|
|
3
|
+
name: "image",
|
|
4
|
+
description: "Simple image starter template",
|
|
5
|
+
type: "image",
|
|
6
|
+
size: { width: 1200, height: 630 },
|
|
7
|
+
props: {
|
|
8
|
+
title: "string",
|
|
9
|
+
description: "string?"
|
|
10
|
+
}
|
|
11
|
+
};
|
|
12
|
+
export default function Template({ title, description, tw }) {
|
|
13
|
+
return (React.createElement("div", { style: tw('w-full h-full flex flex-col justify-center items-center bg-background p-16') },
|
|
14
|
+
React.createElement("div", { style: tw('bg-card border rounded-xl p-12 flex flex-col max-w-4xl') },
|
|
15
|
+
React.createElement("h1", { style: tw('text-7xl font-bold text-foreground mb-4') }, title),
|
|
16
|
+
description && (React.createElement("p", { style: tw('text-3xl text-muted-foreground') }, description)))));
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/default-templates/image/template.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,+BAA+B;IAC5C,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAClC,KAAK,EAAE;QACL,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,SAAS;KACvB;CACF,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,EAAE;IACzD,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,CAAC,4EAA4E,CAAC;QAC1F,6BAAK,KAAK,EAAE,EAAE,CAAC,wDAAwD,CAAC;YACtE,4BAAI,KAAK,EAAE,EAAE,CAAC,yCAAyC,CAAC,IACrD,KAAK,CACH;YACJ,WAAW,IAAI,CACd,2BAAG,KAAK,EAAE,EAAE,CAAC,gCAAgC,CAAC,IAC3C,WAAW,CACV,CACL,CACG,CACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
// Template metadata is defined in meta.json
|
|
4
|
+
|
|
5
|
+
export default function Template({ title, description, tw }) {
|
|
6
|
+
return (
|
|
7
|
+
<div style={tw('w-full h-full flex flex-col justify-center items-center bg-background p-16')}>
|
|
8
|
+
<div style={tw('bg-card border rounded-xl p-12 flex flex-col max-w-4xl')}>
|
|
9
|
+
<h1 style={tw('text-7xl font-bold text-foreground mb-4')}>
|
|
10
|
+
{title}
|
|
11
|
+
</h1>
|
|
12
|
+
{description && (
|
|
13
|
+
<p style={tw('text-3xl text-muted-foreground')}>
|
|
14
|
+
{description}
|
|
15
|
+
</p>
|
|
16
|
+
)}
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
);
|
|
20
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
// Template metadata is defined in meta.json
|
|
3
|
+
|
|
4
|
+
export default function Template({ title, description, tw }) {
|
|
5
|
+
return (
|
|
6
|
+
<div style={tw('w-full h-full flex flex-col justify-center items-center bg-background p-16')}>
|
|
7
|
+
<div style={tw('bg-card border rounded-xl p-12 flex flex-col max-w-4xl')}>
|
|
8
|
+
<h1 style={tw('text-7xl font-bold text-foreground mb-4')}>
|
|
9
|
+
{title}
|
|
10
|
+
</h1>
|
|
11
|
+
{description && (
|
|
12
|
+
<p style={tw('text-3xl text-muted-foreground')}>
|
|
13
|
+
{description}
|
|
14
|
+
</p>
|
|
15
|
+
)}
|
|
16
|
+
</div>
|
|
17
|
+
</div>
|
|
18
|
+
);
|
|
19
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
// Template metadata is defined in meta.json
|
|
4
|
+
|
|
5
|
+
export default function Template({ title, subtitle, tw }) {
|
|
6
|
+
return (
|
|
7
|
+
<div style={tw('w-full h-full flex flex-col bg-gradient-to-br from-indigo-500 via-purple-500 to-pink-500 p-8')}>
|
|
8
|
+
{/* Header Card with Shadow */}
|
|
9
|
+
<div style={tw('bg-white rounded-2xl shadow-2xl p-8 mb-4 max-w-5xl flex flex-col')}>
|
|
10
|
+
<h1 style={tw('text-6xl font-extrabold text-indigo-600 mb-3 uppercase tracking-wide')}>
|
|
11
|
+
{title}
|
|
12
|
+
</h1>
|
|
13
|
+
{subtitle && (
|
|
14
|
+
<p style={tw('text-2xl text-gray-600 italic leading-relaxed')}>
|
|
15
|
+
{subtitle}
|
|
16
|
+
</p>
|
|
17
|
+
)}
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
{/* Feature Cards Grid */}
|
|
21
|
+
<div style={tw('flex flex-wrap gap-4 max-w-6xl flex-1')}>
|
|
22
|
+
{/* Card 1: Gradients & Shadows */}
|
|
23
|
+
<div style={tw('bg-gradient-to-br from-cyan-400 to-blue-500 rounded-xl shadow-lg p-6 flex-1 min-w-0 flex flex-col')}>
|
|
24
|
+
<h2 style={tw('text-2xl font-bold text-white mb-2 tracking-wider')}>
|
|
25
|
+
Gradients
|
|
26
|
+
</h2>
|
|
27
|
+
<p style={tw('text-sm text-white text-opacity-90 leading-normal')}>
|
|
28
|
+
Full gradient support
|
|
29
|
+
</p>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
{/* Card 2: Borders & Transforms */}
|
|
33
|
+
<div style={tw('bg-white rounded-lg border-4 border-emerald-500 p-6 flex-1 min-w-0 flex flex-col shadow-md rotate-1')}>
|
|
34
|
+
<h2 style={tw('text-2xl font-semibold text-emerald-700 mb-2')}>
|
|
35
|
+
Transforms
|
|
36
|
+
</h2>
|
|
37
|
+
<p style={tw('text-sm text-gray-600 leading-tight')}>
|
|
38
|
+
Rotation supported!
|
|
39
|
+
</p>
|
|
40
|
+
</div>
|
|
41
|
+
|
|
42
|
+
{/* Card 3: Typography */}
|
|
43
|
+
<div style={tw('bg-gray-900 rounded-xl shadow-xl p-6 flex-1 min-w-0 flex flex-col')}>
|
|
44
|
+
<h2 style={tw('text-2xl font-black text-yellow-400 mb-2 uppercase letter-spacing-wide')}>
|
|
45
|
+
TYPOGRAPHY
|
|
46
|
+
</h2>
|
|
47
|
+
<p style={tw('text-xs text-gray-300 tracking-tight leading-loose')}>
|
|
48
|
+
All text styles work
|
|
49
|
+
</p>
|
|
50
|
+
</div>
|
|
51
|
+
</div>
|
|
52
|
+
|
|
53
|
+
{/* Bottom Info Bar */}
|
|
54
|
+
<div style={tw('mt-4 bg-white bg-opacity-20 rounded-lg px-6 py-3 max-w-5xl flex flex-row justify-between items-center')}>
|
|
55
|
+
<p style={tw('text-sm font-medium text-white')}>
|
|
56
|
+
Kitchen Sink Template
|
|
57
|
+
</p>
|
|
58
|
+
<p style={tw('text-xs text-white text-opacity-75 tracking-wide')}>
|
|
59
|
+
All features demonstrated
|
|
60
|
+
</p>
|
|
61
|
+
</div>
|
|
62
|
+
</div>
|
|
63
|
+
);
|
|
64
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "video",
|
|
3
|
+
"description": "Animated video starter template",
|
|
4
|
+
"type": "video",
|
|
5
|
+
"size": {
|
|
6
|
+
"width": 1200,
|
|
7
|
+
"height": 630
|
|
8
|
+
},
|
|
9
|
+
"props": {
|
|
10
|
+
"title": "string",
|
|
11
|
+
"description": "string?"
|
|
12
|
+
},
|
|
13
|
+
"video": {
|
|
14
|
+
"fps": 30,
|
|
15
|
+
"duration": 3
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
// Template metadata is defined in meta.json
|
|
4
|
+
|
|
5
|
+
export default function Template({ title, description, frame, progress, tw }) {
|
|
6
|
+
// Fade in animation
|
|
7
|
+
const opacity = Math.min(1, progress * 2);
|
|
8
|
+
|
|
9
|
+
// Slide up animation
|
|
10
|
+
const translateY = 20 - (progress * 20);
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<div style={tw('w-full h-full flex flex-col justify-center items-center bg-background p-16')}>
|
|
14
|
+
<div style={tw('bg-card border rounded-xl p-12 flex flex-col max-w-4xl')}>
|
|
15
|
+
<h1
|
|
16
|
+
style={{
|
|
17
|
+
...tw('text-7xl font-bold text-foreground mb-4'),
|
|
18
|
+
opacity,
|
|
19
|
+
transform: `translateY(${translateY}px)`
|
|
20
|
+
}}
|
|
21
|
+
>
|
|
22
|
+
{title}
|
|
23
|
+
</h1>
|
|
24
|
+
{description && (
|
|
25
|
+
<p
|
|
26
|
+
style={{
|
|
27
|
+
...tw('text-3xl text-muted-foreground'),
|
|
28
|
+
opacity: Math.min(1, (progress - 0.3) * 2)
|
|
29
|
+
}}
|
|
30
|
+
>
|
|
31
|
+
{description}
|
|
32
|
+
</p>
|
|
33
|
+
)}
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "video",
|
|
3
|
+
"description": "Animated video starter template",
|
|
4
|
+
"type": "video",
|
|
5
|
+
"size": {
|
|
6
|
+
"width": 1200,
|
|
7
|
+
"height": 630
|
|
8
|
+
},
|
|
9
|
+
"props": {
|
|
10
|
+
"title": "string",
|
|
11
|
+
"description": "string?"
|
|
12
|
+
},
|
|
13
|
+
"video": {
|
|
14
|
+
"fps": 30,
|
|
15
|
+
"duration": 3
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export declare const meta: {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
type: string;
|
|
6
|
+
size: {
|
|
7
|
+
width: number;
|
|
8
|
+
height: number;
|
|
9
|
+
};
|
|
10
|
+
props: {
|
|
11
|
+
title: string;
|
|
12
|
+
description: string;
|
|
13
|
+
};
|
|
14
|
+
video: {
|
|
15
|
+
fps: number;
|
|
16
|
+
duration: number;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
export default function Template({ title, description, frame, progress, tw }: {
|
|
20
|
+
title: any;
|
|
21
|
+
description: any;
|
|
22
|
+
frame: any;
|
|
23
|
+
progress: any;
|
|
24
|
+
tw: any;
|
|
25
|
+
}): React.JSX.Element;
|
|
26
|
+
//# sourceMappingURL=template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../src/default-templates/video/template.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;CAahB,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;;;;;;CAAA,qBAgC3E"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
export const meta = {
|
|
3
|
+
name: "video",
|
|
4
|
+
description: "Animated video starter template",
|
|
5
|
+
type: "video",
|
|
6
|
+
size: { width: 1200, height: 630 },
|
|
7
|
+
props: {
|
|
8
|
+
title: "string",
|
|
9
|
+
description: "string?"
|
|
10
|
+
},
|
|
11
|
+
video: {
|
|
12
|
+
fps: 30,
|
|
13
|
+
duration: 3
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
export default function Template({ title, description, frame, progress, tw }) {
|
|
17
|
+
// Fade in animation
|
|
18
|
+
const opacity = Math.min(1, progress * 2);
|
|
19
|
+
// Slide up animation
|
|
20
|
+
const translateY = 20 - (progress * 20);
|
|
21
|
+
return (React.createElement("div", { style: tw('w-full h-full flex flex-col justify-center items-center bg-background p-16') },
|
|
22
|
+
React.createElement("div", { style: tw('bg-card border rounded-xl p-12 flex flex-col max-w-4xl') },
|
|
23
|
+
React.createElement("h1", { style: {
|
|
24
|
+
...tw('text-7xl font-bold text-foreground mb-4'),
|
|
25
|
+
opacity,
|
|
26
|
+
transform: `translateY(${translateY}px)`
|
|
27
|
+
} }, title),
|
|
28
|
+
description && (React.createElement("p", { style: {
|
|
29
|
+
...tw('text-3xl text-muted-foreground'),
|
|
30
|
+
opacity: Math.min(1, (progress - 0.3) * 2)
|
|
31
|
+
} }, description)))));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/default-templates/video/template.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,iCAAiC;IAC9C,IAAI,EAAE,OAAO;IACb,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE;IAClC,KAAK,EAAE;QACL,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,SAAS;KACvB;IACD,KAAK,EAAE;QACL,GAAG,EAAE,EAAE;QACP,QAAQ,EAAE,CAAC;KACZ;CACF,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC1E,oBAAoB;IACpB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC;IAE1C,qBAAqB;IACrB,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAExC,OAAO,CACL,6BAAK,KAAK,EAAE,EAAE,CAAC,4EAA4E,CAAC;QAC1F,6BAAK,KAAK,EAAE,EAAE,CAAC,wDAAwD,CAAC;YACtE,4BACE,KAAK,EAAE;oBACL,GAAG,EAAE,CAAC,yCAAyC,CAAC;oBAChD,OAAO;oBACP,SAAS,EAAE,cAAc,UAAU,KAAK;iBACzC,IAEA,KAAK,CACH;YACJ,WAAW,IAAI,CACd,2BACE,KAAK,EAAE;oBACL,GAAG,EAAE,CAAC,gCAAgC,CAAC;oBACvC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,QAAQ,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;iBAC3C,IAEA,WAAW,CACV,CACL,CACG,CACF,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
|
|
3
|
+
// Template metadata is defined in meta.json
|
|
4
|
+
|
|
5
|
+
export default function Template({ title, description, frame, progress, tw }) {
|
|
6
|
+
// Fade in animation
|
|
7
|
+
const opacity = Math.min(1, progress * 2);
|
|
8
|
+
|
|
9
|
+
// Slide up animation
|
|
10
|
+
const translateY = 20 - (progress * 20);
|
|
11
|
+
|
|
12
|
+
return (
|
|
13
|
+
<div style={tw('w-full h-full flex flex-col justify-center items-center bg-background p-16')}>
|
|
14
|
+
<div style={tw('bg-card border rounded-xl p-12 flex flex-col max-w-4xl')}>
|
|
15
|
+
<h1
|
|
16
|
+
style={{
|
|
17
|
+
...tw('text-7xl font-bold text-foreground mb-4'),
|
|
18
|
+
opacity,
|
|
19
|
+
transform: `translateY(${translateY}px)`
|
|
20
|
+
}}
|
|
21
|
+
>
|
|
22
|
+
{title}
|
|
23
|
+
</h1>
|
|
24
|
+
{description && (
|
|
25
|
+
<p
|
|
26
|
+
style={{
|
|
27
|
+
...tw('text-3xl text-muted-foreground'),
|
|
28
|
+
opacity: Math.min(1, (progress - 0.3) * 2)
|
|
29
|
+
}}
|
|
30
|
+
>
|
|
31
|
+
{description}
|
|
32
|
+
</p>
|
|
33
|
+
)}
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "video",
|
|
3
|
+
"description": "Animated video starter template",
|
|
4
|
+
"type": "video",
|
|
5
|
+
"size": {
|
|
6
|
+
"width": 1200,
|
|
7
|
+
"height": 630
|
|
8
|
+
},
|
|
9
|
+
"props": {
|
|
10
|
+
"title": "string",
|
|
11
|
+
"description": "string?"
|
|
12
|
+
},
|
|
13
|
+
"video": {
|
|
14
|
+
"fps": 30,
|
|
15
|
+
"duration": 3
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
|
|
2
|
+
// Template metadata is defined in meta.json
|
|
3
|
+
|
|
4
|
+
export default function Template({ title, description, frame, progress, tw }) {
|
|
5
|
+
// Fade in animation
|
|
6
|
+
const opacity = Math.min(1, progress * 2);
|
|
7
|
+
|
|
8
|
+
// Slide up animation
|
|
9
|
+
const translateY = 20 - (progress * 20);
|
|
10
|
+
|
|
11
|
+
return (
|
|
12
|
+
<div style={tw('w-full h-full flex flex-col justify-center items-center bg-background p-16')}>
|
|
13
|
+
<div style={tw('bg-card border rounded-xl p-12 flex flex-col max-w-4xl')}>
|
|
14
|
+
<h1
|
|
15
|
+
style={{
|
|
16
|
+
...tw('text-7xl font-bold text-foreground mb-4'),
|
|
17
|
+
opacity,
|
|
18
|
+
transform: `translateY(${translateY}px)`
|
|
19
|
+
}}
|
|
20
|
+
>
|
|
21
|
+
{title}
|
|
22
|
+
</h1>
|
|
23
|
+
{description && (
|
|
24
|
+
<p
|
|
25
|
+
style={{
|
|
26
|
+
...tw('text-3xl text-muted-foreground'),
|
|
27
|
+
opacity: Math.min(1, (progress - 0.3) * 2)
|
|
28
|
+
}}
|
|
29
|
+
>
|
|
30
|
+
{description}
|
|
31
|
+
</p>
|
|
32
|
+
)}
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
);
|
|
36
|
+
}
|