@teamflojo/floimg 0.1.0 → 0.3.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 (59) hide show
  1. package/QUICK_START.md +199 -0
  2. package/dist/cli/commands/chart.d.ts +20 -0
  3. package/dist/cli/commands/chart.d.ts.map +1 -0
  4. package/dist/cli/commands/chart.js +126 -0
  5. package/dist/cli/commands/chart.js.map +1 -0
  6. package/dist/cli/commands/config.js +11 -11
  7. package/dist/cli/commands/convert.d.ts +18 -0
  8. package/dist/cli/commands/convert.d.ts.map +1 -0
  9. package/dist/cli/commands/convert.js +122 -0
  10. package/dist/cli/commands/convert.js.map +1 -0
  11. package/dist/cli/commands/generate.js +1 -1
  12. package/dist/cli/commands/mcp.js +9 -9
  13. package/dist/cli/commands/plugins.js +14 -14
  14. package/dist/cli/commands/qr.d.ts +20 -0
  15. package/dist/cli/commands/qr.d.ts.map +1 -0
  16. package/dist/cli/commands/qr.js +82 -0
  17. package/dist/cli/commands/qr.js.map +1 -0
  18. package/dist/cli/commands/resize.d.ts +18 -0
  19. package/dist/cli/commands/resize.d.ts.map +1 -0
  20. package/dist/cli/commands/resize.js +100 -0
  21. package/dist/cli/commands/resize.js.map +1 -0
  22. package/dist/cli/index.js +20 -1
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/cli/interactive.d.ts +10 -0
  25. package/dist/cli/interactive.d.ts.map +1 -0
  26. package/dist/cli/interactive.js +115 -0
  27. package/dist/cli/interactive.js.map +1 -0
  28. package/dist/cli/utils/plugin-loader.d.ts +32 -0
  29. package/dist/cli/utils/plugin-loader.d.ts.map +1 -0
  30. package/dist/cli/utils/plugin-loader.js +150 -0
  31. package/dist/cli/utils/plugin-loader.js.map +1 -0
  32. package/dist/core/client.d.ts +23 -2
  33. package/dist/core/client.d.ts.map +1 -1
  34. package/dist/core/client.js +98 -4
  35. package/dist/core/client.js.map +1 -1
  36. package/dist/core/logger.d.ts +1 -1
  37. package/dist/core/logger.js +5 -5
  38. package/dist/core/pipeline-runner.d.ts +1 -1
  39. package/dist/core/pipeline-runner.js +1 -1
  40. package/dist/core/types.d.ts +189 -2
  41. package/dist/core/types.d.ts.map +1 -1
  42. package/dist/core/types.js +27 -1
  43. package/dist/core/types.js.map +1 -1
  44. package/dist/index.d.ts +4 -3
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +11 -3
  47. package/dist/index.js.map +1 -1
  48. package/dist/mcp/server.js +165 -0
  49. package/dist/mcp/server.js.map +1 -1
  50. package/dist/providers/ai/index.d.ts +4 -0
  51. package/dist/providers/ai/index.d.ts.map +1 -1
  52. package/dist/providers/ai/index.js +5 -0
  53. package/dist/providers/ai/index.js.map +1 -1
  54. package/dist/providers/ai/openai.d.ts +78 -1
  55. package/dist/providers/ai/openai.d.ts.map +1 -1
  56. package/dist/providers/ai/openai.js +234 -0
  57. package/dist/providers/ai/openai.js.map +1 -1
  58. package/package.json +10 -9
  59. package/LICENSE +0 -21
@@ -1,40 +1,40 @@
1
1
  import { Command } from "commander";
2
2
  export const pluginsCommand = new Command("plugins")
