replies timeline only, appview-less bluesky client

refactor: touch up styling a bit more

ptr.pet 2da2dc0d 73834130

verified
Changed files
+39 -3
src
+30
src/components/NotificationsPopup.svelte
···
+
<script lang="ts">
+
import Popup from './Popup.svelte';
+
+
interface Props {
+
isOpen: boolean;
+
onClose: () => void;
+
}
+
+
let { isOpen = $bindable(false), onClose }: Props = $props();
+
+
const handleClose = () => {
+
onClose();
+
};
+
</script>
+
+
<Popup
+
bind:isOpen
+
onClose={handleClose}
+
title="notifications"
+
width="w-[42vmax] max-w-2xl"
+
height="60vh"
+
showHeaderDivider={true}
+
>
+
<div class="flex h-full items-center justify-center">
+
<div class="text-center">
+
<div class="mb-4 text-6xl opacity-50">🚧</div>
+
<h3 class="text-xl font-bold opacity-80">todo</h3>
+
</div>
+
</div>
+
</Popup>
+9 -3
src/routes/+page.svelte
···
import type { AtprotoDid } from '@atcute/lexicons/syntax';
import type { PageProps } from './+page';
import { buildThreads, filterThreads, type ThreadPost } from '$lib/thread';
+
import NotificationsPopup from '$components/NotificationsPopup.svelte';
const { data: loadData }: PageProps = $props();
···
const cursors = new SvelteMap<Did, { value?: string; end: boolean }>();
let isSettingsOpen = $state(false);
+
let isNotificationsOpen = $state(false);
let reverseChronological = $state(true);
let viewOwnPosts = $state(true);
···
<div
class="rounded-t-sm"
style="
-
background: linear-gradient(to right, color-mix(in srgb, var(--nucleus-accent) 16%, var(--nucleus-bg)), color-mix(in srgb, var(--nucleus-accent2) 10%, var(--nucleus-bg)));
+
background: linear-gradient(to right, color-mix(in srgb, var(--nucleus-accent) 18%, var(--nucleus-bg)), color-mix(in srgb, var(--nucleus-accent2) 13%, var(--nucleus-bg)));
"
>
<!-- composer and error disclaimer (above thread list, not scrollable) -->
···
</div>
<div
-
class="opacity- mt-1 h-px w-full rounded-full border-0 opacity-70"
+
class="mt-1 h-px w-full opacity-50"
style="background: linear-gradient(to right, var(--nucleus-accent), var(--nucleus-accent2));"
></div>
···
</div>
<div class="grow"></div>
{@render appButton(
-
() => (isSettingsOpen = true),
+
() => (isNotificationsOpen = true),
'heroicons:bell',
'notifications',
'heroicons:bell-solid'
···
</div>
<SettingsPopup bind:isOpen={isSettingsOpen} onClose={() => (isSettingsOpen = false)} />
+
<NotificationsPopup
+
bind:isOpen={isNotificationsOpen}
+
onClose={() => (isNotificationsOpen = false)}
+
/>
{#snippet replyPost(post: ThreadPost, reverse: boolean = reverseChronological)}
<span