@3plate/graph-core 0.1.0 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,193 @@
1
+ type Side = 'source' | 'target';
2
+ type MergeOrder = Side[];
3
+ type NodeAlign = 'natural' | 'top' | 'bottom' | 'left' | 'right';
4
+ type Orientation = 'TB' | 'BT' | 'LR' | 'RL';
5
+ type Nav = 'first' | 'last' | 'prev' | 'next';
6
+ type LayoutStep = 'alignChildren' | 'alignParents' | 'compact';
7
+
8
+ type MarkerType = 'arrow' | 'circle' | 'diamond' | 'bar' | 'none';
9
+
10
+ type APIArguments<N, E> = {
11
+ options?: APIOptions<N, E>;
12
+ nodes?: N[];
13
+ edges?: E[];
14
+ history?: Update<N, E>[];
15
+ root: string;
16
+ };
17
+ type APIOptions<N, E> = {
18
+ graph?: GraphOptions;
19
+ canvas?: CanvasOptions<N>;
20
+ props?: PropsOptions<N, E>;
21
+ };
22
+ type GraphOptions = {
23
+ mergeOrder?: MergeOrder;
24
+ nodeMargin?: number;
25
+ dummyNodeSize?: number;
26
+ nodeAlign?: NodeAlign;
27
+ edgeSpacing?: number;
28
+ turnRadius?: number;
29
+ orientation?: Orientation;
30
+ layerMargin?: number;
31
+ alignIterations?: number;
32
+ alignThreshold?: number;
33
+ separateTrackSets?: boolean;
34
+ markerSize?: number;
35
+ layoutSteps?: LayoutStep[] | null;
36
+ };
37
+ type RenderNode<N> = (node: N) => HTMLElement;
38
+ type ColorMode = 'light' | 'dark' | 'system';
39
+ /** Canvas background and general colors */
40
+ type CanvasTheme = {
41
+ /** Canvas background color */
42
+ bg?: string;
43
+ /** Shadow color for floating elements */
44
+ shadow?: string;
45
+ };
46
+ /** Node styling properties */
47
+ type NodeTheme = {
48
+ /** Node background color */
49
+ bg?: string;
50
+ /** Node border color */
51
+ border?: string;
52
+ /** Node border color on hover */
53
+ borderHover?: string;
54
+ /** Node border color when selected */
55
+ borderSelected?: string;
56
+ /** Node text color */
57
+ text?: string;
58
+ /** Node secondary text color */
59
+ textMuted?: string;
60
+ };
61
+ /** Port styling properties */
62
+ type PortTheme = {
63
+ /** Port background color */
64
+ bg?: string;
65
+ /** Port background color on hover */
66
+ bgHover?: string;
67
+ };
68
+ /** Edge styling properties */
69
+ type EdgeTheme = {
70
+ /** Edge stroke color */
71
+ color?: string;
72
+ };
73
+ /** Combined theme with all customizable properties */
74
+ type ThemeVars = CanvasTheme & NodeTheme & PortTheme & EdgeTheme;
75
+ type CanvasOptions<N> = {
76
+ width?: number | string;
77
+ height?: number | string;
78
+ /** Padding inside the canvas viewport (default: 20) */
79
+ padding?: number;
80
+ classPrefix?: string;
81
+ markerSize?: number;
82
+ editable?: boolean;
83
+ panZoom?: boolean;
84
+ renderNode?: RenderNode<N>;
85
+ colorMode?: ColorMode;
86
+ theme?: ThemeVars;
87
+ nodeTypes?: Record<string, ThemeVars>;
88
+ edgeTypes?: Record<string, ThemeVars>;
89
+ };
90
+ type PropsOptions<N, E> = {
91
+ node?: GetNodeProps<N>;
92
+ edge?: GetEdgeProps<N, E>;
93
+ };
94
+ type Update<N, E> = {
95
+ addNodes?: N[];
96
+ removeNodes?: N[];
97
+ updateNodes?: N[];
98
+ addEdges?: E[];
99
+ removeEdges?: E[];
100
+ updateEdges?: E[];
101
+ description?: string;
102
+ };
103
+ type NodeProps<N> = {
104
+ id?: string;
105
+ title?: string;
106
+ text?: string;
107
+ type?: string;
108
+ ports?: {
109
+ in?: (string | PortProps)[];
110
+ out?: (string | PortProps)[];
111
+ };
112
+ render?: RenderNode<N>;
113
+ };
114
+ type EdgeEnd<N> = string | N | {
115
+ id: string;
116
+ port?: string;
117
+ marker?: MarkerType;
118
+ } | {
119
+ node: N;
120
+ port?: string;
121
+ marker?: MarkerType;
122
+ };
123
+ type EdgeProps<N> = {
124
+ id?: string;
125
+ label?: string;
126
+ source: EdgeEnd<N>;
127
+ target: EdgeEnd<N>;
128
+ type?: string;
129
+ };
130
+ type PortProps = {
131
+ id: string;
132
+ label?: string;
133
+ };
134
+ type GetNodeProps<N> = (node: N) => NodeProps<N>;
135
+ type GetEdgeProps<N, E> = (edge: E) => EdgeProps<N>;
136
+
137
+ declare class Updater<N, E> {
138
+ update: Update<N, E>;
139
+ constructor();
140
+ describe(desc: string): Updater<N, E>;
141
+ addNode(node: any): Updater<N, E>;
142
+ deleteNode(node: any): Updater<N, E>;
143
+ updateNode(node: any): Updater<N, E>;
144
+ addEdge(edge: any): Updater<N, E>;
145
+ deleteEdge(edge: any): Updater<N, E>;
146
+ updateEdge(edge: any): Updater<N, E>;
147
+ static add<N, E>(nodes: N[], edges: E[]): Updater<N, E>;
148
+ }
149
+
150
+ declare class API<N, E> {
151
+ private state;
152
+ private seq;
153
+ private index;
154
+ private canvas;
155
+ private options;
156
+ private history;
157
+ private nodeIds;
158
+ private edgeIds;
159
+ private nodeVersions;
160
+ private nextNodeId;
161
+ private nextEdgeId;
162
+ private root;
163
+ constructor(args: APIArguments<N, E>);
164
+ init(): Promise<void>;
165
+ nav(nav: Nav): void;
166
+ private applyDiff;
167
+ addNode(node: any): Promise<void>;
168
+ deleteNode(node: any): Promise<void>;
169
+ updateNode(node: any): Promise<void>;
170
+ addEdge(edge: any): Promise<void>;
171
+ deleteEdge(edge: any): Promise<void>;
172
+ applyUpdate(update: Update<N, E>): Promise<void>;
173
+ private setNodePositions;
174
+ update(callback: (updater: Updater<N, E>) => void): Promise<void>;
175
+ private measureNodes;
176
+ private parseNode;
177
+ private parseEdge;
178
+ private parseEdgeEnd;
179
+ private parseStringEdge;
180
+ private parsePorts;
181
+ private getNodeId;
182
+ private getEdgeId;
183
+ private _addNode;
184
+ private _removeNode;
185
+ private _updateNode;
186
+ private _addEdge;
187
+ private _removeEdge;
188
+ private _updateEdge;
189
+ }
190
+
191
+ declare function graph<N, E>(args?: APIArguments<N, E>): Promise<API<N, E>>;
192
+
193
+ export { graph as default, graph };
package/dist/index.d.ts CHANGED
@@ -1,51 +1,193 @@
1
- interface EdgeProps {
2
- sourceId: string;
3
- targetId: string;
1
+ type Side = 'source' | 'target';
2
+ type MergeOrder = Side[];
3
+ type NodeAlign = 'natural' | 'top' | 'bottom' | 'left' | 'right';
4
+ type Orientation = 'TB' | 'BT' | 'LR' | 'RL';
5
+ type Nav = 'first' | 'last' | 'prev' | 'next';
6
+ type LayoutStep = 'alignChildren' | 'alignParents' | 'compact';
7
+
8
+ type MarkerType = 'arrow' | 'circle' | 'diamond' | 'bar' | 'none';
9
+
10
+ type APIArguments<N, E> = {
11
+ options?: APIOptions<N, E>;
12
+ nodes?: N[];
13
+ edges?: E[];
14
+ history?: Update<N, E>[];
15
+ root: string;
16
+ };
17
+ type APIOptions<N, E> = {
18
+ graph?: GraphOptions;
19
+ canvas?: CanvasOptions<N>;
20
+ props?: PropsOptions<N, E>;
21
+ };
22
+ type GraphOptions = {
23
+ mergeOrder?: MergeOrder;
24
+ nodeMargin?: number;
25
+ dummyNodeSize?: number;
26
+ nodeAlign?: NodeAlign;
27
+ edgeSpacing?: number;
28
+ turnRadius?: number;
29
+ orientation?: Orientation;
30
+ layerMargin?: number;
31
+ alignIterations?: number;
32
+ alignThreshold?: number;
33
+ separateTrackSets?: boolean;
34
+ markerSize?: number;
35
+ layoutSteps?: LayoutStep[] | null;
36
+ };
37
+ type RenderNode<N> = (node: N) => HTMLElement;
38
+ type ColorMode = 'light' | 'dark' | 'system';
39
+ /** Canvas background and general colors */
40
+ type CanvasTheme = {
41
+ /** Canvas background color */
42
+ bg?: string;
43
+ /** Shadow color for floating elements */
44
+ shadow?: string;
45
+ };
46
+ /** Node styling properties */
47
+ type NodeTheme = {
48
+ /** Node background color */
49
+ bg?: string;
50
+ /** Node border color */
51
+ border?: string;
52
+ /** Node border color on hover */
53
+ borderHover?: string;
54
+ /** Node border color when selected */
55
+ borderSelected?: string;
56
+ /** Node text color */
57
+ text?: string;
58
+ /** Node secondary text color */
59
+ textMuted?: string;
60
+ };
61
+ /** Port styling properties */
62
+ type PortTheme = {
63
+ /** Port background color */
64
+ bg?: string;
65
+ /** Port background color on hover */
66
+ bgHover?: string;
67
+ };
68
+ /** Edge styling properties */
69
+ type EdgeTheme = {
70
+ /** Edge stroke color */
71
+ color?: string;
72
+ };
73
+ /** Combined theme with all customizable properties */
74
+ type ThemeVars = CanvasTheme & NodeTheme & PortTheme & EdgeTheme;
75
+ type CanvasOptions<N> = {
76
+ width?: number | string;
77
+ height?: number | string;
78
+ /** Padding inside the canvas viewport (default: 20) */
79
+ padding?: number;
80
+ classPrefix?: string;
81
+ markerSize?: number;
82
+ editable?: boolean;
83
+ panZoom?: boolean;
84
+ renderNode?: RenderNode<N>;
85
+ colorMode?: ColorMode;
86
+ theme?: ThemeVars;
87
+ nodeTypes?: Record<string, ThemeVars>;
88
+ edgeTypes?: Record<string, ThemeVars>;
89
+ };
90
+ type PropsOptions<N, E> = {
91
+ node?: GetNodeProps<N>;
92
+ edge?: GetEdgeProps<N, E>;
93
+ };
94
+ type Update<N, E> = {
95
+ addNodes?: N[];
96
+ removeNodes?: N[];
97
+ updateNodes?: N[];
98
+ addEdges?: E[];
99
+ removeEdges?: E[];
100
+ updateEdges?: E[];
101
+ description?: string;
102
+ };
103
+ type NodeProps<N> = {
104
+ id?: string;
105
+ title?: string;
106
+ text?: string;
107
+ type?: string;
108
+ ports?: {
109
+ in?: (string | PortProps)[];
110
+ out?: (string | PortProps)[];
111
+ };
112
+ render?: RenderNode<N>;
113
+ };
114
+ type EdgeEnd<N> = string | N | {
115
+ id: string;
116
+ port?: string;
117
+ marker?: MarkerType;
118
+ } | {
119
+ node: N;
120
+ port?: string;
121
+ marker?: MarkerType;
122
+ };
123
+ type EdgeProps<N> = {
124
+ id?: string;
4
125
  label?: string;
5
- sourcePort?: string;
6
- targetPort?: string;
7
- }
8
- type EdgeExtractor<E> = (edge: E) => EdgeProps;
9
- declare class GraphEdge<N, E> {
126
+ source: EdgeEnd<N>;
127
+ target: EdgeEnd<N>;
128
+ type?: string;
129
+ };
130
+ type PortProps = {
10
131
  id: string;
11
- props: EdgeProps;
12
- data: E;
13
- source: GraphNode<N, E>;
14
- target: GraphNode<N, E>;
15
- constructor(props: EdgeProps, data: E, source: GraphNode<N, E>, target: GraphNode<N, E>);
16
- }
132
+ label?: string;
133
+ };
134
+ type GetNodeProps<N> = (node: N) => NodeProps<N>;
135
+ type GetEdgeProps<N, E> = (edge: E) => EdgeProps<N>;
17
136
 
