-module(sparklinekit@internal@scale). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/sparklinekit/internal/scale.gleam"). -export([min_max/1, unit/3, round_to_int/1, clamp_int/3]). -if(?OTP_RELEASE >= 27). -define(MODULEDOC(Str), -moduledoc(Str)). -define(DOC(Str), -doc(Str)). -else. -define(MODULEDOC(Str), -compile([])). -define(DOC(Str), -compile([])). -endif. ?MODULEDOC(false). -file("src/sparklinekit/internal/scale.gleam", 13). ?DOC(false). -spec min_max(list(float())) -> {float(), float()}. min_max(Values) -> case Values of [] -> {+0.0, +0.0}; [Head | Rest] -> gleam@list:fold( Rest, {Head, Head}, fun(Acc, Value) -> {Lo, Hi} = Acc, New_lo = case Value < Lo of true -> Value; false -> Lo end, New_hi = case Value > Hi of true -> Value; false -> Hi end, {New_lo, New_hi} end ) end. -file("src/sparklinekit/internal/scale.gleam", 38). ?DOC(false). -spec unit(float(), float(), float()) -> float(). unit(Value, Min, Max) -> Span = Max - Min, case Span =< +0.0 of true -> 0.5; false -> case Span of +0.0 -> +0.0; -0.0 -> -0.0; Gleam@denominator -> (Value - Min) / Gleam@denominator end end. -file("src/sparklinekit/internal/scale.gleam", 51). ?DOC(false). -spec round_to_int(float()) -> integer(). round_to_int(Value) -> erlang:round(Value). -file("src/sparklinekit/internal/scale.gleam", 56). ?DOC(false). -spec clamp_int(integer(), integer(), integer()) -> integer(). clamp_int(Value, Lo, Hi) -> case Value < Lo of true -> Lo; false -> case Value > Hi of true -> Hi; false -> Value end end.