UNPKG

@argdown/map-views

Version:

Browser-based map views for Argdown data using dagre-d3 and viz.js

185 lines (166 loc) 6.03 kB
import { DefaultSettings } from '@argdown/core'; import { Graphviz } from '@hpcc-js/wasm-graphviz'; import { IMap } from '@argdown/core'; import { IVizSettings } from '@argdown/core'; import { Selection as Selection_2 } from 'd3-selection'; import { ZoomBehavior } from 'd3-zoom'; export declare interface CanSelectNode { selectNode(id: string): void; deselectNode(): void; } export declare const convertCoordsL2L: (svg: SVGSVGElement, fromElem: SVGGraphicsElement, toElem: SVGGraphicsElement) => DOMPoint; export declare const dagreDefaultSettings: DefaultSettings<IDagreSettings>; export declare class DagreMap implements CanSelectNode { svgElement: SVGSVGElement; zoomManager: ZoomManager; selectedElement?: SVGGraphicsElement | null; onSelectionChanged?: OnSelectionChangedHandler; constructor(svgElement: SVGSVGElement, onZoomChanged?: OnZoomChangedHandler, onSelectionChanged?: OnSelectionChangedHandler); render(props: IDagreMapProps): void; deselectNode(): void; private _deselectNode; selectNode(id: string): void; } export declare interface IDagreLabelSettings { bold?: boolean; font?: string; fontSize?: number; charactersInLine?: number; } export declare interface IDagreMapProps { settings?: IDagreSettings; map: IMap; selectedNode?: string | null; position?: { x?: number; y?: number; }; scale?: number; } export declare interface IDagreNodeSettings { lineWidth?: number; rx?: number; ry?: number; title?: IDagreLabelSettings; text?: IDagreLabelSettings; } export declare interface IDagreSettings { rankDir?: string; rankSep?: number; nodeSep?: number; measureLineWidth?: boolean; argument?: IDagreNodeSettings; statement?: IDagreNodeSettings; group?: { lineWidth?: number; title?: IDagreLabelSettings; }; } declare interface IMapState { size: { width: number; height: number; }; position: { x: number; y: number; }; scale: number; selectedNode?: string | null; } export declare interface IVizJsSettingsExtended extends IVizSettings { images?: Array<{ path: string; width: number; height: number; }>; } export declare type OnSelectionChangedHandler = (id: string | null) => void; export declare type OnZoomChangedHandler = (data: { size: { width: number; height: number; }; scale: number; position: { x: number; y: number; }; }) => void; /** * Provide an SVG container and optional onZoomChanged and onSelectionChanged handlers to create an SvgMapView. * * If you call the render method with an SVG string the svg will get rendered inside the container and zoom/pan * functionality will be added. * * Using the selectNode and deselectNode methods you can programmatically select and deselect nodes inside the SVG. */ export declare class SvgMapView implements CanSelectNode { private zoomManager; private svgContainer; private selectedElement?; private selectedElementStrokeWidth?; private onSelectionChanged?; constructor(svgContainer: HTMLElement, onZoomChanged?: OnZoomChangedHandler, onSelectionChanged?: OnSelectionChangedHandler); render(svgString: string, props: { position?: { x?: number; y?: number; }; scale?: number; selectedNode?: string | null; }): void; getNodeWithArgdownId(id: string): SVGGraphicsElement | undefined; getArgdownId(node: SVGGraphicsElement): string; deselectNode(): void; private _deselectNode; selectNode(id: string): void; } export declare const vizJsDefaultSettings: {}; export declare class VizJsMap implements CanSelectNode { viz: Graphviz | undefined; zoomManager: ZoomManager; svgContainer: HTMLElement; selectedElement?: SVGGraphicsElement | null; selectedElementStrokeWidth?: string; onSelectionChanged?: OnSelectionChangedHandler; constructor(svgContainer: HTMLElement, onZoomChanged?: OnZoomChangedHandler, onSelectionChanged?: OnSelectionChangedHandler); renderAsync(dot: string, options: IVizSettings): Promise<string>; render(props: VizJsMapProps): Promise<void>; getNodeWithArgdownId(id: string): SVGGraphicsElement | undefined; getArgdownId(node: SVGGraphicsElement): string; deselectNode(): void; /** * * Because we cannot override inline styles, we have to save original inline stroke and strokeWidth attributes and put them back in on deselection. */ private _deselectNode; selectNode(id: string): void; } export declare interface VizJsMapProps { dot: string; settings?: IVizJsSettingsExtended; scale?: number; position?: { x?: number; y?: number; }; selectedNode?: string | null; } export declare class ZoomManager { zoom?: ZoomBehavior<SVGSVGElement, Record<string, never>>; svg?: Selection_2<SVGSVGElement, Record<string, never>, null | HTMLElement, any>; svgGraph?: Selection_2<SVGGraphicsElement, Record<string, never>, null | HTMLElement, any>; state: IMapState; moveToDuration: number; onZoomChanged?: OnZoomChangedHandler; graphIsBottomAligned: boolean; constructor(onZoomChanged?: OnZoomChangedHandler, graphIsBottomAligned?: boolean, moveToDuration?: number); init(svg: Selection_2<SVGSVGElement, any, null | HTMLElement, any>, svgGraph: Selection_2<SVGGraphicsElement, any, null | HTMLElement, any>, width: number, height: number): void; showAllAndCenterMap(): void; resetZoom(): void; moveTo(x: number, y: number): void; moveToElement(element: SVGGraphicsElement): void; setZoom: (x: number, y: number, scale: number, duration: number) => void; } export { }