kitmd 0.2.1

A terminal-based markdown and mermaid renderer/viewer using the Kitty graphics protocol
use std::collections::BTreeMap;

use crate::mermaid_engine::config::LayoutConfig;
use crate::mermaid_engine::ir::Graph;

use super::{DiagramData, ErrorLayout, Layout};

pub(super) fn compute_error_layout(graph: &Graph, config: &LayoutConfig) -> Layout {
    let viewbox_width = config.treemap.error_viewbox_width.max(1.0);
    let viewbox_height = config.treemap.error_viewbox_height.max(1.0);
    let render_width = config.treemap.error_render_width.max(1.0);
    let derived_height = render_width * viewbox_height / viewbox_width;
    let render_height = match config.treemap.error_render_height {
        Some(height) => height,
        None => derived_height.round(),
    }
    .max(1.0);
    Layout {
        kind: graph.kind,
        nodes: BTreeMap::new(),
        edges: Vec::new(),
        subgraphs: Vec::new(),
        width: render_width,
        height: render_height,
        diagram: DiagramData::Error(ErrorLayout {
            viewbox_width,
            viewbox_height,
            render_width,
            render_height,
            message: config.treemap.error_message.clone(),
            version: config.treemap.error_version.clone(),
            text_x: config.treemap.error_text_x,
            text_y: config.treemap.error_text_y,
            text_size: config.treemap.error_text_size,
            version_x: config.treemap.error_version_x,
            version_y: config.treemap.error_version_y,
            version_size: config.treemap.error_version_size,
            icon_scale: config.treemap.icon_scale,
            icon_tx: config.treemap.icon_tx,
            icon_ty: config.treemap.icon_ty,
        }),
    }
}

pub(super) fn compute_pie_error_layout(graph: &Graph, config: &LayoutConfig) -> Layout {
    let viewbox_width = config.pie.error_viewbox_width.max(1.0);
    let viewbox_height = config.pie.error_viewbox_height.max(1.0);
    let render_width = config.pie.error_render_width.max(1.0);
    let derived_height = render_width * viewbox_height / viewbox_width;
    let render_height = match config.pie.error_render_height {
        Some(height) => height,
        None => derived_height.round(),
    }
    .max(1.0);
    Layout {
        kind: graph.kind,
        nodes: BTreeMap::new(),
        edges: Vec::new(),
        subgraphs: Vec::new(),
        width: render_width,
        height: render_height,
        diagram: DiagramData::Error(ErrorLayout {
            viewbox_width,
            viewbox_height,
            render_width,
            render_height,
            message: config.pie.error_message.clone(),
            version: config.pie.error_version.clone(),
            text_x: config.pie.error_text_x,
            text_y: config.pie.error_text_y,
            text_size: config.pie.error_text_size,
            version_x: config.pie.error_version_x,
            version_y: config.pie.error_version_y,
            version_size: config.pie.error_version_size,
            icon_scale: config.pie.icon_scale,
            icon_tx: config.pie.icon_tx,
            icon_ty: config.pie.icon_ty,
        }),
    }
}