You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
177 lines
5.9 KiB
177 lines
5.9 KiB
"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/badges", soon: true }, |
|
{ label: "Алерты", href: "/components/alerts", soon: true }, |
|
{ label: "Модальные окна", href: "/components/modals", soon: true }, |
|
{ label: "Таблицы", href: "/components/tables", soon: true }, |
|
{ label: "Навигация", href: "/components/navigation", soon: true }, |
|
], |
|
}, |
|
{ |
|
title: "Блоки", |
|
items: [ |
|
{ label: "Hero", href: "/blocks/hero" }, |
|
{ label: "CEO-текст", href: "/blocks/ceo" }, |
|
{ 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 }, |
|
{ label: "Услуги", href: "/blocks/services", 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> |
|
); |
|
}
|
|
|