18
- interface NodeProps {
19
- id: string;
20
- inPorts?: string[];
21
- outPorts?: string[];
22
- }
23
- type NodeExtractor<N> = (node: N) => NodeProps;
24
- declare class GraphNode<N, E> {
25
- props: NodeProps;
26
- data: N;
27
- pred: Map<GraphEdge<N, E>, GraphNode<N, E> | null> | undefined;
28
- succ: Map<GraphEdge<N, E>, GraphNode<N, E> | null> | undefined;
29
- prior: GraphNode<N, E> | undefined;
30
- constructor(props: NodeProps, data: N);
137
+ declare class Updater<N, E> {
138
+ update: Update<N, E>;
139
+ constructor();
140
+ describe(desc: string): Updater<N, E>;
141
+ addNode(node: any): Updater<N, E>;
142
+ deleteNode(node: any): Updater<N, E>;
143
+ updateNode(node: any): Updater<N, E>;
144
+ addEdge(edge: any): Updater<N, E>;
145
+ deleteEdge(edge: any): Updater<N, E>;
146
+ updateEdge(edge: any): Updater<N, E>;
147
+ static add<N, E>(nodes: N[], edges: E[]): Updater<N, E>;
31
148
  }
32
149
 
33
- declare class Graph<N, E> {
34
- nodeMap: Map<string, GraphNode<N, E> | null> | undefined;
35
- edgeMap: Map<string, GraphEdge<N, E> | null> | undefined;
36
- prior: Graph<N, E> | undefined;
37
- complete: boolean;
38
- numNodes: number;
39
- numEdges: number;
40
- constructor();
41
- isEmpty(): boolean;
42
- _walk<T>(mapFn: (graph: Graph<N, E>) => Map<string, T | null> | undefined): IterableIterator<T>;
43
- nodes(): IterableIterator<GraphNode<N, E>>;
44
- edges(): IterableIterator<GraphEdge<N, E>>;
45
- getNode(id: string): GraphNode<N, E> | undefined;
46
- getEdge(id: string): GraphEdge<N, E> | undefined;
47
- hasNode(id: string): boolean;
48
- hasEdge(id: string): boolean;
150
+ declare class API<N, E> {
151
+ private state;
152
+ private seq;
153
+ private index;
154
+ private canvas;
155
+ private options;
156
+ private history;
157
+ private nodeIds;
158
+ private edgeIds;
159
+ private nodeVersions;
160
+ private nextNodeId;
161
+ private nextEdgeId;
162
+ private root;
163
+ constructor(args: APIArguments<N, E>);
164
+ init(): Promise<void>;
165
+ nav(nav: Nav): void;
166
+ private applyDiff;
167
+ addNode(node: any): Promise<void>;
168
+ deleteNode(node: any): Promise<void>;
169
+ updateNode(node: any): Promise<void>;
170
+ addEdge(edge: any): Promise<void>;
171
+ deleteEdge(edge: any): Promise<void>;
172
+ applyUpdate(update: Update<N, E>): Promise<void>;
173
+ private setNodePositions;
174
+ update(callback: (updater: Updater<N, E>) => void): Promise<void>;
175
+ private measureNodes;
176
+ private parseNode;
177
+ private parseEdge;
178
+ private parseEdgeEnd;
179
+ private parseStringEdge;
180
+ private parsePorts;
181
+ private getNodeId;
182
+ private getEdgeId;
183
+ private _addNode;
184
+ private _removeNode;
185
+ private _updateNode;
186
+ private _addEdge;
187
+ private _removeEdge;
188
+ private _updateEdge;
49
189
  }
50
190
 
51
- export { type EdgeExtractor, type EdgeProps, Graph, GraphEdge, GraphNode, type NodeExtractor, type NodeProps };
191
+ declare function graph<N, E>(args?: APIArguments<N, E>): Promise<API<N, E>>;
192
+
193
+ export { graph as default, graph };