diff --git a/docs/guides/frontend/03-GEOMETRY.md b/docs/guides/frontend/03-GEOMETRY.md index a430dbfc..39f09864 100644 --- a/docs/guides/frontend/03-GEOMETRY.md +++ b/docs/guides/frontend/03-GEOMETRY.md @@ -11,6 +11,23 @@ Эта шкала обязательна для новых экранов и перерабатываемых блоков. +## Целевая шкала вертикального ритма + +Радиусы сами по себе не делают систему согласованной. Если блоки одного веса выглядят похоже, у них должен быть одинаковый spacing. + +Нормативная шкала: + +- `gap-2` для compact control clusters и плотных inline actions +- `space-y-2` для плотного стека внутри одного secondary/detail block +- `space-y-3` для стека однотипных rows или peer secondary cards внутри одной primary panel +- `space-y-4` для стека крупных grouped blocks или major subsections внутри одной primary panel +- `space-y-6` для page-level section stack + +Правило: + +- spacing выбирается по весу блока и уровню иерархии, а не по конкретному экрану +- одинаковые `app-surface-muted rounded-xl` блоки не должны жить на `space-y-2` в одной зоне и на `space-y-4` в другой без явной UX-причины + ## Controls К controls относятся: diff --git a/frontend/src/app/employees/page.tsx b/frontend/src/app/employees/page.tsx index d3aaad4d..7cedb04d 100644 --- a/frontend/src/app/employees/page.tsx +++ b/frontend/src/app/employees/page.tsx @@ -171,7 +171,7 @@ export default function EmployeesPage() { return (
-
+
{sortedEmployees.map((employee) => { const fullName = `${employee.last_name || ""} ${employee.first_name || ""} ${employee.patronymic || ""}`.trim(); diff --git a/frontend/src/app/equipment/page.tsx b/frontend/src/app/equipment/page.tsx index d24a0df5..e0568cae 100644 --- a/frontend/src/app/equipment/page.tsx +++ b/frontend/src/app/equipment/page.tsx @@ -6,7 +6,7 @@ import { useUser } from "@/contexts/UserContext"; import Link from "next/link"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; import { Suspense, useCallback, useEffect, useMemo, useRef, useState } from "react"; -import { Archive, ArrowRightLeft, ArrowUpDown, Check, ChevronDown, ChevronRight, Copy, Download, ExternalLink, Filter, MessageSquare, Monitor, Pencil, Plus, QrCode, Search, Shield, Trash2, Wrench, X } from "lucide-react"; +import { Archive, ArrowRightLeft, ArrowUpDown, Check, ChevronDown, ChevronRight, Copy, Download, ExternalLink, Filter, MessageSquare, Monitor, Pencil, Plus, QrCode, Search, Shield, Trash2, Wrench } from "lucide-react"; import { SearchableSelectSingle } from "@/components/shared/SearchableSelect"; import { formatDate, formatMoney } from "@/lib/shared"; import { useEquipmentPage } from "@/hooks/useEquipmentPage"; @@ -549,7 +549,7 @@ function EquipmentPageContent() { {/* Filters panel */} {filtersOpen && ( -
+
actions.setView(event.target.value as "" | "mine" | "addressed")}