-module(protocol@input). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]). -export([encode__touch_point/1, decode__touch_point/1, encode__mouse_button/1, decode__mouse_button/1, encode__time_since_epoch/1, decode__time_since_epoch/1, encode__dispatch_key_event_type/1, dispatch_key_event/15, decode__dispatch_key_event_type/1, encode__dispatch_mouse_event_type/1, decode__dispatch_mouse_event_type/1, encode__dispatch_mouse_event_pointer_type/1, dispatch_mouse_event/14, decode__dispatch_mouse_event_pointer_type/1, encode__dispatch_touch_event_type/1, dispatch_touch_event/5, decode__dispatch_touch_event_type/1, cancel_dragging/1, set_ignore_input_events/2]). -export_type([touch_point/0, mouse_button/0, time_since_epoch/0, dispatch_key_event_type/0, dispatch_mouse_event_type/0, dispatch_mouse_event_pointer_type/0, dispatch_touch_event_type/0]). -type touch_point() :: {touch_point, float(), float(), gleam@option:option(float()), gleam@option:option(float()), gleam@option:option(float()), gleam@option:option(float()), gleam@option:option(float()), gleam@option:option(float()), gleam@option:option(float())}. -type mouse_button() :: mouse_button_none | mouse_button_left | mouse_button_middle | mouse_button_right | mouse_button_back | mouse_button_forward. -type time_since_epoch() :: {time_since_epoch, float()}. -type dispatch_key_event_type() :: dispatch_key_event_type_key_down | dispatch_key_event_type_key_up | dispatch_key_event_type_raw_key_down | dispatch_key_event_type_char. -type dispatch_mouse_event_type() :: dispatch_mouse_event_type_mouse_pressed | dispatch_mouse_event_type_mouse_released | dispatch_mouse_event_type_mouse_moved | dispatch_mouse_event_type_mouse_wheel. -type dispatch_mouse_event_pointer_type() :: dispatch_mouse_event_pointer_type_mouse | dispatch_mouse_event_pointer_type_pen. -type dispatch_touch_event_type() :: dispatch_touch_event_type_touch_start | dispatch_touch_event_type_touch_end | dispatch_touch_event_type_touch_move | dispatch_touch_event_type_touch_cancel. -spec encode__touch_point(touch_point()) -> gleam@json:json(). encode__touch_point(Value__) -> gleam@json:object( begin _pipe = [{<<"x"/utf8>>, gleam@json:float(erlang:element(2, Value__))}, {<<"y"/utf8>>, gleam@json:float(erlang:element(3, Value__))}], _pipe@1 = chrobot@internal@utils:add_optional( _pipe, erlang:element(4, Value__), fun(Inner_value__) -> {<<"radiusX"/utf8>>, gleam@json:float(Inner_value__)} end ), _pipe@2 = chrobot@internal@utils:add_optional( _pipe@1, erlang:element(5, Value__), fun(Inner_value__@1) -> {<<"radiusY"/utf8>>, gleam@json:float(Inner_value__@1)} end ), _pipe@3 = chrobot@internal@utils:add_optional( _pipe@2, erlang:element(6, Value__), fun(Inner_value__@2) -> {<<"rotationAngle"/utf8>>, gleam@json:float(Inner_value__@2)} end ), _pipe@4 = chrobot@internal@utils:add_optional( _pipe@3, erlang:element(7, Value__), fun(Inner_value__@3) -> {<<"force"/utf8>>, gleam@json:float(Inner_value__@3)} end ), _pipe@5 = chrobot@internal@utils:add_optional( _pipe@4, erlang:element(8, Value__), fun(Inner_value__@4) -> {<<"tiltX"/utf8>>, gleam@json:float(Inner_value__@4)} end ), _pipe@6 = chrobot@internal@utils:add_optional( _pipe@5, erlang:element(9, Value__), fun(Inner_value__@5) -> {<<"tiltY"/utf8>>, gleam@json:float(Inner_value__@5)} end ), chrobot@internal@utils:add_optional( _pipe@6, erlang:element(10, Value__), fun(Inner_value__@6) -> {<<"id"/utf8>>, gleam@json:float(Inner_value__@6)} end ) end ). -spec decode__touch_point(gleam@dynamic:dynamic_()) -> {ok, touch_point()} | {error, list(gleam@dynamic:decode_error())}. decode__touch_point(Value__) -> gleam@result:'try'( (gleam@dynamic:field(<<"x"/utf8>>, fun gleam@dynamic:float/1))(Value__), fun(X) -> gleam@result:'try'( (gleam@dynamic:field(<<"y"/utf8>>, fun gleam@dynamic:float/1))( Value__ ), fun(Y) -> gleam@result:'try'( (gleam@dynamic:optional_field( <<"radiusX"/utf8>>, fun gleam@dynamic:float/1 ))(Value__), fun(Radius_x) -> gleam@result:'try'( (gleam@dynamic:optional_field( <<"radiusY"/utf8>>, fun gleam@dynamic:float/1 ))(Value__), fun(Radius_y) -> gleam@result:'try'( (gleam@dynamic:optional_field( <<"rotationAngle"/utf8>>, fun gleam@dynamic:float/1 ))(Value__), fun(Rotation_angle) -> gleam@result:'try'( (gleam@dynamic:optional_field( <<"force"/utf8>>, fun gleam@dynamic:float/1 ))(Value__), fun(Force) -> gleam@result:'try'( (gleam@dynamic:optional_field( <<"tiltX"/utf8>>, fun gleam@dynamic:float/1 ))(Value__), fun(Tilt_x) -> gleam@result:'try'( (gleam@dynamic:optional_field( <<"tiltY"/utf8>>, fun gleam@dynamic:float/1 ))(Value__), fun(Tilt_y) -> gleam@result:'try'( (gleam@dynamic:optional_field( <<"id"/utf8>>, fun gleam@dynamic:float/1 ))( Value__ ), fun(Id) -> {ok, {touch_point, X, Y, Radius_x, Radius_y, Rotation_angle, Force, Tilt_x, Tilt_y, Id}} end ) end ) end ) end ) end ) end ) end ) end ) end ). -spec encode__mouse_button(mouse_button()) -> gleam@json:json(). encode__mouse_button(Value__) -> _pipe = case Value__ of mouse_button_none -> <<"none"/utf8>>; mouse_button_left -> <<"left"/utf8>>; mouse_button_middle -> <<"middle"/utf8>>; mouse_button_right -> <<"right"/utf8>>; mouse_button_back -> <<"back"/utf8>>; mouse_button_forward -> <<"forward"/utf8>> end, gleam@json:string(_pipe). -spec decode__mouse_button(gleam@dynamic:dynamic_()) -> {ok, mouse_button()} | {error, list(gleam@dynamic:decode_error())}. decode__mouse_button(Value__) -> case gleam@dynamic:string(Value__) of {ok, <<"none"/utf8>>} -> {ok, mouse_button_none}; {ok, <<"left"/utf8>>} -> {ok, mouse_button_left}; {ok, <<"middle"/utf8>>} -> {ok, mouse_button_middle}; {ok, <<"right"/utf8>>} -> {ok, mouse_button_right}; {ok, <<"back"/utf8>>} -> {ok, mouse_button_back}; {ok, <<"forward"/utf8>>} -> {ok, mouse_button_forward}; {error, Error} -> {error, Error}; {ok, Other} -> {error, [{decode_error, <<"valid enum property"/utf8>>, Other, [<<"enum decoder"/utf8>>]}]} end. -spec encode__time_since_epoch(time_since_epoch()) -> gleam@json:json(). encode__time_since_epoch(Value__) -> case Value__ of {time_since_epoch, Inner_value__} -> gleam@json:float(Inner_value__) end. -spec decode__time_since_epoch(gleam@dynamic:dynamic_()) -> {ok, time_since_epoch()} | {error, list(gleam@dynamic:decode_error())}. decode__time_since_epoch(Value__) -> _pipe = Value__, (gleam@dynamic:decode1( fun(Field@0) -> {time_since_epoch, Field@0} end, fun gleam@dynamic:float/1 ))(_pipe). -spec encode__dispatch_key_event_type(dispatch_key_event_type()) -> gleam@json:json(). encode__dispatch_key_event_type(Value__) -> _pipe = case Value__ of dispatch_key_event_type_key_down -> <<"keyDown"/utf8>>; dispatch_key_event_type_key_up -> <<"keyUp"/utf8>>; dispatch_key_event_type_raw_key_down -> <<"rawKeyDown"/utf8>>; dispatch_key_event_type_char -> <<"char"/utf8>> end, gleam@json:string(_pipe). -spec dispatch_key_event( fun((binary(), gleam@option:option(gleam@json:json())) -> ABIO), dispatch_key_event_type(), gleam@option:option(integer()), gleam@option:option(time_since_epoch()), gleam@option:option(binary()), gleam@option:option(binary()), gleam@option:option(binary()), gleam@option:option(binary()), gleam@option:option(binary()), gleam@option:option(integer()), gleam@option:option(integer()), gleam@option:option(boolean()), gleam@option:option(boolean()), gleam@option:option(boolean()), gleam@option:option(integer()) ) -> ABIO. dispatch_key_event( Callback__, Type_, Modifiers, Timestamp, Text, Unmodified_text, Key_identifier, Code, Key, Windows_virtual_key_code, Native_virtual_key_code, Auto_repeat, Is_keypad, Is_system_key, Location ) -> Callback__( <<"Input.dispatchKeyEvent"/utf8>>, {some, gleam@json:object( begin _pipe = [{<<"type"/utf8>>, encode__dispatch_key_event_type(Type_)}], _pipe@1 = chrobot@internal@utils:add_optional( _pipe, Modifiers, fun(Inner_value__) -> {<<"modifiers"/utf8>>, gleam@json:int(Inner_value__)} end ), _pipe@2 = chrobot@internal@utils:add_optional( _pipe@1, Timestamp, fun(Inner_value__@1) -> {<<"timestamp"/utf8>>, encode__time_since_epoch(Inner_value__@1)} end ), _pipe@3 = chrobot@internal@utils:add_optional( _pipe@2, Text, fun(Inner_value__@2) -> {<<"text"/utf8>>, gleam@json:string(Inner_value__@2)} end ), _pipe@4 = chrobot@internal@utils:add_optional( _pipe@3, Unmodified_text, fun(Inner_value__@3) -> {<<"unmodifiedText"/utf8>>, gleam@json:string(Inner_value__@3)} end ), _pipe@5 = chrobot@internal@utils:add_optional( _pipe@4, Key_identifier, fun(Inner_value__@4) -> {<<"keyIdentifier"/utf8>>, gleam@json:string(Inner_value__@4)} end ), _pipe@6 = chrobot@internal@utils:add_optional( _pipe@5, Code, fun(Inner_value__@5) -> {<<"code"/utf8>>, gleam@json:string(Inner_value__@5)} end ), _pipe@7 = chrobot@internal@utils:add_optional( _pipe@6, Key, fun(Inner_value__@6) -> {<<"key"/utf8>>, gleam@json:string(Inner_value__@6)} end ), _pipe@8 = chrobot@internal@utils:add_optional( _pipe@7, Windows_virtual_key_code, fun(Inner_value__@7) -> {<<"windowsVirtualKeyCode"/utf8>>, gleam@json:int(Inner_value__@7)} end ), _pipe@9 = chrobot@internal@utils:add_optional( _pipe@8, Native_virtual_key_code, fun(Inner_value__@8) -> {<<"nativeVirtualKeyCode"/utf8>>, gleam@json:int(Inner_value__@8)} end ), _pipe@10 = chrobot@internal@utils:add_optional( _pipe@9, Auto_repeat, fun(Inner_value__@9) -> {<<"autoRepeat"/utf8>>, gleam@json:bool(Inner_value__@9)} end ), _pipe@11 = chrobot@internal@utils:add_optional( _pipe@10, Is_keypad, fun(Inner_value__@10) -> {<<"isKeypad"/utf8>>, gleam@json:bool(Inner_value__@10)} end ), _pipe@12 = chrobot@internal@utils:add_optional( _pipe@11, Is_system_key, fun(Inner_value__@11) -> {<<"isSystemKey"/utf8>>, gleam@json:bool(Inner_value__@11)} end ), chrobot@internal@utils:add_optional( _pipe@12, Location, fun(Inner_value__@12) -> {<<"location"/utf8>>, gleam@json:int(Inner_value__@12)} end ) end )} ). -spec decode__dispatch_key_event_type(gleam@dynamic:dynamic_()) -> {ok, dispatch_key_event_type()} | {error, list(gleam@dynamic:decode_error())}. decode__dispatch_key_event_type(Value__) -> case gleam@dynamic:string(Value__) of {ok, <<"keyDown"/utf8>>} -> {ok, dispatch_key_event_type_key_down}; {ok, <<"keyUp"/utf8>>} -> {ok, dispatch_key_event_type_key_up}; {ok, <<"rawKeyDown"/utf8>>} -> {ok, dispatch_key_event_type_raw_key_down}; {ok, <<"char"/utf8>>} -> {ok, dispatch_key_event_type_char}; {error, Error} -> {error, Error}; {ok, Other} -> {error, [{decode_error, <<"valid enum property"/utf8>>, Other, [<<"enum decoder"/utf8>>]}]} end. -spec encode__dispatch_mouse_event_type(dispatch_mouse_event_type()) -> gleam@json:json(). encode__dispatch_mouse_event_type(Value__) -> _pipe = case Value__ of dispatch_mouse_event_type_mouse_pressed -> <<"mousePressed"/utf8>>; dispatch_mouse_event_type_mouse_released -> <<"mouseReleased"/utf8>>; dispatch_mouse_event_type_mouse_moved -> <<"mouseMoved"/utf8>>; dispatch_mouse_event_type_mouse_wheel -> <<"mouseWheel"/utf8>> end, gleam@json:string(_pipe). -spec decode__dispatch_mouse_event_type(gleam@dynamic:dynamic_()) -> {ok, dispatch_mouse_event_type()} | {error, list(gleam@dynamic:decode_error())}. decode__dispatch_mouse_event_type(Value__) -> case gleam@dynamic:string(Value__) of {ok, <<"mousePressed"/utf8>>} -> {ok, dispatch_mouse_event_type_mouse_pressed}; {ok, <<"mouseReleased"/utf8>>} -> {ok, dispatch_mouse_event_type_mouse_released}; {ok, <<"mouseMoved"/utf8>>} -> {ok, dispatch_mouse_event_type_mouse_moved}; {ok, <<"mouseWheel"/utf8>>} -> {ok, dispatch_mouse_event_type_mouse_wheel}; {error, Error} -> {error, Error}; {ok, Other} -> {error, [{decode_error, <<"valid enum property"/utf8>>, Other, [<<"enum decoder"/utf8>>]}]} end. -spec encode__dispatch_mouse_event_pointer_type( dispatch_mouse_event_pointer_type() ) -> gleam@json:json(). encode__dispatch_mouse_event_pointer_type(Value__) -> _pipe = case Value__ of dispatch_mouse_event_pointer_type_mouse -> <<"mouse"/utf8>>; dispatch_mouse_event_pointer_type_pen -> <<"pen"/utf8>> end, gleam@json:string(_pipe). -spec dispatch_mouse_event( fun((binary(), gleam@option:option(gleam@json:json())) -> ABLX), dispatch_mouse_event_type(), float(), float(), gleam@option:option(integer()), gleam@option:option(time_since_epoch()), gleam@option:option(mouse_button()), gleam@option:option(integer()), gleam@option:option(integer()), gleam@option:option(float()), gleam@option:option(float()), gleam@option:option(float()), gleam@option:option(float()), gleam@option:option(dispatch_mouse_event_pointer_type()) ) -> ABLX. dispatch_mouse_event( Callback__, Type_, X, Y, Modifiers, Timestamp, Button, Buttons, Click_count, Tilt_x, Tilt_y, Delta_x, Delta_y, Pointer_type ) -> Callback__( <<"Input.dispatchMouseEvent"/utf8>>, {some, gleam@json:object( begin _pipe = [{<<"type"/utf8>>, encode__dispatch_mouse_event_type(Type_)}, {<<"x"/utf8>>, gleam@json:float(X)}, {<<"y"/utf8>>, gleam@json:float(Y)}], _pipe@1 = chrobot@internal@utils:add_optional( _pipe, Modifiers, fun(Inner_value__) -> {<<"modifiers"/utf8>>, gleam@json:int(Inner_value__)} end ), _pipe@2 = chrobot@internal@utils:add_optional( _pipe@1, Timestamp, fun(Inner_value__@1) -> {<<"timestamp"/utf8>>, encode__time_since_epoch(Inner_value__@1)} end ), _pipe@3 = chrobot@internal@utils:add_optional( _pipe@2, Button, fun(Inner_value__@2) -> {<<"button"/utf8>>, encode__mouse_button(Inner_value__@2)} end ), _pipe@4 = chrobot@internal@utils:add_optional( _pipe@3, Buttons, fun(Inner_value__@3) -> {<<"buttons"/utf8>>, gleam@json:int(Inner_value__@3)} end ), _pipe@5 = chrobot@internal@utils:add_optional( _pipe@4, Click_count, fun(Inner_value__@4) -> {<<"clickCount"/utf8>>, gleam@json:int(Inner_value__@4)} end ), _pipe@6 = chrobot@internal@utils:add_optional( _pipe@5, Tilt_x, fun(Inner_value__@5) -> {<<"tiltX"/utf8>>, gleam@json:float(Inner_value__@5)} end ), _pipe@7 = chrobot@internal@utils:add_optional( _pipe@6, Tilt_y, fun(Inner_value__@6) -> {<<"tiltY"/utf8>>, gleam@json:float(Inner_value__@6)} end ), _pipe@8 = chrobot@internal@utils:add_optional( _pipe@7, Delta_x, fun(Inner_value__@7) -> {<<"deltaX"/utf8>>, gleam@json:float(Inner_value__@7)} end ), _pipe@9 = chrobot@internal@utils:add_optional( _pipe@8, Delta_y, fun(Inner_value__@8) -> {<<"deltaY"/utf8>>, gleam@json:float(Inner_value__@8)} end ), chrobot@internal@utils:add_optional( _pipe@9, Pointer_type, fun(Inner_value__@9) -> {<<"pointerType"/utf8>>, encode__dispatch_mouse_event_pointer_type( Inner_value__@9 )} end ) end )} ). -spec decode__dispatch_mouse_event_pointer_type(gleam@dynamic:dynamic_()) -> {ok, dispatch_mouse_event_pointer_type()} | {error, list(gleam@dynamic:decode_error())}. decode__dispatch_mouse_event_pointer_type(Value__) -> case gleam@dynamic:string(Value__) of {ok, <<"mouse"/utf8>>} -> {ok, dispatch_mouse_event_pointer_type_mouse}; {ok, <<"pen"/utf8>>} -> {ok, dispatch_mouse_event_pointer_type_pen}; {error, Error} -> {error, Error}; {ok, Other} -> {error, [{decode_error, <<"valid enum property"/utf8>>, Other, [<<"enum decoder"/utf8>>]}]} end. -spec encode__dispatch_touch_event_type(dispatch_touch_event_type()) -> gleam@json:json(). encode__dispatch_touch_event_type(Value__) -> _pipe = case Value__ of dispatch_touch_event_type_touch_start -> <<"touchStart"/utf8>>; dispatch_touch_event_type_touch_end -> <<"touchEnd"/utf8>>; dispatch_touch_event_type_touch_move -> <<"touchMove"/utf8>>; dispatch_touch_event_type_touch_cancel -> <<"touchCancel"/utf8>> end, gleam@json:string(_pipe). -spec dispatch_touch_event( fun((binary(), gleam@option:option(gleam@json:json())) -> ABNQ), dispatch_touch_event_type(), list(touch_point()), gleam@option:option(integer()), gleam@option:option(time_since_epoch()) ) -> ABNQ. dispatch_touch_event(Callback__, Type_, Touch_points, Modifiers, Timestamp) -> Callback__( <<"Input.dispatchTouchEvent"/utf8>>, {some, gleam@json:object( begin _pipe = [{<<"type"/utf8>>, encode__dispatch_touch_event_type(Type_)}, {<<"touchPoints"/utf8>>, gleam@json:array( Touch_points, fun encode__touch_point/1 )}], _pipe@1 = chrobot@internal@utils:add_optional( _pipe, Modifiers, fun(Inner_value__) -> {<<"modifiers"/utf8>>, gleam@json:int(Inner_value__)} end ), chrobot@internal@utils:add_optional( _pipe@1, Timestamp, fun(Inner_value__@1) -> {<<"timestamp"/utf8>>, encode__time_since_epoch(Inner_value__@1)} end ) end )} ). -spec decode__dispatch_touch_event_type(gleam@dynamic:dynamic_()) -> {ok, dispatch_touch_event_type()} | {error, list(gleam@dynamic:decode_error())}. decode__dispatch_touch_event_type(Value__) -> case gleam@dynamic:string(Value__) of {ok, <<"touchStart"/utf8>>} -> {ok, dispatch_touch_event_type_touch_start}; {ok, <<"touchEnd"/utf8>>} -> {ok, dispatch_touch_event_type_touch_end}; {ok, <<"touchMove"/utf8>>} -> {ok, dispatch_touch_event_type_touch_move}; {ok, <<"touchCancel"/utf8>>} -> {ok, dispatch_touch_event_type_touch_cancel}; {error, Error} -> {error, Error}; {ok, Other} -> {error, [{decode_error, <<"valid enum property"/utf8>>, Other, [<<"enum decoder"/utf8>>]}]} end. -spec cancel_dragging(fun((binary(), gleam@option:option(any())) -> ABPB)) -> ABPB. cancel_dragging(Callback__) -> Callback__(<<"Input.cancelDragging"/utf8>>, none). -spec set_ignore_input_events( fun((binary(), gleam@option:option(gleam@json:json())) -> ABPF), boolean() ) -> ABPF. set_ignore_input_events(Callback__, Ignore) -> Callback__( <<"Input.setIgnoreInputEvents"/utf8>>, {some, gleam@json:object([{<<"ignore"/utf8>>, gleam@json:bool(Ignore)}])} ).