UNPKG

@coreui/react-pro

Version:

UI Components Library for React.js

149 lines (146 loc) 6.71 kB
import { __spreadArray } from '../../node_modules/tslib/tslib.es6.js'; var calculateClickValue = function (event, container, min, max, step, vertical, rtl) { var clickPosition = getClickPosition(event, container, vertical, rtl); var value = min + clickPosition * (max - min); return roundToStep(value, step); }; var calculateMoveValue = function (event, container, min, max, step, vertical, rtl) { var rect = container.getBoundingClientRect(); var position = vertical ? calculateVerticalPosition(event.clientY, rect) : calculateHorizontalPosition(event.clientX, rect, rtl); if (typeof position === 'string') { return position === 'max' ? max : min; } var value = min + position * (max - min); return roundToStep(value, step); }; var calculateVerticalPosition = function (mouseY, rect) { if (mouseY < rect.top) { return 'max'; } if (mouseY > rect.bottom) { return 'min'; } return Math.min(Math.max((rect.bottom - mouseY) / rect.height, 0), 1); }; var calculateHorizontalPosition = function (mouseX, rect, rtl) { if (mouseX < rect.left) { return rtl ? 'max' : 'min'; } if (mouseX > rect.right) { return rtl ? 'min' : 'max'; } var relativeX = rtl ? rect.right - mouseX : mouseX - rect.left; return Math.min(Math.max(relativeX / rect.width, 0), 1); }; var calculateLabelPosition = function (min, max, labels, label, index) { if (typeof label === 'object' && 'value' in label) { return "".concat(((label.value - min) / (max - min)) * 100, "%"); } return "".concat((index / (labels.length - 1)) * 100, "%"); }; var calculateTooltipPosition = function (min, max, value, thumbSize, vertical, rtl) { var percent = (value - min) / (max - min); var margin = percent > 0.5 ? "-".concat((percent - 0.5) * thumbSize.value).concat(thumbSize.unit) : "".concat((0.5 - percent) * thumbSize.value).concat(thumbSize.unit); if (vertical) { return { bottom: "".concat(percent * 100, "%"), marginBottom: margin, }; } return rtl ? { right: "".concat(percent * 100, "%"), marginRight: margin } : { left: "".concat(percent * 100, "%"), marginLeft: margin }; }; var getClickPosition = function (event, container, vertical, rtl) { // MouseEvent doesn't have `offsetX`/`offsetY`, so we need to use `event.nativeEvent` instead var _a = event.nativeEvent, offsetX = _a.offsetX, offsetY = _a.offsetY; var offsetWidth = container.offsetWidth, offsetHeight = container.offsetHeight; if (vertical) { return 1 - offsetY / offsetHeight; } return rtl ? 1 - offsetX / offsetWidth : offsetX / offsetWidth; }; var getLabelValue = function (min, max, labels, label, index) { return typeof label === 'object' && 'value' in label ? label.value : min + (index / (labels.length - 1)) * (max - min); }; var getNearestValueIndex = function (value, values) { var valuesLength = values.length; if (value < values[0]) { return 0; } if (value > values[valuesLength - 1]) { return valuesLength - 1; } var distances = values.map(function (v) { return Math.abs(v - value); }); var min = Math.min.apply(Math, distances); var firstIndex = distances.indexOf(min); return value < values[firstIndex] ? firstIndex : distances.lastIndexOf(min); }; var getThumbSize = function (element, vertical) { var value = globalThis .getComputedStyle(element, null) .getPropertyValue(vertical ? '--cui-range-slider-thumb-height' : '--cui-range-slider-thumb-width'); var regex = /^(\d+\.?\d*)([%a-z]*)$/i; var match = value.match(regex); if (match) { return { value: Number.parseFloat(match[1]), unit: match[2] || null, }; } return null; }; var roundToStep = function (number, step) { var _step = step === 0 ? 1 : step; return Math.round(number / _step) * _step; }; var updateGradient = function (min, max, values, vertical, rtl) { var minVal = Math.min.apply(Math, values); var maxVal = Math.max.apply(Math, values); var from = ((minVal - min) / (max - min)) * 100; var to = ((maxVal - min) / (max - min)) * 100; var direction = vertical ? 'to top' : rtl ? 'to left' : 'to right'; return { backgroundImage: values.length === 1 ? "linear-gradient(\n ".concat(direction, ",\n var(--cui-range-slider-track-in-range-bg) 0%,\n var(--cui-range-slider-track-in-range-bg) ").concat(to, "%,\n transparent ").concat(to, "%,\n transparent 100%\n )") : "linear-gradient(\n ".concat(direction, ",\n transparent 0%,\n transparent ").concat(from, "%,\n var(--cui-range-slider-track-in-range-bg) ").concat(from, "%,\n var(--cui-range-slider-track-in-range-bg) ").concat(to, "%,\n transparent ").concat(to, "%,\n transparent 100%\n )"), }; }; var updateValue = function (value, values, distance, index) { var newValue = __spreadArray([], values, true); newValue[index] = validateValue(value, values, distance, index); return newValue; }; var validateValue = function (value, values, distance, index) { // If there's only one value, return it as is if (values.length === 1) { return value; } // Determine previous and next values if they exist var prevValue = index > 0 ? values[index - 1] : undefined; var nextValue = index < values.length - 1 ? values[index + 1] : undefined; // If it's the first element, ensure it's not too close to the next value if (index === 0 && nextValue !== undefined) { return Math.min(value, nextValue - distance); } // If it's the last element, ensure it's not too close to the previous value if (index === values.length - 1 && prevValue !== undefined) { return Math.max(value, prevValue + distance); } // For middle elements, ensure the value is within the allowed distance from both neighbors if (prevValue !== undefined && nextValue !== undefined) { var minVal = prevValue + distance; var maxVal = nextValue - distance; return Math.min(Math.max(value, minVal), maxVal); } // Fallback: If for some reason prevValue or nextValue is undefined, return the original value return value; }; export { calculateClickValue, calculateHorizontalPosition, calculateLabelPosition, calculateMoveValue, calculateTooltipPosition, calculateVerticalPosition, getClickPosition, getLabelValue, getNearestValueIndex, getThumbSize, roundToStep, updateGradient, updateValue, validateValue }; //# sourceMappingURL=utils.js.map