Current section
Files
Jump to
Current section
Files
src/easings.erl
-module(easings).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/easings.gleam").
-export([linear/1, quadratic_in/1, quadratic_out/1, quadratic_in_out/1, cubic_in/1, cubic_out/1, cubic_in_out/1, quartic_in/1, quartic_out/1, quartic_in_out/1, quintic_in/1, quintic_out/1, quintic_in_out/1, sine_in/1, sine_out/1, sine_in_out/1, exponential_in/1, exponential_out/1, exponential_in_out/1, circular_in/1, circular_out/1, circular_in_out/1, bounce_out/1, bounce_in/1, bounce_in_out/1, back_in_out/1, back_in/1, back_out/1, elastic_in/1, elastic_out/1, elastic_in_out/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-file("src/easings.gleam", 24).
?DOC(" Linear easing is an identity transformation, time is not skewed.\n").
-spec linear(float()) -> float().
linear(T) ->
T.
-file("src/easings.gleam", 30).
?DOC(
" Eases in quadratically.\n"
" * [easeInQuad](https://easings.net/#easeInQuad)\n"
).
-spec quadratic_in(float()) -> float().
quadratic_in(T) ->
T * T.
-file("src/easings.gleam", 36).
?DOC(
" Eases out quadratically.\n"
" * [easeOutQuad](https://easings.net/#easeOutQuad)\n"
).
-spec quadratic_out(float()) -> float().
quadratic_out(T) ->
T * (2.0 - T).
-file("src/easings.gleam", 42).
?DOC(
" Eases in and out quadratically.\n"
" * [easeInOutQuad](https://easings.net/#easeInOutQuad)\n"
).
-spec quadratic_in_out(float()) -> float().
quadratic_in_out(T) ->
case T < 0.5 of
true ->
(2.0 * T) * T;
false ->
T_adj = T - 1.0,
-1.0 * (((2.0 * T_adj) * T_adj) - 1.0)
end.
-file("src/easings.gleam", 54).
?DOC(
" Eases in cubically.\n"
" * [easeInCubic](https://easings.net/#easeInCubic)\n"
).
-spec cubic_in(float()) -> float().
cubic_in(T) ->
(T * T) * T.
-file("src/easings.gleam", 60).
?DOC(
" Eases out cubically.\n"
" * [easeOutCubic](https://easings.net/#easeOutCubic)\n"
).
-spec cubic_out(float()) -> float().
cubic_out(T) ->
T_adj = T - 1.0,
((T_adj * T_adj) * T_adj) + 1.0.
-file("src/easings.gleam", 67).
?DOC(
" Eases in and out cubically.\n"
" * [easeInOutCubic](https://easings.net/#easeInOutCubic)\n"
).
-spec cubic_in_out(float()) -> float().
cubic_in_out(T) ->
case T < 0.5 of
true ->
((4.0 * T) * T) * T;
false ->
T_adj = (2.0 * T) - 2.0,
(((T_adj * T_adj) * T_adj) + 2.0) / 2.0
end.
-file("src/easings.gleam", 79).
?DOC(
" Eases in quartically.\n"
" * [easeInQuart](https://easings.net/#easeInQuart)\n"
).
-spec quartic_in(float()) -> float().
quartic_in(T) ->
((T * T) * T) * T.
-file("src/easings.gleam", 85).
?DOC(
" Eases out quartically.\n"
" * [easeOutQuart](https://easings.net/#easeOutQuart)\n"
).
-spec quartic_out(float()) -> float().
quartic_out(T) ->
1.0 - (((T * T) * T) * T).
-file("src/easings.gleam", 91).
?DOC(
" Eases in and out quartically.\n"
" * [easeInOutQuart](https://easings.net/#easeInOutQuart)\n"
).
-spec quartic_in_out(float()) -> float().
quartic_in_out(T) ->
case T of
X when X < 0.5 ->
(((8.0 * X) * X) * X) * X;
X@1 ->
X@2 = (-2.0 * X@1) + 2.0,
1.0 - ((((X@2 * X@2) * X@2) * X@2) / 2.0)
end.
-file("src/easings.gleam", 103).
?DOC(
" Eases in quintically.\n"
" * [easeInQuint](https://easings.net/#easeInQuint)\n"
).
-spec quintic_in(float()) -> float().
quintic_in(T) ->
(((T * T) * T) * T) * T.
-file("src/easings.gleam", 109).
?DOC(
" Eases out quintically.\n"
" * [easeOutQuint](https://easings.net/#easeOutQuint)\n"
).
-spec quintic_out(float()) -> float().
quintic_out(T) ->
1.0 - ((((T * T) * T) * T) * T).
-file("src/easings.gleam", 115).
?DOC(
" Eases in and out quintically.\n"
" * [easeInOutQuint](https://easings.net/#easeInOutQuint)\n"
).
-spec quintic_in_out(float()) -> float().
quintic_in_out(T) ->
case T of
X when X < 0.5 ->
((((16.0 * X) * X) * X) * X) * X;
X@1 ->
X@2 = (-2.0 * X@1) + 2.0,
1.0 - (((((X@2 * X@2) * X@2) * X@2) * X@2) / 2.0)
end.
-file("src/easings.gleam", 127).
?DOC(
" Eases in with a sine function.\n"
" * [easeInSine](https://easings.net/#easeInSine)\n"
).
-spec sine_in(float()) -> float().
sine_in(T) ->
Angle = T * 1.5707963267948966,
1.0 - gleam_community@maths:cos(Angle).
-file("src/easings.gleam", 134).
?DOC(
" Eases out with a sine function.\n"
" * [easeOutSine](https://easings.net/#easeOutSine)\n"
).
-spec sine_out(float()) -> float().
sine_out(T) ->
Angle = T * 1.5707963267948966,
gleam_community@maths:sin(Angle).
-file("src/easings.gleam", 141).
?DOC(
" Eases in and out with a sine function.\n"
" * [easeInOutSine](https://easings.net/#easeInOutSine)\n"
).
-spec sine_in_out(float()) -> float().
sine_in_out(T) ->
Angle = 3.141592653589793 * T,
(1.0 - gleam_community@maths:cos(Angle)) / 2.0.
-file("src/easings.gleam", 148).
?DOC(
" Eases in exponentially.\n"
" * [easeInExpo](https://easings.net/#easeInExpo)\n"
).
-spec exponential_in(float()) -> float().
exponential_in(T) ->
case T of
+0.0 ->
+0.0;
_ ->
R@1 = case gleam@float:power(2.0, (10.0 * T) - 10.0) of
{ok, R} -> R;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"exponential_in"/utf8>>,
line => 152,
value => _assert_fail,
start => 3645,
'end' => 3699,
pattern_start => 3656,
pattern_end => 3661})
end,
R@1
end.
-file("src/easings.gleam", 160).
?DOC(
" Eases out exponentially.\n"
" * [easeOutExpo](https://easings.net/#easeOutExpo)\n"
).
-spec exponential_out(float()) -> float().
exponential_out(T) ->
case T of
1.0 ->
1.0;
_ ->
R@1 = case gleam@float:power(2.0, -10.0 * T) of
{ok, R} -> R;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"exponential_out"/utf8>>,
line => 164,
value => _assert_fail,
start => 3891,
'end' => 3938,
pattern_start => 3902,
pattern_end => 3907})
end,
1.0 - R@1
end.
-file("src/easings.gleam", 172).
?DOC(
" Eases in and out exponentially.\n"
" * [easeInOutExpo](https://easings.net/#easeInOutExpo)\n"
).
-spec exponential_in_out(float()) -> float().
exponential_in_out(T) ->
case T of
+0.0 ->
+0.0;
1.0 ->
1.0;
X when X < 0.5 ->
R@1 = case gleam@float:power(2.0, (20.0 * X) - 10.0) of
{ok, R} -> R;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"exponential_in_out"/utf8>>,
line => 177,
value => _assert_fail,
start => 4178,
'end' => 4232,
pattern_start => 4189,
pattern_end => 4194})
end,
R@1 / 2.0;
_ ->
R@3 = case gleam@float:power(2.0, (-20.0 * T) + 10.0) of
{ok, R@2} -> R@2;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"exponential_in_out"/utf8>>,
line => 181,
value => _assert_fail@1,
start => 4271,
'end' => 4326,
pattern_start => 4282,
pattern_end => 4287})
end,
(2.0 - R@3) / 2.0
end.
-file("src/easings.gleam", 189).
?DOC(
" Eases in on an elliptic arc.\n"
" * [easeInCirc](https://easings.net/#easeInCirc)\n"
).
-spec circular_in(float()) -> float().
circular_in(T) ->
I@1 = case gleam@float:power(T, 2.0) of
{ok, I} -> I;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"circular_in"/utf8>>,
line => 190,
value => _assert_fail,
start => 4493,
'end' => 4531,
pattern_start => 4504,
pattern_end => 4509})
end,
O@1 = case gleam@float:square_root(1.0 - I@1) of
{ok, O} -> O;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"circular_in"/utf8>>,
line => 191,
value => _assert_fail@1,
start => 4534,
'end' => 4580,
pattern_start => 4545,
pattern_end => 4550})
end,
1.0 - O@1.
-file("src/easings.gleam", 197).
?DOC(
" Eases out on an elliptic arc.\n"
" * [easeOutCirc](https://easings.net/#easeOutCirc)\n"
).
-spec circular_out(float()) -> float().
circular_out(T) ->
I@1 = case gleam@float:power(T - 1.0, 2.0) of
{ok, I} -> I;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"circular_out"/utf8>>,
line => 198,
value => _assert_fail,
start => 4726,
'end' => 4771,
pattern_start => 4737,
pattern_end => 4742})
end,
O@1 = case gleam@float:square_root(1.0 - I@1) of
{ok, O} -> O;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"circular_out"/utf8>>,
line => 199,
value => _assert_fail@1,
start => 4774,
'end' => 4820,
pattern_start => 4785,
pattern_end => 4790})
end,
O@1.
-file("src/easings.gleam", 205).
?DOC(
" Eases in and out on elliptic arcs.\n"
" * [easeInOutCirc](https://easings.net/#easeInOutCirc)\n"
).
-spec circular_in_out(float()) -> float().
circular_in_out(T) ->
case T < 0.5 of
true ->
I@1 = case gleam@float:power(2.0 * T, 2.0) of
{ok, I} -> I;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"circular_in_out"/utf8>>,
line => 208,
value => _assert_fail,
start => 5007,
'end' => 5052,
pattern_start => 5018,
pattern_end => 5023})
end,
O@1 = case gleam@float:square_root(1.0 - I@1) of
{ok, O} -> O;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"circular_in_out"/utf8>>,
line => 209,
value => _assert_fail@1,
start => 5059,
'end' => 5105,
pattern_start => 5070,
pattern_end => 5075})
end,
(1.0 - O@1) / 2.0;
false ->
I@3 = case gleam@float:power((-2.0 * T) + 2.0, 2.0) of
{ok, I@2} -> I@2;
_assert_fail@2 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"circular_in_out"/utf8>>,
line => 213,
value => _assert_fail@2,
start => 5159,
'end' => 5212,
pattern_start => 5170,
pattern_end => 5175})
end,
O@3 = case gleam@float:square_root(1.0 - I@3) of
{ok, O@2} -> O@2;
_assert_fail@3 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"circular_in_out"/utf8>>,
line => 214,
value => _assert_fail@3,
start => 5219,
'end' => 5265,
pattern_start => 5230,
pattern_end => 5235})
end,
(O@3 + 1.0) / 2.0
end.
-file("src/easings.gleam", 299).
?DOC(
" Eases out by \"bouncing\" around the end.\n"
" * [easeOutBounce](https://easings.net/#easeOutBounce)\n"
).
-spec bounce_out(float()) -> float().
bounce_out(T) ->
N1 = 7.5625,
D1 = 2.75,
A = case D1 of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator -> 1.0 / Gleam@denominator
end,
B = 2.0 * A,
C = 2.5 * A,
case T of
T@1 when T@1 < A ->
(N1 * T@1) * T@1;
T@2 when T@2 < B ->
T@3 = T@2 - (case D1 of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator@1 -> 1.5 / Gleam@denominator@1
end),
((N1 * T@3) * T@3) + 0.75;
T@4 when T@4 < C ->
T@5 = T@4 - (case D1 of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator@2 -> 2.25 / Gleam@denominator@2
end),
((N1 * T@5) * T@5) + 0.9375;
_ ->
T@6 = T - (case D1 of
+0.0 -> +0.0;
-0.0 -> -0.0;
Gleam@denominator@3 -> 2.625 / Gleam@denominator@3
end),
((N1 * T@6) * T@6) + 0.984375
end.
-file("src/easings.gleam", 293).
?DOC(
" Eases in by \"bouncing\" around the start.\n"
" * [easeInBounce](https://easings.net/#easeInBounce)\n"
).
-spec bounce_in(float()) -> float().
bounce_in(T) ->
1.0 - bounce_out(1.0 - T).
-file("src/easings.gleam", 327).
?DOC(
" Eases in and out by \"bouncing\" around the start and the end.\n"
" * [easeInBounce](https://easings.net/#easeInBounce)\n"
).
-spec bounce_in_out(float()) -> float().
bounce_in_out(T) ->
case T of
X when X < 0.5 ->
0.5 * bounce_in(2.0 * X);
X@1 ->
0.5 + (0.5 * bounce_out((2.0 * X@1) - 1.0))
end.
-file("src/easings.gleam", 235).
?DOC(
" Eases away from the goal, and then beyond it.\n"
" * [easeInOutBack](https://easings.net/#easeInOutBack)\n"
).
-spec back_in_out(float()) -> float().
back_in_out(T) ->
case T < 0.5 of
true ->
X = T * 2.0,
((X * X) * (((2.5949095 + 1.0) * X) - 2.5949095)) / 2.0;
false ->
X@1 = (T * 2.0) - 2.0,
(((X@1 * X@1) * (((2.5949095 + 1.0) * X@1) + 2.5949095)) + 2.0) / 2.0
end.
-file("src/easings.gleam", 222).
?DOC(
" Eases away from the goal before accelerating toward it.\n"
" * [easeInBack](https://easings.net/#easeInBack)\n"
).
-spec back_in(float()) -> float().
back_in(T) ->
(((3.5949095 * T) * T) * T) - ((1.70158 * T) * T).
-file("src/easings.gleam", 228).
?DOC(
" Eases quickly past the goal before settling toward it.\n"
" * [easeOutBack](https://easings.net/#easeOutBack)\n"
).
-spec back_out(float()) -> float().
back_out(T) ->
X = T - 1.0,
(1.0 + (((3.5949095 * X) * X) * X)) + ((1.70158 * X) * X).
-file("src/easings.gleam", 250).
?DOC(
" Eases by oscillating with increasing amplitude around the start.\n"
" * [easeInElastic](https://easings.net/#easeInElastic)\n"
).
-spec elastic_in(float()) -> float().
elastic_in(T) ->
case T of
+0.0 ->
+0.0;
1.0 ->
1.0;
X ->
P@1 = case gleam@float:power(2.0, (10.0 * X) - 10.0) of
{ok, P} -> P;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"elastic_in"/utf8>>,
line => 255,
value => _assert_fail,
start => 6341,
'end' => 6395,
pattern_start => 6352,
pattern_end => 6357})
end,
(+0.0 - P@1) * gleam_community@maths:sin(
((X * 10.0) - 10.75) * 2.0943951
)
end.
-file("src/easings.gleam", 263).
?DOC(
" Eases by oscillating with decreasing amplitude around the end.\n"
" * [easeOutElastic](https://easings.net/#easeOutElastic)\n"
).
-spec elastic_out(float()) -> float().
elastic_out(T) ->
case T of
+0.0 ->
+0.0;
1.0 ->
1.0;
X ->
P@1 = case gleam@float:power(2.0, -10.0 * X) of
{ok, P} -> P;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"elastic_out"/utf8>>,
line => 268,
value => _assert_fail,
start => 6696,
'end' => 6743,
pattern_start => 6707,
pattern_end => 6712})
end,
(P@1 * gleam_community@maths:sin(((X * 10.0) - 0.75) * 2.0943951)) + 1.0
end.
-file("src/easings.gleam", 276).
?DOC(
" Eases by oscillating with increasing amplitude around the start, and decreasing around the end.\n"
" * [easeInOutElastic](https://easings.net/#easeInOutElastic)\n"
).
-spec elastic_in_out(float()) -> float().
elastic_in_out(T) ->
case T of
+0.0 ->
+0.0;
1.0 ->
1.0;
X when X < 0.5 ->
P@1 = case gleam@float:power(2.0, (20.0 * X) - 10.0) of
{ok, P} -> P;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"elastic_in_out"/utf8>>,
line => 281,
value => _assert_fail,
start => 7091,
'end' => 7145,
pattern_start => 7102,
pattern_end => 7107})
end,
((+0.0 - P@1) * gleam_community@maths:sin(
((20.0 * X) - 11.125) * 1.3962634
))
/ 2.0;
X@1 ->
P@3 = case gleam@float:power(2.0, (-20.0 * X@1) + 10.0) of
{ok, P@2} -> P@2;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"easings"/utf8>>,
function => <<"elastic_in_out"/utf8>>,
line => 285,
value => _assert_fail@1,
start => 7239,
'end' => 7294,
pattern_start => 7250,
pattern_end => 7255})
end,
((P@3 * gleam_community@maths:sin(
((20.0 * X@1) - 11.125) * 1.3962634
))
/ 2.0)
+ 1.0
end.