"use client"; import { useCallback, useEffect, useState } from "react"; // 「目录」列折叠偏好的持久化键(对齐既有 `ww.` 前缀约定)。 export const CHAPTER_LIST_COLLAPSE_KEY = "ww.workbench_chapter_list_collapsed"; export interface ChapterListCollapse { // true=目录列收起(让宽给正文);false=展开。 collapsed: boolean; toggle: () => void; } function persist(collapsed: boolean): void { if (typeof window === "undefined") return; try { window.localStorage.setItem(CHAPTER_LIST_COLLAPSE_KEY, collapsed ? "1" : "0"); } catch { // 隐私模式/配额异常忽略:折叠是纯 UI 偏好,写盘失败不影响导航功能。 } } // 记住「目录」列收起/展开状态(P2-2):SSR 首帧恒展开(避免 hydration 不一致), // 挂载后再从 localStorage 恢复;toggle 即时写回。仅桌面(≥xl)用得上,窄屏走抽屉不受影响。 export function useChapterListCollapse(): ChapterListCollapse { const [collapsed, setCollapsed] = useState(false); useEffect(() => { if (typeof window === "undefined") return; try { setCollapsed(window.localStorage.getItem(CHAPTER_LIST_COLLAPSE_KEY) === "1"); } catch { // 读盘失败则维持默认展开。 } }, []); const toggle = useCallback(() => { setCollapsed((prev) => { const next = !prev; persist(next); return next; }); }, []); return { collapsed, toggle }; }