-module(ui@box). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/ui/box.gleam"). -export([draw_box/5, draw_box_with_title/6, fill_box/5, draw_text_in_box/8, draw_menu_box/7, draw_progress_box/7]). -file("src/ui/box.gleam", 9). -spec draw_box( integer(), integer(), integer(), integer(), types@box_style:box_style() ) -> nil. draw_box(X, Y, Width, Height, Style) -> {Tl, Tr, Bl, Br, H, V} = utils@text:get_box_chars(Style), utils@misc:print_at( <<<>/binary, Tr/binary>>, X, Y ), _pipe = gleam@list:range(1, Height - 2), gleam@list:each( _pipe, fun(Row) -> utils@misc:print_at(V, X, Y + Row), utils@misc:print_at(V, (X + Width) - 1, Y + Row) end ), utils@misc:print_at( <<<>/binary, Br/binary>>, X, (Y + Height) - 1 ). -file("src/ui/box.gleam", 23). -spec draw_box_with_title( integer(), integer(), integer(), integer(), types@box_style:box_style(), binary() ) -> nil. draw_box_with_title(X, Y, Width, Height, Style, Title) -> draw_box(X, Y, Width, Height, Style), {_, _, _, _, _, _} = utils@text:get_box_chars(Style), Title_padded = <<<<" "/utf8, Title/binary>>/binary, " "/utf8>>, Title_length = string:length(Title_padded), case Title_length < (Width - 2) of true -> Title_x = X + ((Width - Title_length) div 2), utils@misc:print_at(Title_padded, Title_x, Y); false -> nil end. -file("src/ui/box.gleam", 46). -spec fill_box(integer(), integer(), integer(), integer(), binary()) -> nil. fill_box(X, Y, Width, Height, Fill_char) -> Fill_line = gleam@string:repeat(Fill_char, Width), _pipe = gleam@list:range(0, Height - 1), gleam@list:each( _pipe, fun(Row) -> utils@misc:print_at(Fill_line, X, Y + Row) end ). -file("src/ui/box.gleam", 58). -spec draw_text_in_box( integer(), integer(), integer(), integer(), types@box_style:box_style(), binary(), list(binary()), types@alignment:alignment() ) -> nil. draw_text_in_box(X, Y, Width, Height, Style, Title, Content, Alignment) -> draw_box_with_title(X, Y, Width, Height, Style, Title), Content_width = Width - 2, Content_y_start = Y + 1, Max_lines = Height - 2, _pipe = gleam@list:take(Content, Max_lines), _pipe@1 = gleam@list:index_map( _pipe, fun(Line, Index) -> Aligned_line = utils@text:align_text(Line, Content_width, Alignment), utils@misc:print_at(Aligned_line, X + 1, Content_y_start + Index) end ), erlang:length(_pipe@1), nil. -file("src/ui/box.gleam", 83). -spec draw_menu_box( integer(), integer(), integer(), binary(), list(binary()), integer(), types@box_style:box_style() ) -> nil. draw_menu_box(X, Y, Width, Title, Options, Selected, Style) -> Height = erlang:length(Options) + 2, draw_box_with_title(X, Y, Width, Height, Style, Title), _pipe = gleam@list:index_map( Options, fun(Option, Index) -> Prefix = case Index =:= Selected of true -> <<"> "/utf8>>; false -> <<" "/utf8>> end, Line = <>, Aligned = utils@text:align_text(Line, Width - 2, left), utils@misc:print_at(Aligned, X + 1, (Y + 1) + Index) end ), erlang:length(_pipe), nil. -file("src/ui/box.gleam", 108). -spec draw_progress_box( integer(), integer(), integer(), binary(), integer(), integer(), types@box_style:box_style() ) -> nil. draw_progress_box(X, Y, Width, Title, Current, Total, Style) -> draw_box_with_title(X, Y, Width, 4, Style, Title), Bar = ui@progress:progress_bar(Current, Total, Width - 4), utils@misc:print_at( utils@text:align_text(Bar, Width - 2, center), X + 1, Y + 2 ).