-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 => <>, 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 => <>, 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.