refactor: chaange figma structure with single package

This commit is contained in:
Zotov Ivan Yuryevich
2026-04-02 23:35:06 +03:00
parent 64ae1d9f5a
commit 1157854f1d
89 changed files with 277 additions and 2333 deletions

View File

@@ -1,5 +1,7 @@
# 📁 Обзор файлов проекта # 📁 Обзор файлов проекта
> **Обновление структуры:** документы по деплою перенесены в **`scripts/docs/`**; промпты и гайды для агентов — в **`.agents/skills/`** (этот каталог). Исходный код приложения — в **`src/`**.
## 🚀 НАЧНИТЕ С ЭТОГО ФАЙЛА ## 🚀 НАЧНИТЕ С ЭТОГО ФАЙЛА
**→ START-HERE.md** - Быстрый старт для деплоя на Netlify **→ START-HERE.md** - Быстрый старт для деплоя на Netlify

View File

@@ -1,11 +1,13 @@
# 🚀 НАЧНИТЕ ОТСЮДА # 🚀 НАЧНИТЕ ОТСЮДА
> **Актуальная структура репозитория:** сборка в **`dist/`** (стандарт Vite). Документация по деплою — в **`scripts/docs/`**. Скрипты — в **`scripts/`**. Точка входа приложения — корневой **`index.html`** и **`src/main.tsx`**.
## Проект готов к деплою на Netlify! ## Проект готов к деплою на Netlify!
Все проблемы исправлены: Все проблемы исправлены:
- ✅ Node.js зафиксирован на версии 18 LTS - ✅ Node.js зафиксирован на версии 18 LTS
- ✅ Vite настроен на сборку в папку `build` - ✅ Vite настроен на сборку в папку `dist`
- ✅ Netlify настроен на публикацию из `build` - ✅ Netlify настроен на публикацию из `dist`
- ✅ Все конфигурации обновлены - ✅ Все конфигурации обновлены
--- ---

View File

@@ -2,7 +2,7 @@ name: Deploy to GitHub Pages
on: on:
push: push:
branches: [ main ] branches: [ master, main ]
workflow_dispatch: workflow_dispatch:
permissions: permissions:

62
.gitignore vendored
View File

@@ -1,37 +1,37 @@
.DS_Store # Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*
node_modules node_modules
/build dist
/package dist-ssr
*.local
# Editor
.DS_Store
.vscode/*
!.vscode/extensions.json
.idea
# Vite
vite.config.js.timestamp-* vite.config.js.timestamp-*
vite.config.ts.timestamp-* vite.config.ts.timestamp-*
.vscode/* # TypeScript
!.vscode/settings.json *.tsbuildinfo
/.idea
# Env
.env
.env.*
# Legacy / optional (keep if you use these tools)
/build
/coverage /coverage
/test-results /test-results
/allure-report /playwright-report
/allure-results /playwright/.cache
/.cache
*.log
/dist
/storybook-static
!.vscode/snippets.code-snippets
*.env
/test-results/
/playwright-report/
/playwright/.cache/
/infra/certs/
/.svelte-kit/**
!/.svelte-kit/tsconfig.json
src/i18n/*.json
### Playwright
/test-results/
/playwright-report/
/playwright/.cache/
results.json
/tests/**/*-darwin.png
/failed_tests.txt
__f2f_cookies.json

View File

