An order of records by a field: %{"field" => "due", "dir" => "asc"}.
Empty values come last in both directions. Texts sort without case; a select and a status sort in the order of their choices, as a board shows them; dates and numbers as themselves. Fields of several values (multi-selects, relations, several people) do not sort.
Summary
Types
@type t() :: %Cardbox.Sort{dir: :asc | :desc, field: String.t()}