Этот файл отслеживает текущее состояние разработки проекта.
Фаза: Клавиатурная навигация v1.2 Последнее обновление: 2026-01-30
Спецификация: /docs/keyboard-navigation-spec.md
- Создать
src/composables/useKeyboardNavigation.js - Реализовать state machine (IDLE → BLOCK_SELECTED_UPPER/LOWER → действие)
- Маппинг клавиш на координаты (таблица из спецификации)
- Обработка переключения табов (клавиши 1-8)
- Таймаут сброса выбора блока (1.5 сек, конфигурируемый)
- Отключение навигации при фокусе в input/textarea
- Добавить двухбуквенные подсказки в компонент ячейки
- Стилизация: приглушённый цвет, 10-12px, левый верхний угол
- Конфигурируемая прозрачность (keyHintOpacity)
- Отображение номера 1-8 на каждом табе
- Стилизация аналогично подсказкам на ячейках
- Визуальное выделение 4 ячеек выбранного блока
- Затемнение остальных ячеек
- Усиление видимости подсказок в активном блоке
- Добавить настройки в composable config:
blockSelectionTimeout(1500 мс)showKeyHints(true)keyHintOpacity(0.4)
- Добавить
aria-keyshortcutsна ячейки и табы - Screen reader: озвучивание состояния при выборе блока (отложено)
- Интеграция в ExtensionApp.vue и NewTabApp.vue
- Логика крайних случаев:
- Пустая ячейка → игнорирование
- Несуществующий таб → игнорирование
- Неверная клавиша после выбора блока → сброс
- Escape → сброс состояния
- Новая вкладка — Bookmark Deck заменяет стартовую страницу Chrome
- Оверлей —
Alt+Bоткрывает оверлей поверх любой страницы - Иконка — клик по иконке расширения в toolbar
- Оверлей поверх любой страницы
- Override New Tab — Bookmark Deck на стартовой странице
- Открытие по горячей клавише Alt+B или клику на иконку
- Закрытие оверлея: Escape, клик вне оверлея, переход по ссылке
- При клике на закладку — открытие URL в новой вкладке
- При копировании URL (Ctrl+Click) — копирование в буфер
- Хранение данных в chrome.storage.local (синхронизация между вкладками)
extension/
├── manifest.json # Manifest V3
├── background.js # Service worker
├── content.js # Внедрение оверлея
├── overlay.html # HTML страница оверлея
├── newtab.html # HTML для новой вкладки
├── assets/ # Собранный JS/CSS
│ ├── extension.js
│ ├── newtab.js
│ ├── shared-extensionBookmarkStore.js
│ └── *.css
└── icons/ # Иконки расширения
├── icon.svg
└── icon{16,32,48,128}.png
src/extension/— оверлей (ExtensionApp.vue, main.js)src/newtab/— новая вкладка (NewTabApp.vue, main.js)src/stores/extensionBookmarkStore.js— store с chrome.storagesrc/composables/useExtensionStorage.js— работа с chrome.storage.localvite.config.extension.js— конфиг сборки расширения
npm run build:extension # Собрать расширение
npm run dev:extension # Собрать с watch-режимом
npm run generate-icons # Сгенерировать PNG иконки из SVG- Открыть
chrome://extensions/ - Включить "Режим разработчика"
- "Загрузить распакованное расширение"
- Выбрать папку
extension/
- Использовать
crypto.randomUUID()для генерации ID - Для drag-n-drop рассмотреть HTML5 Drag and Drop API или библиотеку vuedraggable
- Цвета хранить как строковые идентификаторы, маппинг в utils/colors.js
- Tailwind CSS 4: используется @theme для кастомных цветов в style.css
src/
├── components/
│ ├── layout/
│ ├── tabs/
│ ├── grid/
│ ├── buffer/
│ ├── modals/
│ ├── ui/
│ └── common/
├── composables/
├── stores/
├── utils/
├── App.vue
├── main.js
└── style.css
- Селектор иконок (поле icon зарезервировано)
- Поиск по закладкам
- Импорт из браузера
- Облачная синхронизация
- Светлая тема
- Мобильная адаптация
Доработки UI/UX:
- Табы оформлены как pills, выровнены по левому краю
- Размер блока увеличен до 88px, отступы до 12px
- Расширенная палитра — 32 цвета
- Убран hover для пустых ячеек в основном режиме
Буфер:
- Панель 3×4 справа от основной сетки
- Поддержка copy/cut/paste операций
- Перетаскивание в корзину
Корзина:
- Отображение блоками в сетке 4 колонки
- Drag-n-drop в буфер и на панель
- Закрытие по клику вне попапа
Режим редактирования:
- Alt+Click — в буфер, Alt+Shift+Click — в корзину
- Динамический курсор по модификаторам
- Информационный блок clipboard с превью
Прочее:
- Закрытие модальных окон по Esc
- Автофокус при создании таба
- Ctrl+Click в основном режиме копирует URL
- При удалении вкладки блоки идут в корзину
Все 11 этапов разработки успешно выполнены.
Основные возможности:
- Сетка закладок 8×4 (32 ячейки на страницу)
- До 8 табов с drag-n-drop переупорядочиванием
- 16 цветов/градиентов для блоков
- Режим редактирования с полным CRUD
- Drag-n-drop блоков между ячейками
- Контекстное меню при конфликтах (swap/buffer/delete)
- Буфер и корзина с восстановлением
- Clipboard операции (Ctrl+клик copy, Shift+клик cut)
- Экспорт/импорт в JSON
- Сброс к defaults
- Темная тема с neon-эффектами
- Accessibility support
- Полная локализация на русский язык
npm run dev # Dev-сервер
npm run build # Production сборка
npm run preview # Превью production