UNPKG

@remotion/studio

Version:

APIs for interacting with the Remotion Studio

141 lines (140 loc) 5.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SidebarCollapserControls = void 0; const jsx_runtime_1 = require("react/jsx-runtime"); const react_1 = require("react"); const ShortcutHint_1 = require("../error-overlay/remotion-overlay/ShortcutHint"); const use_keybinding_1 = require("../helpers/use-keybinding"); const sidebar_1 = require("../state/sidebar"); const InlineAction_1 = require("./InlineAction"); const TopPanel_1 = require("./TopPanel"); const style = { width: 16, height: 16, minWidth: 16, border: '1px solid currentColor', borderRadius: 3, color: 'currentColor', position: 'relative', }; const SidebarCollapserControls = () => { const { setSidebarCollapsedState, sidebarCollapsedStateRight } = (0, react_1.useContext)(sidebar_1.SidebarContext); const keybindings = (0, use_keybinding_1.useKeybinding)(); const leftSidebarStatus = (0, TopPanel_1.useResponsiveSidebarStatus)(); const leftIcon = (0, react_1.useCallback)((color) => { return { width: '35%', height: '100%', borderRight: '1px solid ' + color, background: leftSidebarStatus === 'expanded' ? color : 'transparent', }; }, [leftSidebarStatus]); const rightIcon = (0, react_1.useCallback)((color) => { return { width: '35%', height: '100%', right: 0, position: 'absolute', borderLeft: '1px solid ' + color, background: sidebarCollapsedStateRight === 'expanded' ? color : 'transparent', }; }, [sidebarCollapsedStateRight]); const toggleLeft = (0, react_1.useCallback)(() => { setSidebarCollapsedState({ left: (s) => { if (s === 'responsive') { return leftSidebarStatus === 'collapsed' ? 'expanded' : 'collapsed'; } return s === 'collapsed' ? 'expanded' : 'collapsed'; }, right: null, }); }, [leftSidebarStatus, setSidebarCollapsedState]); const toggleRight = (0, react_1.useCallback)(() => { setSidebarCollapsedState({ right: (s) => (s === 'collapsed' ? 'expanded' : 'collapsed'), left: null, }); }, [setSidebarCollapsedState]); const toggleBoth = (0, react_1.useCallback)(() => { if (sidebarCollapsedStateRight === leftSidebarStatus) { setSidebarCollapsedState({ left: (s) => { if (s === 'responsive') { return leftSidebarStatus === 'collapsed' ? 'expanded' : 'collapsed'; } return s === 'collapsed' ? 'expanded' : 'collapsed'; }, right: (s) => (s === 'collapsed' ? 'expanded' : 'collapsed'), }); } else if (sidebarCollapsedStateRight === 'expanded') { toggleRight(); } else if (leftSidebarStatus === 'expanded') { toggleLeft(); } }, [ leftSidebarStatus, setSidebarCollapsedState, sidebarCollapsedStateRight, toggleLeft, toggleRight, ]); (0, react_1.useEffect)(() => { const left = keybindings.registerKeybinding({ event: 'keydown', key: 'b', commandCtrlKey: true, callback: toggleLeft, preventDefault: true, triggerIfInputFieldFocused: false, keepRegisteredWhenNotHighestContext: false, }); const right = keybindings.registerKeybinding({ event: 'keydown', key: 'j', commandCtrlKey: true, callback: toggleRight, preventDefault: true, triggerIfInputFieldFocused: false, keepRegisteredWhenNotHighestContext: false, }); const zen = keybindings.registerKeybinding({ event: 'keydown', key: 'g', commandCtrlKey: true, callback: toggleBoth, preventDefault: true, triggerIfInputFieldFocused: false, keepRegisteredWhenNotHighestContext: false, }); return () => { left.unregister(); right.unregister(); zen.unregister(); }; }, [keybindings, toggleBoth, toggleLeft, toggleRight]); const toggleLeftTooltip = (0, use_keybinding_1.areKeyboardShortcutsDisabled)() ? 'Toggle Left Sidebar' : `Toggle Left Sidebar (${ShortcutHint_1.cmdOrCtrlCharacter}+B)`; const toggleRightTooltip = (0, use_keybinding_1.areKeyboardShortcutsDisabled)() ? 'Toggle Right Sidebar' : `Toggle Right Sidebar (${ShortcutHint_1.cmdOrCtrlCharacter}+J)`; const colorStyle = (0, react_1.useCallback)((color) => { return { ...style, color, }; }, []); const toggleLeftAction = (0, react_1.useCallback)((color) => { return (jsx_runtime_1.jsx("div", { style: colorStyle(color), title: toggleLeftTooltip, children: jsx_runtime_1.jsx("div", { style: leftIcon(color) }) })); }, [colorStyle, leftIcon, toggleLeftTooltip]); const toggleRightAction = (0, react_1.useCallback)((color) => { return (jsx_runtime_1.jsx("div", { style: colorStyle(color), title: toggleRightTooltip, children: jsx_runtime_1.jsx("div", { style: rightIcon(color) }) })); }, [colorStyle, rightIcon, toggleRightTooltip]); return (jsx_runtime_1.jsxs(jsx_runtime_1.Fragment, { children: [ jsx_runtime_1.jsx(InlineAction_1.InlineAction, { onClick: toggleLeft, renderAction: toggleLeftAction }), jsx_runtime_1.jsx(InlineAction_1.InlineAction, { onClick: toggleRight, renderAction: toggleRightAction }) ] })); }; exports.SidebarCollapserControls = SidebarCollapserControls;