diff --git a/src/components/ExcalidrawMenu.tsx b/src/components/ExcalidrawMenu.tsx index c3d9992c..76ae8d3b 100644 --- a/src/components/ExcalidrawMenu.tsx +++ b/src/components/ExcalidrawMenu.tsx @@ -6,7 +6,7 @@ import { useCallback, useEffect, useRef, memo } from 'react' import type { KeyboardEvent as ReactKeyboardEvent } from 'react' import { Icon } from '@mdi/react' -import { mdiMonitorScreenshot, mdiImageMultiple, mdiTimerOutline, mdiVote, mdiGrid } from '@mdi/js' +import { mdiMonitorScreenshot, mdiImageMultiple, mdiTimerOutline, mdiVote, mdiGrid, mdiMagnify } from '@mdi/js' import { MainMenu, CaptureUpdateAction } from '@nextcloud/excalidraw' import { RecordingMenuItem } from './Recording' import { PresentationMenuItem } from './Presentation' @@ -101,6 +101,26 @@ export const ExcalidrawMenu = memo(function ExcalidrawMenu({ fileNameWithoutExte } }, [excalidrawAPI]) + const openLibrarySearch = useCallback(() => { + // Trigger Ctrl+F to open library with search tab + const excalidrawContainer = document.querySelector('.excalidraw') as HTMLElement + if (excalidrawContainer) { + const eventConfig: KeyboardEventInit = { + key: 'f', + code: 'KeyF', + bubbles: true, + cancelable: true, + } + if (isMacPlatform) { + eventConfig.metaKey = true + } else { + eventConfig.ctrlKey = true + } + const event = new KeyboardEvent('keydown', eventConfig) + excalidrawContainer.dispatchEvent(event) + } + }, [isMacPlatform]) + const isMacPlatformRef = useRef(isMacPlatform) useEffect(() => { isMacPlatformRef.current = isMacPlatform @@ -176,6 +196,11 @@ export const ExcalidrawMenu = memo(function ExcalidrawMenu({ fileNameWithoutExte onSelect={() => showVotings()}> {t('whiteboard', 'Votings')} + } + onSelect={openLibrarySearch}> + {t('whiteboard', 'Find text on canvas')} +