import * as react from 'react';

/**
 * 画布支持的元素类型。
 * @category 数据
 */
type CanvasElementType = "textbox" | "image" | "circle" | "rectangle" | "triangle" | "group" | "frame" | "slide" | "path" | "line";
/**
 * 线性渐变配置。
 * @category 样式
 */
interface CanvasLinearGradient {
    /** 固定值 'linear' */
    type: "linear";
    /** 渐变起止坐标（相对元素宽高的 0–1 比例），x1/y1 为起点，x2/y2 为终点 */
    coords: {
        x1: number;
        y1: number;
        x2: number;
        y2: number;
    };
    /** 色标数组，每项包含 offset（位置 0–1）和 color（颜色字符串如 'rgba(255,0,0,1)'） */
    colorStops: {
        offset: number;
        color: string;
    }[];
}
/**
 * 填充值：纯色字符串（如 '#ff0000'、'rgba(0,0,0,0.5)'）或线性渐变对象；null 表示不填充。
 * @category 样式
 */
type CanvasFill = string | CanvasLinearGradient | null;
/**
 * 描边值：与填充格式一致——纯色字符串或线性渐变对象；null 表示不描边。
 * @category 样式
 */
type CanvasStroke = string | CanvasLinearGradient | null;
/**
 * 阴影配置。
 * @category 样式
 */
interface CanvasShadow {
    /** 模糊半径 */
    blur: number;
    /** 颜色字符串，如 'rgba(0,0,0,0.5)' */
    color: string;
    /** X 偏移 */
    offsetX: number;
    /** Y 偏移 */
    offsetY: number;
}
/**
 * 画布完整数据，用于 loadFromJSON / exportToJSON。
 * @category 数据
 */
interface CanvasData {
    /** 画布宽度 */
    width: number;
    /** 画布高度 */
    height: number;
    /** 缩略图 */
    thumb?: string;
    /** 对象列表 */
    objects: CanvasObjectData[];
}
/**
 * 裁剪矩形（图片像素空间）。
 * @category 数据
 */
interface CropRect {
    /** 裁剪区域左上角 X（图片像素） */
    x: number;
    /** 裁剪区域左上角 Y（图片像素） */
    y: number;
    /** 裁剪区域宽度（图片像素） */
    width: number;
    /** 裁剪区域高度（图片像素） */
    height: number;
}
/**
 * 裁剪信息（图片像素空间）。
 * @category 数据
 */
interface Crop {
    /** 裁剪矩形 */
    rect: CropRect;
    /** 裁剪框固定比例（0 表示自由比例） */
    ratio: number;
}
/**
 * 粘贴操作的返回结果。
 * @category 数据
 */
interface PasteResult {
    /** 粘贴的元素数量，-1 表示使用了内部粘贴（无法确定具体数量） */
    count: number;
    /** 提示信息，例如不支持的文件类型 */
    message?: string;
}
/**
 * 文本对象。
 * @category 对象类型
 */
interface CanvasTextboxObject {
    /** 对象类型标识 */
    type: "textbox";
    /** 唯一 ID。默认 '' */
    id: string;
    /** 对象名称。默认 '' */
    name: string;
    /** X 坐标。默认 0 */
    left: number;
    /** Y 坐标。默认 0 */
    top: number;
    /** 宽度。默认 0 */
    width: number;
    /** 高度。默认 0 */
    height: number;
    /** X 缩放。默认 1 */
    scaleX: number;
    /** Y 缩放。默认 1 */
    scaleY: number;
    /** 旋转角度（度）。默认 0 */
    angle: number;
    /** 描边宽度。默认 0 */
    strokeWidth: number;
    /** 不透明度 0–1。默认 1 */
    opacity: number;
    /** 是否可见。默认 true */
    visible: boolean;
    /** 是否锁定。默认 false */
    locked: boolean;
    /** 锁定水平移动。默认 false */
    lockMovementX: boolean;
    /** 锁定垂直移动。默认 false */
    lockMovementY: boolean;
    /** 锁定旋转。默认 false */
    lockRotation: boolean;
    /** 锁定水平缩放。默认 false */
    lockScalingX: boolean;
    /** 锁定垂直缩放。默认 false */
    lockScalingY: boolean;
    /** 锁定等比缩放。默认 true */
    lockUniScaling: boolean;
    /** 是否可选中。默认 true */
    selectable: boolean;
    /** 文本内容。默认 '输入文本' */
    text: string;
    /** 字号。默认 32 */
    fontSize: number;
    /** 行高，0 表示自动。默认 0 */
    lineHeight: number;
    /** 字体名称。默认 'SourceHanSansCN-Normal' */
    fontFamily: string;
    /** 填充（纯色字符串或渐变对象）。默认黑色 */
    fill: CanvasFill;
    /** 描边（纯色字符串或渐变对象）。默认黑色 */
    stroke: CanvasStroke;
    /** 阴影；null 表示无阴影。默认 - */
    shadow: CanvasShadow | null;
    /**
     * 整个文本元素的背景色，覆盖 (0,0)~(width,height) 的矩形区域，与文本布局无关。默认 null
     */
    backgroundColor: CanvasFill | null;
    /**
     * 行级文本背景色（"高亮笔"语义）：每行所有字符默认共享此色，渲染为各行实际文字所占的矩形。默认 null
     */
    textBackgroundColor: CanvasFill | null;
    /** 水平对齐：'left'、'center'、'right'。默认 'left' */
    textAlign: string;
    /**
     * 文本大小写转换。默认 'none'
     * - `none`：无
     * - `uppercase`：全部大写
     * - `smallCaps`：小型大写字母（当前等同于 `uppercase`，未做缩放）
     * - `titleCase`：实词首字母大写（跳过常见冠词/连词/介词）
     * - `capitalize`：每个单词首字母大写
     */
    fontCapitalization: "none" | "uppercase" | "smallCaps" | "titleCase" | "capitalize";
    /** 字符间距（千分之一 em）。默认 0 */
    charSpacing: number;
    /** 下划线。默认 false */
    underline: boolean;
    /** 删除线。默认 false */
    linethrough: boolean;
    /** 粗体。默认 false */
    bold: boolean;
    /** 斜体。默认 false */
    italic: boolean;
    /** 富文本样式（按字符/段落的样式覆盖）。默认 - */
    styles: unknown;
    /** 是否可编辑。默认 true */
    editable: boolean;
}
/**
 * 图片对象。
 * @category 对象类型
 */
