torch-glare 1.2.8 → 1.2.9

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 (36) hide show
  1. package/dist/bin/index.js +5 -0
  2. package/dist/bin/index.js.map +1 -1
  3. package/dist/src/commands/mcp.d.ts +2 -0
  4. package/dist/src/commands/mcp.d.ts.map +1 -0
  5. package/dist/src/commands/mcp.js +91 -0
  6. package/dist/src/commands/mcp.js.map +1 -0
  7. package/dist/src/shared/configureFonts.d.ts +6 -0
  8. package/dist/src/shared/configureFonts.d.ts.map +1 -0
  9. package/dist/src/shared/configureFonts.js +106 -0
  10. package/dist/src/shared/configureFonts.js.map +1 -0
  11. package/dist/src/shared/configureGlobalCss.d.ts +6 -0
  12. package/dist/src/shared/configureGlobalCss.d.ts.map +1 -0
  13. package/dist/src/shared/configureGlobalCss.js +154 -0
  14. package/dist/src/shared/configureGlobalCss.js.map +1 -0
  15. package/dist/src/shared/configureTailwind.d.ts +7 -0
  16. package/dist/src/shared/configureTailwind.d.ts.map +1 -0
  17. package/dist/src/shared/configureTailwind.js +163 -0
  18. package/dist/src/shared/configureTailwind.js.map +1 -0
  19. package/dist/src/shared/detectFramework.d.ts +23 -0
  20. package/dist/src/shared/detectFramework.d.ts.map +1 -0
  21. package/dist/src/shared/detectFramework.js +119 -0
  22. package/dist/src/shared/detectFramework.js.map +1 -0
  23. package/dist/src/shared/installBaseUtils.d.ts +5 -0
  24. package/dist/src/shared/installBaseUtils.d.ts.map +1 -0
  25. package/dist/src/shared/installBaseUtils.js +79 -0
  26. package/dist/src/shared/installBaseUtils.js.map +1 -0
  27. package/dist/src/shared/resolveAliases.d.ts +24 -0
  28. package/dist/src/shared/resolveAliases.d.ts.map +1 -0
  29. package/dist/src/shared/resolveAliases.js +98 -0
  30. package/dist/src/shared/resolveAliases.js.map +1 -0
  31. package/docs/components/breadcrumb.md +955 -0
  32. package/docs/components/button-group.md +647 -0
  33. package/docs/components/text-editor.md +711 -0
  34. package/docs/components/toggle-button.md +640 -0
  35. package/docs/tutorials/getting-started.md +123 -431
  36. package/package.json +1 -1
package/dist/bin/index.js CHANGED
@@ -7,6 +7,7 @@ import { addLayout } from "../src/commands/layout.js";
7
7
  import { addUtil } from "../src/commands/utils.js";
8
8
  import { addProvider } from "../src/commands/provider.js";
9
9
  import { updateInstalledComponents } from "../src/commands/update.js";
10
+ import { setupMcp } from "../src/commands/mcp.js";
10
11
  const program = new Command();
11
12
  program
12
13
  .name("torch-glare")
@@ -40,5 +41,9 @@ program
40
41
  .command("update")
41
42
  .description("Update everything installed")
42
43
  .action(() => updateInstalledComponents());
44
+ program
45
+ .command("mcp")
46
+ .description("Set up TORCH Glare MCP server for your AI client")
47
+ .action(() => setupMcp());
43
48
  program.parse(process.argv);
