Files
brand_book/apps/web/components/layout/Sidebar.tsx
T
AR 15 M4 754056642d plan: rewrite Sprint 5-12 — document only what exists on real site
Key principle: brandbook documents only existing perm.oclinica.ru blocks,
no invented style variants. Every sprint starts with Research phase.

Sprint 5: Header/Navigation
Sprint 6: Hero banner + Advantages block
Sprint 7: Intro text (CEO) + Services
Sprint 8: Doctors page blocks
Sprint 9: Reviews + News
Sprint 10: Contact forms + Contact block
Sprint 11: Pages — Disease + Home (assembled)
Sprint 12: Pages — Prices + Contacts + final smoke

Sidebar: removed invented hero variants, added "soon" back to blocks
pending documentation from real site.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-22 23:31:57 +05:00

174 lines
5.6 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"use client";
import Link from "next/link";
import { usePathname } from "next/navigation";
type NavItem = {
label: string;
href: string;
soon?: boolean;
};
type NavSection = {
title: string;
items: NavItem[];
};
const NAV: NavSection[] = [
{
title: "Фундамент",
items: [
{ label: "Логотип", href: "/foundation/logo" },
{ label: "Цвета", href: "/foundation/colors" },
{ label: "Типографика", href: "/foundation/typography" },
{ label: "Иконография", href: "/foundation/icons", soon: true },
],
},
{
title: "Компоненты",
items: [
{ label: "Кнопки", href: "/components/buttons" },
{ label: "Форм-контролы", href: "/components/forms" },
{ label: "Карточки", href: "/components/cards" },
{ label: "Навигация", href: "/components/navigation", soon: true },
],
},
{
title: "Блоки",
items: [
{ label: "Hero + Преимущества", href: "/blocks/hero", soon: true },
{ label: "Вводный текст", href: "/blocks/ceo", soon: true },
{ label: "Услуги", href: "/blocks/services", soon: true },
{ label: "Наши врачи", href: "/blocks/doctors", soon: true },
{ label: "Отзывы", href: "/blocks/reviews", soon: true },
{ label: "Новости", href: "/blocks/news", soon: true },
{ label: "Формы контакта", href: "/blocks/contact-forms", soon: true },
{ label: "Контакт", href: "/blocks/contact", soon: true },
],
},
{
title: "Страницы",
items: [
{ label: "Главная", href: "/pages/home", soon: true },
{ label: "Заболевание", href: "/pages/disease", soon: true },
{ label: "Все врачи", href: "/pages/doctors", soon: true },
{ label: "Врач", href: "/pages/doctor", soon: true },
{ label: "Цены", href: "/pages/prices", soon: true },
{ label: "Контакты", href: "/pages/contacts", soon: true },
],
},
{
title: "Оффлайн элементы",
items: [
{ label: "Форма сотрудников", href: "/offline/uniform" },
{ label: "Бейджи", href: "/offline/badges" },
{ label: "Навигация", href: "/offline/navigation" },
{ label: "Транспорт", href: "/offline/transport" },
],
},
{
title: "Эксперименты",
items: [
{ label: "Библиотека", href: "/experiments", soon: true },
],
},
];
export function Sidebar() {
const pathname = usePathname();
return (
<aside
className="w-64 shrink-0 h-screen overflow-y-auto border-r flex flex-col"
style={{
background: "var(--bb-sidebar-bg)",
borderColor: "var(--bb-sidebar-border)",
}}
>
{/* Логотип брендбука */}
<div
className="px-5 py-4 border-b"
style={{ borderColor: "var(--bb-sidebar-border)" }}
>
<p
className="text-xs font-semibold uppercase tracking-widest mb-0.5"
style={{ color: "var(--brand-053m)" }}
>
Брендбук
</p>
<p
className="text-xs leading-tight"
style={{ color: "var(--bb-sidebar-text-muted)" }}
>
Клиника ухо, горло, нос
<br />
им. проф. Е.Н.Оленевой
</p>
</div>
{/* Навигация */}
<nav className="flex-1 px-3 py-4 space-y-5">
{NAV.map((section) => (
<div key={section.title}>
<p
className="px-2 mb-1 text-[10px] font-semibold uppercase tracking-widest"
style={{ color: "var(--bb-sidebar-section)" }}
>
{section.title}
</p>
<ul className="space-y-0.5">
{section.items.map((item) => {
const isActive = pathname === item.href;
return (
<li key={item.href}>
<Link
href={item.soon ? "#" : item.href}
className="flex items-center justify-between px-2 py-1.5 rounded-md text-sm transition-colors"
style={{
color: isActive
? "var(--brand-073m)"
: item.soon
? "var(--bb-sidebar-text-muted)"
: "var(--bb-sidebar-text)",
background: isActive
? "var(--bb-sidebar-active-bg)"
: "transparent",
fontWeight: isActive ? 500 : 400,
cursor: item.soon ? "default" : "pointer",
}}
>
{item.label}
{item.soon && (
<span
className="text-[10px] px-1.5 py-0.5 rounded"
style={{
background: "#f3f4f6",
color: "var(--bb-sidebar-section)",
}}
>
скоро
</span>
)}
</Link>
</li>
);
})}
</ul>
</div>
))}
</nav>
{/* Версия */}
<div
className="px-5 py-3 border-t text-xs"
style={{
borderColor: "var(--bb-sidebar-border)",
color: "var(--bb-sidebar-text-muted)",
}}
>
Sprint 5 · v0.5.0
</div>
</aside>
);
}