interface CanvasImageObject {
    /** 对象类型标识 */
    type: "image";
    /** 唯一 ID。默认 '' */
    id: string;
    /** 对象名称。默认 '' */
    name: string;
    /** X 坐标。默认 0 */
    left: number;
    /** Y 坐标。默认 0 */
    top: number;
    /** 宽度。默认 0 */
    width: number;
    /** 高度。默认 0 */
    height: number;
    /** X 缩放。默认 1 */
    scaleX: number;
    /** Y 缩放。默认 1 */
    scaleY: number;
    /** 旋转角度（度）。默认 0 */
    angle: number;
    /** 描边宽度。默认 0 */
    strokeWidth: number;
    /** 不透明度 0–1。默认 1 */
    opacity: number;
    /** 是否可见。默认 true */
    visible: boolean;
    /** 是否锁定。默认 false */
    locked: boolean;
    /** 锁定水平移动。默认 false */
    lockMovementX: boolean;
    /** 锁定垂直移动。默认 false */
    lockMovementY: boolean;
    /** 锁定旋转。默认 false */
    lockRotation: boolean;
    /** 锁定水平缩放。默认 false */
    lockScalingX: boolean;
    /** 锁定垂直缩放。默认 false */
    lockScalingY: boolean;
    /** 锁定等比缩放。默认 true */
    lockUniScaling: boolean;
    /** 是否可选中。默认 true */
    selectable: boolean;
    /** 图片地址。默认 '' */
    src: string;
    /** 裁切偏移 X。默认 0 */
    cropX: number;
    /** 裁切偏移 Y。默认 0 */
    cropY: number;
    /**
     * 加载占位：`null` 或 `""` 表示无；`breathing`、`skeleton` 为对应动画（大小写不敏感）。
     */
    loading: string | null;
    /** 圆角 X。默认 0 */
    rx: number;
    /** 圆角 Y。默认 0 */
    ry: number;
    /** 背景色（纯色字符串或渐变对象）。默认 - */
    backgroundColor: CanvasFill;
    /** 描边（纯色字符串或渐变对象）。默认 - */
    stroke: CanvasStroke;
    /** 阴影；null 表示无阴影。默认 - */
    shadow: CanvasShadow | null;
}
/**
 * 圆形对象。
 * @category 对象类型
 */
interface CanvasCircleObject {
    /** 对象类型标识 */
    type: "circle";
    /** 唯一 ID。默认 '' */
    id: string;
    /** 对象名称。默认 '' */
    name: string;
    /** X 坐标。默认 0 */
    left: number;
    /** Y 坐标。默认 0 */
    top: number;
    /** 宽度（等于 radius × 2）。默认 0 */
    width: number;
    /** 高度（等于 radius × 2）。默认 0 */
    height: number;
    /** X 缩放。默认 1 */
    scaleX: number;
    /** Y 缩放。默认 1 */
    scaleY: number;
    /** 旋转角度（度）。默认 0 */
    angle: number;
    /** 描边宽度。默认 0 */
    strokeWidth: number;
    /** 不透明度 0–1。默认 1 */
    opacity: number;
    /** 是否可见。默认 true */
    visible: boolean;
    /** 是否锁定。默认 false */
    locked: boolean;
    /** 锁定水平移动。默认 false */
    lockMovementX: boolean;
    /** 锁定垂直移动。默认 false */
    lockMovementY: boolean;
    /** 锁定旋转。默认 false */
    lockRotation: boolean;
    /** 锁定水平缩放。默认 false */
    lockScalingX: boolean;
    /** 锁定垂直缩放。默认 false */
    lockScalingY: boolean;
    /** 锁定等比缩放。默认 true */
    lockUniScaling: boolean;
    /** 是否可选中。默认 true */
    selectable: boolean;
    /** 填充（纯色字符串或渐变对象）。默认 - */
    fill: CanvasFill;
    /** 描边（纯色字符串或渐变对象）。默认 - */
    stroke: CanvasStroke;
    /** 阴影；null 表示无阴影。默认 - */
    shadow: CanvasShadow | null;
    /** 虚线长度数组，如 \[5, 3\]。默认 [] */
    borderDashArray: number[];
    /** 半径。默认 50 */
    radius: number;
}
/**
 * 矩形对象。
 * @category 对象类型
 */
interface CanvasRectangleObject {
    /** 对象类型标识 */
    type: "rectangle";
    /** 唯一 ID。默认 '' */
    id: string;
    /** 对象名称。默认 '' */
    name: string;
    /** X 坐标。默认 0 */
    left: number;
    /** Y 坐标。默认 0 */
    top: number;
    /** 宽度。默认 0 */
    width: number;
    /** 高度。默认 0 */
    height: number;
    /** X 缩放。默认 1 */
    scaleX: number;
    /** Y 缩放。默认 1 */
    scaleY: number;
    /** 旋转角度（度）。默认 0 */
    angle: number;
    /** 描边宽度。默认 0 */
    strokeWidth: number;
    /** 不透明度 0–1。默认 1 */
    opacity: number;
    /** 是否可见。默认 true */
    visible: boolean;
    /** 是否锁定。默认 false */
    locked: boolean;
    /** 锁定水平移动。默认 false */
    lockMovementX: boolean;
    /** 锁定垂直移动。默认 false */
    lockMovementY: boolean;
    /** 锁定旋转。默认 false */
    lockRotation: boolean;
    /** 锁定水平缩放。默认 false */
    lockScalingX: boolean;
    /** 锁定垂直缩放。默认 false */
    lockScalingY: boolean;
    /** 锁定等比缩放。默认 false */
    lockUniScaling: boolean;
    /** 是否可选中。默认 true */
    selectable: boolean;
    /** 填充（纯色字符串或渐变对象）。默认 - */
    fill: CanvasFill;
    /** 描边（纯色字符串或渐变对象）。默认 - */
    stroke: CanvasStroke;
    /** 阴影；null 表示无阴影。默认 - */
    shadow: CanvasShadow | null;
    /** 虚线长度数组。默认 [] */
    borderDashArray: number[];
    /** 圆角 X。默认 0 */
    rx: number;
    /** 圆角 Y。默认 0 */
    ry: number;
}
/**
 * 三角形对象。
 * @category 对象类型
 */
