@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.
- package/atomix.config.ts +58 -1
- package/dist/atomix.css +172 -157
- package/dist/atomix.css.map +1 -1
- package/dist/atomix.min.css +4 -4
- package/dist/atomix.min.css.map +1 -1
- package/dist/charts.d.ts +33 -0
- package/dist/charts.js +1274 -164
- package/dist/charts.js.map +1 -1
- package/dist/core.d.ts +33 -10
- package/dist/core.js +1099 -83
- package/dist/core.js.map +1 -1
- package/dist/forms.d.ts +33 -0
- package/dist/forms.js +2106 -1050
- package/dist/forms.js.map +1 -1
- package/dist/heavy.d.ts +42 -1
- package/dist/heavy.js +1663 -638
- package/dist/heavy.js.map +1 -1
- package/dist/index.d.ts +442 -270
- package/dist/index.esm.js +1947 -680
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +1982 -712
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/package.json +6 -3
- package/scripts/atomix-cli.js +136 -1827
- package/scripts/cli/__tests__/basic.test.js +3 -2
- package/scripts/cli/__tests__/clean.test.js +278 -0
- package/scripts/cli/__tests__/component-validator.test.js +433 -0
- package/scripts/cli/__tests__/generator.test.js +613 -0
- package/scripts/cli/__tests__/glass-motion.test.js +256 -0
- package/scripts/cli/__tests__/integration.test.js +719 -108
- package/scripts/cli/__tests__/migrate.test.js +74 -0
- package/scripts/cli/__tests__/security.test.js +206 -0
- package/scripts/cli/__tests__/test-setup.js +3 -1
- package/scripts/cli/__tests__/theme-bridge.test.js +507 -0
- package/scripts/cli/__tests__/token-provider.test.js +361 -0
- package/scripts/cli/__tests__/utils.test.js +5 -5
- package/scripts/cli/commands/benchmark.js +105 -0
- package/scripts/cli/commands/build-theme.js +115 -0
- package/scripts/cli/commands/clean.js +109 -0
- package/scripts/cli/commands/doctor.js +88 -0
- package/scripts/cli/commands/generate.js +218 -0
- package/scripts/cli/commands/init.js +73 -0
- package/scripts/cli/commands/migrate.js +106 -0
- package/scripts/cli/commands/sync-tokens.js +206 -0
- package/scripts/cli/commands/theme-bridge.js +248 -0
- package/scripts/cli/commands/tokens.js +157 -0
- package/scripts/cli/commands/validate.js +194 -0
- package/scripts/cli/internal/ai-engine.js +156 -0
- package/scripts/cli/internal/compiler.js +114 -0
- package/scripts/cli/internal/component-validator.js +443 -0
- package/scripts/cli/internal/config-loader.js +162 -0
- package/scripts/cli/internal/filesystem.js +158 -0
- package/scripts/cli/internal/generator.js +430 -0
- package/scripts/cli/internal/glass-generator.js +398 -0
- package/scripts/cli/internal/hook-generator.js +369 -0
- package/scripts/cli/internal/hooks.js +61 -0
- package/scripts/cli/internal/itcss-generator.js +565 -0
- package/scripts/cli/internal/motion-generator.js +679 -0
- package/scripts/cli/internal/template-engine.js +301 -0
- package/scripts/cli/internal/theme-bridge.js +664 -0
- package/scripts/cli/internal/tokens/engine.js +122 -0
- package/scripts/cli/internal/tokens/provider.js +34 -0
- package/scripts/cli/internal/tokens/providers/figma.js +50 -0
- package/scripts/cli/internal/tokens/providers/style-dictionary.js +48 -0
- package/scripts/cli/internal/tokens/providers/w3c.js +48 -0
- package/scripts/cli/internal/tokens/token-provider.js +443 -0
- package/scripts/cli/internal/tokens/token-validator.js +513 -0
- package/scripts/cli/internal/validator.js +276 -0
- package/scripts/cli/internal/wizard.js +115 -0
- package/scripts/cli/mappings.js +23 -0
- package/scripts/cli/migration-tools.js +164 -94
- package/scripts/cli/plugins/style-dictionary.js +46 -0
- package/scripts/cli/templates/README.md +525 -95
- package/scripts/cli/templates/common-templates.js +40 -14
- package/scripts/cli/templates/components/react-component.ts +282 -0
- package/scripts/cli/templates/config/project-config.ts +112 -0
- package/scripts/cli/templates/hooks/use-component.ts +477 -0
- package/scripts/cli/templates/index.js +19 -4
- package/scripts/cli/templates/index.ts +171 -0
- package/scripts/cli/templates/next-templates.js +72 -0
- package/scripts/cli/templates/react-templates.js +70 -126
- package/scripts/cli/templates/scss-templates.js +35 -35
- package/scripts/cli/templates/stories/storybook-story.ts +241 -0
- package/scripts/cli/templates/styles/scss-component.ts +255 -0
- package/scripts/cli/templates/tests/vitest-test.ts +229 -0
- package/scripts/cli/templates/token-templates.js +337 -1
- package/scripts/cli/templates/tokens/token-generators.ts +1088 -0
- package/scripts/cli/templates/types/component-types.ts +145 -0
- package/scripts/cli/templates/utils/testing-utils.ts +144 -0
- package/scripts/cli/templates/vanilla-templates.js +39 -0
- package/scripts/cli/token-manager.js +8 -2
- package/scripts/cli/utils/cache-manager.js +240 -0
- package/scripts/cli/utils/detector.js +46 -0
- package/scripts/cli/utils/diagnostics.js +289 -0
- package/scripts/cli/utils/error.js +89 -0
- package/scripts/cli/utils/helpers.js +67 -0
- package/scripts/cli/utils/logger.js +75 -0
- package/scripts/cli/utils/security.js +302 -0
- package/scripts/cli/utils/telemetry.js +115 -0
- package/scripts/cli/utils/validation.js +37 -0
- package/scripts/cli/utils.js +28 -341
- package/src/components/Accordion/Accordion.stories.tsx +0 -18
- package/src/components/Accordion/Accordion.test.tsx +0 -17
- package/src/components/Accordion/Accordion.tsx +0 -4
- package/src/components/AtomixGlass/AtomixGlass.test.tsx +37 -3
- package/src/components/AtomixGlass/AtomixGlass.tsx +143 -31
- package/src/components/AtomixGlass/AtomixGlassContainer.tsx +129 -31
- package/src/components/AtomixGlass/PerformanceDashboard.tsx +219 -0
- package/src/components/AtomixGlass/README.md +25 -10
- package/src/components/AtomixGlass/__snapshots__/AtomixGlass.test.tsx.snap +216 -0
- package/src/components/AtomixGlass/animation-system.ts +578 -0
- package/src/components/AtomixGlass/shader-utils.ts +4 -1
- package/src/components/AtomixGlass/stories/Overview.stories.tsx +157 -6
- package/src/components/AtomixGlass/stories/Phase1-Animation.stories.tsx +653 -0
- package/src/components/AtomixGlass/stories/Phase1-Test.stories.tsx +95 -0
- package/src/components/AtomixGlass/stories/Playground.stories.tsx +51 -51
- package/src/components/AtomixGlass/stories/shared-components.tsx +6 -0
- package/src/components/Avatar/Avatar.tsx +1 -1
- package/src/components/Button/Button.stories.disabled-link.tsx +10 -0
- package/src/components/Button/Button.stories.tsx +10 -0
- package/src/components/Button/Button.test.tsx +16 -11
- package/src/components/Button/Button.tsx +4 -4
- package/src/components/Card/Card.tsx +1 -1
- package/src/components/Dropdown/Dropdown.tsx +12 -12
- package/src/components/Form/Select.tsx +62 -3
- package/src/components/Modal/Modal.tsx +14 -3
- package/src/components/Navigation/Navbar/Navbar.tsx +44 -0
- package/src/components/Slider/Slider.stories.tsx +3 -3
- package/src/components/Slider/Slider.tsx +38 -0
- package/src/components/Steps/Steps.tsx +3 -3
- package/src/components/Tabs/Tabs.tsx +77 -8
- package/src/components/Testimonial/Testimonial.tsx +1 -1
- package/src/components/TypedButton/TypedButton.stories.tsx +59 -0
- package/src/components/TypedButton/TypedButton.tsx +39 -0
- package/src/components/TypedButton/index.ts +2 -0
- package/src/components/VideoPlayer/VideoPlayer.tsx +11 -4
- package/src/lib/composables/index.ts +4 -7
- package/src/lib/composables/types.ts +45 -0
- package/src/lib/composables/useAccordion.ts +0 -7
- package/src/lib/composables/useAtomixGlass.ts +148 -6
- package/src/lib/composables/useAtomixGlassStyles.ts +9 -7
- package/src/lib/composables/useChartExport.ts +3 -13
- package/src/lib/composables/useDropdown.ts +66 -0
- package/src/lib/composables/useFocusTrap.ts +80 -0
- package/src/lib/composables/usePerformanceMonitor.ts +448 -0
- package/src/lib/composables/useResponsiveGlass.presets.ts +192 -0
- package/src/lib/composables/useResponsiveGlass.ts +441 -0
- package/src/lib/composables/useTooltip.ts +16 -0
- package/src/lib/composables/useTypedButton.ts +66 -0
- package/src/lib/config/index.ts +62 -5
- package/src/lib/constants/components.ts +62 -7
- package/src/lib/theme/devtools/__tests__/useHistory.test.tsx +150 -0
- package/src/lib/theme/tokens/centralized-tokens.ts +120 -0
- package/src/lib/theme/utils/__tests__/domUtils.test.ts +101 -0
- package/src/lib/types/components.ts +37 -11
- package/src/lib/types/glass.ts +35 -0
- package/src/lib/types/index.ts +1 -0
- package/src/lib/utils/displacement-generator.ts +1 -1
- package/src/styles/01-settings/_settings.testtypecheck.scss +53 -0
- package/src/styles/01-settings/_settings.typedbutton.scss +53 -0
- package/src/styles/06-components/_components.atomix-glass.scss +17 -21
- package/src/styles/06-components/_components.edge-panel.scss +1 -5
- package/src/styles/06-components/_components.modal.scss +1 -4
- package/src/styles/06-components/_components.navbar.scss +1 -1
- package/src/styles/06-components/_components.testbutton.scss +212 -0
- package/src/styles/06-components/_components.testtypecheck.scss +212 -0
- package/src/styles/06-components/_components.tooltip.scss +9 -5
- package/src/styles/06-components/_components.typedbutton.scss +212 -0
- package/src/styles/99-utilities/_index.scss +1 -0
- package/src/styles/99-utilities/_utilities.text.scss +1 -1
- package/src/styles/99-utilities/_utilities.touch-target.scss +36 -0
- package/scripts/cli/component-generator.js +0 -564
- package/scripts/cli/interactive-init.js +0 -357
- 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;
|