Scaffold new frontend with Vite + React 18 + TypeScript

This commit is contained in:
2026-04-23 21:04:27 +04:00
parent 63ac2df4b5
commit abef71e4ab
13 changed files with 3359 additions and 0 deletions

2
frontend/.env Normal file
View File

@@ -0,0 +1,2 @@
VITE_DIRECTUS_API_URL=http://localhost:8055
VITE_GLOBALS_ID=4f8d9e66-ec95-4bdd-a5e7-34df8ea68a45

2
frontend/.env.production Normal file
View File

@@ -0,0 +1,2 @@
VITE_DIRECTUS_API_URL=https://admin.pca-pijac.dev.civokram.com
VITE_GLOBALS_ID=4f8d9e66-ec95-4bdd-a5e7-34df8ea68a45

10
frontend/.gitignore vendored Normal file
View File

@@ -0,0 +1,10 @@
node_modules
dist
dist-ssr
*.local
.DS_Store
.vite
# TanStack Router generated
src/routeTree.gen.ts
.next

13
frontend/index.html Normal file
View File

@@ -0,0 +1,13 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>PCA Pijac</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>

53
frontend/package.json Normal file
View File

@@ -0,0 +1,53 @@
{
"name": "frontend",
"version": "0.1.0",
"private": true,
"type": "module",
"engines": {
"node": ">=22",
"pnpm": ">=10"
},
"packageManager": "pnpm@10.33.2",
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"preview": "vite preview",
"typecheck": "tsc -b --noEmit"
},
"dependencies": {
"@radix-ui/react-dropdown-menu": "2.1.16",
"@radix-ui/react-label": "2.1.8",
"@radix-ui/react-separator": "1.1.8",
"@radix-ui/react-slot": "1.2.4",
"@tanstack/react-query": "5.100.1",
"@tanstack/react-router": "1.168.23",
"class-variance-authority": "0.7.1",
"clsx": "2.1.1",
"iso-3166": "4.4.0",
"lucide-react": "0.468.0",
"react": "18.3.1",
"react-dom": "18.3.1",
"react-helmet-async": "2.0.5",
"tailwind-merge": "2.6.1"
},
"devDependencies": {
"@tanstack/react-query-devtools": "5.100.0",
"@tanstack/react-router-devtools": "1.166.13",
"@tanstack/router-plugin": "1.167.22",
"@types/node": "22.19.17",
"@types/react": "18.3.28",
"@types/react-dom": "18.3.7",
"@vitejs/plugin-react": "4.7.0",
"autoprefixer": "10.5.0",
"postcss": "8.5.10",
"tailwindcss": "3.4.19",
"tailwindcss-animate": "1.0.7",
"typescript": "5.9.3",
"vite": "6.4.2"
},
"pnpm": {
"onlyBuiltDependencies": [
"esbuild"
]
}
}

3189
frontend/pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

8
frontend/src/App.tsx Normal file
View File

@@ -0,0 +1,8 @@
export default function App() {
return (
<div style={{ padding: '2rem', fontFamily: 'sans-serif' }}>
<h1>PCA Pijac scaffolded</h1>
<p>Stack: Vite + React + TypeScript + TanStack Router + TanStack Query + Tailwind + shadcn/ui</p>
</div>
)
}

4
frontend/src/index.css Normal file
View File

@@ -0,0 +1,4 @@
body {
margin: 0;
font-family: system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
}

10
frontend/src/main.tsx Normal file
View File

@@ -0,0 +1,10 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import App from './App'
import './index.css'
createRoot(document.getElementById('root')!).render(
<StrictMode>
<App />
</StrictMode>,
)

View File

@@ -0,0 +1,25 @@
{
"compilerOptions": {
"target": "ES2022",
"useDefineForClassFields": true,
"lib": ["ES2022", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
"jsx": "react-jsx",
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true,
"baseUrl": ".",
"paths": {
"@/*": ["src/*"]
}
},
"include": ["src"]
}

7
frontend/tsconfig.json Normal file
View File

@@ -0,0 +1,7 @@
{
"files": [],
"references": [
{ "path": "./tsconfig.app.json" },
{ "path": "./tsconfig.node.json" }
]
}

View File

@@ -0,0 +1,17 @@
{
"compilerOptions": {
"target": "ES2022",
"lib": ["ES2023"],
"module": "ESNext",
"skipLibCheck": true,
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"isolatedModules": true,
"moduleDetection": "force",
"noEmit": true,
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true
},
"include": ["vite.config.ts"]
}

19
frontend/vite.config.ts Normal file
View File

@@ -0,0 +1,19 @@
import path from 'node:path'
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'
import { TanStackRouterVite } from '@tanstack/router-plugin/vite'
export default defineConfig({
plugins: [
TanStackRouterVite({ target: 'react', autoCodeSplitting: true }),
react(),
],
resolve: {
alias: {
'@': path.resolve(__dirname, './src'),
},
},
server: {
port: 3000,
},
})