interface CanvasTriangleObject {
    /** 对象类型标识 */
    type: "triangle";
    /** 唯一 ID。默认 '' */
    id: string;
    /** 对象名称。默认 '' */
    name: string;
    /** X 坐标。默认 0 */
    left: number;
    /** Y 坐标。默认 0 */
    top: number;
    /** 宽度。默认 0 */
    width: number;
    /** 高度。默认 0 */
    height: number;
    /** X 缩放。默认 1 */
    scaleX: number;
    /** Y 缩放。默认 1 */
    scaleY: number;
    /** 旋转角度（度）。默认 0 */
    angle: number;
    /** 描边宽度。默认 0 */
    strokeWidth: number;
    /** 不透明度 0–1。默认 1 */
    opacity: number;
    /** 是否可见。默认 true */
    visible: boolean;
    /** 是否锁定。默认 false */
    locked: boolean;
    /** 锁定水平移动。默认 false */
    lockMovementX: boolean;
    /** 锁定垂直移动。默认 false */
    lockMovementY: boolean;
    /** 锁定旋转。默认 false */
    lockRotation: boolean;
    /** 锁定水平缩放。默认 false */
    lockScalingX: boolean;
    /** 锁定垂直缩放。默认 false */
    lockScalingY: boolean;
    /** 锁定等比缩放。默认 false */
    lockUniScaling: boolean;
    /** 是否可选中。默认 true */
    selectable: boolean;
    /** 填充（纯色字符串或渐变对象）。默认 - */
    fill: CanvasFill;
    /** 描边（纯色字符串或渐变对象）。默认 - */
    stroke: CanvasStroke;
    /** 阴影；null 表示无阴影。默认 - */
    shadow: CanvasShadow | null;
    /** 虚线长度数组。默认 [] */
    borderDashArray: number[];
}
/**
 * 组对象（多个对象成组）。
 * @category 对象类型
 */
interface CanvasGroupObject {
    /** 对象类型标识 */
    type: "group";
    /** 唯一 ID。默认 '' */
    id: string;
    /** 对象名称。默认 '' */
    name: string;
    /** X 坐标。默认 0 */
    left: number;
    /** Y 坐标。默认 0 */
    top: number;
    /** 宽度。默认 0 */
    width: number;
    /** 高度。默认 0 */
    height: number;
    /** X 缩放。默认 1 */
    scaleX: number;
    /** Y 缩放。默认 1 */
    scaleY: number;
    /** 旋转角度（度）。默认 0 */
    angle: number;
    /** 描边宽度。默认 0 */
    strokeWidth: number;
    /** 不透明度 0–1。默认 1 */
    opacity: number;
    /** 是否可见。默认 true */
    visible: boolean;
    /** 是否锁定。默认 false */
    locked: boolean;
    /** 锁定水平移动。默认 false */
    lockMovementX: boolean;
    /** 锁定垂直移动。默认 false */
    lockMovementY: boolean;
    /** 锁定旋转。默认 false */
    lockRotation: boolean;
    /** 锁定水平缩放。默认 false */
    lockScalingX: boolean;
    /** 锁定垂直缩放。默认 false */
    lockScalingY: boolean;
    /** 锁定等比缩放。默认 true */
    lockUniScaling: boolean;
    /** 是否可选中。默认 true */
    selectable: boolean;
    /** 子对象列表 */
    objects: CanvasObjectData[];
}
/**
 * 画框对象（可包含子元素、裁切内容）。
 * @category 对象类型
 */
interface CanvasFrameObject {
    /** 对象类型标识 */
    type: "frame";
    /** 唯一 ID。默认 '' */
    id: string;
    /** 对象名称。默认 '' */
    name: string;
    /** X 坐标。默认 0 */
    left: number;
    /** Y 坐标。默认 0 */
    top: number;
    /** 宽度。默认 0 */
    width: number;
    /** 高度。默认 0 */
    height: number;
    /** X 缩放。默认 1 */
    scaleX: number;
    /** Y 缩放。默认 1 */
    scaleY: number;
    /** 旋转角度（度）。默认 0 */
    angle: number;
    /** 描边宽度。默认 0 */
    strokeWidth: number;
    /** 不透明度 0–1。默认 1 */
    opacity: number;
    /** 是否可见。默认 true */
    visible: boolean;
    /** 是否锁定。默认 false */
    locked: boolean;
    /** 锁定水平移动。默认 false */
    lockMovementX: boolean;
    /** 锁定垂直移动。默认 false */
    lockMovementY: boolean;
    /** 锁定旋转。默认 true */
    lockRotation: boolean;
    /** 锁定水平缩放。默认 false */
    lockScalingX: boolean;
    /** 锁定垂直缩放。默认 false */
    lockScalingY: boolean;
    /** 锁定等比缩放。默认 false */
    lockUniScaling: boolean;
    /** 是否可选中。默认 true */
    selectable: boolean;
    /** 是否允许点击穿透到子元素。默认 true */
    subTargetCheck: boolean;
    /** 背景色（纯色字符串或渐变对象）。默认白色 */
    backgroundColor: CanvasFill;
    /** 描边（纯色字符串或渐变对象）。默认 - */
    stroke: CanvasStroke;
    /** 背景是否跟随缩放。默认 true */
    autoScaleBg: boolean;
    /** 是否允许跨层拖入。默认 true */
    crossable: boolean;
    /** 是否裁切溢出内容。默认 true */
    clipContent: boolean;
    /** 是否显示名称标签。默认 true */
    showName: boolean;
    /** 是否显示尺寸标签。默认 true */
    showSize: boolean;
    /** 子对象列表 */
    objects: CanvasObjectData[];
}
/**
 * 幻灯片容器对象。
 * @category 对象类型
 */
