trix-ui 0.2.14 → 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 (241) hide show
  1. package/dist/commands/add/analysis.d.ts +4 -4
  2. package/dist/commands/add/analysis.js +56 -56
  3. package/dist/commands/add/command.d.ts +2 -2
  4. package/dist/commands/add/command.js +205 -202
  5. package/dist/commands/add/command.js.map +1 -1
  6. package/dist/commands/add/config.d.ts +2 -2
  7. package/dist/commands/add/config.js +11 -11
  8. package/dist/commands/add/install.d.ts +27 -27
  9. package/dist/commands/add/install.js +80 -80
  10. package/dist/commands/add/package-manager.d.ts +1 -1
  11. package/dist/commands/add/package-manager.js +4 -4
  12. package/dist/commands/add/project-files.d.ts +2 -2
  13. package/dist/commands/add/project-files.js +17 -17
  14. package/dist/commands/add/prompts.d.ts +3 -3
  15. package/dist/commands/add/prompts.js +28 -28
  16. package/dist/commands/add/registry.d.ts +4 -4
  17. package/dist/commands/add/registry.js +6 -6
  18. package/dist/commands/add/types.d.ts +33 -33
  19. package/dist/commands/add/types.js +1 -1
  20. package/dist/commands/add/ui.d.ts +4 -4
  21. package/dist/commands/add/ui.js +55 -55
  22. package/dist/commands/add/validation.d.ts +3 -3
  23. package/dist/commands/add/validation.js +30 -30
  24. package/dist/commands/add-collection.d.ts +1 -1
  25. package/dist/commands/add-collection.js +1 -1
  26. package/dist/commands/add-composite.d.ts +2 -2
  27. package/dist/commands/add-composite.js +205 -201
  28. package/dist/commands/add-composite.js.map +1 -1
  29. package/dist/commands/add-section.d.ts +2 -2
  30. package/dist/commands/add-section.js +205 -201
  31. package/dist/commands/add-section.js.map +1 -1
  32. package/dist/commands/add-wrapper.d.ts +2 -2
  33. package/dist/commands/add-wrapper.js +205 -201
  34. package/dist/commands/add-wrapper.js.map +1 -1
  35. package/dist/commands/add.d.ts +1 -1
  36. package/dist/commands/add.js +1 -1
  37. package/dist/commands/build.d.ts +2 -2
  38. package/dist/commands/build.js +104 -104
  39. package/dist/commands/build.js.map +1 -1
  40. package/dist/commands/doctor.d.ts +2 -2
  41. package/dist/commands/doctor.js +67 -67
  42. package/dist/commands/doctor.js.map +1 -1
  43. package/dist/commands/init/command.d.ts +8 -2
  44. package/dist/commands/init/command.js +186 -114
  45. package/dist/commands/init/command.js.map +1 -1
  46. package/dist/commands/init/config.d.ts +9 -2
  47. package/dist/commands/init/config.js +45 -25
  48. package/dist/commands/init/config.js.map +1 -1
  49. package/dist/commands/init/constants.d.ts +3 -3
  50. package/dist/commands/init/constants.js +105 -105
  51. package/dist/commands/init/dependencies.d.ts +22 -5
  52. package/dist/commands/init/dependencies.js +86 -52
  53. package/dist/commands/init/dependencies.js.map +1 -1
  54. package/dist/commands/init/filesystem.d.ts +7 -1
  55. package/dist/commands/init/filesystem.js +16 -10
  56. package/dist/commands/init/filesystem.js.map +1 -1
  57. package/dist/commands/init/lockfile.d.ts +1 -1
  58. package/dist/commands/init/lockfile.js +1 -1
  59. package/dist/commands/init/package-json.d.ts +17 -6
  60. package/dist/commands/init/package-json.js +28 -18
  61. package/dist/commands/init/package-json.js.map +1 -1
  62. package/dist/commands/init/project.d.ts +15 -3
  63. package/dist/commands/init/project.js +120 -97
  64. package/dist/commands/init/project.js.map +1 -1
  65. package/dist/commands/init/tailwind.d.ts +14 -3
  66. package/dist/commands/init/tailwind.js +141 -33
  67. package/dist/commands/init/tailwind.js.map +1 -1
  68. package/dist/commands/init/templates.d.ts +15 -3
  69. package/dist/commands/init/templates.js +27 -15
  70. package/dist/commands/init/templates.js.map +1 -1
  71. package/dist/commands/init/tsconfig.d.ts +14 -2
  72. package/dist/commands/init/tsconfig.js +561 -273
  73. package/dist/commands/init/tsconfig.js.map +1 -1
  74. package/dist/commands/init/types.d.ts +34 -33
  75. package/dist/commands/init/types.js +1 -1
  76. package/dist/commands/init/ui.d.ts +12 -3
  77. package/dist/commands/init/ui.js +45 -33
  78. package/dist/commands/init/ui.js.map +1 -1
  79. package/dist/commands/init/vite.d.ts +1 -1
  80. package/dist/commands/init/vite.js +17 -27
  81. package/dist/commands/init/vite.js.map +1 -1
  82. package/dist/commands/init.d.ts +1 -1
  83. package/dist/commands/init.js +1 -1
  84. package/dist/commands/list.d.ts +2 -2
  85. package/dist/commands/list.js +69 -62
  86. package/dist/commands/list.js.map +1 -1
  87. package/dist/commands/remove.d.ts +2 -2
  88. package/dist/commands/remove.js +95 -93
  89. package/dist/commands/remove.js.map +1 -1
  90. package/dist/commands/shared/add-collection.d.ts +50 -50
  91. package/dist/commands/shared/add-collection.js +206 -206
  92. package/dist/commands/shared/list-entries.d.ts +6 -6
  93. package/dist/commands/shared/list-entries.js +12 -12
  94. package/dist/commands/shared/name-utils.d.ts +1 -1
  95. package/dist/commands/shared/name-utils.js +13 -13
  96. package/dist/commands/shared/remove-entries.d.ts +16 -16
  97. package/dist/commands/shared/remove-entries.js +41 -41
  98. package/dist/icons/index.d.ts +1 -1
  99. package/dist/icons/index.js +1 -1
  100. package/dist/icons/libraries.d.ts +37 -37
  101. package/dist/icons/libraries.js +34 -34
  102. package/dist/index.d.ts +1 -2
  103. package/dist/index.js +29 -30
  104. package/dist/index.js.map +1 -1
  105. package/dist/lib/config.d.ts +45 -45
  106. package/dist/lib/config.js +97 -97
  107. package/dist/lib/fs.d.ts +82 -76
  108. package/dist/lib/fs.js +299 -302
  109. package/dist/lib/fs.js.map +1 -1
  110. package/dist/lib/highlighter.d.ts +6 -6
  111. package/dist/lib/highlighter.js +7 -7
  112. package/dist/lib/install.d.ts +19 -19
  113. package/dist/lib/install.js +101 -55
  114. package/dist/lib/install.js.map +1 -1
  115. package/dist/lib/lockfile.d.ts +63 -63
  116. package/dist/lib/lockfile.js +179 -173
  117. package/dist/lib/lockfile.js.map +1 -1
  118. package/dist/lib/logger.d.ts +8 -8
  119. package/dist/lib/logger.js +41 -41
  120. package/dist/lib/logger.js.map +1 -1
  121. package/dist/lib/paths.d.ts +14 -14
  122. package/dist/lib/paths.js +41 -31
  123. package/dist/lib/paths.js.map +1 -1
  124. package/dist/lib/registry.d.ts +35 -35
  125. package/dist/lib/registry.js +180 -180
  126. package/dist/schema/index.d.ts +1128 -1128
  127. package/dist/schema/index.js +237 -238
  128. package/dist/schema/index.js.map +1 -1
  129. package/dist/styles/create-style-map.d.ts +4 -4
  130. package/dist/styles/create-style-map.js +68 -68
  131. package/dist/styles/transform-style-map.d.ts +3 -3
  132. package/dist/styles/transform-style-map.js +428 -428
  133. package/dist/styles/transform.d.ts +10 -10
  134. package/dist/styles/transform.js +15 -15
  135. package/dist/utils/index.d.ts +6 -6
  136. package/dist/utils/index.js +5 -5
  137. package/dist/utils/transformers/transform-icons.d.ts +2 -2
  138. package/dist/utils/transformers/transform-icons.js +164 -164
  139. package/dist/utils/transformers/transform-menu.d.ts +2 -2
  140. package/dist/utils/transformers/transform-menu.js +39 -39
  141. package/dist/utils/transformers/transform-render.d.ts +2 -2
  142. package/dist/utils/transformers/transform-render.js +97 -97
  143. package/dist/utils/transformers/types.d.ts +14 -14
  144. package/dist/utils/transformers/types.js +1 -1
  145. package/package.json +69 -69
  146. package/dist/__tests__/contracts/registry.test.d.ts +0 -1
  147. package/dist/__tests__/contracts/registry.test.js +0 -42
  148. package/dist/__tests__/contracts/registry.test.js.map +0 -1
  149. package/dist/__tests__/e2e/cli.test.d.ts +0 -1
  150. package/dist/__tests__/e2e/cli.test.js +0 -67
  151. package/dist/__tests__/e2e/cli.test.js.map +0 -1
  152. package/dist/__tests__/helpers/fs.d.ts +0 -5
  153. package/dist/__tests__/helpers/fs.js +0 -26
  154. package/dist/__tests__/helpers/fs.js.map +0 -1
  155. package/dist/__tests__/integration/commands.integration.test.d.ts +0 -1
  156. package/dist/__tests__/integration/commands.integration.test.js +0 -184
  157. package/dist/__tests__/integration/commands.integration.test.js.map +0 -1
  158. package/dist/commands/__tests__/add-composite.test.d.ts +0 -2
  159. package/dist/commands/__tests__/add-composite.test.js +0 -171
  160. package/dist/commands/__tests__/add-composite.test.js.map +0 -1
  161. package/dist/commands/__tests__/add-entry.mocks.d.ts +0 -23
  162. package/dist/commands/__tests__/add-entry.mocks.js +0 -64
  163. package/dist/commands/__tests__/add-entry.mocks.js.map +0 -1
  164. package/dist/commands/__tests__/add-section.test.d.ts +0 -2
  165. package/dist/commands/__tests__/add-section.test.js +0 -191
  166. package/dist/commands/__tests__/add-section.test.js.map +0 -1
  167. package/dist/commands/__tests__/add-wrapper.test.d.ts +0 -2
  168. package/dist/commands/__tests__/add-wrapper.test.js +0 -171
  169. package/dist/commands/__tests__/add-wrapper.test.js.map +0 -1
  170. package/dist/commands/__tests__/cli-mocks.d.ts +0 -1
  171. package/dist/commands/__tests__/cli-mocks.js +0 -24
  172. package/dist/commands/__tests__/cli-mocks.js.map +0 -1
  173. package/dist/commands/__tests__/doctor.mocks.d.ts +0 -6
  174. package/dist/commands/__tests__/doctor.mocks.js +0 -20
  175. package/dist/commands/__tests__/doctor.mocks.js.map +0 -1
  176. package/dist/commands/__tests__/doctor.test.d.ts +0 -2
  177. package/dist/commands/__tests__/doctor.test.js +0 -80
  178. package/dist/commands/__tests__/doctor.test.js.map +0 -1
  179. package/dist/commands/__tests__/list.mocks.d.ts +0 -8
  180. package/dist/commands/__tests__/list.mocks.js +0 -20
  181. package/dist/commands/__tests__/list.mocks.js.map +0 -1
  182. package/dist/commands/__tests__/list.test.d.ts +0 -2
  183. package/dist/commands/__tests__/list.test.js +0 -60
  184. package/dist/commands/__tests__/list.test.js.map +0 -1
  185. package/dist/commands/__tests__/remove.mocks.d.ts +0 -9
  186. package/dist/commands/__tests__/remove.mocks.js +0 -26
  187. package/dist/commands/__tests__/remove.mocks.js.map +0 -1
  188. package/dist/commands/__tests__/remove.test.d.ts +0 -2
  189. package/dist/commands/__tests__/remove.test.js +0 -116
  190. package/dist/commands/__tests__/remove.test.js.map +0 -1
  191. package/dist/commands/add/__tests__/__mocks__/cli-mocks.d.ts +0 -1
  192. package/dist/commands/add/__tests__/__mocks__/cli-mocks.js +0 -21
  193. package/dist/commands/add/__tests__/__mocks__/cli-mocks.js.map +0 -1
  194. package/dist/commands/add/__tests__/add.mocks.d.ts +0 -19
  195. package/dist/commands/add/__tests__/add.mocks.js +0 -60
  196. package/dist/commands/add/__tests__/add.mocks.js.map +0 -1
  197. package/dist/commands/add/__tests__/add.test.d.ts +0 -2
  198. package/dist/commands/add/__tests__/add.test.js +0 -141
  199. package/dist/commands/add/__tests__/add.test.js.map +0 -1
  200. package/dist/commands/init/__tests__/init.mocks.d.ts +0 -24
  201. package/dist/commands/init/__tests__/init.mocks.js +0 -84
  202. package/dist/commands/init/__tests__/init.mocks.js.map +0 -1
  203. package/dist/commands/init/__tests__/init.test.d.ts +0 -2
  204. package/dist/commands/init/__tests__/init.test.js +0 -283
  205. package/dist/commands/init/__tests__/init.test.js.map +0 -1
  206. package/dist/commands/init/__tests__/tailwind.test.d.ts +0 -1
  207. package/dist/commands/init/__tests__/tailwind.test.js +0 -56
  208. package/dist/commands/init/__tests__/tailwind.test.js.map +0 -1
  209. package/dist/commands/init/__tests__/tsconfig.test.d.ts +0 -1
  210. package/dist/commands/init/__tests__/tsconfig.test.js +0 -108
  211. package/dist/commands/init/__tests__/tsconfig.test.js.map +0 -1
  212. package/dist/commands/init/__tests__/vite.test.d.ts +0 -1
  213. package/dist/commands/init/__tests__/vite.test.js +0 -66
  214. package/dist/commands/init/__tests__/vite.test.js.map +0 -1
  215. package/dist/commands/list-sections.d.ts +0 -2
  216. package/dist/commands/list-sections.js +0 -20
  217. package/dist/commands/list-sections.js.map +0 -1
  218. package/dist/commands/list-wrappers.d.ts +0 -2
  219. package/dist/commands/list-wrappers.js +0 -20
  220. package/dist/commands/list-wrappers.js.map +0 -1
  221. package/dist/commands/remove-section.d.ts +0 -2
  222. package/dist/commands/remove-section.js +0 -37
  223. package/dist/commands/remove-section.js.map +0 -1
  224. package/dist/commands/remove-wrapper.d.ts +0 -2
  225. package/dist/commands/remove-wrapper.js +0 -37
  226. package/dist/commands/remove-wrapper.js.map +0 -1
  227. package/dist/lib/__tests__/config.test.d.ts +0 -1
  228. package/dist/lib/__tests__/config.test.js +0 -49
  229. package/dist/lib/__tests__/config.test.js.map +0 -1
  230. package/dist/lib/__tests__/install.test.d.ts +0 -1
  231. package/dist/lib/__tests__/install.test.js +0 -149
  232. package/dist/lib/__tests__/install.test.js.map +0 -1
  233. package/dist/lib/__tests__/lockfile.test.d.ts +0 -1
  234. package/dist/lib/__tests__/lockfile.test.js +0 -89
  235. package/dist/lib/__tests__/lockfile.test.js.map +0 -1
  236. package/dist/lib/__tests__/paths.test.d.ts +0 -1
  237. package/dist/lib/__tests__/paths.test.js +0 -39
  238. package/dist/lib/__tests__/paths.test.js.map +0 -1
  239. package/dist/lib/__tests__/registry.test.d.ts +0 -1
  240. package/dist/lib/__tests__/registry.test.js +0 -76
  241. package/dist/lib/__tests__/registry.test.js.map +0 -1
