import type { CSSProperties, RefObject } from "react"; import type { JsonFormsRendererRegistryEntry, JsonFormsCellRendererRegistryEntry, UISchemaElement, } from "@jsonforms/core"; export interface TreeNode { id: number | string; hasChildren?: boolean; children?: TreeNode[]; isHighlighted?: boolean; [key: string]: any; } export interface CollapseToggleProps { isCollapsed: boolean; borderColor: string; cardHeight: number; onToggle: () => void; isLoading?: boolean; } export interface NodeContainerProps { nodeData: Record; renderers: JsonFormsRendererRegistryEntry[]; cells: JsonFormsCellRendererRegistryEntry[]; enabled: boolean; nodeElements: UISchemaElement[]; nodeWidth: number; minHeight: number; hasChildren: boolean; isCollapsed: boolean; onToggle: () => void; onHeightChange: (h: number) => void; currentHeight: number; levelStyle: any; depth: number; isHighlighted: boolean; isNodeLoading?: boolean; styleConfig?: any; } export interface ZoomTransformMatrix { scaleX: number; scaleY: number; translateX: number; translateY: number; skewX: number; skewY: number; } export interface ZoomHandle { transformMatrix: ZoomTransformMatrix; isDragging: boolean; containerRef: RefObject; scale: (scale: { scaleX: number; scaleY?: number; point?: { x: number; y: number } }) => void; dragStart: (event: any) => void; dragMove: (event: any, options?: { offsetX?: number; offsetY?: number }) => void; dragEnd: () => void; reset: () => void; toString: () => string; } export interface ToolbarProps { zoom: ZoomHandle; totalWidth: number; } export interface ChartProps { path: string; width: number; height: number; data: TreeNode; linkType: string; stepPercent: number; nodeWidth: number; nodeHeight: number; styleConfig: Record; margin?: typeof DEFAULT_MARGIN; renderers: JsonFormsRendererRegistryEntry[]; cells: JsonFormsCellRendererRegistryEntry[]; enabled: boolean; nodeElements: UISchemaElement[]; islazyLoad?: boolean; lazyLoadFunction?: string; } export const MIN_ZOOM = 0.01; export const MAX_ZOOM = 4; export const DEFAULT_MARGIN = { top: 30, left: 30, right: 30, bottom: 70 }; export const TOGGLE_RADIUS = 11; export const TOOLBAR_HEIGHT = 52; export const FOREIGNOBJECT_MAX_HEIGHT = 9999; export const NODE_SCHEMA = { type: "object", additionalProperties: true }; export const NODE_UISCHEMA = { type: "VerticalLayout", elements: [] }; export const DEFAULT_STYLES = { backgroundColor: "#ffffff", borderColor: "#aaaaaa", borderWidth: 1, borderRadius: 6, };