3
- .description("Manage and view available imgflo plugins")
3
+ .description("Manage and view available floimg plugins")
4
4
  .action(async () => {
5
- console.log("imgflo Plugins");
5
+ console.log("floimg Plugins");
6
6
  console.log("==============\n");
7
7
  // Try to load each known plugin
8
8
  const knownPlugins = [
9
9
  {
10
- name: "imgflo-quickchart",
10
+ name: "floimg-quickchart",
11
11
  generator: "quickchart",
12
12
  description: "Chart.js charts (bar, line, pie, etc.)",
13
- docs: "https://github.com/bcooke/imgflo/tree/main/packages/imgflo-quickchart",
13
+ docs: "https://github.com/bcooke/floimg/tree/main/packages/floimg-quickchart",
14
14
  },
15
15
  {
16
- name: "imgflo-d3",
16
+ name: "floimg-d3",
17
17
  generator: "d3",
18
18
  description: "D3 data visualizations (custom charts, complex viz)",
19
- docs: "https://github.com/bcooke/imgflo/tree/main/packages/imgflo-d3",
19
+ docs: "https://github.com/bcooke/floimg/tree/main/packages/floimg-d3",
20
20
  },
21
21
  {
22
- name: "imgflo-mermaid",
22
+ name: "floimg-mermaid",
23
23
  generator: "mermaid",
24
24
  description: "Mermaid diagrams (flowcharts, sequence, gantt)",
25
- docs: "https://github.com/bcooke/imgflo/tree/main/packages/imgflo-mermaid",
25
+ docs: "https://github.com/bcooke/floimg/tree/main/packages/floimg-mermaid",
26
26
  },
27
27
  {
28
- name: "imgflo-qr",
28
+ name: "floimg-qr",
29
29
  generator: "qr",
30
30
  description: "QR code generation",
31
- docs: "https://github.com/bcooke/imgflo/tree/main/packages/imgflo-qr",
31
+ docs: "https://github.com/bcooke/floimg/tree/main/packages/floimg-qr",
32
32
  },
33
33
  {
34
- name: "imgflo-screenshot",
34
+ name: "floimg-screenshot",
35
35
  generator: "screenshot",
36
36
  description: "Website screenshots (Playwright)",
37
- docs: "https://github.com/bcooke/imgflo/tree/main/packages/imgflo-screenshot",
37
+ docs: "https://github.com/bcooke/floimg/tree/main/packages/floimg-screenshot",
38
38
  },
39
39
  ];
40
40
  console.log("Built-in generators:");
@@ -58,9 +58,9 @@ export const pluginsCommand = new Command("plugins")
58
58
  console.log("\n💡 To install plugins:");
59
59
  console.log(` npm install ${notInstalledPlugins.join(' ')}`);
60
60
  console.log("\n Or install all at once:");
61
- console.log(" npm install imgflo-quickchart imgflo-d3 imgflo-mermaid imgflo-qr imgflo-screenshot");
61
+ console.log(" npm install floimg-quickchart floimg-d3 floimg-mermaid floimg-qr floimg-screenshot");
62
62
  }
63
63
  console.log("\n📖 Documentation:");
64
- console.log(" https://github.com/bcooke/imgflo");
64
+ console.log(" https://github.com/bcooke/floimg");
65
65
  });
66
66
  //# sourceMappingURL=plugins.js.map