interface CanvasSlideObject {
    /** 对象类型标识 */
    type: "slide";
    /** 唯一 ID。默认 '' */
    id: string;
    /** 对象名称。默认 '' */
    name: string;
    /** X 坐标。默认 0 */
    left: number;
    /** Y 坐标。默认 0 */
    top: number;
    /** 宽度。默认 0 */
    width: number;
    /** 高度。默认 0 */
    height: number;
    /** X 缩放。默认 1 */
    scaleX: number;
    /** Y 缩放。默认 1 */
    scaleY: number;
    /** 旋转角度（度）。默认 0 */
    angle: number;
    /** 描边宽度。默认 0 */
    strokeWidth: number;
    /** 不透明度 0–1。默认 1 */
    opacity: number;
    /** 是否可见。默认 true */
    visible: boolean;
    /** 是否锁定。默认 false */
    locked: boolean;
    /** 锁定水平移动。默认 false */
    lockMovementX: boolean;
    /** 锁定垂直移动。默认 false */
    lockMovementY: boolean;
    /** 锁定旋转。默认 true */
    lockRotation: boolean;
    /** 锁定水平缩放。默认 true */
    lockScalingX: boolean;
    /** 锁定垂直缩放。默认 true */
    lockScalingY: boolean;
    /** 锁定等比缩放。默认 true */
    lockUniScaling: boolean;
    /** 是否可选中。默认 true */
    selectable: boolean;
    /** 是否允许点击穿透到子元素。默认 true */
    subTargetCheck: boolean;
    /** 背景色（纯色字符串或渐变对象）。默认白色 */
    backgroundColor: CanvasFill;
    /** 描边（纯色字符串或渐变对象）。默认 - */
    stroke: CanvasStroke;
    /** 内容区域背景色。默认白色 */
    contentBackgroundColor: CanvasFill;
    /** 内容区域描边宽度。默认 0 */
    contentStrokeWidth: number;
    /** 内容区域描边。默认 - */
    contentStroke: CanvasStroke;
    /** 水平内边距。默认 0 */
    paddingX: number;
    /** 垂直内边距。默认 0 */
    paddingY: number;
    /** 圆角 X。默认 0 */
    rx: number;
    /** 圆角 Y。默认 0 */
    ry: number;
    /** 是否允许跨层拖入。默认 true */
    crossable: boolean;
    /** 是否裁切溢出内容。默认 true */
    clipContent: boolean;
    /** 是否显示名称标签。默认 true */
    showName: boolean;
    /** 是否显示尺寸标签。默认 true */
    showSize: boolean;
    /** 子对象列表 */
    objects: CanvasObjectData[];
}
/**
 * 占位对象（内部 overlay 等使用，不对外暴露）。
 * @internal
 */
interface CanvasPlaceholderObject {
    /** 对象类型标识 */
    type: "placeholder";
    /** 唯一 ID。默认 '' */
    id: string;
    /** 对象名称。默认 '' */
    name: string;
    /** X 坐标。默认 0 */
    left: number;
    /** Y 坐标。默认 0 */
    top: number;
    /** 宽度。默认 0 */
    width: number;
    /** 高度。默认 0 */
    height: number;
    /** 是否参与导出。默认 false */
    export: boolean;
    /** 是否锁定。默认 false */
    locked: boolean;
    /** 锁定水平移动。默认 true */
    lockMovementX: boolean;
    /** 锁定垂直移动。默认 true */
    lockMovementY: boolean;
    /** 锁定旋转。默认 true */
    lockRotation: boolean;
    /** 锁定水平缩放。默认 true */
    lockScalingX: boolean;
    /** 锁定垂直缩放。默认 true */
    lockScalingY: boolean;
    /** 锁定等比缩放。默认 true */
    lockUniScaling: boolean;
    /** 是否可选中。默认 false */
    selectable: boolean;
    /** 是否可见。默认 true */
    visible: boolean;
}
/**
 * 路径（折线/曲线）对象。
 * @category 对象类型
 */
interface CanvasPathObject {
    /** 对象类型标识 */
    type: "path";
    /** 唯一 ID。默认 '' */
    id: string;
    /** 对象名称。默认 '' */
    name: string;
    /** X 坐标。默认 0 */
    left: number;
    /** Y 坐标。默认 0 */
    top: number;
    /** 宽度。默认 0 */
    width: number;
    /** 高度。默认 0 */
    height: number;
    /** X 缩放。默认 1 */
    scaleX: number;
    /** Y 缩放。默认 1 */
    scaleY: number;
    /** 旋转角度（度）。默认 0 */
    angle: number;
    /** 描边宽度。默认 0 */
    strokeWidth: number;
    /** 不透明度 0–1。默认 1 */
    opacity: number;
    /** 是否可见。默认 true */
    visible: boolean;
    /** 是否锁定。默认 false */
    locked: boolean;
    /** 锁定水平移动。默认 false */
    lockMovementX: boolean;
    /** 锁定垂直移动。默认 false */
    lockMovementY: boolean;
    /** 锁定旋转。默认 false */
    lockRotation: boolean;
    /** 锁定水平缩放。默认 false */
    lockScalingX: boolean;
    /** 锁定垂直缩放。默认 false */
    lockScalingY: boolean;
    /** 锁定等比缩放。默认 true */
    lockUniScaling: boolean;
    /** 是否可选中。默认 true */
    selectable: boolean;
    /** 描边（纯色字符串或渐变对象）。默认黑色 */
    stroke: CanvasStroke;
    /** 路径顶点 \[x, y\][] */
    points: [number, number][];
}
/**
 * 直线 / 折线 / 曲线对象。
 * @category 对象类型
 */
