UNPKG

@remotion/studio

Version:

APIs for interacting with the Remotion Studio

76 lines (75 loc) 3.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.useKeybinding = exports.areKeyboardShortcutsDisabled = void 0; const react_1 = require("react"); const keybindings_1 = require("../state/keybindings"); const z_index_1 = require("../state/z-index"); if (!process.env.KEYBOARD_SHORTCUTS_ENABLED) { // eslint-disable-next-line no-console console.warn('Keyboard shortcuts disabled either due to: a) --disable-keyboard-shortcuts being passed b) Config.setKeyboardShortcutsEnabled(false) being set or c) a Remotion version mismatch.'); } const areKeyboardShortcutsDisabled = () => { return !process.env.KEYBOARD_SHORTCUTS_ENABLED; }; exports.areKeyboardShortcutsDisabled = areKeyboardShortcutsDisabled; const useKeybinding = () => { const [paneId] = (0, react_1.useState)(() => String(Math.random())); const context = (0, react_1.useContext)(keybindings_1.KeybindingContext); const { isHighestContext } = (0, z_index_1.useZIndex)(); const registerKeybinding = (0, react_1.useCallback)((options) => { if (!process.env.KEYBOARD_SHORTCUTS_ENABLED) { return { unregister: () => undefined, }; } if (!isHighestContext && !options.keepRegisteredWhenNotHighestContext) { return { unregister: () => undefined, }; } const listener = (e) => { const commandKey = window.navigator.platform.startsWith('Mac') ? e.metaKey : e.ctrlKey; // Apparently, e.key can be undefined in Edge: // https://github.com/remotion-dev/remotion/issues/5637 if (!e.key) { return; } if (e.key.toLowerCase() === options.key.toLowerCase() && options.commandCtrlKey === commandKey) { if (!options.triggerIfInputFieldFocused) { const { activeElement } = document; if (activeElement instanceof HTMLInputElement) { return; } if (activeElement instanceof HTMLTextAreaElement) { return; } } options.callback(e); if (options.preventDefault) { e.preventDefault(); } } }; const toRegister = { registeredFromPane: paneId, event: options.event, key: options.key, callback: listener, id: String(Math.random()), }; context.registerKeybinding(toRegister); return { unregister: () => context.unregisterKeybinding(toRegister), }; }, [context, isHighestContext, paneId]); (0, react_1.useEffect)(() => { return () => { context.unregisterPane(paneId); }; }, [context, paneId]); return (0, react_1.useMemo)(() => ({ registerKeybinding, isHighestContext }), [registerKeybinding, isHighestContext]); }; exports.useKeybinding = useKeybinding;