Current section
Files
Jump to
Current section
Files
src/legos@events.erl
-module(legos@events).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/legos/events.gleam").
-export([on_mouse_down/1, on_mouse_up/1, on_click/1, on_double_click/1, on_mouse_enter/1, on_mouse_leave/1, on_mouse_move/1, on_click_coords/1, on_click_screen_coords/1, on_click_page_coords/1, on_mouse_coords/1, on_mouse_screen_coords/1, on_mouse_page_coords/1, on_focus/1, on_lose_focus/1, on/2, target_value/0, target_checked/0, key_code/0, key/0, on_input/1, on_change/1, on_check/1, on_key_press/1, on_key_down/1, on_key_up/1, on_submit/1]).
-export_type([coords/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.
-type coords() :: {coords, integer(), integer()}.
-file("src/legos/events.gleam", 9).
?DOC(" Handle mouse down events\n").
-spec on_mouse_down(URN) -> legos@internal@model:attribute(legos@internal@model:aligned(), URN).
on_mouse_down(Msg) ->
{attr, lustre@event:on_mouse_down(Msg)}.
-file("src/legos/events.gleam", 14).
?DOC(" Handle mouse up events\n").
-spec on_mouse_up(URP) -> legos@internal@model:attribute(legos@internal@model:aligned(), URP).
on_mouse_up(Msg) ->
{attr, lustre@event:on_mouse_up(Msg)}.
-file("src/legos/events.gleam", 19).
?DOC(" Handle click events\n").
-spec on_click(URR) -> legos@internal@model:attribute(legos@internal@model:aligned(), URR).
on_click(Msg) ->
{attr, lustre@event:on_click(Msg)}.
-file("src/legos/events.gleam", 24).
?DOC(" Handle double click events\n").
-spec on_double_click(URT) -> legos@internal@model:attribute(legos@internal@model:aligned(), URT).
on_double_click(Msg) ->
{attr,
lustre@event:on(<<"dblclick"/utf8>>, gleam@dynamic@decode:success(Msg))}.
-file("src/legos/events.gleam", 29).
?DOC(" Handle mouse enter events\n").
-spec on_mouse_enter(URV) -> legos@internal@model:attribute(legos@internal@model:aligned(), URV).
on_mouse_enter(Msg) ->
{attr, lustre@event:on_mouse_enter(Msg)}.
-file("src/legos/events.gleam", 34).
?DOC(" Handle mouse leave events\n").
-spec on_mouse_leave(URX) -> legos@internal@model:attribute(legos@internal@model:aligned(), URX).
on_mouse_leave(Msg) ->
{attr, lustre@event:on_mouse_leave(Msg)}.
-file("src/legos/events.gleam", 39).
?DOC(" Handle mouse move events\n").
-spec on_mouse_move(URZ) -> legos@internal@model:attribute(legos@internal@model:aligned(), URZ).
on_mouse_move(Msg) ->
{attr,
lustre@event:on(<<"mousemove"/utf8>>, gleam@dynamic@decode:success(Msg))}.
-file("src/legos/events.gleam", 50).
?DOC(" Handle click events with local coordinates (relative to element)\n").
-spec on_click_coords(fun((coords()) -> USB)) -> legos@internal@model:attribute(legos@internal@model:aligned(), USB).
on_click_coords(Msg) ->
{attr,
lustre@event:on(
<<"click"/utf8>>,
begin
gleam@dynamic@decode:field(
<<"offsetX"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(X) ->
gleam@dynamic@decode:field(
<<"offsetY"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Y) ->
gleam@dynamic@decode:success(
Msg({coords, X, Y})
)
end
)
end
)
end
)}.
-file("src/legos/events.gleam", 61).
?DOC(" Handle click events with screen coordinates\n").
-spec on_click_screen_coords(fun((coords()) -> USD)) -> legos@internal@model:attribute(legos@internal@model:aligned(), USD).
on_click_screen_coords(Msg) ->
{attr,
lustre@event:on(
<<"click"/utf8>>,
begin
gleam@dynamic@decode:field(
<<"screenX"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(X) ->
gleam@dynamic@decode:field(
<<"screenY"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Y) ->
gleam@dynamic@decode:success(
Msg({coords, X, Y})
)
end
)
end
)
end
)}.
-file("src/legos/events.gleam", 72).
?DOC(" Handle click events with page coordinates\n").
-spec on_click_page_coords(fun((coords()) -> USF)) -> legos@internal@model:attribute(legos@internal@model:aligned(), USF).
on_click_page_coords(Msg) ->
{attr,
lustre@event:on(
<<"click"/utf8>>,
begin
gleam@dynamic@decode:field(
<<"pageX"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(X) ->
gleam@dynamic@decode:field(
<<"pageY"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Y) ->
gleam@dynamic@decode:success(
Msg({coords, X, Y})
)
end
)
end
)
end
)}.
-file("src/legos/events.gleam", 83).
?DOC(" Handle mouse move events with local coordinates (relative to element)\n").
-spec on_mouse_coords(fun((coords()) -> USH)) -> legos@internal@model:attribute(legos@internal@model:aligned(), USH).
on_mouse_coords(Msg) ->
{attr,
lustre@event:on(
<<"mousemove"/utf8>>,
begin
gleam@dynamic@decode:field(
<<"offsetX"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(X) ->
gleam@dynamic@decode:field(
<<"offsetY"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Y) ->
gleam@dynamic@decode:success(
Msg({coords, X, Y})
)
end
)
end
)
end
)}.
-file("src/legos/events.gleam", 94).
?DOC(" Handle mouse move events with screen coordinates\n").
-spec on_mouse_screen_coords(fun((coords()) -> USJ)) -> legos@internal@model:attribute(legos@internal@model:aligned(), USJ).
on_mouse_screen_coords(Msg) ->
{attr,
lustre@event:on(
<<"mousemove"/utf8>>,
begin
gleam@dynamic@decode:field(
<<"screenX"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(X) ->
gleam@dynamic@decode:field(
<<"screenY"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Y) ->
gleam@dynamic@decode:success(
Msg({coords, X, Y})
)
end
)
end
)
end
)}.
-file("src/legos/events.gleam", 105).
?DOC(" Handle mouse move events with page coordinates\n").
-spec on_mouse_page_coords(fun((coords()) -> USL)) -> legos@internal@model:attribute(legos@internal@model:aligned(), USL).
on_mouse_page_coords(Msg) ->
{attr,
lustre@event:on(
<<"mousemove"/utf8>>,
begin
gleam@dynamic@decode:field(
<<"pageX"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(X) ->
gleam@dynamic@decode:field(
<<"pageY"/utf8>>,
{decoder, fun gleam@dynamic@decode:decode_int/1},
fun(Y) ->
gleam@dynamic@decode:success(
Msg({coords, X, Y})
)
end
)
end
)
end
)}.
-file("src/legos/events.gleam", 118).
?DOC(" Handle focus events (when element gains focus)\n").
-spec on_focus(USN) -> legos@internal@model:attribute(legos@internal@model:aligned(), USN).
on_focus(Msg) ->
{attr, lustre@event:on_focus(Msg)}.
-file("src/legos/events.gleam", 123).
?DOC(" Handle blur events (when element loses focus)\n").
-spec on_lose_focus(USP) -> legos@internal@model:attribute(legos@internal@model:aligned(), USP).
on_lose_focus(Msg) ->
{attr, lustre@event:on_blur(Msg)}.
-file("src/legos/events.gleam", 131).
?DOC(
" Create a custom event listener with a decoder\n"
" This is equivalent to Html.Events.on in Elm\n"
).
-spec on(binary(), gleam@dynamic@decode:decoder(USR)) -> legos@internal@model:attribute(legos@internal@model:aligned(), USR).
on(Event_name, Decoder) ->
{attr, lustre@event:on(Event_name, Decoder)}.
-file("src/legos/events.gleam", 139).
?DOC(
" Decoder for getting the target value (event.target.value)\n"
" Useful for input events\n"
).
-spec target_value() -> gleam@dynamic@decode:decoder(binary()).
target_value() ->
gleam@dynamic@decode:at(
[<<"target"/utf8>>, <<"value"/utf8>>],
{decoder, fun gleam@dynamic@decode:decode_string/1}
).
-file("src/legos/events.gleam", 145).
?DOC(
" Decoder for getting the target checked state (event.target.checked)\n"
" Useful for checkbox events\n"
).
-spec target_checked() -> gleam@dynamic@decode:decoder(boolean()).
target_checked() ->
gleam@dynamic@decode:at(
[<<"target"/utf8>>, <<"checked"/utf8>>],
{decoder, fun gleam@dynamic@decode:decode_bool/1}
).
-file("src/legos/events.gleam", 151).
?DOC(
" Decoder for getting the key code (event.keyCode)\n"
" Note: This is deprecated in favor of event.key in modern browsers\n"
).
-spec key_code() -> gleam@dynamic@decode:decoder(integer()).
key_code() ->
gleam@dynamic@decode:at(
[<<"keyCode"/utf8>>],
{decoder, fun gleam@dynamic@decode:decode_int/1}
).
-file("src/legos/events.gleam", 157).
?DOC(
" Decoder for getting the key name (event.key)\n"
" This is the modern way to handle keyboard events\n"
).
-spec key() -> gleam@dynamic@decode:decoder(binary()).
key() ->
gleam@dynamic@decode:at(
[<<"key"/utf8>>],
{decoder, fun gleam@dynamic@decode:decode_string/1}
).
-file("src/legos/events.gleam", 164).
?DOC(" Handle input events with automatic value extraction\n").
-spec on_input(fun((binary()) -> USY)) -> legos@internal@model:attribute(legos@internal@model:aligned(), USY).
on_input(Msg) ->
{attr, lustre@event:on_input(Msg)}.
-file("src/legos/events.gleam", 169).
?DOC(" Handle change events with automatic value extraction\n").
-spec on_change(fun((binary()) -> UTA)) -> legos@internal@model:attribute(legos@internal@model:aligned(), UTA).
on_change(Msg) ->
{attr, lustre@event:on_change(Msg)}.
-file("src/legos/events.gleam", 174).
?DOC(" Handle checkbox change events with automatic checked state extraction\n").
-spec on_check(fun((boolean()) -> UTC)) -> legos@internal@model:attribute(legos@internal@model:aligned(), UTC).
on_check(Msg) ->
{attr, lustre@event:on_check(Msg)}.
-file("src/legos/events.gleam", 179).
?DOC(" Handle key press events with automatic key extraction\n").
-spec on_key_press(fun((binary()) -> UTE)) -> legos@internal@model:attribute(legos@internal@model:aligned(), UTE).
on_key_press(Msg) ->
{attr, lustre@event:on_keypress(Msg)}.
-file("src/legos/events.gleam", 184).
?DOC(" Handle key down events with automatic key extraction\n").
-spec on_key_down(fun((binary()) -> UTG)) -> legos@internal@model:attribute(legos@internal@model:aligned(), UTG).
on_key_down(Msg) ->
{attr, lustre@event:on_keydown(Msg)}.
-file("src/legos/events.gleam", 189).
?DOC(" Handle key up events with automatic key extraction\n").
-spec on_key_up(fun((binary()) -> UTI)) -> legos@internal@model:attribute(legos@internal@model:aligned(), UTI).
on_key_up(Msg) ->
{attr, lustre@event:on_keyup(Msg)}.
-file("src/legos/events.gleam", 194).
?DOC(" Handle form submit events with automatic form data extraction\n").
-spec on_submit(fun((list({binary(), binary()})) -> UTL)) -> legos@internal@model:attribute(legos@internal@model:aligned(), UTL).
on_submit(Msg) ->
{attr, lustre@event:on_submit(Msg)}.