sig
  type column = {
    title : string;
    length : int;
    rows : int -> Bogue.Layout.t;
    compare : (int -> int -> int) option;
    min_width : int option;
    align : Bogue.Draw.align option;
  }
  type t
  val create :
    h:int ->
    ?row_height:int ->
    ?name:string ->
    ?on_click:(Bogue.Table.t -> int -> unit) ->
    ?max_selected:int ->
    ?selection:Bogue.Selection.t ->
    ?on_select:(Bogue.Selection.t -> unit) ->
    Bogue.Table.column list -> Bogue.Table.t
  val of_array :
    h:int ->
    ?widths:int option list ->
    ?row_height:int ->
    ?name:string ->
    ?on_click:(Bogue.Table.t -> int -> unit) ->
    ?max_selected:int ->
    ?selection:Bogue.Selection.t ->
    ?on_select:(Bogue.Selection.t -> unit) ->
    ?align:Bogue.Draw.align ->
    string list -> string array array -> Bogue.Table.t
  val of_list :
    h:int ->
    ?widths:int option list ->
    ?row_height:int ->
    ?name:string ->
    ?max_selected:int ->
    ?selection:Bogue.Selection.t ->
    ?on_select:(Bogue.Selection.t -> unit) ->
    ?align:Bogue.Draw.align -> string list list -> Bogue.Table.t
  val get_layout : Bogue.Table.t -> Bogue.Layout.t
  val get_selection : Bogue.Table.t -> Bogue.Selection.t
  val set_selection : Bogue.Table.t -> Bogue.Selection.t -> unit
  val sort_column : Bogue.Table.t -> ?reverse:bool -> int -> unit
  val min_width : Bogue.Table.t -> int
  val min_height : Bogue.Table.t -> int
end