pub trait AreaModel {
    // Required methods
    fn after_gaps(&self, margin: &Gaps) -> Area;
    fn move_with_offsets(&mut self, offset_x: &Length, offset_y: &Length);
    fn align_content(
        &mut self,
        available_area: &Area,
        contents_area: &Size2D,
        alignment: &Alignment,
        direction: &DirectionMode,
        alignment_direction: AlignmentDirection
    );
}