import 'd3-transition'; import type { Selection } from 'd3-selection'; import type { ZoomBehavior } from 'd3-zoom'; import type { Graph, Node } from '../entities'; import { LayoutConfig } from '../types'; export interface ViewportOptions { /** * 缩放最小比例 */ minZoom?: number; /** * 缩放最大比例 */ maxZoom?: number; /** * 默认缩放比例 */ defaultZoom?: number; /** * 默认画布偏移量 */ defaultPosition?: [number, number]; /** * 最大画布偏移量 */ translateExtent?: [[number, number], [number, number]]; /** * 启用自适应 */ fitView?: boolean; /** * 自适应画布间距 */ fitViewPadding?: [number, number]; /** * 中心对齐 */ fitCenter?: boolean; /** * 禁止滚动 */ preventScrolling?: boolean; /** * 禁用缩放 */ disableZoom?: boolean; } export interface ActionOptions { animate?: boolean; } export declare class Viewport { get actionOptions(): Required; name: string; graph: Graph; /** * 上个布局类型 */ prevLayoutType?: LayoutConfig['type']; /** * 用户是否拖放过画布 */ userModified: boolean; /** * 插件配置 */ options: Omit, 'defaultPosition'> & { defaultPosition?: [number, number]; }; /** * d3 zoom 实例 */ d3Zoom?: ZoomBehavior; /** * d3 zoom selection */ d3ZoomSelection?: Selection; constructor(graph: Graph, options: ViewportOptions); /** * 获取当前视口的缩放比例 */ getZoom: () => number; /** * 缩放到指定比例,并以指定位置为中心 * * @param zoom * @param center * @param actionOptions */ zoomTo: (zoom: number, center: { x: number; y: number; }, actionOptions?: Required) => void; zoom: (nextZoom: number) => void; /** * 放大 * * @param animate 是否启用动画 */ zoomIn: ({ animate }?: Required) => void; /** * 缩小 * * @param animate 是否动画 */ zoomOut: ({ animate }?: Required) => void; /** * 平移画布 * * @param dx * @param dy * @param actionOptions */ translate: (dx: number, dy: number, actionOptions?: Required) => void; /** * 设置画布偏移 * * @param translateX * @param translateY * @param zoom * @param animate */ setTransform: (translateX: number, translateY: number, zoom?: number, { animate }?: ActionOptions) => void; /** * 根据配置居中或者自适应 * * @param actionOptions */ fitViewport(actionOptions?: ActionOptions): void; /** * 自适应 */ fitView: (actionOptions?: ActionOptions) => void; /** * 居中 */ fitCenter: (actionOptions?: ActionOptions) => void; /** * 聚焦节点 * * @param nodeId * @param actionOptions */ focusNode(nodeId?: Node['id'], actionOptions?: Required): void; /** * 使用数据推断画布偏移量,碰到使用圆形时判断会不准确 */ calcCenterTransform: () => [number, number]; /** * 获取自适应的画布偏移量 */ calcFitViewTransform: () => [number, number, number]; /** * 切换全屏 */ toggleFullScreen: () => void; /** * d3-selection * * @param animate */ private getD3Selection; /** * 计算默认偏移量 */ private calcDefaultTransform; /** * 初始化缩放 */ private initZoom; } //# sourceMappingURL=viewport.d.ts.map