/** * @edu/hooks - 共享 Hooks 库 * * 维护者:ai13(teacher-portal) * 关联文档:teacher-portal 02-architecture-design.md §8 * * 包含: * - useAuth:会话状态(user/token/login/logout/refresh) * - usePermission:权限查询(hasPermission/hasAny/hasAll + dataScope) * - useViewports:视口列表(按 scope 过滤) * - useApi:ApiClient 实例(注入 token + 401 处理 + trace_id) * - useA11yId:唯一 ARIA ID 生成 * - useAriaLive:aria-live 区域管理 * - useToast:全局 toast 通知 * - useTraceId:当前会话 trace_id * * 设计原则: * - hooks 不直接调 API,保持纯客户端逻辑(API 调用由 apps/* 注入) * - 权限/视口数据通过 props 注入,避免 hooks 包耦合 iam * - token 存储使用 localStorage(F12 裁决,P2 阶段) */ export { useAuth } from "./use-auth.js"; export type { UseAuthReturn } from "./use-auth.js"; export { usePermission } from "./use-permission.js"; export type { UsePermissionProps, UsePermissionReturn, } from "./use-permission.js"; export { useViewports } from "./use-viewports.js"; export type { UseViewportsProps, UseViewportsReturn } from "./use-viewports.js"; export { useApi } from "./use-api.js"; export type { UseApiProps, UseApiReturn } from "./use-api.js"; export { useA11yId, useA11yIds, mergeA11yProps, describeInput, } from "./use-a11y-id.js"; export { useAriaLive } from "./use-aria-live.js"; export type { UseAriaLiveReturn, AriaLivePoliteness } from "./use-aria-live.js"; export { useToast } from "./use-toast.js"; export type { UseToastReturn } from "./use-toast.js"; export { useTraceId } from "./use-trace-id.js"; export type { UseTraceIdReturn } from "./use-trace-id.js"; export { useGraphQLClient, GraphQLClientContext, } from "./use-graphql-client.js"; export type { UseGraphQLClientReturn } from "./use-graphql-client.js"; // 共享类型 export type { UserSession, DataScope, PermissionContext, Viewport, ToastMessage, AuthState, } from "./types.js";