mirror of
https://github.com/hanzoai/templates.git
synced 2026-10-30 18:20:05 +00:00
361 lines
7.7 KiB
Bash
Executable File
361 lines
7.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
echo "🔥 Setting up ALL templates with Next.js + Vite"
|
|
echo "================================================"
|
|
|
|
# Setup Next.js templates
|
|
echo "📦 Setting up Next.js templates..."
|
|
for dir in next/*; do
|
|
if [ -d "$dir" ]; then
|
|
echo "Setting up $dir..."
|
|
cd "$dir"
|
|
|
|
# Create Next.js config files
|
|
cat > next.config.js << 'EOF'
|
|
/** @type {import('next').NextConfig} */
|
|
const nextConfig = {
|
|
reactStrictMode: true,
|
|
swcMinify: true,
|
|
experimental: {
|
|
optimizeFonts: true,
|
|
},
|
|
}
|
|
|
|
module.exports = nextConfig
|
|
EOF
|
|
|
|
cat > tsconfig.json << 'EOF'
|
|
{
|
|
"compilerOptions": {
|
|
"target": "ES2017",
|
|
"lib": ["dom", "dom.iterable", "esnext"],
|
|
"allowJs": true,
|
|
"skipLibCheck": true,
|
|
"strict": true,
|
|
"forceConsistentCasingInFileNames": true,
|
|
"noEmit": true,
|
|
"esModuleInterop": true,
|
|
"module": "esnext",
|
|
"moduleResolution": "node",
|
|
"resolveJsonModule": true,
|
|
"isolatedModules": true,
|
|
"jsx": "preserve",
|
|
"incremental": true,
|
|
"plugins": [{"name": "next"}],
|
|
"paths": {"@/*": ["./*"]}
|
|
},
|
|
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
|
"exclude": ["node_modules"]
|
|
}
|
|
EOF
|
|
|
|
cat > tailwind.config.js << 'EOF'
|
|
/** @type {import('tailwindcss').Config} */
|
|
module.exports = {
|
|
darkMode: ["class"],
|
|
content: [
|
|
"./pages/**/*.{ts,tsx}",
|
|
"./components/**/*.{ts,tsx}",
|
|
"./app/**/*.{ts,tsx}",
|
|
],
|
|
theme: {
|
|
extend: {
|
|
animation: {
|
|
'gradient': 'gradient 15s ease infinite',
|
|
'float': 'float 6s ease-in-out infinite',
|
|
'pulse-slow': 'pulse 4s cubic-bezier(0.4, 0, 0.6, 1) infinite',
|
|
},
|
|
keyframes: {
|
|
gradient: {
|
|
'0%, 100%': {
|
|
'background-size': '200% 200%',
|
|
'background-position': 'left center'
|
|
},
|
|
'50%': {
|
|
'background-size': '200% 200%',
|
|
'background-position': 'right center'
|
|
}
|
|
},
|
|
float: {
|
|
'0%, 100%': { transform: 'translateY(0)' },
|
|
'50%': { transform: 'translateY(-20px)' },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
plugins: [],
|
|
}
|
|
EOF
|
|
|
|
cat > postcss.config.js << 'EOF'
|
|
module.exports = {
|
|
plugins: {
|
|
tailwindcss: {},
|
|
autoprefixer: {},
|
|
},
|
|
}
|
|
EOF
|
|
|
|
# Create app structure
|
|
mkdir -p app components lib public
|
|
|
|
cat > app/globals.css << 'EOF'
|
|
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
@layer base {
|
|
:root {
|
|
--background: 0 0% 100%;
|
|
--foreground: 222.2 84% 4.9%;
|
|
}
|
|
|
|
.dark {
|
|
--background: 222.2 84% 4.9%;
|
|
--foreground: 210 40% 98%;
|
|
}
|
|
}
|
|
|
|
@keyframes gradient {
|
|
0%, 100% {
|
|
background-size: 200% 200%;
|
|
background-position: left center;
|
|
}
|
|
50% {
|
|
background-size: 200% 200%;
|
|
background-position: right center;
|
|
}
|
|
}
|
|
|
|
.animate-gradient {
|
|
background-size: 200% 200%;
|
|
animation: gradient 15s ease infinite;
|
|
}
|
|
EOF
|
|
|
|
cat > app/layout.tsx << 'EOF'
|
|
import type { Metadata } from 'next'
|
|
import { Inter } from 'next/font/google'
|
|
import './globals.css'
|
|
|
|
const inter = Inter({ subsets: ['latin'] })
|
|
|
|
export const metadata: Metadata = {
|
|
title: 'Hanzo Template',
|
|
description: 'Built with Next.js and @hanzo/ui',
|
|
}
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode
|
|
}) {
|
|
return (
|
|
<html lang="en">
|
|
<body className={inter.className}>
|
|
{children}
|
|
</body>
|
|
</html>
|
|
)
|
|
}
|
|
EOF
|
|
|
|
cd ../..
|
|
fi
|
|
done
|
|
|
|
# Setup Vite templates
|
|
echo "⚡ Setting up Vite templates..."
|
|
for dir in vite/*; do
|
|
if [ -d "$dir" ]; then
|
|
echo "Setting up $dir..."
|
|
cd "$dir"
|
|
|
|
# Create Vite config files
|
|
cat > vite.config.ts << 'EOF'
|
|
import { defineConfig } from 'vite'
|
|
import react from '@vitejs/plugin-react'
|
|
|
|
export default defineConfig({
|
|
plugins: [react()],
|
|
server: {
|
|
host: true,
|
|
port: 5173,
|
|
},
|
|
build: {
|
|
outDir: 'dist',
|
|
sourcemap: true,
|
|
},
|
|
})
|
|
EOF
|
|
|
|
cat > tsconfig.json << 'EOF'
|
|
{
|
|
"compilerOptions": {
|
|
"target": "ES2020",
|
|
"useDefineForClassFields": true,
|
|
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
|
"module": "ESNext",
|
|
"skipLibCheck": true,
|
|
"moduleResolution": "bundler",
|
|
"allowImportingTsExtensions": true,
|
|
"resolveJsonModule": true,
|
|
"isolatedModules": true,
|
|
"noEmit": true,
|
|
"jsx": "react-jsx",
|
|
"strict": true,
|
|
"noUnusedLocals": true,
|
|
"noUnusedParameters": true,
|
|
"noFallthroughCasesInSwitch": true,
|
|
"paths": {
|
|
"@/*": ["./src/*"]
|
|
}
|
|
},
|
|
"include": ["src"],
|
|
"references": [{ "path": "./tsconfig.node.json" }]
|
|
}
|
|
EOF
|
|
|
|
cat > tsconfig.node.json << 'EOF'
|
|
{
|
|
"compilerOptions": {
|
|
"composite": true,
|
|
"skipLibCheck": true,
|
|
"module": "ESNext",
|
|
"moduleResolution": "bundler",
|
|
"allowSyntheticDefaultImports": true
|
|
},
|
|
"include": ["vite.config.ts"]
|
|
}
|
|
EOF
|
|
|
|
cat > tailwind.config.js << 'EOF'
|
|
/** @type {import('tailwindcss').Config} */
|
|
export default {
|
|
darkMode: ["class"],
|
|
content: [
|
|
"./index.html",
|
|
"./src/**/*.{js,ts,jsx,tsx}",
|
|
],
|
|
theme: {
|
|
extend: {
|
|
animation: {
|
|
'gradient': 'gradient 15s ease infinite',
|
|
'float': 'float 6s ease-in-out infinite',
|
|
},
|
|
keyframes: {
|
|
gradient: {
|
|
'0%, 100%': {
|
|
'background-size': '200% 200%',
|
|
'background-position': 'left center'
|
|
},
|
|
'50%': {
|
|
'background-size': '200% 200%',
|
|
'background-position': 'right center'
|
|
}
|
|
},
|
|
float: {
|
|
'0%, 100%': { transform: 'translateY(0)' },
|
|
'50%': { transform: 'translateY(-20px)' },
|
|
},
|
|
},
|
|
},
|
|
},
|
|
plugins: [],
|
|
}
|
|
EOF
|
|
|
|
cat > postcss.config.js << 'EOF'
|
|
export default {
|
|
plugins: {
|
|
tailwindcss: {},
|
|
autoprefixer: {},
|
|
},
|
|
}
|
|
EOF
|
|
|
|
# Create src structure
|
|
mkdir -p src/components src/lib public
|
|
|
|
cat > index.html << 'EOF'
|
|
<!doctype html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Hanzo Vite Template</title>
|
|
</head>
|
|
<body>
|
|
<div id="root"></div>
|
|
<script type="module" src="/src/main.tsx"></script>
|
|
</body>
|
|
</html>
|
|
EOF
|
|
|
|
cat > src/index.css << 'EOF'
|
|
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
@layer base {
|
|
:root {
|
|
--background: 0 0% 100%;
|
|
--foreground: 222.2 84% 4.9%;
|
|
}
|
|
|
|
.dark {
|
|
--background: 222.2 84% 4.9%;
|
|
--foreground: 210 40% 98%;
|
|
}
|
|
}
|
|
EOF
|
|
|
|
cat > src/main.tsx << 'EOF'
|
|
import React from 'react'
|
|
import ReactDOM from 'react-dom/client'
|
|
import App from './App'
|
|
import './index.css'
|
|
|
|
ReactDOM.createRoot(document.getElementById('root')!).render(
|
|
<React.StrictMode>
|
|
<App />
|
|
</React.StrictMode>,
|
|
)
|
|
EOF
|
|
|
|
cat > src/App.tsx << 'EOF'
|
|
import { useState } from 'react'
|
|
|
|
function App() {
|
|
const [count, setCount] = useState(0)
|
|
|
|
return (
|
|
<div className="min-h-screen bg-gradient-to-br from-blue-50 to-purple-50 dark:from-gray-900 dark:to-gray-800">
|
|
<div className="container mx-auto px-4 py-16">
|
|
<h1 className="text-5xl font-bold text-center mb-8 bg-gradient-to-r from-blue-600 to-purple-600 bg-clip-text text-transparent">
|
|
Hanzo Vite Template
|
|
</h1>
|
|
<div className="text-center">
|
|
<button
|
|
onClick={() => setCount(count + 1)}
|
|
className="px-6 py-3 bg-gradient-to-r from-blue-600 to-purple-600 text-white rounded-lg font-semibold hover:opacity-90 transition-opacity"
|
|
>
|
|
Count: {count}
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default App
|
|
EOF
|
|
|
|
cd ../..
|
|
fi
|
|
done
|
|
|
|
echo "✅ All templates are set up!"
|
|
echo "📝 To start a Next.js template: cd next/[template] && npm install && npm run dev"
|
|
echo "⚡ To start a Vite template: cd vite/[template] && npm install && npm run dev" |