Packages

🎨 Gleam UI lustre library by @gleam-br

Current section

Files

Jump to
gbr_ui src gbr@ui@admin@sidebar.erl
Raw

src/gbr@ui@admin@sidebar.erl

-module(gbr@ui@admin@sidebar).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src\\gbr\\ui\\admin\\sidebar.gleam").
-export([root/2, logo/2, open/2, toggle/1, selected/3, at/2, new/1, render/1]).
-export_type([u_i_sidebar/0, u_i_sidebar_render/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.
?MODULEDOC(
"\n"
" ☰ Gleam UI sidebar super element\n"
"\n"
).
-opaque u_i_sidebar() :: {u_i_sidebar,
gbr@ui@core@el:u_i_el(),
boolean(),
list(gbr@ui@admin@sidebar@menu:u_i_sidebar_menu()),
gleam@option:option(binary()),
gleam@option:option(gbr@ui@logo:u_i_logo())}.
-opaque u_i_sidebar_render(QVL) :: {u_i_sidebar_render,
u_i_sidebar(),
fun((binary(), gbr@ui@admin@sidebar@menu:u_i_sidebar_menu()) -> QVL)}.
-file("src\\gbr\\ui\\admin\\sidebar.gleam", 75).
?DOC(
" Set root menu list\n"
"\n"
" - in: Sidebar element\n"
" - menus: Root list of menus\n"
).
-spec root(u_i_sidebar(), list(gbr@ui@admin@sidebar@menu:u_i_sidebar_menu())) -> u_i_sidebar().
root(In, Menus) ->
{u_i_sidebar,
erlang:element(2, In),
erlang:element(3, In),
Menus,
erlang:element(5, In),
erlang:element(6, In)}.
-file("src\\gbr\\ui\\admin\\sidebar.gleam", 84).
?DOC(
" Set logo sidebar head\n"
"\n"
" - in: Sidebar element\n"
" - logo: Logo element\n"
).
-spec logo(u_i_sidebar(), gbr@ui@logo:u_i_logo()) -> u_i_sidebar().
logo(In, Logo) ->
{u_i_sidebar,
erlang:element(2, In),
erlang:element(3, In),
erlang:element(4, In),
erlang:element(5, In),
{some, Logo}}.
-file("src\\gbr\\ui\\admin\\sidebar.gleam", 90).
?DOC(" Set open sidebar visibility\n").
-spec open(u_i_sidebar(), boolean()) -> u_i_sidebar().
open(In, Open) ->
{u_i_sidebar,
erlang:element(2, In),
Open,
erlang:element(4, In),
erlang:element(5, In),
erlang:element(6, In)}.
-file("src\\gbr\\ui\\admin\\sidebar.gleam", 96).
?DOC(" Toggle open sidebar visibility\n").
-spec toggle(u_i_sidebar()) -> u_i_sidebar().
toggle(In) ->
{u_i_sidebar,
erlang:element(2, In),
not erlang:element(3, In),
erlang:element(4, In),
erlang:element(5, In),
erlang:element(6, In)}.
-file("src\\gbr\\ui\\admin\\sidebar.gleam", 106).
?DOC(
" Set current selected menu\n"
"\n"
" - in: Sidebar element\n"
" - id: Menu id to select\n"
" - menu: Menu element to select\n"
).
-spec selected(
u_i_sidebar(),
binary(),
gbr@ui@admin@sidebar@menu:u_i_sidebar_menu()
) -> u_i_sidebar().
selected(In, Id, Menu) ->
{u_i_sidebar, _, _, _, Selected, _} = In,
Selected@2 = case Selected of
none ->
{some, Id};
{some, Selected@1} ->
case {Id =:= Selected@1,
gbr@ui@admin@sidebar@menu:is_menu_group(Menu),
gbr@ui@admin@sidebar@menu:is_menu_child(Menu, Selected@1)} of
{true, false, true} ->
{some, Id};
{true, false, false} ->
{some, Id};
{false, true, false} ->
{some, Id};
{false, false, true} ->
{some, Id};
{false, false, false} ->
{some, Id};
{true, true, true} ->
gbr@ui@admin@sidebar@menu:parent(Menu);
{true, true, false} ->
gbr@ui@admin@sidebar@menu:parent(Menu);
{false, true, true} ->
gbr@ui@admin@sidebar@menu:parent(Menu)
end
end,
{u_i_sidebar,
erlang:element(2, In),
erlang:element(3, In),
erlang:element(4, In),
Selected@2,
erlang:element(6, In)}.
-file("src\\gbr\\ui\\admin\\sidebar.gleam", 133).
?DOC(" New render sidebar element\n").
-spec at(
u_i_sidebar(),
fun((binary(), gbr@ui@admin@sidebar@menu:u_i_sidebar_menu()) -> QVR)
) -> u_i_sidebar_render(QVR).
at(In, Onclick) ->
{u_i_sidebar_render, In, Onclick}.
-file("src\\gbr\\ui\\admin\\sidebar.gleam", 173).
-spec menu_roots(
list(gbr@ui@admin@sidebar@menu:u_i_sidebar_menu()),
boolean(),
gleam@option:option(binary()),
fun((binary(), gbr@ui@admin@sidebar@menu:u_i_sidebar_menu()) -> QWS)
) -> list(lustre@vdom@vnode:element(QWS)).
menu_roots(Root, Open, Selected, Onclick) ->
gleam@list:map(
Root,
fun(Root@1) -> _pipe = gbr@ui@admin@sidebar@menu:at(Root@1, Onclick),
gbr@ui@admin@sidebar@menu:render(_pipe, Open, Selected) end
).
-file("src\\gbr\\ui\\admin\\sidebar.gleam", 180).
-spec classes_open(boolean()) -> lustre@vdom@vattr:attribute(any()).
classes_open(Open) ->
_pipe = [{<<"lg:w-[90px] translate-x-0"/utf8>>, not Open},
{<<"-translate-x-full"/utf8>>, Open}],
lustre@attribute:classes(_pipe).
-file("src\\gbr\\ui\\admin\\sidebar.gleam", 62).
?DOC(
" New sidebar element\n"
"\n"
" - id: Element id\n"
).
-spec new(binary()) -> u_i_sidebar().
new(Id) ->
El = begin
_pipe = gbr@ui@core@el:new(Id),
gbr@ui@core@el:class(
_pipe,
<<"sidebar fixed left-0 top-0 z-9999 flex h-screen w-[290px] flex-col"/utf8,
" overflow-y-hidden border-r border-gray-200 bg-white px-5 duration-300"/utf8,
" ease-linear dark:border-gray-800 dark:bg-black lg:static lg:translate-x-0"/utf8>>
)
end,
{u_i_sidebar, El, true, [], none, none}.
-file("src\\gbr\\ui\\admin\\sidebar.gleam", 139).
?DOC(" Render sidebar element into lustre.element\n").
-spec render(u_i_sidebar_render(QVU)) -> lustre@vdom@vnode:element(QVU).
render(At) ->
{u_i_sidebar_render, In, Onclick} = At,
{u_i_sidebar, El, Open, Root, Selected, Logo} = In,
Logo@1 = begin
_pipe = gleam@option:map(
Logo,
fun(_capture) -> gbr@ui@logo:icon_only(_capture, not Open) end
),
_pipe@1 = gleam@option:map(_pipe, fun gbr@ui@logo:render/1),
gleam@option:unwrap(_pipe@1, lustre@element:none())
end,
Root_menus = menu_roots(Root, Open, Selected, Onclick),
Menu_nav = [lustre@element@html:nav([], Root_menus)],
Inner_classes = [{<<"justify-center"/utf8>>, not Open},
{<<"justify-between"/utf8>>, Open}],
Inner = [lustre@element@html:'div'(
[lustre@attribute:class(
<<"sidebar-header flex items-center gap-2 pb-7 pt-8"/utf8>>
),
lustre@attribute:classes(Inner_classes)],
[Logo@1]
),
lustre@element@html:'div'(
[lustre@attribute:class(
<<"no-scrollbar flex flex-col overflow-y-auto duration-300 ease-linear"/utf8>>
)],
Menu_nav
)],
Classes = classes_open(Open),
Attrs = [Classes | gbr@ui@core@el:attrs(El)],
lustre@element@html:aside(Attrs, Inner).