({
domain = "auto",
values = [],
range
}: CreateLinearScaleOptions)
| 8 | }; |
| 9 | |
| 10 | export const createLinearScale = ({ |
| 11 | domain = "auto", |
| 12 | values = [], |
| 13 | range |
| 14 | }: CreateLinearScaleOptions): LinearScale => { |
| 15 | const resolvedDomain = resolveNumericDomain(values, domain); |
| 16 | const domainSpan = resolvedDomain[1] - resolvedDomain[0]; |
| 17 | const rangeSpan = range[1] - range[0]; |
| 18 | |
| 19 | return { |
| 20 | domain: resolvedDomain, |
| 21 | range, |
| 22 | scale: (value: number) => { |
| 23 | if (domainSpan === 0) { |
| 24 | return range[0]; |
| 25 | } |
| 26 | |
| 27 | return range[0] + ((value - resolvedDomain[0]) / domainSpan) * rangeSpan; |
| 28 | }, |
| 29 | invert: (value: number) => { |
| 30 | if (rangeSpan === 0) { |
| 31 | return resolvedDomain[0]; |
| 32 | } |
| 33 | |
| 34 | return resolvedDomain[0] + ((value - range[0]) / rangeSpan) * domainSpan; |
| 35 | } |
| 36 | }; |
| 37 | }; |
no test coverage detected