From 15e2e010ec3227dae0786ebf81afe71ed0c8b011 Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Sat, 22 Aug 2026 14:02:06 +0500 Subject: [PATCH] feat: add design system components --- web/src/app.css | 13 ++++ web/src/lib/components/ui/Button.svelte | 77 +++++++++++++++++++ .../lib/components/ui/CheckboxField.svelte | 42 ++++++++++ web/src/lib/components/ui/ColorField.svelte | 25 ++++++ web/src/lib/components/ui/EmptyState.svelte | 38 +++++++++ web/src/lib/components/ui/Field.svelte | 29 +++++++ web/src/lib/components/ui/SelectField.svelte | 21 +++++ web/src/lib/components/ui/SliderField.svelte | 43 +++++++++++ web/src/lib/components/ui/TextField.svelte | 20 +++++ 9 files changed, 308 insertions(+) create mode 100644 web/src/lib/components/ui/Button.svelte create mode 100644 web/src/lib/components/ui/CheckboxField.svelte create mode 100644 web/src/lib/components/ui/ColorField.svelte create mode 100644 web/src/lib/components/ui/EmptyState.svelte create mode 100644 web/src/lib/components/ui/Field.svelte create mode 100644 web/src/lib/components/ui/SelectField.svelte create mode 100644 web/src/lib/components/ui/SliderField.svelte create mode 100644 web/src/lib/components/ui/TextField.svelte diff --git a/web/src/app.css b/web/src/app.css index c3e72ae..90737c7 100644 --- a/web/src/app.css +++ b/web/src/app.css @@ -160,6 +160,19 @@ button:disabled { border-radius: var(--radius-m); } +.control { + padding: var(--space-1) var(--space-2); + border: 1px solid var(--border); + border-radius: var(--radius-s); + background: var(--surface); + max-width: var(--control-max-width); +} + +input.control[type='number'] { + font-family: var(--font-mono); + width: 100%; +} + .error-banner { padding: var(--space-2) var(--space-3); border: 1px solid var(--danger); diff --git a/web/src/lib/components/ui/Button.svelte b/web/src/lib/components/ui/Button.svelte new file mode 100644 index 0000000..72e7b68 --- /dev/null +++ b/web/src/lib/components/ui/Button.svelte @@ -0,0 +1,77 @@ + + + + + diff --git a/web/src/lib/components/ui/CheckboxField.svelte b/web/src/lib/components/ui/CheckboxField.svelte new file mode 100644 index 0000000..745532b --- /dev/null +++ b/web/src/lib/components/ui/CheckboxField.svelte @@ -0,0 +1,42 @@ + + +
+ + +
+{#if hint} +

{hint}

+{/if} + + diff --git a/web/src/lib/components/ui/ColorField.svelte b/web/src/lib/components/ui/ColorField.svelte new file mode 100644 index 0000000..3c94e03 --- /dev/null +++ b/web/src/lib/components/ui/ColorField.svelte @@ -0,0 +1,25 @@ + + + + + + + diff --git a/web/src/lib/components/ui/EmptyState.svelte b/web/src/lib/components/ui/EmptyState.svelte new file mode 100644 index 0000000..cba7241 --- /dev/null +++ b/web/src/lib/components/ui/EmptyState.svelte @@ -0,0 +1,38 @@ + + +
+

{title}

+ {#if hint} +

{hint}

+ {/if} + {#if children} + {@render children()} + {/if} +
+ + diff --git a/web/src/lib/components/ui/Field.svelte b/web/src/lib/components/ui/Field.svelte new file mode 100644 index 0000000..a64df98 --- /dev/null +++ b/web/src/lib/components/ui/Field.svelte @@ -0,0 +1,29 @@ + + +
+ + {@render children()} + {#if hint} +

{hint}

+ {/if} +
+ + diff --git a/web/src/lib/components/ui/SelectField.svelte b/web/src/lib/components/ui/SelectField.svelte new file mode 100644 index 0000000..493dcb9 --- /dev/null +++ b/web/src/lib/components/ui/SelectField.svelte @@ -0,0 +1,21 @@ + + + + + diff --git a/web/src/lib/components/ui/SliderField.svelte b/web/src/lib/components/ui/SliderField.svelte new file mode 100644 index 0000000..9b14b02 --- /dev/null +++ b/web/src/lib/components/ui/SliderField.svelte @@ -0,0 +1,43 @@ + + + +
+ + {value} +
+
+ + diff --git a/web/src/lib/components/ui/TextField.svelte b/web/src/lib/components/ui/TextField.svelte new file mode 100644 index 0000000..2a290de --- /dev/null +++ b/web/src/lib/components/ui/TextField.svelte @@ -0,0 +1,20 @@ + + + + +