@@ -1,98 +1,121 @@
1
- import path from "node:path";
2
- import { detect } from "@antfu/ni";
3
- import { fileExists } from "../../lib/fs.js";
4
- import { directoryExists } from "./filesystem.js";
5
- import { collectDependencies, readPackageJson } from "./package-json.js";
6
- export async function detectProject(cwd) {
7
- const [hasPackageJson, nextConfigs, viteConfigs, hasTsConfig, postCssConfigs, hasSrcDir, hasAppDir, hasPagesDir, componentsDirs,] = await Promise.all([
8
- fileExists(path.join(cwd, "package.json")),
9
- Promise.all([
10
- fileExists(path.join(cwd, "next.config.js")),
11
- fileExists(path.join(cwd, "next.config.mjs")),
12
- fileExists(path.join(cwd, "next.config.ts")),
13
- ]),
14
- Promise.all([
15
- fileExists(path.join(cwd, "vite.config.js")),
16
- fileExists(path.join(cwd, "vite.config.ts")),
17
- ]),
18
- fileExists(path.join(cwd, "tsconfig.json")),
19
- Promise.all([
20
- fileExists(path.join(cwd, "postcss.config.js")),
21
- fileExists(path.join(cwd, "postcss.config.mjs")),
22
- fileExists(path.join(cwd, "postcss.config.ts")),
23
- ]),
24
- directoryExists(path.join(cwd, "src")),
25
- directoryExists(path.join(cwd, "app")),
26
- directoryExists(path.join(cwd, "pages")),
27
- Promise.all([
28
- directoryExists(path.join(cwd, "components")),
29
- directoryExists(path.join(cwd, "src/components")),
30
- ]),
31
- ]);
32
- if (!hasPackageJson) {
33
- throw new Error("No package.json found. Please run this command in a valid project directory.");
34
- }
35
- const hasNextConfig = nextConfigs.some(Boolean);
36
- const hasViteConfig = viteConfigs.some(Boolean);
37
- // const hasPostCssConfig = postCssConfigs.some(Boolean)
38
- const hasComponentsDir = componentsDirs.some(Boolean);
39
- const packageJson = await readPackageJson(cwd);
40
- const dependencies = collectDependencies(packageJson);
41
- let framework = "unknown";
42
- if (dependencies.next || hasNextConfig) {
43
- framework = "next";
44
- }
45
- else if (dependencies.vite || hasViteConfig) {
46
- framework = "vite";
47
- }
48
- else if (dependencies.react) {
49
- framework = "react";
50
- }
51
- const hasTailwind = Boolean(dependencies.tailwindcss ||
52
- dependencies["@tailwindcss/postcss"] ||
53
- dependencies["@tailwindcss/vite"]);
54
- const detectedPm = await detect({ cwd });
55
- const packageManager = detectedPm ?? "npm";
56
- return {
57
- framework,
58
- typescript: hasTsConfig,
59
- tailwind: hasTailwind,
60
- packageManager,
61
- srcDir: hasSrcDir,
62
- appDir: framework === "next" && hasAppDir && !hasPagesDir,
63
- hasComponents: hasComponentsDir,
64
- };
65
- }
66
- export async function validateProject(cwd, projectInfo) {
67
- const errors = [];
68
- const warnings = [];
69
- const packageJson = await readPackageJson(cwd);
70
- const dependencies = collectDependencies(packageJson);
71
- if (!dependencies.react) {
72
- const supportNote = projectInfo.framework === "unknown"
73
- ? "trix-ui init supports React-based projects only (React, Next.js, Vite (React))."
74
- : "React is required for trix-ui init.";
75
- errors.push(`Project does not meet requirements: missing dependency \"react\". ${supportNote}`);
76
- }
77
- if (dependencies.react && !dependencies["react-dom"]) {
78
- errors.push("Project does not meet requirements: missing dependency \"react-dom\".");
79
- }
80
- if (projectInfo.typescript && !dependencies["@types/react"]) {
81
- warnings.push("@types/react is recommended for TypeScript projects.");
82
- }
83
- if (!projectInfo.typescript) {
84
- warnings.push("TypeScript is not detected. TypeScript is recommended for better type safety.");
85
- }
86
- if (projectInfo.framework === "next" && !projectInfo.appDir) {
87
- warnings.push("Next.js Pages Router detected. App Router is recommended for new projects.");
88
- }
89
- if (projectInfo.framework === "unknown") {
90
- warnings.push("Could not detect framework. Manual configuration may be required.");
91
- }
92
- return {
93
- valid: errors.length === 0,
94
- errors,
95
- warnings,
96
- };
97
- }
1
+ import path from "node:path";
2
+ import { detect } from "@antfu/ni";
3
+ import { fileExists } from "../../lib/fs.js";
4
+ import { directoryExists } from "./filesystem.js";
5
+ import { collectDependencies, readPackageJson } from "./package-json.js";
6
+ /**
7
+ * Infer the project's shape (framework, TS, Tailwind, common directories) from `cwd`.
8
+ *
9
+ * The result drives init decisions like which config templates to write and where
10
+ * to place `globals.css`.
11
+ */
12
+ export async function detectProject(cwd) {
13
+ const [hasPackageJson, nextConfigs, viteConfigs, hasTsConfig, postCssConfigs, hasSrcDir, hasAppDir, hasPagesDir, hasSrcAppDir, hasSrcPagesDir, componentsDirs,] = await Promise.all([
14
+ fileExists(path.join(cwd, "package.json")),
15
+ Promise.all([
16
+ fileExists(path.join(cwd, "next.config.js")),
17
+ fileExists(path.join(cwd, "next.config.mjs")),
18
+ fileExists(path.join(cwd, "next.config.ts")),
19
+ ]),
20
+ Promise.all([
21
+ fileExists(path.join(cwd, "vite.config.js")),
22
+ fileExists(path.join(cwd, "vite.config.ts")),
23
+ ]),
24
+ fileExists(path.join(cwd, "tsconfig.json")),
25
+ Promise.all([
26
+ fileExists(path.join(cwd, "postcss.config.js")),
27
+ fileExists(path.join(cwd, "postcss.config.mjs")),
28
+ fileExists(path.join(cwd, "postcss.config.ts")),
29
+ ]),
30
+ directoryExists(path.join(cwd, "src")),
31
+ directoryExists(path.join(cwd, "app")),
32
+ directoryExists(path.join(cwd, "pages")),
33
+ directoryExists(path.join(cwd, "src", "app")),
34
+ directoryExists(path.join(cwd, "src", "pages")),
35
+ Promise.all([
36
+ directoryExists(path.join(cwd, "components")),
37
+ directoryExists(path.join(cwd, "src/components")),
38
+ ]),
39
+ ]);
40
+ if (!hasPackageJson) {
41
+ throw new Error("No package.json found. Please run this command in a valid project directory.");
42
+ }
43
+ const hasNextConfig = nextConfigs.some(Boolean);
44
+ const hasViteConfig = viteConfigs.some(Boolean);
45
+ // const hasPostCssConfig = postCssConfigs.some(Boolean)
46
+ const [hasRootComponentsDir, hasSrcComponentsDir] = componentsDirs;
47
+ const hasComponentsDir = hasRootComponentsDir || hasSrcComponentsDir;
48
+ const packageJson = await readPackageJson(cwd);
49
+ const dependencies = collectDependencies(packageJson);
50
+ let framework = "unknown";
51
+ if (dependencies.next || hasNextConfig) {
52
+ framework = "next";
53
+ }
54
+ else if (dependencies.vite || hasViteConfig) {
55
+ framework = "vite";
56
+ }
57
+ else if (dependencies.react) {
58
+ framework = "react";
59
+ }
60
+ const hasTailwind = Boolean(dependencies["@tailwindcss/postcss"] || dependencies["@tailwindcss/vite"]);
61
+ const usesSrcDir = framework === "next" ? hasSrcAppDir || hasSrcPagesDir : hasSrcDir;
62
+ const detectedPm = await detect({ cwd });
63
+ const packageManager = detectedPm ?? "npm";
64
+ return {
65
+ framework,
66
+ typescript: hasTsConfig,
67
+ tailwind: hasTailwind,
68
+ packageManager,
69
+ srcDir: usesSrcDir,
70
+ appDir: framework === "next" && (hasAppDir || hasSrcAppDir),
71
+ pagesDir: framework === "next" && (hasPagesDir || hasSrcPagesDir),
72
+ hasComponents: hasComponentsDir,
73
+ };
74
+ }
75
+ /**
76
+ * Validate that the project is compatible with `trix-ui init`.
77
+ *
78
+ * Returns hard errors for missing requirements (React/ReactDOM) and softer
79
+ * warnings for common footguns (missing TS types, mixed Next.js routers).
80
+ */
81
+ export async function validateProject(cwd, projectInfo) {
82
+ const errors = [];
83
+ const warnings = [];
84
+ const packageJson = await readPackageJson(cwd);
85
+ const dependencies = collectDependencies(packageJson);
86
+ if (!dependencies.react) {
87
+ const supportNote = projectInfo.framework === "unknown"
88
+ ? "trix-ui init supports React-based projects only (React, Next.js, Vite (React))."
89
+ : "React is required for trix-ui init.";
90
+ errors.push(`Project does not meet requirements: missing dependency \"react\". ${supportNote}`);
91
+ }
92
+ if (dependencies.react && !dependencies["react-dom"]) {
93
+ errors.push("Project does not meet requirements: missing dependency \"react-dom\".");
94
+ }
95
+ if (projectInfo.typescript && !dependencies["@types/react"]) {
96
+ warnings.push("@types/react is recommended for TypeScript projects.");
97
+ }
98
+ if (!projectInfo.typescript) {
99
+ warnings.push("TypeScript is not detected. TypeScript is recommended for better type safety.");
100
+ }
101
+ if (projectInfo.framework === "next") {
102
+ if (projectInfo.pagesDir && !projectInfo.appDir) {
103
+ warnings.push("Next.js Pages Router detected. App Router is recommended for new projects.");
104
+ }
105
+ else if (projectInfo.appDir && projectInfo.pagesDir) {
106
+ warnings.push("Next.js App + Pages routers detected. Ensure globals and routing are aligned for both.");
107
+ }
108
+ else if (!projectInfo.appDir && !projectInfo.pagesDir) {
109
+ warnings.push("Next.js detected without app/ or pages/ directory. Initialization may be incomplete.");
110
+ }
111
+ }
112
+ if (projectInfo.framework === "unknown") {
113
+ warnings.push("Could not detect framework. Manual configuration may be required.");
114
+ }
115
+ return {
116
+ valid: errors.length === 0,
117
+ errors,
118
+ warnings,
119
+ };
120
+ }
98
121
  //# sourceMappingURL=project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/commands/init/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../../src/commands/init/project.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,14 @@
