create-flexireact 4.0.0 → 4.1.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.
@@ -8,5 +8,7 @@
8
8
  * - public/ : Static assets
9
9
  */
10
10
  import type { TemplateFiles } from './index.js';
11
- export declare function defaultTemplate(projectName: string): TemplateFiles;
11
+ export declare function defaultTemplate(projectName: string, options?: {
12
+ styling?: 'tailwind' | 'css';
13
+ }): TemplateFiles;
12
14
  //# sourceMappingURL=default.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../src/templates/default.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAioBlE"}
1
+ {"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../src/templates/default.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,UAAU,GAAG,KAAK,CAAA;CAAO,GAAG,aAAa,CAyqBlH"}
@@ -7,7 +7,8 @@
7
7
  * - lib/ : Utilities
8
8
  * - public/ : Static assets
9
9
  */
10
- export function defaultTemplate(projectName) {
10
+ export function defaultTemplate(projectName, options = {}) {
11
+ const isTailwind = options.styling !== 'css';
11
12
  return {
12
13
  // ========================================================================
13
14
  // Config Files
@@ -18,25 +19,28 @@ export function defaultTemplate(projectName) {
18
19
  private: true,
19
20
  type: 'module',
20
21
  scripts: {
21
- dev: 'npm run css && flexireact dev',
22
- build: 'npm run css && flexireact build',
22
+ dev: isTailwind ? 'npm run css && flexireact dev' : 'flexireact dev',
23
+ build: isTailwind ? 'npm run css && flexireact build' : 'flexireact build',
23
24
  start: 'flexireact start',
24
- css: 'tailwindcss -i ./app/styles/globals.css -o ./public/styles.css --minify',
25
+ ...(isTailwind ? { css: 'tailwindcss -i ./app/styles/globals.css -o ./public/styles.css --minify' } : {}),
25
26
  },
26
27
  dependencies: {
27
- react: '^18.2.0',
28
- 'react-dom': '^18.2.0',
29
- '@flexireact/core': '^3.0.0',
28
+ react: '^19.0.0',
29
+ 'react-dom': '^19.0.0',
30
+ '@flexireact/core': '^4.1.0',
31
+ 'lucide-react': '^0.344.0',
30
32
  clsx: '^2.1.0',
31
33
  'tailwind-merge': '^2.2.0',
32
34
  },
33
35
  devDependencies: {
34
- '@types/react': '^18.2.0',
35
- '@types/react-dom': '^18.2.0',
36
+ '@types/react': '^19.0.0',
37
+ '@types/react-dom': '^19.0.0',
36
38
  typescript: '^5.3.0',
37
- tailwindcss: '^4.0.0',
38
- '@tailwindcss/cli': '^4.0.0',
39
- '@tailwindcss/postcss': '^4.0.0',
39
+ ...(isTailwind ? {
40
+ tailwindcss: '^4.0.0',
41
+ '@tailwindcss/cli': '^4.0.0',
42
+ '@tailwindcss/postcss': '^4.0.0',
43
+ } : {}),
40
44
  },
41
45
  }, null, 2),
42
46
  'tsconfig.json': JSON.stringify({
@@ -62,12 +66,14 @@ export function defaultTemplate(projectName) {
62
66
  include: ['**/*.ts', '**/*.tsx'],
63
67
  exclude: ['node_modules', '.flexi', 'public'],
64
68
  }, null, 2),
65
- 'postcss.config.js': `export default {
69
+ ...(isTailwind ? {
70
+ 'postcss.config.js': `export default {
66
71
  plugins: {
67
72
  "@tailwindcss/postcss": {},
68
73
  },
69
74
  };
70
75
  `,
76
+ } : {}),
71
77
  'flexireact.config.js': `/** @type {import('@flexireact/core').FlexiConfig} */
72
78
  const config = {
73
79
  styles: [
@@ -103,12 +109,10 @@ export default function RootLayout({ children }: RootLayoutProps) {
103
109
  <link rel="stylesheet" href="/styles.css" />
104
110
  <link rel="icon" href="/favicon.svg" />
105
111
  </head>
106
- <body className="bg-background text-foreground min-h-screen antialiased">
107
- <div className="flex flex-col min-h-screen">
108
- <Navbar />
109
- <main className="flex-1">{children}</main>
110
- <Footer />
111
- </div>
112
+ <body className="${isTailwind ? 'bg-background text-foreground min-h-screen antialiased flex flex-col' : 'app-body'}">
113
+ <Navbar />
114
+ <main className="${isTailwind ? 'flex-1' : 'main-content'}">{children}</main>
115
+ <Footer />
112
116
  </body>
113
117
  </html>
114
118
  );
@@ -116,39 +120,52 @@ export default function RootLayout({ children }: RootLayoutProps) {
116
120
  `,
117
121
  // Components - UI
118
122
  'app/components/ui/Button.tsx': `import React from 'react';
119
- import { cn } from '@/lib/utils';
123
+ import { cn } from '@/lib/utils'; // Keep utility usage
120
124
 
121
125
  interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
122
126
  variant?: 'primary' | 'secondary' | 'ghost' | 'outline';
123
127
  size?: 'sm' | 'md' | 'lg';
128
+ href?: string;
124
129
  }
125
130
 
126
131
  export function Button({
127
132
  className,
128
133
  variant = 'primary',
129
134
  size = 'md',
135
+ href,
130
136
  children,
131
137
  ...props
132
138
  }: ButtonProps) {
139
+ const baseStyles = ${isTailwind
140
+ ? "'inline-flex items-center justify-center font-medium rounded-lg transition-all focus:outline-none focus:ring-2 focus:ring-primary/50 disabled:opacity-50 disabled:cursor-not-allowed'"
141
+ : "'btn'"};
142
+
143
+ const variants = {
144
+ primary: ${isTailwind ? "'bg-primary text-black hover:bg-primary/90'" : "'btn-primary'"},
145
+ secondary: ${isTailwind ? "'bg-secondary text-white hover:bg-secondary/80'" : "'btn-secondary'"},
146
+ ghost: ${isTailwind ? "'hover:bg-white/5'" : "'btn-ghost'"},
147
+ outline: ${isTailwind ? "'border border-border hover:bg-white/5 hover:border-primary'" : "'btn-outline'"},
148
+ };
149
+
150
+ const sizes = {
151
+ sm: ${isTailwind ? "'px-3 py-1.5 text-sm'" : "'btn-sm'"},
152
+ md: ${isTailwind ? "'px-4 py-2 text-sm'" : "'btn-md'"},
153
+ lg: ${isTailwind ? "'px-6 py-3 text-base'" : "'btn-lg'"},
154
+ };
155
+
156
+ const classes = cn(
157
+ baseStyles,
158
+ variants[variant],
159
+ sizes[size],
160
+ className
161
+ );
162
+
163
+ if (href) {
164
+ return <a href={href} className={classes}>{children}</a>;
165
+ }
166
+
133
167
  return (
134
- <button
135
- className={cn(
136
- 'inline-flex items-center justify-center font-medium rounded-lg transition-all',
137
- 'focus:outline-none focus:ring-2 focus:ring-primary/50',
138
- 'disabled:opacity-50 disabled:cursor-not-allowed',
139
- {
140
- 'bg-primary text-black hover:bg-primary/90': variant === 'primary',
141
- 'bg-secondary text-white hover:bg-secondary/80': variant === 'secondary',
142
- 'hover:bg-white/5': variant === 'ghost',
143
- 'border border-border hover:bg-white/5 hover:border-primary': variant === 'outline',
144
- 'px-3 py-1.5 text-sm': size === 'sm',
145
- 'px-4 py-2 text-sm': size === 'md',
146
- 'px-6 py-3 text-base': size === 'lg',
147
- },
148
- className
149
- )}
150
- {...props}
151
- >
168
+ <button className={classes} {...props}>
152
169
  {children}
153
170
  </button>
154
171
  );
@@ -165,12 +182,11 @@ export function Card({ className, variant = 'default', children, ...props }: Car
165
182
  return (
166
183
  <div
167
184
  className={cn(
168
- 'rounded-xl border border-border p-6 transition-all',
185
+ ${isTailwind ? "'rounded-xl border border-border p-6 transition-all hover:border-primary/50'" : "'card'"},
169
186
  {
170
- 'bg-card': variant === 'default',
171
- 'bg-white/5 backdrop-blur-xl': variant === 'glass',
187
+ ${isTailwind ? "'bg-card': variant === 'default'," : ""},
188
+ ${isTailwind ? "'bg-white/5 backdrop-blur-xl': variant === 'glass'," : ""},
172
189
  },
173
- 'hover:border-primary/50',
174
190
  className
175
191
  )}
176
192
  {...props}
@@ -181,15 +197,15 @@ export function Card({ className, variant = 'default', children, ...props }: Car
181
197
  }
182
198
 
183
199
  export function CardHeader({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
184
- return <div className={cn('mb-4', className)} {...props} />;
200
+ return <div className={cn(${isTailwind ? "'mb-4'" : "'card-header'"}, className)} {...props} />;
185
201
  }
186
202
 
187
203
  export function CardTitle({ className, ...props }: React.HTMLAttributes<HTMLHeadingElement>) {
188
- return <h3 className={cn('text-lg font-semibold', className)} {...props} />;
204
+ return <h3 className={cn(${isTailwind ? "'text-lg font-semibold'" : "'card-title'"}, className)} {...props} />;
189
205
  }
190
206
 
191
207
  export function CardContent({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) {
192
- return <div className={cn('text-muted', className)} {...props} />;
208
+ return <div className={cn(${isTailwind ? "'text-muted-foreground'" : "'card-content'"}, className)} {...props} />;
193
209
  }
194
210
  `,
195
211
  'app/components/ui/index.ts': `export { Button } from './Button';
@@ -197,28 +213,29 @@ export { Card, CardHeader, CardTitle, CardContent } from './Card';
197
213
  `,
198
214
  // Components - Layout
199
215
  'app/components/layout/Navbar.tsx': `import React from 'react';
216
+ import { Zap, Github } from 'lucide-react';
200
217
 
201
218
  export function Navbar() {
202
219
  return (
203
- <header className="sticky top-0 z-50 border-b border-border bg-background/80 backdrop-blur-xl">
204
- <nav className="container mx-auto px-4 h-16 flex items-center justify-between max-w-6xl">
205
- <a href="/" className="flex items-center gap-2">
206
- <div className="w-8 h-8 bg-primary rounded-lg flex items-center justify-center">
207
- <span className="text-black font-bold text-sm">F</span>
220
+ <header className="${isTailwind ? 'sticky top-0 z-50 border-b border-border bg-background/80 backdrop-blur-xl' : 'navbar'}">
221
+ <nav className="${isTailwind ? 'container mx-auto px-4 h-16 flex items-center justify-between max-w-6xl' : 'navbar-container'}">
222
+ <a href="/" className="${isTailwind ? 'flex items-center gap-2' : 'navbar-brand'}">
223
+ <div className="${isTailwind ? 'w-8 h-8 bg-primary rounded-lg flex items-center justify-center' : 'logo-container'}">
224
+ <Zap className="${isTailwind ? 'w-5 h-5 text-black' : 'logo-icon'}" />
208
225
  </div>
209
- <span className="font-semibold text-lg">FlexiReact</span>
226
+ <span className="${isTailwind ? 'font-semibold text-lg' : 'brand-text'}">FlexiReact</span>
210
227
  </a>
211
228
 
212
- <div className="flex items-center gap-6">
213
- <a href="/" className="text-sm text-muted hover:text-foreground transition-colors">Home</a>
214
- <a href="/about" className="text-sm text-muted hover:text-foreground transition-colors">About</a>
215
- <a href="/blog" className="text-sm text-muted hover:text-foreground transition-colors">Blog</a>
229
+ <div className="${isTailwind ? 'flex items-center gap-6' : 'navbar-links'}">
230
+ <a href="/" className="${isTailwind ? 'text-sm text-muted-foreground hover:text-foreground transition-colors' : 'nav-link'}">Home</a>
231
+ <a href="/about" className="${isTailwind ? 'text-sm text-muted-foreground hover:text-foreground transition-colors' : 'nav-link'}">About</a>
232
+ <a href="/blog" className="${isTailwind ? 'text-sm text-muted-foreground hover:text-foreground transition-colors' : 'nav-link'}">Blog</a>
216
233
  <a
217
234
  href="https://github.com/flexireact/flexireact"
218
235
  target="_blank"
219
- className="text-sm text-muted hover:text-foreground transition-colors"
236
+ className="${isTailwind ? 'text-sm text-muted-foreground hover:text-foreground transition-colors' : 'nav-link'}"
220
237
  >
221
- GitHub
238
+ <Github className="w-5 h-5" />
222
239
  </a>
223
240
  </div>
224
241
  </nav>
@@ -230,11 +247,11 @@ export function Navbar() {
230
247
 
231
248
  export function Footer() {
232
249
  return (
233
- <footer className="border-t border-border py-8 mt-auto">
234
- <div className="container mx-auto px-4 text-center text-sm text-muted max-w-6xl">
250
+ <footer className="${isTailwind ? 'border-t border-border py-8 mt-auto' : 'footer'}">
251
+ <div className="${isTailwind ? 'container mx-auto px-4 text-center text-sm text-muted-foreground max-w-6xl' : 'footer-container'}">
235
252
  <p>Built with FlexiReact v4 • {new Date().getFullYear()}</p>
236
- <p className="mt-2">
237
- <a href="https://discord.gg/rFSZxFtpAA" target="_blank" rel="noopener noreferrer" className="text-primary hover:underline">
253
+ <p className="${isTailwind ? 'mt-2' : ''}">
254
+ <a href="https://discord.gg/rFSZxFtpAA" target="_blank" rel="noopener noreferrer" className="${isTailwind ? 'text-primary hover:underline' : 'link'}">
238
255
  Join our Discord Community 💬
239
256
  </a>
240
257
  </p>
@@ -278,6 +295,13 @@ export function ThemeProvider({ children }: { children: React.ReactNode }) {
278
295
  }
279
296
  }, [theme]);
280
297
 
298
+ // For classic CSS body class handling could be added here if needed
299
+ if (${!isTailwind}) {
300
+ useEffect(() => {
301
+ document.body.className = theme;
302
+ }, [theme]);
303
+ }
304
+
281
305
  return (
282
306
  <ThemeContext.Provider value={{ theme, setTheme }}>
283
307
  {children}
@@ -292,7 +316,7 @@ export function useTheme() {
292
316
  }
293
317
  `,
294
318
  // Styles
295
- 'app/styles/globals.css': `@import "tailwindcss";
319
+ 'app/styles/globals.css': isTailwind ? `@import "tailwindcss";
296
320
 
297
321
  /* FlexiReact v4 Theme */
298
322
  @theme {
@@ -302,6 +326,7 @@ export function useTheme() {
302
326
  --color-primary: #00FF9C;
303
327
  --color-secondary: #1a1a1a;
304
328
  --color-muted: #71717a;
329
+ --color-muted-foreground: #a1a1aa;
305
330
  --color-border: #27272a;
306
331
  --color-card: #18181b;
307
332
 
@@ -320,41 +345,79 @@ body {
320
345
  color: var(--color-foreground);
321
346
  -webkit-font-smoothing: antialiased;
322
347
  }
323
-
324
- /* Fade-in and slide-up animations */
325
- @keyframes fadeInUp {
326
- from {
327
- opacity: 0;
328
- transform: translateY(30px);
329
- }
330
- to {
331
- opacity: 1;
332
- transform: translateY(0);
333
- }
334
- }
335
-
336
- .animate-fade-in-up {
337
- animation: fadeInUp 0.6s ease-out forwards;
338
- }
339
-
340
- .animate-delay-100 {
341
- animation-delay: 0.1s;
342
- opacity: 0;
348
+ ` : `/* Modern CSS Variables */
349
+ :root {
350
+ --bg-color: #0a0a0a;
351
+ --text-color: #ffffff;
352
+ --primary-color: #00FF9C;
353
+ --border-color: #333;
354
+ --card-bg: #18181b;
355
+ --muted-text: #a1a1aa;
343
356
  }
344
357
 
345
- .animate-delay-200 {
346
- animation-delay: 0.2s;
347
- opacity: 0;
358
+ body {
359
+ background: var(--bg-color);
360
+ color: var(--text-color);
361
+ margin: 0;
362
+ font-family: system-ui, -apple-system, sans-serif;
363
+ min-height: 100vh;
364
+ display: flex;
365
+ flex-direction: column;
348
366
  }
349
367
 
350
- .animate-delay-300 {
351
- animation-delay: 0.3s;
352
- opacity: 0;
353
- }
368
+ /* Structural Classes */
369
+ .app-body { min-height: 100vh; display: flex; flex-direction: column; }
370
+ .main-content { flex: 1; }
371
+ .container { max-width: 1200px; margin: 0 auto; padding: 0 20px; }
372
+
373
+ /* Buttons */
374
+ .btn { display: inline-flex; align-items: center; justify-content: center; padding: 10px 20px; border-radius: 8px; font-weight: 600; text-decoration: none; cursor: pointer; border: none; transition: all 0.2s; }
375
+ .btn-primary { background: var(--primary-color); color: #000; }
376
+ .btn-primary:hover { opacity: 0.9; }
377
+ .btn-outline { border: 1px solid var(--border-color); color: white; background: transparent; }
378
+ .btn-outline:hover { border-color: var(--primary-color); }
379
+ .btn-ghost { background: transparent; color: white; }
380
+ .btn-ghost:hover { background: rgba(255,255,255,0.1); }
381
+ .btn-sm { font-size: 0.8rem; padding: 5px 10px; }
382
+ .btn-lg { font-size: 1.2rem; padding: 15px 30px; }
383
+
384
+ /* Navbar */
385
+ .navbar { border-bottom: 1px solid var(--border-color); padding: 15px 0; background: rgba(10,10,10,0.8); backdrop-filter: blur(10px); position: sticky; top: 0; z-index: 50; }
386
+ .navbar-container { display: flex; justify-content: space-between; align-items: center; max-width: 1200px; margin: 0 auto; padding: 0 20px; }
387
+ .navbar-brand { display: flex; align-items: center; gap: 10px; font-weight: bold; font-size: 1.2rem; color: white; text-decoration: none; }
388
+ .logo-container { width: 32px; height: 32px; background: var(--primary-color); border-radius: 8px; display: flex; align-items: center; justify-content: center; }
389
+ .logo-icon { color: black; width: 20px; height: 20px; }
390
+ .navbar-links { display: flex; gap: 20px; }
391
+ .nav-link { color: var(--muted-text); text-decoration: none; font-weight: 500; font-size: 0.9rem; }
392
+ .nav-link:hover { color: white; }
393
+
394
+ /* Footer */
395
+ .footer { border-top: 1px solid var(--border-color); padding: 40px 0; margin-top: auto; text-align: center; color: var(--muted-text); font-size: 0.9rem; }
396
+ .footer-container { max-width: 1200px; margin: 0 auto; padding: 0 20px; }
397
+ .link { color: var(--primary-color); text-decoration: none; }
398
+ .link:hover { text-decoration: underline; }
399
+
400
+ /* Cards */
401
+ .card { border: 1px solid var(--border-color); border-radius: 12px; padding: 24px; background: var(--card-bg); transition: border-color 0.2s; }
402
+ .card:hover { border-color: rgba(0, 255, 156, 0.5); }
403
+ .card-title { font-size: 1.2rem; font-weight: 600; margin-bottom: 10px; margin-top: 0; }
404
+ .card-content { color: var(--muted-text); }
405
+ .feature-icon { margin-bottom: 15px; color: var(--primary-color); }
406
+
407
+ /* Home Page Specifics */
408
+ .home-page { text-align: center; padding: 80px 20px; display: flex; flex-direction: column; align-items: center; justify-content: center; min-height: calc(100vh - 8rem); }
409
+ .badge { display: inline-flex; align-items: center; gap: 8px; padding: 4px 12px; border-radius: 99px; background: rgba(255,255,255,0.05); border: 1px solid rgba(255,255,255,0.1); font-size: 0.9rem; color: var(--muted-text); margin-bottom: 30px; }
410
+ .page-title { font-size: 4rem; line-height: 1.1; margin-bottom: 20px; font-weight: 800; letter-spacing: -0.02em; }
411
+ .highlight { background: linear-gradient(to right, var(--primary-color), #00D68F); -webkit-background-clip: text; color: transparent; }
412
+ .subtitle { font-size: 1.25rem; color: var(--muted-text); max-width: 600px; margin: 0 auto 40px; line-height: 1.6; }
413
+ .actions { display: flex; gap: 15px; justify-content: center; }
414
+ .features-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px; margin-top: 60px; text-align: left; width: 100%; max-width: 900px; }
415
+ `,
416
+ 'lib/utils.ts': `import { clsx, type ClassValue } from 'clsx';
417
+ import { twMerge } from 'tailwind-merge';
354
418
 
355
- .animate-delay-400 {
356
- animation-delay: 0.4s;
357
- opacity: 0;
419
+ export function cn(...inputs: ClassValue[]) {
420
+ return twMerge(clsx(inputs));
358
421
  }
359
422
  `,
360
423
  // ========================================================================
@@ -362,6 +425,7 @@ body {
362
425
  // ========================================================================
363
426
  'routes/(public)/home.tsx': `import React from 'react';
364
427
  import { Button } from '@/app/components/ui';
428
+ import { Zap, Box, Palette, Lock } from 'lucide-react';
365
429
 
366
430
  export const metadata = {
367
431
  title: 'FlexiReact v4 - The Modern React Framework',
@@ -370,75 +434,62 @@ export const metadata = {
370
434
 
371
435
  export default function HomePage() {
372
436
  return (
373
- <div className="flex flex-col items-center justify-center min-h-[calc(100vh-8rem)] px-4">
374
- <div className="max-w-4xl mx-auto text-center space-y-8">
437
+ <div className="${isTailwind ? 'flex flex-col items-center justify-center min-h-[calc(100vh-8rem)] px-4' : 'home-page'}">
438
+ <div className="${isTailwind ? 'max-w-4xl mx-auto text-center space-y-8' : 'container'}">
375
439
  {/* Badge */}
376
- <div className="inline-flex items-center gap-2 px-3 py-1 rounded-full bg-white/5 border border-white/10 text-sm">
377
- <span className="relative flex h-2 w-2">
378
- <span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75"></span>
379
- <span className="relative inline-flex rounded-full h-2 w-2 bg-primary"></span>
440
+ <div className="${isTailwind ? 'inline-flex items-center gap-2 px-3 py-1 rounded-full bg-white/5 border border-white/10 text-sm' : 'badge'}">
441
+ <span className="${isTailwind ? 'relative flex h-2 w-2' : ''}">
442
+ {/* Badge dot logic simplified for css mode */}
443
+ {${isTailwind} && <span className="animate-ping absolute inline-flex h-full w-full rounded-full bg-primary opacity-75"></span>}
444
+ <span className="${isTailwind ? 'relative inline-flex rounded-full h-2 w-2 bg-primary' : 'badge-dot'}"></span>
380
445
  </span>
381
- <span className="text-muted">Introducing FlexiReact v4.0</span>
446
+ <span className="${isTailwind ? 'text-muted-foreground' : ''}">Introducing FlexiReact v4.0</span>
382
447
  </div>
383
448
 
384
449
  {/* Heading */}
385
- <h1 className="text-5xl md:text-7xl font-bold tracking-tight">
450
+ <h1 className="${isTailwind ? 'text-5xl md:text-7xl font-bold tracking-tight' : 'page-title'}">
386
451
  The React Framework
387
452
  <br />
388
- <span className="bg-gradient-to-r from-primary via-primary/80 to-primary bg-clip-text text-transparent">
453
+ <span className="${isTailwind ? 'bg-gradient-to-r from-primary via-primary/80 to-primary bg-clip-text text-transparent' : 'highlight'}">
389
454
  for the Web
390
455
  </span>
391
456
  </h1>
392
457
 
393
458
  {/* Description */}
394
- <p className="text-xl text-muted max-w-2xl mx-auto leading-relaxed">
395
- FlexiReact enables you to create full-stack web applications with TypeScript, Tailwind CSS, and modern tooling.
459
+ <p className="${isTailwind ? 'text-xl text-muted-foreground max-w-2xl mx-auto leading-relaxed' : 'subtitle'}">
460
+ FlexiReact enables you to create full-stack web applications with TypeScript${isTailwind ? ", Tailwind CSS," : ""}, and modern tooling.
396
461
  </p>
397
462
 
398
463
  {/* CTA Buttons */}
399
- <div className="flex flex-col sm:flex-row gap-4 justify-center pt-4">
400
- <Button size="lg" className="text-base">
464
+ <div className="${isTailwind ? 'flex flex-col sm:flex-row gap-4 justify-center pt-4' : 'actions'}">
465
+ <Button size="lg" className="${isTailwind ? 'text-base' : ''}">
401
466
  Get Started →
402
467
  </Button>
403
- <Button variant="outline" size="lg" className="text-base">
468
+ <Button variant="outline" size="lg" className="${isTailwind ? 'text-base' : ''}">
404
469
  Learn More
405
470
  </Button>
406
471
  </div>
407
472
 
408
- {/* Terminal Preview */}
409
- <div className="mt-12 max-w-2xl mx-auto">
410
- <div className="rounded-lg border border-border bg-background/50 backdrop-blur-sm overflow-hidden">
411
- <div className="flex items-center gap-2 px-4 py-3 border-b border-border bg-white/5">
412
- <div className="flex gap-1.5">
413
- <div className="w-3 h-3 rounded-full bg-red-500/60" />
414
- <div className="w-3 h-3 rounded-full bg-yellow-500/60" />
415
- <div className="w-3 h-3 rounded-full bg-green-500/60" />
416
- </div>
417
- </div>
418
- <div className="p-6 font-mono text-sm">
419
- <div className="text-muted">$ npx create-flexireact@latest</div>
420
- </div>
421
- </div>
422
- </div>
423
-
424
473
  {/* Features Grid */}
425
- <div className="grid grid-cols-2 md:grid-cols-4 gap-4 pt-16 max-w-3xl mx-auto">
426
- {[
427
- { icon: '⚡', label: 'Fast Refresh' },
428
- { icon: '📦', label: 'File Routing' },
429
- { icon: '🎨', label: 'Tailwind CSS' },
430
- { icon: '🔒', label: 'TypeScript' },
431
- ].map((feature) => (
432
- <div key={feature.label} className="flex flex-col items-center gap-2 p-4 rounded-lg border border-border bg-white/5 hover:bg-white/10 transition-colors">
433
- <span className="text-2xl">{feature.icon}</span>
434
- <span className="text-sm font-medium">{feature.label}</span>
435
- </div>
436
- ))}
474
+ <div className="${isTailwind ? 'grid grid-cols-2 md:grid-cols-4 gap-4 pt-16 max-w-3xl mx-auto' : 'features-grid'}">
475
+ <Feature icon={<Zap size={24} />} label="Fast Refresh" />
476
+ <Feature icon={<Box size={24} />} label="File Routing" />
477
+ <Feature icon={<Palette size={24} />} label="${isTailwind ? 'Tailwind CSS' : 'Modern CSS'}" />
478
+ <Feature icon={<Lock size={24} />} label="TypeScript" />
437
479
  </div>
438
480
  </div>
439
481
  </div>
440
482
  );
441
483
  }
484
+
485
+ function Feature({ icon, label }: any) {
486
+ return (
487
+ <div className="${isTailwind ? 'flex flex-col items-center gap-2 p-4 rounded-lg border border-border bg-white/5 hover:bg-white/10 transition-colors' : 'feature-card'}">
488
+ <span className="${isTailwind ? 'text-primary' : 'feature-icon'}">{icon}</span>
489
+ <span className="${isTailwind ? 'text-sm font-medium' : 'feature-label'}">{label}</span>
490
+ </div>
491
+ );
492
+ }
442
493
  `,
443
494
  'routes/(public)/about.tsx': `import React from 'react';
444
495
  import { Card, CardHeader, CardTitle, CardContent } from '@/app/components/ui';
@@ -449,10 +500,10 @@ export const metadata = {
449
500
 
450
501
  export default function AboutPage() {
451
502
  return (
452
- <div className="container mx-auto px-4 py-16 max-w-3xl">
453
- <h1 className="text-4xl font-bold mb-8">About FlexiReact</h1>
503
+ <div className="${isTailwind ? 'container mx-auto px-4 py-16 max-w-3xl' : 'container'}">
504
+ <h1 className="${isTailwind ? 'text-4xl font-bold mb-8' : 'page-title'}">About FlexiReact</h1>
454
505
 
455
- <Card className="mb-6">
506
+ <Card className="${isTailwind ? 'mb-6' : ''}">
456
507
  <CardHeader>
457
508
  <CardTitle>What is FlexiReact?</CardTitle>
458
509
  </CardHeader>
@@ -470,13 +521,12 @@ export default function AboutPage() {
470
521
  <CardTitle>Features</CardTitle>
471
522
  </CardHeader>
472
523
  <CardContent>
473
- <ul className="space-y-2">
524
+ <ul className="${isTailwind ? 'space-y-2' : 'feature-list'}">
474
525
  <li>✓ Server-Side Rendering (SSR)</li>
475
526
  <li>✓ Static Site Generation (SSG)</li>
476
527
  <li>✓ Islands Architecture</li>
477
528
  <li>✓ File-based Routing</li>
478
529
  <li>✓ TypeScript Support</li>
479
- <li>✓ Tailwind CSS v4</li>
480
530
  </ul>
481
531
  </CardContent>
482
532
  </Card>
@@ -499,12 +549,12 @@ const posts = [
499
549
 
500
550
  export default function BlogPage() {
501
551
  return (
502
- <div className="container mx-auto px-4 py-16 max-w-6xl">
503
- <h1 className="text-4xl font-bold mb-8">Blog</h1>
552
+ <div className="${isTailwind ? 'container mx-auto px-4 py-16 max-w-6xl' : 'container'}">
553
+ <h1 className="${isTailwind ? 'text-4xl font-bold mb-8' : 'page-title'}">Blog</h1>
504
554
 
505
- <div className="grid gap-6 md:grid-cols-2 lg:grid-cols-3">
555
+ <div className="${isTailwind ? 'grid gap-6 md:grid-cols-2 lg:grid-cols-3' : 'features-grid'}">
506
556
  {posts.map((post) => (
507
- <a key={post.slug} href={\`/blog/\${post.slug}\`}>
557
+ <a key={post.slug} href={\`/blog/\${post.slug}\`} style={{ textDecoration: 'none' }}>
508
558
  <Card className="h-full">
509
559
  <CardHeader>
510
560
  <CardTitle>{post.title}</CardTitle>
@@ -529,15 +579,15 @@ interface BlogPostProps {
529
579
 
530
580
  export default function BlogPost({ params }: BlogPostProps) {
531
581
  return (
532
- <div className="container mx-auto px-4 py-16 max-w-3xl">
533
- <a href="/blog">
534
- <Button variant="ghost" size="sm" className="mb-8">← Back to Blog</Button>
535
- </a>
582
+ <div className="${isTailwind ? 'container mx-auto px-4 py-16 max-w-3xl' : 'container'}">
583
+ <div className="mb-8">
584
+ <Button variant="ghost" size="sm" href="/blog">← Back to Blog</Button>
585
+ </div>
536
586
 
537
- <h1 className="text-4xl font-bold mb-4">Blog Post: {params.slug}</h1>
587
+ <h1 className="${isTailwind ? 'text-4xl font-bold mb-4' : 'page-title'}">Blog Post: {params.slug}</h1>
538
588
 
539
- <p className="text-muted mb-8">
540
- This is a dynamic route. The slug parameter is: <code className="text-primary">{params.slug}</code>
589
+ <p className="${isTailwind ? 'text-muted-foreground mb-8' : 'subtitle'}">
590
+ This is a dynamic route. The slug parameter is: <code className="${isTailwind ? 'text-primary' : 'highlight'}">{params.slug}</code>
541
591
  </p>
542
592
 
543
593
  <div className="prose prose-invert">
@@ -565,16 +615,6 @@ export async function POST(request: Request) {
565
615
  message: 'POST request received',
566
616
  });
567
617
  }
568
- `,
569
- // ========================================================================
570
- // Lib Directory
571
- // ========================================================================
572
- 'lib/utils.ts': `import { clsx, type ClassValue } from 'clsx';
573
- import { twMerge } from 'tailwind-merge';
574
-
575
- export function cn(...inputs: ClassValue[]) {
576
- return twMerge(clsx(inputs));
577
- }
578
618
  `,
579
619
  // ========================================================================
580
620
  // Public Directory
@@ -1 +1 @@
1
- {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/templates/default.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"default.js","sourceRoot":"","sources":["../../src/templates/default.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { TemplateFiles } from './index.js';
2
+ export declare function fullstackTemplate(projectName: string, options?: {
3
+ styling?: 'tailwind' | 'css';
4
+ }): TemplateFiles;
5
+ //# sourceMappingURL=fullstack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullstack.d.ts","sourceRoot":"","sources":["../../src/templates/fullstack.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,UAAU,GAAG,KAAK,CAAA;CAAO,GAAG,aAAa,CAsnBpH"}