Packages
corex
0.1.0-alpha.31
0.1.2
0.1.1
0.1.0
0.1.0-rc.1
0.1.0-rc.0
0.1.0-beta.5
0.1.0-beta.4
0.1.0-beta.3
0.1.0-beta.2
0.1.0-beta.1
0.1.0-alpha.33
0.1.0-alpha.32
0.1.0-alpha.31
0.1.0-alpha.30
0.1.0-alpha.29
0.1.0-alpha.28
0.1.0-alpha.27
0.1.0-alpha.26
0.1.0-alpha.25
0.1.0-alpha.24
0.1.0-alpha.23
0.1.0-alpha.22
0.1.0-alpha.21
0.1.0-alpha.20
0.1.0-alpha.19
0.1.0-alpha.18
0.1.0-alpha.17
0.1.0-alpha.16
0.1.0-alpha.15
0.1.0-alpha.14
0.1.0-alpha.13
0.1.0-alpha.12
0.1.0-alpha.11
0.1.0-alpha.10
0.1.0-alpha.9
0.1.0-alpha.8
0.1.0-alpha.7
0.1.0-alpha.6
0.1.0-alpha.5
0.1.0-alpha.4
0.1.0-alpha.3
0.1.0-alpha.2
0.1.0-alpha.1
Accessible and unstyled UI components library written in Elixir and TypeScript that integrates Zag.js state machines into the Phoenix Framework.
Current section
Files
Jump to
Current section
Files
lib/components/timer/connect.ex
defmodule Corex.Timer.Connect do
@moduledoc false
alias Corex.Timer.Anatomy.{ActionTrigger, Area, Control, Item, Props, Root, Separator}
defp data_attr(true), do: ""
defp data_attr(false), do: nil
defp data_attr(nil), do: nil
@spec props(Props.t()) :: map()
def props(assigns) do
%{
"id" => assigns.id,
"data-countdown" => data_attr(assigns.countdown),
"data-start-ms" => to_string(assigns.start_ms),
"data-target-ms" => if(assigns.target_ms, do: to_string(assigns.target_ms), else: nil),
"data-auto-start" => data_attr(assigns.auto_start),
"data-interval" => to_string(assigns.interval),
"data-on-tick" => assigns.on_tick,
"data-on-complete" => assigns.on_complete
}
end
@spec root(Root.t()) :: map()
def root(assigns) do
%{
"data-scope" => "timer",
"data-part" => "root",
"id" => "timer:#{assigns.id}"
}
end
@spec area(Area.t()) :: map()
def area(assigns) do
%{
"data-scope" => "timer",
"data-part" => "area",
"id" => "timer:#{assigns.id}:area"
}
end
@spec control(Control.t()) :: map()
def control(assigns) do
%{
"data-scope" => "timer",
"data-part" => "control",
"id" => "timer:#{assigns.id}:control"
}
end
@spec item(Item.t()) :: map()
def item(assigns) do
value = Map.get(assigns, :value, 0)
%{
"data-scope" => "timer",
"data-part" => "item",
"data-type" => assigns.type,
"style" => "--value:#{value};"
}
end
@spec separator(Separator.t()) :: map()
def separator(_assigns) do
%{
"data-scope" => "timer",
"data-part" => "separator",
"aria-hidden" => "true"
}
end
defp action_label("start"), do: "Start"
defp action_label("pause"), do: "Pause"
defp action_label("resume"), do: "Resume"
defp action_label("reset"), do: "Reset"
defp action_label(_), do: "Timer action"
@spec action_trigger(ActionTrigger.t()) :: map()
def action_trigger(assigns) do
base = %{
"data-scope" => "timer",
"data-part" => "action-trigger",
"data-action" => assigns.action,
"type" => "button",
"aria-label" => action_label(assigns.action)
}
if assigns.hidden do
Map.put(base, "hidden", "")
else
base
end
end
end