@wordpress/components
Version:
UI components for WordPress.
8 lines (7 loc) • 3.56 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/utils/math.js"],
"sourcesContent": ["/**\n * Parses and retrieves a number value.\n *\n * @param {unknown} value The incoming value.\n *\n * @return {number} The parsed number value.\n */\nexport function getNumber(value) {\n const number = Number(value);\n return isNaN(number) ? 0 : number;\n}\n\n/**\n * Safely adds 2 values.\n *\n * @param {Array<number|string>} args Values to add together.\n *\n * @return {number} The sum of values.\n */\nexport function add(...args) {\n return args.reduce(/** @type {(sum:number, arg: number|string) => number} */\n (sum, arg) => sum + getNumber(arg), 0);\n}\n\n/**\n * Safely subtracts 2 values.\n *\n * @param {Array<number|string>} args Values to subtract together.\n *\n * @return {number} The difference of the values.\n */\nexport function subtract(...args) {\n return args.reduce(/** @type {(diff:number, arg: number|string, index:number) => number} */\n (diff, arg, index) => {\n const value = getNumber(arg);\n return index === 0 ? value : diff - value;\n }, 0);\n}\n\n/**\n * Determines the decimal position of a number value.\n *\n * @param {number} value The number to evaluate.\n *\n * @return {number} The number of decimal places.\n */\nfunction getPrecision(value) {\n const split = (value + '').split('.');\n return split[1] !== undefined ? split[1].length : 0;\n}\n\n/**\n * Clamps a value based on a min/max range.\n *\n * @param {number|string} value The value.\n * @param {number} min The minimum range.\n * @param {number} max The maximum range.\n *\n * @return {number} The clamped value.\n */\nexport function clamp(value, min, max) {\n const baseValue = getNumber(value);\n return Math.max(min, Math.min(baseValue, max));\n}\n\n/**\n * Rounds a value to the nearest step offset by a minimum.\n *\n * @param {number|string} value The value.\n * @param {number} min The minimum range.\n * @param {number} step The increment for the value.\n *\n * @return {number} The value as a valid step.\n */\nexport function ensureValidStep(value, min, step) {\n const baseValue = getNumber(value);\n const minValue = getNumber(min);\n const stepValue = getNumber(step);\n const precision = Math.max(getPrecision(step), getPrecision(min));\n // If the step is not a factor of the minimum then the step must be\n // offset by the minimum.\n const tare = minValue % stepValue ? minValue : 0;\n const rounded = Math.round((baseValue - tare) / stepValue) * stepValue;\n const fromMin = rounded + tare;\n return precision ? getNumber(fromMin.toFixed(precision)) : fromMin;\n}"],
"mappings": ";AAOO,SAAS,UAAU,OAAO;AAC/B,QAAM,SAAS,OAAO,KAAK;AAC3B,SAAO,MAAM,MAAM,IAAI,IAAI;AAC7B;AASO,SAAS,OAAO,MAAM;AAC3B,SAAO,KAAK;AAAA;AAAA,IACZ,CAAC,KAAK,QAAQ,MAAM,UAAU,GAAG;AAAA,IAAG;AAAA,EAAC;AACvC;AASO,SAAS,YAAY,MAAM;AAChC,SAAO,KAAK;AAAA;AAAA,IACZ,CAAC,MAAM,KAAK,UAAU;AACpB,YAAM,QAAQ,UAAU,GAAG;AAC3B,aAAO,UAAU,IAAI,QAAQ,OAAO;AAAA,IACtC;AAAA,IAAG;AAAA,EAAC;AACN;AASA,SAAS,aAAa,OAAO;AAC3B,QAAM,SAAS,QAAQ,IAAI,MAAM,GAAG;AACpC,SAAO,MAAM,CAAC,MAAM,SAAY,MAAM,CAAC,EAAE,SAAS;AACpD;AAWO,SAAS,MAAM,OAAO,KAAK,KAAK;AACrC,QAAM,YAAY,UAAU,KAAK;AACjC,SAAO,KAAK,IAAI,KAAK,KAAK,IAAI,WAAW,GAAG,CAAC;AAC/C;AAWO,SAAS,gBAAgB,OAAO,KAAK,MAAM;AAChD,QAAM,YAAY,UAAU,KAAK;AACjC,QAAM,WAAW,UAAU,GAAG;AAC9B,QAAM,YAAY,UAAU,IAAI;AAChC,QAAM,YAAY,KAAK,IAAI,aAAa,IAAI,GAAG,aAAa,GAAG,CAAC;AAGhE,QAAM,OAAO,WAAW,YAAY,WAAW;AAC/C,QAAM,UAAU,KAAK,OAAO,YAAY,QAAQ,SAAS,IAAI;AAC7D,QAAM,UAAU,UAAU;AAC1B,SAAO,YAAY,UAAU,QAAQ,QAAQ,SAAS,CAAC,IAAI;AAC7D;",
"names": []
}