From ac75665deb78d9b9459e4c34f4a9f9719a027c63 Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Thu, 27 Aug 2026 20:57:34 +0500 Subject: [PATCH] feat: add ui components --- docs/plan-redesign.md | 5 +- web/src/lib/components/kit/Badge.svelte | 43 ++++++++++ web/src/lib/components/kit/ImageCard.svelte | 32 ++++++++ web/src/lib/components/kit/MetaList.svelte | 22 +++++ web/src/lib/components/kit/MetaRow.svelte | 34 ++++++++ web/src/lib/components/kit/Panel.svelte | 20 +++++ .../lib/components/kit/PanelHeading.svelte | 40 +++++++++ web/src/lib/components/kit/PreviewTile.svelte | 32 ++++++++ web/src/lib/components/kit/Segmented.svelte | 60 ++++++++++++++ .../lib/components/kit/SettingGroup.svelte | 31 +++++++ .../lib/components/kit/SettingsFooter.svelte | 21 +++++ web/src/lib/components/kit/StepCard.svelte | 82 +++++++++++++++++++ web/src/lib/components/kit/ToolCard.svelte | 72 ++++++++++++++++ 13 files changed, 491 insertions(+), 3 deletions(-) create mode 100644 web/src/lib/components/kit/Badge.svelte create mode 100644 web/src/lib/components/kit/ImageCard.svelte create mode 100644 web/src/lib/components/kit/MetaList.svelte create mode 100644 web/src/lib/components/kit/MetaRow.svelte create mode 100644 web/src/lib/components/kit/Panel.svelte create mode 100644 web/src/lib/components/kit/PanelHeading.svelte create mode 100644 web/src/lib/components/kit/PreviewTile.svelte create mode 100644 web/src/lib/components/kit/Segmented.svelte create mode 100644 web/src/lib/components/kit/SettingGroup.svelte create mode 100644 web/src/lib/components/kit/SettingsFooter.svelte create mode 100644 web/src/lib/components/kit/StepCard.svelte create mode 100644 web/src/lib/components/kit/ToolCard.svelte diff --git a/docs/plan-redesign.md b/docs/plan-redesign.md index 02042d9..8fa10dd 100644 --- a/docs/plan-redesign.md +++ b/docs/plan-redesign.md @@ -306,10 +306,9 @@ src/routes/preview/tools/[id]/+page.svelte `[data-theme='dark']` (таблица §2). Без утилитарных классов. - [x] **[C5]** Примитивы batch 1: `AppShell`, `BlueprintGrid`, `CheckerCanvas`, `MonoLabel`, `StatusDot`/`StatusLine`. -- [ ] **[C6]** Примитивы batch 2: `Panel`, `PanelHeading`, `SettingGroup`, +- [x] **[C6]** Примитивы batch 2: `Panel`, `PanelHeading`, `SettingGroup`, `SettingsFooter`, `MetaRow`/`MetaList`, `Segmented`, `Badge`, `StepCard`, - `ToolCard`, `ImageCard`/`PreviewTile`. _(при превышении 500 строк — - разбить на C6a/C6b)_ + `ToolCard`, `ImageCard`/`PreviewTile`. - [ ] **[C7]** Контролы: `Icon`, `IconButton`, `Button`, `Field`, `SliderField`, `ColorField`, `TextField`, `SelectField`, `CheckboxField`, `Toggle`, `SegmentedControl`, `EmptyState`, `CodeBlock`, `DownloadButton`. diff --git a/web/src/lib/components/kit/Badge.svelte b/web/src/lib/components/kit/Badge.svelte new file mode 100644 index 0000000..dbcb752 --- /dev/null +++ b/web/src/lib/components/kit/Badge.svelte @@ -0,0 +1,43 @@ + + + + {#if children}{@render children()}{/if} + + + diff --git a/web/src/lib/components/kit/ImageCard.svelte b/web/src/lib/components/kit/ImageCard.svelte new file mode 100644 index 0000000..d96fc56 --- /dev/null +++ b/web/src/lib/components/kit/ImageCard.svelte @@ -0,0 +1,32 @@ + + +
+ {label} +
{@render children()}
+
+ + diff --git a/web/src/lib/components/kit/MetaList.svelte b/web/src/lib/components/kit/MetaList.svelte new file mode 100644 index 0000000..199a6b0 --- /dev/null +++ b/web/src/lib/components/kit/MetaList.svelte @@ -0,0 +1,22 @@ + + +
+ {#each items as item (item.caption)} + + {/each} +
+ + diff --git a/web/src/lib/components/kit/MetaRow.svelte b/web/src/lib/components/kit/MetaRow.svelte new file mode 100644 index 0000000..27d04f4 --- /dev/null +++ b/web/src/lib/components/kit/MetaRow.svelte @@ -0,0 +1,34 @@ + + +
+ {caption} + {value} +
+ + diff --git a/web/src/lib/components/kit/Panel.svelte b/web/src/lib/components/kit/Panel.svelte new file mode 100644 index 0000000..1c96b14 --- /dev/null +++ b/web/src/lib/components/kit/Panel.svelte @@ -0,0 +1,20 @@ + + +
+ {@render children()} +
+ + diff --git a/web/src/lib/components/kit/PanelHeading.svelte b/web/src/lib/components/kit/PanelHeading.svelte new file mode 100644 index 0000000..2f421ad --- /dev/null +++ b/web/src/lib/components/kit/PanelHeading.svelte @@ -0,0 +1,40 @@ + + +
+
+ {#if eyebrow}{eyebrow}{/if} + {title} +
+ {#if actions}
{@render actions()}
{/if} +
+ + diff --git a/web/src/lib/components/kit/PreviewTile.svelte b/web/src/lib/components/kit/PreviewTile.svelte new file mode 100644 index 0000000..10575a2 --- /dev/null +++ b/web/src/lib/components/kit/PreviewTile.svelte @@ -0,0 +1,32 @@ + + +
+ {label} +
{@render children()}
+
+ + diff --git a/web/src/lib/components/kit/Segmented.svelte b/web/src/lib/components/kit/Segmented.svelte new file mode 100644 index 0000000..241bc9e --- /dev/null +++ b/web/src/lib/components/kit/Segmented.svelte @@ -0,0 +1,60 @@ + + +
+ {#each options as opt (opt.value)} + + {/each} +
+ + diff --git a/web/src/lib/components/kit/SettingGroup.svelte b/web/src/lib/components/kit/SettingGroup.svelte new file mode 100644 index 0000000..fb01942 --- /dev/null +++ b/web/src/lib/components/kit/SettingGroup.svelte @@ -0,0 +1,31 @@ + + +
+ {label} +
{@render children()}
+
+ + diff --git a/web/src/lib/components/kit/SettingsFooter.svelte b/web/src/lib/components/kit/SettingsFooter.svelte new file mode 100644 index 0000000..be3bdac --- /dev/null +++ b/web/src/lib/components/kit/SettingsFooter.svelte @@ -0,0 +1,21 @@ + + + + + diff --git a/web/src/lib/components/kit/StepCard.svelte b/web/src/lib/components/kit/StepCard.svelte new file mode 100644 index 0000000..899466a --- /dev/null +++ b/web/src/lib/components/kit/StepCard.svelte @@ -0,0 +1,82 @@ + + +
+
+ + {index.toString().padStart(2, "0")} + {#if type}{type}{/if} + {#if title}{title}{/if} + +
+ {#if children} +
{@render children()}
+ {/if} +
+ + diff --git a/web/src/lib/components/kit/ToolCard.svelte b/web/src/lib/components/kit/ToolCard.svelte new file mode 100644 index 0000000..2006a6f --- /dev/null +++ b/web/src/lib/components/kit/ToolCard.svelte @@ -0,0 +1,72 @@ + + + + + {#if icon}{@render icon()}{/if} + + {index !== undefined ? index.toString().padStart(2, "0") : ""} + + + {title} + {#if description}{description}{/if} + + + + +