@@ -1,11 +1,25 @@
# SOFTCLICK corporate site
# Redesign Modern Website (Copy) Vite + React + TypeScript + Tailwind CSS. Design source: [Figma — Redesign Modern Website (Copy)](https://www.figma.com/design/YgZy1khwB5JnJFfONCi1cA/Redesign-Modern-Website--Copy-).
This is a code bundle for Redesign Modern Website (Copy). The original project is available at https://www.figma.com/design/YgZy1khwB5JnJFfONCi1cA/Redesign-Modern-Website--Copy-. ## Setup
## Running the code ```bash
npm install
npm run dev
```
Run `npm i` to install the dependencies. - **Build:** `npm run build` → output in `dist/`
- **Preview production build:** `npm run preview`
Run `npm run dev` to start the development server. Node.js **18** or **20** LTS is recommended (`engines` in `package.json`).
## Deploy
- Shell helpers: `scripts/deploy.sh`, `scripts/check-build.sh` (and `.bat` variants on Windows).
- GitHub Pages: workflow in `.github/workflows/deploy.yml`.
- Extra platform notes: `scripts/docs/`.
## Agent / design notes
Prompts and guidelines for recreating or extending the design live under `.agents/skills/`.

View File

@@ -1,15 +1,17 @@
<!doctype html>
<!DOCTYPE html> <html lang="ru">
<html lang="en">
<head> <head>
<meta charset="UTF-8" /> <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" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Redesign Modern Website (Copy)</title> <meta
name="description"
content="SOFTCLICK - российская IT-компания, специализирующаяся на импортозамещении и внедрении отечественных решений"
/>
<title>SOFTCLICK - Российские IT-решения с 2021 года</title>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
<script type="module" src="/src/main.tsx"></script> <script type="module" src="/src/main.tsx"></script>
</body> </body>
</html> </html>

View File

@@ -1,6 +1,6 @@
[build] [build]
command = "npm run build" command = "npm run build"
publish = "build" publish = "dist"
[[redirects]] [[redirects]]
from = "/*" from = "/*"

115
package-lock.json generated
View File

@@ -1,12 +1,12 @@
{ {
"name": "Redesign Modern Website (Copy)", "name": "figma-design",
"version": "0.1.0", "version": "0.0.0",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "Redesign Modern Website (Copy)", "name": "figma-design",
"version": "0.1.0", "version": "0.0.0",
"dependencies": { "dependencies": {
"@radix-ui/react-accordion": "^1.2.3", "@radix-ui/react-accordion": "^1.2.3",
"@radix-ui/react-alert-dialog": "^1.1.6", "@radix-ui/react-alert-dialog": "^1.1.6",
@@ -34,15 +34,13 @@
"@radix-ui/react-toggle": "^1.1.2", "@radix-ui/react-toggle": "^1.1.2",
"@radix-ui/react-toggle-group": "^1.1.2", "@radix-ui/react-toggle-group": "^1.1.2",
"@radix-ui/react-tooltip": "^1.1.8", "@radix-ui/react-tooltip": "^1.1.8",
"@vitejs/plugin-react": "*",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "*", "clsx": "^2.1.1",
"cmdk": "^1.1.1", "cmdk": "^1.1.1",
"embla-carousel-react": "^8.6.0", "embla-carousel-react": "^8.6.0",
"input-otp": "^1.4.2", "input-otp": "^1.4.2",
"lucide-react": "^0.487.0", "lucide-react": "^0.487.0",
"next-themes": "^0.4.6", "next-themes": "^0.4.6",
"path": "*",
"react": "^18.3.1", "react": "^18.3.1",
"react-day-picker": "^8.10.1", "react-day-picker": "^8.10.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
@@ -50,18 +48,23 @@
"react-resizable-panels": "^2.1.7", "react-resizable-panels": "^2.1.7",
"recharts": "^2.15.2", "recharts": "^2.15.2",
"sonner": "^2.0.3", "sonner": "^2.0.3",
"tailwind-merge": "*", "tailwind-merge": "^2.6.0",
"tailwindcss": "*",
"tw-animate-css": "^1.3.8", "tw-animate-css": "^1.3.8",
"vaul": "^1.1.2", "vaul": "^1.1.2"
"vite": "*"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/vite": "4.1.12", "@tailwindcss/vite": "^4.1.12",
"@types/node": "^20.10.0", "@types/node": "^20.11.19",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react": "^4.7.0", "@vitejs/plugin-react": "^4.7.0",
"tailwindcss": "4.1.12", "tailwindcss": "^4.1.12",
"vite": "6.3.5" "typescript": "~5.6.3",
"vite": "^6.3.5"
},
"engines": {
"node": ">=18.0.0 <22.0.0",
"npm": ">=9.0.0"
} }
}, },
"node_modules/@babel/code-frame": { "node_modules/@babel/code-frame": {
@@ -3266,6 +3269,34 @@
"undici-types": "~6.21.0" "undici-types": "~6.21.0"
} }
}, },
"node_modules/@types/prop-types": {
"version": "15.7.15",
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.15.tgz",
"integrity": "sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==",
"devOptional": true,
"license": "MIT"
},
"node_modules/@types/react": {
"version": "18.3.28",
"resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.28.tgz",
"integrity": "sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==",
"devOptional": true,
"license": "MIT",
"dependencies": {
"@types/prop-types": "*",
"csstype": "^3.2.2"
}
},
"node_modules/@types/react-dom": {
"version": "18.3.7",
"resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.7.tgz",
"integrity": "sha512-MEe3UeoENYVFXzoXEWsvcpg6ZvlrFNlOQ7EOsvhI3CfAXwzPfO8Qwuxd40nepsYKqyyVQnTdEfv68q91yLcKrQ==",
"devOptional": true,
"license": "MIT",
"peerDependencies": {
"@types/react": "^18.0.0"
}
},
"node_modules/@vitejs/plugin-react": { "node_modules/@vitejs/plugin-react": {
"version": "4.7.0", "version": "4.7.0",
"resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz",
@@ -3784,12 +3815,6 @@
"dev": true, "dev": true,
"license": "ISC" "license": "ISC"
}, },
"node_modules/inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==",
"license": "ISC"
},
"node_modules/input-otp": { "node_modules/input-otp": {
"version": "1.4.2", "version": "1.4.2",
"resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz", "resolved": "https://registry.npmjs.org/input-otp/-/input-otp-1.4.2.tgz",
@@ -4212,16 +4237,6 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/path": {
"version": "0.12.7",
"resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz",
"integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==",
"license": "MIT",
"dependencies": {
"process": "^0.11.1",
"util": "^0.10.3"
}
},
"node_modules/picocolors": { "node_modules/picocolors": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
@@ -4271,15 +4286,6 @@
"node": "^10 || ^12 || >=14" "node": "^10 || ^12 || >=14"
} }
}, },
"node_modules/process": {
"version": "0.11.10",
"resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz",
"integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==",
"license": "MIT",
"engines": {
"node": ">= 0.6.0"
}
},
"node_modules/prop-types": { "node_modules/prop-types": {
"version": "15.8.1", "version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -4595,9 +4601,9 @@
} }
}, },
"node_modules/tailwind-merge": { "node_modules/tailwind-merge": {
"version": "3.5.0", "version": "2.6.1",
"resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.6.1.tgz",
"integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==", "integrity": "sha512-Oo6tHdpZsGpkKG88HJ8RR1rg/RdnEkQEfMoEk2x1XRI3F1AxeU+ijRXpiVUF4UbLfcxxRGw6TbUINKYdWVsQTQ==",
"license": "MIT", "license": "MIT",
"funding": { "funding": {
"type": "github", "type": "github",
@@ -4690,6 +4696,20 @@
"url": "https://github.com/sponsors/Wombosvideo" "url": "https://github.com/sponsors/Wombosvideo"
} }
}, },
"node_modules/typescript": {
"version": "5.6.3",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz",
"integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==",
"dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
"tsserver": "bin/tsserver"
},
"engines": {
"node": ">=14.17"
}
},
"node_modules/undici-types": { "node_modules/undici-types": {
"version": "6.21.0", "version": "6.21.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz",
@@ -4780,15 +4800,6 @@
"react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
} }
}, },
"node_modules/util": {
"version": "0.10.4",
"resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz",
"integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==",
"license": "MIT",
"dependencies": {
"inherits": "2.0.3"
}
},
"node_modules/vaul": { "node_modules/vaul": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz", "resolved": "https://registry.npmjs.org/vaul/-/vaul-1.1.2.tgz",

View File

@@ -1,8 +1,17 @@
{ {
"name": "Redesign Modern Website", "name": "figma-design",
"version": "0.1.0",
"private": true, "private": true,
"version": "0.0.0",
"type": "module", "type": "module",
"engines": {
"node": ">=18.0.0",
"npm": ">=9.0.0"
},
"scripts": {
"dev": "vite",
"build": "tsc -b && vite build",
"preview": "vite preview"
},
"dependencies": { "dependencies": {
"@radix-ui/react-accordion": "^1.2.3", "@radix-ui/react-accordion": "^1.2.3",
"@radix-ui/react-alert-dialog": "^1.1.6", "@radix-ui/react-alert-dialog": "^1.1.6",
@@ -30,15 +39,13 @@
"@radix-ui/react-toggle": "^1.1.2", "@radix-ui/react-toggle": "^1.1.2",
"@radix-ui/react-toggle-group": "^1.1.2", "@radix-ui/react-toggle-group": "^1.1.2",
"@radix-ui/react-tooltip": "^1.1.8", "@radix-ui/react-tooltip": "^1.1.8",
"@vitejs/plugin-react": "*",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "*", "clsx": "^2.1.1",
"cmdk": "^1.1.1", "cmdk": "^1.1.1",
"embla-carousel-react": "^8.6.0", "embla-carousel-react": "^8.6.0",
"input-otp": "^1.4.2", "input-otp": "^1.4.2",
"lucide-react": "^0.487.0", "lucide-react": "^0.487.0",
"next-themes": "^0.4.6", "next-themes": "^0.4.6",
"path": "*",
"react": "^18.3.1", "react": "^18.3.1",
"react-day-picker": "^8.10.1", "react-day-picker": "^8.10.1",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
@@ -46,21 +53,18 @@
"react-resizable-panels": "^2.1.7", "react-resizable-panels": "^2.1.7",
"recharts": "^2.15.2", "recharts": "^2.15.2",
"sonner": "^2.0.3", "sonner": "^2.0.3",
"tailwind-merge": "*", "tailwind-merge": "^2.6.0",
"tailwindcss": "*",
"tw-animate-css": "^1.3.8", "tw-animate-css": "^1.3.8",
"vaul": "^1.1.2", "vaul": "^1.1.2"
"vite": "*"
}, },
"devDependencies": { "devDependencies": {
"@tailwindcss/vite": "4.1.12", "@tailwindcss/vite": "^4.1.12",
"@types/node": "^20.10.0", "@types/node": "^20.11.19",
"@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1",
"@vitejs/plugin-react": "^4.7.0", "@vitejs/plugin-react": "^4.7.0",
"tailwindcss": "4.1.12", "tailwindcss": "^4.1.12",
"vite": "6.3.5" "typescript": "~5.6.3",
}, "vite": "^6.3.5"
"scripts": {
"dev": "vite",
"build": "vite build"
} }
} }

1
public/CNAME Normal file
View File

@@ -0,0 +1 @@
your-domain.ru

View File

Before

Width:  |  Height:  |  Size: 260 B

After

Width:  |  Height:  |  Size: 260 B

View File

@@ -1,5 +1,6 @@
@echo off @echo off
chcp 65001 >nul chcp 65001 >nul
cd /d "%~dp0.."
echo 🔍 Проверка сборки SOFTCLICK... echo 🔍 Проверка сборки SOFTCLICK...
echo. echo.

View File

@@ -1,4 +1,5 @@
#!/bin/bash #!/bin/bash
cd "$(dirname "$0")/.."
echo "🔍 Проверка сборки SOFTCLICK..." echo "🔍 Проверка сборки SOFTCLICK..."
echo "" echo ""

View File

@@ -1,5 +1,6 @@
@echo off @echo off
chcp 65001 >nul chcp 65001 >nul
cd /d "%~dp0.."
echo. echo.
echo ==================================== echo ====================================
echo 🚀 ДЕПЛОЙ SOFTCLICK echo 🚀 ДЕПЛОЙ SOFTCLICK
@@ -45,7 +46,7 @@ if %errorlevel% equ 0 (
if "%choice%"=="3" ( if "%choice%"=="3" (
echo. echo.
type DEPLOYMENT.md type scripts\docs\DEPLOYMENT.md
) )
echo. echo.
@@ -59,10 +60,10 @@ if %errorlevel% equ 0 (
echo 3. GitHub Pages - автоматически echo 3. GitHub Pages - автоматически
echo. echo.
echo 🇷🇺 РОССИЙСКИЕ: echo 🇷🇺 РОССИЙСКИЕ:
echo 1. Яндекс.Облако - см. deploy-yandex-cloud.md echo 1. Яндекс.Облако - см. scripts\docs\deploy-yandex-cloud.md
echo 2. Timeweb/Beget - см. deploy-traditional-hosting.md echo 2. Timeweb/Beget - см. scripts\docs\deploy-traditional-hosting.md
echo. echo.
echo 📄 Полная инструкция: DEPLOYMENT.md echo 📄 Полная инструкция: scripts\docs\DEPLOYMENT.md
echo. echo.
) else ( ) else (

View File

@@ -1,7 +1,7 @@
#!/bin/bash #!/bin/bash
cd "$(dirname "$0")/.."
# Скрипт для деплоя SOFTCLICK сайта # Скрипт для деплоя SOFTCLICK сайта (запускайте из корня репозитория или как scripts/deploy.sh)
# Использование: ./deploy.sh
echo "🚀 Начинаем деплой SOFTCLICK..." echo "🚀 Начинаем деплой SOFTCLICK..."
@@ -54,8 +54,8 @@ if [ $? -eq 0 ]; then
echo "📖 Инструкции по деплою:" echo "📖 Инструкции по деплою:"
echo " - Netlify: см. netlify.toml" echo " - Netlify: см. netlify.toml"
echo " - GitHub Pages: см. .github/workflows/deploy.yml" echo " - GitHub Pages: см. .github/workflows/deploy.yml"
echo " - Яндекс.Облако: см. deploy-yandex-cloud.md" echo " - Яндекс.Облако: см. scripts/docs/deploy-yandex-cloud.md"
echo " - Хостинг: см. deploy-traditional-hosting.md" echo " - Хостинг: см. scripts/docs/deploy-traditional-hosting.md"
else else
echo "❌ Ошибка при сборке!" echo "❌ Ошибка при сборке!"

View File

@@ -92,7 +92,7 @@ npm run build
**Linux/Mac:** **Linux/Mac:**
```bash ```bash
./deploy.sh `scripts/deploy.sh` (из корня репозитория)
``` ```
**Windows:** **Windows:**

View File

@@ -1,116 +0,0 @@
# SOFTCLICK - Корпоративный сайт
Современный корпоративный сайт российской IT-компании SOFTCLICK с фокусом на импортозамещение и российские решения.
## ⚠️ Требования
- **Node.js 18 LTS** (рекомендуется)
- npm 9 или выше
Проект настроен на Node.js 18 для максимальной совместимости. Node.js 22 может вызвать проблемы.
**Установка Node.js 18:**
```bash
# Если используете nvm
nvm install 18
nvm use 18
# Проверка версии
node -v # должно показать v18.x.x
```
## ⚠️ Важно: Проверка сборки
Перед деплоем проверьте, в какую папку собирается проект:
**Linux/Mac:**
```bash
chmod +x check-build.sh
./check-build.sh
```
**Windows:**
```cmd
check-build.bat
```
Скрипт покажет, создаётся папка `dist` или `build`. Используйте эту информацию для настройки деплоя.
## Технологии
- React 18
- TypeScript
- Vite
- Tailwind CSS v4
- Lucide Icons
## Установка и запуск
```bash
# Установка зависимостей
npm install
# Запуск dev-сервера
npm run dev
# Сборка для продакшена
npm run build
# Предпросмотр продакшен-сборки
npm run preview
```
## 🚀 Деплой
### Быстрый деплой (один клик)
**Linux/Mac:**
```bash
chmod +x deploy.sh
./deploy.sh
```
**Windows:**
```cmd
deploy.bat
```
### Рекомендуемые платформы
#### ⭐ Netlify (самый простой - 2 минуты)
1. Зарегистрируйтесь на https://netlify.com
2. Подключите GitHub репозиторий
3. Готово! Автоматический деплой настроен
#### ⭐ Cloudflare Pages (самый быстрый)
1. Зарегистрируйтесь на https://pages.cloudflare.com
2. Build command: `npm run build`
3. Output: `dist`
#### ⭐ GitHub Pages (100% бесплатно)
1. Settings → Pages → Source: "GitHub Actions"
2. Автоматический деплой уже настроен!
#### 🇷🇺 Яндекс.Облако (российская платформа)
См. подробную инструкцию в `deploy-yandex-cloud.md`
#### 🇷🇺 Традиционный хостинг (Timeweb, Beget, Reg.ru)
См. инструкцию в `deploy-traditional-hosting.md`
### 📖 Полная документация по деплою
**Смотрите файл `DEPLOYMENT.md`** - там все варианты с пошаговыми инструкциями!
## Структура проекта
- `/components` - React компоненты
- `/pages` - Страницы приложения
- `/styles` - Глобальные стили и анимации
- `/App.tsx` - Главный компонент с роутингом
## Файлы конфигурации
- `netlify.toml` - конфигурация для Netlify
- `.github/workflows/deploy.yml` - GitHub Pages автодеплой
- `.github/workflows/deploy-yandex.yml` - Яндекс.Облако автодеплой
- `.htaccess` - для Apache хостинга
- `vercel.json` - для Vercel (опционально)

View File

@@ -1,4 +1,4 @@
import React, { useState } from 'react' import React, { useState } from 'react';
const ERROR_IMG_SRC = const ERROR_IMG_SRC =
'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg==' 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODgiIGhlaWdodD0iODgiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBvcGFjaXR5PSIuMyIgZmlsbD0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIzLjciPjxyZWN0IHg9IjE2IiB5PSIxNiIgd2lkdGg9IjU2IiBoZWlnaHQ9IjU2IiByeD0iNiIvPjxwYXRoIGQ9Im0xNiA1OCAxNi0xOCAzMiAzMiIvPjxjaXJjbGUgY3g9IjUzIiBjeT0iMzUiIHI9IjciLz48L3N2Zz4KCg=='

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as AccordionPrimitive from "@radix-ui/react-accordion@1.2.3"; import * as AccordionPrimitive from "@radix-ui/react-accordion";
import { ChevronDownIcon } from "lucide-react@0.487.0"; import { ChevronDownIcon } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog@1.1.6"; import * as AlertDialogPrimitive from "@radix-ui/react-alert-dialog";
import { cn } from "./utils"; import { cn } from "./utils";
import { buttonVariants } from "./button"; import { buttonVariants } from "./button";

View File

@@ -1,5 +1,5 @@
import * as React from "react"; import * as React from "react";
import { cva, type VariantProps } from "class-variance-authority@0.7.1"; import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,6 +1,6 @@
"use client"; "use client";
import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio@1.1.2"; import * as AspectRatioPrimitive from "@radix-ui/react-aspect-ratio";
function AspectRatio({ function AspectRatio({
...props ...props

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as AvatarPrimitive from "@radix-ui/react-avatar@1.1.3"; import * as AvatarPrimitive from "@radix-ui/react-avatar";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,6 +1,6 @@
import * as React from "react"; import * as React from "react";
import { Slot } from "@radix-ui/react-slot@1.1.2"; import { Slot } from "@radix-ui/react-slot";
import { cva, type VariantProps } from "class-variance-authority@0.7.1"; import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,6 +1,6 @@
import * as React from "react"; import * as React from "react";
import { Slot } from "@radix-ui/react-slot@1.1.2"; import { Slot } from "@radix-ui/react-slot";
import { ChevronRight, MoreHorizontal } from "lucide-react@0.487.0"; import { ChevronRight, MoreHorizontal } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,6 +1,6 @@
import * as React from "react"; import * as React from "react";
import { Slot } from "@radix-ui/react-slot@1.1.2"; import { Slot } from "@radix-ui/react-slot";
import { cva, type VariantProps } from "class-variance-authority@0.7.1"; import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import { ChevronLeft, ChevronRight } from "lucide-react@0.487.0"; import { ChevronLeft, ChevronRight } from "lucide-react";
import { DayPicker } from "react-day-picker@8.10.1"; import { DayPicker } from "react-day-picker";
import { cn } from "./utils"; import { cn } from "./utils";
import { buttonVariants } from "./button"; import { buttonVariants } from "./button";

View File

@@ -3,8 +3,8 @@
import * as React from "react"; import * as React from "react";
import useEmblaCarousel, { import useEmblaCarousel, {
type UseEmblaCarouselType, type UseEmblaCarouselType,
} from "embla-carousel-react@8.6.0"; } from "embla-carousel-react";
import { ArrowLeft, ArrowRight } from "lucide-react@0.487.0"; import { ArrowLeft, ArrowRight } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";
import { Button } from "./button"; import { Button } from "./button";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as RechartsPrimitive from "recharts@2.15.2"; import * as RechartsPrimitive from "recharts";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as CheckboxPrimitive from "@radix-ui/react-checkbox@1.1.4"; import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
import { CheckIcon } from "lucide-react@0.487.0"; import { CheckIcon } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,6 +1,6 @@
"use client"; "use client";
import * as CollapsiblePrimitive from "@radix-ui/react-collapsible@1.1.3"; import * as CollapsiblePrimitive from "@radix-ui/react-collapsible";
function Collapsible({ function Collapsible({
...props ...props

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import { Command as CommandPrimitive } from "cmdk@1.1.1"; import { Command as CommandPrimitive } from "cmdk";
import { SearchIcon } from "lucide-react@0.487.0"; import { SearchIcon } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";
import { import {

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as ContextMenuPrimitive from "@radix-ui/react-context-menu@2.2.6"; import * as ContextMenuPrimitive from "@radix-ui/react-context-menu";
import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react@0.487.0"; import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as DialogPrimitive from "@radix-ui/react-dialog@1.1.6"; import * as DialogPrimitive from "@radix-ui/react-dialog";
import { XIcon } from "lucide-react@0.487.0"; import { XIcon } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import { Drawer as DrawerPrimitive } from "vaul@1.1.2"; import { Drawer as DrawerPrimitive } from "vaul";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu@2.1.6"; import * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react@0.487.0"; import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as LabelPrimitive from "@radix-ui/react-label@2.1.2"; import * as LabelPrimitive from "@radix-ui/react-label";
import { Slot } from "@radix-ui/react-slot@1.1.2"; import { Slot } from "@radix-ui/react-slot";
import { import {
Controller, Controller,
FormProvider, FormProvider,
@@ -11,7 +11,7 @@ import {
type ControllerProps, type ControllerProps,
type FieldPath, type FieldPath,
type FieldValues, type FieldValues,
} from "react-hook-form@7.55.0"; } from "react-hook-form";
import { cn } from "./utils"; import { cn } from "./utils";
import { Label } from "./label"; import { Label } from "./label";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as HoverCardPrimitive from "@radix-ui/react-hover-card@1.1.6"; import * as HoverCardPrimitive from "@radix-ui/react-hover-card";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import { OTPInput, OTPInputContext } from "input-otp@1.4.2"; import { OTPInput, OTPInputContext } from "input-otp";
import { MinusIcon } from "lucide-react@0.487.0"; import { MinusIcon } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as LabelPrimitive from "@radix-ui/react-label@2.1.2"; import * as LabelPrimitive from "@radix-ui/react-label";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as MenubarPrimitive from "@radix-ui/react-menubar@1.1.6"; import * as MenubarPrimitive from "@radix-ui/react-menubar";
import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react@0.487.0"; import { CheckIcon, ChevronRightIcon, CircleIcon } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,7 +1,7 @@
import * as React from "react"; import * as React from "react";
import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu@1.2.5"; import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
import { cva } from "class-variance-authority@0.7.1"; import { cva } from "class-variance-authority";
import { ChevronDownIcon } from "lucide-react@0.487.0"; import { ChevronDownIcon } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -3,7 +3,7 @@ import {
ChevronLeftIcon, ChevronLeftIcon,
ChevronRightIcon, ChevronRightIcon,
MoreHorizontalIcon, MoreHorizontalIcon,
} from "lucide-react@0.487.0"; } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";
import { Button, buttonVariants } from "./button"; import { Button, buttonVariants } from "./button";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as PopoverPrimitive from "@radix-ui/react-popover@1.1.6"; import * as PopoverPrimitive from "@radix-ui/react-popover";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as ProgressPrimitive from "@radix-ui/react-progress@1.1.2"; import * as ProgressPrimitive from "@radix-ui/react-progress";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as RadioGroupPrimitive from "@radix-ui/react-radio-group@1.2.3"; import * as RadioGroupPrimitive from "@radix-ui/react-radio-group";
import { CircleIcon } from "lucide-react@0.487.0"; import { CircleIcon } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import { GripVerticalIcon } from "lucide-react@0.487.0"; import { GripVerticalIcon } from "lucide-react";
import * as ResizablePrimitive from "react-resizable-panels@2.1.7"; import * as ResizablePrimitive from "react-resizable-panels";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area@1.2.3"; import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,12 +1,12 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as SelectPrimitive from "@radix-ui/react-select@2.1.6"; import * as SelectPrimitive from "@radix-ui/react-select";
import { import {
CheckIcon, CheckIcon,
ChevronDownIcon, ChevronDownIcon,
ChevronUpIcon, ChevronUpIcon,
} from "lucide-react@0.487.0"; } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as SeparatorPrimitive from "@radix-ui/react-separator@1.1.2"; import * as SeparatorPrimitive from "@radix-ui/react-separator";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as SheetPrimitive from "@radix-ui/react-dialog@1.1.6"; import * as SheetPrimitive from "@radix-ui/react-dialog";
import { XIcon } from "lucide-react@0.487.0"; import { XIcon } from "lucide-react";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,9 +1,9 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import { Slot } from "@radix-ui/react-slot@1.1.2"; import { Slot } from "@radix-ui/react-slot";
import { VariantProps, cva } from "class-variance-authority@0.7.1"; import { VariantProps, cva } from "class-variance-authority";
import { PanelLeftIcon } from "lucide-react@0.487.0"; import { PanelLeftIcon } from "lucide-react";
import { useIsMobile } from "./use-mobile"; import { useIsMobile } from "./use-mobile";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as SliderPrimitive from "@radix-ui/react-slider@1.2.3"; import * as SliderPrimitive from "@radix-ui/react-slider";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import { useTheme } from "next-themes@0.4.6"; import { useTheme } from "next-themes";
import { Toaster as Sonner, ToasterProps } from "sonner@2.0.3"; import { Toaster as Sonner, ToasterProps } from "sonner";
const Toaster = ({ ...props }: ToasterProps) => { const Toaster = ({ ...props }: ToasterProps) => {
const { theme = "system" } = useTheme(); const { theme = "system" } = useTheme();

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as SwitchPrimitive from "@radix-ui/react-switch@1.1.3"; import * as SwitchPrimitive from "@radix-ui/react-switch";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as TabsPrimitive from "@radix-ui/react-tabs@1.1.3"; import * as TabsPrimitive from "@radix-ui/react-tabs";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group@1.1.2"; import * as ToggleGroupPrimitive from "@radix-ui/react-toggle-group";
import { type VariantProps } from "class-variance-authority@0.7.1"; import { type VariantProps } from "class-variance-authority";
import { cn } from "./utils"; import { cn } from "./utils";
import { toggleVariants } from "./toggle"; import { toggleVariants } from "./toggle";

View File

@@ -1,8 +1,8 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as TogglePrimitive from "@radix-ui/react-toggle@1.1.2"; import * as TogglePrimitive from "@radix-ui/react-toggle";
import { cva, type VariantProps } from "class-variance-authority@0.7.1"; import { cva, type VariantProps } from "class-variance-authority";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,7 +1,7 @@
"use client"; "use client";
import * as React from "react"; import * as React from "react";
import * as TooltipPrimitive from "@radix-ui/react-tooltip@1.1.8"; import * as TooltipPrimitive from "@radix-ui/react-tooltip";
import { cn } from "./utils"; import { cn } from "./utils";

View File

@@ -1,8 +0,0 @@
@import 'tailwindcss' source(none);
@source './**/*.{js,ts,jsx,tsx}';
@import 'tw-animate-css';
@import './styles/globals.css';
@layer base {
html, body, #root { min-height: 100vh; height: 100%; margin: 0; }
}

View File

@@ -1,14 +0,0 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="SOFTCLICK - российская IT-компания, специализирующаяся на импортозамещении и внедрении отечественных решений" />
<title>SOFTCLICK - Российские IT-решения с 2021 года</title>
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
</head>
<body>
<div id="root"></div>
<script type="module" src="/main.tsx"></script>
</body>
</html>

1850
src/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,33 +0,0 @@
{
"name": "softclick-corporate-website",
"private": true,
"version": "1.0.0",
"type": "module",
"engines": {
"node": ">=18.0.0 <22.0.0",
"npm": ">=9.0.0"
},
"scripts": {
"dev": "vite",
"build": "vite build",
"preview": "vite preview"
},
"dependencies": {
"react": "^18.3.1",
"react-dom": "^18.3.1",
"lucide-react": "^0.344.0",
"clsx": "^2.1.0",
"tailwind-merge": "^2.2.1"
},
"devDependencies": {
"@types/node": "^20.11.19",
"@types/react": "^18.2.56",
"@types/react-dom": "^18.2.19",
"@vitejs/plugin-react": "^4.2.1",
"autoprefixer": "^10.4.18",
"postcss": "^8.4.35",
"tailwindcss": "^4.0.0",
"typescript": "^5.2.2",
"vite": "^5.1.4"
}
}

View File

@@ -1,6 +0,0 @@
export default {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
};

View File

@@ -1 +0,0 @@
your-domain.ru

View File

@@ -1,11 +0,0 @@
/** @type {import('tailwindcss').Config} */
export default {
content: [
"./index.html",
"./**/*.{js,ts,jsx,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}

View File

@@ -1,10 +0,0 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}

1
src/vite-env.d.ts vendored Normal file
View File

@@ -0,0 +1 @@
/// <reference types="vite/client" />

View File

@@ -1,17 +0,0 @@
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import path from 'path';
export default defineConfig({
plugins: [react()],
resolve: {
alias: {
'@': path.resolve(__dirname, './'),
},
},
build: {
outDir: 'build',
emptyOutDir: true,
sourcemap: false,
},
});

View File

@@ -1,5 +1,6 @@
{ {
"compilerOptions": { "compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
"target": "ES2020", "target": "ES2020",
"useDefineForClassFields": true, "useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"], "lib": ["ES2020", "DOM", "DOM.Iterable"],
@@ -12,10 +13,7 @@
"noEmit": true, "noEmit": true,
"jsx": "react-jsx", "jsx": "react-jsx",
"strict": true, "strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true "noFallthroughCasesInSwitch": true
}, },
"include": ["**/*.ts", "**/*.tsx"], "include": ["src"]
"references": [{ "path": "./tsconfig.node.json" }]
} }

7
tsconfig.json Normal file
View File

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

11
tsconfig.node.json Normal file
View File

@@ -0,0 +1,11 @@
{
"compilerOptions": {
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
"target": "ES2022",
"lib": ["ES2023"],
"module": "ESNext",
"skipLibCheck": true,
"moduleResolution": "bundler"
},
"include": ["vite.config.ts"]
}

7
vite.config.js Normal file
View File

@@ -0,0 +1,7 @@
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import tailwindcss from '@tailwindcss/vite';
// https://vite.dev/config/
export default defineConfig({
plugins: [react(), tailwindcss()],
});

View File

@@ -1,61 +1,8 @@
import { defineConfig } from 'vite'; import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react'; import react from '@vitejs/plugin-react';
import tailwindcss from '@tailwindcss/vite'; import tailwindcss from '@tailwindcss/vite';
import path from 'path';
// https://vite.dev/config/
export default defineConfig({ export default defineConfig({
plugins: [react(), tailwindcss()], plugins: [react(), tailwindcss()],
resolve: {
extensions: ['.js', '.jsx', '.ts', '.tsx', '.json'],
alias: {
'vaul@1.1.2': 'vaul',
'sonner@2.0.3': 'sonner',
'recharts@2.15.2': 'recharts',
'react-resizable-panels@2.1.7': 'react-resizable-panels',
'react-hook-form@7.55.0': 'react-hook-form',
'react-day-picker@8.10.1': 'react-day-picker',
'next-themes@0.4.6': 'next-themes',
'lucide-react@0.487.0': 'lucide-react',
'input-otp@1.4.2': 'input-otp',
'embla-carousel-react@8.6.0': 'embla-carousel-react',
'cmdk@1.1.1': 'cmdk',
'class-variance-authority@0.7.1': 'class-variance-authority',
'@radix-ui/react-tooltip@1.1.8': '@radix-ui/react-tooltip',
'@radix-ui/react-toggle@1.1.2': '@radix-ui/react-toggle',
'@radix-ui/react-toggle-group@1.1.2': '@radix-ui/react-toggle-group',
'@radix-ui/react-tabs@1.1.3': '@radix-ui/react-tabs',
'@radix-ui/react-switch@1.1.3': '@radix-ui/react-switch',
'@radix-ui/react-slot@1.1.2': '@radix-ui/react-slot',
'@radix-ui/react-slider@1.2.3': '@radix-ui/react-slider',
'@radix-ui/react-separator@1.1.2': '@radix-ui/react-separator',
'@radix-ui/react-select@2.1.6': '@radix-ui/react-select',
'@radix-ui/react-scroll-area@1.2.3': '@radix-ui/react-scroll-area',
'@radix-ui/react-radio-group@1.2.3': '@radix-ui/react-radio-group',
'@radix-ui/react-progress@1.1.2': '@radix-ui/react-progress',
'@radix-ui/react-popover@1.1.6': '@radix-ui/react-popover',
'@radix-ui/react-navigation-menu@1.2.5': '@radix-ui/react-navigation-menu',
'@radix-ui/react-menubar@1.1.6': '@radix-ui/react-menubar',
'@radix-ui/react-label@2.1.2': '@radix-ui/react-label',
'@radix-ui/react-hover-card@1.1.6': '@radix-ui/react-hover-card',
'@radix-ui/react-dropdown-menu@2.1.6': '@radix-ui/react-dropdown-menu',
'@radix-ui/react-dialog@1.1.6': '@radix-ui/react-dialog',
'@radix-ui/react-context-menu@2.2.6': '@radix-ui/react-context-menu',
'@radix-ui/react-collapsible@1.1.3': '@radix-ui/react-collapsible',
'@radix-ui/react-checkbox@1.1.4': '@radix-ui/react-checkbox',
'@radix-ui/react-avatar@1.1.3': '@radix-ui/react-avatar',
'@radix-ui/react-aspect-ratio@1.1.2': '@radix-ui/react-aspect-ratio',
'@radix-ui/react-alert-dialog@1.1.6': '@radix-ui/react-alert-dialog',
'@radix-ui/react-accordion@1.2.3': '@radix-ui/react-accordion',
'@': path.resolve(__dirname, './src'),
},
},
build: {
target: 'esnext',
outDir: 'build',
},
server: {
port: 3000,
open: true,
},
}); });