feat: improve app ui and project metadata

This commit is contained in:
Yaojia Wang
2026-06-28 07:31:20 +02:00
parent 3bd464d400
commit 90a66437d7
86 changed files with 4892 additions and 1108 deletions

View File

@@ -1,6 +1,6 @@
"use client";
import { useEffect, useRef, type ReactNode } from "react";
import { useEffect, useRef, type ReactNode, type RefObject } from "react";
import { handleTabTrap } from "@/lib/a11y/focusTrap";
@@ -11,6 +11,7 @@ interface DrawerProps {
side?: "left" | "right";
// 无障碍标签role=dialog
label: string;
triggerRef?: RefObject<HTMLElement | null>;
children: ReactNode;
}
@@ -21,12 +22,21 @@ export function Drawer({
onClose,
side = "left",
label,
triggerRef,
children,
}: DrawerProps) {
const panelRef = useRef<HTMLDivElement>(null);
const wasOpenRef = useRef(false);
useEffect(() => {
if (!open) return;
if (!open) {
if (wasOpenRef.current) {
wasOpenRef.current = false;
triggerRef?.current?.focus();
}
return;
}
wasOpenRef.current = true;
const onKey = (e: KeyboardEvent): void => {
if (e.key === "Escape") {
e.preventDefault();
@@ -36,7 +46,7 @@ export function Drawer({
window.addEventListener("keydown", onKey);
panelRef.current?.focus();
return () => window.removeEventListener("keydown", onKey);
}, [open, onClose]);
}, [open, onClose, triggerRef]);
if (!open) return null;