verstak-official-plugins/plugins/files/PLAN_FILES_IMPROVEMENTS.md

6.7 KiB
Raw Blame History

План улучшений файлового менеджера Verstak2

Архитектура: Плагин verstak.files в монорепозитории verstak-official-plugins. Код: plugins/files/frontend/src/index.js (vanilla JS, VerstakPluginRegister). API: api.files.*, api.workbench.openResource(), api.settings, api.events, api.commands.

Порядок реализации

# Feature Приоритет Зависит от
1 Контекстное меню (правый клик) 🔥 High
2 Open External / Show in Explorer 🔥 High
3 Кастомный ConfirmModal 🔥 High
4 Duplicate 🔥 High
5 Cut/Copy/Paste 🔥 High
6 Множественное выделение 🔥 High
7 Drag-and-Drop 🔥 High
8 Клавиатурная навигация (Ctrl+A, Escape, стрелки) Medium #6
9 Богатые иконки (как в v1) Medium
10 История навигации Medium
11 Rename с валидацией Medium

Feature 1: Контекстное меню (правый клик)

Описание: При правом клике на файле/папке показывать меню с действиями.

Пункты меню: Open, Open External, Show in Explorer, Rename, Duplicate, Cut, Copy, Delete — с разделителями.

Архитектура:

  • Событие contextmenu на .files-item
  • Позиционирование у курсора (event.clientX/Y)
  • Кастомный <div> с пунктами, закрывается по клику вне или Escape
  • Класс .files-context-menu для стилей

Файлы: plugins/files/frontend/src/index.js


Feature 2: Open External / Show in Explorer

Описание: Кнопки/пункты меню для открытия файла во внешнем приложении и показа папки в системном файловом менеджере.

Архитектура: В v1 использовались Wails методы OpenFile/OpenFolder. В v2 нужно договориться — либо через Go runtime (пока нет), либо через IPC/events.

На первом этапе: добавить пункты в контекстное меню, но если runtime не поддерживает — показывать путь к файлу (можно скопировать в буфер обмена).

Файлы: plugins/files/frontend/src/index.js


Feature 3: Кастомный ConfirmModal

Описание: Вместо window.confirm() — стилизованный modal с кнопками Отмена/Удалить, опасным стилем (красная кнопка).

Архитектура:

  • Функция confirmModal(message, options) возвращает Promise
  • Создаёт overlay + modal в DOM
  • Закрывается по Escape или кнопке Отмена

Файлы: plugins/files/frontend/src/index.js


Feature 4: Duplicate

Описание: Копирование файла/папки в той же папке с добавлением суффикса (напр. "filename_copy.ext", "filename_2.ext").

Архитектура:

  • Для файла: api.files.readText() + api.files.writeText() с новым именем
  • Для папки: рекурсивное копирование (сложнее, можно defer)
  • Пункт в контекстном меню: "Duplicate"

Файлы: plugins/files/frontend/src/index.js


Feature 5: Cut/Copy/Paste

Описание: Буфер обмена внутри файлового менеджера. Cut → перенос. Copy → дублирование. Paste в текущую папку.

Архитектура:

  • clipboard: { items: [...], mode: 'cut'|'copy' }
  • Клавиши Ctrl+X/C/V
  • Пункты в контекстном меню

Файлы: plugins/files/frontend/src/index.js


Feature 6: Множественное выделение

Описание: Ctrl+click (toggle), Shift+click (range), Ctrl+A (select all). Массовые операции (Trash, Copy, Paste).

Архитектура:

  • selectedPaths: Set<string> вместо selectedPath: string
  • Ctrl+click → toggle entry в Set
  • Shift+click → range select от последнего клика
  • Действия применяются ко всем выделенным

Файлы: plugins/files/frontend/src/index.js


Feature 7: Drag-and-Drop

Описание: Перемещение файлов/папок между папками через drag-and-drop.

Архитектура:

  • HTML5 DnD API: dragstart, dragover, drop на .files-item
  • При drop на папку → api.files.move()
  • Визуальная индикация (подсветка папки при наведении)
  • Отмена по Escape

Файлы: plugins/files/frontend/src/index.js


Feature 8: Клавиатурная навигация

Описание: Escape (снять выделение), Ctrl+A (select all), стрелки (навигация по строкам).

Зависит от: Feature 6 (множественное выделение)

Файлы: plugins/files/frontend/src/index.js


Feature 9: Богатые иконки

Описание: Как в v1 — отдельные SVG иконки для image, video, audio, pdf, document, spreadsheet, presentation, archive, code, text.

Архитектура: Расширить функцию fileIcon().

Файлы: plugins/files/frontend/src/index.js


Feature 10: История навигации

Описание: Кнопки Back/Forward в тулбаре, как в браузере. Хранение стека посещённых папок.

Архитектура:

  • historyStack: string[] с индексом
  • back() / forward() / push(path)

Файлы: plugins/files/frontend/src/index.js


Feature 11: Rename с валидацией

Описание: Проверять имя через API до применения. Показывать ошибку под полем, а не в placeholder.

Архитектура:

  • Проверка: не пустое, нет /, нет null byte, не .verstak
  • API коллизии: api.files.metadata(newPath) — если существует, ошибка

Файлы: plugins/files/frontend/src/index.js