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