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,86 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { fetchTemplate, installTemplate, detectTemplateSource, installDefaultTemplate } from '../lib/installer.js';
|
|
4
|
+
import { isTemplateInstalled } from '../lib/utils.js';
|
|
5
|
+
import { DEFAULT_REGISTRY } from '../lib/constants.js';
|
|
6
|
+
import { getResolvedPaths } from '../lib/config.js';
|
|
7
|
+
export async function addCommand(templateSource, options) {
|
|
8
|
+
// Check for default templates (bundled with CLI)
|
|
9
|
+
if (templateSource === 'image' || templateSource === 'video') {
|
|
10
|
+
console.log(chalk.blue(`\nInstalling default ${templateSource} template\n`));
|
|
11
|
+
const spinner = ora('Installing template...').start();
|
|
12
|
+
try {
|
|
13
|
+
// Check if already installed
|
|
14
|
+
const installed = await isTemplateInstalled(templateSource);
|
|
15
|
+
if (installed) {
|
|
16
|
+
spinner.warn(chalk.yellow(`Template ${templateSource} is already installed`));
|
|
17
|
+
console.log(chalk.dim(`\nTo reinstall, delete the template folder and run this command again.\n`));
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
// Install default template
|
|
21
|
+
await installDefaultTemplate(templateSource);
|
|
22
|
+
spinner.succeed(chalk.green(`Successfully installed ${chalk.bold(templateSource)}`));
|
|
23
|
+
const paths = await getResolvedPaths();
|
|
24
|
+
const templatesPath = paths.templates.replace(process.cwd() + '/', '');
|
|
25
|
+
const outputsPath = paths.outputs.replace(process.cwd() + '/', '');
|
|
26
|
+
console.log(chalk.dim(`\nTemplate installed to: ${chalk.cyan(`${templatesPath}/${templateSource}`)}`));
|
|
27
|
+
console.log(chalk.dim(`Customize the template files to fit your needs!`));
|
|
28
|
+
console.log(chalk.dim(`\nTo render: ${chalk.cyan(`loopwind render ${templateSource} '{"title":"Hello"}'`)}`));
|
|
29
|
+
console.log(chalk.dim(`Output will be saved to: ${chalk.cyan(`${outputsPath}/`)}\n`));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
spinner.fail(chalk.red('Failed to install template'));
|
|
34
|
+
console.error(chalk.red(`\nError: ${error.message}\n`));
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
const registryUrl = options.registry || DEFAULT_REGISTRY;
|
|
39
|
+
const source = detectTemplateSource(templateSource);
|
|
40
|
+
// Show appropriate message based on source type
|
|
41
|
+
let sourceMessage = '';
|
|
42
|
+
switch (source.type) {
|
|
43
|
+
case 'registry':
|
|
44
|
+
sourceMessage = `from registry: ${chalk.dim(registryUrl)}`;
|
|
45
|
+
break;
|
|
46
|
+
case 'url':
|
|
47
|
+
sourceMessage = `from URL: ${chalk.dim(source.url)}`;
|
|
48
|
+
break;
|
|
49
|
+
case 'github':
|
|
50
|
+
sourceMessage = `from GitHub: ${chalk.dim(source.repo)}`;
|
|
51
|
+
break;
|
|
52
|
+
case 'local':
|
|
53
|
+
sourceMessage = `from local: ${chalk.dim(source.path)}`;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
console.log(chalk.blue(`\nInstalling template ${sourceMessage}\n`));
|
|
57
|
+
const spinner = ora('Fetching template...').start();
|
|
58
|
+
try {
|
|
59
|
+
// Fetch template data
|
|
60
|
+
const templateData = await fetchTemplate(templateSource, registryUrl);
|
|
61
|
+
const templateName = templateData.name;
|
|
62
|
+
// Check if already installed
|
|
63
|
+
const installed = await isTemplateInstalled(templateName);
|
|
64
|
+
if (installed) {
|
|
65
|
+
spinner.warn(chalk.yellow(`Template ${templateName} is already installed`));
|
|
66
|
+
console.log(chalk.dim(`\nTo reinstall, delete the template folder and run this command again.\n`));
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Install template
|
|
70
|
+
spinner.text = 'Installing template...';
|
|
71
|
+
await installTemplate(templateData);
|
|
72
|
+
spinner.succeed(chalk.green(`Successfully installed ${chalk.bold(templateName)}`));
|
|
73
|
+
const paths = await getResolvedPaths();
|
|
74
|
+
const templatesPath = paths.templates.replace(process.cwd() + '/', '');
|
|
75
|
+
const outputsPath = paths.outputs.replace(process.cwd() + '/', '');
|
|
76
|
+
console.log(chalk.dim(`\nTemplate installed to: ${chalk.cyan(`${templatesPath}/${templateName}`)}`));
|
|
77
|
+
console.log(chalk.dim(`\nTo render: ${chalk.cyan(`loopwind render ${templateName}`)}`));
|
|
78
|
+
console.log(chalk.dim(`Output will be saved to: ${chalk.cyan(`${outputsPath}/`)}\n`));
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
spinner.fail(chalk.red('Failed to install template'));
|
|
82
|
+
console.error(chalk.red(`\nError: ${error.message}\n`));
|
|
83
|
+
process.exit(1);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=add.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../src/commands/default.ts"],"names":[],"mappings":"AAQA,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAmEpD"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import gradient from 'gradient-string';
|
|
3
|
+
import fs from 'fs/promises';
|
|
4
|
+
import path from 'path';
|
|
5
|
+
import { CWD } from '../lib/constants.js';
|
|
6
|
+
import { checkForUpdates, displayUpdateNotification } from '../lib/version-check.js';
|
|
7
|
+
export async function defaultCommand() {
|
|
8
|
+
console.log();
|
|
9
|
+
// Check for updates asynchronously (non-blocking)
|
|
10
|
+
const updateCheck = checkForUpdates();
|
|
11
|
+
// Create purple to indigo gradient
|
|
12
|
+
const purpleIndigo = gradient(['#a855f7', '#6366f1', '#8b5cf6']);
|
|
13
|
+
// Show title with gradient
|
|
14
|
+
console.log(purpleIndigo('loopwind') + chalk.dim(' - Template-based image & video generation'));
|
|
15
|
+
console.log(chalk.dim('For templates: https://loopwind.dev/templates'));
|
|
16
|
+
console.log();
|
|
17
|
+
// Check if project is initialized
|
|
18
|
+
const configPath = path.join(CWD, 'loopwind.json');
|
|
19
|
+
let isInitialized = false;
|
|
20
|
+
try {
|
|
21
|
+
await fs.access(configPath);
|
|
22
|
+
isInitialized = true;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
isInitialized = false;
|
|
26
|
+
}
|
|
27
|
+
if (!isInitialized) {
|
|
28
|
+
// Show quick start for new projects
|
|
29
|
+
console.log(chalk.yellow('⚠ Project not initialized'));
|
|
30
|
+
console.log();
|
|
31
|
+
console.log(chalk.dim('Quick start:'));
|
|
32
|
+
console.log(chalk.dim(' 1. Initialize configuration:'));
|
|
33
|
+
console.log(chalk.cyan(' loopwind init'));
|
|
34
|
+
console.log();
|
|
35
|
+
console.log(chalk.dim(' 2. Install a template:'));
|
|
36
|
+
console.log(chalk.cyan(' loopwind add banner-hero'));
|
|
37
|
+
console.log();
|
|
38
|
+
console.log(chalk.dim(' 3. Render an image:'));
|
|
39
|
+
console.log(chalk.cyan(' loopwind render banner-hero --props \'{"title":"Hello"}\''));
|
|
40
|
+
console.log();
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Show project status
|
|
44
|
+
console.log(chalk.green('✓ Project initialized'));
|
|
45
|
+
console.log();
|
|
46
|
+
}
|
|
47
|
+
// Always show available commands
|
|
48
|
+
console.log(chalk.dim('Commands:'));
|
|
49
|
+
console.log(chalk.cyan(' loopwind init') + chalk.dim(' Initialize loopwind.json config'));
|
|
50
|
+
console.log(chalk.cyan(' loopwind add <template>') + chalk.dim(' Install a template'));
|
|
51
|
+
console.log(chalk.cyan(' loopwind render <template>') + chalk.dim(' Render an image or video'));
|
|
52
|
+
console.log(chalk.cyan(' loopwind list') + chalk.dim(' List installed templates'));
|
|
53
|
+
console.log(chalk.cyan(' loopwind validate') + chalk.dim(' Validate template metadata'));
|
|
54
|
+
console.log(chalk.cyan(' loopwind preview <template>') + chalk.dim(' Preview with live reload'));
|
|
55
|
+
console.log();
|
|
56
|
+
console.log(chalk.dim('Examples:'));
|
|
57
|
+
console.log(chalk.dim(' loopwind add banner-hero'));
|
|
58
|
+
console.log(chalk.dim(' loopwind preview banner-hero --props \'{"title":"Hello"}\''));
|
|
59
|
+
console.log(chalk.dim(' loopwind render banner-hero --props \'{"title":"Hello World"}\''));
|
|
60
|
+
console.log();
|
|
61
|
+
console.log(chalk.dim('Learn more: https://github.com/tomtev/loopwind'));
|
|
62
|
+
console.log();
|
|
63
|
+
// Display update notification if available
|
|
64
|
+
const updateResult = await updateCheck;
|
|
65
|
+
if (updateResult) {
|
|
66
|
+
displayUpdateNotification(updateResult);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=default.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/commands/default.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAMA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAkFjD"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { configExists, createSampleConfig, createConfigFromDetected, createAgentsDoc, loadConfig } from '../lib/config.js';
|
|
4
|
+
import { detectAllConfigs } from '../lib/tailwind-detector.js';
|
|
5
|
+
import { ensureLoopwindDir } from '../lib/utils.js';
|
|
6
|
+
export async function initCommand() {
|
|
7
|
+
console.log(chalk.blue('\nInitializing loopwind config...\n'));
|
|
8
|
+
const spinner = ora('Checking for existing config...').start();
|
|
9
|
+
try {
|
|
10
|
+
const exists = await configExists();
|
|
11
|
+
if (exists) {
|
|
12
|
+
spinner.warn(chalk.yellow('loopwind.json already exists'));
|
|
13
|
+
console.log(chalk.dim('\nTo recreate, delete the file and run this command again.\n'));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
// Detect existing configurations
|
|
17
|
+
spinner.text = 'Detecting existing configurations...';
|
|
18
|
+
const detected = await detectAllConfigs();
|
|
19
|
+
// Show what was detected
|
|
20
|
+
spinner.succeed(chalk.green('Configuration detected'));
|
|
21
|
+
console.log();
|
|
22
|
+
if (detected.tailwindConfig) {
|
|
23
|
+
console.log(chalk.green(` ✓ Tailwind CSS detected`));
|
|
24
|
+
console.log(chalk.dim(` Config: ${detected.tailwindConfig}`));
|
|
25
|
+
}
|
|
26
|
+
if (detected.shadcn.hasShadcn) {
|
|
27
|
+
console.log(chalk.green(' ✓ shadcn/ui detected (components.json)'));
|
|
28
|
+
if (detected.shadcn.baseColor) {
|
|
29
|
+
console.log(chalk.dim(` Base color: ${detected.shadcn.baseColor}`));
|
|
30
|
+
}
|
|
31
|
+
if (detected.shadcn.style) {
|
|
32
|
+
console.log(chalk.dim(` Style: ${detected.shadcn.style}`));
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
if (detected.hasTailwindCss) {
|
|
36
|
+
console.log(chalk.green(' ✓ Tailwind CSS file found'));
|
|
37
|
+
console.log(chalk.dim(` Will extract CSS variables if needed`));
|
|
38
|
+
}
|
|
39
|
+
if (!detected.shadcn.hasShadcn && !detected.tailwindConfig && !detected.hasTailwindCss) {
|
|
40
|
+
console.log(chalk.yellow(' ℹ No Tailwind config detected - using shadcn/ui defaults'));
|
|
41
|
+
}
|
|
42
|
+
console.log();
|
|
43
|
+
// Create config
|
|
44
|
+
spinner.start('Creating loopwind.json...');
|
|
45
|
+
if (detected.jsColors || detected.shadcn.hasShadcn) {
|
|
46
|
+
// Create config based on detected settings
|
|
47
|
+
await createConfigFromDetected(detected);
|
|
48
|
+
spinner.succeed(chalk.green('Created loopwind.json from existing Tailwind config'));
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
// Use default shadcn config
|
|
52
|
+
await createSampleConfig();
|
|
53
|
+
spinner.succeed(chalk.green('Created loopwind.json with shadcn defaults'));
|
|
54
|
+
}
|
|
55
|
+
console.log();
|
|
56
|
+
console.log(chalk.dim('Configuration summary:'));
|
|
57
|
+
console.log(chalk.dim(' • Templates will use colors from your existing config'));
|
|
58
|
+
console.log(chalk.dim(' • Customize design tokens in loopwind.json'));
|
|
59
|
+
console.log(chalk.dim(' • Run: loopwind render <template> to generate images\n'));
|
|
60
|
+
// Copy AGENTS.md file
|
|
61
|
+
spinner.start('Creating agent documentation...');
|
|
62
|
+
await ensureLoopwindDir();
|
|
63
|
+
await createAgentsDoc();
|
|
64
|
+
const config = await loadConfig();
|
|
65
|
+
const rootDir = config.paths?.root || '_loopwind';
|
|
66
|
+
spinner.succeed(chalk.green(`Created ${rootDir}/AGENTS.md`));
|
|
67
|
+
console.log(chalk.dim(`\n • Agent documentation available at ${rootDir}/AGENTS.md\n`));
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
spinner.fail(chalk.red('Failed to create config'));
|
|
71
|
+
console.error(chalk.red(`\nError: ${error.message}\n`));
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AA4CA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAqCjD"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { getInstalledTemplates, loadTemplateMeta } from '../lib/utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* Generate example prop values based on prop type definitions
|
|
5
|
+
*/
|
|
6
|
+
function generateExampleProps(props) {
|
|
7
|
+
if (!props)
|
|
8
|
+
return {};
|
|
9
|
+
const examples = {};
|
|
10
|
+
for (const [key, type] of Object.entries(props)) {
|
|
11
|
+
const isOptional = type.endsWith('?');
|
|
12
|
+
const baseType = type.replace('?', '').trim();
|
|
13
|
+
// Generate example values based on type and key name
|
|
14
|
+
if (baseType === 'string') {
|
|
15
|
+
if (key.toLowerCase().includes('title')) {
|
|
16
|
+
examples[key] = 'Hello World';
|
|
17
|
+
}
|
|
18
|
+
else if (key.toLowerCase().includes('description')) {
|
|
19
|
+
examples[key] = 'This is a sample description';
|
|
20
|
+
}
|
|
21
|
+
else if (key.toLowerCase().includes('url')) {
|
|
22
|
+
examples[key] = 'https://example.com';
|
|
23
|
+
}
|
|
24
|
+
else if (key.toLowerCase().includes('name')) {
|
|
25
|
+
examples[key] = 'John Doe';
|
|
26
|
+
}
|
|
27
|
+
else if (key.toLowerCase().includes('email')) {
|
|
28
|
+
examples[key] = 'hello@example.com';
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
examples[key] = 'Sample text';
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else if (baseType === 'number') {
|
|
35
|
+
examples[key] = 42;
|
|
36
|
+
}
|
|
37
|
+
else if (baseType === 'boolean') {
|
|
38
|
+
examples[key] = true;
|
|
39
|
+
}
|
|
40
|
+
else if (baseType.startsWith('array')) {
|
|
41
|
+
examples[key] = ['Item 1', 'Item 2'];
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
examples[key] = 'value';
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return examples;
|
|
48
|
+
}
|
|
49
|
+
export async function listCommand() {
|
|
50
|
+
console.log(chalk.blue('\nInstalled Templates:\n'));
|
|
51
|
+
try {
|
|
52
|
+
const templates = await getInstalledTemplates();
|
|
53
|
+
if (templates.length === 0) {
|
|
54
|
+
console.log(chalk.dim(' No templates installed yet.'));
|
|
55
|
+
console.log(chalk.dim(` Install a template with: ${chalk.cyan('loopwind add <template>')}\n`));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
for (const templateName of templates) {
|
|
59
|
+
try {
|
|
60
|
+
const meta = await loadTemplateMeta(templateName);
|
|
61
|
+
const templateType = meta.type || 'image';
|
|
62
|
+
const exampleProps = generateExampleProps(meta.props);
|
|
63
|
+
const propsJson = JSON.stringify(exampleProps);
|
|
64
|
+
console.log(chalk.bold.blue(` ${meta.name}`));
|
|
65
|
+
console.log(chalk.dim(` ${meta.description}`));
|
|
66
|
+
console.log(chalk.dim(` Size: ${meta.size.width}x${meta.size.height} • Type: ${templateType}`));
|
|
67
|
+
console.log();
|
|
68
|
+
console.log(chalk.dim(` Example:`));
|
|
69
|
+
console.log(chalk.cyan(` loopwind render ${templateName} '${propsJson}'`));
|
|
70
|
+
console.log();
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.log(chalk.yellow(` ${templateName} (metadata not found)`));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
console.log(chalk.dim(`Total: ${templates.length} template(s)\n`));
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error(chalk.red(`\nError: ${error.message}\n`));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/commands/preview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,eAAO,MAAM,cAAc,SAgTvB,CAAC"}
|