From 34a26bab3b23b4fc6bc3a92b0ec06f8672e8e7c2 Mon Sep 17 00:00:00 2001 From: Eray Erdin Date: Wed, 27 May 2026 20:03:25 +0300 Subject: [PATCH 1/2] add options to useClipboard --- packages/core/src/useClipboard/index.ts | 2 +- packages/core/src/useClipboard/interface.ts | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/core/src/useClipboard/index.ts b/packages/core/src/useClipboard/index.ts index 15df8e40..e8e46e45 100644 --- a/packages/core/src/useClipboard/index.ts +++ b/packages/core/src/useClipboard/index.ts @@ -3,7 +3,7 @@ import { useEventListener } from '../useEventListener' import { defaultWindow } from '../utils/browser' import type { UseClipboard } from './interface' -export const useClipboard: UseClipboard = (): readonly [ +export const useClipboard: UseClipboard = (options = { read: false }): readonly [ string, (txt: string) => Promise, ] => { diff --git a/packages/core/src/useClipboard/interface.ts b/packages/core/src/useClipboard/interface.ts index be301b58..ee169867 100644 --- a/packages/core/src/useClipboard/interface.ts +++ b/packages/core/src/useClipboard/interface.ts @@ -4,4 +4,6 @@ * @returns 返回只读元组. * @returns_zh-Hant 返回唯讀元組. */ -export type UseClipboard = () => readonly [string, (txt: string) => Promise] +export type UseClipboard = (options?: { + read?: boolean +}) => readonly [string, (txt: string) => Promise] From 0662aa6ab60fe42dd37a7f8643110e0c59eb9077 Mon Sep 17 00:00:00 2001 From: Eray Erdin Date: Wed, 27 May 2026 20:08:10 +0300 Subject: [PATCH 2/2] do not read clipboard if options.read is true --- packages/core/src/useClipboard/index.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/core/src/useClipboard/index.ts b/packages/core/src/useClipboard/index.ts index e8e46e45..fa1f019e 100644 --- a/packages/core/src/useClipboard/index.ts +++ b/packages/core/src/useClipboard/index.ts @@ -9,7 +9,14 @@ export const useClipboard: UseClipboard = (options = { read: false }): readonly ] => { const [text, setText] = useState('') + const read = options.read ?? false + const updateText = useCallback(async () => { + // if read-only, do not run + if (read) { + return + } + // Check if document is focused before attempting to read clipboard if (!document.hasFocus()) { return @@ -23,7 +30,7 @@ export const useClipboard: UseClipboard = (options = { read: false }): readonly // Handle cases where clipboard access is denied or unavailable console.warn('Failed to read clipboard:', error) } - }, []) + }, [read]) useEventListener('copy', updateText) useEventListener('cut', updateText)