indirect enum Node: Codable, Hashable { case empty // MARK: Widget case text(content: String) case textField(content: String) case button(label: Identified) case picker(title: String, selection: Id, content: Identified) // MARK: Aggregation case child(wrapped: Identified) case group(children: [Identified]) // MARK: Layout case vStack(spacing: Double, wrapped: Identified) case hStack(spacing: Double, wrapped: Identified) case zStack(spacing: Double, wrapped: Identified) case list(wrapped: Identified) case overlay(wrapped: Identified, alignment: Alignment, overlayed: Identified) // MARK: Wrapper case shape(shape: ShapeNode) case gestured(wrapped: Identified, gesture: Identified) case modified(wrapped: Identified, modifier: ModifierNode) }