Pack option

primitive PackFixed
  """
  Child gets its preferred size. No extra space claimed.
  """
primitive PackExpand
  """
  Child claims a share of extra space but stays at preferred size,
  centered within its allocation.
  """
primitive PackFill
  """
  Child claims a share of extra space and stretches to fill it.
  """

type PackMode is (PackFixed | PackExpand | PackFill)

class val PackOption
  """
  Per-child packing configuration within a box container.
  """
  let mode: PackMode
  let padding: USize

  new val create(
    mode': PackMode = PackFixed,
    padding': USize = 0)
  =>
    """
    Create a pack option. Defaults to fixed size with no padding.
    """
    mode = mode'
    padding = padding'