interface CanvasLineObject {
    /** 对象类型标识 */
    type: "line";
    /** 唯一 ID。默认 '' */
    id: string;
    /** 对象名称。默认 '' */
    name: string;
    /** X 坐标。默认 0 */
    left: number;
    /** Y 坐标。默认 0 */
    top: number;
    /** 宽度。默认 0 */
    width: number;
    /** 高度。默认 0 */
    height: number;
    /** X 缩放。默认 1 */
    scaleX: number;
    /** Y 缩放。默认 1 */
    scaleY: number;
    /** 旋转角度（度）。默认 0 */
    angle: number;
    /** 描边宽度。默认 0 */
    strokeWidth: number;
    /** 不透明度 0–1。默认 1 */
    opacity: number;
    /** 是否可见。默认 true */
    visible: boolean;
    /** 是否锁定。默认 false */
    locked: boolean;
    /** 锁定水平移动。默认 false */
    lockMovementX: boolean;
    /** 锁定垂直移动。默认 false */
    lockMovementY: boolean;
    /** 锁定旋转。默认 true */
    lockRotation: boolean;
    /** 锁定水平缩放。默认 true */
    lockScalingX: boolean;
    /** 锁定垂直缩放。默认 true */
    lockScalingY: boolean;
    /** 锁定等比缩放。默认 true */
    lockUniScaling: boolean;
    /** 是否可选中。默认 true */
    selectable: boolean;
    /** 描边（纯色字符串或渐变对象）。默认黑色 */
    stroke: CanvasStroke;
    /** 虚线长度数组，如 \[5, 3\]。默认 [] */
    borderDashArray: number[];
    /** 线型：直连 / 直角折线 / 曲线。默认 'none' */
    lineType: "none" | "straight" | "curved";
    /** 起点样式。默认 'none' */
    startPoint: "none" | "arrow" | "filledArrow" | "circle" | "diamond" | "openTriangle" | "openCircle" | "openDiamond";
    /** 终点样式。默认 'none' */
    endPoint: "none" | "arrow" | "filledArrow" | "circle" | "diamond" | "openTriangle" | "openCircle" | "openDiamond";
    /** 路径顶点 \[x, y\][] */
    points: [number, number][];
}
/**
 * grid / grid-cell（暂不展开字段）。
 * @internal
 */
interface CanvasGridLineCellLoose {
    type: "grid" | "grid-cell";
    id: string;
    objects: CanvasObjectData[];
    src: string;
    [key: string]: unknown;
}
/**
 * 画布中单个对象的数据（由 `type` 字段区分具体类型）。
 * @category 数据
 */
type CanvasObjectData = CanvasTextboxObject | CanvasImageObject | CanvasCircleObject | CanvasRectangleObject | CanvasTriangleObject | CanvasGroupObject | CanvasFrameObject | CanvasSlideObject | CanvasPlaceholderObject | CanvasPathObject | CanvasLineObject | CanvasGridLineCellLoose;
/**
 * `onAction` 回调中 `data` 的运行时类型。
 * @category 组件
 */
type CanvasActionData = Record<string, unknown> | unknown[] | string | undefined;
/**
 * | action | 说明 |
 * |--------|------|
 * | `afterrender` | 本帧画布已绘制结束 |
 * | `loaded` | `loadFromJSON` 完成并已清空剪贴板 |
 * | `canvas properties changed` | 画布级配置已写入（如 `setCanvasProperties`） |
 * | `select` | 选区已变化 |
 * | `pan` | 视图已平移 |
 * | `scale` | 视图已缩放 |
 * | `dblclick` | 双击（进编辑、钻进组等） |
 * | `add` | 新建元素已落地；`data` 为 `{"id":"..."}` JSON 字符串 |
 * | `remove` | 删除已完成；`data` 为被删对象屏幕坐标 JSON（单个为对象，多个为数组） |
 * | `modified` | `setObjectProperties` 等写入已完成 |
 * | `align` / `arrange` | 对齐 / 排列已完成 |
 * | `moveUp` / `moveDown` / `bringToFront` / `sendToBack` | 层级已调整 |
 * | `unmark` | 已取消标注 |
 * | `drop` | 拖拽放置流程已结束 |
 * | `paste` | 粘贴并选中新对象已完成 |
 * | `undo` / `redo` | 撤销 / 重做已执行 |
 * | `merge layer` | 合并图层已完成 |
 * | `move start` / `move` / `move end` | 拖拽或键盘移动开始 / 过程 / 结束 |
 * | `scale start` / `scale element` / `scale end` | 控制点缩放开始 / 过程 / 结束 |
 * | `editing` / `edited` | 文本编辑中 / 编辑结束且内容有变 |
 * | `mark` | 新增标注（含超限提示路径） |
 * | `activate mark` / `deactivate mark` | 标注激活态变化 |
 * | `click` | Grid 等内部点击 |
 * | `cropping` | 裁剪框拖拽中 |
 *
 * @category 组件
 */
type CanvasActionType = "afterrender" | "loaded" | "canvas properties changed" | "select" | "pan" | "scale" | "dblclick" | "add" | "remove" | "modified" | "align" | "arrange" | "moveUp" | "moveDown" | "bringToFront" | "sendToBack" | "unmark" | "drop" | "paste" | "undo" | "redo" | "merge layer" | "move start" | "move" | "move end" | "scale start" | "scale element" | "scale end" | "editing" | "edited" | "mark" | "activate mark" | "deactivate mark" | "click" | "cropping";
/**
 * 画布组件 props。
 * @category 组件
 */
interface CanvasProps {
    /**
     * 会话凭证字符串。
     */
    goatdeeCode: string;
    /**
     * 用户标识。
     */
    userId?: string;
    /**
     * 接入渠道。
     */
    channel?: string;
    /**
     * 画布内部事件回调。见 {@link CanvasActionType}。
     */
    onAction?: (action: CanvasActionType | (string & {}), data?: CanvasActionData) => void;
    /** 画布与 WASM 初始化完成回调 */
    onLoad?: () => void;
    /** 图片上传接口 URL */
    uploadAction?: string;
    /** 图片上传请求头 */
    uploadHeader?: Record<string, string>;
    /**
     * 画布 overlay DOM 插槽（内部使用）。
     * @internal
     */
    renderOverlay?: () => any;
}
/**
 * 画布操作。
 * @category 方法
 */
