UNPKG

@clayui/shared

Version:

ClayShared component

114 lines (113 loc) 3.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.PanelResizer = PanelResizer; var _react = _interopRequireDefault(require("react")); var _Keys = require("./Keys"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } /** * SPDX-FileCopyrightText: © 2023 Liferay, Inc. <https://liferay.com> * SPDX-License-Identifier: BSD-3-Clause */ const MAIN_MOUSE_BUTTON = 0; let keyDownCounter = 0; function PanelResizer(_ref) { let { onPanelWidthChange, panelWidth = 320, panelWidthMax, panelWidthMin, position, ...otherProps } = _ref; const positionLeft = position === 'left'; const decreasePanelWidth = function () { let delta = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; const width = Math.round(panelWidth - delta); if (width > panelWidthMin - 100 && width < panelWidthMin) { onPanelWidthChange(panelWidthMin); } else if (width > panelWidthMin) { onPanelWidthChange(width); } }; const increasePanelWidth = function () { let delta = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1; const width = Math.round(panelWidth + delta); if (width > panelWidthMax && width < panelWidthMax + 100) { onPanelWidthChange(panelWidthMax); } else if (width < panelWidthMax) { onPanelWidthChange(width); } }; return /*#__PURE__*/_react.default.createElement("div", _extends({ "aria-orientation": "vertical", "aria-valuemax": panelWidthMax, "aria-valuemin": panelWidthMin, "aria-valuenow": panelWidth, className: "c-horizontal-resizer" }, otherProps, { onKeyDown: event => { const delta = keyDownCounter > 7 ? 10 : 1; keyDownCounter++; switch (event.key) { case _Keys.Keys.Down: { decreasePanelWidth(delta); break; } case _Keys.Keys.Left: { if (positionLeft) { decreasePanelWidth(delta); } else { increasePanelWidth(delta); } break; } case _Keys.Keys.Right: { if (positionLeft) { increasePanelWidth(delta); } else { decreasePanelWidth(delta); } break; } case _Keys.Keys.Up: { increasePanelWidth(delta); break; } default: { break; } } }, onKeyUp: () => { keyDownCounter = 0; }, onPointerDown: event => { const startXPos = event.pageX; function onResizerMove(event) { const delta = Math.abs(event.pageX - startXPos); if (event.pageX >= startXPos && positionLeft || event.pageX < startXPos && !positionLeft) { increasePanelWidth(delta); } else if (event.pageX < startXPos && positionLeft || event.pageX >= startXPos && !positionLeft) { decreasePanelWidth(delta); } } function removeResizerEvents() { document.removeEventListener('pointermove', onResizerMove); document.removeEventListener('pointerup', removeResizerEvents); } if (event.button === MAIN_MOUSE_BUTTON) { document.addEventListener('pointermove', onResizerMove); document.addEventListener('pointerup', removeResizerEvents); } }, role: "separator", tabIndex: 0 })); }