{"version":3,"names":["clamp","getPushedThumbValues","values","index","nextValue","min","max","step","minStepsBetweenValues","initialValues","length","nextValues","slice","minValueDifference","lastIndex","baseInitialValues","indexMin","indexMax","i","minAllowed","maxAllowed","initialValue","candidate","Math","Number","toFixed"],"sources":["get-pushed-thumb-values.ts"],"sourcesContent":["import { clamp } from \"./clamp\";\n\nexport interface GetPushedThumbValuesParams {\n\tvalues: readonly number[];\n\tindex: number;\n\tnextValue: number;\n\tmin: number;\n\tmax: number;\n\tstep: number;\n\tminStepsBetweenValues: number;\n\tinitialValues?: readonly number[] | undefined;\n}\n\n/**\n * Returns a new array of slider values where attempting to move the thumb at\n * `index` beyond its neighbours \"pushes\" them while respecting\n * `minStepsBetweenValues`. When `initialValues` is provided, pushed\n * neighbours restore toward their initial value as space opens back up.\n */\nexport function getPushedThumbValues({\n\tvalues,\n\tindex,\n\tnextValue,\n\tmin,\n\tmax,\n\tstep,\n\tminStepsBetweenValues,\n\tinitialValues,\n}: GetPushedThumbValuesParams): number[] {\n\tif (values.length === 0) {\n\t\treturn [];\n\t}\n\n\tconst nextValues = values.slice();\n\tconst minValueDifference = step * minStepsBetweenValues;\n\tconst lastIndex = nextValues.length - 1;\n\tconst baseInitialValues = initialValues ?? values;\n\n\tconst indexMin = min + index * minValueDifference;\n\tconst indexMax = max - (lastIndex - index) * minValueDifference;\n\tnextValues[index] = clamp(nextValue, indexMin, indexMax);\n\n\tfor (let i = index + 1; i <= lastIndex; i += 1) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: loop invariant keeps i-1 in range\n\t\tconst minAllowed = nextValues[i - 1]! + minValueDifference;\n\t\tconst maxAllowed = max - (lastIndex - i) * minValueDifference;\n\t\t// biome-ignore lint/style/noNonNullAssertion: i is within bounds\n\t\tconst initialValue = baseInitialValues[i] ?? nextValues[i]!;\n\t\t// biome-ignore lint/style/noNonNullAssertion: i is within bounds\n\t\tlet candidate = Math.max(nextValues[i]!, minAllowed);\n\n\t\tif (initialValue < candidate) {\n\t\t\tcandidate = Math.max(initialValue, minAllowed);\n\t\t}\n\n\t\tnextValues[i] = clamp(candidate, minAllowed, maxAllowed);\n\t}\n\n\tfor (let i = index - 1; i >= 0; i -= 1) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: loop invariant keeps i+1 in range\n\t\tconst maxAllowed = nextValues[i + 1]! - minValueDifference;\n\t\tconst minAllowed = min + i * minValueDifference;\n\t\t// biome-ignore lint/style/noNonNullAssertion: i is within bounds\n\t\tconst initialValue = baseInitialValues[i] ?? nextValues[i]!;\n\t\t// biome-ignore lint/style/noNonNullAssertion: i is within bounds\n\t\tlet candidate = Math.min(nextValues[i]!, maxAllowed);\n\n\t\tif (initialValue > candidate) {\n\t\t\tcandidate = Math.min(initialValue, maxAllowed);\n\t\t}\n\n\t\tnextValues[i] = clamp(candidate, minAllowed, maxAllowed);\n\t}\n\n\tfor (let i = 0; i <= lastIndex; i += 1) {\n\t\t// biome-ignore lint/style/noNonNullAssertion: i is within bounds\n\t\tnextValues[i] = Number(nextValues[i]!.toFixed(12));\n\t}\n\n\treturn nextValues;\n}\n"],"mappings":"AAAA,SAASA,KAAK,QAAQ,SAAS;AAa/B;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAAC;EACpCC,MAAM;EACNC,KAAK;EACLC,SAAS;EACTC,GAAG;EACHC,GAAG;EACHC,IAAI;EACJC,qBAAqB;EACrBC;AAC2B,CAAC,EAAY;EACxC,IAAIP,MAAM,CAACQ,MAAM,KAAK,CAAC,EAAE;IACxB,OAAO,EAAE;EACV;EAEA,MAAMC,UAAU,GAAGT,MAAM,CAACU,KAAK,CAAC,CAAC;EACjC,MAAMC,kBAAkB,GAAGN,IAAI,GAAGC,qBAAqB;EACvD,MAAMM,SAAS,GAAGH,UAAU,CAACD,MAAM,GAAG,CAAC;EACvC,MAAMK,iBAAiB,GAAGN,aAAa,IAAIP,MAAM;EAEjD,MAAMc,QAAQ,GAAGX,GAAG,GAAGF,KAAK,GAAGU,kBAAkB;EACjD,MAAMI,QAAQ,GAAGX,GAAG,GAAG,CAACQ,SAAS,GAAGX,KAAK,IAAIU,kBAAkB;EAC/DF,UAAU,CAACR,KAAK,CAAC,GAAGH,KAAK,CAACI,SAAS,EAAEY,QAAQ,EAAEC,QAAQ,CAAC;EAExD,KAAK,IAAIC,CAAC,GAAGf,KAAK,GAAG,CAAC,EAAEe,CAAC,IAAIJ,SAAS,EAAEI,CAAC,IAAI,CAAC,EAAE;IAC/C;IACA,MAAMC,UAAU,GAAGR,UAAU,CAACO,CAAC,GAAG,CAAC,CAAC,GAAIL,kBAAkB;IAC1D,MAAMO,UAAU,GAAGd,GAAG,GAAG,CAACQ,SAAS,GAAGI,CAAC,IAAIL,kBAAkB;IAC7D;IACA,MAAMQ,YAAY,GAAGN,iBAAiB,CAACG,CAAC,CAAC,IAAIP,UAAU,CAACO,CAAC,CAAE;IAC3D;IACA,IAAII,SAAS,GAAGC,IAAI,CAACjB,GAAG,CAACK,UAAU,CAACO,CAAC,CAAC,EAAGC,UAAU,CAAC;IAEpD,IAAIE,YAAY,GAAGC,SAAS,EAAE;MAC7BA,SAAS,GAAGC,IAAI,CAACjB,GAAG,CAACe,YAAY,EAAEF,UAAU,CAAC;IAC/C;IAEAR,UAAU,CAACO,CAAC,CAAC,GAAGlB,KAAK,CAACsB,SAAS,EAAEH,UAAU,EAAEC,UAAU,CAAC;EACzD;EAEA,KAAK,IAAIF,CAAC,GAAGf,KAAK,GAAG,CAAC,EAAEe,CAAC,IAAI,CAAC,EAAEA,CAAC,IAAI,CAAC,EAAE;IACvC;IACA,MAAME,UAAU,GAAGT,UAAU,CAACO,CAAC,GAAG,CAAC,CAAC,GAAIL,kBAAkB;IAC1D,MAAMM,UAAU,GAAGd,GAAG,GAAGa,CAAC,GAAGL,kBAAkB;IAC/C;IACA,MAAMQ,YAAY,GAAGN,iBAAiB,CAACG,CAAC,CAAC,IAAIP,UAAU,CAACO,CAAC,CAAE;IAC3D;IACA,IAAII,SAAS,GAAGC,IAAI,CAAClB,GAAG,CAACM,UAAU,CAACO,CAAC,CAAC,EAAGE,UAAU,CAAC;IAEpD,IAAIC,YAAY,GAAGC,SAAS,EAAE;MAC7BA,SAAS,GAAGC,IAAI,CAAClB,GAAG,CAACgB,YAAY,EAAED,UAAU,CAAC;IAC/C;IAEAT,UAAU,CAACO,CAAC,CAAC,GAAGlB,KAAK,CAACsB,SAAS,EAAEH,UAAU,EAAEC,UAAU,CAAC;EACzD;EAEA,KAAK,IAAIF,CAAC,GAAG,CAAC,EAAEA,CAAC,IAAIJ,SAAS,EAAEI,CAAC,IAAI,CAAC,EAAE;IACvC;IACAP,UAAU,CAACO,CAAC,CAAC,GAAGM,MAAM,CAACb,UAAU,CAACO,CAAC,CAAC,CAAEO,OAAO,CAAC,EAAE,CAAC,CAAC;EACnD;EAEA,OAAOd,UAAU;AAClB","ignoreList":[]}