UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

144 lines (143 loc) 3.43 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.calculatePercent = void 0; Object.defineProperty(exports, "clamp", { enumerable: true, get: function () { return _clamp.clamp; } }); exports.roundValue = exports.percentToValue = exports.getUpdatedValues = exports.getOffset = exports.getMousePosition = exports.getFormattedNumber = exports.createMockDiv = exports.closestIndex = void 0; var _NumberUtils = require("../number-format/NumberUtils.js"); var _clamp = require("../../shared/helpers/clamp.js"); const percentToValue = (percent, min, max, isReverse) => { let num = (max - min) * percent / 100 + min; if (isReverse) { num = max + min - num; } return num; }; exports.percentToValue = percentToValue; const getOffset = node => { const { pageYOffset, pageXOffset } = typeof window !== 'undefined' ? window : { pageYOffset: 0, pageXOffset: 0 }; const { left, top } = node.getBoundingClientRect(); return { top: top + pageYOffset, left: left + pageXOffset }; }; exports.getOffset = getOffset; const getMousePosition = event => { if (event.changedTouches && event.changedTouches[0]) { return { x: event.changedTouches[0].pageX, y: event.changedTouches[0].pageY }; } return { x: event.pageX, y: event.pageY }; }; exports.getMousePosition = getMousePosition; const calculatePercent = (node, event, isVertical) => { const { width, height } = node.getBoundingClientRect(); const { top, left } = getOffset(node); const { x, y } = getMousePosition(event); const value = isVertical ? y - top : x - left; const onePercent = (isVertical ? height : width) / 100; return Math.abs((0, _clamp.clamp)(value / onePercent)); }; exports.calculatePercent = calculatePercent; const roundValue = (value, { step, min, max }) => { if (step > 0) { if (value >= max) { return max; } if (value <= min) { return min; } return Math.round(value / step) * step; } return parseFloat(parseFloat(String(value)).toFixed(3)); }; exports.roundValue = roundValue; const createMockDiv = ({ width, height }) => { const div = document.createElement('div'); Object.assign(div.style, { width: `${width}px`, height: `${height}px` }); div.getBoundingClientRect = () => ({ width, height, top: 0, left: 0, right: width, bottom: height }); return div; }; exports.createMockDiv = createMockDiv; const getUpdatedValues = (value, index, newValue) => { return value.map((val, i) => { if (i === index) { val = newValue; } return val; }); }; exports.getUpdatedValues = getUpdatedValues; const closestIndex = (goal, array) => { const res = [...array].sort((a, b) => Math.abs(goal - a) - Math.abs(goal - b))[0]; return array.findIndex(num => num === res); }; exports.closestIndex = closestIndex; const getFormattedNumber = (value, numberFormat) => { if (numberFormat) { if (typeof numberFormat === 'function') { const number = numberFormat(value); return { number, aria: number }; } return (0, _NumberUtils.format)(value, { ...(numberFormat || {}), returnAria: true }); } return { aria: null, number: null }; }; exports.getFormattedNumber = getFormattedNumber; //# sourceMappingURL=SliderHelpers.js.map