UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

36 lines 9.36 kB
import { tuiRound } from '@taiga-ui/cdk/utils/math'; /** * Used as a limit for eliminating JS issues with floating point math */ export const TUI_FLOATING_PRECISION = 7; function tuiFindKeyStepsBoundariesByFn(keySteps, fn) { const keyStepUpperIndex = keySteps.findIndex((keyStep, i) => i && fn(keyStep)); const lowerStep = keySteps[keyStepUpperIndex - 1] || keySteps[0]; const upperStep = keySteps[keyStepUpperIndex] || keySteps[keySteps.length - 1] || [0, 0]; return [lowerStep, upperStep]; } export function tuiPercentageToKeyStepValue(valuePercentage, keySteps) { const [[lowerStepPercent, lowerStepValue], [upperStepPercent, upperStepValue]] = tuiFindKeyStepsBoundariesByFn(keySteps, ([keyStepPercentage, _]) => valuePercentage <= keyStepPercentage); const ratio = (valuePercentage - lowerStepPercent) / (upperStepPercent - lowerStepPercent); const controlValue = (upperStepValue - lowerStepValue) * ratio + lowerStepValue; return tuiRound(controlValue, TUI_FLOATING_PRECISION); } export function tuiKeyStepValueToPercentage(value, keySteps) { const [[lowerStepPercent, lowerStepValue], [upperStepPercent, upperStepValue]] = tuiFindKeyStepsBoundariesByFn(keySteps, ([_, keyStepValue]) => value <= keyStepValue); const ratio = (value - lowerStepValue) / (upperStepValue - lowerStepValue) || 0; return (upperStepPercent - lowerStepPercent) * ratio + lowerStepPercent; } export function tuiCreateKeyStepsTransformer(keySteps, slider) { return new (class { fromControlValue(controlValue) { const newValuePercentage = tuiKeyStepValueToPercentage(controlValue, keySteps); return (newValuePercentage * (slider.max - slider.min)) / 100 + slider.min; } toControlValue(nativeValue) { const valueRatio = (nativeValue - slider.min) / (slider.max - slider.min) || 0; return tuiPercentageToKeyStepValue(valueRatio * 100, keySteps); } })(); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2V5LXN0ZXBzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMva2l0L2NvbXBvbmVudHMvc2xpZGVyL2hlbHBlcnMva2V5LXN0ZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSwwQkFBMEIsQ0FBQztBQUlsRDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQXNCeEMsU0FBUyw2QkFBNkIsQ0FDbEMsUUFBcUIsRUFDckIsRUFBaUU7SUFFakUsTUFBTSxpQkFBaUIsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBRS9FLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDakUsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLGlCQUFpQixDQUFDO1FBQ3pDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTVDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FDdkMsZUFBdUIsRUFDdkIsUUFBcUI7SUFFckIsTUFBTSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUMxRSw2QkFBNkIsQ0FDekIsUUFBUSxFQUNSLENBQUMsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZUFBZSxJQUFJLGlCQUFpQixDQUNuRSxDQUFDO0lBQ04sTUFBTSxLQUFLLEdBQ1AsQ0FBQyxlQUFlLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLENBQUM7SUFDakYsTUFBTSxZQUFZLEdBQUcsQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEdBQUcsS0FBSyxHQUFHLGNBQWMsQ0FBQztJQUVoRixPQUFPLFFBQVEsQ0FBQyxZQUFZLEVBQUUsc0JBQXNCLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUN2QyxLQUFhLEVBQ2IsUUFBcUI7SUFFckIsTUFBTSxDQUFDLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUMxRSw2QkFBNkIsQ0FDekIsUUFBUSxFQUNSLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQy9DLENBQUM7SUFDTixNQUFNLEtBQUssR0FBRyxDQUFDLEtBQUssR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLGNBQWMsR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFaEYsT0FBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDLEdBQUcsS0FBSyxHQUFHLGdCQUFnQixDQUFDO0FBQzVFLENBQUM7QUFFRCxNQUFNLFVBQVUsNEJBQTRCLENBQ3hDLFFBQXFCLEVBQ3JCLE1BQTBCO0lBRTFCLE9BQU8sSUFBSSxDQUFDO1FBQ0QsZ0JBQWdCLENBQUMsWUFBb0I7WUFDeEMsTUFBTSxrQkFBa0IsR0FBRywyQkFBMkIsQ0FDbEQsWUFBWSxFQUNaLFFBQVEsQ0FDWCxDQUFDO1lBRUYsT0FBTyxDQUFDLGtCQUFrQixHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQztRQUMvRSxDQUFDO1FBRU0sY0FBYyxDQUFDLFdBQW1CO1lBQ3JDLE1BQU0sVUFBVSxHQUNaLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVoRSxPQUFPLDJCQUEyQixDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDbkUsQ0FBQztLQUNKLENBQUMsRUFBRSxDQUFDO0FBQ1QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtUdWlWYWx1ZVRyYW5zZm9ybWVyfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NsYXNzZXMnO1xuaW1wb3J0IHt0dWlSb3VuZH0gZnJvbSAnQHRhaWdhLXVpL2Nkay91dGlscy9tYXRoJztcblxuaW1wb3J0IHR5cGUge1R1aVNsaWRlckNvbXBvbmVudH0gZnJvbSAnLi4vc2xpZGVyLmNvbXBvbmVudCc7XG5cbi8qKlxuICogVXNlZCBhcyBhIGxpbWl0IGZvciBlbGltaW5hdGluZyBKUyBpc3N1ZXMgd2l0aCBmbG9hdGluZyBwb2ludCBtYXRoXG4gKi9cbmV4cG9ydCBjb25zdCBUVUlfRkxPQVRJTkdfUFJFQ0lTSU9OID0gNztcblxuLyoqXG4gKiBTdGVwcyBmb3Igc3BsaXR0aW5nIHNsaWRlcnMgaW50byBkaWZmZXJlbnQgbGluZWFyIGRlcGVuZGVuY2llcy5cbiAqIEVhY2ggZWxlbWVudCBvZiB0aGUgYXJyYXkgaGFzIHRoZSBmb3JtIFtwZXJjZW50LCB2YWx1ZV1cbiAqXG4gKiBUaHVzLCB0byBzZXQgYSBmaWVsZCBmcm9tIDUwLDAwMCB0byAzMCwwMDAsMDAwIGluIHN0ZXBzOlxuICogMSkgRnJvbSA1MCAwMDAgdG8gMjAwIDAwMCBieSA1MDAwIHBlciBzdGVwICgzMCBzdGVwcylcbiAqIDIpIEZyb20gMjAwIDAwMCB0byAxIDAwMCAwMDAgYnkgNTAgMDAwIHBlciBzdGVwICgxNiBzdGVwcylcbiAqIDMpIEZyb20gMSAwMDAgMDAwIHRvIDMwIDAwMCAwMDAgYnkgNTAwIDAwMCBwZXIgc3RlcCAoNTggc3RlcHMpXG4gKlxuICogWW91IG5lZWQgdG8gcGFzcyB0aGUgZm9sbG93aW5nIGtleVN0ZXAgKHdoZXJlIDEwNCA9IDMwICsgMTYgKyA1OCBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIHN0ZXBzKTpcbiAqICBbXG4gKiAgICAgIFswLCA1MF8wMDBdLFxuICogICAgICBbMTAwIC8gMTA0ICogMzAsIDIwMF8wMDBdLFxuICogICAgICBbMTAwIC8gMTA0ICogKDMwICsgMTYpLCAxXzAwMF8wMDBdLFxuICogICAgICBbMTAwLCAzMF8wMDBfMDAwXSxcbiAqICBdO1xuICpcbiAqL1xuZXhwb3J0IHR5cGUgVHVpS2V5U3RlcHMgPSBbWzAsIG51bWJlcl0sIC4uLkFycmF5PFtudW1iZXIsIG51bWJlcl0+LCBbMTAwLCBudW1iZXJdXTtcblxuZnVuY3Rpb24gdHVpRmluZEtleVN0ZXBzQm91bmRhcmllc0J5Rm4oXG4gICAga2V5U3RlcHM6IFR1aUtleVN0ZXBzLFxuICAgIGZuOiAoW2tleVN0ZXBQZXJjZW50LCBrZXlTdGVwVmFsdWVdOiBbbnVtYmVyLCBudW1iZXJdKSA9PiBib29sZWFuLFxuKTogW1tudW1iZXIsIG51bWJlcl0sIFtudW1iZXIsIG51bWJlcl1dIHtcbiAgICBjb25zdCBrZXlTdGVwVXBwZXJJbmRleCA9IGtleVN0ZXBzLmZpbmRJbmRleCgoa2V5U3RlcCwgaSkgPT4gaSAmJiBmbihrZXlTdGVwKSk7XG5cbiAgICBjb25zdCBsb3dlclN0ZXAgPSBrZXlTdGVwc1trZXlTdGVwVXBwZXJJbmRleCAtIDFdIHx8IGtleVN0ZXBzWzBdO1xuICAgIGNvbnN0IHVwcGVyU3RlcCA9IGtleVN0ZXBzW2tleVN0ZXBVcHBlckluZGV4XSB8fFxuICAgICAgICBrZXlTdGVwc1trZXlTdGVwcy5sZW5ndGggLSAxXSB8fCBbMCwgMF07XG5cbiAgICByZXR1cm4gW2xvd2VyU3RlcCwgdXBwZXJTdGVwXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR1aVBlcmNlbnRhZ2VUb0tleVN0ZXBWYWx1ZShcbiAgICB2YWx1ZVBlcmNlbnRhZ2U6IG51bWJlcixcbiAgICBrZXlTdGVwczogVHVpS2V5U3RlcHMsXG4pOiBudW1iZXIge1xuICAgIGNvbnN0IFtbbG93ZXJTdGVwUGVyY2VudCwgbG93ZXJTdGVwVmFsdWVdLCBbdXBwZXJTdGVwUGVyY2VudCwgdXBwZXJTdGVwVmFsdWVdXSA9XG4gICAgICAgIHR1aUZpbmRLZXlTdGVwc0JvdW5kYXJpZXNCeUZuKFxuICAgICAgICAgICAga2V5U3RlcHMsXG4gICAgICAgICAgICAoW2tleVN0ZXBQZXJjZW50YWdlLCBfXSkgPT4gdmFsdWVQZXJjZW50YWdlIDw9IGtleVN0ZXBQZXJjZW50YWdlLFxuICAgICAgICApO1xuICAgIGNvbnN0IHJhdGlvID1cbiAgICAgICAgKHZhbHVlUGVyY2VudGFnZSAtIGxvd2VyU3RlcFBlcmNlbnQpIC8gKHVwcGVyU3RlcFBlcmNlbnQgLSBsb3dlclN0ZXBQZXJjZW50KTtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSAodXBwZXJTdGVwVmFsdWUgLSBsb3dlclN0ZXBWYWx1ZSkgKiByYXRpbyArIGxvd2VyU3RlcFZhbHVlO1xuXG4gICAgcmV0dXJuIHR1aVJvdW5kKGNvbnRyb2xWYWx1ZSwgVFVJX0ZMT0FUSU5HX1BSRUNJU0lPTik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0dWlLZXlTdGVwVmFsdWVUb1BlcmNlbnRhZ2UoXG4gICAgdmFsdWU6IG51bWJlcixcbiAgICBrZXlTdGVwczogVHVpS2V5U3RlcHMsXG4pOiBudW1iZXIge1xuICAgIGNvbnN0IFtbbG93ZXJTdGVwUGVyY2VudCwgbG93ZXJTdGVwVmFsdWVdLCBbdXBwZXJTdGVwUGVyY2VudCwgdXBwZXJTdGVwVmFsdWVdXSA9XG4gICAgICAgIHR1aUZpbmRLZXlTdGVwc0JvdW5kYXJpZXNCeUZuKFxuICAgICAgICAgICAga2V5U3RlcHMsXG4gICAgICAgICAgICAoW18sIGtleVN0ZXBWYWx1ZV0pID0+IHZhbHVlIDw9IGtleVN0ZXBWYWx1ZSxcbiAgICAgICAgKTtcbiAgICBjb25zdCByYXRpbyA9ICh2YWx1ZSAtIGxvd2VyU3RlcFZhbHVlKSAvICh1cHBlclN0ZXBWYWx1ZSAtIGxvd2VyU3RlcFZhbHVlKSB8fCAwO1xuXG4gICAgcmV0dXJuICh1cHBlclN0ZXBQZXJjZW50IC0gbG93ZXJTdGVwUGVyY2VudCkgKiByYXRpbyArIGxvd2VyU3RlcFBlcmNlbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0dWlDcmVhdGVLZXlTdGVwc1RyYW5zZm9ybWVyKFxuICAgIGtleVN0ZXBzOiBUdWlLZXlTdGVwcyxcbiAgICBzbGlkZXI6IFR1aVNsaWRlckNvbXBvbmVudCxcbik6IFR1aVZhbHVlVHJhbnNmb3JtZXI8bnVtYmVyLCBudW1iZXI+IHtcbiAgICByZXR1cm4gbmV3IChjbGFzcyBpbXBsZW1lbnRzIFR1aVZhbHVlVHJhbnNmb3JtZXI8bnVtYmVyLCBudW1iZXI+IHtcbiAgICAgICAgcHVibGljIGZyb21Db250cm9sVmFsdWUoY29udHJvbFZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWVQZXJjZW50YWdlID0gdHVpS2V5U3RlcFZhbHVlVG9QZXJjZW50YWdlKFxuICAgICAgICAgICAgICAgIGNvbnRyb2xWYWx1ZSxcbiAgICAgICAgICAgICAgICBrZXlTdGVwcyxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHJldHVybiAobmV3VmFsdWVQZXJjZW50YWdlICogKHNsaWRlci5tYXggLSBzbGlkZXIubWluKSkgLyAxMDAgKyBzbGlkZXIubWluO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIHRvQ29udHJvbFZhbHVlKG5hdGl2ZVZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVSYXRpbyA9XG4gICAgICAgICAgICAgICAgKG5hdGl2ZVZhbHVlIC0gc2xpZGVyLm1pbikgLyAoc2xpZGVyLm1heCAtIHNsaWRlci5taW4pIHx8IDA7XG5cbiAgICAgICAgICAgIHJldHVybiB0dWlQZXJjZW50YWdlVG9LZXlTdGVwVmFsdWUodmFsdWVSYXRpbyAqIDEwMCwga2V5U3RlcHMpO1xuICAgICAgICB9XG4gICAgfSkoKTtcbn1cbiJdfQ==