Урок 22. Справочник: команды и структура проекта

📁 Раздел: Итоговый проект ⏱️ Время изучения: ~3–4 часа 🎯 Сложность: Продвинутая

⚡ Кратко

Команды установки, список компонентов и структура файлов проекта.

Подготовка проекта

npm create vite@latest dashboard -- --template react-ts
cd dashboard && npm install
npm install tailwindcss @tailwindcss/vite
npm install -D @types/node
# алиас @/ в vite.config.ts и tsconfig — см. урок 17
npx shadcn@latest init

Компоненты проекта

npx shadcn@latest add button card badge input label field
npx shadcn@latest add table tabs dialog sheet dropdown-menu select switch skeleton separator avatar
КомпонентГде используется
Cardметрики, график, блоки
Tableсписок заказов
Badgeстатусы заказов, дельты метрик
DropdownMenuдействия строки, меню профиля
Dialogсоздание заказа, подтверждение удаления
Sheetмобильное меню, фильтры
Tabs«Активные / Архив»
Skeletonсостояние загрузки
Field, Input, Selectформы

Структура файлов

src/
├── components/
│   ├── ui/                    ← компоненты реестра (не трогаем без нужды)
│   ├── app-shell.tsx          ← каркас: сайдбар + шапка + контент
│   ├── app-sidebar.tsx
│   ├── app-header.tsx
│   ├── metric-card.tsx
│   ├── revenue-chart.tsx
│   ├── orders-table.tsx
│   ├── order-actions.tsx      ← меню строки
│   ├── create-order-dialog.tsx
│   └── filters-sheet.tsx
├── lib/
│   ├── utils.ts               ← cn()
│   └── schemas.ts             ← схемы zod
├── routes/
│   └── dashboard.tsx
└── index.css                  ← тема

Раскладка каркаса

ЗадачаКлассы
Каркас на весь экранgrid min-h-svh grid-rows-[auto_1fr] lg:grid-cols-[16rem_1fr]
Сайдбар на всю высотуlg:col-start-1 lg:row-span-2
Прокрутка только контентаoverflow-y-auto у main
Липкая шапкаsticky top-0 z-10 bg-background/95
Сетка метрикgrid grid-cols-2 gap-4 lg:grid-cols-4
График шире таблицыlg:col-span-2
Таблица на мобильномoverflow-x-auto у обёртки

Проверка перед сдачей

ЧтоКоманда или действие
Сборкаnpm run build
Размер CSSls -l dist/assets/*.css
Адаптивширины 320, 375, 768, 1024, 1440
Клавиатураобход всей страницы по Tab
Тёмная темапереключатель на каждом экране
КонтрастDevTools на основном и приглушённом тексте