diff --git a/frontend/src/components/react/AssetsButton.tsx b/frontend/src/components/react/AssetsButton.tsx new file mode 100644 index 0000000..7b4e5b0 --- /dev/null +++ b/frontend/src/components/react/AssetsButton.tsx @@ -0,0 +1,117 @@ +import { useEffect, useState } from 'react'; +import AssetManager from './admin/AssetManager'; + +interface Props { + className?: string; + label?: string; +} + +export default function AssetsButton({ + className = 'inline-flex items-center gap-2 bg-surface0 hover:bg-surface1 text-subtext1 hover:text-text px-3 py-2 rounded-lg border border-surface1 transition-colors text-sm', + label = 'Assets', +}: Props) { + const [open, setOpen] = useState(false); + + useEffect(() => { + if (!open) return; + function onKey(e: KeyboardEvent) { + if (e.key === 'Escape') setOpen(false); + } + window.addEventListener('keydown', onKey); + const prev = document.body.style.overflow; + document.body.style.overflow = 'hidden'; + return () => { + window.removeEventListener('keydown', onKey); + document.body.style.overflow = prev; + }; + }, [open]); + + return ( + <> + + + {open && ( +
/posts/{post.slug}
-{desc}
-