mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
refactor: reuse badge component
This commit is contained in:
@@ -82,13 +82,6 @@
|
|||||||
- [ ] придумать процесс редактирования и настройки pipeline - drag-n-drop,
|
- [ ] придумать процесс редактирования и настройки pipeline - drag-n-drop,
|
||||||
удаление, добавление инструментов. переход один инструмент - pipeline без
|
удаление, добавление инструментов. переход один инструмент - pipeline без
|
||||||
перезагрузки
|
перезагрузки
|
||||||
- [ ] `CatalogToolbar`: фильтры используют сырой `<button>`, а не `ui/Button` —
|
|
||||||
единый контрол для всей библиотеки
|
|
||||||
(`web/src/lib/components/CatalogToolbar.svelte`).
|
|
||||||
- [ ] `SchemaTextResult` вердикт-бейдж рисует руками: свои классы
|
|
||||||
`badge`/`badge-tone--{tone}` и свой CSS в `<style>` вместо
|
|
||||||
`ui/Badge.svelte` — тон и разметка бейджа живут в двух местах
|
|
||||||
(`web/src/lib/components/schema/SchemaTextResult.svelte`).
|
|
||||||
- [ ] `PreviewTile`: высота плитки задана только `min-height: clamp(...)`,
|
- [ ] `PreviewTile`: высота плитки задана только `min-height: clamp(...)`,
|
||||||
поэтому она не следует за пропорциями результата — широкий результат
|
поэтому она не следует за пропорциями результата — широкий результат
|
||||||
уезжает в узкую полосу, а высокий упирается в `max-height: 100vh`. Нужно,
|
уезжает в узкую полосу, а высокий упирается в `max-height: 100vh`. Нужно,
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
import { verdictText, verdictTone } from "$lib/i18n/schema-tool-strings";
|
import { verdictText, verdictTone } from "$lib/i18n/schema-tool-strings";
|
||||||
import { t } from "$lib/i18n/t";
|
import { t } from "$lib/i18n/t";
|
||||||
import { Copy, Download, FileText } from "@lucide/svelte";
|
import { Copy, Download, FileText } from "@lucide/svelte";
|
||||||
|
import Badge from "$lib/components/ui/Badge.svelte";
|
||||||
import IconButton from "$lib/components/ui/IconButton.svelte";
|
import IconButton from "$lib/components/ui/IconButton.svelte";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
@@ -32,14 +33,16 @@
|
|||||||
{#if kind === "verdict"}
|
{#if kind === "verdict"}
|
||||||
<div class="verdict">
|
<div class="verdict">
|
||||||
<span class="verdict-label">{t("resultCard.result")}</span>
|
<span class="verdict-label">{t("resultCard.result")}</span>
|
||||||
<div
|
<Badge
|
||||||
|
{tone}
|
||||||
|
variant="tint"
|
||||||
|
size="m"
|
||||||
data-testid="result-verdict"
|
data-testid="result-verdict"
|
||||||
class="badge badge-tone--{tone}"
|
|
||||||
role="status"
|
role="status"
|
||||||
>
|
>
|
||||||
<span class="verdict-text">{displayValue}</span>
|
{displayValue}
|
||||||
<IconButton icon={Copy} label={t("textResult.copy")} onclick={oncopy} />
|
<IconButton icon={Copy} label={t("textResult.copy")} onclick={oncopy} />
|
||||||
</div>
|
</Badge>
|
||||||
</div>
|
</div>
|
||||||
{:else}
|
{:else}
|
||||||
<div class="text-result">
|
<div class="text-result">
|
||||||
@@ -109,31 +112,4 @@
|
|||||||
letter-spacing: var(--space-text-l);
|
letter-spacing: var(--space-text-l);
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
}
|
}
|
||||||
.badge {
|
|
||||||
display: inline-flex;
|
|
||||||
align-items: center;
|
|
||||||
gap: var(--space-l);
|
|
||||||
padding: var(--space-m) var(--space-xl);
|
|
||||||
border: var(--size-border-thick) solid transparent;
|
|
||||||
border-radius: var(--radius-m);
|
|
||||||
font: var(--font-size-m) var(--font-mono);
|
|
||||||
}
|
|
||||||
.badge-tone--success {
|
|
||||||
background: var(--color-success-tint);
|
|
||||||
border-color: var(--color-success);
|
|
||||||
color: var(--color-success);
|
|
||||||
}
|
|
||||||
.badge-tone--danger {
|
|
||||||
background: var(--color-danger-tint);
|
|
||||||
border-color: var(--color-danger);
|
|
||||||
color: var(--color-danger);
|
|
||||||
}
|
|
||||||
.badge-tone--info {
|
|
||||||
background: var(--color-info-tint);
|
|
||||||
border-color: var(--color-info);
|
|
||||||
color: var(--color-info);
|
|
||||||
}
|
|
||||||
.verdict-text {
|
|
||||||
line-height: normal;
|
|
||||||
}
|
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Check } from "@lucide/svelte";
|
import { Check } from "@lucide/svelte";
|
||||||
|
import type { Snippet } from "svelte";
|
||||||
|
import type { HTMLAttributes } from "svelte/elements";
|
||||||
|
|
||||||
const ToneVariantDefine = {
|
const ToneVariantDefine = {
|
||||||
DEFAULT: "default",
|
DEFAULT: "default",
|
||||||
@@ -15,28 +17,43 @@
|
|||||||
DEFAULT: "default",
|
DEFAULT: "default",
|
||||||
OUTLINE: "outline",
|
OUTLINE: "outline",
|
||||||
CLEAR: "clear",
|
CLEAR: "clear",
|
||||||
|
TINT: "tint",
|
||||||
} as const;
|
} as const;
|
||||||
type BadgeVariant =
|
type BadgeVariant =
|
||||||
(typeof BadgeVariantDefine)[keyof typeof BadgeVariantDefine];
|
(typeof BadgeVariantDefine)[keyof typeof BadgeVariantDefine];
|
||||||
|
|
||||||
interface Props {
|
const BadgeSizeDefine = {
|
||||||
|
S: "s",
|
||||||
|
M: "m",
|
||||||
|
} as const;
|
||||||
|
type BadgeSize = (typeof BadgeSizeDefine)[keyof typeof BadgeSizeDefine];
|
||||||
|
|
||||||
|
interface Props extends HTMLAttributes<HTMLSpanElement> {
|
||||||
tone?: ToneVariant;
|
tone?: ToneVariant;
|
||||||
variant?: BadgeVariant;
|
variant?: BadgeVariant;
|
||||||
|
size?: BadgeSize;
|
||||||
check?: boolean;
|
check?: boolean;
|
||||||
label?: string;
|
label?: string;
|
||||||
|
children?: Snippet;
|
||||||
}
|
}
|
||||||
|
|
||||||
let {
|
let {
|
||||||
tone = ToneVariantDefine.DEFAULT,
|
tone = ToneVariantDefine.DEFAULT,
|
||||||
variant = BadgeVariantDefine.DEFAULT,
|
variant = BadgeVariantDefine.DEFAULT,
|
||||||
|
size = BadgeSizeDefine.S,
|
||||||
check = false,
|
check = false,
|
||||||
label = "",
|
label = "",
|
||||||
|
children,
|
||||||
|
...rest
|
||||||
}: Props = $props();
|
}: Props = $props();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<span class="badge badge-tone--{tone} badge-variant--{variant}">
|
<span
|
||||||
|
class="badge badge-tone--{tone} badge-variant--{variant} badge-size--{size}"
|
||||||
|
{...rest}
|
||||||
|
>
|
||||||
{#if check}<Check size={12} />{/if}
|
{#if check}<Check size={12} />{/if}
|
||||||
{label}
|
{#if children}{@render children()}{:else}{label}{/if}
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<style>
|
<style>
|
||||||
@@ -94,4 +111,18 @@
|
|||||||
border-color: transparent;
|
border-color: transparent;
|
||||||
color: var(--color-badge-tint);
|
color: var(--color-badge-tint);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.badge-variant--tint {
|
||||||
|
background-color: var(--color-badge-tint);
|
||||||
|
border-style: solid;
|
||||||
|
border-color: var(--color-badge-main);
|
||||||
|
border-radius: var(--radius-m);
|
||||||
|
color: var(--color-badge-main);
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-size--m {
|
||||||
|
gap: var(--space-l);
|
||||||
|
padding: var(--space-m) var(--space-xl);
|
||||||
|
font-size: var(--font-size-m);
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -147,6 +147,13 @@
|
|||||||
<Badge tone="warning" label="warning" />
|
<Badge tone="warning" label="warning" />
|
||||||
<Badge tone="info" label="info" />
|
<Badge tone="info" label="info" />
|
||||||
</SettingGroup>
|
</SettingGroup>
|
||||||
|
<SettingGroup label="variants">
|
||||||
|
<Badge tone="success" variant="outline" label="outline" />
|
||||||
|
<Badge tone="success" variant="clear" label="clear" />
|
||||||
|
<Badge tone="success" variant="tint" label="tint" />
|
||||||
|
<Badge tone="danger" variant="tint" label="tint" />
|
||||||
|
<Badge tone="info" variant="tint" size="m" label="tint m" />
|
||||||
|
</SettingGroup>
|
||||||
</div>
|
</div>
|
||||||
</Panel>
|
</Panel>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user