-module(gg_cn@internal@validators).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gg_cn/internal/validators.gleam").
-export([compile/0, is_number/2, is_integer/2, is_percent/2, is_fraction/2, is_tshirt_size/2, is_any/1, is_arbitrary_variable/2, is_arbitrary_value/2, is_any_non_arbitrary/2, is_arbitrary_size/2, is_arbitrary_length/2, is_arbitrary_number/2, is_arbitrary_weight/2, is_arbitrary_family_name/2, is_arbitrary_position/2, is_arbitrary_image/2, is_arbitrary_shadow/2, is_arbitrary_variable_length/2, is_arbitrary_variable_family_name/2, is_arbitrary_variable_position/2, is_arbitrary_variable_size/2, is_arbitrary_variable_image/2, is_arbitrary_variable_shadow/2, is_arbitrary_variable_weight/2, is_named_container_query/1]).
-export_type([regexes/0]).
-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).
-type regexes() :: {regexes,
gleam@regexp:regexp(),
gleam@regexp:regexp(),
gleam@regexp:regexp(),
gleam@regexp:regexp(),
gleam@regexp:regexp(),
gleam@regexp:regexp(),
gleam@regexp:regexp(),
gleam@regexp:regexp(),
gleam@regexp:regexp(),
gleam@regexp:regexp(),
gleam@regexp:regexp(),
gleam@regexp:regexp()}.
-file("src/gg_cn/internal/validators.gleam", 34).
?DOC(false).
-spec ci(binary()) -> gleam@regexp:regexp().
ci(Pattern) ->
Re@1 = case gleam@regexp:compile(Pattern, {options, true, false}) of
{ok, Re} -> Re;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"gg_cn/internal/validators"/utf8>>,
function => <<"ci"/utf8>>,
line => 35,
value => _assert_fail,
start => 1057,
'end' => 1182,
pattern_start => 1068,
pattern_end => 1074})
end,
Re@1.
-file("src/gg_cn/internal/validators.gleam", 43).
?DOC(false).
-spec cs(binary()) -> gleam@regexp:regexp().
cs(Pattern) ->
Re@1 = case gleam@regexp:compile(Pattern, {options, false, false}) of
{ok, Re} -> Re;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"gg_cn/internal/validators"/utf8>>,
function => <<"cs"/utf8>>,
line => 44,
value => _assert_fail,
start => 1228,
'end' => 1354,
pattern_start => 1239,
pattern_end => 1245})
end,
Re@1.
-file("src/gg_cn/internal/validators.gleam", 52).
?DOC(false).
-spec compile() -> regexes().
compile() ->
{regexes,
ci(<<"^\\[(?:(\\w[\\w-]*):)?(.+)\\]$"/utf8>>),
ci(<<"^\\((?:(\\w[\\w-]*):)?(.+)\\)$"/utf8>>),
cs(<<"^\\d+(?:\\.\\d+)?\\/\\d+(?:\\.\\d+)?$"/utf8>>),
cs(<<"^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$"/utf8>>),
cs(
<<"\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$"/utf8>>
),
cs(<<"^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$"/utf8>>),
cs(
<<"^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)"/utf8>>
),
cs(
<<"^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$"/utf8>>
),
cs(<<"^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([eE][+-]?\\d+)?$"/utf8>>),
cs(<<"^0[xX][0-9a-fA-F]+$"/utf8>>),
cs(<<"^0[oO][0-7]+$"/utf8>>),
cs(<<"^0[bB][01]+$"/utf8>>)}.
-file("src/gg_cn/internal/validators.gleam", 77).
?DOC(false).
-spec first_submatches(gleam@regexp:regexp(), binary()) -> {ok,
list(gleam@option:option(binary()))} |
{error, nil}.
first_submatches(Re, Value) ->
case gleam@regexp:scan(Re, Value) of
[Match | _] ->
{ok, erlang:element(3, Match)};
[] ->
{error, nil}
end.
-file("src/gg_cn/internal/validators.gleam", 87).
?DOC(false).
-spec submatch(list(gleam@option:option(binary())), integer()) -> gleam@option:option(binary()).
submatch(Subs, Index) ->
case gleam@list:drop(Subs, Index) of
[First | _] ->
First;
[] ->
none
end.
-file("src/gg_cn/internal/validators.gleam", 96).
?DOC(false).
-spec is_number(regexes(), binary()) -> boolean().
is_number(Rx, Value) ->
V = gleam@string:trim(Value),
(V /= <<""/utf8>>) andalso (((gleam@regexp:check(erlang:element(10, Rx), V)
orelse gleam@regexp:check(erlang:element(11, Rx), V))
orelse gleam@regexp:check(erlang:element(12, Rx), V))
orelse gleam@regexp:check(erlang:element(13, Rx), V)).
-file("src/gg_cn/internal/validators.gleam", 112).
?DOC(false).
-spec integral(regexes(), binary()) -> boolean().
integral(Rx, V) ->
case (gleam@regexp:check(erlang:element(11, Rx), V) orelse gleam@regexp:check(
erlang:element(12, Rx),
V
))
orelse gleam@regexp:check(erlang:element(13, Rx), V) of
true ->
true;
false ->
Unsigned = case gleam_stdlib:string_starts_with(V, <<"+"/utf8>>) of
true ->
gleam@string:drop_start(V, 1);
false ->
V
end,
case gleam_stdlib:parse_int(Unsigned) of
{ok, _} ->
true;
{error, _} ->
case gleam_stdlib:parse_float(Unsigned) of
{ok, F} ->
math:floor(F) =:= F;
{error, _} ->
false
end
end
end.
-file("src/gg_cn/internal/validators.gleam", 107).
?DOC(false).
-spec is_integer(regexes(), binary()) -> boolean().
is_integer(Rx, Value) ->
V = gleam@string:trim(Value),
is_number(Rx, V) andalso integral(Rx, V).
-file("src/gg_cn/internal/validators.gleam", 136).
?DOC(false).
-spec is_percent(regexes(), binary()) -> boolean().
is_percent(Rx, Value) ->
gleam_stdlib:string_ends_with(Value, <<"%"/utf8>>) andalso is_number(
Rx,
gleam@string:drop_end(Value, 1)
).
-file("src/gg_cn/internal/validators.gleam", 140).
?DOC(false).
-spec is_fraction(regexes(), binary()) -> boolean().
is_fraction(Rx, Value) ->
gleam@regexp:check(erlang:element(4, Rx), Value).
-file("src/gg_cn/internal/validators.gleam", 144).
?DOC(false).
-spec is_tshirt_size(regexes(), binary()) -> boolean().
is_tshirt_size(Rx, Value) ->
gleam@regexp:check(erlang:element(5, Rx), Value).
-file("src/gg_cn/internal/validators.gleam", 148).
?DOC(false).
-spec is_any(binary()) -> boolean().
is_any(_) ->
true.
-file("src/gg_cn/internal/validators.gleam", 162).
?DOC(false).
-spec is_arbitrary_variable(regexes(), binary()) -> boolean().
is_arbitrary_variable(Rx, Value) ->
gleam@regexp:check(erlang:element(3, Rx), Value).
-file("src/gg_cn/internal/validators.gleam", 158).
?DOC(false).
-spec is_arbitrary_value(regexes(), binary()) -> boolean().
is_arbitrary_value(Rx, Value) ->
gleam@regexp:check(erlang:element(2, Rx), Value).
-file("src/gg_cn/internal/validators.gleam", 152).
?DOC(false).
-spec is_any_non_arbitrary(regexes(), binary()) -> boolean().
is_any_non_arbitrary(Rx, Value) ->
not is_arbitrary_value(Rx, Value) andalso not is_arbitrary_variable(
Rx,
Value
).
-file("src/gg_cn/internal/validators.gleam", 166).
?DOC(false).
-spec is_length_only(regexes(), binary()) -> boolean().
is_length_only(Rx, Value) ->
gleam@regexp:check(erlang:element(6, Rx), Value) andalso not gleam@regexp:check(
erlang:element(7, Rx),
Value
).
-file("src/gg_cn/internal/validators.gleam", 172).
?DOC(false).
-spec is_shadow(regexes(), binary()) -> boolean().
is_shadow(Rx, Value) ->
gleam@regexp:check(erlang:element(8, Rx), Value).
-file("src/gg_cn/internal/validators.gleam", 176).
?DOC(false).
-spec is_image(regexes(), binary()) -> boolean().
is_image(Rx, Value) ->
gleam@regexp:check(erlang:element(9, Rx), Value).
-file("src/gg_cn/internal/validators.gleam", 180).
?DOC(false).
-spec never(binary()) -> boolean().
never(_) ->
false.
-file("src/gg_cn/internal/validators.gleam", 184).
?DOC(false).
-spec get_is_arbitrary_value(
regexes(),
binary(),
fun((binary()) -> boolean()),
fun((binary()) -> boolean())
) -> boolean().
get_is_arbitrary_value(Rx, Value, Test_label, Test_value) ->
case first_submatches(erlang:element(2, Rx), Value) of
{ok, Subs} ->
case submatch(Subs, 0) of
{some, Label} ->
Test_label(Label);
none ->
case submatch(Subs, 1) of
{some, Inner} ->
Test_value(Inner);
none ->
false
end
end;
{error, _} ->
false
end.
-file("src/gg_cn/internal/validators.gleam", 204).
?DOC(false).
-spec get_is_arbitrary_variable(
regexes(),
binary(),
fun((binary()) -> boolean()),
boolean()
) -> boolean().
get_is_arbitrary_variable(Rx, Value, Test_label, Should_match_no_label) ->
case first_submatches(erlang:element(3, Rx), Value) of
{ok, Subs} ->
case submatch(Subs, 0) of
{some, Label} ->
Test_label(Label);
none ->
Should_match_no_label
end;
{error, _} ->
false
end.
-file("src/gg_cn/internal/validators.gleam", 292).
?DOC(false).
-spec is_label_size(binary()) -> boolean().
is_label_size(Label) ->
((Label =:= <<"length"/utf8>>) orelse (Label =:= <<"size"/utf8>>)) orelse (Label
=:= <<"bg-size"/utf8>>).
-file("src/gg_cn/internal/validators.gleam", 220).
?DOC(false).
-spec is_arbitrary_size(regexes(), binary()) -> boolean().
is_arbitrary_size(Rx, Value) ->
get_is_arbitrary_value(Rx, Value, fun is_label_size/1, fun never/1).
-file("src/gg_cn/internal/validators.gleam", 296).
?DOC(false).
-spec is_label_length(binary()) -> boolean().
is_label_length(Label) ->
Label =:= <<"length"/utf8>>.
-file("src/gg_cn/internal/validators.gleam", 224).
?DOC(false).
-spec is_arbitrary_length(regexes(), binary()) -> boolean().
is_arbitrary_length(Rx, Value) ->
get_is_arbitrary_value(
Rx,
Value,
fun is_label_length/1,
fun(V) -> is_length_only(Rx, V) end
).
-file("src/gg_cn/internal/validators.gleam", 300).
?DOC(false).
-spec is_label_number(binary()) -> boolean().
is_label_number(Label) ->
Label =:= <<"number"/utf8>>.
-file("src/gg_cn/internal/validators.gleam", 230).
?DOC(false).
-spec is_arbitrary_number(regexes(), binary()) -> boolean().
is_arbitrary_number(Rx, Value) ->
get_is_arbitrary_value(
Rx,
Value,
fun is_label_number/1,
fun(V) -> is_number(Rx, V) end
).
-file("src/gg_cn/internal/validators.gleam", 308).
?DOC(false).
-spec is_label_weight(binary()) -> boolean().
is_label_weight(Label) ->
(Label =:= <<"number"/utf8>>) orelse (Label =:= <<"weight"/utf8>>).
-file("src/gg_cn/internal/validators.gleam", 234).
?DOC(false).
-spec is_arbitrary_weight(regexes(), binary()) -> boolean().
is_arbitrary_weight(Rx, Value) ->
get_is_arbitrary_value(Rx, Value, fun is_label_weight/1, fun is_any/1).
-file("src/gg_cn/internal/validators.gleam", 304).
?DOC(false).
-spec is_label_family_name(binary()) -> boolean().
is_label_family_name(Label) ->
Label =:= <<"family-name"/utf8>>.
-file("src/gg_cn/internal/validators.gleam", 238).
?DOC(false).
-spec is_arbitrary_family_name(regexes(), binary()) -> boolean().
is_arbitrary_family_name(Rx, Value) ->
get_is_arbitrary_value(Rx, Value, fun is_label_family_name/1, fun never/1).
-file("src/gg_cn/internal/validators.gleam", 284).
?DOC(false).
-spec is_label_position(binary()) -> boolean().
is_label_position(Label) ->
(Label =:= <<"position"/utf8>>) orelse (Label =:= <<"percentage"/utf8>>).
-file("src/gg_cn/internal/validators.gleam", 242).
?DOC(false).
-spec is_arbitrary_position(regexes(), binary()) -> boolean().
is_arbitrary_position(Rx, Value) ->
get_is_arbitrary_value(Rx, Value, fun is_label_position/1, fun never/1).
-file("src/gg_cn/internal/validators.gleam", 288).
?DOC(false).
-spec is_label_image(binary()) -> boolean().
is_label_image(Label) ->
(Label =:= <<"image"/utf8>>) orelse (Label =:= <<"url"/utf8>>).
-file("src/gg_cn/internal/validators.gleam", 246).
?DOC(false).
-spec is_arbitrary_image(regexes(), binary()) -> boolean().
is_arbitrary_image(Rx, Value) ->
get_is_arbitrary_value(
Rx,
Value,
fun is_label_image/1,
fun(V) -> is_image(Rx, V) end
).
-file("src/gg_cn/internal/validators.gleam", 312).
?DOC(false).
-spec is_label_shadow(binary()) -> boolean().
is_label_shadow(Label) ->
Label =:= <<"shadow"/utf8>>.
-file("src/gg_cn/internal/validators.gleam", 250).
?DOC(false).
-spec is_arbitrary_shadow(regexes(), binary()) -> boolean().
is_arbitrary_shadow(Rx, Value) ->
get_is_arbitrary_value(
Rx,
Value,
fun is_label_shadow/1,
fun(V) -> is_shadow(Rx, V) end
).
-file("src/gg_cn/internal/validators.gleam", 254).
?DOC(false).
-spec is_arbitrary_variable_length(regexes(), binary()) -> boolean().
is_arbitrary_variable_length(Rx, Value) ->
get_is_arbitrary_variable(Rx, Value, fun is_label_length/1, false).
-file("src/gg_cn/internal/validators.gleam", 258).
?DOC(false).
-spec is_arbitrary_variable_family_name(regexes(), binary()) -> boolean().
is_arbitrary_variable_family_name(Rx, Value) ->
get_is_arbitrary_variable(Rx, Value, fun is_label_family_name/1, false).
-file("src/gg_cn/internal/validators.gleam", 262).
?DOC(false).
-spec is_arbitrary_variable_position(regexes(), binary()) -> boolean().
is_arbitrary_variable_position(Rx, Value) ->
get_is_arbitrary_variable(Rx, Value, fun is_label_position/1, false).
-file("src/gg_cn/internal/validators.gleam", 266).
?DOC(false).
-spec is_arbitrary_variable_size(regexes(), binary()) -> boolean().
is_arbitrary_variable_size(Rx, Value) ->
get_is_arbitrary_variable(Rx, Value, fun is_label_size/1, false).
-file("src/gg_cn/internal/validators.gleam", 270).
?DOC(false).
-spec is_arbitrary_variable_image(regexes(), binary()) -> boolean().
is_arbitrary_variable_image(Rx, Value) ->
get_is_arbitrary_variable(Rx, Value, fun is_label_image/1, false).
-file("src/gg_cn/internal/validators.gleam", 274).
?DOC(false).
-spec is_arbitrary_variable_shadow(regexes(), binary()) -> boolean().
is_arbitrary_variable_shadow(Rx, Value) ->
get_is_arbitrary_variable(Rx, Value, fun is_label_shadow/1, true).
-file("src/gg_cn/internal/validators.gleam", 278).
?DOC(false).
-spec is_arbitrary_variable_weight(regexes(), binary()) -> boolean().
is_arbitrary_variable_weight(Rx, Value) ->
get_is_arbitrary_variable(Rx, Value, fun is_label_weight/1, true).
-file("src/gg_cn/internal/validators.gleam", 318).
?DOC(false).
-spec is_named_container_query(binary()) -> boolean().
is_named_container_query(Value) ->
case gleam_stdlib:string_starts_with(Value, <<"@container"/utf8>>) of
false ->
false;
true ->
Rest = gleam@string:drop_start(Value, 10),
N = string:length(Rest),
Char0 = gleam@string:slice(Rest, 0, 1),
Char1 = gleam@string:slice(Rest, 1, 1),
(((Char0 =:= <<"/"/utf8>>) andalso (N > 1)) orelse (((Char1 =:= <<"s"/utf8>>)
andalso (N > 6))
andalso gleam_stdlib:string_starts_with(Rest, <<"-size/"/utf8>>)))
orelse (((Char1 =:= <<"n"/utf8>>) andalso (N > 8)) andalso gleam_stdlib:string_starts_with(
Rest,
<<"-normal/"/utf8>>
))
end.