use std::collections::BTreeMap;
use crate::ast::Span;
use crate::ast::value::{Dimension, PropertyValue};
use super::common::{Node, UnknownProperty};
#[derive(Debug, Clone, PartialEq)]
pub struct FrameNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub x: Option<PropertyValue>,
pub y: Option<PropertyValue>,
pub w: Option<PropertyValue>,
pub h: Option<PropertyValue>,
pub layout: Option<String>,
pub columns: Option<u32>,
pub rows: Option<u32>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub rotate: Option<Dimension>,
pub blend_mode: Option<String>,
pub blur: Option<Dimension>,
pub style: Option<String>,
pub children: Vec<Node>,
pub anchor: Option<String>,
pub anchor_zone: Option<String>,
pub anchor_sibling: Option<String>,
pub anchor_edge: Option<String>,
pub anchor_gap: Option<Dimension>,
pub anchor_parent: Option<bool>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ProtectedRegion {
pub id: String,
pub x: Dimension,
pub y: Dimension,
pub w: Dimension,
pub h: Dimension,
pub label: Option<String>,
pub source_span: Option<Span>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct GroupNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub x: Option<PropertyValue>,
pub y: Option<PropertyValue>,
pub w: Option<PropertyValue>,
pub h: Option<PropertyValue>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub rotate: Option<Dimension>,
pub blend_mode: Option<String>,
pub blur: Option<Dimension>,
pub style: Option<String>,
pub semantic_role: Option<String>,
pub intensity: Option<f64>,
pub layer_priority: Option<i64>,
pub children: Vec<Node>,
pub protected_regions: Vec<ProtectedRegion>,
pub editable_param_ids: Vec<String>,
pub anchor: Option<String>,
pub anchor_zone: Option<String>,
pub anchor_sibling: Option<String>,
pub anchor_edge: Option<String>,
pub anchor_gap: Option<Dimension>,
pub anchor_parent: Option<bool>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TableColumn {
pub width: Option<Dimension>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TableCell {
pub colspan: u32,
pub rowspan: u32,
pub children: Vec<Node>,
pub fill: Option<PropertyValue>,
pub border: Option<PropertyValue>,
pub border_width: Option<PropertyValue>,
pub h_align: Option<String>,
pub v_align: Option<String>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TableRow {
pub cells: Vec<TableCell>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TableNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub x: Option<PropertyValue>,
pub y: Option<PropertyValue>,
pub w: Option<PropertyValue>,
pub h: Option<PropertyValue>,
pub columns: Vec<TableColumn>,
pub rows: Vec<TableRow>,
pub header_rows: Option<u32>,
pub flows: Option<String>,
pub gap: Option<PropertyValue>,
pub cell_padding: Option<PropertyValue>,
pub border_collapse: Option<String>,
pub fill: Option<PropertyValue>,
pub border: Option<PropertyValue>,
pub border_width: Option<PropertyValue>,
pub header_fill: Option<PropertyValue>,
pub header_style: Option<String>,
pub h_align: Option<String>,
pub v_align: Option<String>,
pub style: Option<String>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub rotate: Option<Dimension>,
pub anchor: Option<String>,
pub anchor_zone: Option<String>,
pub anchor_sibling: Option<String>,
pub anchor_edge: Option<String>,
pub anchor_gap: Option<Dimension>,
pub anchor_parent: Option<bool>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}