1
- import type { InitConfig, InitOptions, ProjectInfo } from "./types.js";
2
- export declare function setupTailwind(cwd: string, projectInfo: ProjectInfo, options: InitOptions): Promise<void>;
3
- export declare function setupGlobalStyles(cwd: string, config: InitConfig, options: InitOptions): Promise<void>;
1
+ import type { InitConfig, InitOptions, ProjectInfo } from "./types.js";
2
+ /**
3
+ * Ensure Tailwind + PostCSS config files exist for the target project.
4
+ *
5
+ * Existing configs are respected unless `--force` is used.
6
+ */
7
+ export declare function setupTailwind(cwd: string, projectInfo: ProjectInfo, options: InitOptions): Promise<void>;
8
+ /**
9
+ * Write the global CSS variables file referenced by the init config.
10
+ *
11
+ * If the file already contains common variable names and `--force` isn't set,
12
+ * we leave it untouched.
13
+ */
14
+ export declare function setupGlobalStyles(cwd: string, config: InitConfig, options: InitOptions): Promise<void>;
@@ -1,35 +1,143 @@
1
- import path from "node:path";
2
- import { ensureDir, fileExists, readFile, writeFileSafe } from "../../lib/fs.js";
3
- import { BASE_CSS_VARS } from "./constants.js";
4
- export async function setupTailwind(cwd, projectInfo, options) {
5
- const ext = projectInfo.typescript ? "ts" : "js";
6
- // const contentPaths = TAILWIND_CONTENT_PATHS[projectInfo.framework]
7
- const postcssPath = path.join(cwd, "postcss.config.js");
8
- const postcssConfig = `const config = {
9
- plugins: {
10
- "@tailwindcss/postcss": {},
1
+ import path from "node:path";
2
+ import { ensureDir, fileExists, readFile, writeFile, writeFileSafe } from "../../lib/fs.js";
3
+ import { BASE_CSS_VARS, TAILWIND_CONTENT_PATHS } from "./constants.js";
4
+ import { readPackageJson } from "./package-json.js";
5
+ const TAILWIND_CONFIG_FILES = [
6
+ "tailwind.config.ts",
7
+ "tailwind.config.js",
8
+ "tailwind.config.cjs",
9
+ "tailwind.config.mjs"
10
+ ];
11
+ const POSTCSS_CONFIG_FILES = [
12
+ "postcss.config.js",
13
+ "postcss.config.cjs",
14
+ "postcss.config.mjs",
15
+ "postcss.config.ts"
16
+ ];
17
+ /**
18
+ * Ensure Tailwind + PostCSS config files exist for the target project.
19
+ *
20
+ * Existing configs are respected unless `--force` is used.
21
+ */
22
+ export async function setupTailwind(cwd, projectInfo, options) {
23
+ const moduleFormat = await resolveModuleFormat(cwd);
24
+ await ensureTailwindConfig(cwd, projectInfo, moduleFormat, options);
25
+ await ensurePostcssConfig(cwd, moduleFormat, options);
26
+ }
27
+ /**
28
+ * Write the global CSS variables file referenced by the init config.
29
+ *
30
+ * If the file already contains common variable names and `--force` isn't set,
31
+ * we leave it untouched.
32
+ */
33
+ export async function setupGlobalStyles(cwd, config, options) {
34
+ const stylesPath = path.resolve(cwd, config.paths.styles);
35
+ const existingStyles = (await fileExists(stylesPath))
36
+ ? await readFile(stylesPath)
37
+ : "";
38
+ const hasVars = existingStyles.includes("--background") ||
39
+ existingStyles.includes("--foreground");
40
+ let finalStyles = BASE_CSS_VARS;
41
+ if (existingStyles && !hasVars) {
42
+ finalStyles = `${BASE_CSS_VARS}\n\n/* Existing styles */\n${existingStyles}`;
43
+ }
44
+ else if (hasVars && !options.force) {
45
+ return;
46
+ }
47
+ await ensureDir(path.dirname(stylesPath));
48
+ await writeFile(stylesPath, finalStyles);
49
+ }
50
+ /**
51
+ * Decide whether config files should be written as ESM (`export default`) or CJS.
52
+ *
53
+ * The check is based on `package.json#type` and falls back to CommonJS.
54
+ */
55
+ async function resolveModuleFormat(cwd) {
56
+ try {
57
+ const pkg = await readPackageJson(cwd);
58
+ return pkg.type === "module" ? "module" : "commonjs";
59
+ }
60
+ catch {
61
+ return "commonjs";
62
+ }
63
+ }
64
+ /**
65
+ * Return the first Tailwind/PostCSS config file that already exists in `cwd`.
66
+ */
67
+ async function findExistingConfig(cwd, candidates) {
68
+ for (const file of candidates) {
69
+ const fullPath = path.join(cwd, file);
70
+ if (await fileExists(fullPath)) {
71
+ return fullPath;
72
+ }
73
+ }
74
+ return null;
75
+ }
76
+ /**
77
+ * Create or overwrite `tailwind.config.*` as needed for the current project.
78
+ */
79
+ async function ensureTailwindConfig(cwd, projectInfo, moduleFormat, options) {
80
+ const existingPath = await findExistingConfig(cwd, TAILWIND_CONFIG_FILES);
81
+ if (existingPath && !options.force) {
82
+ return;
83
+ }
84
+ const configPath = existingPath ??
85
+ path.join(cwd, projectInfo.typescript
86
+ ? "tailwind.config.ts"
87
+ : moduleFormat === "module"
88
+ ? "tailwind.config.mjs"
89
+ : "tailwind.config.js");
90
+ const content = buildTailwindConfig(projectInfo, moduleFormat);
91
+ await writeFileSafe(configPath, content, Boolean(options.force));
92
+ }
93
+ /**
94
+ * Create or overwrite `postcss.config.*` as needed for the current project.
95
+ */
96
+ async function ensurePostcssConfig(cwd, moduleFormat, options) {
97
+ const existingPath = await findExistingConfig(cwd, POSTCSS_CONFIG_FILES);
98
+ if (existingPath && !options.force) {
99
+ return;
100
+ }
101
+ const configPath = existingPath ??
102
+ path.join(cwd, moduleFormat === "module" ? "postcss.config.mjs" : "postcss.config.js");
103
+ const content = buildPostcssConfig(moduleFormat);
104
+ await writeFileSafe(configPath, content, Boolean(options.force));
105
+ }
106
+ /**
107
+ * Generate the Tailwind config file content.
108
+ *
109
+ * Uses the project's framework to choose sensible `content` globs.
110
+ */
111
+ function buildTailwindConfig(projectInfo, moduleFormat) {
112
+ const contentPaths = TAILWIND_CONTENT_PATHS[projectInfo.framework];
113
+ const contentLiteral = JSON.stringify(contentPaths, null, 2);
114
+ if (projectInfo.typescript) {
115
+ return `import type { Config } from "tailwindcss"\n\nconst config: Config = {\n content: ${contentLiteral},\n theme: {\n extend: {}\n },\n plugins: []\n}\n\nexport default config\n`;
116
+ }
117
+ const configObject = `{
118
+ content: ${contentLiteral},
119
+ theme: {
120
+ extend: {}
11
121
  },
12
- };
13
-
14
- export default config;
15
- `;
16
- await writeFileSafe(postcssPath, postcssConfig, Boolean(options.force));
17
- }
18
- export async function setupGlobalStyles(cwd, config, options) {
19
- const stylesPath = path.resolve(cwd, config.paths.styles);
20
- const existingStyles = (await fileExists(stylesPath))
21
- ? await readFile(stylesPath)
22
- : "";
23
- const hasVars = existingStyles.includes("--background") ||
24
- existingStyles.includes("--foreground");
25
- let finalStyles = BASE_CSS_VARS;
26
- if (existingStyles && !hasVars) {
27
- finalStyles = `${BASE_CSS_VARS}\n\n/* Existing styles */\n${existingStyles}`;
28
- }
29
- else if (hasVars && !options.force) {
30
- return;
31
- }
32
- await ensureDir(path.dirname(stylesPath));
33
- await writeFileSafe(stylesPath, finalStyles, Boolean(options.force));
34
- }
122
+ plugins: []
123
+ }`;
124
+ if (moduleFormat === "module") {
125
+ return `const config = ${configObject}\n\nexport default config\n`;
126
+ }
127
+ return `module.exports = ${configObject}\n`;
128
+ }
129
+ /**
130
+ * Generate the PostCSS config file content for Tailwind.
131
+ */
132
+ function buildPostcssConfig(moduleFormat) {
133
+ const configObject = `{
134
+ plugins: {
135
+ "@tailwindcss/postcss": {},
136
+ },
137
+ }`;
138
+ if (moduleFormat === "module") {
139
+ return `const config = ${configObject}\n\nexport default config\n`;
140
+ }
141
+ return `module.exports = ${configObject}\n`;
142
+ }
35
143
  //# sourceMappingURL=tailwind.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../../../src/commands/init/tailwind.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAG9C,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAW,EACX,WAAwB,EACxB,OAAoB;IAEpB,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAEhD,qEAAqE;IACrE,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAA;IACvD,MAAM,aAAa,GAAG;;;;;;;CAOvB,CAAA;IACC,MAAM,aAAa,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;AACzE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,MAAkB,EAClB,OAAoB;IAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IACzD,MAAM,cAAc,GAAG,CAAC,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;QACnD,CAAC,CAAC,MAAM,QAAQ,CAAC,UAAU,CAAC;QAC5B,CAAC,CAAC,EAAE,CAAA;IAEN,MAAM,OAAO,GACX,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC;QACvC,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAA;IAEzC,IAAI,WAAW,GAAG,aAAa,CAAA;IAE/B,IAAI,cAAc,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,WAAW,GAAG,GAAG,aAAa,8BAA8B,cAAc,EAAE,CAAA;IAC9E,CAAC;SAAM,IAAI,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrC,OAAM;IACR,CAAC;IAED,MAAM,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAA;IACzC,MAAM,aAAa,CAAC,UAAU,EAAE,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;AACtE,CAAC"}
1
+ {"version":3,"file":"tailwind.js","sourceRoot":"","sources":["../../../src/commands/init/tailwind.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,15 @@
1
- import type { InitConfig, ProjectInfo } from "./types.js";
2
- export declare function copyTemplateFiles(cwd: string, config: InitConfig, projectInfo: ProjectInfo, force: boolean): Promise<void>;
3
- export declare function createBarrelFile(cwd: string, config: InitConfig, projectInfo: ProjectInfo): Promise<void>;
1
+ import type { InitConfig, ProjectInfo } from "./types.js";
2
+ /**
3
+ * Copy init templates into the target project.
4
+ *
5
+ * Today this is intentionally narrow (a small utilities file), but it keeps the
6
+ * path/extension logic in one place as the template set grows.
7
+ */
8
+ export declare function copyTemplateFiles(cwd: string, config: InitConfig, projectInfo: ProjectInfo, force: boolean): Promise<void>;
9
+ /**
10
+ * Create (or overwrite) a simple `components/ui` barrel file.
11
+ *
12
+ * The barrel is optional and controlled by init options; this helper just writes
13
+ * the file once the decision has been made.
14
+ */
15
+ export declare function createBarrelFile(cwd: string, config: InitConfig, projectInfo: ProjectInfo): Promise<void>;
@@ -1,16 +1,28 @@
1
- import path from "node:path";
2
- import { copyFileSafe, writeFileSafe } from "../../lib/fs.js";
3
- import { getTemplatePath } from "../../lib/paths.js";
4
- export async function copyTemplateFiles(cwd, config, projectInfo, force) {
5
- const ext = projectInfo.typescript ? "ts" : "js";
6
- await copyFileSafe(getTemplatePath(`lib/utils.${ext}`), path.resolve(cwd, config.paths.utils), force);
7
- }
8
- export async function createBarrelFile(cwd, config, projectInfo) {
9
- const ext = projectInfo.typescript ? "ts" : "js";
10
- const barrelPath = path.resolve(cwd, config.paths.components, `index.${ext}`);
11
- const content = `// Auto-generated barrel file
12
- // This file exports all components from this directory
13
- `;
14
- await writeFileSafe(barrelPath, content, true);
15
- }
1
+ import path from "node:path";
2
+ import { copyFileSafe, writeFileSafe } from "../../lib/fs.js";
3
+ import { getTemplatePath } from "../../lib/paths.js";
4
+ /**
5
+ * Copy init templates into the target project.
6
+ *
7
+ * Today this is intentionally narrow (a small utilities file), but it keeps the
8
+ * path/extension logic in one place as the template set grows.
9
+ */
10
+ export async function copyTemplateFiles(cwd, config, projectInfo, force) {
11
+ const ext = projectInfo.typescript ? "ts" : "js";
12
+ await copyFileSafe(getTemplatePath(`lib/utils.${ext}`), path.resolve(cwd, config.paths.utils), force);
13
+ }
14
+ /**
15
+ * Create (or overwrite) a simple `components/ui` barrel file.
16
+ *
17
+ * The barrel is optional and controlled by init options; this helper just writes
18
+ * the file once the decision has been made.
19
+ */
20
+ export async function createBarrelFile(cwd, config, projectInfo) {
21
+ const ext = projectInfo.typescript ? "ts" : "js";
22
+ const barrelPath = path.resolve(cwd, config.paths.components, `index.${ext}`);
23
+ const content = `// Auto-generated barrel file
24
+ // This file exports all components from this directory
25
+ `;
26
+ await writeFileSafe(barrelPath, content, true);
27
+ }
16
28
  //# sourceMappingURL=templates.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/commands/init/templates.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,MAAkB,EAClB,WAAwB,EACxB,KAAc;IAEd,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAEhD,MAAM,YAAY,CAChB,eAAe,CAAC,aAAa,GAAG,EAAE,CAAC,EACnC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EACrC,KAAK,CACN,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,MAAkB,EAClB,WAAwB;IAExB,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,GAAG,EAAE,CAAC,CAAA;IAC7E,MAAM,OAAO,GAAG;;CAEjB,CAAA;IACC,MAAM,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AAChD,CAAC"}
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../../../src/commands/init/templates.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAA;AAE5B,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AAGpD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,MAAkB,EAClB,WAAwB,EACxB,KAAc;IAEd,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAEhD,MAAM,YAAY,CAChB,eAAe,CAAC,aAAa,GAAG,EAAE,CAAC,EACnC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EACrC,KAAK,CACN,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAW,EACX,MAAkB,EAClB,WAAwB;IAExB,MAAM,GAAG,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAChD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,SAAS,GAAG,EAAE,CAAC,CAAA;IAC7E,MAAM,OAAO,GAAG;;CAEjB,CAAA;IACC,MAAM,aAAa,CAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AAChD,CAAC"}
@@ -1,2 +1,14 @@
1
- import type { ProjectInfo } from "./types.js";
2
- export declare function setupTypeScriptPaths(cwd: string, projectInfo: ProjectInfo): Promise<void>;
1
+ import type { ProjectInfo } from "./types.js";
2
+ /**
3
+ * Validate TypeScript path aliases across the project's relevant tsconfig files.
4
+ *
5
+ * For Vite projects, we validate `tsconfig.json` plus `tsconfig.app.json` (when present),
6
+ * matching the common Vite/shadcn split-config setup.
7
+ *
8
+ * For other projects using TS references, we validate each referenced app config.
9
+ */
10
+ export declare function setupTypeScriptPaths(cwd: string, projectInfo: ProjectInfo): Promise<void>;
11
+ /**
12
+ * Validate `jsconfig.json` path aliases for non-TypeScript projects.
13
+ */
14
+ export declare function setupJavaScriptPaths(cwd: string, projectInfo: ProjectInfo): Promise<void>;