3.3 KiB
Why
Почти весь UI frontend уже построен на @mantine/core. Два места по-прежнему используют собственную ручную реализацию: AppBreadcrumbs (собственный BreadcrumbTrail с ручными <nav>/span/сепаратором и классами breadcrumbs-* + CSS в styles.css) и мобильный bottom-nav в AppShell (собственный <nav class="bottom-nav"> + CSS). Это технический долг: кастомный код и стили дублируют возможности поддерживаемых компонентов Mantine. Цель — заменить собственные реализации штатными компонентами Mantine там, где готовый аналог существует, без изменения пользовательского поведения.
What Changes
Заменить собственную UI-реализацию хлебных крошек (AppBreadcrumbs) на штатный компонент Mantine Breadcrumbs. Внешнее поведение не меняется: те же цепочки крошек на тех же защищённых маршрутах, ссылками остаются только предшествующие крошки, текущая страница — текст, сохраняется aria-label, адаптивное скрытие промежуточных крошек на узком экране и data-depth. Адаптивное скрытие по глубине остаётся на кастомном CSS, так как Mantine Breadcrumbs не прячет промежуточные крошки по глубине автоматически.
Scope утверждён Change Owner: заменяем только AppBreadcrumbs. Мобильная навигация AppShell (bottom-nav) выходит из scope и остаётся кастомной (wont-fix): готового штатного fixed bottom-nav в Mantine нет, миграция на мобильную навигацию Mantine AppShell не входит в этот change.
Non-goals:
- Не менять маршруты, иерархию крошек, тексты, поведение навигации и API.
- Не трогать остальной код, уже стоящий на Mantine.
- Не трогать мобильную навигацию
AppShell(bottom-nav).
Capabilities
New Capabilities
Нет.
Modified Capabilities
Нет. Заменяемая реализация не меняет внешнее (spec-level) поведение: требование app-breadcrumb-navigation уже описывает цепочки, ссылки, текущую крошку-текст и адаптивность. Чистый рефакторинг → skip_specs: true.
Impact
Затрагивает только frontend: app/ui/AppBreadcrumbs (+ его тест) и кастомные стили app/styles.css для хлебных крошек. Backend API, данные, зависимости и мобильная навигация AppShell не изменяются. Пользовательское поведение идентично текущему.