Боковая панель навигации
Сделай кнопку «Меню», по которой слева выезжает панель с навигацией: пункты «Проекты», «Команда», «Настройки», разделитель и пункт «Выйти», выделенный как опасный. Выбор пункта вызывает переданный колбэк onNavigate с ключом пункта и закрывает панель.
side-nav__mcp__claude-code__claude-opus-5__1 · 24.09.2026, 13:29:40 мск
Первый вызов модели получил 12 494 токена входа, включая системный промпт Claude Code; вызовов модели 2, каждый отправлял разговор заново, и самый большой получил 16 645 токенов. Контекст до задачи — оценка по длине текста, для русского текста она занижает число токенов в полтора-два раза.
Компилятор
Ошибок нет: все компоненты и пропсы существуют.
Линтер и покрытие
Замечаний нет.
JxButton, JxDrawer, JxMenu
Ожидались JxDrawer, JxMenu, JxButton · покрытие 100%
- get_rules({"task":"ui"}) → ~1247 токенов
- get_component_api({"name":"JxDrawer"}) → ~522 токенов
- get_component_api({"name":"JxMenu"}) → ~365 токенов
- get_component_api({"name":"JxButton","detail":"signature"}) → ~45 токенов
- get_component_api({"name":"JxDivider","detail":"signature"}) → ~23 токенов
Инструменты (search_components,get_component_api,get_component_examples,list_design_tokens,get_docs,get_rules, ~1213)
Вход 4 · выход 859 · из кэша 24 507 · в кэш 4 628 · 11 с
Рендер
Код компонента
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
import { useState } from 'react';
import { JxButton, JxDrawer, JxMenu } from '@jinx-ui/react';
export type NavKey = 'projects' | 'team' | 'settings' | 'logout';
interface AppNavProps {
onNavigate: (key: NavKey) => void;
}
export default function AppNav({ onNavigate }: AppNavProps) {
const [open, setOpen] = useState(false);
const select = (key: NavKey) => () => {
onNavigate(key);
setOpen(false);
};
return (
<>
<JxButton variant="ghost" onClick={() => setOpen(true)}>
Меню
</JxButton>
<JxDrawer open={open} onOpenChange={setOpen} title="Навигация" side="left">
<JxMenu
items={[
{ label: 'Проекты', onSelect: select('projects') },
{ label: 'Команда', onSelect: select('team') },
{ label: 'Настройки', onSelect: select('settings') },
{ type: 'divider' },
{ label: 'Выйти', danger: true, onSelect: select('logout') },
]}
/>
</JxDrawer>
</>
);
}