Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion src/cli/parser.ts
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,12 @@ export function createCommand(): Command {
'none',
'tailwind',
'styled-components',
'css-modules',
'css',
])
)
.addOption(
new Option('--state <state>', 'State management').choices(['none', 'redux', 'zustand'])
new Option('--state <state>', 'State management').choices(['none', 'redux', 'zustand', 'jotai'])
)
.addOption(
new Option('--testing <testing>', 'Testing setup').choices(['full', 'unit-component', 'custom', 'none'])
Expand Down
4 changes: 2 additions & 2 deletions src/config/defaults.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@ export const RUNTIME_DESCRIPTIONS: Record<string, string> = {
};

export const STYLING_DESCRIPTIONS: Record<string, string> = {
none: 'None - Plain CSS classes',
tailwind: 'Tailwind CSS - Utility-first framework',
'styled-components': 'Styled Components - CSS-in-JS',
'css-modules': 'CSS Modules - Scoped component styles',
css: 'Plain CSS - Traditional stylesheet approach',
};

export const STATE_DESCRIPTIONS: Record<string, string> = {
Expand Down Expand Up @@ -48,4 +49,3 @@ export const PACKAGE_MANAGER_COMMANDS: Record<string, { install: string; exec: s




7 changes: 4 additions & 3 deletions src/config/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ export type Runtime = z.infer<typeof RuntimeSchema>;
export const LanguageSchema = z.enum(['javascript', 'typescript']);
export type Language = z.infer<typeof LanguageSchema>;

export const StylingSchema = z.enum(['none', 'tailwind', 'styled-components']);
export const StylingSchema = z.enum(['tailwind', 'styled-components', 'css-modules', 'css']);
export type Styling = z.infer<typeof StylingSchema>;
export const StylingSolutionSchema = z.union([StylingSchema, z.literal('none')]);
export type StylingSolution = z.infer<typeof StylingSolutionSchema>;

export const StateManagementSchema = z.enum(['none', 'redux', 'zustand', 'jotai']);
export type StateManagement = z.infer<typeof StateManagementSchema>;
Expand Down Expand Up @@ -61,7 +63,7 @@ export const GitConfigSchema = z.object({
export type GitConfig = z.infer<typeof GitConfigSchema>;

export const StylingConfigSchema = z.object({
solution: StylingSchema.default('styled-components'),
solution: StylingSolutionSchema.default('styled-components'),
});
export type StylingConfigType = z.infer<typeof StylingConfigSchema>;

Expand Down Expand Up @@ -129,4 +131,3 @@ export const DEFAULT_CONFIG: ProjectConfig = {




17 changes: 17 additions & 0 deletions src/templates/overlays/styling/css-modules/manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"name": "styling-css-modules",
"version": "1.0.0",
"description": "CSS Modules styling solution",
"compatibleWith": ["runtime-vite", "runtime-nextjs"],
"dependencies": {},
"devDependencies": {},
"scripts": {},
"filePatterns": {
"include": ["**/*"],
"exclude": ["manifest.json", "_vite", "_nextjs"]
},
"runtimeOverrides": {
"vite": "_vite",
"nextjs": "_nextjs"
}
}
17 changes: 10 additions & 7 deletions src/templates/registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -239,14 +239,17 @@ export class TemplateRegistry {
templates.push(this.loadAndRegister(`runtime/${config.runtime}`));

// Load styling template (pass runtime for runtime-specific overlays)
// Vite: always styled-components
// Next.js: tailwind or none (none = no styling overlay, use runtime defaults)
if (config.styling.solution === 'tailwind') {
templates.push(this.loadAndRegister('styling/tailwind', config.runtime));
} else if (config.styling.solution === 'styled-components') {
templates.push(this.loadAndRegister('styling/styled-components', config.runtime));
// 'none' intentionally skips adding a styling overlay.
const stylingTemplateMap: Record<string, string> = {
tailwind: 'styling/tailwind',
'styled-components': 'styling/styled-components',
'css-modules': 'styling/css-modules',
css: 'styling/css',
};
const stylingTemplate = stylingTemplateMap[config.styling.solution];
if (stylingTemplate) {
templates.push(this.loadAndRegister(stylingTemplate, config.runtime));
}
// 'none' - don't load any styling overlay, use runtime defaults

// Load state management template
if (config.stateManagement && config.stateManagement !== 'none') {
Expand Down
Loading