diff --git a/src/lib/components/qr/qrOverlay.svelte.ts b/src/lib/components/qr/qrOverlay.svelte.ts
index a4d7499..7487326 100644
--- a/src/lib/components/qr/qrOverlay.svelte.ts
+++ b/src/lib/components/qr/qrOverlay.svelte.ts
@@ -12,19 +12,23 @@ export function unregisterQRModal() {
}
export function qrOverlay(
- node: HTMLAnchorElement,
- params: { context?: QRContext; disabled?: boolean } = {}
+ node: HTMLElement,
+ params: { href?: string; context?: QRContext; disabled?: boolean } = {}
) {
const LONG_PRESS_DURATION = 500;
let longPressTimer: ReturnType
| null = null;
let isLongPress = false;
+ function getHref() {
+ return params.href || (node as HTMLAnchorElement).href || '';
+ }
+
function startLongPress() {
if (params.disabled) return;
isLongPress = false;
longPressTimer = setTimeout(() => {
isLongPress = true;
- openModal?.(node.href, params.context ?? {});
+ openModal?.(getHref(), params.context ?? {});
}, LONG_PRESS_DURATION);
}
@@ -45,7 +49,7 @@ export function qrOverlay(
function handleContextMenu(e: MouseEvent) {
if (params.disabled) return;
e.preventDefault();
- openModal?.(node.href, params.context ?? {});
+ openModal?.(getHref(), params.context ?? {});
}
node.addEventListener('pointerdown', startLongPress);
@@ -56,7 +60,7 @@ export function qrOverlay(
node.addEventListener('contextmenu', handleContextMenu);
return {
- update(newParams: { context?: QRContext; disabled?: boolean }) {
+ update(newParams: { href?: string; context?: QRContext; disabled?: boolean }) {
params = newParams;
},
destroy() {
diff --git a/src/lib/website/Profile.svelte b/src/lib/website/Profile.svelte
index ae94f9c..6561b78 100644
--- a/src/lib/website/Profile.svelte
+++ b/src/lib/website/Profile.svelte
@@ -8,7 +8,7 @@
import { getDescription, getName } from '$lib/helper';
import { page } from '$app/state';
import type { ActorIdentifier } from '@atcute/lexicons';
- import QRCodeModal from '$lib/components/qr/QRCodeModal.svelte';
+ import { qrOverlay } from '$lib/components/qr/qrOverlay.svelte';
let {
data,
@@ -22,28 +22,7 @@
renderer.link = ({ href, title, text }) =>
`${text}`;
- let qrOpen = $state(false);
- let longPressTimer: ReturnType | null = null;
-
- const profileUrl = $derived(`${page.url}/${data.handle}`);
-
- function startLongPress() {
- longPressTimer = setTimeout(() => {
- qrOpen = true;
- }, 500);
- }
-
- function cancelLongPress() {
- if (longPressTimer) {
- clearTimeout(longPressTimer);
- longPressTimer = null;
- }
- }
-
- function handleContextMenu(e: MouseEvent) {
- e.preventDefault();
- qrOpen = true;
- }
+ const profileUrl = $derived(`${page.url.origin}/${data.handle}`);
@@ -51,14 +30,15 @@
class="mx-auto flex max-w-lg flex-col justify-between px-8 @5xl/wrapper:fixed @5xl/wrapper:h-screen @5xl/wrapper:w-1/4 @5xl/wrapper:max-w-none @5xl/wrapper:px-12"
>
-
-
{#if data.profile.avatar}
![]()
{/if}
-
-
+
{getName(data)}