···
import { A, Params, useLocation } from "@solidjs/router";
import { createEffect, createSignal, Show } from "solid-js";
import { didDocCache, labelerCache } from "../utils/api";
4
-
import { CopyMenu, DropdownMenu, MenuProvider } from "./dropdown";
4
+
import { addToClipboard } from "../utils/copy";
import Tooltip from "./tooltip";
export const [pds, setPDS] = createSignal<string>();
9
+
const CopyButton = (props: { content: string }) => {
15
+
e.stopPropagation();
16
+
addToClipboard(props.content);
18
+
class={`hidden items-center rounded p-0.5 text-base text-neutral-500 transition-all duration-200 group-hover:flex hover:bg-neutral-200/70 hover:text-neutral-600 active:bg-neutral-300/70 sm:p-1 dark:text-neutral-400 dark:hover:bg-neutral-700/70 dark:hover:text-neutral-300 dark:active:bg-neutral-600/70`}
19
+
aria-label="Copy to clipboard"
21
+
<span class="iconify lucide--link"></span>
export const NavBar = (props: { params: Params }) => {
const location = useLocation();
···
47
-
<Show when={props.params.repo}>
51
-
buttonClass="rounded p-0.5 sm:p-1 text-base transition-all duration-200 hover:bg-neutral-200/70 active:bg-neutral-300/70 dark:hover:bg-neutral-700/70 dark:active:bg-neutral-600/70"
52
-
menuClass="top-7 p-2 text-xs"
55
-
<CopyMenu copyContent={pds()!} label="Copy PDS" />
57
-
<CopyMenu copyContent={props.params.repo} label="Copy DID" />
59
-
copyContent={`at://${props.params.repo}${props.params.collection ? `/${props.params.collection}` : ""}${props.params.rkey ? `/${props.params.rkey}` : ""}`}
65
+
<CopyButton content={pds()!} />
···
88
-
<Tooltip text={showHandle() ? "Show DID" : "Show handle"}>
90
-
class="flex items-center rounded p-0.5 text-base transition-all duration-200 hover:bg-neutral-200/70 active:bg-neutral-300/70 sm:p-1 dark:hover:bg-neutral-700/70 dark:active:bg-neutral-600/70"
92
-
localStorage.showHandle = !showHandle();
93
-
setShowHandle(!showHandle());
97
-
class={`iconify shrink-0 transition-transform duration-300 ease-in-out ${showHandle() ? "rotate-y-180" : ""} lucide--arrow-left-right`}
90
+
<div class="flex items-center gap-0.5">
91
+
<CopyButton content={`at://${props.params.repo}`} />
92
+
<Tooltip text={showHandle() ? "Show DID" : "Show handle"}>
94
+
class="flex items-center rounded p-0.5 text-base transition-all duration-200 hover:bg-neutral-200/70 active:bg-neutral-300/70 sm:p-1 dark:hover:bg-neutral-700/70 dark:active:bg-neutral-600/70"
96
+
localStorage.showHandle = !showHandle();
97
+
setShowHandle(!showHandle());
101
+
class={`iconify shrink-0 transition-transform duration-300 ease-in-out ${showHandle() ? "rotate-y-180" : ""} lucide--arrow-left-right`}
···
(props.params.repo in labelerCache || location.pathname.endsWith("/labels"))
111
-
<div class="group flex items-center gap-1.5 rounded-md border-[0.5px] border-transparent bg-transparent px-2 transition-all duration-200 hover:border-neutral-300 hover:bg-neutral-50/40 dark:hover:border-neutral-600 dark:hover:bg-neutral-800/40">
112
-
<span class="iconify lucide--tag text-neutral-500 transition-colors duration-200 group-hover:text-neutral-700 dark:text-neutral-400 dark:group-hover:text-neutral-200"></span>
115
-
href={`/at://${props.params.repo}/labels`}
117
-
inactiveClass="text-blue-400 grow font-medium hover:text-blue-500 transition-colors duration-150 dark:hover:text-blue-300"
116
+
<div class="group flex items-center justify-between gap-1.5 rounded-md border-[0.5px] border-transparent bg-transparent px-2 transition-all duration-200 hover:border-neutral-300 hover:bg-neutral-50/40 dark:hover:border-neutral-600 dark:hover:bg-neutral-800/40">
117
+
<div class="flex basis-full items-center gap-1.5">
118
+
<span class="iconify lucide--tag text-neutral-500 transition-colors duration-200 group-hover:text-neutral-700 dark:text-neutral-400 dark:group-hover:text-neutral-200"></span>
121
+
href={`/at://${props.params.repo}/labels`}
123
+
inactiveClass="text-blue-400 grow font-medium hover:text-blue-500 transition-colors duration-150 dark:hover:text-blue-300"
128
+
<CopyButton content={`at://${props.params.repo}/labels`} />
<Show when={props.params.collection}>
126
-
<div class="group flex items-center gap-1.5 rounded-md border-[0.5px] border-transparent bg-transparent px-2 transition-all duration-200 hover:border-neutral-300 hover:bg-neutral-50/40 dark:hover:border-neutral-600 dark:hover:bg-neutral-800/40">
127
-
<Tooltip text="Collection">
128
-
<span class="iconify lucide--folder-open text-neutral-500 transition-colors duration-200 group-hover:text-neutral-700 dark:text-neutral-400 dark:group-hover:text-neutral-200"></span>
131
-
when={props.params.rkey}
132
-
fallback={<span class="py-0.5 font-medium">{props.params.collection}</span>}
136
-
href={`/at://${props.params.repo}/${props.params.collection}`}
137
-
inactiveClass="text-blue-400 grow py-0.5 font-medium hover:text-blue-500 transition-colors duration-150 dark:hover:text-blue-300"
134
+
<div class="group flex items-center justify-between gap-1.5 rounded-md border-[0.5px] border-transparent bg-transparent px-2 transition-all duration-200 hover:border-neutral-300 hover:bg-neutral-50/40 dark:hover:border-neutral-600 dark:hover:bg-neutral-800/40">
135
+
<div class="flex basis-full items-center gap-1.5">
136
+
<Tooltip text="Collection">
137
+
<span class="iconify lucide--folder-open text-neutral-500 transition-colors duration-200 group-hover:text-neutral-700 dark:text-neutral-400 dark:group-hover:text-neutral-200"></span>
140
+
when={props.params.rkey}
141
+
fallback={<span class="py-0.5 font-medium">{props.params.collection}</span>}
139
-
{props.params.collection}
145
+
href={`/at://${props.params.repo}/${props.params.collection}`}
146
+
inactiveClass="text-blue-400 grow py-0.5 font-medium hover:text-blue-500 transition-colors duration-150 dark:hover:text-blue-300"
148
+
{props.params.collection}
152
+
<CopyButton content={`at://${props.params.repo}/${props.params.collection}`} />
<Show when={props.params.rkey}>
147
-
<div class="group flex items-center gap-1.5 rounded-md border-[0.5px] border-transparent bg-transparent px-2 py-0.5 transition-all duration-200 hover:border-neutral-300 hover:bg-neutral-50/40 dark:hover:border-neutral-600 dark:hover:bg-neutral-800/40">
148
-
<Tooltip text="Record">
149
-
<span class="iconify lucide--file-json text-neutral-500 transition-colors duration-200 group-hover:text-neutral-700 dark:text-neutral-400 dark:group-hover:text-neutral-200"></span>
151
-
<span class="font-medium">{props.params.rkey}</span>
158
+
<div class="group flex items-center justify-between gap-1.5 rounded-md border-[0.5px] border-transparent bg-transparent px-2 py-0.5 transition-all duration-200 hover:border-neutral-300 hover:bg-neutral-50/40 dark:hover:border-neutral-600 dark:hover:bg-neutral-800/40">
159
+
<div class="flex basis-full items-center gap-1.5">
160
+
<Tooltip text="Record">
161
+
<span class="iconify lucide--file-json text-neutral-500 transition-colors duration-200 group-hover:text-neutral-700 dark:text-neutral-400 dark:group-hover:text-neutral-200"></span>
163
+
<span class="font-medium">{props.params.rkey}</span>
166
+
content={`at://${props.params.repo}/${props.params.collection}/${props.params.rkey}`}