feat: browser list mvp

This commit is contained in:
2026-08-25 18:36:27 +05:00
parent e336cf7e86
commit 8d3a6dcc79
7 changed files with 244 additions and 134 deletions
+13 -16
View File
@@ -38,8 +38,6 @@ HTML-макеты → PNG: **headless Edge** (`--headless --screenshot`), он
в `logos/` уже лежат отобранные PNG (chrome, firefox, opera, yandex, brave)
- [x] `.gitignore`: `tools/out/`, `*.log`, `coldstart.txt`
Коммит: `chore: repo hygiene`
## Этап B — утилиты в `tools/`
Все скрипты — PowerShell, без сторонних зависимостей.
@@ -55,8 +53,6 @@ HTML-макеты → PNG: **headless Edge** (`--headless --screenshot`), он
`Stop-Process`. Решает проблему «GUI-процесс блокирует терминал агента»
- [ ] Опционально: `slint-lsp` / VS Code extension — ей для редактора, агент не зависит
Коммит: `feat(tools): visual dev loop for ai agents`
Проверка цикла: `render-refs``run-and-shot` → оба PNG существуют, агент их прочитал.
## Этап C — возвращение к no-frame окну (цель дизайна)
@@ -78,19 +74,22 @@ HTML-макеты → PNG: **headless Edge** (`--headless --screenshot`), он
Требует ручной проверки: перетаскивание мышью, Esc, центрирование на активном мониторе.
Коммит: `feat(ui): frameless transparent window with drag`
## Этап D — список браузеров (MVP-ядро)
- [ ] Раскомментировать/восстановить ListView + BrowserItem в main.slint (было закомментировано)
- [ ] Логотипы: PNG из `logos/` вместо emoji (поле icon → путь к png)
- [ ] Мок-данные 4 браузеров в VecModel (уже были в старом src/main.rs)
- [ ] Выбор кликом + подсветка selected; hover-стили
- [ ] Кнопка «Открыть» → callback → Rust: `std::process::Command(path).args(flags).arg(url)`
- [ ] URL из argv: `std::env::args().nth(1)`
- [ ] Закрытие окна после запуска
- [x] ListView + BrowserItem восстановлены в main.slint (список растягивается, карточки 84px)
- [x] Логотипы: PNG из `logos/`; `BrowserConfig.icon` теперь `image` — грузится в Rust
через `Image::load_from_path` (@image-url не умеет рантайм-пути; serde-derive
из types.slint убран — вернём в этапе E строкой в TOML)
- [x] Мок-данные 4 браузеров; selected-index = первый is_default
- [x] Выбор кликом + ring-подсветка + hover; галочка — SVG (`icons/check.svg`),
т.к. глифа U+2713 в шрифтах нет; добавлен токен `Theme.surface-item`
- [x] Чекбоксы «Запомнить выбор…»/«Всегда спрашивать» — кастомный CheckRow по макету
- [x] «Открыть» → `Command::new(path).args(flags).arg(url)`; при успехе окно скрывается
(loop завершается), при ошибке — сообщение в stderr
- [x] URL из argv (`std::env::args().nth(1)`)
Коммит: `feat: browser list mvp`
Примечание: мок-пути (firefox.exe, chrome.exe, zen.exe) вне PATH — запуск вернёт
ошибку в stderr до этапа E (автодетект/конфиг). Клик-выбор проверяется визуально.
## Этап E — конфиг и настройки
@@ -100,8 +99,6 @@ HTML-макеты → PNG: **headless Edge** (`--headless --screenshot`), он
- [ ] Автодетект установленных браузеров (реестр Windows) как fallback при отсутствии конфига
- [ ] Чтение флагов из .lnk ярлыков (крейс `lnk`) — по желанию
Коммит: `feat: config + settings page`
## Этап F — релиз
- [ ] `[profile.release]`: lto, codegen-units=1, strip