From af3f37b14fafcdf2f473f89b377f55bd98993924 Mon Sep 17 00:00:00 2001 From: Shahrad Elahi Date: Mon, 6 Nov 2023 22:13:20 +0330 Subject: [PATCH] add `shadcn`, badge, and few more new components --- .../copiable-text/CopiableText.svelte | 31 +++++++ web/src/lib/components/copiable-text/index.ts | 7 ++ .../editable-text/EditableText.svelte | 73 +++++++++++++++ web/src/lib/components/editable-text/index.ts | 7 ++ web/src/lib/components/page/PageHeader.svelte | 4 +- web/src/lib/components/ui/badge/badge.svelte | 13 +++ web/src/lib/components/ui/badge/index.ts | 20 ++++ web/src/routes/CreateServerDialog.svelte | 92 +++++++++++++++++++ .../routes/[serverId]/CreatePeerDialog.svelte | 13 +++ 9 files changed, 258 insertions(+), 2 deletions(-) create mode 100644 web/src/lib/components/copiable-text/CopiableText.svelte create mode 100644 web/src/lib/components/copiable-text/index.ts create mode 100644 web/src/lib/components/editable-text/EditableText.svelte create mode 100644 web/src/lib/components/editable-text/index.ts create mode 100644 web/src/lib/components/ui/badge/badge.svelte create mode 100644 web/src/lib/components/ui/badge/index.ts create mode 100644 web/src/routes/CreateServerDialog.svelte create mode 100644 web/src/routes/[serverId]/CreatePeerDialog.svelte diff --git a/web/src/lib/components/copiable-text/CopiableText.svelte b/web/src/lib/components/copiable-text/CopiableText.svelte new file mode 100644 index 0000000..6fa6ef2 --- /dev/null +++ b/web/src/lib/components/copiable-text/CopiableText.svelte @@ -0,0 +1,31 @@ + + +
+ + { + if (e.key === 'Enter') handleCopy(); + }} + /> +
diff --git a/web/src/lib/components/copiable-text/index.ts b/web/src/lib/components/copiable-text/index.ts new file mode 100644 index 0000000..a61d73f --- /dev/null +++ b/web/src/lib/components/copiable-text/index.ts @@ -0,0 +1,7 @@ +import Root from './CopiableText.svelte'; + +export { + Root, + // + Root as CopiableText, +}; diff --git a/web/src/lib/components/editable-text/EditableText.svelte b/web/src/lib/components/editable-text/EditableText.svelte new file mode 100644 index 0000000..ae3606d --- /dev/null +++ b/web/src/lib/components/editable-text/EditableText.svelte @@ -0,0 +1,73 @@ + + +
+ {#if asChild} + + {:else} + + {value} + + {/if} + + { + if (e.key === 'Enter') { + // @ts-ignore + let val = e.target.value ?? ''; + if (!schema.safeParse(val).success) { + editMode = true; + error = true; + return; + } + value = val; + handleExitEditMode(); + } else if (e.key === 'Escape') { + editMode = false; + } + }} + /> + + { + if (e.key === 'Enter') handleEnterEditMode(); + }} + /> +
diff --git a/web/src/lib/components/editable-text/index.ts b/web/src/lib/components/editable-text/index.ts new file mode 100644 index 0000000..b3449d8 --- /dev/null +++ b/web/src/lib/components/editable-text/index.ts @@ -0,0 +1,7 @@ +import Root from './EditableText.svelte'; + +export { + Root, + // + Root as EditableText +} \ No newline at end of file diff --git a/web/src/lib/components/page/PageHeader.svelte b/web/src/lib/components/page/PageHeader.svelte index b252da3..4aad49d 100644 --- a/web/src/lib/components/page/PageHeader.svelte +++ b/web/src/lib/components/page/PageHeader.svelte @@ -11,7 +11,7 @@

WireAdmin

-
+
{#if showLogout} - + + import { cn } from '$lib/utils'; + import { badgeVariants, type Variant } from '.'; + + let className: string | undefined | null = undefined; + export let href: string | undefined = undefined; + export let variant: Variant = 'default'; + export { className as class }; + + + + + diff --git a/web/src/lib/components/ui/badge/index.ts b/web/src/lib/components/ui/badge/index.ts new file mode 100644 index 0000000..bf88fb8 --- /dev/null +++ b/web/src/lib/components/ui/badge/index.ts @@ -0,0 +1,20 @@ +import { tv, type VariantProps } from 'tailwind-variants'; +export { default as Badge } from './badge.svelte'; + +export const badgeVariants = tv({ + base: 'inline-flex items-center border rounded-full px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none select-none focus:ring-2 focus:ring-ring focus:ring-offset-2', + variants: { + variant: { + default: 'bg-primary hover:bg-primary/80 border-transparent text-primary-foreground', + secondary: 'bg-secondary hover:bg-secondary/80 border-transparent text-secondary-foreground', + success: 'bg-success hover:bg-success/80 border-transparent text-success-foreground', + destructive: 'bg-destructive hover:bg-destructive/80 border-transparent text-destructive-foreground', + outline: 'text-foreground', + }, + }, + defaultVariants: { + variant: 'default', + }, +}); + +export type Variant = VariantProps['variant']; diff --git a/web/src/routes/CreateServerDialog.svelte b/web/src/routes/CreateServerDialog.svelte new file mode 100644 index 0000000..4aa3c66 --- /dev/null +++ b/web/src/routes/CreateServerDialog.svelte @@ -0,0 +1,92 @@ + + + + + + Create Server + + +
{ + if (result.type === 'success') { + goto('/'); + } + }, + }} + > + + + Name + + + + + + + + Address + + This is the Private IP Address of the server. + + + + + + + Port + + This is the port that the WireGuard server will listen on. + + + + + + + DNS + + Optional. This is the DNS server that will be pushed to clients. + + + + + + + MTU + + Optional. Recommended to leave this blank. + + + + + + Create + +
+
+
diff --git a/web/src/routes/[serverId]/CreatePeerDialog.svelte b/web/src/routes/[serverId]/CreatePeerDialog.svelte new file mode 100644 index 0000000..5a1f55a --- /dev/null +++ b/web/src/routes/[serverId]/CreatePeerDialog.svelte @@ -0,0 +1,13 @@ + + + + +

Create Peer

+

Server Id: {serverId}

+ +