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}

+ +