@shohojdhara/atomix 0.4.7 → 0.4.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 (176) hide show
  1. package/atomix.config.ts +58 -1
  2. package/dist/atomix.css +172 -157
  3. package/dist/atomix.css.map +1 -1
  4. package/dist/atomix.min.css +4 -4
  5. package/dist/atomix.min.css.map +1 -1
  6. package/dist/charts.d.ts +33 -0
  7. package/dist/charts.js +1274 -164
  8. package/dist/charts.js.map +1 -1
  9. package/dist/core.d.ts +33 -10
  10. package/dist/core.js +1099 -83
  11. package/dist/core.js.map +1 -1
  12. package/dist/forms.d.ts +33 -0
  13. package/dist/forms.js +2106 -1050
  14. package/dist/forms.js.map +1 -1
  15. package/dist/heavy.d.ts +42 -1
  16. package/dist/heavy.js +1663 -638
  17. package/dist/heavy.js.map +1 -1
  18. package/dist/index.d.ts +442 -270
  19. package/dist/index.esm.js +1947 -680
  20. package/dist/index.esm.js.map +1 -1
  21. package/dist/index.js +1982 -712
  22. package/dist/index.js.map +1 -1
  23. package/dist/index.min.js +1 -1
  24. package/dist/index.min.js.map +1 -1
  25. package/package.json +6 -3
  26. package/scripts/atomix-cli.js +136 -1827
  27. package/scripts/cli/__tests__/basic.test.js +3 -2
  28. package/scripts/cli/__tests__/clean.test.js +278 -0
  29. package/scripts/cli/__tests__/component-validator.test.js +433 -0
  30. package/scripts/cli/__tests__/generator.test.js +613 -0
  31. package/scripts/cli/__tests__/glass-motion.test.js +256 -0
  32. package/scripts/cli/__tests__/integration.test.js +719 -108
  33. package/scripts/cli/__tests__/migrate.test.js +74 -0
  34. package/scripts/cli/__tests__/security.test.js +206 -0
  35. package/scripts/cli/__tests__/test-setup.js +3 -1
  36. package/scripts/cli/__tests__/theme-bridge.test.js +507 -0
  37. package/scripts/cli/__tests__/token-provider.test.js +361 -0
  38. package/scripts/cli/__tests__/utils.test.js +5 -5
  39. package/scripts/cli/commands/benchmark.js +105 -0
  40. package/scripts/cli/commands/build-theme.js +115 -0
  41. package/scripts/cli/commands/clean.js +109 -0
  42. package/scripts/cli/commands/doctor.js +88 -0
  43. package/scripts/cli/commands/generate.js +218 -0
  44. package/scripts/cli/commands/init.js +73 -0
  45. package/scripts/cli/commands/migrate.js +106 -0
  46. package/scripts/cli/commands/sync-tokens.js +206 -0
  47. package/scripts/cli/commands/theme-bridge.js +248 -0
  48. package/scripts/cli/commands/tokens.js +157 -0
  49. package/scripts/cli/commands/validate.js +194 -0
  50. package/scripts/cli/internal/ai-engine.js +156 -0
  51. package/scripts/cli/internal/compiler.js +114 -0
  52. package/scripts/cli/internal/component-validator.js +443 -0
  53. package/scripts/cli/internal/config-loader.js +162 -0
  54. package/scripts/cli/internal/filesystem.js +158 -0
  55. package/scripts/cli/internal/generator.js +430 -0
  56. package/scripts/cli/internal/glass-generator.js +398 -0
  57. package/scripts/cli/internal/hook-generator.js +369 -0
  58. package/scripts/cli/internal/hooks.js +61 -0
  59. package/scripts/cli/internal/itcss-generator.js +565 -0
  60. package/scripts/cli/internal/motion-generator.js +679 -0
  61. package/scripts/cli/internal/template-engine.js +301 -0
  62. package/scripts/cli/internal/theme-bridge.js +664 -0
  63. package/scripts/cli/internal/tokens/engine.js +122 -0
  64. package/scripts/cli/internal/tokens/provider.js +34 -0
  65. package/scripts/cli/internal/tokens/providers/figma.js +50 -0
  66. package/scripts/cli/internal/tokens/providers/style-dictionary.js +48 -0
  67. package/scripts/cli/internal/tokens/providers/w3c.js +48 -0
  68. package/scripts/cli/internal/tokens/token-provider.js +443 -0
  69. package/scripts/cli/internal/tokens/token-validator.js +513 -0
  70. package/scripts/cli/internal/validator.js +276 -0
  71. package/scripts/cli/internal/wizard.js +115 -0
  72. package/scripts/cli/mappings.js +23 -0
  73. package/scripts/cli/migration-tools.js +164 -94
  74. package/scripts/cli/plugins/style-dictionary.js +46 -0
  75. package/scripts/cli/templates/README.md +525 -95
  76. package/scripts/cli/templates/common-templates.js +40 -14
  77. package/scripts/cli/templates/components/react-component.ts +282 -0
  78. package/scripts/cli/templates/config/project-config.ts +112 -0
  79. package/scripts/cli/templates/hooks/use-component.ts +477 -0
  80. package/scripts/cli/templates/index.js +19 -4
  81. package/scripts/cli/templates/index.ts +171 -0
  82. package/scripts/cli/templates/next-templates.js +72 -0
  83. package/scripts/cli/templates/react-templates.js +70 -126
  84. package/scripts/cli/templates/scss-templates.js +35 -35
  85. package/scripts/cli/templates/stories/storybook-story.ts +241 -0
  86. package/scripts/cli/templates/styles/scss-component.ts +255 -0
  87. package/scripts/cli/templates/tests/vitest-test.ts +229 -0
  88. package/scripts/cli/templates/token-templates.js +337 -1
  89. package/scripts/cli/templates/tokens/token-generators.ts +1088 -0
  90. package/scripts/cli/templates/types/component-types.ts +145 -0
  91. package/scripts/cli/templates/utils/testing-utils.ts +144 -0
  92. package/scripts/cli/templates/vanilla-templates.js +39 -0
  93. package/scripts/cli/token-manager.js +8 -2
  94. package/scripts/cli/utils/cache-manager.js +240 -0
  95. package/scripts/cli/utils/detector.js +46 -0
  96. package/scripts/cli/utils/diagnostics.js +289 -0
  97. package/scripts/cli/utils/error.js +89 -0
  98. package/scripts/cli/utils/helpers.js +67 -0
  99. package/scripts/cli/utils/logger.js +75 -0
  100. package/scripts/cli/utils/security.js +302 -0
  101. package/scripts/cli/utils/telemetry.js +115 -0
  102. package/scripts/cli/utils/validation.js +37 -0
  103. package/scripts/cli/utils.js +28 -341
  104. package/src/components/Accordion/Accordion.stories.tsx +0 -18
  105. package/src/components/Accordion/Accordion.test.tsx +0 -17
  106. package/src/components/Accordion/Accordion.tsx +0 -4
  107. package/src/components/AtomixGlass/AtomixGlass.test.tsx +37 -3
  108. package/src/components/AtomixGlass/AtomixGlass.tsx +143 -31
  109. package/src/components/AtomixGlass/AtomixGlassContainer.tsx +129 -31
  110. package/src/components/AtomixGlass/PerformanceDashboard.tsx +219 -0
  111. package/src/components/AtomixGlass/README.md +25 -10
  112. package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +216 -0
  113. package/src/components/AtomixGlass/animation-system.ts +578 -0
  114. package/src/components/AtomixGlass/shader-utils.ts +4 -1
  115. package/src/components/AtomixGlass/stories/Overview.stories.tsx +157 -6
  116. package/src/components/AtomixGlass/stories/Phase1-Animation.stories.tsx +653 -0
  117. package/src/components/AtomixGlass/stories/Phase1-Test.stories.tsx +95 -0
  118. package/src/components/AtomixGlass/stories/Playground.stories.tsx +51 -51
  119. package/src/components/AtomixGlass/stories/shared-components.tsx +6 -0
  120. package/src/components/Avatar/Avatar.tsx +1 -1
  121. package/src/components/Button/Button.stories.disabled-link.tsx +10 -0
  122. package/src/components/Button/Button.stories.tsx +10 -0
  123. package/src/components/Button/Button.test.tsx +16 -11
  124. package/src/components/Button/Button.tsx +4 -4
  125. package/src/components/Card/Card.tsx +1 -1
  126. package/src/components/Dropdown/Dropdown.tsx +12 -12
  127. package/src/components/Form/Select.tsx +62 -3
  128. package/src/components/Modal/Modal.tsx +14 -3
  129. package/src/components/Navigation/Navbar/Navbar.tsx +44 -0
  130. package/src/components/Slider/Slider.stories.tsx +3 -3
  131. package/src/components/Slider/Slider.tsx +38 -0
  132. package/src/components/Steps/Steps.tsx +3 -3
  133. package/src/components/Tabs/Tabs.tsx +77 -8
  134. package/src/components/Testimonial/Testimonial.tsx +1 -1
  135. package/src/components/TypedButton/TypedButton.stories.tsx +59 -0
  136. package/src/components/TypedButton/TypedButton.tsx +39 -0
  137. package/src/components/TypedButton/index.ts +2 -0
  138. package/src/components/VideoPlayer/VideoPlayer.tsx +11 -4
  139. package/src/lib/composables/index.ts +4 -7
  140. package/src/lib/composables/types.ts +45 -0
  141. package/src/lib/composables/useAccordion.ts +0 -7
  142. package/src/lib/composables/useAtomixGlass.ts +148 -6
  143. package/src/lib/composables/useAtomixGlassStyles.ts +9 -7
  144. package/src/lib/composables/useChartExport.ts +3 -13
  145. package/src/lib/composables/useDropdown.ts +66 -0
  146. package/src/lib/composables/useFocusTrap.ts +80 -0
  147. package/src/lib/composables/usePerformanceMonitor.ts +448 -0
  148. package/src/lib/composables/useResponsiveGlass.presets.ts +192 -0
  149. package/src/lib/composables/useResponsiveGlass.ts +441 -0
  150. package/src/lib/composables/useTooltip.ts +16 -0
  151. package/src/lib/composables/useTypedButton.ts +66 -0
  152. package/src/lib/config/index.ts +62 -5
  153. package/src/lib/constants/components.ts +62 -7
  154. package/src/lib/theme/devtools/__tests__/useHistory.test.tsx +150 -0
  155. package/src/lib/theme/tokens/centralized-tokens.ts +120 -0
  156. package/src/lib/theme/utils/__tests__/domUtils.test.ts +101 -0
  157. package/src/lib/types/components.ts +37 -11
  158. package/src/lib/types/glass.ts +35 -0
  159. package/src/lib/types/index.ts +1 -0
  160. package/src/lib/utils/displacement-generator.ts +1 -1
  161. package/src/styles/01-settings/_settings.testtypecheck.scss +53 -0
  162. package/src/styles/01-settings/_settings.typedbutton.scss +53 -0
  163. package/src/styles/06-components/_components.atomix-glass.scss +17 -21
  164. package/src/styles/06-components/_components.edge-panel.scss +1 -5
  165. package/src/styles/06-components/_components.modal.scss +1 -4
  166. package/src/styles/06-components/_components.navbar.scss +1 -1
  167. package/src/styles/06-components/_components.testbutton.scss +212 -0
  168. package/src/styles/06-components/_components.testtypecheck.scss +212 -0
  169. package/src/styles/06-components/_components.tooltip.scss +9 -5
  170. package/src/styles/06-components/_components.typedbutton.scss +212 -0
  171. package/src/styles/99-utilities/_index.scss +1 -0
  172. package/src/styles/99-utilities/_utilities.text.scss +1 -1
  173. package/src/styles/99-utilities/_utilities.touch-target.scss +36 -0
  174. package/scripts/cli/component-generator.js +0 -564
  175. package/scripts/cli/interactive-init.js +0 -357
  176. package/src/styles/06-components/old.chart.styles.scss +0 -2788