interface CanvasViewportMethods {
    /**
     * 平移画布。
     * @param deltaX - 水平偏移量（像素），正值向右
     * @param deltaY - 垂直偏移量（像素），正值向下
     */
    pan(deltaX: number, deltaY: number): void;
    /**
     * 缩放画布。
     * @param scale - 目标缩放倍数
     * @param x - 缩放中心 X（画布坐标）
     * @param y - 缩放中心 Y（画布坐标）
     */
    scale(scale: number, x: number, y: number): void;
    /**
     * 将指定对象居中到视口。
     * @param ids - 需要居中的对象 ID 数组
     * @param duration - 动画时长（毫秒），默认 0 表示无动画
     */
    centerObjects(ids: string[], duration?: number): void;
    /**
     * 将画布内容自适应到视口。
     * @param screen - 可选，自定义视口区域 \{ x, y, width, height \}；不传则使用当前视口
     * @param bounds - 可选，目标内容矩形（内容坐标 \{ left, top, width, height \}）；不传则使用所有元素外接矩形
     * @param duration - 动画时长（毫秒），默认 0 表示无动画
     */
    fitToScreen(screen?: {
        x: number;
        y: number;
        width: number;
        height: number;
    }, bounds?: {
        left: number;
        top: number;
        width: number;
        height: number;
    }, duration?: number): void;
    /**
     * 屏幕（CSS 逻辑像素）坐标转画布对象坐标。
     * @param x - 屏幕 CSS 坐标 X
     * @param y - 屏幕 CSS 坐标 Y
     * @returns 对象坐标；失败时返回 null
     */
    worldToCanvas(x: number, y: number): {
        x: number;
        y: number;
    } | null;
    /**
     * 画布对象坐标转屏幕（CSS 逻辑像素）坐标。
     * @param x - 画布对象坐标 X
     * @param y - 画布对象坐标 Y
     * @returns 屏幕 CSS 坐标；失败时返回 null
     */
    canvasToWorld(x: number, y: number): {
        x: number;
        y: number;
    } | null;
    /**
     * 视口坐标（clientX / clientY）转画布对象坐标。
     * @param clientX - 视口 X
     * @param clientY - 视口 Y
     * @returns 对象坐标；失败时返回 null
     */
    viewportToCanvas(clientX: number, clientY: number): {
        x: number;
        y: number;
    } | null;
    /**
     * 画布对象坐标转视口坐标（clientX / clientY）。
     * @param layoutX - 画布对象坐标 X
     * @param layoutY - 画布对象坐标 Y
     * @returns 视口坐标；失败时返回 null
     */
    canvasToViewport(layoutX: number, layoutY: number): {
        x: number;
        y: number;
    } | null;
    /**
     * 获取当前画布缩放比例。
     * @returns 当前缩放值
     */
    getScale(): number;
    /**
     * 获取当前画布偏移量（内容坐标系下的平移分量）。
     * @returns 偏移量 \{ x, y \}；失败时返回 null
     */
    getOffset(): {
        x: number;
        y: number;
    } | null;
    /**
     * 调整画布渲染表面尺寸
     *
     * @param width             物理像素宽（= cssWidth × dpr）
     * @param height            物理像素高（= cssHeight × dpr）
     * @param devicePixelRatio  设备像素比，必须显式传
     */
    resize(width: number, height: number, devicePixelRatio: number): void;
    /**
     * 设置画布属性。
     * @param properties - 要设置的属性键值对，字段参考对应的对象类型定义
     */
    setCanvasProperties(properties: Record<string, any>): Promise<void>;
    /**
     * 切换平移模式（拖拽画布而非选择对象）。
     * @param isPan - true 进入平移模式，false 退出
     */
    switchToPan(isPan: boolean): void;
}
/**
 * 对象操作。
 * @category 方法
 */
