{"version":3,"names":["clamp","getFormatter","STEP_EPSILON_FACTOR","getFractionDigits","format","defaultOptions","resolvedOptions","minimumFractionDigits","maximumFractionDigits","Math","max","roundToFractionDigits","value","Number","isFinite","digits","min","toFixed","removeFloatingPointErrors","snapToStep","clampedValue","base","step","mode","stepSize","abs","direction","sign","tolerance","divisor","rawSteps","snappedSteps","round","floor","ceil","stepForResult","toValidatedNumber","params","minWithDefault","maxWithDefault","minWithZeroDefault","snapOnStep","small","shouldClamp","MIN_SAFE_INTEGER","snappedValue"],"sources":["validate.ts"],"sourcesContent":["import { clamp } from \"../../internals/slider-utils/clamp.ts\";\nimport { getFormatter } from \"./format-number.ts\";\n\nconst STEP_EPSILON_FACTOR = 1e-10;\n\nfunction getFractionDigits(format?: Intl.NumberFormatOptions): {\n\tmaximumFractionDigits: number;\n\tminimumFractionDigits: number;\n} {\n\tconst defaultOptions = getFormatter(\"en-US\").resolvedOptions();\n\tconst minimumFractionDigits =\n\t\tformat?.minimumFractionDigits ?? defaultOptions.minimumFractionDigits ?? 0;\n\tconst maximumFractionDigits = Math.max(\n\t\tformat?.maximumFractionDigits ?? defaultOptions.maximumFractionDigits ?? 20,\n\t\tminimumFractionDigits,\n\t);\n\treturn { maximumFractionDigits, minimumFractionDigits };\n}\n\nfunction roundToFractionDigits(\n\tvalue: number,\n\tmaximumFractionDigits: number,\n): number {\n\tif (!Number.isFinite(value)) {\n\t\treturn value;\n\t}\n\tconst digits = Math.min(Math.max(maximumFractionDigits, 0), 20);\n\treturn Number(value.toFixed(digits));\n}\n\nfunction removeFloatingPointErrors(\n\tvalue: number,\n\tformat?: Intl.NumberFormatOptions,\n): number {\n\tconst { maximumFractionDigits } = getFractionDigits(format);\n\treturn roundToFractionDigits(value, maximumFractionDigits);\n}\n\nfunction snapToStep(\n\tclampedValue: number,\n\tbase: number,\n\tstep: number,\n\tmode: \"directional\" | \"nearest\" = \"directional\",\n): number {\n\tif (step === 0) {\n\t\treturn clampedValue;\n\t}\n\n\tconst stepSize = Math.abs(step);\n\tconst direction = Math.sign(step);\n\tconst tolerance = stepSize * STEP_EPSILON_FACTOR * direction;\n\tconst divisor = mode === \"nearest\" ? step : stepSize;\n\tconst rawSteps = (clampedValue - base + tolerance) / divisor;\n\n\tlet snappedSteps: number;\n\tif (mode === \"nearest\") {\n\t\tsnappedSteps = Math.round(rawSteps);\n\t} else if (direction > 0) {\n\t\tsnappedSteps = Math.floor(rawSteps);\n\t} else {\n\t\tsnappedSteps = Math.ceil(rawSteps);\n\t}\n\n\tconst stepForResult = mode === \"nearest\" ? step : stepSize;\n\n\treturn base + snappedSteps * stepForResult;\n}\n\nexport function toValidatedNumber(\n\tvalue: number | null,\n\tparams: {\n\t\tstep: number | undefined;\n\t\tminWithDefault: number;\n\t\tmaxWithDefault: number;\n\t\tminWithZeroDefault: number;\n\t\tformat: Intl.NumberFormatOptions | undefined;\n\t\tsnapOnStep: boolean;\n\t\tsmall: boolean;\n\t\tclamp: boolean;\n\t},\n): number | null {\n\tif (value === null) {\n\t\treturn value;\n\t}\n\n\tconst {\n\t\tstep,\n\t\tminWithDefault,\n\t\tmaxWithDefault,\n\t\tminWithZeroDefault,\n\t\tformat,\n\t\tsnapOnStep,\n\t\tsmall,\n\t\tclamp: shouldClamp,\n\t} = params;\n\n\tconst clampedValue = shouldClamp\n\t\t? clamp(value, minWithDefault, maxWithDefault)\n\t\t: value;\n\n\tif (step != null && snapOnStep) {\n\t\tif (step === 0) {\n\t\t\treturn removeFloatingPointErrors(clampedValue, format);\n\t\t}\n\n\t\tlet base = minWithZeroDefault;\n\t\tif (!small && minWithDefault !== Number.MIN_SAFE_INTEGER) {\n\t\t\tbase = minWithDefault;\n\t\t}\n\n\t\tconst snappedValue = snapToStep(\n\t\t\tclampedValue,\n\t\t\tbase,\n\t\t\tstep,\n\t\t\tsmall ? \"nearest\" : \"directional\",\n\t\t);\n\t\treturn removeFloatingPointErrors(snappedValue, format);\n\t}\n\n\treturn removeFloatingPointErrors(clampedValue, format);\n}\n"],"mappings":"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","ignoreList":[]}