···
import { ActorIdentifier, Did, Handle, Nsid } from "@atcute/lexicons";
import { A, useLocation, useNavigate, useParams } from "@solidjs/router";
···
const did = params.repo!;
+
// Handle scrolling to a collection group when hash is like #collections:app.bsky
+
const hash = location.hash;
+
if (hash.startsWith("#collections:")) {
+
const authority = hash.slice(13);
+
requestAnimationFrame(() => {
+
const element = document.getElementById(`collection-${authority}`);
+
if (element) element.scrollIntoView({ behavior: "instant", block: "start" });
const RepoTab = (props: {
tab: "collections" | "backlinks" | "identity" | "blobs" | "logs";
+
const isActive = () => {
+
if (!error() && props.tab === "collections") return true;
+
if (!!error() && props.tab === "identity") return true;
+
if (props.tab === "collections")
+
return location.hash === "#collections" || location.hash.startsWith("#collections:");
+
return location.hash === `#${props.tab}`;
+
<A class="flex items-center" href={`/at://${params.repo}#${props.tab}`}>
+
"flex items-center border-b-2": true,
+
"border-transparent hover:border-neutral-400 dark:hover:border-neutral-600":
const getRotationKeys = async () => {
···
+
<Show when={!error() && (!location.hash || location.hash.startsWith("#collections"))}>
<Tooltip text="Filter collections">
class="flex items-center rounded-sm p-1.5 hover:bg-neutral-200 active:bg-neutral-300 dark:hover:bg-neutral-700 dark:active:bg-neutral-600"
···
+
<Show when={nsids() && (!location.hash || location.hash.startsWith("#collections"))}>
<Show when={showFilter()}>
···
+
<div class="flex flex-col text-sm wrap-anywhere" classList={{ "-mt-1": !showFilter() }}>
each={Object.keys(nsids() ?? {}).filter((authority) =>
···
const reversedDomain = authority.split(".").reverse().join(".");
const [faviconLoaded, setFaviconLoaded] = createSignal(false);
+
const isHighlighted = () => location.hash === `#collections:${authority}`;
+
id={`collection-${authority}`}
+
class="group flex items-start gap-2 rounded-lg p-1 transition-colors"
+
"dark:hover:bg-dark-200 hover:bg-neutral-200": !isHighlighted(),
+
"bg-blue-100 dark:bg-blue-500/25": isHighlighted(),
+
href={`#collections:${authority}`}
+
class="relative flex h-5 w-4 shrink-0 items-center justify-center hover:opacity-70"
+
<span class="iconify lucide--link absolute top-1/2 -left-5 -translate-y-1/2 opacity-0 transition-opacity group-hover:opacity-100" />
<Show when={!faviconLoaded()}>
<span class="iconify lucide--globe size-4 text-neutral-400 dark:text-neutral-500" />
···
onLoad={() => setFaviconLoaded(true)}
onError={() => setFaviconLoaded(false)}
<div class="flex flex-1 flex-col">
each={nsids()?.[authority].nsids.filter((nsid) =>