44
49
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../cli/bin/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AAEtE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,SAAS,MAAM,CAAC,CAAC,CAAC;AAE/D,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAEhD,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC;AAE5D,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;AAEnD,OAAO;KACJ,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;AAEhE,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,yBAAyB,EAAE,CAAC,CAAC;AAE7C,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../cli/bin/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,wBAAwB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,aAAa,CAAC;KACnB,WAAW,CAAC,2CAA2C,CAAC;KACxD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC;AAE9B,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,0DAA0D,CAAC;KACvE,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,IAAI,GAAG,SAAS,MAAM,CAAC,CAAC,CAAC;AAE/D,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,qDAAqD,CAAC;KAClE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;AAEhD,OAAO;KACJ,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,uDAAuD,CAAC;KACpE,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC;AAE5D,OAAO;KACJ,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC;AAEnD,OAAO;KACJ,OAAO,CAAC,qBAAqB,CAAC;KAC9B,WAAW,CAAC,yDAAyD,CAAC;KACtE,MAAM,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,WAAW,CAAC,QAAQ,IAAI,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;AAEhE,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,6BAA6B,CAAC;KAC1C,MAAM,CAAC,GAAG,EAAE,CAAC,yBAAyB,EAAE,CAAC,CAAC;AAE7C,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;AAE5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function setupMcp(): Promise<void>;
2
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../cli/src/commands/mcp.ts"],"names":[],"mappings":"AA0DA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAyD9C"}
@@ -0,0 +1,91 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import os from "os";
4
+ import inquirer from "inquirer";
5
+ const MCP_CONFIG = {
6
+ "torch-glare-docs": {
7
+ command: "npx",
8
+ args: ["-y", "torch-glare-mcp"],
9
+ },
10
+ };
11
+ const clients = [
12
+ {
13
+ name: "Claude Code",
14
+ value: "claude-code",
15
+ configPath: () => path.join(process.cwd(), ".mcp.json"),
16
+ description: "Adds to .mcp.json in your project root",
17
+ },
18
+ {
19
+ name: "Claude Desktop",
20
+ value: "claude-desktop",
21
+ configPath: () => {
22
+ const platform = os.platform();
23
+ if (platform === "darwin") {
24
+ return path.join(os.homedir(), "Library", "Application Support", "Claude", "claude_desktop_config.json");
25
+ }
26
+ else if (platform === "win32") {
27
+ return path.join(os.homedir(), "AppData", "Roaming", "Claude", "claude_desktop_config.json");
28
+ }
29
+ return path.join(os.homedir(), ".config", "claude", "claude_desktop_config.json");
30
+ },
31
+ description: "Adds to Claude Desktop config",
32
+ },
33
+ {
34
+ name: "Cursor",
35
+ value: "cursor",
36
+ configPath: () => path.join(process.cwd(), ".cursor", "mcp.json"),
37
+ description: "Adds to .cursor/mcp.json in your project",
38
+ },
39
+ ];
40
+ export async function setupMcp() {
41
+ console.log("\n🔧 TORCH Glare MCP Server Setup\n");
42
+ const { selectedClients } = await inquirer.prompt([
43
+ {
44
+ type: "checkbox",
45
+ name: "selectedClients",
46
+ message: "Which AI clients do you use?",
47
+ choices: clients.map((c) => ({
48
+ name: `${c.name} — ${c.description}`,
49
+ value: c.value,
50
+ })),
51
+ validate: (answer) => {
52
+ if (answer.length === 0)
53
+ return "Select at least one client.";
54
+ return true;
55
+ },
56
+ },
57
+ ]);
58
+ for (const clientValue of selectedClients) {
59
+ const client = clients.find((c) => c.value === clientValue);
60
+ const configPath = client.configPath();
61
+ try {
62
+ // Ensure parent directory exists
63
+ const dir = path.dirname(configPath);
64
+ if (!fs.existsSync(dir)) {
65
+ fs.mkdirSync(dir, { recursive: true });
66
+ }
67
+ // Read existing config or create empty
68
+ let config = {};
69
+ if (fs.existsSync(configPath)) {
70
+ const raw = fs.readFileSync(configPath, "utf-8");
71
+ config = JSON.parse(raw);
72
+ }
73
+ // Add MCP server entry
74
+ if (!config.mcpServers) {
75
+ config.mcpServers = {};
76
+ }
77
+ if (config.mcpServers["torch-glare-docs"]) {
78
+ console.log(`⚠️ ${client.name}: torch-glare-docs already configured, skipping.`);
79
+ continue;
80
+ }
81
+ config.mcpServers["torch-glare-docs"] = MCP_CONFIG["torch-glare-docs"];
82
+ fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
83
+ console.log(`✅ ${client.name}: Added torch-glare-docs to ${configPath}`);
84
+ }
85
+ catch (err) {
86
+ console.error(`❌ ${client.name}: Failed to write config — ${err.message}`);
87
+ }
88
+ }
89
+ console.log("\n🎉 Done! Restart your AI client to activate the MCP server.\n");
90
+ }
91
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../cli/src/commands/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Framework } from "./detectFramework.js";
2
+ /**
3
+ * Configure font links in the project's layout or HTML file.
4
+ */
5
+ export declare function configureFonts(framework: Framework, defaults?: boolean): Promise<void>;
6
+ //# sourceMappingURL=configureFonts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureFonts.d.ts","sourceRoot":"","sources":["../../../cli/src/shared/configureFonts.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAkB,MAAM,sBAAsB,CAAC;AAQjE;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDnG"}
@@ -0,0 +1,106 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import inquirer from "inquirer";
4
+ import { findLayoutPath } from "./detectFramework.js";
5
+ const FONT_LINKS = [
6
+ `<link href="https://cdn.jsdelivr.net/npm/remixicon@4.5.0/fonts/remixicon.css" rel="stylesheet" />`,
7
+ `<link rel="stylesheet" href="https://cdn.statically.io/gh/TORCH-Corp/SF-PRO-FONT/main/font/fonts.css" />`,
8
+ `<link rel="preload" href="https://cdn.statically.io/gh/TORCH-Corp/SF-PRO-FONT/main/font/SF-Pro.woff2" as="font" type="font/woff2" crossOrigin="" />`,
9
+ ];
10
+ /**
11
+ * Configure font links in the project's layout or HTML file.
12
+ */
13
+ export async function configureFonts(framework, defaults = false) {
14
+ const layoutPath = findLayoutPath(framework);
15
+ if (!layoutPath) {
16
+ console.log(" ⚠️ Could not find layout file. Add font links manually:");
17
+ printManualFontInstructions();
18
+ return;
19
+ }
20
+ const fullPath = path.join(process.cwd(), layoutPath);
21
+ const content = fs.readFileSync(fullPath, "utf-8");
22
+ // Check if fonts are already added
23
+ if (content.includes("remixicon") && content.includes("SF-PRO-FONT")) {
24
+ console.log(` ✅ ${layoutPath} already has TORCH Glare font links`);
25
+ return;
26
+ }
27
+ // Ask user (skip if defaults mode)
28
+ if (!defaults) {
29
+ const { shouldModify } = await inquirer.prompt([
30
+ {
31
+ type: "confirm",
32
+ name: "shouldModify",
33
+ message: `Add TORCH Glare font links (RemixIcon + SF Pro) to ${layoutPath}?`,
34
+ default: true,
35
+ },
36
+ ]);
37
+ if (!shouldModify) {
38
+ console.log(" ⏭️ Skipped adding font links. Add them manually:");
39
+ printManualFontInstructions();
40
+ return;
41
+ }
42
+ }
43
+ // Backup
44
+ const backupPath = fullPath + ".bak";
45
+ fs.copyFileSync(fullPath, backupPath);
46
+ console.log(` 📋 Backup created: ${layoutPath}.bak`);
47
+ // Inject based on file type
48
+ if (layoutPath.endsWith(".html")) {
49
+ injectIntoHtml(fullPath, content);
50
+ }
51
+ else {
52
+ injectIntoJsxLayout(fullPath, content);
53
+ }
54
+ console.log(` ✅ Added font links to ${layoutPath}`);
55
+ }
56
+ /**
57
+ * Inject font links into an HTML file (Vite/React).
58
+ */
59
+ function injectIntoHtml(filePath, content) {
60
+ const indent = " ";
61
+ const fontLinksStr = FONT_LINKS.map(link => `${indent}${link}`).join("\n");
62
+ let modified;
63
+ if (content.includes("</head>")) {
64
+ modified = content.replace("</head>", `${fontLinksStr}\n </head>`);
65
+ }
66
+ else {
67
+ // No </head> found, prepend
68
+ modified = `<head>\n${fontLinksStr}\n</head>\n${content}`;
69
+ }
70
+ fs.writeFileSync(filePath, modified);
71
+ }
72
+ /**
73
+ * Inject font links into a JSX/TSX layout file (Next.js App Router).
74
+ */
75
+ function injectIntoJsxLayout(filePath, content) {
76
+ const indent = " ";
77
+ const fontLinksJsx = FONT_LINKS.map(link => `${indent}${link}`).join("\n");
78
+ let modified;
79
+ // Try to find <head> tag in the JSX
80
+ if (content.includes("<head>") || content.includes("<head ")) {
81
+ // Insert after <head> opening tag
82
+ modified = content.replace(/(<head[^>]*>)/, `$1\n${fontLinksJsx}`);
83
+ }
84
+ else if (content.includes("</head>")) {
85
+ modified = content.replace("</head>", `${fontLinksJsx}\n${indent}</head>`);
86
+ }
87
+ else if (content.includes("<html")) {
88
+ // Next.js layout without explicit <head> — add <head> tag
89
+ modified = content.replace(/(<html[^>]*>)/, `$1\n <head>\n${fontLinksJsx}\n </head>`);
90
+ }
91
+ else {
92
+ // Fallback: can't figure out where to inject
93
+ console.log(" ⚠️ Could not determine injection point. Add font links manually:");
94
+ printManualFontInstructions();
95
+ return;
96
+ }
97
+ fs.writeFileSync(filePath, modified);
98
+ }
99
+ function printManualFontInstructions() {
100
+ console.log("\n Add these to your <head>:");
101
+ for (const link of FONT_LINKS) {
102
+ console.log(` ${link}`);
103
+ }
104
+ console.log("");
105
+ }
106
+ //# sourceMappingURL=configureFonts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureFonts.js","sourceRoot":"","sources":["../../../cli/src/shared/configureFonts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { Framework } from "./detectFramework.js";
2
+ /**
3
+ * Configure the global CSS file based on Tailwind version.
4
+ */
5
+ export declare function configureGlobalCss(framework: Framework, tailwindVersion: 3 | 4, defaults?: boolean): Promise<string | null>;
6
+ //# sourceMappingURL=configureGlobalCss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureGlobalCss.d.ts","sourceRoot":"","sources":["../../../cli/src/shared/configureGlobalCss.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAqB,MAAM,sBAAsB,CAAC;AAgBpE;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxI"}
@@ -0,0 +1,154 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import inquirer from "inquirer";
4
+ import { findGlobalCssPath } from "./detectFramework.js";
5
+ const V4_PLUGIN_DIRECTIVES = `@import "tailwindcss";
6
+ @import "mapping-color-system-v4/tailwindVars.css";
7
+ @plugin "glare-torch-mode";
8
+ @plugin "tailwind-scrollbar-hide";
9
+ @plugin "tailwindcss-animate";
10
+ @plugin "glare-typography";
11
+ @plugin "mapping-color-system-v4";
12
+ `;
13
+ const V3_TAILWIND_DIRECTIVES = `@tailwind base;
14
+ @tailwind components;
15
+ @tailwind utilities;
16
+ `;
17
+ /**
18
+ * Configure the global CSS file based on Tailwind version.
19
+ */
20
+ export async function configureGlobalCss(framework, tailwindVersion, defaults = false) {
21
+ const existingCss = findGlobalCssPath(framework);
22
+ if (tailwindVersion === 4) {
23
+ return await configureV4Css(existingCss, framework, defaults);
24
+ }
25
+ else {
26
+ return await configureV3Css(existingCss, framework, defaults);
27
+ }
28
+ }
29
+ /**
30
+ * Configure global CSS for Tailwind v4 (add @plugin directives).
31
+ */
32
+ async function configureV4Css(existingCss, framework, defaults = false) {
33
+ if (!existingCss) {
34
+ // Create new CSS file
35
+ const cssPath = framework === "next" ? "app/globals.css" : "src/index.css";
36
+ const fullPath = path.join(process.cwd(), cssPath);
37
+ ensureDir(path.dirname(fullPath));
38
+ fs.writeFileSync(fullPath, V4_PLUGIN_DIRECTIVES + "\n");
39
+ console.log(` ✅ Created ${cssPath} with Tailwind v4 plugin directives`);
40
+ return cssPath;
41
+ }
42
+ // Check if already configured
43
+ const fullPath = path.join(process.cwd(), existingCss);
44
+ const content = fs.readFileSync(fullPath, "utf-8");
45
+ if (content.includes("glare-torch-mode")) {
46
+ console.log(` ✅ ${existingCss} already has TORCH Glare plugins`);
47
+ return existingCss;
48
+ }
49
+ // Ask user (skip if defaults mode)
50
+ if (!defaults) {
51
+ const { shouldModify } = await inquirer.prompt([
52
+ {
53
+ type: "confirm",
54
+ name: "shouldModify",
55
+ message: `${existingCss} exists. Add TORCH Glare v4 plugin directives?`,
56
+ default: true,
57
+ },
58
+ ]);
59
+ if (!shouldModify) {
60
+ console.log(` ⏭️ Skipped modifying ${existingCss}`);
61
+ return existingCss;
62
+ }
63
+ }
64
+ // Backup and modify
65
+ const backupPath = fullPath + ".bak";
66
+ fs.copyFileSync(fullPath, backupPath);
67
+ console.log(` 📋 Backup created: ${existingCss}.bak`);
68
+ // Build the directives to add (only missing ones)
69
+ const lines = V4_PLUGIN_DIRECTIVES.split("\n").filter(line => line.trim());
70
+ const missingLines = lines.filter(line => !content.includes(line.trim()));
71
+ if (missingLines.length > 0) {
72
+ // Split missing lines into groups to maintain correct CSS order:
73
+ // @import "tailwindcss" must come first, then other @imports, then @plugins
74
+ const missingTailwindImport = missingLines.filter(l => l.startsWith("@import") && l.includes('"tailwindcss"'));
75
+ const missingImports = missingLines.filter(l => l.startsWith("@import") && !l.includes('"tailwindcss"'));
76
+ const missingPlugins = missingLines.filter(l => l.startsWith("@plugin"));
77
+ let modified = content;
78
+ const hasTailwindImport = content.includes('@import "tailwindcss"') || content.includes("@import 'tailwindcss'");
79
+ if (hasTailwindImport) {
80
+ // Add @import lines right after the tailwindcss import
81
+ if (missingImports.length > 0) {
82
+ modified = modified.replace(/(@import\s+["']tailwindcss["'];?\s*\n?)/, `$1${missingImports.join("\n")}\n`);
83
+ }
84
+ // Add @plugin lines after all @import lines
85
+ if (missingPlugins.length > 0) {
86
+ const lastImportMatch = modified.match(/.*@import[^\n]*\n/g);
87
+ if (lastImportMatch && lastImportMatch.length > 0) {
88
+ const lastImport = lastImportMatch[lastImportMatch.length - 1];
89
+ modified = modified.replace(lastImport, `${lastImport}${missingPlugins.join("\n")}\n`);
90
+ }
91
+ else {
92
+ modified = missingPlugins.join("\n") + "\n" + modified;
93
+ }
94
+ }
95
+ }
96
+ else {
97
+ // No tailwindcss import — prepend all directives in correct order:
98
+ // @import "tailwindcss" first, then other @imports, then @plugins
99
+ const allDirectives = [...missingTailwindImport, ...missingImports, ...missingPlugins];
100
+ modified = allDirectives.join("\n") + "\n\n" + content;
101
+ }
102
+ fs.writeFileSync(fullPath, modified);
103
+ }
104
+ console.log(` ✅ Updated ${existingCss} with Tailwind v4 plugin directives`);
105
+ return existingCss;
106
+ }
107
+ /**
108
+ * Configure global CSS for Tailwind v3 (ensure @tailwind directives exist).
109
+ */
110
+ async function configureV3Css(existingCss, framework, defaults = false) {
111
+ if (!existingCss) {
112
+ // Create new CSS file
113
+ const cssPath = framework === "next" ? "app/globals.css" : "src/index.css";
114
+ const fullPath = path.join(process.cwd(), cssPath);
115
+ ensureDir(path.dirname(fullPath));
116
+ fs.writeFileSync(fullPath, V3_TAILWIND_DIRECTIVES + "\n");
117
+ console.log(` ✅ Created ${cssPath} with Tailwind v3 directives`);
118
+ return cssPath;
119
+ }
120
+ // Check if @tailwind directives already exist
121
+ const fullPath = path.join(process.cwd(), existingCss);
122
+ const content = fs.readFileSync(fullPath, "utf-8");
123
+ if (content.includes("@tailwind base")) {
124
+ console.log(` ✅ ${existingCss} already has Tailwind directives`);
125
+ return existingCss;
126
+ }
127
+ // Ask user (skip if defaults mode)
128
+ if (!defaults) {
129
+ const { shouldModify } = await inquirer.prompt([
130
+ {
131
+ type: "confirm",
132
+ name: "shouldModify",
133
+ message: `${existingCss} exists but missing @tailwind directives. Add them?`,
134
+ default: true,
135
+ },
136
+ ]);
137
+ if (!shouldModify) {
138
+ return existingCss;
139
+ }
140
+ }
141
+ // Backup and prepend
142
+ const backupPath = fullPath + ".bak";
143
+ fs.copyFileSync(fullPath, backupPath);
144
+ console.log(` 📋 Backup created: ${existingCss}.bak`);
145
+ fs.writeFileSync(fullPath, V3_TAILWIND_DIRECTIVES + "\n" + content);
146
+ console.log(` ✅ Updated ${existingCss} with Tailwind v3 directives`);
147
+ return existingCss;
148
+ }
149
+ function ensureDir(dirPath) {
150
+ if (!fs.existsSync(dirPath)) {
151
+ fs.mkdirSync(dirPath, { recursive: true });
152
+ }
153
+ }
154
+ //# sourceMappingURL=configureGlobalCss.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureGlobalCss.js","sourceRoot":"","sources":["../../../cli/src/shared/configureGlobalCss.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Configure Tailwind CSS for v3 projects.
3
+ * If no config exists, creates one from template.
4
+ * If config exists, asks the user then injects TORCH plugins.
5
+ */
6
+ export declare function configureTailwindV3(basePath: string, defaults?: boolean): Promise<string>;
7
+ //# sourceMappingURL=configureTailwind.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureTailwind.d.ts","sourceRoot":"","sources":["../../../cli/src/shared/configureTailwind.ts"],"names":[],"mappings":"AAkCA;;;;GAIG;AACH,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,OAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CA2CtG"}
@@ -0,0 +1,163 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import inquirer from "inquirer";
4
+ import { findTailwindConfigPath } from "./detectFramework.js";
5
+ const TAILWIND_V3_TEMPLATE = (contentPaths) => `\
6
+ const { plugin, mappingVars } = require('mapping-color-system')
7
+ import type { Config } from "tailwindcss";
8
+
9
+ export default {
10
+ content: [
11
+ ${contentPaths.map(p => ` "${p}",`).join("\n")}
12
+ ],
13
+ theme: {
14
+ extend: {
15
+ colors: {
16
+ ...mappingVars,
17
+ },
18
+ },
19
+ },
20
+ plugins: [
21
+ plugin,
22
+ require('tailwindcss-animate'),
23
+ require('tailwind-scrollbar-hide'),
24
+ require('glare-typography'),
25
+ require('glare-torch-mode'),
26
+ function ({ addVariant }: any) {
27
+ addVariant("rtl", '&[dir="rtl"]');
28
+ addVariant("ltr", '&[dir="ltr"]');
29
+ },
30
+ ],
31
+ } satisfies Config;
32
+ `;
33
+ /**
34
+ * Configure Tailwind CSS for v3 projects.
35
+ * If no config exists, creates one from template.
36
+ * If config exists, asks the user then injects TORCH plugins.
37
+ */
38
+ export async function configureTailwindV3(basePath, defaults = false) {
39
+ const existingConfig = findTailwindConfigPath();
40
+ const contentPaths = buildContentPaths(basePath);
41
+ if (!existingConfig) {
42
+ // Create new config
43
+ const configPath = "tailwind.config.ts";
44
+ const fullPath = path.join(process.cwd(), configPath);
45
+ fs.writeFileSync(fullPath, TAILWIND_V3_TEMPLATE(contentPaths));
46
+ console.log(` ✅ Created ${configPath}`);
47
+ return configPath;
48
+ }
49
+ // Config exists - ask user (skip if defaults mode)
50
+ if (!defaults) {
51
+ const { shouldModify } = await inquirer.prompt([
52
+ {
53
+ type: "confirm",
54
+ name: "shouldModify",
55
+ message: `${existingConfig} already exists. Add TORCH Glare plugins to it?`,
56
+ default: true,
57
+ },
58
+ ]);
59
+ if (!shouldModify) {
60
+ console.log(` ⏭️ Skipped modifying ${existingConfig}`);
61
+ return existingConfig;
62
+ }
63
+ }
64
+ // Create backup
65
+ const fullPath = path.join(process.cwd(), existingConfig);
66
+ const backupPath = fullPath + ".bak";
67
+ fs.copyFileSync(fullPath, backupPath);
68
+ console.log(` 📋 Backup created: ${existingConfig}.bak`);
69
+ // Inject into existing config
70
+ const content = fs.readFileSync(fullPath, "utf-8");
71
+ const modified = injectIntoTailwindConfig(content, contentPaths);
72
+ fs.writeFileSync(fullPath, modified);
73
+ console.log(` ✅ Updated ${existingConfig} with TORCH Glare plugins`);
74
+ return existingConfig;
75
+ }
76
+ /**
77
+ * Inject TORCH Glare plugins into an existing Tailwind v3 config.
78
+ */
79
+ function injectIntoTailwindConfig(content, contentPaths) {
80
+ let result = content;
81
+ // Check what's missing based on original content before any modifications
82
+ const needsImport = !content.includes("mapping-color-system");
83
+ const needsMappingVars = !content.includes("...mappingVars");
84
+ // Add mapping-color-system import at the top if not present
85
+ if (needsImport) {
86
+ result = `const { plugin, mappingVars } = require('mapping-color-system')\n${result}`;
87
+ }
88
+ // Add mappingVars to theme.extend.colors if not already spread in colors
89
+ if (needsMappingVars) {
90
+ // Try to find theme.extend.colors
91
+ if (result.includes("extend:")) {
92
+ if (result.includes("colors:")) {
93
+ // Add mappingVars spread into existing colors
94
+ result = result.replace(/(colors:\s*\{)/, "$1\n ...mappingVars,");
95
+ }
96
+ else {
97
+ // Replace empty extend: {} or add colors into extend
98
+ result = result.replace(/extend:\s*\{\s*\}/, "extend: {\n colors: {\n ...mappingVars,\n },\n }");
99
+ // If extend wasn't empty (no replacement happened), inject inside it
100
+ if (!result.includes("...mappingVars")) {
101
+ result = result.replace(/(extend:\s*\{)/, "$1\n colors: {\n ...mappingVars,\n },");
102
+ }
103
+ }
104
+ }
105
+ else if (result.includes("theme:")) {
106
+ result = result.replace(/(theme:\s*\{)/, "$1\n extend: {\n colors: {\n ...mappingVars,\n },\n },");
107
+ }
108
+ }
109
+ // Add plugins if not present (check against original content to avoid false positives)
110
+ const pluginsToAdd = [
111
+ { check: "mapping-color-system", value: "plugin" },
112
+ { check: "tailwindcss-animate", value: "require('tailwindcss-animate')" },
113
+ { check: "tailwind-scrollbar-hide", value: "require('tailwind-scrollbar-hide')" },
114
+ { check: "glare-typography", value: "require('glare-typography')" },
115
+ { check: "glare-torch-mode", value: "require('glare-torch-mode')" },
116
+ ];
117
+ const rtlVariant = `function ({ addVariant }: any) {
118
+ addVariant("rtl", '&[dir="rtl"]');
119
+ addVariant("ltr", '&[dir="ltr"]');
120
+ }`;
121
+ if (result.includes("plugins:") || result.includes("plugins :")) {
122
+ // Insert missing plugins into existing plugins array
123
+ // Use original content for checks to avoid false positives from added require()
124
+ for (const p of pluginsToAdd) {
125
+ if (!content.includes(p.check)) {
126
+ result = result.replace(/(plugins:\s*\[)/, `$1\n ${p.value},`);
127
+ }
128
+ }
129
+ // Add RTL/LTR variant if not present
130
+ if (!content.includes("addVariant")) {
131
+ result = result.replace(/(plugins:\s*\[[\s\S]*?)(]\s*[,}])/, `$1\n ${rtlVariant},\n $2`);
132
+ }
133
+ }
134
+ else {
135
+ // Add plugins array before the closing of the config
136
+ const allPlugins = pluginsToAdd.map(p => ` ${p.value},`).join("\n");
137
+ result = result.replace(/}(\s*satisfies|\s*as|\s*;|\s*$)/, ` plugins: [\n${allPlugins}\n ${rtlVariant},\n ],\n}$1`);
138
+ }
139
+ // Add content paths if the component path is missing
140
+ for (const cp of contentPaths) {
141
+ if (!result.includes(cp)) {
142
+ if (result.includes("content:")) {
143
+ result = result.replace(/(content:\s*\[)/, `$1\n "${cp}",`);
144
+ }
145
+ }
146
+ }
147
+ return result;
148
+ }
149
+ /**
150
+ * Build content paths based on the base installation path.
151
+ */
152
+ function buildContentPaths(basePath) {
153
+ const normalized = basePath.replace(/^\.\//, "").replace(/\/$/, "");
154
+ const paths = [
155
+ `./${normalized}/**/*.{js,ts,jsx,tsx}`,
156
+ ];
157
+ // Add common patterns
158
+ if (!normalized.includes("app")) {
159
+ paths.push("./app/**/*.{js,ts,jsx,tsx}");
160
+ }
161
+ return paths;
162
+ }
163
+ //# sourceMappingURL=configureTailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configureTailwind.js","sourceRoot":"","sources":["../../../cli/src/shared/configureTailwind.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export type Framework = "next" | "vite" | "react" | "unknown";
2
+ /**
3
+ * Detect the framework used in the project by checking package.json dependencies.
4
+ */
5
+ export declare function detectFramework(): Framework;
6
+ /**
7
+ * Detect if the project uses Tailwind CSS v3 (returns true) or v4+ (returns false).
8
+ * Returns null if Tailwind is not installed.
9
+ */
10
+ export declare function detectTailwindVersion(): 3 | 4 | null;
11
+ /**
12
+ * Find the global CSS file in the project.
13
+ */
14
+ export declare function findGlobalCssPath(framework: Framework): string | null;
15
+ /**
16
+ * Find the Tailwind config file path.
17
+ */
18
+ export declare function findTailwindConfigPath(): string | null;
19
+ /**
20
+ * Find the layout/HTML file where font links should be injected.
21
+ */
22
+ export declare function findLayoutPath(framework: Framework): string | null;
23
+ //# sourceMappingURL=detectFramework.d.ts.map