feat: Add ability to copy href of any property

This commit is contained in:
Jesse Wierzbinski 2024-12-24 14:15:32 +01:00
parent 9db7cfccda
commit 90e360d713
No known key found for this signature in database
2 changed files with 15 additions and 4 deletions

View file

@ -14,7 +14,7 @@ import { remToPx } from "../lib/remToPx";
import { useSectionStore } from "./SectionProvider"; import { useSectionStore } from "./SectionProvider";
import { Tag } from "./Tag"; import { Tag } from "./Tag";
function AnchorIcon(props: ComponentPropsWithoutRef<"svg">) { export function AnchorIcon(props: ComponentPropsWithoutRef<"svg">) {
return ( return (
<svg <svg
viewBox="0 0 20 20" viewBox="0 0 20 20"

View file

@ -2,6 +2,7 @@
import Link from "next/link"; import Link from "next/link";
import { type ReactNode, createContext, useContext } from "react"; import { type ReactNode, createContext, useContext } from "react";
import { AnchorIcon } from "./Heading";
export const PropertyContext = createContext<{ export const PropertyContext = createContext<{
name: string; name: string;
@ -54,11 +55,21 @@ export function Property({
.replace(/-+/g, "-") .replace(/-+/g, "-")
.replace(/^-|-$/g, ""); .replace(/^-|-$/g, "");
const id = `${idFormat(contextName)}-${idFormat(name)}`;
return ( return (
<li className="m-0 px-0 py-4 first:pt-0 last:pb-0"> <li className="m-0 px-0 py-4 first:pt-0 last:pb-0 group">
<Link
href={`#${id}`}
className="absolute ml-[calc(-1*var(--width))] mt-1 hidden w-[var(--width)] opacity-0 transition [--width:calc(2.625rem+0.5px+50%-min(50%,calc(theme(maxWidth.lg)+theme(spacing.8))))] group-hover:opacity-100 group-focus:opacity-100 md:block lg:z-50 2xl:[--width:theme(spacing.10)]"
>
<div className="group/anchor block h-5 w-5 rounded bg-zinc-50 ring-1 ring-inset ring-zinc-300 transition hover:ring-zinc-500 dark:bg-zinc-800 dark:ring-zinc-700 dark:hover:bg-zinc-700 dark:hover:ring-zinc-600">
<AnchorIcon className="h-5 w-5 stroke-zinc-500 transition dark:stroke-zinc-400 dark:group-hover/anchor:stroke-white" />
</div>
</Link>
<dl <dl
id={`${idFormat(contextName)}-${idFormat(name)}`} id={id}
className="m-0 flex flex-wrap items-center gap-x-3 gap-y-2" className="m-0 flex flex-wrap items-center gap-x-3 gap-y-2 scroll-mt-24 target:ring-2 ring-brand-500 ring-offset-8 dark:ring-offset-zinc-900"
> >
<dt className="sr-only">Name</dt> <dt className="sr-only">Name</dt>
<dd> <dd>