@clayui/shared
Version:
ClayShared component
114 lines (113 loc) • 3.77 kB
JavaScript
;
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
}));
}