@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
144 lines (143 loc) • 3.43 kB
JavaScript
;
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