@umbraci/jsmind 0.10.14 → 0.10.15
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.
- package/LICENSE +24 -24
- package/README.md +116 -116
- package/dist/jsmind.copy-paste.js +9 -0
- package/dist/jsmind.copy-paste.js.map +1 -0
- package/dist/jsmind.draggable-node.js +1 -1
- package/dist/jsmind.draggable-node.js.map +1 -1
- package/dist/jsmind.history.js +1 -1
- package/dist/jsmind.history.js.map +1 -1
- package/dist/jsmind.js +1 -1
- package/dist/jsmind.js.map +1 -1
- package/dist/jsmind.multi-select.js +1 -1
- package/dist/jsmind.multi-select.js.map +1 -1
- package/dist/jsmind.multiline-text.js +1 -1
- package/dist/jsmind.multiline-text.js.map +1 -1
- package/dist/jsmind.screenshot.js +1 -1
- package/dist/jsmind.screenshot.js.map +1 -1
- package/es/jsmind.copy-paste.js +9 -0
- package/es/jsmind.copy-paste.js.map +1 -0
- package/es/jsmind.draggable-node.js +1 -1
- package/es/jsmind.draggable-node.js.map +1 -1
- package/es/jsmind.history.js +1 -1
- package/es/jsmind.history.js.map +1 -1
- package/es/jsmind.js +1 -1
- package/es/jsmind.js.map +1 -1
- package/es/jsmind.multi-select.js +1 -1
- package/es/jsmind.multi-select.js.map +1 -1
- package/es/jsmind.multiline-text.js +1 -1
- package/es/jsmind.multiline-text.js.map +1 -1
- package/es/jsmind.screenshot.js +1 -1
- package/es/jsmind.screenshot.js.map +1 -1
- package/lib/jsmind.copy-paste.js +9 -0
- package/lib/jsmind.copy-paste.js.map +1 -0
- package/lib/jsmind.draggable-node.js +1 -1
- package/lib/jsmind.draggable-node.js.map +1 -1
- package/lib/jsmind.history.js +1 -1
- package/lib/jsmind.history.js.map +1 -1
- package/lib/jsmind.js +1 -1
- package/lib/jsmind.js.map +1 -1
- package/lib/jsmind.multi-select.js +1 -1
- package/lib/jsmind.multi-select.js.map +1 -1
- package/lib/jsmind.multiline-text.js +1 -1
- package/lib/jsmind.multiline-text.js.map +1 -1
- package/lib/jsmind.screenshot.js +1 -1
- package/lib/jsmind.screenshot.js.map +1 -1
- package/package.json +115 -115
- package/style/jsmind.css +408 -408
- package/types/generated/index.d.ts +8 -0
- package/types/generated/jsmind.common.d.ts +68 -0
- package/types/generated/jsmind.d.ts +632 -0
- package/types/generated/jsmind.data_provider.d.ts +56 -0
- package/types/generated/jsmind.dom.d.ts +59 -0
- package/types/generated/jsmind.enhanced-plugin.d.ts +103 -0
- package/types/generated/jsmind.format.d.ts +113 -0
- package/types/generated/jsmind.graph.d.ts +180 -0
- package/types/generated/jsmind.layout_provider.d.ts +182 -0
- package/types/generated/jsmind.mind.d.ts +129 -0
- package/types/generated/jsmind.node.d.ts +69 -0
- package/types/generated/jsmind.option.d.ts +78 -0
- package/types/generated/jsmind.plugin.d.ts +21 -0
- package/types/generated/jsmind.shortcut_provider.d.ts +52 -0
- package/types/generated/jsmind.util.d.ts +26 -0
- package/types/generated/jsmind.view_provider.d.ts +374 -0
- package/types/generated/plugins/history/history-diff.d.ts +310 -0
- package/types/generated/plugins/history/jsmind.history.d.ts +87 -0
- package/types/generated/plugins/jsmind.draggable-node.d.ts +262 -0
- package/types/generated/plugins/jsmind.multiline-text-v2.d.ts +58 -0
- package/types/generated/plugins/jsmind.multiline-text.d.ts +43 -0
- package/types/generated/plugins/jsmind.screenshot.d.ts +83 -0
- package/types/tsconfig.declaration.json +19 -19
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
export default HistoryPlugin;
|
|
2
|
+
export type JsMind = import("../../jsmind.js").default;
|
|
3
|
+
export type DiffResult = import("./history-diff.js").DiffResult;
|
|
4
|
+
export type DiffOptions = import("./history-diff.js").DiffOptions;
|
|
5
|
+
/**
|
|
6
|
+
* HistoryPlugin skeleton (Task 1)
|
|
7
|
+
*/
|
|
8
|
+
export class HistoryPlugin extends EnhancedPlugin {
|
|
9
|
+
/**
|
|
10
|
+
* @param {{ jm: JsMind, pluginOpt?: any }} params
|
|
11
|
+
*/
|
|
12
|
+
constructor({ jm, pluginOpt }: {
|
|
13
|
+
jm: JsMind;
|
|
14
|
+
pluginOpt?: any;
|
|
15
|
+
});
|
|
16
|
+
options: any;
|
|
17
|
+
_mounted: boolean;
|
|
18
|
+
_core: HistoryCore;
|
|
19
|
+
/**
|
|
20
|
+
* Lifecycle hook: called when jsMind instance is destroyed
|
|
21
|
+
*/
|
|
22
|
+
beforePluginDestroy(): void;
|
|
23
|
+
/** Default: call beforePluginRemove on destroy */
|
|
24
|
+
beforePluginDestroy(): void;
|
|
25
|
+
/** Initialize HistoryCore and wire API methods */
|
|
26
|
+
_initCore(): void;
|
|
27
|
+
_listener: (type: any, payload: any) => void;
|
|
28
|
+
/**
|
|
29
|
+
* Inject shortcut options so provider can register mapping in its init phase
|
|
30
|
+
* @param {{ enable?: boolean, handles: Record<string,Function>, mapping: Record<string, number|number[]> }} sc
|
|
31
|
+
* @param {boolean} redoUsesY
|
|
32
|
+
*/
|
|
33
|
+
_injectShortcuts(sc: {
|
|
34
|
+
enable?: boolean;
|
|
35
|
+
handles: Record<string, Function>;
|
|
36
|
+
mapping: Record<string, number | number[]>;
|
|
37
|
+
}, redoUsesY: boolean): void;
|
|
38
|
+
/** Mount public API on jm.history (placeholder defaults) */
|
|
39
|
+
_mountAPI(): void;
|
|
40
|
+
}
|
|
41
|
+
import { EnhancedPlugin } from '../../jsmind.enhanced-plugin.js';
|
|
42
|
+
declare class HistoryCore {
|
|
43
|
+
/** @param {JsMind} jm @param {any} options */
|
|
44
|
+
constructor(jm: JsMind, options: any);
|
|
45
|
+
jm: import("../../jsmind.js").default;
|
|
46
|
+
options: any;
|
|
47
|
+
enabled: boolean;
|
|
48
|
+
maxHistory: number;
|
|
49
|
+
throttleMs: number;
|
|
50
|
+
storageMode: any;
|
|
51
|
+
autoSwitchThreshold: number;
|
|
52
|
+
_history: any[];
|
|
53
|
+
_idx: number;
|
|
54
|
+
_paused: boolean;
|
|
55
|
+
_lastAddAt: number;
|
|
56
|
+
_timer: number;
|
|
57
|
+
_pending: boolean;
|
|
58
|
+
_pendingMeta: any;
|
|
59
|
+
_lastSig: any;
|
|
60
|
+
_lastRootId: any;
|
|
61
|
+
add(reason: string, meta: any): void;
|
|
62
|
+
pause(): void;
|
|
63
|
+
resume(flush?: boolean): void;
|
|
64
|
+
clear(): void;
|
|
65
|
+
canBack(): boolean;
|
|
66
|
+
canForward(): boolean;
|
|
67
|
+
back(steps?: number): boolean;
|
|
68
|
+
forward(steps?: number): boolean;
|
|
69
|
+
length(): number;
|
|
70
|
+
index(): number;
|
|
71
|
+
setMax(count: any): void;
|
|
72
|
+
setThrottle(ms: any): void;
|
|
73
|
+
exportSnapshot(): any;
|
|
74
|
+
importSnapshot(data: any, applyOptions: any): boolean;
|
|
75
|
+
getStackMeta(): {
|
|
76
|
+
items: any[];
|
|
77
|
+
index: number;
|
|
78
|
+
};
|
|
79
|
+
_notifyChange(): void;
|
|
80
|
+
_addNow(_reason: any, _meta: any): void;
|
|
81
|
+
_applyIndex(): boolean;
|
|
82
|
+
_takeSnapshot(): any;
|
|
83
|
+
_applySnapshot(data: any, applyOptions: any): boolean;
|
|
84
|
+
_countNodes(snapshot: any): number;
|
|
85
|
+
_deepFreeze(obj: any): any;
|
|
86
|
+
_cloneSnapshot(obj: any): any;
|
|
87
|
+
}
|
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Draggable node plugin for jsMind.
|
|
3
|
+
*/
|
|
4
|
+
export class DraggableNode {
|
|
5
|
+
/**
|
|
6
|
+
* Create draggable node plugin instance.
|
|
7
|
+
* @param {import('../jsmind.js').default} jm - jsMind instance
|
|
8
|
+
* @param {Partial<DraggableNodeOptions>} options - Plugin options
|
|
9
|
+
*/
|
|
10
|
+
constructor(jm: import("../jsmind.js").default, options: Partial<DraggableNodeOptions>);
|
|
11
|
+
version: string;
|
|
12
|
+
/** @type {import('../jsmind.js').default} */
|
|
13
|
+
jm: import("../jsmind.js").default;
|
|
14
|
+
/** @type {DraggableNodeOptions} */
|
|
15
|
+
options: DraggableNodeOptions;
|
|
16
|
+
/** @type {boolean} */
|
|
17
|
+
is_svg_engine: boolean;
|
|
18
|
+
/** @type {HTMLCanvasElement|SVGSVGElement|null} */
|
|
19
|
+
e_canvas: HTMLCanvasElement | SVGSVGElement | null;
|
|
20
|
+
/** @type {CanvasRenderingContext2D|null} */
|
|
21
|
+
canvas_ctx: CanvasRenderingContext2D | null;
|
|
22
|
+
/** @type {SVGPathElement|null} */
|
|
23
|
+
helper_line: SVGPathElement | null;
|
|
24
|
+
/** @type {HTMLElement|null} */
|
|
25
|
+
shadow: HTMLElement | null;
|
|
26
|
+
/** @type {number} */
|
|
27
|
+
shadow_p_x: number;
|
|
28
|
+
/** @type {number} */
|
|
29
|
+
shadow_p_y: number;
|
|
30
|
+
/** @type {number} */
|
|
31
|
+
shadow_w: number;
|
|
32
|
+
/** @type {number} */
|
|
33
|
+
shadow_h: number;
|
|
34
|
+
/** @type {import('../jsmind.node.js').Node|null} */
|
|
35
|
+
active_node: import("../jsmind.node.js").Node | null;
|
|
36
|
+
/** @type {import('../jsmind.node.js').Node|null} */
|
|
37
|
+
target_node: import("../jsmind.node.js").Node | null;
|
|
38
|
+
/** @type {number|null} */
|
|
39
|
+
target_direct: number | null;
|
|
40
|
+
/** @type {number} */
|
|
41
|
+
client_w: number;
|
|
42
|
+
/** @type {number} */
|
|
43
|
+
client_h: number;
|
|
44
|
+
/** @type {number} */
|
|
45
|
+
offset_x: number;
|
|
46
|
+
/** @type {number} */
|
|
47
|
+
offset_y: number;
|
|
48
|
+
/** @type {number} */
|
|
49
|
+
hlookup_delay: number;
|
|
50
|
+
/** @type {number} */
|
|
51
|
+
hlookup_timer: number;
|
|
52
|
+
/** @type {boolean} */
|
|
53
|
+
capture: boolean;
|
|
54
|
+
/** @type {boolean} */
|
|
55
|
+
moved: boolean;
|
|
56
|
+
/** @type {boolean} */
|
|
57
|
+
canvas_draggable: boolean;
|
|
58
|
+
/** @type {HTMLElement} */
|
|
59
|
+
view_panel: HTMLElement;
|
|
60
|
+
/** @type {DOMRect|null} */
|
|
61
|
+
view_panel_rect: DOMRect | null;
|
|
62
|
+
/** Initialize the draggable node plugin. */
|
|
63
|
+
init(): void;
|
|
64
|
+
/** Resize canvas/SVG and shadow elements. */
|
|
65
|
+
resize(): void;
|
|
66
|
+
/** Create canvas or SVG for drawing drag lines. */
|
|
67
|
+
create_canvas(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Create SVG element with proper namespace.
|
|
70
|
+
* @param {string} tag - SVG tag name
|
|
71
|
+
* @returns {SVGElement}
|
|
72
|
+
* @private
|
|
73
|
+
*/
|
|
74
|
+
private _create_svg_element;
|
|
75
|
+
create_shadow(): void;
|
|
76
|
+
/**
|
|
77
|
+
* Reset shadow element style and cache its size.
|
|
78
|
+
* @param {HTMLElement} el - The node element to mirror as shadow
|
|
79
|
+
*/
|
|
80
|
+
reset_shadow(el: HTMLElement): void;
|
|
81
|
+
/** Show the shadow element. */
|
|
82
|
+
show_shadow(): void;
|
|
83
|
+
/** Hide the shadow element. */
|
|
84
|
+
hide_shadow(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Draw a helper line between the shadow and target node.
|
|
87
|
+
* @param {{x:number,y:number}} shadow_p - Shadow anchor point
|
|
88
|
+
* @param {{x:number,y:number}} node_p - Target node anchor point
|
|
89
|
+
* @param {boolean} invalid - Whether current target is invalid
|
|
90
|
+
*/
|
|
91
|
+
magnet_shadow(shadow_p: {
|
|
92
|
+
x: number;
|
|
93
|
+
y: number;
|
|
94
|
+
}, node_p: {
|
|
95
|
+
x: number;
|
|
96
|
+
y: number;
|
|
97
|
+
}, invalid: boolean): void;
|
|
98
|
+
/** Clear helper lines from canvas or SVG. */
|
|
99
|
+
clear_lines(): void;
|
|
100
|
+
/**
|
|
101
|
+
* Draw a straight helper line on canvas.
|
|
102
|
+
* @param {number} x1
|
|
103
|
+
* @param {number} y1
|
|
104
|
+
* @param {number} x2
|
|
105
|
+
* @param {number} y2
|
|
106
|
+
*/
|
|
107
|
+
canvas_lineto(x1: number, y1: number, x2: number, y2: number): void;
|
|
108
|
+
/**
|
|
109
|
+
* Draw a helper line on SVG using bezier curve.
|
|
110
|
+
* Reuses the line drawing logic from SvgGraph.
|
|
111
|
+
* @param {number} x1 - Start x coordinate
|
|
112
|
+
* @param {number} y1 - Start y coordinate
|
|
113
|
+
* @param {number} x2 - End x coordinate
|
|
114
|
+
* @param {number} y2 - End y coordinate
|
|
115
|
+
* @param {string} color - Line color
|
|
116
|
+
*/
|
|
117
|
+
svg_draw_line(x1: number, y1: number, x2: number, y2: number, color: string): void;
|
|
118
|
+
/**
|
|
119
|
+
* Draw bezier curve to SVG path element.
|
|
120
|
+
* Reuses logic from SvgGraph._bezier_to.
|
|
121
|
+
* @param {SVGPathElement} path - SVG path element
|
|
122
|
+
* @param {number} x1 - Start x coordinate
|
|
123
|
+
* @param {number} y1 - Start y coordinate
|
|
124
|
+
* @param {number} x2 - End x coordinate
|
|
125
|
+
* @param {number} y2 - End y coordinate
|
|
126
|
+
* @private
|
|
127
|
+
*/
|
|
128
|
+
private _svg_bezier_to;
|
|
129
|
+
/** Bind mouse/touch events for dragging. */
|
|
130
|
+
event_bind(): void;
|
|
131
|
+
/**
|
|
132
|
+
* Begin dragging interaction.
|
|
133
|
+
* @param {MouseEvent|TouchEvent} e - Pointer down event
|
|
134
|
+
*/
|
|
135
|
+
dragstart(e: MouseEvent | TouchEvent): void;
|
|
136
|
+
view_draggable: boolean;
|
|
137
|
+
client_hw: number;
|
|
138
|
+
client_hh: number;
|
|
139
|
+
/**
|
|
140
|
+
* Drag handler to move shadow and auto-scroll container.
|
|
141
|
+
* @param {MouseEvent|TouchEvent} e - Pointer move event
|
|
142
|
+
*/
|
|
143
|
+
drag(e: MouseEvent | TouchEvent): void;
|
|
144
|
+
/**
|
|
145
|
+
* Finish dragging, move the node if applicable.
|
|
146
|
+
* @param {MouseEvent|TouchEvent} e - Pointer up event
|
|
147
|
+
*/
|
|
148
|
+
dragend(e: MouseEvent | TouchEvent): void;
|
|
149
|
+
/**
|
|
150
|
+
* Find the closest node element from an event target.
|
|
151
|
+
* @param {HTMLElement} el - Current DOM element
|
|
152
|
+
* @returns {HTMLElement|null} Matched node element or null
|
|
153
|
+
*/
|
|
154
|
+
find_node_element(el: HTMLElement): HTMLElement | null;
|
|
155
|
+
/** Recompute target node under the shadow and draw helper. */
|
|
156
|
+
lookup_target_node(): void;
|
|
157
|
+
/**
|
|
158
|
+
* Get X coordinate of root node center.
|
|
159
|
+
* @returns {number}
|
|
160
|
+
*/
|
|
161
|
+
get_root_x(): number;
|
|
162
|
+
/**
|
|
163
|
+
* Lookup overlapping node's parent near the shadow position.
|
|
164
|
+
* @param {number} direction - Direction constant
|
|
165
|
+
* @returns {import('../jsmind.node.js').Node|null}
|
|
166
|
+
*/
|
|
167
|
+
lookup_overlapping_node_parent(direction: number): import("../jsmind.node.js").Node | null;
|
|
168
|
+
/**
|
|
169
|
+
* Find node's parent by a screen location.
|
|
170
|
+
* @param {number} x - Client X
|
|
171
|
+
* @param {number} y - Client Y
|
|
172
|
+
* @returns {import('../jsmind.node.js').Node|null}
|
|
173
|
+
*/
|
|
174
|
+
lookup_node_parent_by_location(x: number, y: number): import("../jsmind.node.js").Node | null;
|
|
175
|
+
/**
|
|
176
|
+
* Lookup the closest node along a direction.
|
|
177
|
+
* @param {number} direction
|
|
178
|
+
* @returns {import('../jsmind.node.js').Node}
|
|
179
|
+
*/
|
|
180
|
+
lookup_close_node(direction: number): import("../jsmind.node.js").Node;
|
|
181
|
+
/**
|
|
182
|
+
* Check if shadow is on the target side of a node.
|
|
183
|
+
* @param {import('../jsmind.node.js').Node} node
|
|
184
|
+
* @param {number} dir
|
|
185
|
+
* @returns {boolean}
|
|
186
|
+
*/
|
|
187
|
+
shadow_on_target_side(node: import("../jsmind.node.js").Node, dir: number): boolean;
|
|
188
|
+
/**
|
|
189
|
+
* Distance from shadow to the right side of a node.
|
|
190
|
+
* @param {import('../jsmind.node.js').Node} node
|
|
191
|
+
* @returns {number}
|
|
192
|
+
*/
|
|
193
|
+
shadow_to_right_of_node(node: import("../jsmind.node.js").Node): number;
|
|
194
|
+
/**
|
|
195
|
+
* Distance from shadow to the left side of a node.
|
|
196
|
+
* @param {import('../jsmind.node.js').Node} node
|
|
197
|
+
* @returns {number}
|
|
198
|
+
*/
|
|
199
|
+
shadow_to_left_of_node(node: import("../jsmind.node.js").Node): number;
|
|
200
|
+
/**
|
|
201
|
+
* Vertical distance between shadow centerline and node centerline.
|
|
202
|
+
* @param {import('../jsmind.node.js').Node} node
|
|
203
|
+
* @returns {number}
|
|
204
|
+
*/
|
|
205
|
+
shadow_to_base_line_of_node(node: import("../jsmind.node.js").Node): number;
|
|
206
|
+
/**
|
|
207
|
+
* Manhattan distance to a node along a direction.
|
|
208
|
+
* @param {import('../jsmind.node.js').Node} node
|
|
209
|
+
* @param {number} dir
|
|
210
|
+
* @returns {number}
|
|
211
|
+
*/
|
|
212
|
+
shadow_to_node(node: import("../jsmind.node.js").Node, dir: number): number;
|
|
213
|
+
/**
|
|
214
|
+
* Calculate connection points of a node and the shadow.
|
|
215
|
+
* @param {import('../jsmind.node.js').Node} node
|
|
216
|
+
* @param {number} dir
|
|
217
|
+
* @returns {{sp:{x:number,y:number}, np:{x:number,y:number}}}
|
|
218
|
+
*/
|
|
219
|
+
calc_point_of_node(node: import("../jsmind.node.js").Node, dir: number): {
|
|
220
|
+
sp: {
|
|
221
|
+
x: number;
|
|
222
|
+
y: number;
|
|
223
|
+
};
|
|
224
|
+
np: {
|
|
225
|
+
x: number;
|
|
226
|
+
y: number;
|
|
227
|
+
};
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* Move a node to a new parent/position.
|
|
231
|
+
* @param {import('../jsmind.node.js').Node} src_node
|
|
232
|
+
* @param {import('../jsmind.node.js').Node|null} target_node
|
|
233
|
+
* @param {number|null} target_direct
|
|
234
|
+
*/
|
|
235
|
+
move_node(src_node: import("../jsmind.node.js").Node, target_node: import("../jsmind.node.js").Node | null, target_direct: number | null): void;
|
|
236
|
+
/**
|
|
237
|
+
* Handle jsMind events.
|
|
238
|
+
* @param {number|string} type - Event type
|
|
239
|
+
* @param {object} [data] - Event data
|
|
240
|
+
*/
|
|
241
|
+
jm_event_handle(type: number | string, data?: object): void;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Draggable node plugin registration.
|
|
245
|
+
* @type {import('../jsmind.plugin.js').Plugin<Partial<DraggableNodeOptions>>}
|
|
246
|
+
*/
|
|
247
|
+
export const draggable_plugin: import("../jsmind.plugin.js").Plugin<Partial<DraggableNodeOptions>>;
|
|
248
|
+
export default DraggableNode;
|
|
249
|
+
/**
|
|
250
|
+
* Default options for draggable node plugin.
|
|
251
|
+
*/
|
|
252
|
+
export type DraggableNodeOptions = {
|
|
253
|
+
line_width?: number;
|
|
254
|
+
line_color?: string;
|
|
255
|
+
line_color_invalid?: string;
|
|
256
|
+
lookup_delay?: number;
|
|
257
|
+
lookup_interval?: number;
|
|
258
|
+
scrolling_trigger_width?: number;
|
|
259
|
+
scrolling_step_length?: number;
|
|
260
|
+
shadow_node_class_name?: string;
|
|
261
|
+
validate_drag?: (draggedNode: import("../jsmind.node.js").Node, targetNode: import("../jsmind.node.js").Node | null) => boolean;
|
|
262
|
+
};
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export default MultilineTextV2;
|
|
2
|
+
/**
|
|
3
|
+
* MultilineTextV2 Plugin
|
|
4
|
+
* Enhanced multiline text plugin using the new plugin system
|
|
5
|
+
*/
|
|
6
|
+
declare class MultilineTextV2 extends EnhancedPlugin {
|
|
7
|
+
/**
|
|
8
|
+
* @param {{ jm: import('../jsmind.js').default, pluginOpt: object }} params
|
|
9
|
+
*/
|
|
10
|
+
constructor({ jm, pluginOpt }: {
|
|
11
|
+
jm: import("../jsmind.js").default;
|
|
12
|
+
pluginOpt: object;
|
|
13
|
+
});
|
|
14
|
+
options: any;
|
|
15
|
+
editing_node: import("../jsmind.node.js").Node;
|
|
16
|
+
multiline_editor: HTMLElement;
|
|
17
|
+
_original_custom_render: Function | ((jm: import("../jsmind.js").default, ele: HTMLElement, node: import("../jsmind.node.js").Node) => void);
|
|
18
|
+
_original_edit_node_begin: any;
|
|
19
|
+
_original_edit_node_end: any;
|
|
20
|
+
/**
|
|
21
|
+
* Setup custom rendering in options (for preload plugins)
|
|
22
|
+
*/
|
|
23
|
+
setupCustomRenderInOptions(): void;
|
|
24
|
+
/**
|
|
25
|
+
* Setup custom rendering for multiline text (for normal plugins)
|
|
26
|
+
*/
|
|
27
|
+
setupCustomRender(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Setup edit handlers (common for both preload and normal plugins)
|
|
30
|
+
*/
|
|
31
|
+
setupEditHandlers(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Re-render all nodes to apply multiline styles and recalculate sizes.
|
|
34
|
+
* This is necessary because node sizes are calculated before custom styles are applied.
|
|
35
|
+
* @private
|
|
36
|
+
*/
|
|
37
|
+
private _rerender_all_nodes;
|
|
38
|
+
/**
|
|
39
|
+
* Begin editing a node
|
|
40
|
+
* @param {import('../jsmind.node.js').Node} node
|
|
41
|
+
*/
|
|
42
|
+
edit_node_begin(node: import("../jsmind.node.js").Node): void;
|
|
43
|
+
/**
|
|
44
|
+
* End editing and save changes.
|
|
45
|
+
*/
|
|
46
|
+
edit_node_end(): void;
|
|
47
|
+
/**
|
|
48
|
+
* Cancel editing without saving changes.
|
|
49
|
+
*/
|
|
50
|
+
cancel_editing(): void;
|
|
51
|
+
/**
|
|
52
|
+
* Clean up editor and reset state.
|
|
53
|
+
* @private
|
|
54
|
+
*/
|
|
55
|
+
private _cleanup_editor;
|
|
56
|
+
}
|
|
57
|
+
import { EnhancedPlugin } from '../jsmind.enhanced-plugin.js';
|
|
58
|
+
import jsMind from '../jsmind.js';
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Create a custom node render function for multiline text
|
|
3
|
+
* @param {MultilineTextOptions} [options={}] - Plugin options
|
|
4
|
+
* @param {number} [options.text_width=200] - Maximum width for multiline text nodes
|
|
5
|
+
* @param {string} [options.line_height='1.5'] - Line height for text
|
|
6
|
+
* @returns {function(jsMind, HTMLElement, Node): boolean} Custom render function
|
|
7
|
+
* @example
|
|
8
|
+
* const options = {
|
|
9
|
+
* view: {
|
|
10
|
+
* custom_node_render: createMultilineRender({
|
|
11
|
+
* text_width: 250,
|
|
12
|
+
* line_height: '1.6',
|
|
13
|
+
* })
|
|
14
|
+
* }
|
|
15
|
+
* };
|
|
16
|
+
*/
|
|
17
|
+
export function createMultilineRender(options?: MultilineTextOptions): (arg0: jsMind, arg1: HTMLElement, arg2: Node) => boolean;
|
|
18
|
+
declare namespace _default {
|
|
19
|
+
export let name: string;
|
|
20
|
+
export { init };
|
|
21
|
+
export { createMultilineRender };
|
|
22
|
+
}
|
|
23
|
+
export default _default;
|
|
24
|
+
/**
|
|
25
|
+
* Default plugin options
|
|
26
|
+
*/
|
|
27
|
+
export type MultilineTextOptions = {
|
|
28
|
+
/**
|
|
29
|
+
* - Maximum width for multiline text nodes (default: 200)
|
|
30
|
+
*/
|
|
31
|
+
text_width: number;
|
|
32
|
+
/**
|
|
33
|
+
* - Line height for text (default: '1.5')
|
|
34
|
+
*/
|
|
35
|
+
line_height: string;
|
|
36
|
+
};
|
|
37
|
+
/**
|
|
38
|
+
* Plugin initialization function
|
|
39
|
+
* @param {import('../jsmind.js').default} jm - jsMind instance
|
|
40
|
+
* @param {MultilineTextOptions} options - Plugin options
|
|
41
|
+
* @private
|
|
42
|
+
*/
|
|
43
|
+
declare function init(jm: import("../jsmind.js").default, options: MultilineTextOptions): void;
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Screenshot plugin for jsMind.
|
|
3
|
+
*/
|
|
4
|
+
export class JmScreenshot {
|
|
5
|
+
/**
|
|
6
|
+
* Create screenshot plugin instance.
|
|
7
|
+
* @param {import('../jsmind.js').default} jm - jsMind instance
|
|
8
|
+
* @param {Partial<ScreenshotOptions>} options - Plugin options
|
|
9
|
+
*/
|
|
10
|
+
constructor(jm: import("../jsmind.js").default, options: Partial<ScreenshotOptions>);
|
|
11
|
+
version: string;
|
|
12
|
+
/** @type {import('../jsmind.js').default} */
|
|
13
|
+
jm: import("../jsmind.js").default;
|
|
14
|
+
/** @type {ScreenshotOptions} */
|
|
15
|
+
options: ScreenshotOptions;
|
|
16
|
+
/** @type {number} */
|
|
17
|
+
dpr: number;
|
|
18
|
+
/** Take a screenshot of the mind map. */
|
|
19
|
+
shoot(): void;
|
|
20
|
+
/**
|
|
21
|
+
* Create canvas for screenshot.
|
|
22
|
+
* @returns {HTMLCanvasElement} Canvas element
|
|
23
|
+
*/
|
|
24
|
+
create_canvas(): HTMLCanvasElement;
|
|
25
|
+
/**
|
|
26
|
+
* Clean up canvas element.
|
|
27
|
+
* @param {HTMLCanvasElement} c - Canvas to remove
|
|
28
|
+
*/
|
|
29
|
+
clear(c: HTMLCanvasElement): void;
|
|
30
|
+
/**
|
|
31
|
+
* Draw background on canvas.
|
|
32
|
+
* @param {CanvasRenderingContext2D} ctx - Canvas context
|
|
33
|
+
* @returns {Promise<CanvasRenderingContext2D>} Promise resolving to context
|
|
34
|
+
*/
|
|
35
|
+
draw_background(ctx: CanvasRenderingContext2D): Promise<CanvasRenderingContext2D>;
|
|
36
|
+
/**
|
|
37
|
+
* Draw connection lines on canvas by copying from view graph.
|
|
38
|
+
* @param {CanvasRenderingContext2D} ctx
|
|
39
|
+
* @returns {Promise<CanvasRenderingContext2D>}
|
|
40
|
+
*/
|
|
41
|
+
draw_lines(ctx: CanvasRenderingContext2D): Promise<CanvasRenderingContext2D>;
|
|
42
|
+
/**
|
|
43
|
+
* Draw node DOM into canvas via SVG snapshot.
|
|
44
|
+
* @param {CanvasRenderingContext2D} ctx
|
|
45
|
+
* @returns {Promise<CanvasRenderingContext2D>}
|
|
46
|
+
*/
|
|
47
|
+
draw_nodes(ctx: CanvasRenderingContext2D): Promise<CanvasRenderingContext2D>;
|
|
48
|
+
/**
|
|
49
|
+
* Draw watermark text on canvas.
|
|
50
|
+
* @param {HTMLCanvasElement} c
|
|
51
|
+
* @param {CanvasRenderingContext2D} ctx
|
|
52
|
+
* @returns {CanvasRenderingContext2D}
|
|
53
|
+
*/
|
|
54
|
+
draw_watermark(c: HTMLCanvasElement, ctx: CanvasRenderingContext2D): CanvasRenderingContext2D;
|
|
55
|
+
/**
|
|
56
|
+
* Load image from URL and resolve img element.
|
|
57
|
+
* @param {string} url
|
|
58
|
+
* @returns {Promise<HTMLImageElement>}
|
|
59
|
+
*/
|
|
60
|
+
load_image(url: string): Promise<HTMLImageElement>;
|
|
61
|
+
/**
|
|
62
|
+
* Trigger download of canvas content as PNG.
|
|
63
|
+
* @param {HTMLCanvasElement} c
|
|
64
|
+
*/
|
|
65
|
+
download(c: HTMLCanvasElement): void;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Screenshot plugin registration.
|
|
69
|
+
* @type {import('../jsmind.plugin.js').Plugin<Partial<ScreenshotOptions>>}
|
|
70
|
+
*/
|
|
71
|
+
export const screenshot_plugin: import("../jsmind.plugin.js").Plugin<Partial<ScreenshotOptions>>;
|
|
72
|
+
export default JmScreenshot;
|
|
73
|
+
/**
|
|
74
|
+
* Default options for screenshot plugin.
|
|
75
|
+
*/
|
|
76
|
+
export type ScreenshotOptions = {
|
|
77
|
+
filename?: string | null;
|
|
78
|
+
watermark?: {
|
|
79
|
+
left?: string | Location;
|
|
80
|
+
right?: string;
|
|
81
|
+
};
|
|
82
|
+
background?: string;
|
|
83
|
+
};
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2020",
|
|
4
|
-
"module": "ESNext",
|
|
5
|
-
"moduleResolution": "node",
|
|
6
|
-
"strict": false,
|
|
7
|
-
"esModuleInterop": true,
|
|
8
|
-
"skipLibCheck": true,
|
|
9
|
-
"declaration": true,
|
|
10
|
-
"emitDeclarationOnly": true,
|
|
11
|
-
"stripInternal": true,
|
|
12
|
-
"allowJs": true,
|
|
13
|
-
"checkJs": false,
|
|
14
|
-
"rootDirs": ["../src"],
|
|
15
|
-
"outDir": "./generated",
|
|
16
|
-
"baseUrl": "."
|
|
17
|
-
},
|
|
18
|
-
"include" : ["../src/**/*.ts", "../src/**/*.js"]
|
|
19
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2020",
|
|
4
|
+
"module": "ESNext",
|
|
5
|
+
"moduleResolution": "node",
|
|
6
|
+
"strict": false,
|
|
7
|
+
"esModuleInterop": true,
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"declaration": true,
|
|
10
|
+
"emitDeclarationOnly": true,
|
|
11
|
+
"stripInternal": true,
|
|
12
|
+
"allowJs": true,
|
|
13
|
+
"checkJs": false,
|
|
14
|
+
"rootDirs": ["../src"],
|
|
15
|
+
"outDir": "./generated",
|
|
16
|
+
"baseUrl": "."
|
|
17
|
+
},
|
|
18
|
+
"include" : ["../src/**/*.ts", "../src/**/*.js"]
|
|
19
|
+
}
|