From 1d6e2fab591aceca3c4cd5e8f877bc0ad5a1e325 Mon Sep 17 00:00:00 2001 From: Bhavishy Date: Wed, 8 Apr 2026 01:18:19 +0530 Subject: [PATCH 1/2] feat: add deep link customization --- src/app/components/IntentHandler.svelte | 273 ++++++++++++++++++++++++ src/app/components/ThreadCreate.svelte | 29 +-- src/app/core/state.ts | 3 +- src/lib/components/Dialog.svelte | 3 +- src/routes/intent/+page.svelte | 16 ++ src/routes/join/+page.svelte | 2 +- src/routes/people/+page.svelte | 4 +- src/routes/settings/+layout.svelte | 2 +- 8 files changed, 302 insertions(+), 30 deletions(-) create mode 100644 src/app/components/IntentHandler.svelte create mode 100644 src/routes/intent/+page.svelte diff --git a/src/app/components/IntentHandler.svelte b/src/app/components/IntentHandler.svelte new file mode 100644 index 00000000..c598ae35 --- /dev/null +++ b/src/app/components/IntentHandler.svelte @@ -0,0 +1,273 @@ + + +{#if hasSettings} + event.preventDefault()}> +
+ +
+ Apply Customization? + A link is requesting to customize your app. +
+
+ + + {#if errors.length === 0} +

This link will apply the following changes:

+
    + {#if t} +
  • Set theme to "{t}"
  • + {/if} + {#if relays.length > 0} +
  • Add {relays.length} relay{relays.length > 1 ? "s" : ""} to your settings
  • + {/if} + {#if blossoms.length > 0} +
  • Add {blossoms.length} blossom server{blossoms.length > 1 ? "s" : ""}
  • + {/if} + {#if follows.length > 0} +
  • Follow {follows.length} person{follows.length > 1 ? "s" : ""}
  • + {/if} + {#if joins.length > 0} +
  • Join {joins.length} communit{joins.length > 1 ? "ies" : "y"}
  • + {/if} + {#if hasProfile} +
  • Update your profile metadata
  • + {/if} + {#if hasShare} +
  • Open a new post dialog in a specific room
  • + {/if} +
+ {:else} +

Some actions failed. You can abort or continue with successful actions only.

+
    + {#each errors as error} +
  • {error}
  • + {/each} +
+ {/if} +
+ + + {#if errors.length === 0} + + + {:else} + + + {/if} + +
+
+{/if} diff --git a/src/app/components/ThreadCreate.svelte b/src/app/components/ThreadCreate.svelte index 45b69f0d..24e338a9 100644 --- a/src/app/components/ThreadCreate.svelte +++ b/src/app/components/ThreadCreate.svelte @@ -18,22 +18,16 @@ import {pushToast} from "@app/util/toast" import {PROTECTED} from "@app/core/state" import {makeEditor} from "@app/editor" - import {DraftKey} from "@app/util/drafts" import {canEnforceNip70} from "@app/core/commands" - type Values = { - content?: string | object - title?: string - } - type Props = { url: string h?: string + initialContent?: string } - const {url, h}: Props = $props() - const draftKey = new DraftKey(`thread:${url}:${h ?? ""}`) - const initialValues = draftKey.get() + const {url, h, initialContent = ""}: Props = $props() + const shouldProtect = canEnforceNip70(url) const uploading = writable(false) @@ -77,29 +71,18 @@ event: makeEvent(THREAD, {content, tags}), }) - draftKey.clear() history.back() } - let title = $state(initialValues?.title ?? "") - let content = $state(initialValues?.content ?? "") - - const onChange = (json: object) => { - content = json - } - const editor = makeEditor({ + content: initialContent, url, submit, uploading, - onChange, placeholder: "What's on your mind?", - content, }) - $effect(() => { - draftKey.update({title, content}) - }) + let title: string = $state("") @@ -154,4 +137,4 @@ - + \ No newline at end of file diff --git a/src/app/core/state.ts b/src/app/core/state.ts index 195516fb..78aba6fb 100644 --- a/src/app/core/state.ts +++ b/src/app/core/state.ts @@ -259,8 +259,9 @@ export const pubkeyLink = (pubkey: string, relays = Router.get().FromPubkeys([pu export const bootstrapPubkeys = derived(userFollowList, $userFollowList => { const appPubkeys = DEFAULT_PUBKEYS.split(",") const userPubkeys = shuffle(getPubkeyTagValues(getListTags($userFollowList))) + const mergedPubkeys = userPubkeys.length > 5 ? userPubkeys : [...userPubkeys, ...appPubkeys] - return userPubkeys.length > 5 ? userPubkeys : [...userPubkeys, ...appPubkeys] + return uniq(mergedPubkeys) }) export const deriveEvent = makeDeriveEvent({ diff --git a/src/lib/components/Dialog.svelte b/src/lib/components/Dialog.svelte index 261cce23..4a9a58f3 100644 --- a/src/lib/components/Dialog.svelte +++ b/src/lib/components/Dialog.svelte @@ -6,7 +6,6 @@ import Close from "@assets/icons/close.svg?dataurl" import Icon from "@lib/components/Icon.svelte" import Button from "@lib/components/Button.svelte" - import {clearModals} from "@app/util/modal" type Props = { onClose?: any @@ -56,7 +55,7 @@
{#if !noEscape} - {/if} diff --git a/src/routes/intent/+page.svelte b/src/routes/intent/+page.svelte new file mode 100644 index 00000000..ef30915c --- /dev/null +++ b/src/routes/intent/+page.svelte @@ -0,0 +1,16 @@ + + + goto("/home")} /> diff --git a/src/routes/join/+page.svelte b/src/routes/join/+page.svelte index 1083d874..abf101ed 100644 --- a/src/routes/join/+page.svelte +++ b/src/routes/join/+page.svelte @@ -13,4 +13,4 @@ } - + goto("/home")} /> diff --git a/src/routes/people/+page.svelte b/src/routes/people/+page.svelte index 7d9937b6..a6006f42 100644 --- a/src/routes/people/+page.svelte +++ b/src/routes/people/+page.svelte @@ -17,9 +17,9 @@ const search = debounce(200, (term: string) => { if (term) { - pubkeys = $profileSearch.searchValues(term) + pubkeys = Array.from(new Set($profileSearch.searchValues(term))) } else { - pubkeys = $bootstrapPubkeys + pubkeys = Array.from(new Set($bootstrapPubkeys)) } }) diff --git a/src/routes/settings/+layout.svelte b/src/routes/settings/+layout.svelte index 4b24ac9e..3603ffb4 100644 --- a/src/routes/settings/+layout.svelte +++ b/src/routes/settings/+layout.svelte @@ -67,6 +67,6 @@ - + {@render children?.()} -- 2.52.0 From 12512c58a0c41d9205c025df754859d4451dcd7d Mon Sep 17 00:00:00 2001 From: Bhavishy Date: Wed, 8 Apr 2026 02:05:47 +0530 Subject: [PATCH 2/2] fix: resolve deep-link merge issues and restore settings/page scrolling --- src/app/components/ThreadCreate.svelte | 26 +++++++++++++++++++++++--- src/lib/components/Page.svelte | 2 +- src/routes/people/+page.svelte | 2 +- src/routes/settings/+layout.svelte | 2 +- 4 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/app/components/ThreadCreate.svelte b/src/app/components/ThreadCreate.svelte index 24e338a9..350516f2 100644 --- a/src/app/components/ThreadCreate.svelte +++ b/src/app/components/ThreadCreate.svelte @@ -18,8 +18,14 @@ import {pushToast} from "@app/util/toast" import {PROTECTED} from "@app/core/state" import {makeEditor} from "@app/editor" + import {DraftKey} from "@app/util/drafts" import {canEnforceNip70} from "@app/core/commands" + type Values = { + content?: string | object + title?: string + } + type Props = { url: string h?: string @@ -28,6 +34,9 @@ const {url, h, initialContent = ""}: Props = $props() + const draftKey = new DraftKey(`thread:${url}:${h ?? ""}`) + const initialValues = initialContent ? {content: initialContent} : draftKey.get() + const shouldProtect = canEnforceNip70(url) const uploading = writable(false) @@ -71,18 +80,29 @@ event: makeEvent(THREAD, {content, tags}), }) + draftKey.clear() history.back() } + let title: string = $state(initialValues?.title ?? "") + let content: string | object = $state(initialValues?.content ?? "") + + const onChange = (json: object) => { + content = json + } + const editor = makeEditor({ - content: initialContent, url, submit, uploading, + onChange, placeholder: "What's on your mind?", + content, }) - let title: string = $state("") + $effect(() => { + draftKey.set({title, content}) + }) @@ -137,4 +157,4 @@ - \ No newline at end of file + diff --git a/src/lib/components/Page.svelte b/src/lib/components/Page.svelte index 8ee859e6..b0879ad7 100644 --- a/src/lib/components/Page.svelte +++ b/src/lib/components/Page.svelte @@ -9,6 +9,6 @@
+ class="scroll-container relative flex-grow flex min-h-0 flex-col min-w-0 overflow-y-auto overflow-x-hidden ml-sai mb-sai mt-sai mr-sai bg-base-200 md:ml-0 md:mb-0 {props.class}"> {@render props.children?.()}
diff --git a/src/routes/people/+page.svelte b/src/routes/people/+page.svelte index a6006f42..d532dda1 100644 --- a/src/routes/people/+page.svelte +++ b/src/routes/people/+page.svelte @@ -19,7 +19,7 @@ if (term) { pubkeys = Array.from(new Set($profileSearch.searchValues(term))) } else { - pubkeys = Array.from(new Set($bootstrapPubkeys)) + pubkeys = $bootstrapPubkeys } }) diff --git a/src/routes/settings/+layout.svelte b/src/routes/settings/+layout.svelte index 3603ffb4..4b24ac9e 100644 --- a/src/routes/settings/+layout.svelte +++ b/src/routes/settings/+layout.svelte @@ -67,6 +67,6 @@ - + {@render children?.()} -- 2.52.0