// =============================================================================
// Layout Package - Public API Entry Point
// =============================================================================
// This package re-exports Node and LayoutTree related types.
// For enum types (Display, Dimension, etc.), import "mizchi/crater/types" directly.
//
// Usage:
//   import {
//     "mizchi/crater/types",
//     "mizchi/crater/layout",
//   }
//   let style = @layout.Style::default()
//   style.display = @types.Flex
//   let node = @layout.Node::new("root", style, [])

// =============================================================================
// Re-exports from style
// =============================================================================

///|
pub using @style {type Style}

// =============================================================================
// Re-exports from node
// =============================================================================

///|
pub using @node {type Node}

// =============================================================================
// Re-exports from tree
// =============================================================================

///|
pub using @tree {type LayoutNode, type LayoutTree, type CacheStats}

// =============================================================================
// Convenience Constructors
// =============================================================================

///|
/// Create a new Size for viewport dimensions
pub fn size(width : Double, height : Double) -> @types.Size[Double] {
  @types.Size::new(width, height)
}

///|
/// Create a LayoutNode with default style (builder pattern start)
pub fn layout_node_create(id : String) -> @tree.LayoutNode {
  @tree.LayoutNode::create_with_id(id)
}

///|
/// Create a new LayoutTree from a LayoutNode
pub fn layout_tree(
  root : @tree.LayoutNode,
  viewport_width : Double,
  viewport_height : Double,
) -> @tree.LayoutTree {
  @tree.LayoutTree::new(root, viewport_width, viewport_height)
}

///|
/// Create a LayoutTree from an immutable Node
pub fn layout_tree_from_node(
  root : @node.Node,
  viewport_width : Double,
  viewport_height : Double,
) -> @tree.LayoutTree {
  @tree.LayoutTree::from_node(root, viewport_width, viewport_height)
}