export function isFunction(func) { return typeof func === "function" || Object.prototype.toString.call(func) === "[object Function]"; } export function snapToGrid(grid, pendingX, pendingY, scale = 1) { const x = Math.round(pendingX / scale / grid[0]) * grid[0]; const y = Math.round(pendingY / scale / grid[1]) * grid[1]; return [x, y]; } export function getSize(el) { const rect = el.getBoundingClientRect(); return [parseInt(rect.width), parseInt(rect.height)]; } export function computeWidth(parentWidth, left, right) { return parentWidth - left - right; } export function computeHeight(parentHeight, top, bottom) { return parentHeight - top - bottom; } export function restrictToBounds(value, min, max) { if (min !== null && value < min) { return min; } if (max !== null && max < value) { return max; } return value; }