@@ -1,357 +0,0 @@
1
- /**
2
- * Interactive Init Wizard for Atomix Design System
3
- */
4
-
5
- import inquirer from 'inquirer';
6
- import chalk from 'chalk';
7
- import { readFile, writeFile, mkdir } from 'fs/promises';
8
- import { join, dirname, basename } from 'path';
9
- import { existsSync } from 'fs';
10
- import boxen from 'boxen';
11
- import ora from 'ora';
12
-
13
- import { projectTemplates, configTemplates } from './templates.js';
14
- import { commonTemplates } from './templates/common-templates.js';
15
-
16
- /**
17
- * Run the interactive init wizard
18
- */
19
- export async function runInitWizard() {
20
- console.log(boxen(
21
- chalk.bold.cyan('🎨 Atomix Design System Setup Wizard\n\n') +
22
- chalk.gray('Let\'s set up your design system project!'),
23
- {
24
- padding: 1,
25
- margin: 1,
26
- borderStyle: 'round',
27
- borderColor: 'cyan'
28
- }
29
- ));
30
-
31
- try {
32
- // Step 1: Project type
33
- const { projectType } = await inquirer.prompt([
34
- {
35
- type: 'list',
36
- name: 'projectType',
37
- message: 'What type of project are you building?',
38
- choices: [
39
- { name: 'React Application', value: 'react' },
40
- { name: 'Next.js Application', value: 'nextjs' },
41
- { name: 'Vanilla JavaScript/HTML', value: 'vanilla' },
42
- { name: 'Custom Setup', value: 'custom' }
43
- ]
44
- }
45
- ]);
46
-
47
- // Step 2: Theme selection
48
- const { themeChoice } = await inquirer.prompt([
49
- {
50
- type: 'list',
51
- name: 'themeChoice',
52
- message: 'How would you like to handle theming?',
53
- choices: [
54
- { name: 'Use a pre-built theme', value: 'prebuilt' },
55
- { name: 'Create a custom theme', value: 'custom' },
56
- { name: 'Start with default styles', value: 'default' },
57
- { name: 'I\'ll configure this later', value: 'skip' }
58
- ]
59
- }
60
- ]);
61
-
62
- let prebuiltThemeName = null;
63
- if (themeChoice === 'prebuilt') {
64
- const { theme } = await inquirer.prompt([
65
- {
66
- type: 'input',
67
- name: 'theme',
68
- message: 'Enter the name of the pre-built theme:',
69
- default: 'default'
70
- }
71
- ]);
72
- prebuiltThemeName = (theme && String(theme).trim()) || 'default';
73
- }
74
-
75
- // Step 3: Features
76
- const { features } = await inquirer.prompt([
77
- {
78
- type: 'checkbox',
79
- name: 'features',
80
- message: 'Select additional features:',
81
- choices: [
82
- { name: 'TypeScript support', value: 'typescript', checked: true },
83
- { name: 'Storybook integration', value: 'storybook' },
84
- { name: 'Testing setup (Vitest)', value: 'testing' },
85
- { name: 'ESLint & Prettier', value: 'linting' },
86
- { name: 'Git hooks (Husky)', value: 'githooks' },
87
- { name: 'CI/CD workflows', value: 'cicd' }
88
- ]
89
- }
90
- ]);
91
-
92
- // Step 4: Configuration
93
- const { configType } = await inquirer.prompt([
94
- {
95
- type: 'list',
96
- name: 'configType',
97
- message: 'Configuration file format:',
98
- choices: [
99
- { name: 'JSON (.atomixrc.json)', value: 'json' },
100
- { name: 'JavaScript (atomix.config.js)', value: 'js' },
101
- { name: 'No configuration file', value: 'none' }
102
- ]
103
- }
104
- ]);
105
-
106
- // Step 5: Installation
107
- const { shouldInstall } = await inquirer.prompt([
108
- {
109
- type: 'confirm',
110
- name: 'shouldInstall',
111
- message: 'Install dependencies now?',
112
- default: true
113
- }
114
- ]);
115
-
116
- // Create project structure
117
- if (projectType !== 'custom') {
118
- const template = projectTemplates[projectType];
119
-
120
- // Step 6: Create/Update package.json
121
- const packageJsonPath = join(process.cwd(), 'package.json');
122
- let packageJson = {};
123
-
124
- if (existsSync(packageJsonPath)) {
125
- packageJson = JSON.parse(await readFile(packageJsonPath, 'utf8'));
126
- } else {
127
- // Create basic package.json
128
- packageJson = {
129
- name: basename(process.cwd()),
130
- version: '0.1.0',
131
- private: true,
132
- scripts: {},
133
- dependencies: {},
134
- devDependencies: {}
135
- };
136
- }
137
-
138
- // Merge dependencies
139
- const packageJsonVersion = packageJson.version || '0.1.0';
140
-
141
- template.dependencies.forEach(dep => {
142
- if (!packageJson.dependencies[dep]) {
143
- // Use a default compatible version if not specified
144
- const defaultVersions = {
145
- 'react': '^18.0.0',
146
- 'react-dom': '^18.0.0',
147
- 'next': '^14.0.0',
148
- 'sass': '^1.70.0'
149
- };
150
- packageJson.dependencies[dep] = defaultVersions[dep] || 'latest';
151
- }
152
- });
153
-
154
- template.devDependencies.forEach(dep => {
155
- if (!packageJson.devDependencies[dep]) {
156
- const defaultDevVersions = {
157
- 'typescript': '^5.0.0',
158
- 'vite': '^5.0.0',
159
- '@shohojdhara/atomix': `^${packageJsonVersion}` // Self-reference for templates
160
- };
161
- packageJson.devDependencies[dep] = defaultDevVersions[dep] || 'latest';
162
- }
163
- });
164
-
165
- // Merge scripts carefully
166
- const themePath = themeChoice === 'prebuilt' && prebuiltThemeName
167
- ? `themes/${prebuiltThemeName}`
168
- : 'themes/custom';
169
- const newScripts = {
170
- 'dev': projectType === 'nextjs' ? 'next dev' : 'vite',
171
- 'build': projectType === 'nextjs' ? 'next build' : 'vite build',
172
- 'build:theme': `atomix build-theme ${themePath}`,
173
- 'generate:component': 'atomix generate component',
174
- 'validate': 'atomix validate --tokens --theme'
175
- };
176
-
177
- if (features.includes('storybook')) {
178
- newScripts['storybook'] = 'storybook dev -p 6006';
179
- newScripts['build:storybook'] = 'storybook build';
180
- }
181
-
182
- if (features.includes('testing')) {
183
- newScripts['test'] = 'vitest';
184
- newScripts['test:watch'] = 'vitest --watch';
185
- }
186
-
187
- // Add new scripts without overwriting user's existing scripts
188
- for (const [key, value] of Object.entries(newScripts)) {
189
- if (!packageJson.scripts[key]) {
190
- packageJson.scripts[key] = value;
191
- } else if (packageJson.scripts[key] !== value) {
192
- // Suggest renamed script if conflict exists
193
- const suggestedKey = `atomix:${key}`;
194
- if (!packageJson.scripts[suggestedKey]) {
195
- packageJson.scripts[suggestedKey] = value;
196
- console.log(chalk.yellow(` ⚠️ Script conflict for "${key}". Added as "${suggestedKey}" instead.`));
197
- }
198
- }
199
- }
200
-
201
- await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf8');
202
- console.log(chalk.green(' ✓ Updated package.json'));
203
-
204
- // Create directories
205
- await mkdir('src', { recursive: true });
206
- if (projectType === 'nextjs') {
207
- await mkdir('src/pages', { recursive: true });
208
- } else if (projectType === 'react') {
209
- await mkdir('src/components', { recursive: true });
210
- } else if (projectType === 'vanilla') {
211
- await mkdir('src/styles', { recursive: true });
212
- }
213
-
214
- // Write template files
215
- const spinner = ora('Creating project files...').start();
216
- let filesCreated = 0;
217
- const totalFiles = Object.keys(template.files).length;
218
-
219
- for (const [path, content] of Object.entries(template.files)) {
220
- const filePath = join(process.cwd(), path);
221
- const dir = dirname(filePath);
222
-
223
- if (!existsSync(dir)) {
224
- await mkdir(dir, { recursive: true });
225
- }
226
-
227
- await writeFile(filePath, content, 'utf8');
228
- filesCreated++;
229
- spinner.text = `Creating project files... (${filesCreated}/${totalFiles})`;
230
- }
231
-
232
- spinner.succeed(chalk.green(`✓ Created ${filesCreated} files`));
233
-
234
- // Generate README
235
- const readmeSpinner = ora('Generating README...').start();
236
- const projectName = basename(process.cwd());
237
- const readmeTemplate = projectType === 'react'
238
- ? commonTemplates.readme.react(projectName)
239
- : projectType === 'nextjs'
240
- ? commonTemplates.readme.nextjs(projectName)
241
- : commonTemplates.readme.vanilla(projectName);
242
-
243
- await writeFile(
244
- join(process.cwd(), 'README.md'),
245
- readmeTemplate,
246
- 'utf8'
247
- );
248
- readmeSpinner.succeed(chalk.green('✓ Generated README.md'));
249
- }
250
-
251
- // Create configuration file
252
- if (configType !== 'none') {
253
- const configTemplate = configType === 'json'
254
- ? configTemplates.basic
255
- : configTemplates.advanced;
256
- const themePathForConfig = themeChoice === 'prebuilt' && prebuiltThemeName
257
- ? `themes/${prebuiltThemeName}`
258
- : 'themes/custom';
259
-
260
- for (const [filename, content] of Object.entries(configTemplate)) {
261
- let configContent = typeof content === 'object'
262
- ? JSON.stringify(content, null, 2)
263
- : content;
264
-
265
- if (themeChoice === 'prebuilt' && prebuiltThemeName) {
266
- if (typeof content === 'object' && content.theme) {
267
- const merged = { ...content, theme: { ...content.theme, path: themePathForConfig } };
268
- configContent = JSON.stringify(merged, null, 2);
269
- } else if (typeof content === 'string') {
270
- configContent = content.replace(/path:\s*['"]themes\/custom['"]/g, `path: '${themePathForConfig}'`);
271
- }
272
- }
273
-
274
- await writeFile(
275
- join(process.cwd(), filename),
276
- configContent,
277
- 'utf8'
278
- );
279
- console.log(chalk.green(` ✓ Created ${filename}`));
280
- }
281
- }
282
-
283
- // Create custom theme if selected
284
- if (themeChoice === 'custom') {
285
- await mkdir('themes/custom', { recursive: true });
286
-
287
- const themeContent = `// Custom Theme
288
- // Generated by Atomix CLI
289
-
290
- @use '@shohojdhara/atomix/scss/settings' as * with (
291
- // Your custom token overrides
292
- $primary-500: #7AFFD7,
293
- $secondary-500: #FF5733,
294
-
295
- // Add more overrides as needed
296
- );
297
-
298
- // Import Atomix components
299
- @use '@shohojdhara/atomix/scss/components';
300
-
301
- // Your custom styles
302
- .custom-component {
303
- // Custom component styles
304
- }`;
305
-
306
- await writeFile(
307
- join(process.cwd(), 'themes/custom/index.scss'),
308
- themeContent,
309
- 'utf8'
310
- );
311
- console.log(chalk.green(' ✓ Created custom theme'));
312
- }
313
-
314
- // Success message
315
- console.log(boxen(
316
- chalk.bold.green('✨ Setup Complete!\n\n') +
317
- chalk.cyan('Your Atomix project is ready.\n\n') +
318
- chalk.gray('Next steps:\n') +
319
- (shouldInstall ? '' : chalk.white('1. Install dependencies: npm install\n')) +
320
- chalk.white(`${shouldInstall ? '1' : '2'}. Start development: npm run dev\n`) +
321
- chalk.white(`${shouldInstall ? '2' : '3'}. Build your theme: npm run build:theme\n`) +
322
- chalk.white(`${shouldInstall ? '3' : '4'}. Generate components: npm run generate:component\n\n`) +
323
- chalk.gray('Documentation: https://github.com/shohojdhara/atomix'),
324
- {
325
- padding: 1,
326
- margin: 1,
327
- borderStyle: 'round',
328
- borderColor: 'green'
329
- }
330
- ));
331
-
332
- // Install dependencies if requested
333
- if (shouldInstall) {
334
- console.log(chalk.cyan('\n📥 Installing dependencies...\n'));
335
- const { execSync } = await import('child_process');
336
-
337
- try {
338
- execSync('npm install', { stdio: 'inherit' });
339
- console.log(chalk.green('\n✅ Dependencies installed successfully!'));
340
- } catch (error) {
341
- console.error(chalk.red('\n❌ Failed to install dependencies'));
342
- console.log(chalk.yellow('Please run: npm install'));
343
- }
344
- }
345
-
346
- } catch (error) {
347
- if (error.isTTYError) {
348
- console.error(chalk.red('This environment doesn\'t support interactive prompts'));
349
- console.log(chalk.yellow('Please use manual setup commands instead'));
350
- } else {
351
- console.error(chalk.red('Setup failed:'), error.message);
352
- }
353
- process.exit(1);
354
- }
355
- }
356
-
357
- export default runInitWizard;