From b3e16f2063a8053e0a65e374a90856c640150322 Mon Sep 17 00:00:00 2001 From: Shibo Lyu Date: Sun, 27 Apr 2025 02:39:07 +0800 Subject: [PATCH] feat[wip]: domain setup dialog --- src/lib/components/Button.svelte | 4 +- src/lib/components/Dialog.svelte | 43 ++++++++++++++++ .../GroupedList/GroupedListContainer.svelte | 16 ++++-- .../GroupedList/GroupedListItem.svelte | 5 +- .../account/profile/UsernameItem.svelte | 35 ++++++++----- .../UsernameSetupSelfhostDialog.svelte | 51 +++++++++++++++++++ 6 files changed, 133 insertions(+), 21 deletions(-) create mode 100644 src/lib/components/Dialog.svelte create mode 100644 src/routes/(app)/settings/account/profile/UsernameSetupSelfhostDialog.svelte diff --git a/src/lib/components/Button.svelte b/src/lib/components/Button.svelte index 98c016c..9b9658f 100644 --- a/src/lib/components/Button.svelte +++ b/src/lib/components/Button.svelte @@ -12,13 +12,13 @@ const className = $derived( tw( - 'text-sf-secondary bg-sb-primary ring-ss-secondary inline-flex cursor-default items-center justify-center rounded-md px-2.5 py-1 shadow-xs ring-1', + 'text-sf-secondary bg-sb-primary inset-ring-ss-secondary inline-flex cursor-default items-center justify-center rounded-md px-2.5 py-1 shadow-xs inset-ring', 'hover:ring-ss-primary font-normal transition-shadow duration-200 active:shadow-inner', variant === 'primary' && [ 'relative text-slate-50 ring-0 duration-200', 'before:absolute before:-inset-px before:rounded-[7px]', 'before:from-accent-400 before:to-accent-500 before:bg-linear-to-b before:from-40% before:ring-1 before:ring-black/10 before:ring-inset', - 'dark:before:from-accent-500 dark:before:to-accent-600 before:transition-shadow active:before:shadow-inner' + 'dark:before:from-accent-600 dark:before:to-accent-700 before:transition-shadow active:before:shadow-inner' ], externalClass ) diff --git a/src/lib/components/Dialog.svelte b/src/lib/components/Dialog.svelte new file mode 100644 index 0000000..9076862 --- /dev/null +++ b/src/lib/components/Dialog.svelte @@ -0,0 +1,43 @@ + + + + + + {#snippet child({ props, open })} + {#if open} +
+ {/if} + {/snippet} +
+ + {#snippet child({ props, open })} + {#if open} +
+ {@render children?.()} +
+ {/if} + {/snippet} +
+
+
diff --git a/src/lib/components/GroupedList/GroupedListContainer.svelte b/src/lib/components/GroupedList/GroupedListContainer.svelte index 388f084..af5c9e6 100644 --- a/src/lib/components/GroupedList/GroupedListContainer.svelte +++ b/src/lib/components/GroupedList/GroupedListContainer.svelte @@ -1,9 +1,15 @@ -
{@render children?.()}
+
+ {@render children?.()} +
diff --git a/src/lib/components/GroupedList/GroupedListItem.svelte b/src/lib/components/GroupedList/GroupedListItem.svelte index 8e873c0..39454d3 100644 --- a/src/lib/components/GroupedList/GroupedListItem.svelte +++ b/src/lib/components/GroupedList/GroupedListItem.svelte @@ -11,7 +11,10 @@ class?: string; } & ( | ({ href: string } & Omit) - | ({ onclick: Required } & Omit) + | ({ onclick: Exclude } & Omit< + HTMLButtonAttributes, + 'class' | 'onclick' + >) | Omit, 'onclick'> ); diff --git a/src/routes/(app)/settings/account/profile/UsernameItem.svelte b/src/routes/(app)/settings/account/profile/UsernameItem.svelte index b39eb9a..34afe77 100644 --- a/src/routes/(app)/settings/account/profile/UsernameItem.svelte +++ b/src/routes/(app)/settings/account/profile/UsernameItem.svelte @@ -1,10 +1,10 @@ - + (showFixDialog = true) : undefined}>
{idURLToUsername(url)}
{#snippet badge()} - {#await validate()} - - {:then result} - {#if result && !result.valid} - - + {#if isInvalid} + + {#if url && identity} + {/if} - {/await} + {/if} {/snippet}
diff --git a/src/routes/(app)/settings/account/profile/UsernameSetupSelfhostDialog.svelte b/src/routes/(app)/settings/account/profile/UsernameSetupSelfhostDialog.svelte new file mode 100644 index 0000000..6064b25 --- /dev/null +++ b/src/routes/(app)/settings/account/profile/UsernameSetupSelfhostDialog.svelte @@ -0,0 +1,51 @@ + + + + +

Setup Domain {username}

+ +
+ + + + {#snippet header()} +
+

+ For others to validate your domain as your username, put the content below at + /.well-known/blah/profile.json + under your domain. +

+ +
+ {/snippet} + + + +
+
+