diff --git a/apps/readest-app/src/app/reader/components/ReviewPanel.tsx b/apps/readest-app/src/app/reader/components/ReviewPanel.tsx index 6ed1577b..13e73226 100644 --- a/apps/readest-app/src/app/reader/components/ReviewPanel.tsx +++ b/apps/readest-app/src/app/reader/components/ReviewPanel.tsx @@ -1,7 +1,14 @@ import clsx from 'clsx'; import DOMPurify from 'dompurify'; -import { Check, Download, FileText, RefreshCw, Save, Sparkles, X } from 'lucide-react'; -import React, { useEffect, useMemo, useState, type ReactNode } from 'react'; +import { Check, Download, FileText, Pin, PinOff, RefreshCw, Save, Sparkles, X } from 'lucide-react'; +import React, { + useCallback, + useEffect, + useMemo, + useRef, + useState, + type ReactNode, +} from 'react'; import { Overlay } from '@/components/Overlay'; import { useEnv } from '@/context/EnvContext'; @@ -32,6 +39,7 @@ import { const MIN_REVIEW_PANEL_WIDTH = 0.24; const MAX_REVIEW_PANEL_WIDTH = 0.48; +const FLOATING_PANEL_MARGIN = 12; const cnHtmlPurifyOptions = { ALLOWED_TAGS: [ @@ -119,7 +127,8 @@ const PanelButton = ({ onClick={onClick} disabled={disabled} className={clsx( - 'btn h-9 min-h-9 rounded-md px-3 text-sm', + 'btn h-auto min-h-9 max-w-full whitespace-normal rounded-md px-3 py-2 text-start text-sm leading-snug break-words', + '[&>svg]:shrink-0', variant === 'primary' ? 'btn-primary' : 'btn-ghost eink-bordered', disabled && 'opacity-60', )} @@ -180,12 +189,12 @@ function GptConfigPanel({ {open ? '收起' : '展开'} {open ? ( -
-
+
+