Current section
Files
Jump to
Current section
Files
src/gbr@ui@link.erl
-module(gbr@ui@link).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src\\gbr\\ui\\link.gleam").
-export([href/2, class/2, at/2, onclick/2, render/1, new/1]).
-export_type([u_i_link/0, u_i_link_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 core link super element\n"
"\n"
" Is one element with required href attribute.\n"
"\n"
" To render a link needs inner elements like a span with text or maybe more\n"
" complex example, e.g., `gbr/ui/logo`.\n"
"\n"
).
-opaque u_i_link() :: {u_i_link, gbr@ui@core@el:u_i_el(), binary()}.
-opaque u_i_link_render(OKQ) :: {u_i_link_render,
u_i_link(),
list(lustre@vdom@vnode:element(OKQ)),
gleam@option:option(fun((binary()) -> OKQ))}.
-file("src\\gbr\\ui\\link.gleam", 58).
-spec href(u_i_link(), binary()) -> u_i_link().
href(In, Href) ->
{u_i_link, erlang:element(2, In), Href}.
-file("src\\gbr\\ui\\link.gleam", 62).
-spec class(u_i_link(), binary()) -> u_i_link().
class(In, Class) ->
El = gbr@ui@core@el:class(erlang:element(2, In), Class),
{u_i_link, El, erlang:element(3, In)}.
-file("src\\gbr\\ui\\link.gleam", 68).
-spec at(u_i_link(), list(lustre@vdom@vnode:element(OKV))) -> u_i_link_render(OKV).
at(In, Inner) ->
{u_i_link_render, In, Inner, none}.
-file("src\\gbr\\ui\\link.gleam", 72).
-spec onclick(u_i_link_render(OKY), fun((binary()) -> OKY)) -> u_i_link_render(OKY).
onclick(At, Onclick) ->
{u_i_link_render,
erlang:element(2, At),
erlang:element(3, At),
{some, Onclick}}.
-file("src\\gbr\\ui\\link.gleam", 91).
-spec map_onclick(OLE, gleam@option:option(fun((OLE) -> OLX))) -> lustre@vdom@vattr:attribute(OLX).
map_onclick(Href, Onclick) ->
_pipe@1 = gleam@option:map(
Onclick,
fun(Onclick@1) -> _pipe = Onclick@1(Href),
lustre@event:on_click(_pipe) end
),
gleam@option:unwrap(_pipe@1, lustre@attribute:none()).
-file("src\\gbr\\ui\\link.gleam", 78).
?DOC(" Render link super element\n").
-spec render(u_i_link_render(OLB)) -> lustre@vdom@vnode:element(OLB).
render(At) ->
{u_i_link_render, In, Inner, Onclick} = At,
{u_i_link, El, Href} = In,
Attrs = gbr@ui@core@el:attrs(El),
Onclick@1 = map_onclick(Href, Onclick),
lustre@element@html:a(
[lustre@attribute:href(Href), Onclick@1 | Attrs],
Inner
).
-file("src\\gbr\\ui\\link.gleam", 52).
?DOC(
" New link super element\n"
"\n"
" - href: `lustre/attribute.href`\n"
).
-spec new(binary()) -> u_i_link().
new(Href) ->
El = gbr@ui@core@el:new(<<".link"/utf8>>),
{u_i_link, El, Href}.