interface CanvasObjectMethods {
    /**
     * 获取当前选中的对象列表。
     * @returns 选中对象数组；无选中时返回 null
     */
    getActiveObjects(): CanvasObjectData[] | null;
    /**
     * 根据 ID 获取单个对象的数据。
     * @param id - 对象 ID
     * @returns 对象数据；未找到或 id 为空时返回 null
     */
    getObject(id: string): CanvasObjectData | null;
    /**
     * 按 ID 列表批量获取对象数据，按渲染顺序排序。
     * @param ids - 对象 ID 数组；空数组直接返回 `[]`
     * @returns 对象数组；ids 为空 / 全部未匹配时返回 `[]`。
     */
    getObjects(ids: string[]): CanvasObjectData[];
    /**
     * 获取当前选中对象的外接矩形。
     * @returns 选中对象的包围盒；无选中时返回 null
     */
    getBounds(): {
        left: number;
        top: number;
        width: number;
        height: number;
    } | null;
    /**
     * 设置指定对象的属性。若包含图片 src，会自动预注册图片资源。
     * @param id - 对象 ID
     * @param properties - 要设置的属性键值对，字段参考对应的对象类型定义（如 CanvasTextboxObject、CanvasImageObject 等）
     */
    setObjectProperties(id: string, properties: Record<string, any>): Promise<void>;
    /**
     * @internal 不纳入对外 API 文档；仅供 demo / 性能测试 / 内部排障。
     *
     * 取 tgfx 的 GPU 缓存字节数。
     * @returns `{ usedBytes, purgeableBytes }`；底层失败时返回全 0
     */
    getGPUMemoryStats(): {
        usedBytes: number;
        purgeableBytes: number;
    };
    /**
     * @internal 不纳入对外 API 文档；仅供 demo / 性能测试 / 内部排障。
     *
     * 取 WASM 居住量（mimalloc `mi_process_info`）+ HEAPU8 ArrayBuffer 容量。
     *
     * @remarks
     * mimalloc 在 WASM 上不会归还 page，因此 `inUseBytes` 单调不减；
     * 长跑稳定性测试关心"是否还在持续上涨"，稳定后应平台。
     *
     * @returns `{ inUseBytes, freeBytes, heapTopBytes, heapBufferBytes }`；底层失败时返回全 0
     */
    getWasmMemoryStats(): {
        inUseBytes: number;
        freeBytes: number;
        heapTopBytes: number;
        heapBufferBytes: number;
    };
    /**
     * @internal 不纳入对外 API 文档；仅供 demo / 性能测试 / 内部排障。
     *
     * 强制清理 tgfx GPU 缓存到给定字节上限以内。
     *
     * 调用后下一帧所有 tile 都会 cache miss 重新光栅化，会引入显著 spike。
     *
     * @param bytesLimit 期望的清理后上限字节数；省略或 0 表示清光所有可清资源
     * @returns 清理后总占用是否已 ≤ bytesLimit
     */
    purgeGPUResources(bytesLimit?: number): boolean;
    /**
     * 切换「创建元素」模式，开启后点击画布可直接添加指定图形。
     * @param creating - 是否开启创建模式
     * @param type - 元素类型
     * @param options - 创建时的默认属性，字段参考对应的对象类型定义
     */
    switchToCreatingElement(creating: boolean, type?: CanvasElementType | "", options?: Record<string, any>): Promise<void>;
    /**
     * 切换「裁剪」模式，开启后点击画布可直接裁剪图片。
     * @param cropping - 是否开启裁剪模式
     * @param mode - 裁剪模式
     */
    switchToCrop(cropping: boolean, mode?: "apply" | "exit"): Promise<void>;
    /**
     * 切换「标记」模式，开启后点击元素可添加标注。
     * @param marking - true 进入标记模式，false 退出
     */
    switchToMark(marking: boolean): void;
    /**
     * 获取当前裁剪信息（图片像素空间）。未进入裁剪模式时返回 null。
     * @returns 裁剪信息
     */
    getCrop(): Crop | null;
    /**
     * 设置裁剪信息（图片像素空间），仅在裁剪模式下生效。
     * @param crop - 裁剪信息对象
     */
    setCrop(crop: Crop): void;
    /**
     * 取消指定对象在指定索引处的标记。
     * @param id - 对象 ID
     * @param index - 标记索引
     */
    unmark(id: string, index: number): void;
    /**
     * 向画布添加对象到指定父容器下。
     * @param parentId - 目标父容器 ID，空字符串表示添加到画布根层级
     * @param properties - 对象初始属性，需包含 `type` 字段，其余字段参考对应的对象类型定义（如 CanvasTextboxObject、CanvasImageObject 等）
     * @returns `{ id, loaded }` — `id` 为新创建对象的 ID，`loaded` 为图片资源注册完成的 Promise；失败时返回 null
     */
    add(parentId: string, properties: Record<string, any>): Promise<{
        id: string;
        loaded: Promise<void>;
    } | null>;
    /**
     * 删除对象。不传 id 时删除当前选中的对象。
     * @param id - 对象 ID；默认为空字符串，表示删除当前选中
     */
    remove(id?: string): void;
    /**
     * 选中指定 ID 的对象。
     * @param ids - 要选中的对象 ID 数组
     */
    select(ids: string[]): void;
    /**
     * 获取文本对象的选区范围。
     * @param id - 文本对象 ID
     * @returns 文本选区；无选区时返回 null
     */
    getTextLayerSelection(id: string): {
        start: number;
        end: number;
    } | null;
    /**
     * 合并图层。
     * @param onUpload - 可选的回调函数，接收 base64 图片数据，返回上传后的 URL
     */
    mergeLayer(onUpload?: (base64: string) => Promise<string>): Promise<void>;
}
/**
 * 层级操作。
 * @category 方法
 */
interface CanvasLayerMethods {
    /**
     * 获取对象的父层 ID。
     * @param id - 对象 ID
     * @returns 父层 ID；无父层时返回空字符串
     */
    getParentLayer(id: string): string;
    /**
     * 获取对象在父层中的索引位置。
     * @param id - 对象 ID
     * @returns 索引位置；未找到时返回 -1
     */
    getIndex(id: string): number;
    /**
     * 将对象上移一层。
     * @param id - 对象 ID
     */
    moveUp(id: string): void;
    /**
     * 将对象下移一层。
     * @param id - 对象 ID
     */
    moveDown(id: string): void;
    /**
     * 将对象移动到指定父层的指定索引位置。
     * @param parentId - 目标父层 ID
     * @param index - 目标索引，-1 表示移到末尾
     */
    moveTo(parentId: string, index: number): void;
    /**
     * 将对象置于最顶层。
     * @param id - 对象 ID
     */
    bringToFront(id: string): void;
    /**
     * 将对象置于最底层。
     * @param id - 对象 ID
     */
    sendToBack(id: string): void;
}
/**
 * 组合。
 * @category 方法
 */
interface CanvasGroupMethods {
    /**
     * 判断指定对象是否可以成组。
     * @param ids - 对象 ID 数组
     * @returns true 表示可以成组
     */
    canGroup(ids: string[]): boolean;
    /**
     * 将指定对象成组。
     * @param ids - 要成组的对象 ID 数组
     * @returns 新组的 ID；失败时返回 null
     */
    group(ids: string[]): string | null;
    /**
     * 解散组，将组内对象还原为独立对象。
     * @param id - 组对象 ID
     */
    ungroup(id: string): void;
}
/**
 * 对齐与排列。
 * @category 方法
 */
interface CanvasArrangeMethods {
    /**
     * 对齐当前选中对象。
     * @param alignment - 对齐方式（相对当前选中范围）
     */
    align(alignment: "left" | "right" | "top" | "bottom" | "center" | "middle"): void;
    /**
     * 排列当前选中对象（如均匀分布）。
     * @param arrangement - 排列方式
     */
    arrange(arrangement: "horizontal" | "vertical" | "auto"): void;
}
/**
 * 历史。
 * @category 方法
 */
