Duração em segundos ⇄ texto digitado (1h 30m, 90m, 45s, 1:30, 1:30:15, 5400).
Núcleo puro compartilhado pelo componente duration e pelo tipo
FrappeUIPhx.Ecto.Duration, para que tela e domínio nunca divirjam.
Summary
Functions
Valor de campo (segundos, texto digitado ou nil) → texto para exibir no controle.
Segundos → "1h 30m 15s" ("0s" para zero, "" para nil).
Texto → {:ok, segundos | nil} ou :error. Vazio vira nil.
Functions
Valor de campo (segundos, texto digitado ou nil) → texto para exibir no controle.
@spec humanize(non_neg_integer() | nil) :: String.t()
Segundos → "1h 30m 15s" ("0s" para zero, "" para nil).
@spec parse(term()) :: {:ok, non_neg_integer() | nil} | :error
Texto → {:ok, segundos | nil} ou :error. Vazio vira nil.