use crate::ast::value::PropertyValue;
use crate::data::DataFormat;
use super::container::{FrameNode, GroupNode, TableNode};
use super::effect::{LightNode, MeshNode};
use super::leaf::{
ChartNode, CodeNode, EllipseNode, ImageNode, LineNode, PatternNode, PolygonNode, PolylineNode,
RectNode, TextNode,
};
use super::special::{
ConnectorNode, FieldNode, FootnoteNode, InstanceNode, ShapeNode, TocNode, UnknownNode,
};
#[derive(Debug, Clone, PartialEq)]
pub enum UnknownValue {
String(String),
Integer(i128),
Float(f64),
Bool(bool),
Null,
}
#[derive(Debug, Clone, PartialEq)]
pub struct UnknownProperty {
pub value: UnknownValue,
pub ty: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TextSpan {
pub text: String,
pub fill: Option<PropertyValue>,
pub font_weight: Option<PropertyValue>,
pub italic: Option<bool>,
pub underline: Option<bool>,
pub strikethrough: Option<bool>,
pub vertical_align: Option<String>,
pub footnote_ref: Option<String>,
pub data_ref: Option<String>,
pub data_format: Option<DataFormat>,
pub highlight: Option<PropertyValue>,
pub code: Option<bool>,
pub link: Option<String>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum ObjectPosition {
Start,
Center,
End,
Pct(f64),
}
#[derive(Debug, Clone, PartialEq)]
pub struct Point {
pub x: Option<crate::ast::value::Dimension>,
pub y: Option<crate::ast::value::Dimension>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum Node {
Rect(Box<RectNode>),
Ellipse(EllipseNode),
Line(LineNode),
Text(Box<TextNode>),
Code(CodeNode),
Frame(FrameNode),
Group(GroupNode),
Image(ImageNode),
Polygon(PolygonNode),
Polyline(PolylineNode),
Instance(InstanceNode),
Field(FieldNode),
Footnote(FootnoteNode),
Toc(TocNode),
Table(Box<TableNode>),
Shape(Box<ShapeNode>),
Connector(Box<ConnectorNode>),
Unknown(Box<UnknownNode>),
Pattern(Box<PatternNode>),
Chart(Box<ChartNode>),
Light(Box<LightNode>),
Mesh(Box<MeshNode>),
}