@@ -0,0 +1,20 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * Shorthand command for generating QR codes
4
+ *
5
+ * This command auto-installs @teamflojo/floimg-qr if not present.
6
+ *
7
+ * @example
8
+ * ```bash
9
+ * # Basic usage - text as first argument
10
+ * floimg qr "https://floimg.com" -o qr.png
11
+ *
12
+ * # With options
13
+ * floimg qr "https://floimg.com" --size 400 --format svg -o qr.svg
14
+ *
15
+ * # High error correction
16
+ * floimg qr "https://floimg.com" --error-correction H
17
+ * ```
18
+ */
19
+ export declare const qrCommand: Command;
20
+ //# sourceMappingURL=qr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/qr.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,SAAS,SAqElB,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { writeFile } from "fs/promises";
2
+ import { Command } from "commander";
3
+ import createClient from "../../index.js";
4
+ import { loadConfig } from "../../config/loader.js";
5
+ import { loadPlugin, showNpxTip } from "../utils/plugin-loader.js";
6
+ /**
7
+ * Shorthand command for generating QR codes
8
+ *
9
+ * This command auto-installs @teamflojo/floimg-qr if not present.
10
+ *
11
+ * @example
12
+ * ```bash
13
+ * # Basic usage - text as first argument
14
+ * floimg qr "https://floimg.com" -o qr.png
15
+ *
16
+ * # With options
17
+ * floimg qr "https://floimg.com" --size 400 --format svg -o qr.svg
18
+ *
19
+ * # High error correction
20
+ * floimg qr "https://floimg.com" --error-correction H
21
+ * ```
22
+ */
23
+ export const qrCommand = new Command("qr")
24
+ .description("Generate a QR code (auto-installs @teamflojo/floimg-qr if needed)")
25
+ .argument("<text>", "Text or URL to encode in the QR code")
26
+ .option("-o, --out <path>", "Output file path (default: qr.png)", "qr.png")
27
+ .option("-s, --size <pixels>", "Size in pixels", "300")
28
+ .option("-f, --format <format>", "Output format: png, svg", "png")
29
+ .option("-e, --error-correction <level>", "Error correction: L, M, Q, H", "M")
30
+ .option("-m, --margin <modules>", "Quiet zone margin", "4")
31
+ .option("--dark <color>", "Dark color (hex)", "#000000")
32
+ .option("--light <color>", "Light color (hex)", "#ffffff")
33
+ .option("--no-auto-install", "Don't prompt to install missing plugins")
34
+ .option("--config <path>", "Path to config file")
35
+ .action(async (text, options) => {
36
+ try {
37
+ const config = await loadConfig(options.config);
38
+ const client = createClient(config);
39
+ // Load the QR plugin (auto-installs if needed)
40
+ const qrPlugin = await loadPlugin("qr", options.autoInstall !== false);
41
+ if (!qrPlugin) {
42
+ process.exit(1);
43
+ }
44
+ client.registerGenerator(qrPlugin.default());
45
+ const blob = await client.generate({
46
+ generator: "qr",
47
+ params: {
48
+ text,
49
+ width: parseInt(options.size, 10),
50
+ format: options.format,
51
+ errorCorrectionLevel: options.errorCorrection,
52
+ margin: parseInt(options.margin, 10),
53
+ color: {
54
+ dark: options.dark,
55
+ light: options.light,
56
+ },
57
+ },
58
+ });
59
+ // Determine output path with correct extension
60
+ let outPath = options.out;
61
+ if (outPath === "qr.png" && options.format === "svg") {
62
+ outPath = "qr.svg";
63
+ }
64
+ if (outPath.includes("://")) {
65
+ // Cloud storage
66
+ const result = await client.save(blob, outPath);
67
+ console.log(`✅ QR code saved to: ${result.location}`);
68
+ }
69
+ else {
70
+ // Local file
71
+ await writeFile(outPath, blob.bytes);
72
+ console.log(`✅ QR code saved to: ${outPath}`);
73
+ }
74
+ // Show tip for npx users
75
+ showNpxTip();
76
+ }
77
+ catch (error) {
78
+ console.error("Error generating QR code:", error instanceof Error ? error.message : error);
79
+ process.exit(1);
80
+ }
81
+ });
82
+ //# sourceMappingURL=qr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qr.js","sourceRoot":"","sources":["../../../src/cli/commands/qr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Command } from "commander";
2
+ /**
3
+ * Shorthand command for resizing images
4
+ *
5
+ * @example
6
+ * ```bash
7
+ * # Resize to specific dimensions
8
+ * floimg resize input.jpg 800x600 -o output.jpg
9
+ *
10
+ * # Resize width only (maintain aspect ratio)
11
+ * floimg resize input.jpg 800 -o output.jpg
12
+ *
13
+ * # Fit within bounds
14
+ * floimg resize input.jpg 800x600 --fit contain -o output.jpg
15
+ * ```
16
+ */
17
+ export declare const resizeCommand: Command;
18
+ //# sourceMappingURL=resize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/resize.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,aAAa,SAqEtB,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { readFile, writeFile } from "fs/promises";
2
+ import { Command } from "commander";
3
+ import createClient from "../../index.js";
4
+ import { loadConfig } from "../../config/loader.js";
5
+ /**
6
+ * Parse size argument in format "WIDTHxHEIGHT" or just "WIDTH"
7
+ */
8
+ function parseSize(size) {
9
+ if (size.includes("x")) {
10
+ const [w, h] = size.split("x").map((s) => parseInt(s, 10));
11
+ return { width: w, height: h };
12
+ }
13
+ // Single number = width, maintain aspect ratio
14
+ return { width: parseInt(size, 10) };
15
+ }
16
+ /**
17
+ * Detect MIME type from file extension
18
+ */
19
+ function detectMime(filepath) {
20
+ const ext = filepath.split(".").pop()?.toLowerCase();
21
+ const mimeMap = {
22
+ png: "image/png",
23
+ jpg: "image/jpeg",
24
+ jpeg: "image/jpeg",
25
+ webp: "image/webp",
26
+ avif: "image/avif",
27
+ svg: "image/svg+xml",
28
+ };
29
+ return mimeMap[ext || ""] || "image/png";
30
+ }
31
+ /**
32
+ * Shorthand command for resizing images
33
+ *
34
+ * @example
35
+ * ```bash
36
+ * # Resize to specific dimensions
37
+ * floimg resize input.jpg 800x600 -o output.jpg
38
+ *
39
+ * # Resize width only (maintain aspect ratio)
40
+ * floimg resize input.jpg 800 -o output.jpg
41
+ *
42
+ * # Fit within bounds
43
+ * floimg resize input.jpg 800x600 --fit contain -o output.jpg
44
+ * ```
45
+ */
46
+ export const resizeCommand = new Command("resize")
47
+ .description("Resize an image (shorthand for transform --op resize)")
48
+ .argument("<input>", "Input image file")
49
+ .argument("<size>", "Target size: WIDTHxHEIGHT or WIDTH (e.g., 800x600 or 800)")
50
+ .option("-o, --out <path>", "Output file path")
51
+ .option("--fit <mode>", "Fit mode: cover, contain, fill, inside, outside", "cover")
52
+ .option("--position <pos>", "Position when cropping: center, top, bottom, left, right, etc.", "center")
53
+ .option("--background <color>", "Background color for contain mode", "#ffffff")
54
+ .option("--config <path>", "Path to config file")
55
+ .action(async (input, size, options) => {
56
+ try {
57
+ const config = await loadConfig(options.config);
58
+ const client = createClient(config);
59
+ // Read input file
60
+ const inputBytes = await readFile(input);
61
+ const mime = detectMime(input);
62
+ const inputBlob = {
63
+ bytes: inputBytes,
64
+ mime,
65
+ };
66
+ // Parse size
67
+ const { width, height } = parseSize(size);
68
+ const result = await client.transform({
69
+ blob: inputBlob,
70
+ op: "resize",
71
+ params: {
72
+ width,
73
+ height,
74
+ fit: options.fit,
75
+ position: options.position,
76
+ background: options.background,
77
+ },
78
+ });
79
+ // Determine output path
80
+ const outPath = options.out || input.replace(/(\.[^.]+)$/, "-resized$1");
81
+ if (outPath.includes("://")) {
82
+ // Cloud storage
83
+ const saveResult = await client.save(result, outPath);
84
+ console.log(`Resized image saved to: ${saveResult.location}`);
85
+ }
86
+ else {
87
+ // Local file
88
+ await writeFile(outPath, result.bytes);
89
+ console.log(`Resized image saved to: ${outPath}`);
90
+ }
91
+ if (result.width && result.height) {
92
+ console.log(`New size: ${result.width}x${result.height}`);
93
+ }
94
+ }
95
+ catch (error) {
96
+ console.error("Error resizing image:", error instanceof Error ? error.message : error);
97
+ process.exit(1);
98
+ }
99
+ });
100
+ //# sourceMappingURL=resize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize.js","sourceRoot":"","sources":["../../../src/cli/commands/resize.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -9,6 +9,13 @@ import { pluginsCommand } from "./commands/plugins.js";
9
9
  import { mcpCommand } from "./commands/mcp.js";
