"use strict"; const React = require("react"); const { ResizableBox } = require("react-resizable"); const defaultValue = require("default-value"); const useDisableSelection = require("../../util/use-disable-selection"); const useTheme = require("../../util/themeable"); const defaultStyle = require("./style.css"); function Handle({ ... props }) { let { withTheme } = useTheme({ control: "pane", defaultStyle }); // NOTE: We need to forward all props to make the mouse events work, which react-resizable internally adds to the component return (
); } // TODO: Only exact pixel values currently supported for initialSize, add some sort of percentage support in the future? // FIXME: Increase handle hitbox size // FIXME: `Resizable` wrapper element // NOTE: onResized and direction are internal, handleSide too but it can be overwritten module.exports = function Pane({ onResized, resizable, initialSize, minimumSize, maximumSize, direction, handleSide, children }) { let { withTheme } = useTheme({ control: "pane", defaultStyle }); let { disableGlobalSelection, enableGlobalSelection } = useDisableSelection(); // FIXME: Validate inputs let sizeProps = (direction === "vertical") ? { height: initialSize, minConstraints: [ 0, defaultValue(minimumSize, 0) ], maxConstraints: [ Infinity, defaultValue(maximumSize, Infinity) ], } : { width: initialSize, minConstraints: [ defaultValue(minimumSize, 0), 0 ], maxConstraints: [ defaultValue(maximumSize, Infinity), Infinity ], }; let axisProp = (direction === "vertical") ? "y" : "x"; function handleOnResizeStop(node, event) { let newSize = (direction === "vertical") ? event.size.height : event.size.width; onResized(newSize); enableGlobalSelection(); } function handleOnResizeStart() { disableGlobalSelection(); } // NOTE: Needed to prevent react-resizable from somehow breaking hooks inside of Handle function handleFunction() { return ; } // FIXME: Do we still need the contentWrapper, without the bounds-measuring logic? let content = (
{children}
); return (
{(resizable === true) ? {content} : content }
); };