docs: udpate backlog
This commit is contained in:
+105
-38
@@ -1,5 +1,48 @@
|
|||||||
# Backlog
|
# 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
|
## Баги preview
|
||||||
|
|
||||||
Зарегистрированы при написании e2e (`web/e2e/`, `pnpm --dir web test:e2e`) и
|
Зарегистрированы при написании e2e (`web/e2e/`, `pnpm --dir web test:e2e`) и
|
||||||
@@ -13,11 +56,12 @@
|
|||||||
определяется как `tool.generate && !tool.run`, кнопка рисуется только если
|
определяется как `tool.generate && !tool.run`, кнопка рисуется только если
|
||||||
`ongenerate` прокинут, а для генераторов с дефолтным `input: "file"` — нет.
|
`ongenerate` прокинут, а для генераторов с дефолтным `input: "file"` — нет.
|
||||||
Ожидание: поля схемы + кнопка «Generate», результат-картинка по дефолтам.
|
Ожидание: поля схемы + кнопка «Generate», результат-картинка по дефолтам.
|
||||||
Fixme: `web/e2e/generators.spec.ts`.
|
Fixme: `web/e2e/generators.spec.ts`. Кнопки и не должно быть, все процессы
|
||||||
|
должны запускаться автоматически
|
||||||
2. **resize-png с дефолтами падает** — схема по умолчанию `size: 0×0` +
|
2. **resize-png с дефолтами падает** — схема по умолчанию `size: 0×0` +
|
||||||
`keepAspect: true` → при загрузке ЛЮБОГО PNG сразу `errors.resizeSize` (alert),
|
`keepAspect: true` → при загрузке ЛЮБОГО PNG сразу `errors.resizeSize`
|
||||||
результата нет. `registry-new/geometry.ts`. Ожидание: осмысленный дефолт-размер
|
(alert), результата нет. `registry-new/geometry.ts`. Ожидание: осмысленный
|
||||||
(например, исходный) либо кнопка, а не авто-ошибка.
|
дефолт-размер (например, исходный) либо кнопка, а не авто-ошибка.
|
||||||
3. **crop-png с дефолтами падает** — аналогично: `width: 0, height: 0` → сразу
|
3. **crop-png с дефолтами падает** — аналогично: `width: 0, height: 0` → сразу
|
||||||
`errors.cropSize`. `registry-new/geometry.ts`. Ожидание: базовый кроп по
|
`errors.cropSize`. `registry-new/geometry.ts`. Ожидание: базовый кроп по
|
||||||
умолчанию либо внятное предзаполнение.
|
умолчанию либо внятное предзаполнение.
|
||||||
@@ -29,32 +73,55 @@
|
|||||||
|
|
||||||
## Идеи
|
## Идеи
|
||||||
|
|
||||||
1. **Менять первый инструмент цепочки** — оценка M.
|
1. **Менять первый инструмент цепочки** — оценка M. Сейчас базовый инструмент
|
||||||
Сейчас базовый инструмент зафиксирован при открытии страницы; хочется заменить его на другой без разборки цепочки: шаги и их параметры сохраняются, вход перечитывается. Открытый вопрос: что делать с несовместимыми параметрами (text-source ↔ file).
|
зафиксирован при открытии страницы; хочется заменить его на другой без
|
||||||
|
разборки цепочки: шаги и их параметры сохраняются, вход перечитывается.
|
||||||
|
Открытый вопрос: что делать с несовместимыми параметрами (text-source ↔
|
||||||
|
file).
|
||||||
|
|
||||||
2. **UI-эксперимент: параметры между исходником и результатом** — оценка S/M.
|
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.
|
3. **Сворачивать инструменты в chain** — оценка S. Тоггл сворачивания звена до
|
||||||
Тоггл сворачивания звена до заголовка «Шаг n: название» (превью скрываются). Состояние свёрнутости помнить в workspace-pipeline.
|
заголовка «Шаг n: название» (превью скрываются). Состояние свёрнутости
|
||||||
|
помнить в workspace-pipeline.
|
||||||
|
|
||||||
4. **Несколько цепочек: сохранение и загрузка** — оценка M.
|
4. **Несколько цепочек: сохранение и загрузка** — оценка M. Именованные цепочки
|
||||||
Именованные цепочки в localStorage (список, создать/переименовать/удалить), быстрое переключение. Формат экспортного JSON расширить опциональным полем имени, старые файлы читаются как безымянные.
|
в localStorage (список, создать/переименовать/удалить), быстрое переключение.
|
||||||
|
Формат экспортного JSON расширить опциональным полем имени, старые файлы
|
||||||
|
читаются как безымянные.
|
||||||
|
|
||||||
5. **Batch-обработка архивов выбранным chain** — оценка L.
|
5. **Batch-обработка архивов выбранным chain** — оценка L. Вход — zip-архив
|
||||||
Вход — zip-архив картинок (распаковка в браузере), прогон текущего или выбранного сохранённого chain по каждому файлу, сборка результата обратно в zip для скачивания. Зависит от п.4 (выбор цепочки) и от экспортного формата pipeline JSON; прогресс и ошибки — пофайлово.
|
картинок (распаковка в браузере), прогон текущего или выбранного сохранённого
|
||||||
|
chain по каждому файлу, сборка результата обратно в zip для скачивания.
|
||||||
|
Зависит от п.4 (выбор цепочки) и от экспортного формата pipeline JSON;
|
||||||
|
прогресс и ошибки — пофайлово.
|
||||||
|
|
||||||
6. **Избранные инструменты (fav tools)** — оценка S/M.
|
6. **Избранные инструменты (fav tools)** — оценка S/M. Тоггл-звёздочка на
|
||||||
Тоггл-звёздочка на карточках каталога, результатах поиска и в шапке страницы инструмента; список id в localStorage. Избранное показывается отдельной секцией сверху каталога и поднимается в выдаче поиска (бонус к popularity при скоринге).
|
карточках каталога, результатах поиска и в шапке страницы инструмента; список
|
||||||
|
id в localStorage. Избранное показывается отдельной секцией сверху каталога и
|
||||||
|
поднимается в выдаче поиска (бонус к popularity при скоринге).
|
||||||
|
|
||||||
7. **Конвертация формата — НЕ отдельный инструмент, а выбор в кнопке Download** — оценка M/L.
|
7. **Конвертация формата — НЕ отдельный инструмент, а выбор в кнопке Download**
|
||||||
Инструменты `convert-png-to-jpg` / `convert-png-to-webp` (и др. форматы) не должны жить как самостоятельные инструменты цепочки. Вместо этого — бесшовное внедрение выбора формата/качества прямо в кнопку/диалог **Download**: юзер скачивает результат в нужном формате (mime/ext/quality), а pipeline при этом не усложняется лишним звеном.
|
— оценка M/L. Инструменты `convert-png-to-jpg` / `convert-png-to-webp` (и др.
|
||||||
**Сделано (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 для любого результата (не отдельными конвертерами);
|
**Download**: юзер скачивает результат в нужном формате (mime/ext/quality), а
|
||||||
- экспорт с лимитом размера → закрывает отложенный `reduce-to-size-png` (целевой KB, бинарный поиск по k из квантования).
|
pipeline при этом не усложняется лишним звеном. **Сделано (2026-09):**
|
||||||
Проработать вместе с достройкой download-флоу нового UI.
|
механическая часть реализована в 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. Отложен из
|
8. **`watermark-image-png` (водяной знак картинкой)** — оценка M. Отложен из
|
||||||
миграции (`archive/plan-migrate-remaining.md`). Нужна overlay-механика:
|
миграции (`archive/plan-migrate-remaining.md`). Нужна overlay-механика:
|
||||||
@@ -63,8 +130,8 @@
|
|||||||
картинки вписывается в schema-driven preview (`SchemaToolView`).
|
картинки вписывается в schema-driven preview (`SchemaToolView`).
|
||||||
|
|
||||||
9. **`png-info` (детальная информация о PNG)** — оценка M/L. Отложен из
|
9. **`png-info` (детальная информация о PNG)** — оценка M/L. Отложен из
|
||||||
миграции. Отдельный райз: exif-теги, редактирование, структурированный
|
миграции. Отдельный райз: exif-теги, редактирование, структурированный вывод;
|
||||||
вывод; нужен свой отдельный случай в UI, не «ещё один text/verdict».
|
нужен свой отдельный случай в UI, не «ещё один text/verdict».
|
||||||
|
|
||||||
10. **Region-инструменты** (censor/erase/pixelate-area/blur-area/sharpen-area/
|
10. **Region-инструменты** (censor/erase/pixelate-area/blur-area/sharpen-area/
|
||||||
reverse-area) — ждут UI выделения области на превью. Из
|
reverse-area) — ждут UI выделения области на превью. Из
|
||||||
@@ -76,8 +143,8 @@
|
|||||||
12. **Анимационные** (slow-reveal/fade/scrolling) — выход не PNG; отдельное
|
12. **Анимационные** (slow-reveal/fade/scrolling) — выход не PNG; отдельное
|
||||||
решение о формате. Из `archive/plan-gap-waves.md`.
|
решение о формате. Из `archive/plan-gap-waves.md`.
|
||||||
|
|
||||||
13. **HARD-серия** (glitch, barcode, signature-extract, handwritten-digital).
|
13. **HARD-серия** (glitch, barcode, signature-extract, handwritten-digital). Из
|
||||||
Из `archive/plan-gap-waves.md`.
|
`archive/plan-gap-waves.md`.
|
||||||
|
|
||||||
14. **Переезд старых файлов в папки `old/`** — оценка M. Шаг 37 закрытого
|
14. **Переезд старых файлов в папки `old/`** — оценка M. Шаг 37 закрытого
|
||||||
`archive/plan-composite-params.md` (и `archive/plan-migrate-remaining.md`):
|
`archive/plan-composite-params.md` (и `archive/plan-migrate-remaining.md`):
|
||||||
@@ -85,24 +152,24 @@
|
|||||||
`lib/categories.ts`, `lib/tools/**`, `lib/components/**` (кроме `kit/`) в
|
`lib/categories.ts`, `lib/tools/**`, `lib/components/**` (кроме `kit/`) в
|
||||||
`lib/old/**`; в настройке isolation-плагина — один glob-паттерн
|
`lib/old/**`; в настройке isolation-плагина — один glob-паттерн
|
||||||
(`lib/old/**`), «новое»/«общее» не меняются. Предшествует C17
|
(`lib/old/**`), «новое»/«общее» не меняются. Предшествует C17
|
||||||
(`plan-redesign.md`, Шаг 5). Гейты: svelte-check 0, тесты зелёные,
|
(`plan-redesign.md`, Шаг 5). Гейты: svelte-check 0, тесты зелёные, prettier
|
||||||
prettier чист, `lint:all` = задокументированный остаток, обе ветки открываются.
|
чист, `lint:all` = задокументированный остаток, обе ветки открываются.
|
||||||
|
|
||||||
15. **Техдолг (чинить по заведённым задачам, не игнорировать правила)**:
|
15. **Техдолг (чинить по заведённым задачам, не игнорировать правила)**:
|
||||||
- svelte-check error `ToolCard.svelte:19:36` (`goto(string)`).
|
- svelte-check error `ToolCard.svelte:19:36` (`goto(string)`).
|
||||||
- фейл `palette.test.ts` (ENOENT `src/app.css` — из-за него `pnpm test`
|
- фейл `palette.test.ts` (ENOENT `src/app.css` — из-за него `pnpm test`
|
||||||
красный, хотя тесты 607 passed).
|
красный, хотя тесты 607 passed).
|
||||||
- `lint:all`: ~335 design-tokens ошибок в старых kit-компонентах;
|
- `lint:all`: ~335 design-tokens ошибок в старых kit-компонентах;
|
||||||
неиспользуемые токены preview.css; a11y-warning `ColorField`;
|
неиспользуемые токены preview.css; a11y-warning `ColorField`; пустой
|
||||||
пустой ruleset `Toggle.svelte`.
|
ruleset `Toggle.svelte`. Целевое состояние перед переездом `old/` (см.
|
||||||
Целевое состояние перед переездом `old/` (см. №14): svelte-check 0 errors,
|
№14): svelte-check 0 errors, `pnpm test` зелёный, `lint:all` — только
|
||||||
`pnpm test` зелёный, `lint:all` — только задокументированный остаток.
|
задокументированный остаток.
|
||||||
|
|
||||||
16. **Контраст текста на акцентных кнопках — пересмотреть после готовности
|
16. **Контраст текста на акцентных кнопках — пересмотреть после готовности
|
||||||
сайта**. Текст `--color-background` на фоне `--color-main`/`--color-accent`
|
сайта**. Текст `--color-background` на фоне `--color-main`/`--color-accent`
|
||||||
(тон 48) даёт контраст ~4.1–4.3 (light) — ниже AA 4.5 для обычного текста;
|
(тон 48) даёт контраст ~4.1–4.3 (light) — ниже AA 4.5 для обычного текста;
|
||||||
`palette.test.ts` держит для кнопок порог 4.0 (AA large-text) осознанно,
|
`palette.test.ts` держит для кнопок порог 4.0 (AA large-text) осознанно, как
|
||||||
как компромисс текущего дизайна. После полного завершения редизайна
|
компромисс текущего дизайна. После полного завершения редизайна пересмотреть
|
||||||
пересмотреть тона (например поднять tone кнопок до ~55) и вернуть порог 4.5.
|
тона (например поднять tone кнопок до ~55) и вернуть порог 4.5. Также
|
||||||
Также проверить `--color-danger` (dark, тон 55): текст на нём 4.93 — ок,
|
проверить `--color-danger` (dark, тон 55): текст на нём 4.93 — ок, но
|
||||||
но light-danger тон 48 = 4.25 на границе.
|
light-danger тон 48 = 4.25 на границе.
|
||||||
|
|||||||
+1
-1
@@ -23,6 +23,6 @@
|
|||||||
%sveltekit.head%
|
%sveltekit.head%
|
||||||
</head>
|
</head>
|
||||||
<body data-sveltekit-preload-data="hover">
|
<body data-sveltekit-preload-data="hover">
|
||||||
%sveltekit.body%
|
<div style="display: contents">%sveltekit.body%</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -22,8 +22,6 @@
|
|||||||
),
|
),
|
||||||
})).filter((g) => g.tools.length > 0),
|
})).filter((g) => g.tools.length > 0),
|
||||||
);
|
);
|
||||||
|
|
||||||
// TODO: переделать расположение - категория выводится в 2 колонки, а не как сейчас - каждая категория - 1 колонка и две категории в ряд
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="catalog-page">
|
<div class="catalog-page">
|
||||||
|
|||||||
Reference in New Issue
Block a user