HIGH: - chat: действия над сообщением доступны на мобильном (меню ⋯) - iOS-зум: базовые input/textarea text-base, auth-экраны 16px - контент не перекрыт нижней навигацией на iPhone (safe-area) - контрасты: billing-оверлей, бот-кнопка, заголовки задач (text-primary) - клавиатура: входящие на Главной, aria-label нижней навигации, триггер чата button - confirm() → AlertDialog (сайдбар, чат, настройки) - счётчики непрочитанных 7-8px → 10px MEDIUM: - офлайн-баннеры и бейджи на токенах warning/success/info/destructive - transition-all → точечные свойства в примитивах ui - шрифты: Inter без дублей (24 семейства → 2), letter-spacing с body убран - prefers-reduced-motion kill-switch - autocomplete + aria на auth/профиле, ошибки пароля у поля - SPA: document.title + фокус на main при навигации, тост с action без таймера - FormEditor: превью на Dialog, табы скроллятся на мобильном, без инлайн-стилей - empty states с запросом и «Сбросить фильтры», UX-тексты
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { Plus } from 'lucide-react';
|
|
import { useLocation } from 'wouter';
|
|
import { CreateBookmarkModal } from '@/components/CreateBookmarkModal';
|
|
import { Button } from '@/components/ui/button';
|
|
|
|
const BOOKMARKABLE_PATHS = [
|
|
'/forms/',
|
|
'/tasks/',
|
|
'/dashboard',
|
|
'/kanban/',
|
|
'/reports/',
|
|
'/home',
|
|
];
|
|
|
|
export function AddBookmarkFAB() {
|
|
const [location] = useLocation();
|
|
|
|
const isBookmarkable = BOOKMARKABLE_PATHS.some((path) => location === path || location.startsWith(path));
|
|
if (!isBookmarkable) return null;
|
|
|
|
const currentUrl = typeof window !== 'undefined' ? window.location.pathname + window.location.search : location;
|
|
|
|
return (
|
|
<CreateBookmarkModal
|
|
defaultUrl={currentUrl}
|
|
trigger={
|
|
<Button
|
|
size="icon"
|
|
className="fixed bottom-[calc(4rem+max(12px,env(safe-area-inset-bottom)))] right-[calc(1rem+env(safe-area-inset-right))] z-40 rounded-full shadow-lg md:hidden"
|
|
aria-label="Добавить закладку"
|
|
>
|
|
<Plus className="w-5 h-5" aria-hidden="true" />
|
|
</Button>
|
|
}
|
|
/>
|
|
);
|
|
}
|