UNPKG

@dessixio/svgcanvas

Version:
1,678 lines (1,437 loc) 37.9 kB
declare module "@dessixio/svgcanvas" { /** * 绘制属性接口,定义了 SVG 元素的绘制样式 */ interface Paint { /** * 绘制类型 */ type: "solidColor" | "linearGradient" | "radialGradient" | "pattern" | string; /** * 绘制值 */ value: string; /** * 不透明度 */ opacity?: number; /** * 渐变停止点 */ gradientStops?: Array<{ /** * 偏移量 */ offset: number; /** * 颜色 */ color: string; /** * 不透明度 */ opacity: number; }>; /** * 变换矩阵 */ matrix?: SVGMatrix; } /** * 事件处理器类型 */ type EventHandler = (window: Window, arg?: any) => any; /** * 样式选项接口,定义了元素的样式属性 */ interface StyleOptions { /** * 填充颜色 */ fill: string; /** * 填充绘制属性 */ fill_paint: Paint | null; /** * 填充不透明度 */ fill_opacity: string | number; /** * 描边颜色 */ stroke: string; /** * 描边绘制属性 */ stroke_paint: Paint | null; /** * 描边不透明度 */ stroke_opacity: string | number; /** * 描边宽度 */ stroke_width: string | number; /** * 描边虚线模式 */ stroke_dasharray: string; /** * 描边连接方式 */ stroke_linejoin: "miter" | "round" | "bevel" | string; /** * 描边端点样式 */ stroke_linecap: "butt" | "round" | "square" | string; /** * 整体不透明度 */ opacity: string | number; /** * 字体大小 */ font_size?: string | number; /** * 字体族 */ font_family?: string; /** * 文本锚点 */ text_anchor?: "start" | "middle" | "end" | string; } /** * 绘图操作接口,提供图层相关的操作方法 */ interface DrawingOptions { /** * 获取当前图层 * @returns {SVGGElement} 当前图层元素 */ getCurrentLayer: () => SVGGElement; /** * 获取当前图层名称 * @returns {string} 图层名称 */ getCurrentLayerName: () => string; /** * 设置当前图层 * @param {string} name - 图层名称 */ setCurrentLayer: (name: string) => void; /** * 获取当前绘图对象 * @returns {any} 绘图对象 */ getCurrentDrawing: () => any; /** * 获取图层数量 * @returns {number} 图层数量 */ getNumLayers: () => number; /** * 获取指定名称的图层 * @param {string} name - 图层名称 * @returns {SVGGElement} 图层元素 */ getLayer: (name: string) => SVGGElement; /** * 获取指定索引的图层名称 * @param {number} index - 图层索引 * @returns {string} 图层名称 */ getLayerName: (index: number) => string; /** * 获取当前图层位置 * @returns {number} 图层位置索引 */ getCurrentLayerPosition: () => number; /** * 设置当前图层位置 * @param {number} pos - 新的位置索引 */ setCurrentLayerPosition: (pos: number) => void; /** * 获取图层可见性 * @param {string} name - 图层名称 * @returns {boolean} 是否可见 */ getLayerVisibility: (name: string) => boolean; /** * 设置图层可见性 * @param {string} name - 图层名称 * @param {boolean} visibility - 是否可见 */ setLayerVisibility: (name: string, visibility: boolean) => void; /** * 将选中的元素移动到指定图层 * @param {string} name - 目标图层名称 */ moveSelectedToLayer: (name: string) => void; /** * 合并指定图层 * @param {string} name - 要合并的图层名称 */ mergeLayer: (name: string) => void; /** * 合并所有图层 * @returns {SVGGElement} 合并后的图层元素 */ mergeAllLayers: () => SVGGElement; /** * 离开当前上下文 */ leaveContext: () => void; /** * 设置上下文 * @param {SVGGElement} elem - 上下文元素 */ setContext: (elem: SVGGElement) => void; /** * 获取 ID * @returns {string} ID */ getId: () => string; /** * 获取 nonce * @returns {string} nonce 值 */ getNonce: () => string; } /** * SVG 画布配置接口 */ export interface SvgCanvasConfig { /** * 是否显示画布外的内容 */ show_outside_canvas?: boolean; /** * 是否自动选中新创建的元素 */ selectNew?: boolean; /** * 画布尺寸 [宽度, 高度] */ dimensions?: [number | string, number | string]; /** * 图片路径 */ imgPath?: string; /** * 基本单位 */ baseUnit?: string; /** * 对齐步长 */ snappingStep?: number; /** */ showRulers?: boolean; /** * 是否启用网格对齐 */ gridSnapping?: boolean; /** * 初始填充设置 */ initFill?: { /** * 颜色 */ color: string; /** * 不透明度 */ opacity: number; }; /** * 初始描边设置 */ initStroke?: { /** * 颜色 */ color: string; /** * 不透明度 */ opacity: number; /** * 宽度 */ width: number; }; /** * 初始不透明度 */ initOpacity?: number; /** * 文本设置 */ text?: { /** * 描边宽度 */ stroke_width?: number; /** * 字体大小 */ font_size?: number; /** * 字体族 */ font_family?: string; }; } /** * 历史事件类型枚举 */ enum HistoryEventTypes { /** * 应用命令前 */ BEFORE_APPLY = "before_apply", /** * 应用命令后 */ AFTER_APPLY = "after_apply", /** * 取消应用命令前 */ BEFORE_UNAPPLY = "before_unapply", /** * 取消应用命令后 */ AFTER_UNAPPLY = "after_unapply", } /** * 历史命令接口 */ interface HistoryCommand { /** * 应用命令 */ apply(): void; /** * 取消应用命令 */ unapply(): void; /** * 获取命令元素 * @returns {Element[]} 命令相关的元素数组 */ elements(): Element[]; /** * 获取命令类型 * @returns {string} 命令类型 */ type(): string; /** * 获取命令文本 * @returns {string} 命令描述文本 */ text(): string; /** * 相关元素 */ elem?: Element; /** * 旧值 */ oldValues?: any; /** * 新值 */ newValues?: any; /** * 旧父元素 */ oldParent?: Element; /** * 新父元素 */ newParent?: Element; /** * 父元素 */ parent?: Element; } /** * 批处理命令接口,用于管理一组相关的命令操作 */ interface BatchCommand { /** * 批处理命令的类型 */ type: string; /** * 添加子命令 * @param {HistoryCommand} cmd - 要添加的命令 */ addSubCommand(cmd: HistoryCommand): void; /** * 检查批处理命令是否为空 * @returns {boolean} 如果没有子命令则返回 true */ isEmpty(): boolean; /** * 应用所有子命令 */ apply(): void; /** * 取消应用所有子命令 */ unapply(): void; /** * 获取所有相关元素 * @returns {Element[]} 命令相关的元素数组 */ elements(): Element[]; /** * 获取命令描述文本 * @returns {string} 命令描述 */ getText(): string; } /** * SVG 画布主类,管理所有 SVG 相关功能 * 提供了完整的 SVG 编辑器功能,包括: * - SVG 元素的创建、编辑和删除 * - 路径绘制和编辑 * - 图层管理 * - 变换操作(旋转、缩放、平移等) * - 样式设置 * - 撤销/重做 * - 剪切板操作 * - 扩展机制 * @memberof module:svgcanvas */ class SvgCanvas { /** * 创建一个新的 SVG 画布实例 * @param {HTMLElement} container - 用于容纳 SVG 根元素的 HTML 容器元素 * @param {SvgCanvasConfig} config - 画布配置选项 */ constructor(container: HTMLElement, config?: SvgCanvasConfig); container: HTMLElement; // 事件管理 bind(eventName: string, callback: EventHandler): EventHandler | undefined; call(eventName: string, arg?: any): any; // SVG内容管理 getSvgString(): string; setSvgString(svgString: string, preventUndo?: boolean): boolean; svgCanvasToString(): string; // 配置管理 getSvgOption(): Record<string, any>; setSvgOption(key: string, value: any): void; setConfig(options: Record<string, any>): void; getCurConfig(): Record<string, any>; setUiStrings(strings: Record<string, any>): void; getUIStrings(): Record<string, any>; // 元素选择管理 getSelectedElements(): Element[]; setSelectedElements(key: number, value: Element): void; setEmptySelectedElements(): void; /** * 清除当前选中的所有元素 * @param {boolean} [noCall] - 是否不触发 changed 事件 */ clearSelection(noCall?: boolean): void; /** * 将元素添加到当前选中集合中 * @param {Element[]} elements - 要添加到选中集合的元素数组 * @param {boolean} [showGrips] - 是否显示控制点 */ addToSelection(elements: Element[], showGrips?: boolean): void; /** * 只选中指定的元素,取消其他所有选中状态 * @param {Element[]} elements - 要选中的元素数组 * @param {boolean} [showGrips] - 是否显示控制点 */ selectOnly(elements: Element[], showGrips?: boolean): void; /** * 从当前选中集合中移除指定元素 * @param {Element[]} elements - 要移除的元素数组 */ removeFromSelection(elements: Element[]): void; /** * 选中当前图层中的所有元素 */ selectAllInCurrentLayer(): void; // 元素创建和操作 createSVGElement(jsonMap: Record<string, any>): SVGElement; /** * 从 SVG 元素获取 JSON 表示 * @param {Element[]} elements - 要转换的 SVG 元素数组 * @returns {Record<string, any>[]} 包含元素属性的 JSON 对象数组 */ getJsonFromSvgElements(elements: Element[]): Record<string, any>[]; /** * 从 JSON 数据创建 SVG 元素 * @param {Record<string, any>} json - 包含元素属性的 JSON 对象 * @returns {SVGElement} 创建的 SVG 元素 */ addSVGElementsFromJson(json: Record<string, any>): SVGElement; // 元素转换和修改 /** * 将选中的元素转换为路径 * @param {Element} elem - 要转换的 DOM 元素 * @param {boolean} [getBBox] - 是否只返回路径的边界框 * @returns {SVGPathElement | DOMRect | null} 转换后的路径元素或边界框 */ convertToPath(elem: Element, getBBox?: boolean): SVGPathElement | DOMRect | null; /** * 更改选中元素的属性 * @param {string} attr - 属性名 * @param {string | number} val - 属性值 * @param {Element[]} [elems] - 要更改的元素数组 * @returns {boolean} 是否更改成功 */ changeSelectedAttribute(attr: string, val: string | number, elems?: Element[]): boolean; /** * 更改选中元素的属性(无撤销) * @param {string} attr - 属性名 * @param {string | number} val - 属性值 * @param {Element[]} [elems] - 要更改的元素数组 * @returns {boolean} 是否更改成功 */ changeSelectedAttributeNoUndo(attr: string, val: string | number, elems?: Element[]): boolean; // 编辑操作 /** * 剪切选中的元素 */ cutSelectedElements(): void; /** * 将选中的元素复制到剪贴板 * @fires module:selected-elem.SvgCanvas#event:changed */ copySelectedElements(): void; /** * 粘贴元素 * @param {string} [type] - 粘贴类型 * @param {number} [x] - x 坐标 * @param {number} [y] - y 坐标 */ pasteElements(type?: string, x?: number, y?: number): void; /** * 将所有选中的元素包装到一个组(`g`)元素中 * @param {"a"|"g"} [type="g"] - 要组合成的元素类型,默认为 `<g>` * @param {string} [urlArg] - 如果类型是 "a",则为链接 URL * @returns {void} */ groupSelectedElements(type?: "a" | "g", urlArg?: string): void; /** * 将所有适当的父组属性下推到其子元素,然后从组中删除它们 * @param {SVGAElement|SVGGElement} g - 组元素 * @param {boolean} undoable - 是否可撤销 * @returns {BatchCommand|void} 批处理命令对象 */ pushGroupProperties(g: SVGAElement | SVGGElement, undoable: boolean): BatchCommand | void; /** * 解除选中组(`g`)元素中所有元素的组合 * @fires module:selected-elem.SvgCanvas#event:changed * @returns {void} */ ungroupSelectedElement(): void; /** * 将选中的元素重新定位到 DOM 中的底部以显示在顶部 * @fires module:selected-elem.SvgCanvas#event:changed * @returns {void} */ moveToTopSelectedElement(): void; /** * 将选中的元素重新定位到 DOM 中的顶部以显示在其他元素下方 * @fires module:selected-elem.SvgCanvas#event:changed * @returns {void} */ moveToBottomSelectedElement(): void; /** * 根据可见的相交元素,将选中的元素在堆栈中上移或下移 * @param {"Up"|"Down"} dir - 表示 'Up' 或 'Down' 的字符串 * @fires module:selected-elem.SvgCanvas#event:changed * @returns {void} */ moveUpDownSelected(dir: "Up" | "Down"): void; /** * 在 X/Y 轴上移动选中的元素 * @param {number} dx - X 轴移动距离 * @param {number} dy - Y 轴移动距离 * @param {boolean} [undoable=true] - 是否可撤销 * @fires module:selected-elem.SvgCanvas#event:changed * @returns {BatchCommand|void} 移动的批处理命令 */ moveSelectedElements(dx: number, dy: number, undoable?: boolean): BatchCommand | void; /** * 创建所有选中元素的深层 DOM 副本(克隆)并稍微移动它们 * @param {number} x - X 轴移动距离 * @param {number} y - Y 轴移动距离 * @returns {void} */ cloneSelectedElements(x: number, y: number): void; /** * 对齐选中的元素 * @param {string} type - 表示对齐类型的单个字符 * @param {"selected"|"largest"|"smallest"|"page"} relativeTo - 相对对齐的参考 * @returns {void} */ alignSelectedElements( type: string, relativeTo: "selected" | "largest" | "smallest" | "page" ): void; /** * 在缩放后更新编辑器画布的宽度/高度/位置 * @param {number} w - 新宽度 * @param {number} h - 新高度 * @fires module:svgcanvas.SvgCanvas#event:ext_canvasUpdated * @returns {CanvasInfo} 画布信息对象 */ updateCanvas( w: number, h: number ): { x: number; y: number; old_x: number; old_y: number; d_x: number; d_y: number; }; /** * 在当前图层中选择下一个/上一个元素 * @param {boolean} next - true = 下一个元素, false = 上一个元素 * @fires module:svgcanvas.SvgCanvas#event:selected * @returns {void} */ cycleElement(next: boolean): void; /** * 从 DOM 中删除所有选中的元素并将更改添加到历史记录中 * @fires module:selected-elem.SvgCanvas#event:changed * @returns {void} */ deleteSelectedElements(): void; // 撤销/重做 /** * 添加命令到历史记录 * @param {HistoryCommand} cmd - 命令对象 */ addCommandToHistory(cmd: HistoryCommand): void; // 视图和缩放 /** * 获取当前缩放比例 * @returns {number} 当前缩放比例 */ getZoom(): number; /** * 设置缩放比例 * @param {number} value - 新的缩放比例 */ setZoom(value: number): void; setColor(type: string, color: string, noUndo: boolean): void; /** * 获取当前编辑模式 * @returns {string} 当前模式名称 */ getMode(): string; /** * 设置编辑模式 * @param {string} name - 模式名称 */ setMode(name: string): void; round(val: number): number; // 获取画布和元素信息 /** * 获取画布分辨率 * @returns {{ w: number; h: number }} 画布的宽度和高度 */ getResolution(): { w: number; h: number }; /** * 设置画布分辨率 * @param {number} width - 宽度 * @param {number} height - 高度 */ setResolution(width: number, height: number): void; /** * 获取画布宽度 * @returns {number} 画布宽度 */ getWidth(): number; /** * 获取画布高度 * @returns {number} 画布高度 */ getHeight(): number; /** * 获取当前 SVG 内容的字符串表示 * @returns {string} SVG 字符串 */ getSvgString(): string; /** * 获取 SVG 根元素 * @returns {SVGSVGElement} SVG 根元素 */ getSvgRoot(): SVGSVGElement; /** * 获取 SVG 内容元素 * @returns {SVGSVGElement} SVG 内容元素 */ getSvgContent(): SVGSVGElement; getDOMDocument(): Document; getDOMContainer(): HTMLElement; getContainer(): HTMLElement; // ID和前缀管理 getIdPrefix(): string; /** * 设置 ID 前缀 * @param {string} p - 新的 ID 前缀 */ setIdPrefix(p: string): void; /** * 获取下一个可用的 ID * @returns {string} 新的唯一 ID */ getNextId(): string; getId(): string; /** * 随机化 ID * @param {boolean} [enableRandomization] - 是否启用随机化 */ randomizeIds(enableRandomization?: boolean): void; // 图层操作 /** * 获取当前绘图对象 * @returns {DrawingOptions} 当前绘图对象 */ getCurrentDrawing(): DrawingOptions; /** * 创建新图层 * @param {string} [name] - 图层名称 * @returns {SVGGElement} 创建的图层元素 */ createLayer(name?: string): SVGGElement; identifyLayers(): void; cloneLayer(name?: string): SVGGElement | null; /** * 删除当前图层 * @returns {boolean} 是否删除成功 */ deleteCurrentLayer(): boolean; /** * 设置当前图层 * @param {string} name - 图层名称 */ setCurrentLayer(name: string): void; /** * 重命名当前图层 * @param {string} newName - 新的图层名称 */ renameCurrentLayer(newName: string): void; /** * 设置当前图层的位置 * @param {number} pos - 新的位置索引 */ setCurrentLayerPosition(pos: number): void; indexCurrentLayer(): number; /** * 设置图层的可见性 * @param {string} name - 图层名称 * @param {boolean} visibility - 是否可见 */ setLayerVisibility(name: string, visibility: boolean): void; /** * 将选中的元素移动到指定图层 * @param {string} name - 目标图层名称 */ moveSelectedToLayer(name: string): void; /** * 合并指定图层 * @param {string} name - 要合并的图层名称 */ mergeLayer(name: string): void; /** * 合并所有图层 * @returns {SVGGElement} 合并后的图层元素 */ mergeAllLayers(): SVGGElement; // 组操作 setContext(elem: SVGGElement): void; leaveContext(): void; /** * 获取当前组 * @returns {SVGGElement | null} 当前组元素 */ getCurrentGroup(): SVGGElement | null; /** * 设置当前组 * @param {SVGGElement | null} cg - 组元素 */ setCurrentGroup(cg: SVGGElement | null): void; // 样式和属性 getOpacity(): string | number; setOpacity(val: string | number): void; /** * 获取元素的模糊值 * @param {Element} elem - 要检查的元素 * @returns {string} 模糊值(stdDeviation) */ getBlur(elem: Element): string; /** * 设置元素的模糊效果 * @param {number} val - 模糊值 * @param {boolean} [complete] - 是否完成操作 */ setBlur(val: number, complete?: boolean): void; /** * 获取指定类型的颜色值 * @param {"fill" | "stroke"} type - 颜色类型 * @returns {string} 颜色值 */ getColor(type: "fill" | "stroke"): string; /** * 设置描边的绘制属性 * @param {Paint} paint - 绘制属性 */ setStrokePaint(paint: Paint): void; /** * 设置填充的绘制属性 * @param {Paint} paint - 绘制属性 */ setFillPaint(paint: Paint): void; /** * 获取描边宽度 * @returns {number | string} 描边宽度 */ getStrokeWidth(): number | string; /** * 获取当前样式 * @returns {StyleOptions} 样式选项 */ getStyle(): StyleOptions; /** * 获取填充不透明度 * @returns {number} 填充不透明度值 */ getFillOpacity(): number; /** * 获取描边不透明度 * @returns {number} 描边不透明度值 */ getStrokeOpacity(): number; /** * 设置绘制不透明度 * @param {"fill" | "stroke"} type - 类型 * @param {number} val - 不透明度值 * @param {boolean} [preventUndo] - 是否阻止撤销 */ setPaintOpacity(type: "fill" | "stroke", val: number, preventUndo?: boolean): void; /** * 获取绘制不透明度 * @param {"fill" | "stroke"} type - 类型 * @returns {number} 不透明度值 */ getPaintOpacity(type: "fill" | "stroke"): number; /** * 获取当前文档标题 * @returns {string} 文档标题或空字符串 */ getDocumentTitle(): string; /** * 设置文档标题 * @param {string} title - 新的文档标题 */ setDocumentTitle(title: string): void; /** * 获取偏移量 * @returns {{ x: number; y: number }} 偏移量 */ getOffset(): { x: number; y: number }; /** * 获取版本信息 * @returns {string} 版本号 */ getVersion(): string; /** * 获取网格对齐设置 * @returns {boolean} 是否启用网格对齐 */ getSnapToGrid(): boolean; /** * 获取开始变换时的变换值 * @returns {string | null} 变换值 */ getStartTransform(): string | null; /** * 设置开始变换时的变换值 * @param {string | null} transform - 变换值 */ setStartTransform(transform: string | null): void; // 清除和重置 clear(): void; clearSvgContentElement(): void; // 扩展支持 /** * 添加扩展 * @param {string} name - 扩展名称 * @param {Function} extInitFunc - 扩展初始化函数 * @param {{ importLocale: Function }} initArgs - 初始化参数 * @returns {Promise<any>} 扩展初始化结果 */ addExtension( name: string, extInitFunc: Function, initArgs: { importLocale: Function } ): Promise<any>; /** * 获取所有扩展 * @returns {Record<string, any>} 扩展映射 */ getExtensions(): Record<string, any>; // 其他属性和方法 getRubberBox(): SVGRectElement | null; setRubberBox(rb: SVGRectElement | null): SVGRectElement | null; /** * 设置好的图像 URL * @param {string} val - 图像 URL */ setGoodImage(val: string): void; getLastGoodImgUrl(): string; flashStorage(): void; /** * 清理 SVG 内容 * @param {Element} node - 要清理的节点 */ sanitizeSvg(node: Element): void; // Path 操作 smoothControlPoints(): void; /** * 获取当前绘制的路径 * @returns {SVGPathElement | null} 路径元素 */ getDrawnPath(): SVGPathElement | null; /** * 设置当前绘制的路径 * @param {SVGPathElement | null} dp - 路径元素 * @returns {SVGPathElement | null} 设置的路径元素 */ setDrawnPath(dp: SVGPathElement | null): SVGPathElement | null; // 其他状态和标志 getStarted(): boolean; setStarted(s: boolean): void; /** * 获取当前输入模式 * @returns {string} 当前模式名称 */ getCurrentMode(): string; /** * 设置当前输入模式 * @param {string} cm - 模式名称 * @returns {string} 设置的模式名称 */ setCurrentMode(cm: string): string; getCurrentResizeMode(): string; setCurrentResizeMode(value: string): void; getCurCommand(): any; setCurCommand(value: any): void; getFilter(): SVGFilterElement | null; setFilter(value: SVGFilterElement | null): void; getFilterHidden(): boolean; setFilterHidden(value: boolean): void; getContentW(): number; getContentH(): number; // 公开的属性 /** * 文本操作工具,提供文本编辑相关功能 */ textActions: TextActions; /** * 撤销管理器,处理撤销/重做操作 */ undoMgr: UndoManager; /** * 当前画布配置选项 */ curConfig: SvgCanvasConfig; /** * 历史记录对象 */ history: any; /** * XML 命名空间映射 */ NS: Record<string, string>; /** * 选择器管理器,处理元素选择 */ selectorManager: SelectorManager; /** * 画布内容宽度 */ contentW: string | number; /** * 画布内容高度 */ contentH: string | number; /** * 当前编辑模式 */ currentMode: string; /** * 当前选中的组 */ currentGroup: SVGGElement | null; /** * 当前调整大小模式 */ currentResizeMode: string; /** * 当前命令 */ curCommand: any; /** * 当前应用的滤镜 */ filter: SVGFilterElement | null; /** * 滤镜是否隐藏 */ filterHidden: boolean; /** * 当前缩放比例 */ zoom: number; /** * 编辑器是否已启动 */ started: boolean; /** * 开始变换时的变换值 */ startTransform: string | null; /** * 选择框元素 */ rubberBox: SVGRectElement | null; /** * 最后一个有效的图片 URL */ lastGoodImgUrl: string; /** * SVG 内容元素 */ svgContent: SVGSVGElement; /** * SVG 根元素 */ svgroot: SVGSVGElement; /** * 当前选中的元素数组 */ selectedElements: Element[]; /** * 事件处理器映射 */ events: { changed: Function }; /** * 已加载的扩展 */ extensions: Record<string, any>; /** * 当前绘制的路径 */ drawnPath: SVGPathElement | null; /** * 导入元素的 ID 映射 */ importIds: Record<string, any>; /** * 已删除元素的映射 */ removedElements: Record<string, any>; /** * 元素 ID 前缀 */ idprefix: string; // 新增的实例方法 getBaseUnit(): string; // 获取基本单位 getSnappingStep(): number; // 获取对齐步长 getGridSnapping(): boolean; // 获取网格对齐状态 getClipboardID(): string; // 获取剪贴板ID getDataStorage(): any; // 获取数据存储 getDrawing(): any; // 获取绘图对象 getVisElems(): Element[]; // 获取可见元素 getrefAttrs(): string[]; // 获取引用属性 getStepCount(): number; // 获取步数 getThreSholdDist(): number; // 获取阈值距离 initializeSvgCanvasMethods(): void; // 初始化SVG画布方法 modeChangeEvent(): void; // 模式改变事件 endChanges(options: { cmd: any; elem: Element }): void; // 结束更改 changeSvgContent(): void; // 更改SVG内容 getCanvas(): any; // 获取画布 setCanvas(key: string, value: any): void; // 设置画布 getParameter(): any; // 获取参数 setParameter(value: any): void; // 设置参数 getNextParameter(): any; // 获取下一个参数 setNextParameter(value: any): void; // 设置下一个参数 getRemovedElements(): Record<string, any>; // 获取已移除元素 setRemovedElements(key: string, value: any): void; // 设置已移除元素 getSelector(): any; // 获取选择器 gettingSelectorManager(): SelectorManager; // 获取选择器管理器 /** * 检查选中的文本元素是否为粗体 * @returns {boolean} 如果所有选中的元素都是粗体则返回 true,否则返回 false */ getBold(): boolean; /** * 将选中的元素设置为粗体或正常字重 * @param {boolean} b - 指示粗体(true)或正常(false) */ setBold(b: boolean): void; /** * 检查选中的文本元素是否为斜体 * @returns {boolean} 如果所有选中的元素都是斜体则返回 true,否则返回 false */ getItalic(): boolean; /** * 将选中的元素设置为斜体或正常样式 * @param {boolean} i - 指示斜体(true)或正常(false) */ setItalic(i: boolean): void; /** * 检查选中的文本元素是否具有指定的文本装饰 * @param {string} value - 要检查的文本装饰值 * @returns {boolean} 如果所有选中的元素都具有该文本装饰则返回 true */ hasTextDecoration(value: string): boolean; /** * 为选中的文本元素添加文本装饰 * @param {string} value - 要添加的文本装饰值 */ addTextDecoration(value: string): void; /** * 移除选中文本元素的文本装饰 * @param {string} value - 要移除的文本装饰值 */ removeTextDecoration(value: string): void; /** * 设置文本锚点 * @param {string} value - 文本锚点值(start、middle 或 end) */ setTextAnchor(value: string): void; /** * 设置字母间距 * @param {string} value - 字母间距值 */ setLetterSpacing(value: string): void; /** * 设置单词间距 * @param {string} value - 单词间距值 */ setWordSpacing(value: string): void; /** * 设置文本长度 * @param {string} value - 文本长度值 */ setTextLength(value: string): void; /** * 设置长度调整方式 * @param {string} value - 长度调整值 */ setLengthAdjust(value: string): void; /** * 获取当前字体族 * @returns {string} 当前字体族 */ getFontFamily(): string; /** * 设置新的字体族 * @param {string} val - 新的字体族字符串 */ setFontFamily(val: string): void; /** * 设置新的字体颜色 * @param {string} val - 新的字体颜色字符串 */ setFontColor(val: string): void; /** * 获取当前字体颜色 * @returns {string} 当前字体颜色 */ getFontColor(): string; /** * 获取当前字体大小 * @returns {number} 当前字体大小 */ getFontSize(): number; /** * 为选中的元素应用给定的字体大小 * @param {number} val - 新的字体大小 */ setFontSize(val: number): void; /** * 获取选中元素的当前文本内容 * @returns {string} 选中元素的文本内容 */ getText(): string; /** * 使用给定的字符串更新文本元素 * @param {string} val - 新的文本字符串 */ setTextContent(val: string): void; /** * 为选中的图像元素设置新的图像 URL * @param {string} val - 图像 URL/路径字符串 */ setImageURL(val: string): void; /** * 为选中的锚点元素设置新的链接 URL * @param {string} val - 链接 URL/路径字符串 */ setLinkURL(val: string): void; /** * 设置选中矩形元素的 rx 和 ry 值以改变其圆角半径 * @param {string|number} val - 新的半径值 */ setRectRadius(val: string | number): void; /** * 将选中的元素包装在锚点元素中或将组转换为锚点元素 * @param {string} url - 链接 URL */ makeHyperlink(url: string): void; /** * 移除超链接 */ removeHyperlink(): void; /** * 设置选中线段的新线段类型 * @param {number} newType - 新的线段类型 */ setSegType(newType: number): void; } /** * 文本操作接口,提供文本编辑相关的功能 */ interface TextActions { /** * 选择文本 * @param {Element} target - 目标文本元素 */ select(target: Element): void; /** * 开始编辑文本 * @param {Element} elem - 要编辑的文本元素 */ start(elem: Element): void; /** * 结束文本编辑 */ finish(): void; /** * 切换到选择模式 * @param {Element} elem - 目标元素 */ toSelectMode(elem: Element): void; toEditMode(x: number, y: number): void; setInputElem(elem: Element): void; /** * 清除文本选择 */ clear(): void; /** * 鼠标按下事件处理函数 */ mouseDown: Function; /** * 鼠标移动事件处理函数 */ mouseMove: Function; /** * 鼠标抬起事件处理函数 */ mouseUp: Function; } /** * 路径操作接口,提供路径编辑相关的功能 */ interface PathActions { /** * 鼠标按下事件处理函数 */ mouseDown: Function; /** * 鼠标移动事件处理函数 */ mouseMove: Function; /** * 鼠标抬起事件处理函数 */ mouseUp: Function; /** * 切换到编辑模式 */ toEditMode: Function; /** * 切换到选择模式 */ toSelectMode: Function; /** * 添加子路径 */ addSubPath: Function; /** * 清除路径 */ clear: Function; /** * 重置路径数据 */ resetD: Function; /** * 插入线段 */ insertSeg: Function; /** * 添加线段 */ addSeg: Function; /** * 添加点 */ addPoints: Function; /** * 清除数据 */ clearData: Function; /** * 是否可以删除节点 */ canDeleteNodes: boolean; /** * 是否链接控制点 */ linkControlPoints: boolean; /** * 移动节点 * @param {string} attr - 属性名 * @param {string | number} newValue - 新值 */ moveNode: (attr: string, newValue: string | number) => void; /** * 平滑控制点 */ smoothControlPoints: () => void; /** * 删除选中的节点 */ deleteSelectedNodes: () => void; /** * 选择节点 * @param {SVGPathSegment} target - 目标路径段 */ selectNode: (target: any) => void; } /** * 选择器管理器接口,管理元素的选择状态 */ interface SelectorManager { /** * 选择器父组元素 */ selectorParentGroup: SVGGElement; /** * 橡皮筋选框元素 */ rubberBandBox: SVGRectElement; /** * 选择器数组 */ selectors: any[]; /** * 选择器映射 */ selectorMap: Record<string, any>; /** * 选择器手柄 */ selectorGrips: Record<string, any>; /** * 请求选择器 * @param {Element} elem - 目标元素 * @returns {Selector} 选择器实例 */ requestSelector(elem: Element): Selector; /** * 释放选择器 * @param {Element} elem - 目标元素 */ releaseSelector(elem: Element): void; /** * 获取橡皮筋选框 * @returns {SVGRectElement} 选框元素 */ getRubberBandBox(): SVGRectElement; /** * 初始化组 */ initGroup(): void; } /** * 选择器接口,处理单个元素的选择状态 */ interface Selector { /** * 显示/隐藏控制点 * @param {boolean} show - 是否显示 */ showGrips(show: boolean): void; /** * 调整选择器大小 */ resize(): void; } /** * 撤销管理器接口,处理撤销/重做操作 */ interface UndoManager { /** * 处理器映射 */ handler_: Record<string, any>; /** * 撤销栈指针 */ undoStackPointer: number; /** * 撤销栈 */ undoStack: any[]; /** * 撤销更改栈指针 */ undoChangeStackPointer: number; /** * 可撤销更改栈 */ undoableChangeStack: any[]; /** * 添加命令到历史记录 * @param {any} cmd - 命令对象 */ addCommandToHistory(cmd: any): void; /** * 执行撤销操作 */ undo(): void; /** * 执行重做操作 */ redo(): void; /** * 重置撤销栈 */ resetUndoStack(): void; } export default SvgCanvas; }