@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
42 lines • 6.43 kB
JavaScript
/// <reference types="@taiga-ui/tsconfig/ng-dev-mode" />
const MAX_PRECISION = 292;
/**
* Rounding number to the set precision
*
* @param value
* @param precision number of digits in a float part
* @param func rounding function (round, floor, ceil)
*/
function calculate(value, precision, func) {
if (value === Infinity) {
return value;
}
ngDevMode && console.assert(!Number.isNaN(value), 'Value must be number');
ngDevMode && console.assert(Number.isInteger(precision), 'Precision must be integer');
precision = Math.min(precision, MAX_PRECISION);
const [significand, exponent = ''] = `${value}`.split('e');
const roundedInt = func(Number(`${significand}e${Number(exponent) + precision}`));
/**
* TODO: use BigInt after bumping Safari to 14+
*/
ngDevMode &&
console.assert(Number.isSafeInteger(roundedInt), 'Impossible to correctly round such a large number');
const processedPair = `${roundedInt}e`.split('e');
return Number(`${processedPair[0]}e${Number(processedPair[1]) - precision}`);
}
export function tuiRound(value, precision = 0) {
return calculate(value, precision, Math.round);
}
export function tuiCeil(value, precision = 0) {
return calculate(value, precision, Math.ceil);
}
export function tuiFloor(value, precision = 0) {
return calculate(value, precision, Math.floor);
}
export function tuiTrunc(value, precision = 0) {
return calculate(value, precision, Math.trunc);
}
export function tuiIsSafeToRound(value, precision = 0) {
return Number.isSafeInteger(Math.trunc(value * 10 ** precision));
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvdXRpbHMvbWF0aC9yb3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSx3REFBd0Q7QUFFeEQsTUFBTSxhQUFhLEdBQUcsR0FBRyxDQUFDO0FBRTFCOzs7Ozs7R0FNRztBQUNILFNBQVMsU0FBUyxDQUNkLEtBQWEsRUFDYixTQUFpQixFQUNqQixJQUEyQjtJQUUzQixJQUFJLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDcEIsT0FBTyxLQUFLLENBQUM7S0FDaEI7SUFFRCxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztJQUMxRSxTQUFTLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxFQUFFLDJCQUEyQixDQUFDLENBQUM7SUFFdEYsU0FBUyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0lBRS9DLE1BQU0sQ0FBQyxXQUFXLEVBQUUsUUFBUSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEdBQUcsS0FBSyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxXQUFXLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUVsRjs7T0FFRztJQUNILFNBQVM7UUFDTCxPQUFPLENBQUMsTUFBTSxDQUNWLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLEVBQ2hDLG1EQUFtRCxDQUN0RCxDQUFDO0lBRU4sTUFBTSxhQUFhLEdBQUcsR0FBRyxVQUFVLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFbEQsT0FBTyxNQUFNLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsRUFBRSxDQUFDLENBQUM7QUFDakYsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBYSxFQUFFLFNBQVMsR0FBRyxDQUFDO0lBQ2pELE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLEtBQWEsRUFBRSxTQUFTLEdBQUcsQ0FBQztJQUNoRCxPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFhLEVBQUUsU0FBUyxHQUFHLENBQUM7SUFDakQsT0FBTyxTQUFTLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVELE1BQU0sVUFBVSxRQUFRLENBQUMsS0FBYSxFQUFFLFNBQVMsR0FBRyxDQUFDO0lBQ2pELE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25ELENBQUM7QUFFRCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsS0FBYSxFQUFFLFNBQVMsR0FBRyxDQUFDO0lBQ3pELE9BQU8sTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCJAdGFpZ2EtdWkvdHNjb25maWcvbmctZGV2LW1vZGVcIiAvPlxuXG5jb25zdCBNQVhfUFJFQ0lTSU9OID0gMjkyO1xuXG4vKipcbiAqIFJvdW5kaW5nIG51bWJlciB0byB0aGUgc2V0IHByZWNpc2lvblxuICpcbiAqIEBwYXJhbSB2YWx1ZVxuICogQHBhcmFtIHByZWNpc2lvbiBudW1iZXIgb2YgZGlnaXRzIGluIGEgZmxvYXQgcGFydFxuICogQHBhcmFtIGZ1bmMgcm91bmRpbmcgZnVuY3Rpb24gKHJvdW5kLCBmbG9vciwgY2VpbClcbiAqL1xuZnVuY3Rpb24gY2FsY3VsYXRlKFxuICAgIHZhbHVlOiBudW1iZXIsXG4gICAgcHJlY2lzaW9uOiBudW1iZXIsXG4gICAgZnVuYzogKHg6IG51bWJlcikgPT4gbnVtYmVyLFxuKTogbnVtYmVyIHtcbiAgICBpZiAodmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBuZ0Rldk1vZGUgJiYgY29uc29sZS5hc3NlcnQoIU51bWJlci5pc05hTih2YWx1ZSksICdWYWx1ZSBtdXN0IGJlIG51bWJlcicpO1xuICAgIG5nRGV2TW9kZSAmJiBjb25zb2xlLmFzc2VydChOdW1iZXIuaXNJbnRlZ2VyKHByZWNpc2lvbiksICdQcmVjaXNpb24gbXVzdCBiZSBpbnRlZ2VyJyk7XG5cbiAgICBwcmVjaXNpb24gPSBNYXRoLm1pbihwcmVjaXNpb24sIE1BWF9QUkVDSVNJT04pO1xuXG4gICAgY29uc3QgW3NpZ25pZmljYW5kLCBleHBvbmVudCA9ICcnXSA9IGAke3ZhbHVlfWAuc3BsaXQoJ2UnKTtcbiAgICBjb25zdCByb3VuZGVkSW50ID0gZnVuYyhOdW1iZXIoYCR7c2lnbmlmaWNhbmR9ZSR7TnVtYmVyKGV4cG9uZW50KSArIHByZWNpc2lvbn1gKSk7XG5cbiAgICAvKipcbiAgICAgKiBUT0RPOiB1c2UgQmlnSW50IGFmdGVyIGJ1bXBpbmcgU2FmYXJpIHRvIDE0K1xuICAgICAqL1xuICAgIG5nRGV2TW9kZSAmJlxuICAgICAgICBjb25zb2xlLmFzc2VydChcbiAgICAgICAgICAgIE51bWJlci5pc1NhZmVJbnRlZ2VyKHJvdW5kZWRJbnQpLFxuICAgICAgICAgICAgJ0ltcG9zc2libGUgdG8gY29ycmVjdGx5IHJvdW5kIHN1Y2ggYSBsYXJnZSBudW1iZXInLFxuICAgICAgICApO1xuXG4gICAgY29uc3QgcHJvY2Vzc2VkUGFpciA9IGAke3JvdW5kZWRJbnR9ZWAuc3BsaXQoJ2UnKTtcblxuICAgIHJldHVybiBOdW1iZXIoYCR7cHJvY2Vzc2VkUGFpclswXX1lJHtOdW1iZXIocHJvY2Vzc2VkUGFpclsxXSkgLSBwcmVjaXNpb259YCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0dWlSb3VuZCh2YWx1ZTogbnVtYmVyLCBwcmVjaXNpb24gPSAwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlKHZhbHVlLCBwcmVjaXNpb24sIE1hdGgucm91bmQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHVpQ2VpbCh2YWx1ZTogbnVtYmVyLCBwcmVjaXNpb24gPSAwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlKHZhbHVlLCBwcmVjaXNpb24sIE1hdGguY2VpbCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0dWlGbG9vcih2YWx1ZTogbnVtYmVyLCBwcmVjaXNpb24gPSAwKTogbnVtYmVyIHtcbiAgICByZXR1cm4gY2FsY3VsYXRlKHZhbHVlLCBwcmVjaXNpb24sIE1hdGguZmxvb3IpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHVpVHJ1bmModmFsdWU6IG51bWJlciwgcHJlY2lzaW9uID0gMCk6IG51bWJlciB7XG4gICAgcmV0dXJuIGNhbGN1bGF0ZSh2YWx1ZSwgcHJlY2lzaW9uLCBNYXRoLnRydW5jKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR1aUlzU2FmZVRvUm91bmQodmFsdWU6IG51bWJlciwgcHJlY2lzaW9uID0gMCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBOdW1iZXIuaXNTYWZlSW50ZWdlcihNYXRoLnRydW5jKHZhbHVlICogMTAgKiogcHJlY2lzaW9uKSk7XG59XG4iXX0=