10
10
  import { filterCommand, presetCommand } from "./commands/filter.js";
11
11
  import { textCommand } from "./commands/text.js";
12
+ // Shorthand commands for common operations
13
+ import { qrCommand } from "./commands/qr.js";
14
+ import { resizeCommand } from "./commands/resize.js";
15
+ import { convertCommand } from "./commands/convert.js";
16
+ import { chartCommand } from "./commands/chart.js";
17
+ // Interactive mode
18
+ import { showInteractiveMenu, shouldShowInteractiveMenu } from "./interactive.js";
12
19
  import { readFile } from "fs/promises";
13
20
  import { fileURLToPath } from "url";
14
21
  import { dirname, join, resolve } from "path";
@@ -30,6 +37,7 @@ program
30
37
  .name("floimg")
31
38
  .description("Universal image workflow engine for developers and AI agents")
32
39
  .version(version);
40
+ // Core commands (full API)
33
41
  program.addCommand(generateCommand);
34
42
  program.addCommand(transformCommand);
35
43
  program.addCommand(saveCommand);
@@ -40,6 +48,11 @@ program.addCommand(mcpCommand);
40
48
  program.addCommand(filterCommand);
41
49
  program.addCommand(presetCommand);
42
50
  program.addCommand(textCommand);
51
+ // Shorthand commands (convenience wrappers)
52
+ program.addCommand(qrCommand);
53
+ program.addCommand(resizeCommand);
54
+ program.addCommand(convertCommand);
55
+ program.addCommand(chartCommand);
43
56
  // Enhanced doctor command
