use std::collections::BTreeMap;
use crate::ast::Span;
use crate::ast::block_style::BlockStyle;
use crate::ast::value::{Dimension, PropertyValue};
use crate::tokens::SyntaxTheme;
use super::common::{Node, ObjectPosition, Point, TextSpan, UnknownProperty};
#[derive(Debug, Clone, PartialEq)]
pub struct ImageNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub asset: String,
pub x: Option<PropertyValue>,
pub y: Option<PropertyValue>,
pub w: Option<PropertyValue>,
pub h: Option<PropertyValue>,
pub src_x: Option<Dimension>,
pub src_y: Option<Dimension>,
pub src_w: Option<Dimension>,
pub src_h: Option<Dimension>,
pub fit: Option<String>,
pub clip: Option<String>,
pub clip_radius: Option<PropertyValue>,
pub object_position_x: Option<ObjectPosition>,
pub object_position_y: Option<ObjectPosition>,
pub opacity: Option<f64>,
pub shadow: Option<PropertyValue>,
pub filter: Option<PropertyValue>,
pub mask: Option<PropertyValue>,
pub blend_mode: Option<String>,
pub blur: Option<Dimension>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub rotate: Option<Dimension>,
pub style: Option<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 RectNode {
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 radius: Option<PropertyValue>,
pub radius_tl: Option<PropertyValue>,
pub radius_tr: Option<PropertyValue>,
pub radius_br: Option<PropertyValue>,
pub radius_bl: Option<PropertyValue>,
pub style: Option<String>,
pub fill: Option<PropertyValue>,
pub stroke: Option<PropertyValue>,
pub stroke_width: Option<PropertyValue>,
pub stroke_alignment: Option<String>,
pub stroke_dash: Option<PropertyValue>,
pub stroke_gap: Option<PropertyValue>,
pub stroke_linecap: Option<String>,
pub border_top: Option<PropertyValue>,
pub border_bottom: Option<PropertyValue>,
pub border_left: Option<PropertyValue>,
pub border_right: Option<PropertyValue>,
pub border_width: Option<PropertyValue>,
pub stroke_outer: Option<PropertyValue>,
pub stroke_outer_width: Option<PropertyValue>,
pub shadow: Option<PropertyValue>,
pub filter: Option<PropertyValue>,
pub mask: Option<PropertyValue>,
pub blend_mode: Option<String>,
pub blur: Option<Dimension>,
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>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct LineNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub x1: Option<Dimension>,
pub y1: Option<Dimension>,
pub x2: Option<Dimension>,
pub y2: Option<Dimension>,
pub style: Option<String>,
pub stroke: Option<PropertyValue>,
pub stroke_width: Option<PropertyValue>,
pub stroke_dash: Option<PropertyValue>,
pub stroke_gap: Option<PropertyValue>,
pub stroke_linecap: Option<String>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct EllipseNode {
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 rx: Option<PropertyValue>,
pub ry: Option<PropertyValue>,
pub style: Option<String>,
pub fill: Option<PropertyValue>,
pub stroke: Option<PropertyValue>,
pub stroke_width: Option<PropertyValue>,
pub stroke_dash: Option<PropertyValue>,
pub stroke_gap: Option<PropertyValue>,
pub stroke_linecap: Option<String>,
pub shadow: Option<PropertyValue>,
pub filter: Option<PropertyValue>,
pub mask: Option<PropertyValue>,
pub blend_mode: Option<String>,
pub blur: Option<Dimension>,
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>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct TextNode {
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 align: Option<String>,
pub v_align: Option<String>,
pub direction: Option<String>,
pub overflow: Option<String>,
pub overflow_wrap: Option<String>,
pub style: Option<String>,
pub fill: Option<PropertyValue>,
pub stroke: Option<PropertyValue>,
pub stroke_width: Option<PropertyValue>,
pub contrast_bg: Option<PropertyValue>,
pub font_family: Option<PropertyValue>,
pub font_size: Option<PropertyValue>,
pub font_size_min: Option<PropertyValue>,
pub font_weight: Option<PropertyValue>,
pub shadow: Option<PropertyValue>,
pub filter: Option<PropertyValue>,
pub mask: Option<PropertyValue>,
pub blend_mode: Option<String>,
pub blur: Option<Dimension>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub selectable: Option<bool>,
pub rotate: Option<Dimension>,
pub chain: Option<String>,
pub drop_cap_lines: Option<u32>,
pub hyphenate: Option<bool>,
pub widow_orphan: Option<u32>,
pub tab_leader: Option<String>,
pub text_exclusion: Option<String>,
pub padding_left: Option<Dimension>,
pub text_indent: Option<Dimension>,
pub bullet: Option<String>,
pub bullet_gap: Option<Dimension>,
pub content_format: Option<String>,
pub src: Option<String>,
pub spans: Vec<TextSpan>,
pub block_styles: Vec<BlockStyle>,
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 CodeNode {
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 overflow: Option<String>,
pub language: Option<String>,
pub line_numbers: Option<bool>,
pub tab_width: Option<u32>,
pub style: Option<String>,
pub fill: Option<PropertyValue>,
pub font_family: Option<PropertyValue>,
pub font_size: Option<PropertyValue>,
pub font_weight: Option<PropertyValue>,
pub syntax_theme: Option<SyntaxTheme>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub selectable: Option<bool>,
pub rotate: Option<Dimension>,
pub content: 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 PolygonNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub fill: Option<PropertyValue>,
pub stroke: Option<PropertyValue>,
pub stroke_width: Option<PropertyValue>,
pub stroke_alignment: Option<String>,
pub fill_rule: Option<String>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub rotate: Option<Dimension>,
pub style: Option<String>,
pub points: Vec<Point>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct PatternNode {
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 radius: Option<PropertyValue>,
pub radius_tl: Option<PropertyValue>,
pub radius_tr: Option<PropertyValue>,
pub radius_br: Option<PropertyValue>,
pub radius_bl: Option<PropertyValue>,
pub style: Option<String>,
pub fill: Option<PropertyValue>,
pub stroke: Option<PropertyValue>,
pub stroke_width: Option<PropertyValue>,
pub stroke_alignment: Option<String>,
pub stroke_dash: Option<PropertyValue>,
pub stroke_gap: Option<PropertyValue>,
pub stroke_linecap: Option<String>,
pub border_top: Option<PropertyValue>,
pub border_bottom: Option<PropertyValue>,
pub border_left: Option<PropertyValue>,
pub border_right: Option<PropertyValue>,
pub border_width: Option<PropertyValue>,
pub stroke_outer: Option<PropertyValue>,
pub stroke_outer_width: Option<PropertyValue>,
pub shadow: Option<PropertyValue>,
pub filter: Option<PropertyValue>,
pub mask: Option<PropertyValue>,
pub blend_mode: Option<String>,
pub blur: Option<Dimension>,
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 kind: String,
pub seed: Option<i64>,
pub count: Option<i64>,
pub spacing: Option<Dimension>,
pub jitter: Option<f64>,
pub motif: Box<Node>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ChartSeries {
pub label: Option<String>,
pub color: Option<PropertyValue>,
pub label_color: Option<PropertyValue>,
pub data_ref: Option<String>,
pub values: Vec<f64>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct ChartNode {
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 radius: Option<PropertyValue>,
pub radius_tl: Option<PropertyValue>,
pub radius_tr: Option<PropertyValue>,
pub radius_br: Option<PropertyValue>,
pub radius_bl: Option<PropertyValue>,
pub style: Option<String>,
pub fill: Option<PropertyValue>,
pub stroke: Option<PropertyValue>,
pub stroke_width: Option<PropertyValue>,
pub stroke_alignment: Option<String>,
pub stroke_dash: Option<PropertyValue>,
pub stroke_gap: Option<PropertyValue>,
pub stroke_linecap: Option<String>,
pub border_top: Option<PropertyValue>,
pub border_bottom: Option<PropertyValue>,
pub border_left: Option<PropertyValue>,
pub border_right: Option<PropertyValue>,
pub border_width: Option<PropertyValue>,
pub stroke_outer: Option<PropertyValue>,
pub stroke_outer_width: Option<PropertyValue>,
pub shadow: Option<PropertyValue>,
pub filter: Option<PropertyValue>,
pub mask: Option<PropertyValue>,
pub blend_mode: Option<String>,
pub blur: Option<Dimension>,
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 kind: String,
pub title: Option<String>,
pub caption: Option<String>,
pub legend: Option<bool>,
pub legend_position: Option<String>,
pub legend_layout: Option<String>,
pub legend_align: Option<String>,
pub axis_min: Option<f64>,
pub axis_max: Option<f64>,
pub axis_style: Option<String>,
pub bar_mode: Option<String>,
pub orientation: Option<String>,
pub point_placement: Option<String>,
pub value_labels: Option<String>,
pub value_color: Option<PropertyValue>,
pub label_colors: Vec<PropertyValue>,
pub slice_colors: Vec<PropertyValue>,
pub categories: Vec<String>,
pub series: Vec<ChartSeries>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}
#[derive(Debug, Clone, PartialEq)]
pub struct PolylineNode {
pub id: String,
pub name: Option<String>,
pub role: Option<String>,
pub fill: Option<PropertyValue>,
pub stroke: Option<PropertyValue>,
pub stroke_width: Option<PropertyValue>,
pub fill_rule: Option<String>,
pub opacity: Option<f64>,
pub visible: Option<bool>,
pub locked: Option<bool>,
pub rotate: Option<Dimension>,
pub style: Option<String>,
pub points: Vec<Point>,
pub source_span: Option<Span>,
pub unknown_props: BTreeMap<String, UnknownProperty>,
}