From 92cc5909594a8fe25f6cc70427b219e0dc22d774 Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Tue, 6 Oct 2026 15:30:24 +0500 Subject: [PATCH] feat: add info\warning badge, update size range workflow --- docs/backlog.md | 8 +- .../fields/schema/DimensionField.svelte | 20 +++- .../lib/components/schema/PreviewTile.svelte | 46 ++++++-- .../lib/components/schema/SchemaFields.svelte | 25 ++++- .../components/schema/SchemaPreview.svelte | 34 +++--- .../components/schema/SchemaResultTile.svelte | 12 +- .../components/schema/SchemaSourceTile.svelte | 5 +- .../components/schema/SchemaToolView.svelte | 25 ++++- .../schema/schema-preview-model.test.ts | 106 ++++-------------- .../components/schema/schema-preview-model.ts | 54 ++------- web/src/lib/components/ui/Badge.svelte | 2 +- web/src/lib/i18n/en.ts | 10 +- web/src/lib/i18n/ru.ts | 10 +- web/src/lib/registry-schema.test.ts | 59 ++++++++++ web/src/lib/registry-schema.ts | 91 +++++++++++++-- web/src/lib/registry/index.ts | 1 + web/src/lib/registry/registry.test.ts | 47 ++++++++ web/src/lib/registry/tools/geometry.ts | 32 +++++- web/src/lib/registry/types.ts | 9 ++ 19 files changed, 402 insertions(+), 194 deletions(-) diff --git a/docs/backlog.md b/docs/backlog.md index 93f1401..f9fc6e1 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -85,7 +85,6 @@ шрифты с кириллицей? сделать галочку "только с кириллицей"??? (решение о наборе и лицензиях: `docs/plan-platform.md` §4 — только OFL/Apache с паспортом, семейства с кириллицей) -- [ ] проверить настройки range slider на crop-png - слишком большие значения - [ ] Свести convert-страницы (`convert-png-to-jpg`, `convert-png-to-webp`, `png-to-bmp`) на один инструмент `convert` — зависит от S1f (`docs/plan-seo.md` §4). Мешает не только `quality` (он живёт в схеме @@ -159,6 +158,13 @@ - [ ] Рассмотреть необходимость всех этих пропсов в `SchemaPreview.svelte` они дублируют друг друга `ontextsource`, `onrendertext`, `oncopytext`, `ondownloadtxt`, `ondownload`, +- [ ] resize keep aspect - работает, но немного не очевидное поведение при + прямоугольной картинке и выборе размера через быстрые кнопки (например + 256х256). Воспроизведение поведения: keep aspect включено, загружаем + прямоугольную картинку 832 × 1232, картинка рескейлится до 173 × 256, + выключаем keep aspect, картинка рескейлится до 256 × 256 (с искажением + пропорций), включаем keep aspect - картинка рескейлится до размера 256 × + 379 - [ ] Переделать внешний вид инструментов без настроек, например Remove alpha channel PNG "remove-alpha-channel-png". Сейчас выглядит слишком пустым. - [ ] Пересмотреть поля - Plate, Position, Font Style - сейчас второй label diff --git a/web/src/lib/components/fields/schema/DimensionField.svelte b/web/src/lib/components/fields/schema/DimensionField.svelte index 9f79775..00a02ed 100644 --- a/web/src/lib/components/fields/schema/DimensionField.svelte +++ b/web/src/lib/components/fields/schema/DimensionField.svelte @@ -13,11 +13,25 @@ label: string; value: unknown; spec: FieldSpec; + /** Размеры входа шага: потолок осей для maxFromSource-полей. */ + sourceDims?: Dimension; onchange?: (value: Dimension, axis?: "width" | "height" | "both") => void; } - let { label, value, spec, onchange }: Props = $props(); + let { + label, + value, + spec, + sourceDims = undefined, + onchange, + }: Props = $props(); const sp = $derived(spec as DimensionSpec); + const maxW = $derived( + sp.maxFromSource && sourceDims ? sourceDims.width : sp.max, + ); + const maxH = $derived( + sp.maxFromSource && sourceDims ? sourceDims.height : sp.max, + ); const current = $derived.by(() => { const v = value as Partial | undefined; return { @@ -49,7 +63,7 @@ setAxis("width", Number((e.target as HTMLInputElement).value))} @@ -60,7 +74,7 @@ setAxis("height", Number((e.target as HTMLInputElement).value))} diff --git a/web/src/lib/components/schema/PreviewTile.svelte b/web/src/lib/components/schema/PreviewTile.svelte index 6161cd5..5228f94 100644 --- a/web/src/lib/components/schema/PreviewTile.svelte +++ b/web/src/lib/components/schema/PreviewTile.svelte @@ -2,6 +2,7 @@ import type { InputMode, ResultKind } from "$lib/registry"; import { RefreshCw } from "@lucide/svelte"; import { t } from "$lib/i18n/t"; + import Badge from "$lib/components/ui/Badge.svelte"; import type { Snippet } from "svelte"; interface Props { @@ -11,6 +12,9 @@ loading?: boolean; parts?: number; partsDims?: string; + dims?: string; + note?: string; + noteTone?: "warning" | "info"; } let { label, @@ -19,24 +23,31 @@ loading = false, parts = undefined, partsDims = undefined, + dims = undefined, + note = undefined, + noteTone = "warning", }: Props = $props();
- - {label} - {#if parts !== undefined} - - {parts} - {t("resultCard.parts")}{#if partsDims} - · {partsDims}{/if} - - {/if} + + {label}{#if parts !== undefined}: {parts} + {t("resultCard.parts")}{#if partsDims} + · {partsDims}{/if}{:else if dims}: {dims}{/if} {#if loading} {/if} + + {#if note} + + {/if} +
{@render children()} @@ -47,7 +58,10 @@ .tile figcaption { display: flex; align-items: center; + justify-content: space-between; gap: var(--space-m); + /* Резерв под бейдж: строка не прыгает, когда заметка появляется. */ + min-height: var(--space-xxl); margin-bottom: var(--space-m); font: var(--font-size-s) var(--font-mono); text-transform: uppercase; @@ -56,8 +70,18 @@ animation: rotate var(--duration-l) linear infinite; } } - .count { - margin-left: var(--space-m); + .tile-label { + display: inline-flex; + align-items: center; + gap: var(--space-m); + } + /* Место под заметки результата: бейджи-предупреждения. */ + .tile-note { + display: inline-flex; + align-items: center; + gap: var(--space-m); + } + .dims { color: var(--color-main); } .canvas { diff --git a/web/src/lib/components/schema/SchemaFields.svelte b/web/src/lib/components/schema/SchemaFields.svelte index 5f4d8c7..929e49f 100644 --- a/web/src/lib/components/schema/SchemaFields.svelte +++ b/web/src/lib/components/schema/SchemaFields.svelte @@ -1,10 +1,11 @@ {#each layoutGroups as group (group.key)} @@ -81,9 +99,10 @@ onchange(id, v, axis)} /> {/each} diff --git a/web/src/lib/components/schema/SchemaPreview.svelte b/web/src/lib/components/schema/SchemaPreview.svelte index 47a82ec..1ca4e71 100644 --- a/web/src/lib/components/schema/SchemaPreview.svelte +++ b/web/src/lib/components/schema/SchemaPreview.svelte @@ -1,13 +1,17 @@ @@ -71,7 +74,7 @@
-
- -
-