-module(fishgirl).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/fishgirl.gleam").
-export([element/1, register/0, from/1]).
-export_type([model/0, message/0]).
-type model() :: {model, binary(), {ok, binary()} | {error, binary()}, binary()}.
-type message() :: {parent_changed_value, binary()} |
{mermaid_render_finish, {ok, binary()} | {error, binary()}}.
-file("src/fishgirl.gleam", 26).
-spec element(list(lustre@vdom@vattr:attribute(PGU))) -> lustre@vdom@vnode:element(PGU).
element(Attributes) ->
lustre@element:element(<<"fishgirl-diagram"/utf8>>, Attributes, []).
-file("src/fishgirl.gleam", 83).
-spec view(model()) -> lustre@vdom@vnode:element(message()).
view(Model) ->
gleam@bool:guard(
erlang:element(2, Model) =:= <<""/utf8>>,
lustre@element@html:'div'(
[lustre@attribute:id(erlang:element(4, Model))],
[lustre@element:text(<<"No Mermaid code to parse from."/utf8>>)]
),
fun() ->
gleam@bool:guard(
erlang:element(3, Model) =:= {ok, <<""/utf8>>},
lustre@element:text(<<"Rendering..."/utf8>>),
fun() -> case erlang:element(3, Model) of
{ok, Svg} ->
lustre@element:unsafe_raw_html(
<<""/utf8>>,
<<"figure"/utf8>>,
[lustre@attribute:id(erlang:element(4, Model))],
Svg
);
{error, Errmsg} ->
lustre@element@html:'div'(
[lustre@attribute:id(erlang:element(4, Model))],
[lustre@element@html:p(
[],
[lustre@element:text(
<<"An error occured parsing this diagram:"/utf8>>
)]
),
lustre@element@html:pre(
[],
[lustre@element:text(Errmsg)]
)]
)
end end
)
end
).
-file("src/fishgirl.gleam", 126).
-spec ts_render_mermaid(binary(), binary()) -> gleam@javascript@promise:promise({ok,
binary()} |
{error, binary()}).
ts_render_mermaid(_, _) ->
erlang:error(#{gleam_error => panic,
message => <<"Rendering only works on the JS target."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"fishgirl"/utf8>>,
function => <<"ts_render_mermaid"/utf8>>,
line => 130}).
-file("src/fishgirl.gleam", 60).
-spec update(model(), message()) -> {model(), lustre@effect:effect(message())}.
update(Model, Message) ->
case Message of
{parent_changed_value, Value} ->
{{model,
Value,
begin
_pipe = <<""/utf8>>,
{ok, _pipe}
end,
erlang:element(4, Model)},
stdlib:'Nil'(Value, erlang:element(4, Model))};
{mermaid_render_finish, New_svg} ->
{{model,
erlang:element(2, Model),
New_svg,
erlang:element(4, Model)},
lustre@effect:none()}
end.
-file("src/fishgirl.gleam", 134).
-spec ts_init_mermaid() -> nil.
ts_init_mermaid() ->
nil.
-file("src/fishgirl.gleam", 46).
-spec init(any()) -> {model(), lustre@effect:effect(message())}.
init(_) ->
nil = ts_init_mermaid(),
Random_id = <<"fishgirl-mermaid-"/utf8,
(begin
_pipe = gleam@int:random(10000000),
erlang:integer_to_binary(_pipe)
end)/binary>>,
{{model, <<""/utf8>>, {ok, <<""/utf8>>}, Random_id}, lustre@effect:none()}.
-file("src/fishgirl.gleam", 15).
-spec register() -> {ok, nil} | {error, lustre:error()}.
register() ->
Component = lustre:component(
fun init/1,
fun update/2,
fun view/1,
[lustre@component:on_attribute_change(
<<"value"/utf8>>,
fun(Value) -> {ok, {parent_changed_value, Value}} end
)]
),
lustre:register(Component, <<"fishgirl-diagram"/utf8>>).
-file("src/fishgirl.gleam", 32).
-spec from(binary()) -> lustre@vdom@vattr:attribute(any()).
from(Value) ->
lustre@attribute:value(Value).