interface CanvasHistoryMethods {
    /**
     * 将当前画布状态保存到历史记录，供后续撤销使用。
     */
    saveHistory(): void;
    /**
     * 判断当前是否可撤销。
     * @returns true 表示可撤销
     */
    canUndo(): boolean;
    /**
     * 判断当前是否可重做。
     * @returns true 表示可重做
     */
    canRedo(): boolean;
    /**
     * 撤销上一步操作。
     */
    undo(): void;
    /**
     * 重做上一步被撤销的操作。
     */
    redo(): void;
}
/**
 * 剪贴板。
 * @category 方法
 */
interface CanvasClipboardMethods {
    /**
     * 将当前选中对象复制到剪贴板。
     */
    copy(): Promise<void>;
    /**
     * 在指定位置粘贴剪贴板内容。支持序列化数据、文本、图片等多种格式。
     * @param x - 粘贴位置 X（世界坐标）
     * @param y - 粘贴位置 Y（世界坐标）
     * @param clipboardEvent - 可选，浏览器原始 ClipboardEvent，用于读取系统剪贴板
     * @returns 粘贴结果
     */
    paste(x: number, y: number, clipboardEvent?: ClipboardEvent): Promise<PasteResult>;
    /**
     * 剪切当前选中对象（先复制到剪贴板，再删除）。
     */
    cut(): Promise<void>;
}
/**
 * 图片导出选项。
 * @category 数据
 */
interface ExportImageOptions {
    /** MIME 类型，如 'image/png'，默认 'image/png' */
    type?: string;
    /** 导出倍率，默认 2 */
    multiplier?: number;
    /** 质量 0～1，默认 1 */
    quality?: number;
}
/**
 * 数据。
 * @category 方法
 */
interface CanvasDataMethods {
    /**
     * 从 JSON 加载画布内容（会覆盖当前画布）。自动预注册 JSON 中的图片资源。
     * @param json - 画布数据，格式为 \{ width, height, objects \}
     * @returns `{ loaded }` — `loaded` 为图片资源注册完成的 Promise；输入非法时返回 null
     */
    loadFromJSON(json: CanvasData): Promise<{
        loaded: Promise<void>;
    } | null>;
    /**
     * 将 Fabric.js 格式的 JSON 转为画布对象并添加到画布中。
     * @param fabricJSON - Fabric.js 导出的 JSON 数据
     * @param x - 放置位置 X，默认 0
     * @param y - 放置位置 Y，默认 0
     * @returns 新建 frame 的 ID；失败时返回 null
     */
    addFabricJSON(fabricJSON: Record<string, any>, x?: number, y?: number): Promise<string | null>;
    /**
     * 导出当前画布为 JSON 数据。
     * @returns 画布数据；失败时返回 null
     */
    exportToJSON(): CanvasData | null;
    /**
     * 导出图片。选中单图/多图时返回图片 URL 或 URL 数组；否则把（选中或整画布）渲染成 base64。
     *
     * @param type - MIME 类型，如 'image/png'，默认 'image/png'
     * @param multiplier - 导出倍率（如 devicePixelRatio），默认 2
     * @param quality - 质量 0–1，默认 1
     * @returns 选中图片时返回原始 src；否则返回画布导出的 base64。失败返回 null
     */
    exportImage(type?: string, multiplier?: number, quality?: number): Promise<string | string[] | null>;
    /**
     * 批量导出图片。
     * @param ids - 元素 ID 数组，传入 undefined/null/空数组 时导出所有元素为图片
     * @param options - 导出选项，如 MIME 类型、导出倍率、质量等
     * @returns 返回画布导出的 base64。失败返回 ''
     */
    exportImages(ids?: string[] | null, options?: ExportImageOptions): Promise<string>;
    /**
     * 从 JSON 数据直接导出图片，无需将元素添加到画布。
     * @param objects - 元素对象数组
     * @param options - 导出选项
     * @returns 返回 base64 dataURL。失败返回 ''
     */
    exportImageFromJson(objects: Record<string, any>[], options?: ExportImageOptions): Promise<string>;
}
/**
 * 字体。
 * @category 方法
 */
interface CanvasFontMethods {
    /**
     * 注册字体，供画布文本渲染使用。支持 TTF、OTF、WOFF2 格式，自动检测并解码 WOFF2。
     * @param fonts - 字体数组，每项包含 fontName（字体名）和 url（字体文件地址）
     */
    registerFonts(fonts: {
        fontName: string;
        url: string;
    }[]): Promise<void>;
}
/**
 * 工具方法。
 * @category 方法
 */
interface CanvasToolMethods {
    /**
     * 手动刷新 overlay 层（自定义 DOM 插槽），用于容器尺寸/位置变化后强制对齐。
     * @internal
     */
    refreshOverlay?(): void;
}
/**
 * 画布 ref 暴露的所有方法集合，由各分类 interface 组合而成。
 * @internal
 */
type CanvasRef = CanvasViewportMethods & CanvasObjectMethods & CanvasLayerMethods & CanvasGroupMethods & CanvasArrangeMethods & CanvasHistoryMethods & CanvasClipboardMethods & CanvasDataMethods & CanvasFontMethods & CanvasToolMethods;

/**
 * 画布 React 组件，通过 ref 调用画布方法。
 * @internal 不纳入 API 文档，仅作为组件使用
 */
declare const GoatdeeCanvas: react.ForwardRefExoticComponent<CanvasProps & react.RefAttributes<CanvasRef>>;

export { GoatdeeCanvas };
export type { CanvasActionData, CanvasActionType, CanvasArrangeMethods, CanvasCircleObject, CanvasClipboardMethods, CanvasData, CanvasDataMethods, CanvasElementType, CanvasFill, CanvasFontMethods, CanvasFrameObject, CanvasGroupMethods, CanvasGroupObject, CanvasHistoryMethods, CanvasImageObject, CanvasLayerMethods, CanvasLinearGradient, CanvasObjectData, CanvasObjectMethods, CanvasPathObject, CanvasProps, CanvasRectangleObject, CanvasRef, CanvasShadow, CanvasSlideObject, CanvasStroke, CanvasTextboxObject, CanvasToolMethods, CanvasTriangleObject, CanvasViewportMethods, Crop, CropRect, ExportImageOptions, PasteResult };
