create-universal-dapp 1.0.1 → 1.0.3
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/dist/templates/nextjs.js +165 -178
- package/dist/templates/nextjs.js.map +1 -1
- package/dist/templates/vite.d.ts +1 -0
- package/dist/templates/vite.d.ts.map +1 -1
- package/dist/templates/vite.js +125 -395
- package/dist/templates/vite.js.map +1 -1
- package/package.json +1 -1
package/dist/templates/nextjs.js
CHANGED
|
@@ -17,7 +17,7 @@ export async function createNextjsApp(options) {
|
|
|
17
17
|
await createESLintConfig(options);
|
|
18
18
|
}
|
|
19
19
|
// Create Tailwind config (Tailwind-only setup)
|
|
20
|
-
await
|
|
20
|
+
await createPostcssConfig(options);
|
|
21
21
|
spinner.succeed('Next.js project structure created');
|
|
22
22
|
}
|
|
23
23
|
catch (error) {
|
|
@@ -26,31 +26,41 @@ export async function createNextjsApp(options) {
|
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
async function createNextjsPackageJson(options) {
|
|
29
|
+
const baseDevDeps = {
|
|
30
|
+
"@tailwindcss/postcss": "^4",
|
|
31
|
+
"@types/node": "^20",
|
|
32
|
+
"@types/react": "^19",
|
|
33
|
+
"@types/react-dom": "^19",
|
|
34
|
+
"tailwindcss": "^4",
|
|
35
|
+
"typescript": "^5"
|
|
36
|
+
};
|
|
37
|
+
const eslintDevDeps = {
|
|
38
|
+
"@eslint/eslintrc": "^3",
|
|
39
|
+
"eslint": "^9",
|
|
40
|
+
"eslint-config-next": "15.5.3",
|
|
41
|
+
};
|
|
42
|
+
const devDependencies = {
|
|
43
|
+
...baseDevDeps,
|
|
44
|
+
...(options.eslint ? eslintDevDeps : {}),
|
|
45
|
+
};
|
|
29
46
|
const packageJson = {
|
|
30
47
|
name: options.projectName,
|
|
31
|
-
version: "0.1.0",
|
|
32
48
|
private: true,
|
|
49
|
+
version: "0.0.0",
|
|
50
|
+
type: "module",
|
|
33
51
|
scripts: {
|
|
34
|
-
dev: "
|
|
35
|
-
build: "
|
|
36
|
-
|
|
37
|
-
|
|
52
|
+
dev: "vite",
|
|
53
|
+
build: "tsc && vite build",
|
|
54
|
+
...(options.eslint && { lint: "eslint ." }),
|
|
55
|
+
preview: "vite preview"
|
|
38
56
|
},
|
|
39
57
|
dependencies: {
|
|
40
|
-
|
|
41
|
-
"
|
|
42
|
-
|
|
43
|
-
"
|
|
58
|
+
"@pushchain/ui-kit": "^1.1.34",
|
|
59
|
+
"next": "15.5.3",
|
|
60
|
+
"react": "19.1.0",
|
|
61
|
+
"react-dom": "19.1.0"
|
|
44
62
|
},
|
|
45
|
-
devDependencies
|
|
46
|
-
typescript: "^5.2.2",
|
|
47
|
-
"@types/node": "^20.8.0",
|
|
48
|
-
"@types/react": "^18.2.33",
|
|
49
|
-
"@types/react-dom": "^18.2.14",
|
|
50
|
-
tailwindcss: "^3.3.0",
|
|
51
|
-
autoprefixer: "^10.4.16",
|
|
52
|
-
postcss: "^8.4.31"
|
|
53
|
-
}
|
|
63
|
+
devDependencies,
|
|
54
64
|
};
|
|
55
65
|
// Remove undefined values
|
|
56
66
|
Object.keys(packageJson.scripts).forEach(key => {
|
|
@@ -63,177 +73,160 @@ async function createNextjsPackageJson(options) {
|
|
|
63
73
|
}
|
|
64
74
|
async function createNextjsConfig(options) {
|
|
65
75
|
// Next.js config
|
|
66
|
-
const nextConfig =
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
76
|
+
const nextConfig = `import type { NextConfig } from "next";
|
|
77
|
+
|
|
78
|
+
const nextConfig: NextConfig = {
|
|
79
|
+
/* config options here */
|
|
80
|
+
reactStrictMode: true,
|
|
81
|
+
};
|
|
70
82
|
|
|
71
|
-
|
|
83
|
+
export default nextConfig;`;
|
|
72
84
|
await fs.writeFile(path.join(options.targetDir, 'next.config.js'), nextConfig);
|
|
73
85
|
// TypeScript config
|
|
74
86
|
const tsConfig = {
|
|
75
|
-
compilerOptions: {
|
|
76
|
-
target: "
|
|
77
|
-
lib: ["dom", "dom.iterable", "
|
|
78
|
-
allowJs: true,
|
|
79
|
-
skipLibCheck: true,
|
|
80
|
-
strict: true,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
plugins: [
|
|
91
|
-
{
|
|
92
|
-
name: "next"
|
|
93
|
-
}
|
|
94
|
-
],
|
|
95
|
-
baseUrl: ".",
|
|
96
|
-
paths: {
|
|
87
|
+
"compilerOptions": {
|
|
88
|
+
"target": "ES2017",
|
|
89
|
+
"lib": ["dom", "dom.iterable", "esnext"],
|
|
90
|
+
"allowJs": true,
|
|
91
|
+
"skipLibCheck": true,
|
|
92
|
+
"strict": true,
|
|
93
|
+
"noEmit": true,
|
|
94
|
+
"esModuleInterop": true,
|
|
95
|
+
"module": "esnext",
|
|
96
|
+
"moduleResolution": "bundler",
|
|
97
|
+
"resolveJsonModule": true,
|
|
98
|
+
"isolatedModules": true,
|
|
99
|
+
"jsx": "preserve",
|
|
100
|
+
"incremental": true,
|
|
101
|
+
"paths": {
|
|
97
102
|
"@/*": ["./src/*"]
|
|
98
103
|
}
|
|
99
104
|
},
|
|
100
|
-
include: ["next-env.d.ts", "**/*.ts", "**/*.tsx"
|
|
101
|
-
exclude: ["node_modules"]
|
|
105
|
+
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
|
|
106
|
+
"exclude": ["node_modules"]
|
|
102
107
|
};
|
|
103
108
|
await fs.writeJSON(path.join(options.targetDir, 'tsconfig.json'), tsConfig, { spaces: 2 });
|
|
104
109
|
}
|
|
105
110
|
async function createNextjsSourceFiles(options) {
|
|
106
111
|
// Create src directory structure
|
|
107
112
|
const srcDir = path.join(options.targetDir, 'src');
|
|
108
|
-
const appDir = path.join(srcDir, '
|
|
113
|
+
const appDir = path.join(srcDir, 'pages');
|
|
114
|
+
const stylesDir = path.join(srcDir, 'styles');
|
|
109
115
|
await fs.ensureDir(appDir);
|
|
110
116
|
// Create app layout
|
|
111
|
-
const layout = `import
|
|
112
|
-
import {
|
|
113
|
-
import { PushChainProviders } from '
|
|
114
|
-
import type { Metadata } from 'next'
|
|
115
|
-
|
|
116
|
-
const inter = Inter({ subsets: ['latin'] })
|
|
117
|
+
const layout = `import "@/styles/globals.css";
|
|
118
|
+
import type { AppProps } from "next/app";
|
|
119
|
+
import { PushChainProviders } from '../providers/PushChainProviders';
|
|
117
120
|
|
|
118
|
-
export
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
telephone: false,
|
|
129
|
-
},
|
|
130
|
-
metadataBase: new URL('https://your-domain.com'), // Replace with your actual domain
|
|
131
|
-
openGraph: {
|
|
132
|
-
title: '${options.projectName}',
|
|
133
|
-
description: 'A Push Chain application built with Next.js',
|
|
134
|
-
url: 'https://your-domain.com', // Replace with your actual URL
|
|
135
|
-
siteName: '${options.projectName}',
|
|
136
|
-
locale: 'en_US',
|
|
137
|
-
type: 'website',
|
|
138
|
-
},
|
|
139
|
-
twitter: {
|
|
140
|
-
card: 'summary_large_image',
|
|
141
|
-
title: '${options.projectName}',
|
|
142
|
-
description: 'A Push Chain application built with Next.js',
|
|
143
|
-
creator: '@your_twitter_handle', // Replace with your Twitter handle
|
|
144
|
-
},
|
|
145
|
-
robots: {
|
|
146
|
-
index: true,
|
|
147
|
-
follow: true,
|
|
148
|
-
googleBot: {
|
|
149
|
-
index: true,
|
|
150
|
-
follow: true,
|
|
151
|
-
'max-video-preview': -1,
|
|
152
|
-
'max-image-preview': 'large',
|
|
153
|
-
'max-snippet': -1,
|
|
154
|
-
},
|
|
155
|
-
},
|
|
156
|
-
}
|
|
121
|
+
export default function App({ Component, pageProps }: AppProps) {
|
|
122
|
+
return (
|
|
123
|
+
<PushChainProviders>
|
|
124
|
+
<Component {...pageProps} />
|
|
125
|
+
</PushChainProviders>
|
|
126
|
+
);
|
|
127
|
+
}`;
|
|
128
|
+
await fs.writeFile(path.join(appDir, '_app.tsx'), layout);
|
|
129
|
+
// Create document layout
|
|
130
|
+
const document = `import { Html, Head, Main, NextScript } from "next/document";
|
|
157
131
|
|
|
158
|
-
export default function
|
|
159
|
-
children,
|
|
160
|
-
}: {
|
|
161
|
-
children: React.ReactNode
|
|
162
|
-
}) {
|
|
132
|
+
export default function Document() {
|
|
163
133
|
return (
|
|
164
|
-
<
|
|
165
|
-
<
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
134
|
+
<Html lang="en">
|
|
135
|
+
<Head />
|
|
136
|
+
<body className="antialiased">
|
|
137
|
+
<Main />
|
|
138
|
+
<NextScript />
|
|
169
139
|
</body>
|
|
170
|
-
</
|
|
171
|
-
)
|
|
140
|
+
</Html>
|
|
141
|
+
);
|
|
172
142
|
}`;
|
|
173
|
-
await fs.writeFile(path.join(appDir, '
|
|
143
|
+
await fs.writeFile(path.join(appDir, '_document.tsx'), document);
|
|
174
144
|
// Create main page
|
|
175
145
|
const page = `'use client'
|
|
176
146
|
|
|
177
147
|
import { PushUniversalAccountButton, usePushWalletContext } from '@pushchain/ui-kit'
|
|
178
148
|
|
|
179
|
-
|
|
149
|
+
function App() {
|
|
180
150
|
const { universalAccount } = usePushWalletContext();
|
|
181
151
|
|
|
182
152
|
console.log("universalAccount", universalAccount);
|
|
183
|
-
|
|
153
|
+
|
|
184
154
|
return (
|
|
185
|
-
<
|
|
186
|
-
<div className="
|
|
155
|
+
<div className="min-h-screen p-8">
|
|
156
|
+
<div className="max-w-[800px] mx-auto">
|
|
187
157
|
<div className="text-center mb-8">
|
|
188
|
-
<h1 className="text-
|
|
189
|
-
Welcome to
|
|
158
|
+
<h1 className="text-[2.5rem] font-bold mb-4">
|
|
159
|
+
Welcome to my-push-app
|
|
190
160
|
</h1>
|
|
191
|
-
<p className="text-
|
|
161
|
+
<p className="text-[1.2rem] text-gray-400 mb-8">
|
|
192
162
|
Your Push Chain application is ready to go!
|
|
193
163
|
</p>
|
|
194
164
|
</div>
|
|
165
|
+
|
|
166
|
+
<div className="max-w-[600px] mx-auto p-8 border border-gray-300 rounded-lg text-center">
|
|
167
|
+
<h2 className="mb-4">Push Chain Integration</h2>
|
|
195
168
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
{universalAccount ?
|
|
169
|
+
<div className="mb-4">
|
|
170
|
+
<span
|
|
171
|
+
className={"px-2 py-1 rounded text-white text-[12px] " + (universalAccount ? 'bg-green-500' : 'bg-gray-500')}
|
|
172
|
+
>
|
|
173
|
+
{universalAccount ? "Connected" : "Not Connected"}
|
|
201
174
|
</span>
|
|
202
175
|
</div>
|
|
203
|
-
|
|
204
|
-
<div className="
|
|
176
|
+
|
|
177
|
+
<div className="mb-8 justify-items-center">
|
|
205
178
|
<PushUniversalAccountButton />
|
|
206
179
|
</div>
|
|
207
|
-
|
|
180
|
+
|
|
208
181
|
{universalAccount && (
|
|
209
|
-
<div className="mt-
|
|
210
|
-
<h3 className="font-
|
|
211
|
-
<pre className="text-
|
|
182
|
+
<div className="mt-8 p-4 bg-gray-100 text-neutral-800 rounded-md text-left">
|
|
183
|
+
<h3 className="font-bold mb-2">Account Details:</h3>
|
|
184
|
+
<pre className="text-[0.8rem] overflow-auto">
|
|
212
185
|
{JSON.stringify(universalAccount, null, 2)}
|
|
213
186
|
</pre>
|
|
214
187
|
</div>
|
|
215
188
|
)}
|
|
216
|
-
|
|
217
|
-
<div className="text-
|
|
218
|
-
<p
|
|
219
|
-
<ul className="
|
|
189
|
+
|
|
190
|
+
<div className="text-[0.9rem] text-gray-400 mt-8 text-left">
|
|
191
|
+
<p><strong>Next steps:</strong></p>
|
|
192
|
+
<ul className="my-2 pl-6 list-disc">
|
|
220
193
|
<li>Configure your Push Chain settings in providers/PushChainProviders.tsx</li>
|
|
221
|
-
<li>Customize the app metadata
|
|
194
|
+
<li>Customize the app metadata with your branding</li>
|
|
222
195
|
<li>Add your chain configuration and RPC URLs</li>
|
|
223
196
|
<li>Explore the @pushchain/ui-kit for more components</li>
|
|
224
197
|
</ul>
|
|
225
198
|
</div>
|
|
226
199
|
</div>
|
|
227
200
|
</div>
|
|
228
|
-
</
|
|
201
|
+
</div>
|
|
229
202
|
)
|
|
230
|
-
}
|
|
231
|
-
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export default App`;
|
|
206
|
+
await fs.writeFile(path.join(appDir, 'index.tsx'), page);
|
|
232
207
|
// Create global CSS (Tailwind directives only)
|
|
233
|
-
const globalCss = `@
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
208
|
+
const globalCss = `@import "tailwindcss";
|
|
209
|
+
|
|
210
|
+
:root {
|
|
211
|
+
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
212
|
+
line-height: 1.5;
|
|
213
|
+
font-weight: 400;
|
|
214
|
+
|
|
215
|
+
color: rgba(255, 255, 255, 0.87);
|
|
216
|
+
background-color: #242424;
|
|
217
|
+
|
|
218
|
+
font-synthesis: none;
|
|
219
|
+
text-rendering: optimizeLegibility;
|
|
220
|
+
-webkit-font-smoothing: antialiased;
|
|
221
|
+
-moz-osx-font-smoothing: grayscale;
|
|
222
|
+
-webkit-text-size-adjust: 100%;
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
h1 {
|
|
226
|
+
font-size: 3.2em;
|
|
227
|
+
line-height: 1.1;
|
|
228
|
+
}`;
|
|
229
|
+
await fs.writeFile(path.join(stylesDir, 'globals.css'), globalCss);
|
|
237
230
|
}
|
|
238
231
|
async function createPushChainIntegration(options) {
|
|
239
232
|
// Create providers directory
|
|
@@ -307,10 +300,6 @@ const PushChainProviders = ({ children }: { children: React.ReactNode }) => {
|
|
|
307
300
|
|
|
308
301
|
// Add more chains as needed:
|
|
309
302
|
// "eip155:1": ["https://mainnet.infura.io/v3/YOUR_PROJECT_ID"], // Ethereum Mainnet
|
|
310
|
-
// "eip155:137": ["https://polygon-rpc.com/"], // Polygon
|
|
311
|
-
// "eip155:42161": ["https://arb1.arbitrum.io/rpc"], // Arbitrum
|
|
312
|
-
// "eip155:10": ["https://mainnet.optimism.io"], // Optimism
|
|
313
|
-
// "eip155:8453": ["https://mainnet.base.org"], // Base
|
|
314
303
|
},
|
|
315
304
|
},
|
|
316
305
|
};
|
|
@@ -363,44 +352,42 @@ NEXT_PUBLIC_PUSHCHAIN_NETWORK=testnet
|
|
|
363
352
|
await fs.writeFile(path.join(options.targetDir, '.env.local'), envFile);
|
|
364
353
|
}
|
|
365
354
|
async function createESLintConfig(options) {
|
|
366
|
-
const
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
'./app/**/*.{ts,tsx}',
|
|
388
|
-
'./src/**/*.{ts,tsx}',
|
|
389
|
-
],
|
|
390
|
-
theme: {
|
|
391
|
-
extend: {},
|
|
355
|
+
const config = `import { dirname } from "path";
|
|
356
|
+
import { fileURLToPath } from "url";
|
|
357
|
+
import { FlatCompat } from "@eslint/eslintrc";
|
|
358
|
+
|
|
359
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
360
|
+
const __dirname = dirname(__filename);
|
|
361
|
+
|
|
362
|
+
const compat = new FlatCompat({
|
|
363
|
+
baseDirectory: __dirname,
|
|
364
|
+
});
|
|
365
|
+
|
|
366
|
+
const eslintConfig = [
|
|
367
|
+
...compat.extends("next/core-web-vitals", "next/typescript"),
|
|
368
|
+
{
|
|
369
|
+
ignores: [
|
|
370
|
+
"node_modules/**",
|
|
371
|
+
".next/**",
|
|
372
|
+
"out/**",
|
|
373
|
+
"build/**",
|
|
374
|
+
"next-env.d.ts",
|
|
375
|
+
],
|
|
392
376
|
},
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
377
|
+
];
|
|
378
|
+
|
|
379
|
+
export default eslintConfig;
|
|
380
|
+
`;
|
|
381
|
+
await fs.writeJSON(path.join(options.targetDir, 'eslint.config.mjs'), config);
|
|
382
|
+
}
|
|
383
|
+
async function createPostcssConfig(options) {
|
|
396
384
|
// PostCSS config
|
|
397
|
-
const postcssConfig = `
|
|
398
|
-
plugins:
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
await fs.writeFile(path.join(options.targetDir, 'postcss.config.
|
|
385
|
+
const postcssConfig = `const config = {
|
|
386
|
+
plugins: ["@tailwindcss/postcss"],
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
export default config;
|
|
390
|
+
`;
|
|
391
|
+
await fs.writeFile(path.join(options.targetDir, 'postcss.config.mjs'), postcssConfig);
|
|
404
392
|
}
|
|
405
|
-
// Removed shadcn config and components for Tailwind-only setup
|
|
406
393
|
//# sourceMappingURL=nextjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/templates/nextjs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,OAAuB;IAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE7D,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAEvC,qCAAqC;QACrC,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QAElC,0BAA0B;QAC1B,MAAM,uBAAuB,CAAC,OAAO,CAAC,CAAC;QAEvC,sCAAsC;QACtC,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAE1C,oCAAoC;QACpC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED,+CAA+C;QAC/C,MAAM,
|
|
1
|
+
{"version":3,"file":"nextjs.js","sourceRoot":"","sources":["../../src/templates/nextjs.ts"],"names":[],"mappings":"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"}
|
package/dist/templates/vite.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../../src/templates/vite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../../src/templates/vite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,wBAAsB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA0B1E;AAogBD,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC/E"}
|
package/dist/templates/vite.js
CHANGED
|
@@ -16,8 +16,6 @@ export async function createViteApp(options) {
|
|
|
16
16
|
if (options.eslint) {
|
|
17
17
|
await createESLintConfig(options);
|
|
18
18
|
}
|
|
19
|
-
// Create Tailwind config (Tailwind-only setup)
|
|
20
|
-
await createTailwindConfig(options);
|
|
21
19
|
spinner.succeed('Vite project structure created');
|
|
22
20
|
}
|
|
23
21
|
catch (error) {
|
|
@@ -26,6 +24,26 @@ export async function createViteApp(options) {
|
|
|
26
24
|
}
|
|
27
25
|
}
|
|
28
26
|
async function createVitePackageJson(options) {
|
|
27
|
+
const baseDevDeps = {
|
|
28
|
+
"@tailwindcss/vite": "^4.1.13",
|
|
29
|
+
"@types/react": "^19.1.10",
|
|
30
|
+
"@types/react-dom": "^19.1.7",
|
|
31
|
+
"@vitejs/plugin-react": "^5.0.0",
|
|
32
|
+
typescript: "^5.8.3",
|
|
33
|
+
vite: "^7.1.2",
|
|
34
|
+
tailwindcss: "^4.1.13",
|
|
35
|
+
};
|
|
36
|
+
const eslintDevDeps = {
|
|
37
|
+
"@eslint/js": "^9.33.0",
|
|
38
|
+
"eslint": "^9.33.0",
|
|
39
|
+
"typescript-eslint": "^8.39.1",
|
|
40
|
+
"eslint-plugin-react-hooks": "^5.2.0",
|
|
41
|
+
"eslint-plugin-react-refresh": "^0.4.20",
|
|
42
|
+
};
|
|
43
|
+
const devDependencies = {
|
|
44
|
+
...baseDevDeps,
|
|
45
|
+
...(options.eslint ? eslintDevDeps : {}),
|
|
46
|
+
};
|
|
29
47
|
const packageJson = {
|
|
30
48
|
name: options.projectName,
|
|
31
49
|
private: true,
|
|
@@ -34,24 +52,15 @@ async function createVitePackageJson(options) {
|
|
|
34
52
|
scripts: {
|
|
35
53
|
dev: "vite",
|
|
36
54
|
build: "tsc && vite build",
|
|
37
|
-
|
|
55
|
+
...(options.eslint && { lint: "eslint ." }),
|
|
38
56
|
preview: "vite preview"
|
|
39
57
|
},
|
|
40
58
|
dependencies: {
|
|
41
|
-
react: "^
|
|
42
|
-
"react-dom": "^
|
|
43
|
-
"@pushchain/ui-kit": "^1.1.
|
|
59
|
+
react: "^19.1.1",
|
|
60
|
+
"react-dom": "^19.1.1",
|
|
61
|
+
"@pushchain/ui-kit": "^1.1.34"
|
|
44
62
|
},
|
|
45
|
-
devDependencies
|
|
46
|
-
"@types/react": "^18.2.43",
|
|
47
|
-
"@types/react-dom": "^18.2.17",
|
|
48
|
-
"@vitejs/plugin-react": "^4.2.1",
|
|
49
|
-
typescript: "^5.2.2",
|
|
50
|
-
vite: "^5.0.8",
|
|
51
|
-
tailwindcss: "^3.3.0",
|
|
52
|
-
autoprefixer: "^10.4.16",
|
|
53
|
-
postcss: "^8.4.31"
|
|
54
|
-
}
|
|
63
|
+
devDependencies,
|
|
55
64
|
};
|
|
56
65
|
// Remove undefined values
|
|
57
66
|
Object.keys(packageJson.scripts).forEach(key => {
|
|
@@ -67,10 +76,11 @@ async function createViteConfig(options) {
|
|
|
67
76
|
const viteConfig = `import { defineConfig } from 'vite'
|
|
68
77
|
import react from '@vitejs/plugin-react'
|
|
69
78
|
import path from 'path'
|
|
79
|
+
import tailwindcss from '@tailwindcss/vite'
|
|
70
80
|
|
|
71
81
|
// https://vitejs.dev/config/
|
|
72
82
|
export default defineConfig({
|
|
73
|
-
plugins: [react()],
|
|
83
|
+
plugins: [react(), tailwindcss()],
|
|
74
84
|
resolve: {
|
|
75
85
|
alias: {
|
|
76
86
|
"@": path.resolve(__dirname, "./src"),
|
|
@@ -80,52 +90,70 @@ export default defineConfig({
|
|
|
80
90
|
await fs.writeFile(path.join(options.targetDir, 'vite.config.ts'), viteConfig);
|
|
81
91
|
// TypeScript config
|
|
82
92
|
const tsConfig = {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
skipLibCheck: true,
|
|
89
|
-
moduleResolution: "bundler",
|
|
90
|
-
allowImportingTsExtensions: true,
|
|
91
|
-
resolveJsonModule: true,
|
|
92
|
-
isolatedModules: true,
|
|
93
|
-
noEmit: true,
|
|
94
|
-
jsx: "react-jsx",
|
|
95
|
-
strict: true,
|
|
96
|
-
noUnusedLocals: true,
|
|
97
|
-
noUnusedParameters: true,
|
|
98
|
-
noFallthroughCasesInSwitch: true,
|
|
99
|
-
baseUrl: ".",
|
|
100
|
-
paths: {
|
|
101
|
-
"@/*": ["./src/*"]
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
include: ["src"],
|
|
105
|
-
references: [{ "path": "./tsconfig.node.json" }]
|
|
93
|
+
"files": [],
|
|
94
|
+
"references": [
|
|
95
|
+
{ "path": "./tsconfig.app.json" },
|
|
96
|
+
{ "path": "./tsconfig.node.json" }
|
|
97
|
+
]
|
|
106
98
|
};
|
|
107
99
|
await fs.writeJSON(path.join(options.targetDir, 'tsconfig.json'), tsConfig, { spaces: 2 });
|
|
100
|
+
// App TypeScript config
|
|
101
|
+
const tsAppConfig = {
|
|
102
|
+
"compilerOptions": {
|
|
103
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
|
104
|
+
"target": "ES2022",
|
|
105
|
+
"useDefineForClassFields": true,
|
|
106
|
+
"lib": ["ES2022", "DOM", "DOM.Iterable"],
|
|
107
|
+
"module": "ESNext",
|
|
108
|
+
"skipLibCheck": true,
|
|
109
|
+
/* Bundler mode */
|
|
110
|
+
"moduleResolution": "bundler",
|
|
111
|
+
"allowImportingTsExtensions": true,
|
|
112
|
+
"verbatimModuleSyntax": true,
|
|
113
|
+
"moduleDetection": "force",
|
|
114
|
+
"noEmit": true,
|
|
115
|
+
"jsx": "react-jsx",
|
|
116
|
+
/* Linting */
|
|
117
|
+
"strict": true,
|
|
118
|
+
"noUnusedLocals": true,
|
|
119
|
+
"noUnusedParameters": true,
|
|
120
|
+
"erasableSyntaxOnly": true,
|
|
121
|
+
"noFallthroughCasesInSwitch": true,
|
|
122
|
+
"noUncheckedSideEffectImports": true
|
|
123
|
+
},
|
|
124
|
+
"include": ["src"]
|
|
125
|
+
};
|
|
126
|
+
await fs.writeJSON(path.join(options.targetDir, 'tsconfig.app.json'), tsAppConfig, { spaces: 2 });
|
|
108
127
|
// Node TypeScript config
|
|
109
128
|
const tsNodeConfig = {
|
|
110
|
-
compilerOptions: {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
129
|
+
"compilerOptions": {
|
|
130
|
+
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
|
131
|
+
"target": "ES2023",
|
|
132
|
+
"lib": ["ES2023"],
|
|
133
|
+
"module": "ESNext",
|
|
134
|
+
"skipLibCheck": true,
|
|
135
|
+
/* Bundler mode */
|
|
136
|
+
"moduleResolution": "bundler",
|
|
137
|
+
"allowImportingTsExtensions": true,
|
|
138
|
+
"verbatimModuleSyntax": true,
|
|
139
|
+
"moduleDetection": "force",
|
|
140
|
+
"noEmit": true,
|
|
141
|
+
/* Linting */
|
|
142
|
+
"strict": true,
|
|
143
|
+
"noUnusedLocals": true,
|
|
144
|
+
"noUnusedParameters": true,
|
|
145
|
+
"erasableSyntaxOnly": true,
|
|
146
|
+
"noFallthroughCasesInSwitch": true,
|
|
147
|
+
"noUncheckedSideEffectImports": true
|
|
116
148
|
},
|
|
117
|
-
include: ["vite.config.ts"]
|
|
149
|
+
"include": ["vite.config.ts"]
|
|
118
150
|
};
|
|
119
151
|
await fs.writeJSON(path.join(options.targetDir, 'tsconfig.node.json'), tsNodeConfig, { spaces: 2 });
|
|
120
152
|
}
|
|
121
153
|
async function createViteSourceFiles(options) {
|
|
122
154
|
// Create src directory structure
|
|
123
155
|
const srcDir = path.join(options.targetDir, 'src');
|
|
124
|
-
const componentsDir = path.join(srcDir, 'components');
|
|
125
|
-
const libDir = path.join(srcDir, 'lib');
|
|
126
156
|
await fs.ensureDir(srcDir);
|
|
127
|
-
await fs.ensureDir(componentsDir);
|
|
128
|
-
await fs.ensureDir(libDir);
|
|
129
157
|
// Create index.html
|
|
130
158
|
const indexHtml = `<!doctype html>
|
|
131
159
|
<html lang="en">
|
|
@@ -162,64 +190,46 @@ import { PushUniversalAccountButton, usePushWalletContext } from '@pushchain/ui-
|
|
|
162
190
|
|
|
163
191
|
function App() {
|
|
164
192
|
const { universalAccount } = usePushWalletContext();
|
|
165
|
-
|
|
166
|
-
console.log("universalAccount", universalAccount);
|
|
167
193
|
|
|
168
194
|
return (
|
|
169
|
-
<div
|
|
170
|
-
<div
|
|
171
|
-
<div
|
|
172
|
-
<h1
|
|
173
|
-
Welcome to
|
|
195
|
+
<div className="min-h-screen p-8">
|
|
196
|
+
<div className="max-w-[800px] mx-auto">
|
|
197
|
+
<div className="text-center mb-8">
|
|
198
|
+
<h1 className="text-[2.5rem] font-bold mb-4">
|
|
199
|
+
Welcome to my-push-app
|
|
174
200
|
</h1>
|
|
175
|
-
<p
|
|
201
|
+
<p className="text-[1.2rem] text-gray-400 mb-8">
|
|
176
202
|
Your Push Chain application is ready to go!
|
|
177
203
|
</p>
|
|
178
204
|
</div>
|
|
179
205
|
|
|
180
|
-
<div
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
}}>
|
|
188
|
-
<h2 style={{ marginBottom: '1rem' }}>Push Chain Integration</h2>
|
|
189
|
-
<div style={{ marginBottom: '1rem' }}>
|
|
190
|
-
<span style={{
|
|
191
|
-
padding: '4px 8px',
|
|
192
|
-
borderRadius: '4px',
|
|
193
|
-
backgroundColor: universalAccount ? '#22c55e' : '#6b7280',
|
|
194
|
-
color: 'white',
|
|
195
|
-
fontSize: '12px'
|
|
196
|
-
}}>
|
|
206
|
+
<div className="max-w-[600px] mx-auto p-8 border border-gray-300 rounded-lg text-center">
|
|
207
|
+
<h2 className="mb-4">Push Chain Integration</h2>
|
|
208
|
+
|
|
209
|
+
<div className="mb-4">
|
|
210
|
+
<span
|
|
211
|
+
className={"px-2 py-1 rounded text-white text-[12px] " + (universalAccount ? 'bg-green-500' : 'bg-gray-500')}
|
|
212
|
+
>
|
|
197
213
|
{universalAccount ? "Connected" : "Not Connected"}
|
|
198
214
|
</span>
|
|
199
215
|
</div>
|
|
200
216
|
|
|
201
|
-
<div
|
|
217
|
+
<div className="mb-8 justify-items-center">
|
|
202
218
|
<PushUniversalAccountButton />
|
|
203
219
|
</div>
|
|
204
220
|
|
|
205
221
|
{universalAccount && (
|
|
206
|
-
<div
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
backgroundColor: '#f5f5f5',
|
|
210
|
-
borderRadius: '6px',
|
|
211
|
-
textAlign: 'left'
|
|
212
|
-
}}>
|
|
213
|
-
<h3 style={{ fontWeight: 'bold', marginBottom: '0.5rem' }}>Account Details:</h3>
|
|
214
|
-
<pre style={{ fontSize: '0.8rem', overflow: 'auto' }}>
|
|
222
|
+
<div className="mt-8 p-4 bg-gray-100 text-neutral-800 rounded-md text-left">
|
|
223
|
+
<h3 className="font-bold mb-2">Account Details:</h3>
|
|
224
|
+
<pre className="text-[0.8rem] overflow-auto">
|
|
215
225
|
{JSON.stringify(universalAccount, null, 2)}
|
|
216
226
|
</pre>
|
|
217
227
|
</div>
|
|
218
228
|
)}
|
|
219
229
|
|
|
220
|
-
<div
|
|
230
|
+
<div className="text-[0.9rem] text-gray-400 mt-8 text-left">
|
|
221
231
|
<p><strong>Next steps:</strong></p>
|
|
222
|
-
<ul
|
|
232
|
+
<ul className="my-2 pl-6 list-disc">
|
|
223
233
|
<li>Configure your Push Chain settings in providers/PushChainProviders.tsx</li>
|
|
224
234
|
<li>Customize the app metadata with your branding</li>
|
|
225
235
|
<li>Add your chain configuration and RPC URLs</li>
|
|
@@ -279,9 +289,7 @@ export default App`;
|
|
|
279
289
|
}`;
|
|
280
290
|
await fs.writeFile(path.join(srcDir, 'App.css'), appCss);
|
|
281
291
|
// Create index.css (Tailwind directives only)
|
|
282
|
-
const indexCss = `@
|
|
283
|
-
@tailwind components;
|
|
284
|
-
@tailwind utilities;
|
|
292
|
+
const indexCss = `@import "tailwindcss";
|
|
285
293
|
|
|
286
294
|
:root {
|
|
287
295
|
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
|
@@ -428,8 +436,6 @@ const PushChainProviders = ({ children }: { children: React.ReactNode }) => {
|
|
|
428
436
|
|
|
429
437
|
// Add more chains as needed:
|
|
430
438
|
// "eip155:1": ["https://mainnet.infura.io/v3/YOUR_PROJECT_ID"], // Ethereum Mainnet
|
|
431
|
-
// "eip155:137": ["https://polygon-rpc.com/"], // Polygon
|
|
432
|
-
// "eip155:42161": ["https://arb1.arbitrum.io/rpc"], // Arbitrum
|
|
433
439
|
},
|
|
434
440
|
},
|
|
435
441
|
};
|
|
@@ -476,309 +482,33 @@ VITE_PUSHCHAIN_NETWORK=testnet
|
|
|
476
482
|
# VITE_APP_VERSION=1.0.0`;
|
|
477
483
|
await fs.writeFile(path.join(options.targetDir, '.env'), envFile);
|
|
478
484
|
}
|
|
479
|
-
async function createESLintConfig(options) {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
rules: {
|
|
492
|
-
'react-refresh/only-export-components': [
|
|
493
|
-
'warn',
|
|
494
|
-
{ allowConstantExport: true },
|
|
495
|
-
],
|
|
496
|
-
},
|
|
497
|
-
};
|
|
498
|
-
await fs.writeJSON(path.join(options.targetDir, '.eslintrc.json'), eslintConfig, { spaces: 2 });
|
|
499
|
-
}
|
|
500
|
-
async function createTailwindConfig(options) {
|
|
501
|
-
const tailwindConfig = `/** @type {import('tailwindcss').Config} */
|
|
502
|
-
export default {
|
|
503
|
-
darkMode: ["class"],
|
|
504
|
-
content: [
|
|
505
|
-
"./index.html",
|
|
506
|
-
"./src/**/*.{js,ts,jsx,tsx}",
|
|
507
|
-
],
|
|
508
|
-
theme: {
|
|
509
|
-
container: {
|
|
510
|
-
center: true,
|
|
511
|
-
padding: "2rem",
|
|
512
|
-
screens: {
|
|
513
|
-
"2xl": "1400px",
|
|
514
|
-
},
|
|
515
|
-
},
|
|
516
|
-
extend: {
|
|
517
|
-
colors: {
|
|
518
|
-
border: "hsl(var(--border))",
|
|
519
|
-
input: "hsl(var(--input))",
|
|
520
|
-
ring: "hsl(var(--ring))",
|
|
521
|
-
background: "hsl(var(--background))",
|
|
522
|
-
foreground: "hsl(var(--foreground))",
|
|
523
|
-
primary: {
|
|
524
|
-
DEFAULT: "hsl(var(--primary))",
|
|
525
|
-
foreground: "hsl(var(--primary-foreground))",
|
|
526
|
-
},
|
|
527
|
-
secondary: {
|
|
528
|
-
DEFAULT: "hsl(var(--secondary))",
|
|
529
|
-
foreground: "hsl(var(--secondary-foreground))",
|
|
530
|
-
},
|
|
531
|
-
destructive: {
|
|
532
|
-
DEFAULT: "hsl(var(--destructive))",
|
|
533
|
-
foreground: "hsl(var(--destructive-foreground))",
|
|
534
|
-
},
|
|
535
|
-
muted: {
|
|
536
|
-
DEFAULT: "hsl(var(--muted))",
|
|
537
|
-
foreground: "hsl(var(--muted-foreground))",
|
|
538
|
-
},
|
|
539
|
-
accent: {
|
|
540
|
-
DEFAULT: "hsl(var(--accent))",
|
|
541
|
-
foreground: "hsl(var(--accent-foreground))",
|
|
542
|
-
},
|
|
543
|
-
popover: {
|
|
544
|
-
DEFAULT: "hsl(var(--popover))",
|
|
545
|
-
foreground: "hsl(var(--popover-foreground))",
|
|
546
|
-
},
|
|
547
|
-
card: {
|
|
548
|
-
DEFAULT: "hsl(var(--card))",
|
|
549
|
-
foreground: "hsl(var(--card-foreground))",
|
|
550
|
-
},
|
|
551
|
-
},
|
|
552
|
-
borderRadius: {
|
|
553
|
-
lg: "var(--radius)",
|
|
554
|
-
md: "calc(var(--radius) - 2px)",
|
|
555
|
-
sm: "calc(var(--radius) - 4px)",
|
|
556
|
-
},
|
|
557
|
-
keyframes: {
|
|
558
|
-
"accordion-down": {
|
|
559
|
-
from: { height: 0 },
|
|
560
|
-
to: { height: "var(--radix-accordion-content-height)" },
|
|
561
|
-
},
|
|
562
|
-
"accordion-up": {
|
|
563
|
-
from: { height: "var(--radix-accordion-content-height)" },
|
|
564
|
-
to: { height: 0 },
|
|
565
|
-
},
|
|
566
|
-
},
|
|
567
|
-
animation: {
|
|
568
|
-
"accordion-down": "accordion-down 0.2s ease-out",
|
|
569
|
-
"accordion-up": "accordion-up 0.2s ease-out",
|
|
570
|
-
},
|
|
571
|
-
},
|
|
572
|
-
},
|
|
573
|
-
plugins: [require("tailwindcss-animate")],
|
|
574
|
-
}`;
|
|
575
|
-
await fs.writeFile(path.join(options.targetDir, 'tailwind.config.js'), tailwindConfig);
|
|
576
|
-
// PostCSS config
|
|
577
|
-
const postcssConfig = `export default {
|
|
578
|
-
plugins: {
|
|
579
|
-
tailwindcss: {},
|
|
580
|
-
autoprefixer: {},
|
|
581
|
-
},
|
|
582
|
-
}`;
|
|
583
|
-
await fs.writeFile(path.join(options.targetDir, 'postcss.config.js'), postcssConfig);
|
|
584
|
-
}
|
|
585
|
-
async function createShadcnConfig(options) {
|
|
586
|
-
const componentsJson = {
|
|
587
|
-
"$schema": "https://ui.shadcn.com/schema.json",
|
|
588
|
-
"style": "default",
|
|
589
|
-
"rsc": false,
|
|
590
|
-
"tsx": true,
|
|
591
|
-
"tailwind": {
|
|
592
|
-
"config": "tailwind.config.js",
|
|
593
|
-
"css": "src/index.css",
|
|
594
|
-
"baseColor": "slate",
|
|
595
|
-
"cssVariables": true
|
|
596
|
-
},
|
|
597
|
-
"aliases": {
|
|
598
|
-
"components": "@/components",
|
|
599
|
-
"utils": "@/lib/utils"
|
|
600
|
-
}
|
|
601
|
-
};
|
|
602
|
-
await fs.writeJSON(path.join(options.targetDir, 'components.json'), componentsJson, { spaces: 2 });
|
|
603
|
-
// Create basic shadcn components (same as Next.js version)
|
|
604
|
-
const componentsDir = path.join(options.targetDir, 'src', 'components', 'ui');
|
|
605
|
-
await fs.ensureDir(componentsDir);
|
|
606
|
-
// Button component (same as Next.js)
|
|
607
|
-
const buttonComponent = `import * as React from "react"
|
|
608
|
-
import { Slot } from "@radix-ui/react-slot"
|
|
609
|
-
import { cva, type VariantProps } from "class-variance-authority"
|
|
610
|
-
|
|
611
|
-
import { cn } from "@/lib/utils"
|
|
612
|
-
|
|
613
|
-
const buttonVariants = cva(
|
|
614
|
-
"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
|
|
485
|
+
export async function createESLintConfig(options) {
|
|
486
|
+
if (!options.eslint)
|
|
487
|
+
return;
|
|
488
|
+
const config = `import js from '@eslint/js'
|
|
489
|
+
import globals from 'globals'
|
|
490
|
+
import reactHooks from 'eslint-plugin-react-hooks'
|
|
491
|
+
import reactRefresh from 'eslint-plugin-react-refresh'
|
|
492
|
+
import tseslint from 'typescript-eslint'
|
|
493
|
+
import { defineConfig, globalIgnores } from 'eslint/config'
|
|
494
|
+
|
|
495
|
+
export default defineConfig([
|
|
496
|
+
globalIgnores(['dist']),
|
|
615
497
|
{
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
link: "text-primary underline-offset-4 hover:underline",
|
|
627
|
-
},
|
|
628
|
-
size: {
|
|
629
|
-
default: "h-10 px-4 py-2",
|
|
630
|
-
sm: "h-9 rounded-md px-3",
|
|
631
|
-
lg: "h-11 rounded-md px-8",
|
|
632
|
-
icon: "h-10 w-10",
|
|
633
|
-
},
|
|
634
|
-
},
|
|
635
|
-
defaultVariants: {
|
|
636
|
-
variant: "default",
|
|
637
|
-
size: "default",
|
|
498
|
+
files: ['**/*.{ts,tsx}'],
|
|
499
|
+
extends: [
|
|
500
|
+
js.configs.recommended,
|
|
501
|
+
tseslint.configs.recommended,
|
|
502
|
+
reactHooks.configs['recommended-latest'],
|
|
503
|
+
reactRefresh.configs.vite,
|
|
504
|
+
],
|
|
505
|
+
languageOptions: {
|
|
506
|
+
ecmaVersion: 2020,
|
|
507
|
+
globals: globals.browser,
|
|
638
508
|
},
|
|
639
|
-
}
|
|
640
|
-
)
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
644
|
-
VariantProps<typeof buttonVariants> {
|
|
645
|
-
asChild?: boolean
|
|
646
|
-
}
|
|
647
|
-
|
|
648
|
-
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
649
|
-
({ className, variant, size, asChild = false, ...props }, ref) => {
|
|
650
|
-
const Comp = asChild ? Slot : "button"
|
|
651
|
-
return (
|
|
652
|
-
<Comp
|
|
653
|
-
className={cn(buttonVariants({ variant, size, className }))}
|
|
654
|
-
ref={ref}
|
|
655
|
-
{...props}
|
|
656
|
-
/>
|
|
657
|
-
)
|
|
658
|
-
}
|
|
659
|
-
)
|
|
660
|
-
Button.displayName = "Button"
|
|
661
|
-
|
|
662
|
-
export { Button, buttonVariants }`;
|
|
663
|
-
await fs.writeFile(path.join(componentsDir, 'button.tsx'), buttonComponent);
|
|
664
|
-
// Card and Badge components (same as Next.js)
|
|
665
|
-
const cardComponent = `import * as React from "react"
|
|
666
|
-
|
|
667
|
-
import { cn } from "@/lib/utils"
|
|
668
|
-
|
|
669
|
-
const Card = React.forwardRef<
|
|
670
|
-
HTMLDivElement,
|
|
671
|
-
React.HTMLAttributes<HTMLDivElement>
|
|
672
|
-
>(({ className, ...props }, ref) => (
|
|
673
|
-
<div
|
|
674
|
-
ref={ref}
|
|
675
|
-
className={cn(
|
|
676
|
-
"rounded-lg border bg-card text-card-foreground shadow-sm",
|
|
677
|
-
className
|
|
678
|
-
)}
|
|
679
|
-
{...props}
|
|
680
|
-
/>
|
|
681
|
-
))
|
|
682
|
-
Card.displayName = "Card"
|
|
683
|
-
|
|
684
|
-
const CardHeader = React.forwardRef<
|
|
685
|
-
HTMLDivElement,
|
|
686
|
-
React.HTMLAttributes<HTMLDivElement>
|
|
687
|
-
>(({ className, ...props }, ref) => (
|
|
688
|
-
<div ref={ref} className={cn("flex flex-col space-y-1.5 p-6", className)} {...props} />
|
|
689
|
-
))
|
|
690
|
-
CardHeader.displayName = "CardHeader"
|
|
691
|
-
|
|
692
|
-
const CardTitle = React.forwardRef<
|
|
693
|
-
HTMLParagraphElement,
|
|
694
|
-
React.HTMLAttributes<HTMLHeadingElement>
|
|
695
|
-
>(({ className, ...props }, ref) => (
|
|
696
|
-
<h3
|
|
697
|
-
ref={ref}
|
|
698
|
-
className={cn(
|
|
699
|
-
"text-2xl font-semibold leading-none tracking-tight",
|
|
700
|
-
className
|
|
701
|
-
)}
|
|
702
|
-
{...props}
|
|
703
|
-
/>
|
|
704
|
-
))
|
|
705
|
-
CardTitle.displayName = "CardTitle"
|
|
706
|
-
|
|
707
|
-
const CardDescription = React.forwardRef<
|
|
708
|
-
HTMLParagraphElement,
|
|
709
|
-
React.HTMLAttributes<HTMLParagraphElement>
|
|
710
|
-
>(({ className, ...props }, ref) => (
|
|
711
|
-
<p
|
|
712
|
-
ref={ref}
|
|
713
|
-
className={cn("text-sm text-muted-foreground", className)}
|
|
714
|
-
{...props}
|
|
715
|
-
/>
|
|
716
|
-
))
|
|
717
|
-
CardDescription.displayName = "CardDescription"
|
|
718
|
-
|
|
719
|
-
const CardContent = React.forwardRef<
|
|
720
|
-
HTMLDivElement,
|
|
721
|
-
React.HTMLAttributes<HTMLDivElement>
|
|
722
|
-
>(({ className, ...props }, ref) => (
|
|
723
|
-
<div ref={ref} className={cn("p-6 pt-0", className)} {...props} />
|
|
724
|
-
))
|
|
725
|
-
CardContent.displayName = "CardContent"
|
|
726
|
-
|
|
727
|
-
const CardFooter = React.forwardRef<
|
|
728
|
-
HTMLDivElement,
|
|
729
|
-
React.HTMLAttributes<HTMLDivElement>
|
|
730
|
-
>(({ className, ...props }, ref) => (
|
|
731
|
-
<div ref={ref} className={cn("flex items-center p-6 pt-0", className)} {...props} />
|
|
732
|
-
))
|
|
733
|
-
CardFooter.displayName = "CardFooter"
|
|
734
|
-
|
|
735
|
-
export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }`;
|
|
736
|
-
await fs.writeFile(path.join(componentsDir, 'card.tsx'), cardComponent);
|
|
737
|
-
const badgeComponent = `import * as React from "react"
|
|
738
|
-
import { cva, type VariantProps } from "class-variance-authority"
|
|
739
|
-
|
|
740
|
-
import { cn } from "@/lib/utils"
|
|
741
|
-
|
|
742
|
-
const badgeVariants = cva(
|
|
743
|
-
"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
|
|
744
|
-
{
|
|
745
|
-
variants: {
|
|
746
|
-
variant: {
|
|
747
|
-
default:
|
|
748
|
-
"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
|
|
749
|
-
secondary:
|
|
750
|
-
"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
|
751
|
-
destructive:
|
|
752
|
-
"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
|
|
753
|
-
outline: "text-foreground",
|
|
754
|
-
},
|
|
755
|
-
},
|
|
756
|
-
defaultVariants: {
|
|
757
|
-
variant: "default",
|
|
758
|
-
},
|
|
759
|
-
}
|
|
760
|
-
)
|
|
761
|
-
|
|
762
|
-
export interface BadgeProps
|
|
763
|
-
extends React.HTMLAttributes<HTMLDivElement>,
|
|
764
|
-
VariantProps<typeof badgeVariants> {}
|
|
765
|
-
|
|
766
|
-
function Badge({ className, variant, ...props }: BadgeProps) {
|
|
767
|
-
return (
|
|
768
|
-
<div className={cn(badgeVariants({ variant }), className)} {...props} />
|
|
769
|
-
)
|
|
770
|
-
}
|
|
771
|
-
|
|
772
|
-
export { Badge, badgeVariants }`;
|
|
773
|
-
await fs.writeFile(path.join(componentsDir, 'badge.tsx'), badgeComponent);
|
|
774
|
-
// Utils file (same as Next.js)
|
|
775
|
-
const libDir = path.join(options.targetDir, 'src', 'lib');
|
|
776
|
-
const utilsFile = `import { type ClassValue, clsx } from "clsx"
|
|
777
|
-
import { twMerge } from "tailwind-merge"
|
|
778
|
-
|
|
779
|
-
export function cn(...inputs: ClassValue[]) {
|
|
780
|
-
return twMerge(clsx(inputs))
|
|
781
|
-
}`;
|
|
782
|
-
await fs.writeFile(path.join(libDir, 'utils.ts'), utilsFile);
|
|
509
|
+
},
|
|
510
|
+
])
|
|
511
|
+
`;
|
|
512
|
+
await fs.writeFile(path.join(options.targetDir, 'eslint.config.js'), config);
|
|
783
513
|
}
|
|
784
514
|
//# sourceMappingURL=vite.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../../src/templates/vite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,UAAU,CAAC;AAC1B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,GAAG,MAAM,KAAK,CAAC;AAGtB,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAuB;IACzD,MAAM,OAAO,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE1D,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAErC,kCAAkC;QAClC,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAEhC,0BAA0B;QAC1B,MAAM,qBAAqB,CAAC,OAAO,CAAC,CAAC;QAErC,sCAAsC;QACtC,MAAM,0BAA0B,CAAC,OAAO,CAAC,CAAC;QAE1C,oCAAoC;QACpC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpC,CAAC;QAED
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../../src/templates/vite.ts"],"names":[],"mappings":"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"}
|