From 46da54140cd1513d93a6549c903998dc3e2cf137 Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Tue, 8 Sep 2026 22:41:17 +0500 Subject: [PATCH] docs: udpate backlog --- docs/backlog.md | 143 +++++++++++++----- web/src/app.html | 2 +- .../routes/preview/list-tools/+page.svelte | 2 - 3 files changed, 106 insertions(+), 41 deletions(-) diff --git a/docs/backlog.md b/docs/backlog.md index b33315e..3d078a7 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -1,5 +1,48 @@ # Backlog +## Мелочи всякие + +- [ ] сгенерировать или найти файлы для ручной проверки `A. Краевые PNG-файлы` +- [ ] Переделать внешний вид инструментов без настроек, например Remove alpha + channel PNG "remove-alpha-channel-png". Сейчас выглядит слишком пустым. +- [ ] Убрать описание формата в отображении исходник\результат - это должно быть + в кнопке Download +- [ ] Кнопка download должна сразу писать какой формат сейчас, быть с селектором + формата и подсвечивать предупреждение если формат не совместим (альфа + канал) +- [ ] Пересмотреть поля - Plate, Position, Font Style - сейчас второй label +- [ ] Font Style - обдумать выбор шрифта (google fonts???) как организовать + шрифты с кириллицей? сделать галочку "только с кириллицей"??? +- [ ] Посмотреть темную тему - слишком темная??? +- [ ] на картинке результате при работе дергается высота надписи (высота иконки) +- [ ] Глянуть что за ошибка (воспроизвелось на blur-png, в том числе и повторно) + [баг в хроме](https://issues.chromium.org/issues/556160936) + `Uncaught TypeError: Cannot read properties of undefined (reading 'startTime')` + `at et.reportAllChanges (anonymous:2:19429)` +- [ ] сделать загрузку картинки исходника по ctrl+v и drag-and-drop (dropzone) +- [ ] не работают генераторы картинок (create-empty-png) +- [ ] square-mask-png - проверить работу - параметры неверно считаются. width - + 100, height - 100, x - 100, y - 100, обрезает 50% на 50% картинку +- [ ] прикрутить кастомный color picker (есть в old), добавить прозрачность + (range?) +- [ ] проверить настройки range slider на crop-png - слишком большие значения +- [ ] для range slider field - добавить поле для ввода цифр и кнопку сброса + значения +- [ ] для keep Aspect field - пересчитывать второе поле, учитывать какое было + изменено +- [ ] поле ввода текста - сделать по умолчанию нормального размера, а не одну + строку для svg - форматирование или подсветку синтаксиса??? для bin\hex - + форматирование по колонкам??? для hex\bytes\rgba - пример в placeholder +- [ ] обновить страницу kit или сделать storybook +- [ ] придумать процесс редактирования и настройки pipeline - drag-n-drop, + удаление, добавление инструментов. переход один инструмент - pipeline без + перезагрузки + +## Переезд + +- [ ] составить план переноса preview -> корень, старый корень -> old +- [ ] добавить i18n в preview + ## Баги preview Зарегистрированы при написании e2e (`web/e2e/`, `pnpm --dir web test:e2e`) и @@ -13,11 +56,12 @@ определяется как `tool.generate && !tool.run`, кнопка рисуется только если `ongenerate` прокинут, а для генераторов с дефолтным `input: "file"` — нет. Ожидание: поля схемы + кнопка «Generate», результат-картинка по дефолтам. - Fixme: `web/e2e/generators.spec.ts`. + Fixme: `web/e2e/generators.spec.ts`. Кнопки и не должно быть, все процессы + должны запускаться автоматически 2. **resize-png с дефолтами падает** — схема по умолчанию `size: 0×0` + - `keepAspect: true` → при загрузке ЛЮБОГО PNG сразу `errors.resizeSize` (alert), - результата нет. `registry-new/geometry.ts`. Ожидание: осмысленный дефолт-размер - (например, исходный) либо кнопка, а не авто-ошибка. + `keepAspect: true` → при загрузке ЛЮБОГО PNG сразу `errors.resizeSize` + (alert), результата нет. `registry-new/geometry.ts`. Ожидание: осмысленный + дефолт-размер (например, исходный) либо кнопка, а не авто-ошибка. 3. **crop-png с дефолтами падает** — аналогично: `width: 0, height: 0` → сразу `errors.cropSize`. `registry-new/geometry.ts`. Ожидание: базовый кроп по умолчанию либо внятное предзаполнение. @@ -29,32 +73,55 @@ ## Идеи -1. **Менять первый инструмент цепочки** — оценка M. - Сейчас базовый инструмент зафиксирован при открытии страницы; хочется заменить его на другой без разборки цепочки: шаги и их параметры сохраняются, вход перечитывается. Открытый вопрос: что делать с несовместимыми параметрами (text-source ↔ file). +1. **Менять первый инструмент цепочки** — оценка M. Сейчас базовый инструмент + зафиксирован при открытии страницы; хочется заменить его на другой без + разборки цепочки: шаги и их параметры сохраняются, вход перечитывается. + Открытый вопрос: что делать с несовместимыми параметрами (text-source ↔ + file). 2. **UI-эксперимент: параметры между исходником и результатом** — оценка S/M. - Раскладка «Исходник → Параметры → Результат» в один ряд вместо параметров отдельным блоком снизу. Проверить на узких экранах; возможно за флагом/A-B, чтобы сравнить с текущей. - Перекрыто редизайном: старый план (`docs/archive/plan-inline-params.md`) закрыт, страницы инструментов теперь `SchemaToolView`/`SchemaPreview`. Эксперимент переосмыслить уже для нового этапа инструментов (сетка source|params|result), если понадобится. + Раскладка «Исходник → Параметры → Результат» в один ряд вместо параметров + отдельным блоком снизу. Проверить на узких экранах; возможно за флагом/A-B, + чтобы сравнить с текущей. Перекрыто редизайном: старый план + (`docs/archive/plan-inline-params.md`) закрыт, страницы инструментов теперь + `SchemaToolView`/`SchemaPreview`. Эксперимент переосмыслить уже для нового + этапа инструментов (сетка source|params|result), если понадобится. -3. **Сворачивать инструменты в chain** — оценка S. - Тоггл сворачивания звена до заголовка «Шаг n: название» (превью скрываются). Состояние свёрнутости помнить в workspace-pipeline. +3. **Сворачивать инструменты в chain** — оценка S. Тоггл сворачивания звена до + заголовка «Шаг n: название» (превью скрываются). Состояние свёрнутости + помнить в workspace-pipeline. -4. **Несколько цепочек: сохранение и загрузка** — оценка M. - Именованные цепочки в localStorage (список, создать/переименовать/удалить), быстрое переключение. Формат экспортного JSON расширить опциональным полем имени, старые файлы читаются как безымянные. +4. **Несколько цепочек: сохранение и загрузка** — оценка M. Именованные цепочки + в localStorage (список, создать/переименовать/удалить), быстрое переключение. + Формат экспортного JSON расширить опциональным полем имени, старые файлы + читаются как безымянные. -5. **Batch-обработка архивов выбранным chain** — оценка L. - Вход — zip-архив картинок (распаковка в браузере), прогон текущего или выбранного сохранённого chain по каждому файлу, сборка результата обратно в zip для скачивания. Зависит от п.4 (выбор цепочки) и от экспортного формата pipeline JSON; прогресс и ошибки — пофайлово. +5. **Batch-обработка архивов выбранным chain** — оценка L. Вход — zip-архив + картинок (распаковка в браузере), прогон текущего или выбранного сохранённого + chain по каждому файлу, сборка результата обратно в zip для скачивания. + Зависит от п.4 (выбор цепочки) и от экспортного формата pipeline JSON; + прогресс и ошибки — пофайлово. -6. **Избранные инструменты (fav tools)** — оценка S/M. - Тоггл-звёздочка на карточках каталога, результатах поиска и в шапке страницы инструмента; список id в localStorage. Избранное показывается отдельной секцией сверху каталога и поднимается в выдаче поиска (бонус к popularity при скоринге). +6. **Избранные инструменты (fav tools)** — оценка S/M. Тоггл-звёздочка на + карточках каталога, результатах поиска и в шапке страницы инструмента; список + id в localStorage. Избранное показывается отдельной секцией сверху каталога и + поднимается в выдаче поиска (бонус к popularity при скоринге). -7. **Конвертация формата — НЕ отдельный инструмент, а выбор в кнопке Download** — оценка M/L. - Инструменты `convert-png-to-jpg` / `convert-png-to-webp` (и др. форматы) не должны жить как самостоятельные инструменты цепочки. Вместо этого — бесшовное внедрение выбора формата/качества прямо в кнопку/диалог **Download**: юзер скачивает результат в нужном формате (mime/ext/quality), а pipeline при этом не усложняется лишним звеном. - **Сделано (2026-09):** механическая часть реализована в preview — `ToolEntry.output` (`OutputFormat`: mime/ext/qualityParamId) в `registry-new/types.ts`; `SchemaToolView.download()` кодирует по `output` (jpg/webp/bmp уже настроены; `png-to-bmp` переведён сюда же). - **Осталось (UX-райз «Download»):** - - выбор формата/качества прямо в кнопке/диалоге Download для любого результата (не отдельными конвертерами); - - экспорт с лимитом размера → закрывает отложенный `reduce-to-size-png` (целевой KB, бинарный поиск по k из квантования). - Проработать вместе с достройкой download-флоу нового UI. +7. **Конвертация формата — НЕ отдельный инструмент, а выбор в кнопке Download** + — оценка M/L. Инструменты `convert-png-to-jpg` / `convert-png-to-webp` (и др. + форматы) не должны жить как самостоятельные инструменты цепочки. Вместо этого + — бесшовное внедрение выбора формата/качества прямо в кнопку/диалог + **Download**: юзер скачивает результат в нужном формате (mime/ext/quality), а + pipeline при этом не усложняется лишним звеном. **Сделано (2026-09):** + механическая часть реализована в preview — `ToolEntry.output` + (`OutputFormat`: mime/ext/qualityParamId) в `registry-new/types.ts`; + `SchemaToolView.download()` кодирует по `output` (jpg/webp/bmp уже настроены; + `png-to-bmp` переведён сюда же). **Осталось (UX-райз «Download»):** + - выбор формата/качества прямо в кнопке/диалоге Download для любого + результата (не отдельными конвертерами); + - экспорт с лимитом размера → закрывает отложенный `reduce-to-size-png` + (целевой KB, бинарный поиск по k из квантования). Проработать вместе с + достройкой download-флоу нового UI. 8. **`watermark-image-png` (водяной знак картинкой)** — оценка M. Отложен из миграции (`archive/plan-migrate-remaining.md`). Нужна overlay-механика: @@ -63,8 +130,8 @@ картинки вписывается в schema-driven preview (`SchemaToolView`). 9. **`png-info` (детальная информация о PNG)** — оценка M/L. Отложен из - миграции. Отдельный райз: exif-теги, редактирование, структурированный - вывод; нужен свой отдельный случай в UI, не «ещё один text/verdict». + миграции. Отдельный райз: exif-теги, редактирование, структурированный вывод; + нужен свой отдельный случай в UI, не «ещё один text/verdict». 10. **Region-инструменты** (censor/erase/pixelate-area/blur-area/sharpen-area/ reverse-area) — ждут UI выделения области на превью. Из @@ -76,8 +143,8 @@ 12. **Анимационные** (slow-reveal/fade/scrolling) — выход не PNG; отдельное решение о формате. Из `archive/plan-gap-waves.md`. -13. **HARD-серия** (glitch, barcode, signature-extract, handwritten-digital). - Из `archive/plan-gap-waves.md`. +13. **HARD-серия** (glitch, barcode, signature-extract, handwritten-digital). Из + `archive/plan-gap-waves.md`. 14. **Переезд старых файлов в папки `old/`** — оценка M. Шаг 37 закрытого `archive/plan-composite-params.md` (и `archive/plan-migrate-remaining.md`): @@ -85,24 +152,24 @@ `lib/categories.ts`, `lib/tools/**`, `lib/components/**` (кроме `kit/`) в `lib/old/**`; в настройке isolation-плагина — один glob-паттерн (`lib/old/**`), «новое»/«общее» не меняются. Предшествует C17 - (`plan-redesign.md`, Шаг 5). Гейты: svelte-check 0, тесты зелёные, - prettier чист, `lint:all` = задокументированный остаток, обе ветки открываются. + (`plan-redesign.md`, Шаг 5). Гейты: svelte-check 0, тесты зелёные, prettier + чист, `lint:all` = задокументированный остаток, обе ветки открываются. 15. **Техдолг (чинить по заведённым задачам, не игнорировать правила)**: - svelte-check error `ToolCard.svelte:19:36` (`goto(string)`). - фейл `palette.test.ts` (ENOENT `src/app.css` — из-за него `pnpm test` красный, хотя тесты 607 passed). - `lint:all`: ~335 design-tokens ошибок в старых kit-компонентах; - неиспользуемые токены preview.css; a11y-warning `ColorField`; - пустой ruleset `Toggle.svelte`. - Целевое состояние перед переездом `old/` (см. №14): svelte-check 0 errors, - `pnpm test` зелёный, `lint:all` — только задокументированный остаток. + неиспользуемые токены preview.css; a11y-warning `ColorField`; пустой + ruleset `Toggle.svelte`. Целевое состояние перед переездом `old/` (см. + №14): svelte-check 0 errors, `pnpm test` зелёный, `lint:all` — только + задокументированный остаток. 16. **Контраст текста на акцентных кнопках — пересмотреть после готовности сайта**. Текст `--color-background` на фоне `--color-main`/`--color-accent` (тон 48) даёт контраст ~4.1–4.3 (light) — ниже AA 4.5 для обычного текста; - `palette.test.ts` держит для кнопок порог 4.0 (AA large-text) осознанно, - как компромисс текущего дизайна. После полного завершения редизайна - пересмотреть тона (например поднять tone кнопок до ~55) и вернуть порог 4.5. - Также проверить `--color-danger` (dark, тон 55): текст на нём 4.93 — ок, - но light-danger тон 48 = 4.25 на границе. + `palette.test.ts` держит для кнопок порог 4.0 (AA large-text) осознанно, как + компромисс текущего дизайна. После полного завершения редизайна пересмотреть + тона (например поднять tone кнопок до ~55) и вернуть порог 4.5. Также + проверить `--color-danger` (dark, тон 55): текст на нём 4.93 — ок, но + light-danger тон 48 = 4.25 на границе. diff --git a/web/src/app.html b/web/src/app.html index afb7b9e..2ed93b2 100644 --- a/web/src/app.html +++ b/web/src/app.html @@ -23,6 +23,6 @@ %sveltekit.head% - %sveltekit.body% +
%sveltekit.body%
diff --git a/web/src/routes/preview/list-tools/+page.svelte b/web/src/routes/preview/list-tools/+page.svelte index 2ee81e6..9aee34a 100644 --- a/web/src/routes/preview/list-tools/+page.svelte +++ b/web/src/routes/preview/list-tools/+page.svelte @@ -22,8 +22,6 @@ ), })).filter((g) => g.tools.length > 0), ); - - // TODO: переделать расположение - категория выводится в 2 колонки, а не как сейчас - каждая категория - 1 колонка и две категории в ряд