From 62c1cce90b9141e1155f619d4e2db2e69704d6a0 Mon Sep 17 00:00:00 2001 From: eti Date: Tue, 14 Jul 2026 02:38:02 +0200 Subject: [PATCH] web/components/ui: add ui primitives and stories Signed-off-by: eti --- web/src/lib/components/ui/Avatar.svelte | 24 ++- .../lib/components/ui/Button.stories.svelte | 47 ++++++ web/src/lib/components/ui/Button.svelte | 68 ++++---- .../components/ui/ButtonCard.stories.svelte | 39 +++++ web/src/lib/components/ui/ButtonCard.svelte | 101 ++++++++++++ .../components/ui/ButtonGroup.stories.svelte | 49 ++++++ web/src/lib/components/ui/ButtonGroup.svelte | 37 +++++ .../lib/components/ui/Checkbox.stories.svelte | 37 +++++ web/src/lib/components/ui/Checkbox.svelte | 51 ++++++ web/src/lib/components/ui/Dropdown.svelte | 148 ++++++++++++++---- web/src/lib/components/ui/DropdownItem.svelte | 50 ++++-- .../lib/components/ui/Field.stories.svelte | 76 +++++++++ web/src/lib/components/ui/Field.svelte | 41 +++++ .../lib/components/ui/Input.stories.svelte | 45 ++++++ web/src/lib/components/ui/Input.svelte | 74 +++++++++ web/src/lib/components/ui/Link.stories.svelte | 57 +++++++ web/src/lib/components/ui/Link.svelte | 109 +++++++++++++ web/src/lib/components/ui/Logo.stories.svelte | 26 +++ web/src/lib/components/ui/Logo.svelte | 14 ++ .../lib/components/ui/LogotypeSmall.svelte | 8 +- .../components/ui/Pagination.stories.svelte | 25 +++ web/src/lib/components/ui/Pagination.svelte | 135 ++++++++++++++++ .../lib/components/ui/Radio.stories.svelte | 34 ++++ web/src/lib/components/ui/Radio.svelte | 45 ++++++ .../lib/components/ui/Scaffold.stories.svelte | 38 +++++ web/src/lib/components/ui/Scaffold.svelte | 39 +++++ .../lib/components/ui/Select.stories.svelte | 65 ++++++++ web/src/lib/components/ui/Select.svelte | 61 ++++++++ web/src/lib/components/ui/Tag.stories.svelte | 24 +++ web/src/lib/components/ui/Tag.svelte | 46 ++++++ .../lib/components/ui/Textarea.stories.svelte | 44 ++++++ web/src/lib/components/ui/Textarea.svelte | 69 ++++++++ .../components/ui/Thumbnail.stories.svelte | 30 ++++ web/src/lib/components/ui/Thumbnail.svelte | 29 ++++ .../components/ui/Typography.stories.svelte | 52 ++++++ web/src/lib/components/ui/Typography.svelte | 62 ++++++++ web/src/lib/components/ui/User.stories.svelte | 39 +++++ web/src/lib/components/ui/User.svelte | 64 ++++++++ 38 files changed, 1919 insertions(+), 83 deletions(-) create mode 100644 web/src/lib/components/ui/Button.stories.svelte create mode 100644 web/src/lib/components/ui/ButtonCard.stories.svelte create mode 100644 web/src/lib/components/ui/ButtonCard.svelte create mode 100644 web/src/lib/components/ui/ButtonGroup.stories.svelte create mode 100644 web/src/lib/components/ui/ButtonGroup.svelte create mode 100644 web/src/lib/components/ui/Checkbox.stories.svelte create mode 100644 web/src/lib/components/ui/Checkbox.svelte create mode 100644 web/src/lib/components/ui/Field.stories.svelte create mode 100644 web/src/lib/components/ui/Field.svelte create mode 100644 web/src/lib/components/ui/Input.stories.svelte create mode 100644 web/src/lib/components/ui/Input.svelte create mode 100644 web/src/lib/components/ui/Link.stories.svelte create mode 100644 web/src/lib/components/ui/Link.svelte create mode 100644 web/src/lib/components/ui/Logo.stories.svelte create mode 100644 web/src/lib/components/ui/Logo.svelte create mode 100644 web/src/lib/components/ui/Pagination.stories.svelte create mode 100644 web/src/lib/components/ui/Pagination.svelte create mode 100644 web/src/lib/components/ui/Radio.stories.svelte create mode 100644 web/src/lib/components/ui/Radio.svelte create mode 100644 web/src/lib/components/ui/Scaffold.stories.svelte create mode 100644 web/src/lib/components/ui/Scaffold.svelte create mode 100644 web/src/lib/components/ui/Select.stories.svelte create mode 100644 web/src/lib/components/ui/Select.svelte create mode 100644 web/src/lib/components/ui/Tag.stories.svelte create mode 100644 web/src/lib/components/ui/Tag.svelte create mode 100644 web/src/lib/components/ui/Textarea.stories.svelte create mode 100644 web/src/lib/components/ui/Textarea.svelte create mode 100644 web/src/lib/components/ui/Thumbnail.stories.svelte create mode 100644 web/src/lib/components/ui/Thumbnail.svelte create mode 100644 web/src/lib/components/ui/Typography.stories.svelte create mode 100644 web/src/lib/components/ui/Typography.svelte create mode 100644 web/src/lib/components/ui/User.stories.svelte create mode 100644 web/src/lib/components/ui/User.svelte diff --git a/web/src/lib/components/ui/Avatar.svelte b/web/src/lib/components/ui/Avatar.svelte index 2bb3188a..76d1aa8a 100644 --- a/web/src/lib/components/ui/Avatar.svelte +++ b/web/src/lib/components/ui/Avatar.svelte @@ -1,5 +1,5 @@ -{#if src} +{#if src && !failed} {handle (failed = true)} /> {:else} diff --git a/web/src/lib/components/ui/Button.stories.svelte b/web/src/lib/components/ui/Button.stories.svelte new file mode 100644 index 00000000..f902e6a6 --- /dev/null +++ b/web/src/lib/components/ui/Button.stories.svelte @@ -0,0 +1,47 @@ + + + +Button +Save +Cancel +Delete +Confirm +Careful +Saving +Button +Go home + + +
+ + + +
+
diff --git a/web/src/lib/components/ui/Button.svelte b/web/src/lib/components/ui/Button.svelte index 7c0c9cce..7b68819d 100644 --- a/web/src/lib/components/ui/Button.svelte +++ b/web/src/lib/components/ui/Button.svelte @@ -1,43 +1,48 @@ {#if href} + diff --git a/web/src/lib/components/ui/ButtonCard.stories.svelte b/web/src/lib/components/ui/ButtonCard.stories.svelte new file mode 100644 index 00000000..35ab0849 --- /dev/null +++ b/web/src/lib/components/ui/ButtonCard.stories.svelte @@ -0,0 +1,39 @@ + + + + + + + + + +
+ + +
+
diff --git a/web/src/lib/components/ui/ButtonCard.svelte b/web/src/lib/components/ui/ButtonCard.svelte new file mode 100644 index 00000000..df5f120d --- /dev/null +++ b/web/src/lib/components/ui/ButtonCard.svelte @@ -0,0 +1,101 @@ + + + + +{#if href} + +
+ {#if Icon} + +{:else} + +{/if} diff --git a/web/src/lib/components/ui/ButtonGroup.stories.svelte b/web/src/lib/components/ui/ButtonGroup.stories.svelte new file mode 100644 index 00000000..e297808f --- /dev/null +++ b/web/src/lib/components/ui/ButtonGroup.stories.svelte @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +
+
diff --git a/web/src/lib/components/ui/ButtonGroup.svelte b/web/src/lib/components/ui/ButtonGroup.svelte new file mode 100644 index 00000000..4838bb14 --- /dev/null +++ b/web/src/lib/components/ui/ButtonGroup.svelte @@ -0,0 +1,37 @@ + + + + +
+ {@render children()} +
diff --git a/web/src/lib/components/ui/Checkbox.stories.svelte b/web/src/lib/components/ui/Checkbox.stories.svelte new file mode 100644 index 00000000..7649ff3d --- /dev/null +++ b/web/src/lib/components/ui/Checkbox.stories.svelte @@ -0,0 +1,37 @@ + + + +Item +Item +Item +Item +Item + + +
+ Unchecked + Checked + Indeterminate + Disabled + Disabled checked +
+
diff --git a/web/src/lib/components/ui/Checkbox.svelte b/web/src/lib/components/ui/Checkbox.svelte new file mode 100644 index 00000000..0cf875d7 --- /dev/null +++ b/web/src/lib/components/ui/Checkbox.svelte @@ -0,0 +1,51 @@ + + + diff --git a/web/src/lib/components/ui/Dropdown.svelte b/web/src/lib/components/ui/Dropdown.svelte index fa2eadbc..4164cc29 100644 --- a/web/src/lib/components/ui/Dropdown.svelte +++ b/web/src/lib/components/ui/Dropdown.svelte @@ -1,21 +1,21 @@
- {#if variant === 'button'} - + {#if variant === "button"} + + + {:else} {/if} - diff --git a/web/src/lib/components/ui/DropdownItem.svelte b/web/src/lib/components/ui/DropdownItem.svelte index 1dadef39..af2a3407 100644 --- a/web/src/lib/components/ui/DropdownItem.svelte +++ b/web/src/lib/components/ui/DropdownItem.svelte @@ -1,12 +1,12 @@ {#if href} - + {#if icon} {@const Glyph = icon} {:else} - +{/if} diff --git a/web/src/lib/components/ui/Logo.stories.svelte b/web/src/lib/components/ui/Logo.stories.svelte new file mode 100644 index 00000000..e4c1f3d5 --- /dev/null +++ b/web/src/lib/components/ui/Logo.stories.svelte @@ -0,0 +1,26 @@ + + + + + + +
+ + +
+
diff --git a/web/src/lib/components/ui/Logo.svelte b/web/src/lib/components/ui/Logo.svelte new file mode 100644 index 00000000..e502c4d6 --- /dev/null +++ b/web/src/lib/components/ui/Logo.svelte @@ -0,0 +1,14 @@ + + +{#if wordmark} + tangled +{:else} + tangled +{/if} diff --git a/web/src/lib/components/ui/LogotypeSmall.svelte b/web/src/lib/components/ui/LogotypeSmall.svelte index da0a3540..74ff73fb 100644 --- a/web/src/lib/components/ui/LogotypeSmall.svelte +++ b/web/src/lib/components/ui/LogotypeSmall.svelte @@ -1,4 +1,8 @@ - tangled - alpha + tangled + + alpha + diff --git a/web/src/lib/components/ui/Pagination.stories.svelte b/web/src/lib/components/ui/Pagination.stories.svelte new file mode 100644 index 00000000..42ee833d --- /dev/null +++ b/web/src/lib/components/ui/Pagination.stories.svelte @@ -0,0 +1,25 @@ + + + + + + + + diff --git a/web/src/lib/components/ui/Pagination.svelte b/web/src/lib/components/ui/Pagination.svelte new file mode 100644 index 00000000..b9ef77ff --- /dev/null +++ b/web/src/lib/components/ui/Pagination.svelte @@ -0,0 +1,135 @@ + + + + + diff --git a/web/src/lib/components/ui/Radio.stories.svelte b/web/src/lib/components/ui/Radio.stories.svelte new file mode 100644 index 00000000..dd1a1e93 --- /dev/null +++ b/web/src/lib/components/ui/Radio.stories.svelte @@ -0,0 +1,34 @@ + + + +Option +Option +Option +Option + + +
+ Option + Option + Option +
+
diff --git a/web/src/lib/components/ui/Radio.svelte b/web/src/lib/components/ui/Radio.svelte new file mode 100644 index 00000000..4bc3726d --- /dev/null +++ b/web/src/lib/components/ui/Radio.svelte @@ -0,0 +1,45 @@ + + + diff --git a/web/src/lib/components/ui/Scaffold.stories.svelte b/web/src/lib/components/ui/Scaffold.stories.svelte new file mode 100644 index 00000000..6a324c4c --- /dev/null +++ b/web/src/lib/components/ui/Scaffold.stories.svelte @@ -0,0 +1,38 @@ + + + + + +
Content
+
+
+ + + +
Content
+
+
+ + + +
Content
+
+
diff --git a/web/src/lib/components/ui/Scaffold.svelte b/web/src/lib/components/ui/Scaffold.svelte new file mode 100644 index 00000000..a661e204 --- /dev/null +++ b/web/src/lib/components/ui/Scaffold.svelte @@ -0,0 +1,39 @@ + + + + +
+ {@render children()} +
diff --git a/web/src/lib/components/ui/Select.stories.svelte b/web/src/lib/components/ui/Select.stories.svelte new file mode 100644 index 00000000..4c388f2f --- /dev/null +++ b/web/src/lib/components/ui/Select.stories.svelte @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + +
+
diff --git a/web/src/lib/components/ui/Select.svelte b/web/src/lib/components/ui/Select.svelte new file mode 100644 index 00000000..5d3463e1 --- /dev/null +++ b/web/src/lib/components/ui/Select.svelte @@ -0,0 +1,61 @@ + + + + +
+ +
diff --git a/web/src/lib/components/ui/Tag.stories.svelte b/web/src/lib/components/ui/Tag.stories.svelte new file mode 100644 index 00000000..71bc2144 --- /dev/null +++ b/web/src/lib/components/ui/Tag.stories.svelte @@ -0,0 +1,24 @@ + + +Tag +Tag +topic diff --git a/web/src/lib/components/ui/Tag.svelte b/web/src/lib/components/ui/Tag.svelte new file mode 100644 index 00000000..1e65541d --- /dev/null +++ b/web/src/lib/components/ui/Tag.svelte @@ -0,0 +1,46 @@ + + + + + + {#if Icon} + diff --git a/web/src/lib/components/ui/Textarea.stories.svelte b/web/src/lib/components/ui/Textarea.stories.svelte new file mode 100644 index 00000000..23441593 --- /dev/null +++ b/web/src/lib/components/ui/Textarea.stories.svelte @@ -0,0 +1,44 @@ + + + + + + + + + + + +
+ + {#if loading} + + {/if} +
diff --git a/web/src/lib/components/ui/Thumbnail.stories.svelte b/web/src/lib/components/ui/Thumbnail.stories.svelte new file mode 100644 index 00000000..e81c7a13 --- /dev/null +++ b/web/src/lib/components/ui/Thumbnail.stories.svelte @@ -0,0 +1,30 @@ + + + +
+ +
+
+ + +
+ + Thumbnail + +
+
diff --git a/web/src/lib/components/ui/Thumbnail.svelte b/web/src/lib/components/ui/Thumbnail.svelte new file mode 100644 index 00000000..8ab0cae3 --- /dev/null +++ b/web/src/lib/components/ui/Thumbnail.svelte @@ -0,0 +1,29 @@ + + +
+ +
+ + {#if children} + {@render children()} + {:else if title} + {title} + {/if} +
+
diff --git a/web/src/lib/components/ui/Typography.stories.svelte b/web/src/lib/components/ui/Typography.stories.svelte new file mode 100644 index 00000000..c17c25b9 --- /dev/null +++ b/web/src/lib/components/ui/Typography.stories.svelte @@ -0,0 +1,52 @@ + + + +Design that ships +Design that ships +Design that ships +Design that ships + + Tangled is a social-enabled, decentralized code collaboration platform built on the AT Protocol. + + + Tangled is a social-enabled, decentralized code collaboration platform. + +Last updated 2 hours ago. +Caption text for supporting detail. +const tangled = true; + + Renders as a div while keeping h2 styling + + + +
+ Heading 1 + Heading 2 + Heading 3 + Heading 4 + Body paragraph text. + Body strong paragraph text. + Small supporting text. + Caption text. + const scale = "type"; +
+
diff --git a/web/src/lib/components/ui/Typography.svelte b/web/src/lib/components/ui/Typography.svelte new file mode 100644 index 00000000..1c3ae50d --- /dev/null +++ b/web/src/lib/components/ui/Typography.svelte @@ -0,0 +1,62 @@ + + + + + + {@render children()} + diff --git a/web/src/lib/components/ui/User.stories.svelte b/web/src/lib/components/ui/User.stories.svelte new file mode 100644 index 00000000..3c5b54a4 --- /dev/null +++ b/web/src/lib/components/ui/User.stories.svelte @@ -0,0 +1,39 @@ + + + + + + + + +
+ + + +
+
diff --git a/web/src/lib/components/ui/User.svelte b/web/src/lib/components/ui/User.svelte new file mode 100644 index 00000000..cf239e4d --- /dev/null +++ b/web/src/lib/components/ui/User.svelte @@ -0,0 +1,64 @@ + + + + + + {#if showImage} + + {/if} + {#if showText && handle} + {handle} + {/if} + -- 2.51.2