44
57
  program
45
58
  .command("doctor")
@@ -135,5 +148,11 @@ program
135
148
  console.log(" floimg mcp install # Set up MCP for Claude Code");
136
149
  console.log(" floimg generate --generator shapes --params '{\"type\":\"gradient\"}' --out test.svg");
137
150
  });
138
- program.parse();
151
+ // Check if we should show interactive menu (no args provided)
152
+ if (shouldShowInteractiveMenu(process.argv)) {
153
+ showInteractiveMenu().catch(console.error);
154
+ }
155
+ else {
156
+ program.parse();
157
+ }
139
158
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Display the interactive menu and handle user selection
3
+ */
4
+ export declare function showInteractiveMenu(): Promise<void>;
5
+ /**
6
+ * Check if we should show the interactive menu
7
+ * (called when floimg is run with no arguments)
8
+ */
9
+ export declare function shouldShowInteractiveMenu(args: string[]): boolean;
10
+ //# sourceMappingURL=interactive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../src/cli/interactive.ts"],"names":[],"mappings":"AA0DA;;GAEG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,IAAI,CAAC,CAiEzD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAKjE"}
@@ -0,0 +1,115 @@
1
+ import { createInterface } from "readline";
2
+ const MENU_OPTIONS = [
3
+ {
4
+ key: "1",
5
+ label: "Generate QR Code",
6
+ description: "Create a QR code from text or URL",
7
+ command: "floimg qr",
8
+ example: 'floimg qr "https://floimg.com" -o qr.png',
9
+ },
10
+ {
11
+ key: "2",
12
+ label: "Create Chart",
13
+ description: "Generate bar, line, pie charts and more",
14
+ command: "floimg chart",
15
+ example: 'floimg chart bar --labels "A,B,C" --values "10,20,30"',
16
+ },
17
+ {
18
+ key: "3",
19
+ label: "Resize Image",
20
+ description: "Resize an image to new dimensions",
21
+ command: "floimg resize",
22
+ example: "floimg resize input.jpg 800x600 -o output.jpg",
23
+ },
24
+ {
25
+ key: "4",
26
+ label: "Convert Format",
27
+ description: "Convert between image formats (PNG, WebP, JPEG, etc.)",
28
+ command: "floimg convert",
29
+ example: "floimg convert input.png -o output.webp",
30
+ },
31
+ {
32
+ key: "5",
33
+ label: "Run Workflow",
34
+ description: "Execute a YAML workflow file",
35
+ command: "floimg run",
36
+ example: "floimg run workflow.yaml",
37
+ },
38
+ {
39
+ key: "6",
40
+ label: "See All Commands",
41
+ description: "View help for all available commands",
42
+ command: "floimg --help",
43
+ example: "floimg --help",
44
+ },
45
+ ];
46
+ /**
47
+ * Display the interactive menu and handle user selection
48
+ */
49
+ export async function showInteractiveMenu() {
50
+ console.log("");
51
+ console.log("╭─────────────────────────────────────────────────────────╮");
52
+ console.log("│ │");
53
+ console.log("│ \x1b[1m\x1b[36mfloimg\x1b[0m - Universal Image Workflow Engine │");
54
+ console.log("│ │");
55
+ console.log("╰─────────────────────────────────────────────────────────╯");
56
+ console.log("");
57
+ console.log("\x1b[1mWhat would you like to do?\x1b[0m");
58
+ console.log("");
59
+ for (const option of MENU_OPTIONS) {
60
+ console.log(` \x1b[36m${option.key})\x1b[0m ${option.label}`);
61
+ console.log(` \x1b[2m${option.description}\x1b[0m`);
62
+ }
63
+ console.log("");
64
+ console.log(" \x1b[36mq)\x1b[0m Quit");
65
+ console.log("");
66
+ // Check if we're in a TTY
67
+ if (!process.stdin.isTTY) {
68
+ console.log("Run with a command, e.g.:");
69
+ console.log(' floimg qr "https://example.com" -o qr.png');
70
+ console.log("");
71
+ console.log("Or see all options with: floimg --help");
72
+ return;
73
+ }
74
+ const rl = createInterface({
75
+ input: process.stdin,
76
+ output: process.stdout,
77
+ });
78
+ const answer = await new Promise((resolve) => {
79
+ rl.question("Enter choice (1-6, or q): ", resolve);
80
+ });
81
+ rl.close();
82
+ const choice = answer.trim().toLowerCase();
83
+ if (choice === "q" || choice === "quit" || choice === "exit") {
84
+ console.log("\nGoodbye!");
85
+ return;
86
+ }
87
+ const selected = MENU_OPTIONS.find((o) => o.key === choice);
88
+ if (!selected) {
89
+ console.log("\nInvalid choice. Run floimg --help for all options.");
90
+ return;
91
+ }
92
+ console.log("");
93
+ console.log(`\x1b[1m${selected.label}\x1b[0m`);
94
+ console.log("");
95
+ console.log("Usage:");
96
+ console.log(` ${selected.command} [options]`);
97
+ console.log("");
98
+ console.log("Example:");
99
+ console.log(` ${selected.example}`);
100
+ console.log("");
101
+ console.log("For more options, run:");
102
+ console.log(` ${selected.command} --help`);
103
+ console.log("");
104
+ }
105
+ /**
106
+ * Check if we should show the interactive menu
107
+ * (called when floimg is run with no arguments)
108
+ */
109
+ export function shouldShowInteractiveMenu(args) {
110
+ // Show interactive menu if no command is provided
111
+ // args[0] is 'node', args[1] is the script path
112
+ // If there's a third argument, it's a command
113
+ return args.length <= 2;
114
+ }
115
+ //# sourceMappingURL=interactive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive.js","sourceRoot":"","sources":["../../src/cli/interactive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Plugin metadata for auto-installation
3
+ */
4
+ export interface PluginInfo {
5
+ /** npm package name */
6
+ package: string;
7
+ /** Human-readable name for display */
8
+ displayName: string;
9
+ /** The generator name it provides */
10
+ generatorName: string;
11
+ }
12
+ /**
13
+ * Registry of known plugins and their packages
14
+ */
15
+ export declare const PLUGIN_REGISTRY: Record<string, PluginInfo>;
16
+ /**
17
+ * Try to load a plugin, with auto-install if not found
18
+ *
19
+ * @param pluginKey - Key from PLUGIN_REGISTRY (e.g., "qr", "quickchart")
20
+ * @param autoInstall - Whether to prompt for auto-install (default: true)
21
+ * @returns The loaded plugin module, or null if not available
22
+ */
23
+ export declare function loadPlugin<T = unknown>(pluginKey: string, autoInstall?: boolean): Promise<T | null>;
24
+ /**
25
+ * Check if running via npx
26
+ */
27
+ export declare function isRunningViaNpx(): boolean;
28
+ /**
29
+ * Show a helpful tip for npx users after first successful run
30
+ */
31
+ export declare function showNpxTip(): void;
32
+ //# sourceMappingURL=plugin-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-loader.d.ts","sourceRoot":"","sources":["../../../src/cli/utils/plugin-loader.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,uBAAuB;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CA0BtD,CAAC;AA2DF;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,CAAC,GAAG,OAAO,EAC1C,SAAS,EAAE,MAAM,EACjB,WAAW,UAAO,GACjB,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAsDnB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,IAAI,CAMjC"}