mirror of
https://github.com/deepseek-ai/deepseek-harness
synced 2026-08-15 21:04:50 +00:00
The tail-header cap fix pushed SearchBlock's head/tail slicing arithmetic and its copy-feedback hook over the duplication gate's threshold against the byte-identical logic in TerminalBlock. Extract both into head-tail-cap.ts (headTailCap) and use-copy-feedback.ts (useCopyFeedback) and consume them from both blocks, deleting the clone rather than nudging it under the limit.
38 lines
1.4 KiB
TypeScript
38 lines
1.4 KiB
TypeScript
// The copy-to-clipboard-with-feedback hook shared by the block primitives
|
|
// (TerminalBlock, SearchBlock): write the given text, and on success flip a
|
|
// transient `copied` flag that the caller renders as a "复制成功" label for one
|
|
// second. A refused write leaves the flag untouched, so the control never claims
|
|
// a copy the host declined.
|
|
|
|
import { useCallback, useState } from 'react'
|
|
import { writeClipboard } from './clipboard.ts'
|
|
|
|
/** How long the `copied` flag stays true after a successful write, in ms. */
|
|
const COPIED_FEEDBACK_MS = 1000
|
|
|
|
/** The copy-feedback hook's return: the transient flag and the copy handler. */
|
|
export interface CopyFeedback {
|
|
/** True for {@link COPIED_FEEDBACK_MS} after a successful write; render the success label off it. */
|
|
copied: boolean
|
|
/** Copy the hook's text; no-op while `copied` is still true, silent on a refused write. */
|
|
onCopy: () => void
|
|
}
|
|
|
|
/**
|
|
* Copy `text` to the clipboard with one-second success feedback.
|
|
* @param text - the text to write on copy.
|
|
* @returns the `copied` flag and the `onCopy` handler.
|
|
*/
|
|
export function useCopyFeedback(text: string): CopyFeedback {
|
|
const [copied, setCopied] = useState(false)
|
|
const onCopy = useCallback(() => {
|
|
if (copied) return
|
|
void writeClipboard(text).then((ok) => {
|
|
if (!ok) return
|
|
setCopied(true)
|
|
window.setTimeout(() => { setCopied(false) }, COPIED_FEEDBACK_MS)
|
|
})
|
|
}, [copied, text])
|
|
return { copied, onCopy }
|
|
}
|