canvas-can-do 0.1.0 → 0.1.2
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/README.md +101 -0
- package/dist/canvas-can-do.css +1 -0
- package/dist/types/PointerController.d.ts +47 -0
- package/dist/types/PointerController.d.ts.map +1 -0
- package/dist/types/core/history/HistoryManager.d.ts +45 -0
- package/dist/types/core/history/HistoryManager.d.ts.map +1 -0
- package/dist/types/core/layers/LayerHierarchy.d.ts +23 -0
- package/dist/types/core/layers/LayerHierarchy.d.ts.map +1 -0
- package/dist/types/core/math/Vec2.d.ts +6 -0
- package/dist/types/core/math/Vec2.d.ts.map +1 -0
- package/dist/types/core/nodes/BaseNode.d.ts +78 -0
- package/dist/types/core/nodes/BaseNode.d.ts.map +1 -0
- package/dist/types/core/nodes/CircleNode.d.ts +26 -0
- package/dist/types/core/nodes/CircleNode.d.ts.map +1 -0
- package/dist/types/core/nodes/EllipseNode.d.ts +26 -0
- package/dist/types/core/nodes/EllipseNode.d.ts.map +1 -0
- package/dist/types/core/nodes/GroupNode.d.ts +25 -0
- package/dist/types/core/nodes/GroupNode.d.ts.map +1 -0
- package/dist/types/core/nodes/ImageNode.d.ts +54 -0
- package/dist/types/core/nodes/ImageNode.d.ts.map +1 -0
- package/dist/types/core/nodes/LineNode.d.ts +34 -0
- package/dist/types/core/nodes/LineNode.d.ts.map +1 -0
- package/dist/types/core/nodes/RectangleNode.d.ts +29 -0
- package/dist/types/core/nodes/RectangleNode.d.ts.map +1 -0
- package/dist/types/core/nodes/StarNode.d.ts +31 -0
- package/dist/types/core/nodes/StarNode.d.ts.map +1 -0
- package/dist/types/core/nodes/TextNode.d.ts +27 -0
- package/dist/types/core/nodes/TextNode.d.ts.map +1 -0
- package/dist/types/core/nodes/index.d.ts +10 -0
- package/dist/types/core/nodes/index.d.ts.map +1 -0
- package/dist/types/core/nodes/preview/PreviewBase.d.ts +33 -0
- package/dist/types/core/nodes/preview/PreviewBase.d.ts.map +1 -0
- package/dist/types/core/nodes/preview/PreviewEllipse.d.ts +8 -0
- package/dist/types/core/nodes/preview/PreviewEllipse.d.ts.map +1 -0
- package/dist/types/core/nodes/preview/PreviewLine.d.ts +8 -0
- package/dist/types/core/nodes/preview/PreviewLine.d.ts.map +1 -0
- package/dist/types/core/nodes/preview/PreviewRect.d.ts +8 -0
- package/dist/types/core/nodes/preview/PreviewRect.d.ts.map +1 -0
- package/dist/types/core/nodes/preview/PreviewStar.d.ts +6 -0
- package/dist/types/core/nodes/preview/PreviewStar.d.ts.map +1 -0
- package/dist/types/core/nodes/preview/types.d.ts +5 -0
- package/dist/types/core/nodes/preview/types.d.ts.map +1 -0
- package/dist/types/core/selection/LineTransformController.d.ts +12 -0
- package/dist/types/core/selection/LineTransformController.d.ts.map +1 -0
- package/dist/types/core/selection/SelectionManager.d.ts +39 -0
- package/dist/types/core/selection/SelectionManager.d.ts.map +1 -0
- package/dist/types/core/selection/TransformController.d.ts +14 -0
- package/dist/types/core/selection/TransformController.d.ts.map +1 -0
- package/dist/types/core/ui/RulerOverlay.d.ts +18 -0
- package/dist/types/core/ui/RulerOverlay.d.ts.map +1 -0
- package/dist/types/demo/main.d.ts +2 -0
- package/dist/types/demo/main.d.ts.map +1 -0
- package/dist/types/events.d.ts +15 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/index.d.ts +85 -0
- package/dist/types/index.d.ts.map +1 -0
- package/package.json +6 -5
- package/dist/ccd.css +0 -87
package/README.md
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Canvas Can Do
|
|
2
|
+
|
|
3
|
+
Transform-based vector graphics editor engine for the web (PixiJS).
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install canvas-can-do pixi.js
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Quick Start
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import { CCDApp } from 'canvas-can-do';
|
|
15
|
+
|
|
16
|
+
const app = new CCDApp();
|
|
17
|
+
await app.init(document.getElementById('editor')!);
|
|
18
|
+
|
|
19
|
+
app.useTool('select');
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Key Features
|
|
23
|
+
|
|
24
|
+
- Shapes: rectangle, ellipse, line, star, text, image
|
|
25
|
+
- Transform tools: move, resize, rotate, multi-select
|
|
26
|
+
- Shift to constrain resize ratio
|
|
27
|
+
- Undo/redo (Ctrl/Cmd+Z, Ctrl/Cmd+Shift+Z, Ctrl/Cmd+Y)
|
|
28
|
+
- Export: PNG/JPG/SVG (all objects or selection)
|
|
29
|
+
- Save/Load: JSON with embedded image data URLs
|
|
30
|
+
- Rulers with pan/zoom indicators
|
|
31
|
+
|
|
32
|
+
## API Highlights
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
// Tools
|
|
36
|
+
app.useTool('rectangle');
|
|
37
|
+
|
|
38
|
+
// Export raster (PNG/JPG)
|
|
39
|
+
const png = await app.exportRaster({ type: 'png', scope: 'all' });
|
|
40
|
+
|
|
41
|
+
// Export SVG (embed images)
|
|
42
|
+
const svg = await app.exportSVG({
|
|
43
|
+
scope: 'selection',
|
|
44
|
+
imageEmbed: 'display', // 'original' | 'display' | 'max'
|
|
45
|
+
imageMaxEdge: 2048,
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
// Save/Load JSON (embedded images)
|
|
49
|
+
const doc = await app.exportJSON();
|
|
50
|
+
if (doc) await app.importJSON(doc);
|
|
51
|
+
|
|
52
|
+
// Access Pixi Application
|
|
53
|
+
const pixiApp = app.getPixiApp();
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Export Options
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
// Raster
|
|
60
|
+
exportRaster({
|
|
61
|
+
type: 'png' | 'jpg',
|
|
62
|
+
scope: 'all' | 'selection',
|
|
63
|
+
quality?: number, // for JPG
|
|
64
|
+
padding?: number, // extra pixels around bounds
|
|
65
|
+
background?: string, // e.g. '#ffffff'
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// SVG
|
|
69
|
+
exportSVG({
|
|
70
|
+
scope: 'all' | 'selection',
|
|
71
|
+
padding?: number,
|
|
72
|
+
background?: string,
|
|
73
|
+
imageEmbed?: 'original' | 'display' | 'max',
|
|
74
|
+
imageMaxEdge?: number,
|
|
75
|
+
});
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Events
|
|
79
|
+
|
|
80
|
+
```ts
|
|
81
|
+
editor.addEventListener('tool:changed', (e) => {
|
|
82
|
+
console.log(e.detail.tool);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
editor.addEventListener('layer:changed', (e) => {
|
|
86
|
+
console.log(e.detail.hierarchy);
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
editor.addEventListener('viewport:changed', (e) => {
|
|
90
|
+
console.log(e.detail); // { x, y, zoom, source }
|
|
91
|
+
});
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Notes
|
|
95
|
+
|
|
96
|
+
- Image sources are stored as **data URLs** for portability.
|
|
97
|
+
- Importing JSON resets pan/zoom to defaults.
|
|
98
|
+
|
|
99
|
+
## License
|
|
100
|
+
|
|
101
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ccd-host,.ccd-cursor-default{cursor:default}.ccd-cursor-crosshair{cursor:crosshair}.ccd-cursor-text{cursor:text}.ccd-cursor-move{cursor:move}.ccd-cursor-grab{cursor:grab}.ccd-cursor-grabbing{cursor:grabbing}.ccd-cursor-resize-n{cursor:n-resize}.ccd-cursor-resize-s{cursor:s-resize}.ccd-cursor-resize-e{cursor:e-resize}.ccd-cursor-resize-w{cursor:w-resize}.ccd-cursor-resize-nw{cursor:nw-resize}.ccd-cursor-resize-ne{cursor:ne-resize}.ccd-cursor-resize-sw{cursor:sw-resize}.ccd-cursor-resize-se{cursor:se-resize}.ccd-cursor-rotate{cursor:alias}.ccd-cursor-zoom-in{cursor:zoom-in}.ccd-cursor-zoom-out{cursor:zoom-out}.ccd-cursor-not-allowed{cursor:not-allowed}.ccd-cursor-precision{cursor:cell}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { BaseNode } from './core/nodes/BaseNode';
|
|
2
|
+
import type { ToolName } from './index';
|
|
3
|
+
import { Container } from 'pixi.js';
|
|
4
|
+
import { Application } from 'pixi.js';
|
|
5
|
+
export declare class PointerController {
|
|
6
|
+
private preview;
|
|
7
|
+
private activeTool;
|
|
8
|
+
private previewLayer;
|
|
9
|
+
private objectLayer;
|
|
10
|
+
private selectionManager;
|
|
11
|
+
private clipboard;
|
|
12
|
+
private onLayerChanged;
|
|
13
|
+
private isPanning;
|
|
14
|
+
private lastPan?;
|
|
15
|
+
private app?;
|
|
16
|
+
private world?;
|
|
17
|
+
private eventTarget;
|
|
18
|
+
private activeTextInput?;
|
|
19
|
+
private onHistoryCapture?;
|
|
20
|
+
constructor(previewLayer: Container, objectLayer: Container, toolsLayer: Container, onLayerChanged: () => void, app?: Application, world?: Container, onHistoryCapture?: () => void | Promise<void>);
|
|
21
|
+
addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
|
|
22
|
+
removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
|
|
23
|
+
dispatchEvent(event: Event): boolean;
|
|
24
|
+
clearSelection(): void;
|
|
25
|
+
getSelectedNodes(): BaseNode[];
|
|
26
|
+
getSelectionBounds(): {
|
|
27
|
+
x: number;
|
|
28
|
+
y: number;
|
|
29
|
+
width: number;
|
|
30
|
+
height: number;
|
|
31
|
+
} | null;
|
|
32
|
+
handleKeyDown(e: KeyboardEvent): void;
|
|
33
|
+
private cloneNode;
|
|
34
|
+
handleKeyUp(e: KeyboardEvent): void;
|
|
35
|
+
setTool(tool: ToolName): void;
|
|
36
|
+
onPointerDown(e: PointerEvent): void;
|
|
37
|
+
onDoubleClick(e: MouseEvent): void;
|
|
38
|
+
onPointerMove(e: PointerEvent): void;
|
|
39
|
+
onPointerUp(e: PointerEvent): void;
|
|
40
|
+
cancel(): void;
|
|
41
|
+
private setCursor;
|
|
42
|
+
private toGlobalPoint;
|
|
43
|
+
private toWorldPoint;
|
|
44
|
+
private findHitObject;
|
|
45
|
+
private beginTextEdit;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=PointerController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PointerController.d.ts","sourceRoot":"","sources":["../../src/PointerController.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,SAAS,EAAS,MAAM,SAAS,CAAC;AAM3C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,UAAU,CAAsB;IAGxC,OAAO,CAAC,YAAY,CAAY;IAGhC,OAAO,CAAC,WAAW,CAAY;IAE/B,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAQ;IACxB,OAAO,CAAC,GAAG,CAAC,CAAc;IAC1B,OAAO,CAAC,KAAK,CAAC,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,eAAe,CAAC,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAC,CAA6B;gBAGpD,YAAY,EAAE,SAAS,EACvB,WAAW,EAAE,SAAS,EACtB,UAAU,EAAE,SAAS,EACrB,cAAc,EAAE,MAAM,IAAI,EAC1B,GAAG,CAAC,EAAE,WAAW,EACjB,KAAK,CAAC,EAAE,SAAS,EACjB,gBAAgB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/C,gBAAgB,CACd,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,kCAAkC,EAC5C,OAAO,CAAC,EAAE,OAAO,GAAG,uBAAuB;IAK7C,mBAAmB,CACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,kCAAkC,EAC5C,OAAO,CAAC,EAAE,OAAO,GAAG,oBAAoB;IAK1C,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAIpC,cAAc;IAId,gBAAgB;IAIhB,kBAAkB;;;;;;IAKlB,aAAa,CAAC,CAAC,EAAE,aAAa;IAyH9B,OAAO,CAAC,SAAS;IAQjB,WAAW,CAAC,CAAC,EAAE,aAAa;IAoB5B,OAAO,CAAC,IAAI,EAAE,QAAQ;IA0BtB,aAAa,CAAC,CAAC,EAAE,YAAY;IAsC7B,aAAa,CAAC,CAAC,EAAE,UAAU;IAW3B,aAAa,CAAC,CAAC,EAAE,YAAY;IA2D7B,WAAW,CAAC,CAAC,EAAE,YAAY;IAoI3B,MAAM;IAQN,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,aAAa;IAsCrB,OAAO,CAAC,aAAa;CAqEtB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Container } from 'pixi.js';
|
|
2
|
+
import { BaseNode } from '../nodes/BaseNode';
|
|
3
|
+
import type { Style } from '../nodes/BaseNode';
|
|
4
|
+
export type SerializedNode = {
|
|
5
|
+
id: string;
|
|
6
|
+
type: BaseNode['type'];
|
|
7
|
+
name: string;
|
|
8
|
+
visible: boolean;
|
|
9
|
+
locked: boolean;
|
|
10
|
+
x: number;
|
|
11
|
+
y: number;
|
|
12
|
+
rotation: number;
|
|
13
|
+
scale: {
|
|
14
|
+
x: number;
|
|
15
|
+
y: number;
|
|
16
|
+
};
|
|
17
|
+
style: Style;
|
|
18
|
+
width?: number;
|
|
19
|
+
height?: number;
|
|
20
|
+
data?: Record<string, any>;
|
|
21
|
+
children?: SerializedNode[];
|
|
22
|
+
};
|
|
23
|
+
export type SceneDocument = {
|
|
24
|
+
version: 1;
|
|
25
|
+
nodes: SerializedNode[];
|
|
26
|
+
};
|
|
27
|
+
export declare class HistoryManager {
|
|
28
|
+
private undoStack;
|
|
29
|
+
private redoStack;
|
|
30
|
+
private lastSnapshotKey;
|
|
31
|
+
private objectLayer;
|
|
32
|
+
constructor(objectLayer: Container);
|
|
33
|
+
capture(): Promise<void>;
|
|
34
|
+
undo(): Promise<void>;
|
|
35
|
+
redo(): Promise<void>;
|
|
36
|
+
private serializeScene;
|
|
37
|
+
exportDocument(): Promise<SceneDocument>;
|
|
38
|
+
importDocument(doc: SceneDocument): Promise<void>;
|
|
39
|
+
hasContent(): boolean;
|
|
40
|
+
clearDocument(): Promise<void>;
|
|
41
|
+
private serializeNode;
|
|
42
|
+
private restore;
|
|
43
|
+
private deserializeNode;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=HistoryManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HistoryManager.d.ts","sourceRoot":"","sources":["../../../../src/core/history/HistoryManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAU/C,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAChC,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B,CAAC;AAMF,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,CAAC,CAAC;IACX,KAAK,EAAE,cAAc,EAAE,CAAC;CACzB,CAAC;AAEF,qBAAa,cAAc;IACzB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,eAAe,CAAM;IAE7B,OAAO,CAAC,WAAW,CAAY;gBAEnB,WAAW,EAAE,SAAS;IAI5B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IASxB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAQb,cAAc;IAOtB,cAAc,IAAI,OAAO,CAAC,aAAa,CAAC;IAKxC,cAAc,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvD,UAAU,IAAI,OAAO;IAIf,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAQpC,OAAO,CAAC,aAAa;YAyEP,OAAO;YAUP,eAAe;CAoI9B"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Container } from 'pixi.js';
|
|
2
|
+
export interface LayerNode {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
name: string;
|
|
6
|
+
visible: boolean;
|
|
7
|
+
locked: boolean;
|
|
8
|
+
children?: LayerNode[];
|
|
9
|
+
}
|
|
10
|
+
export declare class LayerHierarchy {
|
|
11
|
+
private static generateLayerName;
|
|
12
|
+
static getHierarchy(container: Container): LayerNode;
|
|
13
|
+
}
|
|
14
|
+
export type LayerHierarchyChangedEvent = CustomEvent<{
|
|
15
|
+
hierarchy: LayerNode;
|
|
16
|
+
selectedIds?: string[];
|
|
17
|
+
}>;
|
|
18
|
+
declare global {
|
|
19
|
+
interface WindowEventMap {
|
|
20
|
+
'layer:changed': LayerHierarchyChangedEvent;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=LayerHierarchy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LayerHierarchy.d.ts","sourceRoot":"","sources":["../../../../src/core/layers/LayerHierarchy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAIpC,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;CACxB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAahC,MAAM,CAAC,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,SAAS;CAsCrD;AAGD,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAC;IACnD,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC,CAAC;AAEH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc;QACtB,eAAe,EAAE,0BAA0B,CAAC;KAC7C;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Vec2.d.ts","sourceRoot":"","sources":["../../../../src/core/math/Vec2.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,wBAAgB,IAAI,CAAC,CAAC,SAAI,EAAE,CAAC,SAAI,GAAG,IAAI,CAEvC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { Container } from 'pixi.js';
|
|
2
|
+
import type { TextStyleFontWeight } from 'pixi.js';
|
|
3
|
+
export type NodeType = 'rectangle' | 'circle' | 'text' | 'line' | 'ellipse' | 'star' | 'image' | 'group';
|
|
4
|
+
export type PropertyType = 'string' | 'int' | 'float' | 'color' | 'boolean';
|
|
5
|
+
export interface NodePropertyDescriptor {
|
|
6
|
+
name: string;
|
|
7
|
+
key: string;
|
|
8
|
+
type: PropertyType;
|
|
9
|
+
value: string | number | boolean | null;
|
|
10
|
+
desc?: string;
|
|
11
|
+
min?: number;
|
|
12
|
+
max?: number;
|
|
13
|
+
step?: number;
|
|
14
|
+
}
|
|
15
|
+
export interface InspectableNode {
|
|
16
|
+
id: string;
|
|
17
|
+
type: NodeType;
|
|
18
|
+
name: string;
|
|
19
|
+
props: NodePropertyDescriptor[];
|
|
20
|
+
}
|
|
21
|
+
export type PropertiesChangedEvent = CustomEvent<{
|
|
22
|
+
nodes: InspectableNode[];
|
|
23
|
+
}>;
|
|
24
|
+
export interface Style {
|
|
25
|
+
fill?: string;
|
|
26
|
+
stroke?: string;
|
|
27
|
+
strokeWidth?: number;
|
|
28
|
+
opacity?: number;
|
|
29
|
+
fontSize?: number;
|
|
30
|
+
fontFamily?: string;
|
|
31
|
+
fontWeight?: TextStyleFontWeight;
|
|
32
|
+
fontStyle?: 'normal' | 'italic' | 'oblique';
|
|
33
|
+
}
|
|
34
|
+
export declare class BaseNode extends Container {
|
|
35
|
+
readonly id: string;
|
|
36
|
+
readonly type: NodeType;
|
|
37
|
+
name: string;
|
|
38
|
+
style: Style;
|
|
39
|
+
locked: boolean;
|
|
40
|
+
protected _width: number;
|
|
41
|
+
protected _height: number;
|
|
42
|
+
constructor(options: {
|
|
43
|
+
id?: string;
|
|
44
|
+
type: NodeType;
|
|
45
|
+
name?: string;
|
|
46
|
+
x?: number;
|
|
47
|
+
y?: number;
|
|
48
|
+
rotation?: number;
|
|
49
|
+
scale?: number | {
|
|
50
|
+
x: number;
|
|
51
|
+
y: number;
|
|
52
|
+
};
|
|
53
|
+
style?: Style;
|
|
54
|
+
visible?: boolean;
|
|
55
|
+
locked?: boolean;
|
|
56
|
+
});
|
|
57
|
+
protected defaultNameForType(type: NodeType): string;
|
|
58
|
+
get width(): number;
|
|
59
|
+
set width(value: number);
|
|
60
|
+
get height(): number;
|
|
61
|
+
set height(value: number);
|
|
62
|
+
setPosition(x: number, y: number): this;
|
|
63
|
+
setScale(sx: number, sy?: number): this;
|
|
64
|
+
setRotation(rad: number): this;
|
|
65
|
+
setPivot(x: number, y: number): this;
|
|
66
|
+
translate(x: number, y: number): this;
|
|
67
|
+
resetTransform(): this;
|
|
68
|
+
clone(_offsetX?: number, _offsetY?: number): BaseNode;
|
|
69
|
+
protected toColorString(color: string | number | undefined): string | null;
|
|
70
|
+
getProps(): NodePropertyDescriptor[];
|
|
71
|
+
getInspectable(): InspectableNode;
|
|
72
|
+
}
|
|
73
|
+
declare global {
|
|
74
|
+
interface WindowEventMap {
|
|
75
|
+
'properties:changed': PropertiesChangedEvent;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=BaseNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BaseNode.d.ts","sourceRoot":"","sources":["../../../../src/core/nodes/BaseNode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Graphics } from 'pixi.js';
|
|
2
|
+
import { BaseNode } from './BaseNode';
|
|
3
|
+
import type { Style, NodePropertyDescriptor } from './BaseNode';
|
|
4
|
+
export declare class CircleNode extends BaseNode {
|
|
5
|
+
readonly type: "circle";
|
|
6
|
+
radius: number;
|
|
7
|
+
protected graphics: Graphics;
|
|
8
|
+
constructor(options: {
|
|
9
|
+
id?: string;
|
|
10
|
+
radius: number;
|
|
11
|
+
x?: number;
|
|
12
|
+
y?: number;
|
|
13
|
+
rotation?: number;
|
|
14
|
+
scale?: number | {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
};
|
|
18
|
+
style?: Style;
|
|
19
|
+
visible?: boolean;
|
|
20
|
+
locked?: boolean;
|
|
21
|
+
});
|
|
22
|
+
protected redraw(): void;
|
|
23
|
+
setStyle(style: Partial<Style>): this;
|
|
24
|
+
getProps(): NodePropertyDescriptor[];
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=CircleNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CircleNode.d.ts","sourceRoot":"","sources":["../../../../src/core/nodes/CircleNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEhE,qBAAa,UAAW,SAAQ,QAAQ;IACtC,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAEjB,OAAO,EAAE;QACnB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB;IAuBD,SAAS,CAAC,MAAM,IAAI,IAAI;IA8BxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;IAMrC,QAAQ,IAAI,sBAAsB,EAAE;CAarC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Graphics } from 'pixi.js';
|
|
2
|
+
import { BaseNode } from './BaseNode';
|
|
3
|
+
import type { Style } from './BaseNode';
|
|
4
|
+
export declare class EllipseNode extends BaseNode {
|
|
5
|
+
readonly type: "ellipse";
|
|
6
|
+
protected graphics: Graphics;
|
|
7
|
+
constructor(options: {
|
|
8
|
+
id?: string;
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
x?: number;
|
|
12
|
+
y?: number;
|
|
13
|
+
rotation?: number;
|
|
14
|
+
scale?: number | {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
};
|
|
18
|
+
style?: Style;
|
|
19
|
+
visible?: boolean;
|
|
20
|
+
locked?: boolean;
|
|
21
|
+
});
|
|
22
|
+
protected redraw(): void;
|
|
23
|
+
setStyle(style: Partial<Style>): this;
|
|
24
|
+
clone(offsetX?: number, offsetY?: number): EllipseNode;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=EllipseNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EllipseNode.d.ts","sourceRoot":"","sources":["../../../../src/core/nodes/EllipseNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,WAAY,SAAQ,QAAQ;IACvC,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAEjB,OAAO,EAAE;QACnB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB;IAsBD,SAAS,CAAC,MAAM,IAAI,IAAI;IA8BxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;IAMrC,KAAK,CAAC,OAAO,SAAI,EAAE,OAAO,SAAI,GAAG,WAAW;CAa7C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { BaseNode } from './BaseNode';
|
|
2
|
+
import type { Style } from './BaseNode';
|
|
3
|
+
export declare class GroupNode extends BaseNode {
|
|
4
|
+
readonly type: "group";
|
|
5
|
+
constructor(options: {
|
|
6
|
+
id?: string;
|
|
7
|
+
children: BaseNode[];
|
|
8
|
+
x?: number;
|
|
9
|
+
y?: number;
|
|
10
|
+
rotation?: number;
|
|
11
|
+
scale?: number | {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
};
|
|
15
|
+
style?: Style;
|
|
16
|
+
visible?: boolean;
|
|
17
|
+
locked?: boolean;
|
|
18
|
+
});
|
|
19
|
+
get width(): number;
|
|
20
|
+
get height(): number;
|
|
21
|
+
set width(value: number);
|
|
22
|
+
set height(value: number);
|
|
23
|
+
clone(offsetX?: number, offsetY?: number): GroupNode;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=GroupNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupNode.d.ts","sourceRoot":"","sources":["../../../../src/core/nodes/GroupNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,qBAAa,SAAU,SAAQ,QAAQ;IACrC,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;gBAErB,OAAO,EAAE;QACnB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,QAAQ,EAAE,CAAC;QACrB,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB;IAyBD,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAGD,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAItB;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAIvB;IAED,KAAK,CAAC,OAAO,SAAI,EAAE,OAAO,SAAI,GAAG,SAAS;CAgB3C"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { Sprite, Texture } from 'pixi.js';
|
|
2
|
+
import { BaseNode } from './BaseNode';
|
|
3
|
+
import type { Style, NodePropertyDescriptor } from './BaseNode';
|
|
4
|
+
export type ImageSource = string | File | Blob;
|
|
5
|
+
export declare class ImageNode extends BaseNode {
|
|
6
|
+
readonly type: "image";
|
|
7
|
+
protected sprite: Sprite;
|
|
8
|
+
source?: ImageSource;
|
|
9
|
+
constructor(options: {
|
|
10
|
+
id?: string;
|
|
11
|
+
texture: Texture;
|
|
12
|
+
source?: ImageSource;
|
|
13
|
+
width?: number;
|
|
14
|
+
height?: number;
|
|
15
|
+
x?: number;
|
|
16
|
+
y?: number;
|
|
17
|
+
rotation?: number;
|
|
18
|
+
scale?: number | {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
};
|
|
22
|
+
style?: Style;
|
|
23
|
+
visible?: boolean;
|
|
24
|
+
locked?: boolean;
|
|
25
|
+
});
|
|
26
|
+
static fromSource(options: {
|
|
27
|
+
source: ImageSource;
|
|
28
|
+
x?: number;
|
|
29
|
+
y?: number;
|
|
30
|
+
width?: number;
|
|
31
|
+
height?: number;
|
|
32
|
+
rotation?: number;
|
|
33
|
+
scale?: number | {
|
|
34
|
+
x: number;
|
|
35
|
+
y: number;
|
|
36
|
+
};
|
|
37
|
+
style?: Style;
|
|
38
|
+
visible?: boolean;
|
|
39
|
+
locked?: boolean;
|
|
40
|
+
}): Promise<ImageNode>;
|
|
41
|
+
private static prepareSource;
|
|
42
|
+
private static toDataUrl;
|
|
43
|
+
private static blobToDataUrl;
|
|
44
|
+
private static loadImage;
|
|
45
|
+
protected redraw(): void;
|
|
46
|
+
get width(): number;
|
|
47
|
+
set width(value: number);
|
|
48
|
+
get height(): number;
|
|
49
|
+
set height(value: number);
|
|
50
|
+
setStyle(style: Partial<Style>): this;
|
|
51
|
+
getProps(): NodePropertyDescriptor[];
|
|
52
|
+
clone(offsetX?: number, offsetY?: number): ImageNode;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=ImageNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ImageNode.d.ts","sourceRoot":"","sources":["../../../../src/core/nodes/ImageNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEhE,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAE/C,qBAAa,SAAU,SAAQ,QAAQ;IACrC,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,WAAW,CAAC;gBAET,OAAO,EAAE;QACnB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB;WA6BY,UAAU,CAAC,OAAO,EAAE;QAC/B,MAAM,EAAE,WAAW,CAAC;QACpB,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB,GAAG,OAAO,CAAC,SAAS,CAAC;mBAkBD,aAAa;mBAOb,SAAS;IAW9B,OAAO,CAAC,MAAM,CAAC,aAAa;IAS5B,OAAO,CAAC,MAAM,CAAC,SAAS;IAUxB,SAAS,CAAC,MAAM,IAAI,IAAI;IAKxB,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,EAGtB;IAED,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAGvB;IAED,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;IAKrC,QAAQ,IAAI,sBAAsB,EAAE;IAapC,KAAK,CAAC,OAAO,SAAI,EAAE,OAAO,SAAI,GAAG,SAAS;CAe3C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Graphics } from 'pixi.js';
|
|
2
|
+
import { BaseNode } from './BaseNode';
|
|
3
|
+
import type { Style, NodePropertyDescriptor } from './BaseNode';
|
|
4
|
+
export declare class LineNode extends BaseNode {
|
|
5
|
+
readonly type: "line";
|
|
6
|
+
protected graphics: Graphics;
|
|
7
|
+
startX: number;
|
|
8
|
+
startY: number;
|
|
9
|
+
endX: number;
|
|
10
|
+
endY: number;
|
|
11
|
+
constructor(options: {
|
|
12
|
+
id?: string;
|
|
13
|
+
startX: number;
|
|
14
|
+
startY: number;
|
|
15
|
+
endX: number;
|
|
16
|
+
endY: number;
|
|
17
|
+
x?: number;
|
|
18
|
+
y?: number;
|
|
19
|
+
rotation?: number;
|
|
20
|
+
scale?: number | {
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
};
|
|
24
|
+
style?: Style;
|
|
25
|
+
visible?: boolean;
|
|
26
|
+
locked?: boolean;
|
|
27
|
+
});
|
|
28
|
+
protected redraw(): void;
|
|
29
|
+
setStyle(style: Partial<Style>): this;
|
|
30
|
+
refresh(): void;
|
|
31
|
+
getProps(): NodePropertyDescriptor[];
|
|
32
|
+
clone(offsetX?: number, offsetY?: number): LineNode;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=LineNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LineNode.d.ts","sourceRoot":"","sources":["../../../../src/core/nodes/LineNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEhE,qBAAa,QAAS,SAAQ,QAAQ;IACpC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;gBAED,OAAO,EAAE;QACnB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB;IAgCD,SAAS,CAAC,MAAM,IAAI,IAAI;IA0BxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;IAOrC,OAAO,IAAI,IAAI;IAIf,QAAQ,IAAI,sBAAsB,EAAE;IAcpC,KAAK,CAAC,OAAO,SAAI,EAAE,OAAO,SAAI,GAAG,QAAQ;CAiB1C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Graphics } from 'pixi.js';
|
|
2
|
+
import { BaseNode } from './BaseNode';
|
|
3
|
+
import type { Style, NodePropertyDescriptor } from './BaseNode';
|
|
4
|
+
export declare class RectangleNode extends BaseNode {
|
|
5
|
+
readonly type: "rectangle";
|
|
6
|
+
cornerRadius?: number;
|
|
7
|
+
protected graphics: Graphics;
|
|
8
|
+
constructor(options: {
|
|
9
|
+
id?: string;
|
|
10
|
+
width: number;
|
|
11
|
+
height: number;
|
|
12
|
+
cornerRadius?: number;
|
|
13
|
+
x?: number;
|
|
14
|
+
y?: number;
|
|
15
|
+
rotation?: number;
|
|
16
|
+
scale?: number | {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
};
|
|
20
|
+
style?: Style;
|
|
21
|
+
visible?: boolean;
|
|
22
|
+
locked?: boolean;
|
|
23
|
+
});
|
|
24
|
+
protected redraw(): void;
|
|
25
|
+
setStyle(style: Partial<Style>): this;
|
|
26
|
+
getProps(): NodePropertyDescriptor[];
|
|
27
|
+
clone(offsetX?: number, offsetY?: number): RectangleNode;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=RectangleNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RectangleNode.d.ts","sourceRoot":"","sources":["../../../../src/core/nodes/RectangleNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEhE,qBAAa,aAAc,SAAQ,QAAQ;IACzC,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAU;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;gBAEjB,OAAO,EAAE;QACnB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB;IAuBD,SAAS,CAAC,MAAM,IAAI,IAAI;IAqCxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;IAMrC,QAAQ,IAAI,sBAAsB,EAAE;IAcpC,KAAK,CAAC,OAAO,SAAI,EAAE,OAAO,SAAI,GAAG,aAAa;CAc/C"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { Graphics } from 'pixi.js';
|
|
2
|
+
import { BaseNode } from './BaseNode';
|
|
3
|
+
import type { Style, NodePropertyDescriptor } from './BaseNode';
|
|
4
|
+
export declare class StarNode extends BaseNode {
|
|
5
|
+
readonly type: "star";
|
|
6
|
+
protected graphics: Graphics;
|
|
7
|
+
points: number;
|
|
8
|
+
innerRadius: number;
|
|
9
|
+
outerRadius: number;
|
|
10
|
+
constructor(options: {
|
|
11
|
+
id?: string;
|
|
12
|
+
points: number;
|
|
13
|
+
innerRadius: number;
|
|
14
|
+
outerRadius: number;
|
|
15
|
+
x?: number;
|
|
16
|
+
y?: number;
|
|
17
|
+
rotation?: number;
|
|
18
|
+
scale?: number | {
|
|
19
|
+
x: number;
|
|
20
|
+
y: number;
|
|
21
|
+
};
|
|
22
|
+
style?: Style;
|
|
23
|
+
visible?: boolean;
|
|
24
|
+
locked?: boolean;
|
|
25
|
+
});
|
|
26
|
+
protected redraw(): void;
|
|
27
|
+
setStyle(style: Partial<Style>): this;
|
|
28
|
+
getProps(): NodePropertyDescriptor[];
|
|
29
|
+
clone(offsetX?: number, offsetY?: number): StarNode;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=StarNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StarNode.d.ts","sourceRoot":"","sources":["../../../../src/core/nodes/StarNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEhE,qBAAa,QAAS,SAAQ,QAAQ;IACpC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;gBAER,OAAO,EAAE;QACnB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB;IA2BD,SAAS,CAAC,MAAM,IAAI,IAAI;IAsDxB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;IAMrC,QAAQ,IAAI,sBAAsB,EAAE;IA+BpC,KAAK,CAAC,OAAO,SAAI,EAAE,OAAO,SAAI,GAAG,QAAQ;CAc1C"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Text } from 'pixi.js';
|
|
2
|
+
import { BaseNode } from './BaseNode';
|
|
3
|
+
import type { Style, NodePropertyDescriptor } from './BaseNode';
|
|
4
|
+
export declare class TextNode extends BaseNode {
|
|
5
|
+
readonly type: "text";
|
|
6
|
+
protected textSprite: Text;
|
|
7
|
+
text: string;
|
|
8
|
+
constructor(options: {
|
|
9
|
+
id?: string;
|
|
10
|
+
text: string;
|
|
11
|
+
x?: number;
|
|
12
|
+
y?: number;
|
|
13
|
+
rotation?: number;
|
|
14
|
+
scale?: number | {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
};
|
|
18
|
+
style?: Style;
|
|
19
|
+
visible?: boolean;
|
|
20
|
+
locked?: boolean;
|
|
21
|
+
});
|
|
22
|
+
setText(text: string): this;
|
|
23
|
+
setStyle(style: Partial<Style>): this;
|
|
24
|
+
getProps(): NodePropertyDescriptor[];
|
|
25
|
+
clone(offsetX?: number, offsetY?: number): TextNode;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=TextNode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextNode.d.ts","sourceRoot":"","sources":["../../../../src/core/nodes/TextNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,KAAK,EAAE,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAEhE,qBAAa,QAAS,SAAQ,QAAQ;IACpC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAChC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC;gBAED,OAAO,EAAE;QACnB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,CAAC,CAAC,EAAE,MAAM,CAAC;QACX,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,MAAM,GAAG;YAAE,CAAC,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,KAAK,CAAC,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;KAClB;IAuCD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAQ3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI;IAuBrC,QAAQ,IAAI,sBAAsB,EAAE;IA0CpC,KAAK,CAAC,OAAO,SAAI,EAAE,OAAO,SAAI,GAAG,QAAQ;CAY1C"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './BaseNode';
|
|
2
|
+
export * from './RectangleNode';
|
|
3
|
+
export * from './CircleNode';
|
|
4
|
+
export * from './TextNode';
|
|
5
|
+
export * from './ImageNode';
|
|
6
|
+
export * from './LineNode';
|
|
7
|
+
export * from './EllipseNode';
|
|
8
|
+
export * from './StarNode';
|
|
9
|
+
export type { NodePropertyDescriptor, InspectableNode, PropertyType, PropertiesChangedEvent } from './BaseNode';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/nodes/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,YAAY,EAAE,sBAAsB,EAAE,eAAe,EAAE,YAAY,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Graphics, Container } from 'pixi.js';
|
|
2
|
+
type Point = {
|
|
3
|
+
x: number;
|
|
4
|
+
y: number;
|
|
5
|
+
};
|
|
6
|
+
export declare abstract class PreviewBase {
|
|
7
|
+
protected g: Graphics;
|
|
8
|
+
protected active: boolean;
|
|
9
|
+
start: Point;
|
|
10
|
+
last: Point;
|
|
11
|
+
protected previewLayer: Container;
|
|
12
|
+
constructor(previewLayer: Container);
|
|
13
|
+
begin(start: Point): void;
|
|
14
|
+
update(curr: Point): void;
|
|
15
|
+
end(): {
|
|
16
|
+
x: number;
|
|
17
|
+
y: number;
|
|
18
|
+
w: number;
|
|
19
|
+
h: number;
|
|
20
|
+
} | null;
|
|
21
|
+
cancel(): void;
|
|
22
|
+
get graphics(): Graphics;
|
|
23
|
+
protected abstract redraw(start: Point, end: Point): void;
|
|
24
|
+
protected getRect(): {
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
w: number;
|
|
28
|
+
h: number;
|
|
29
|
+
};
|
|
30
|
+
protected clear(): void;
|
|
31
|
+
}
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=PreviewBase.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewBase.d.ts","sourceRoot":"","sources":["../../../../../src/core/nodes/preview/PreviewBase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAE9C,KAAK,KAAK,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC,8BAAsB,WAAW;IAC/B,SAAS,CAAC,CAAC,WAAkB;IAC7B,SAAS,CAAC,MAAM,UAAS;IACzB,KAAK,EAAE,KAAK,CAAkB;IAC9B,IAAI,EAAE,KAAK,CAAkB;IAC7B,SAAS,CAAC,YAAY,EAAE,SAAS,CAAC;gBAEtB,YAAY,EAAE,SAAS;IAInC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAQzB,MAAM,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI;IAMzB,GAAG,IAAI;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAO5D,MAAM,IAAI,IAAI;IAMd,IAAI,QAAQ,aAEX;IAED,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IAEzD,SAAS,CAAC,OAAO;;;;;;IAQjB,SAAS,CAAC,KAAK,IAAI,IAAI;CAMxB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PreviewBase } from './PreviewBase';
|
|
2
|
+
import type { Point } from './types';
|
|
3
|
+
export declare class PreviewEllipse extends PreviewBase {
|
|
4
|
+
private shiftKey;
|
|
5
|
+
setShiftKey(pressed: boolean): void;
|
|
6
|
+
protected redraw(a: Point, b: Point): void;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=PreviewEllipse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewEllipse.d.ts","sourceRoot":"","sources":["../../../../../src/core/nodes/preview/PreviewEllipse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,cAAe,SAAQ,WAAW;IAC7C,OAAO,CAAC,QAAQ,CAAS;IAEzB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOnC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI;CA4B3C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PreviewBase } from './PreviewBase';
|
|
2
|
+
import type { Point } from './types';
|
|
3
|
+
export declare class PreviewLine extends PreviewBase {
|
|
4
|
+
private shiftKey;
|
|
5
|
+
setShiftKey(pressed: boolean): void;
|
|
6
|
+
protected redraw(a: Point, b: Point): void;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=PreviewLine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewLine.d.ts","sourceRoot":"","sources":["../../../../../src/core/nodes/preview/PreviewLine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,WAAY,SAAQ,WAAW;IAC1C,OAAO,CAAC,QAAQ,CAAS;IAEzB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOnC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI;CAsB3C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { PreviewBase } from './PreviewBase';
|
|
2
|
+
import type { Point } from './types';
|
|
3
|
+
export declare class PreviewRect extends PreviewBase {
|
|
4
|
+
private shiftKey;
|
|
5
|
+
setShiftKey(pressed: boolean): void;
|
|
6
|
+
protected redraw(a: Point, b: Point): void;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=PreviewRect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewRect.d.ts","sourceRoot":"","sources":["../../../../../src/core/nodes/preview/PreviewRect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,WAAY,SAAQ,WAAW;IAC1C,OAAO,CAAC,QAAQ,CAAS;IAEzB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAOnC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,GAAG,IAAI;CAyB3C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewStar.d.ts","sourceRoot":"","sources":["../../../../../src/core/nodes/preview/PreviewStar.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,qBAAa,WAAY,SAAQ,WAAW;IAC1C,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI;CA2BnD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/core/nodes/preview/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG;IAClB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Point } from 'pixi.js';
|
|
2
|
+
import type { LineNode } from '../nodes/LineNode';
|
|
3
|
+
export declare class LineTransformController {
|
|
4
|
+
private activeNode;
|
|
5
|
+
private startPoint;
|
|
6
|
+
private activeHandle;
|
|
7
|
+
private startState;
|
|
8
|
+
startTransform(node: LineNode, point: Point, handle: 'start' | 'end' | 'move'): void;
|
|
9
|
+
updateTransform(point: Point): void;
|
|
10
|
+
endTransform(): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=LineTransformController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LineTransformController.d.ts","sourceRoot":"","sources":["../../../../src/core/selection/LineTransformController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAElD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,YAAY,CAAyC;IAC7D,OAAO,CAAC,UAAU,CAOF;IAEhB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAG,KAAK,GAAG,MAAM;IAc7E,eAAe,CAAC,KAAK,EAAE,KAAK;IA0C5B,YAAY;CAMb"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Container, Point } from 'pixi.js';
|
|
2
|
+
import type { BaseNode } from '../nodes/BaseNode';
|
|
3
|
+
import { GroupNode } from '../nodes/GroupNode';
|
|
4
|
+
export declare class SelectionManager {
|
|
5
|
+
private selectedNodes;
|
|
6
|
+
private isMultiSelect;
|
|
7
|
+
private selectionGraphics;
|
|
8
|
+
private transformController;
|
|
9
|
+
private lineTransformController;
|
|
10
|
+
private shiftKey;
|
|
11
|
+
constructor(toolsLayer: Container);
|
|
12
|
+
startTransform(point: Point, handle?: string): void;
|
|
13
|
+
updateTransform(point: Point): void;
|
|
14
|
+
endTransform(): void;
|
|
15
|
+
hitTestHandle(point: Point): string | null;
|
|
16
|
+
setMultiSelect(enabled: boolean): void;
|
|
17
|
+
setShiftKey(enabled: boolean): void;
|
|
18
|
+
select(node: BaseNode | null): void;
|
|
19
|
+
createGroup(): GroupNode | undefined;
|
|
20
|
+
ungroupSelected(): BaseNode[];
|
|
21
|
+
getSelectionBounds(): {
|
|
22
|
+
x: number;
|
|
23
|
+
y: number;
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
};
|
|
27
|
+
private normalizeNodeScale;
|
|
28
|
+
isSelected(node: BaseNode): boolean;
|
|
29
|
+
getSelectedNodes(): BaseNode[];
|
|
30
|
+
reorderSelected(container: Container, direction: -1 | 1): boolean;
|
|
31
|
+
deleteSelected(container: Container): BaseNode[];
|
|
32
|
+
clear(): void;
|
|
33
|
+
nudgeSelected(dx: number, dy: number): boolean;
|
|
34
|
+
private updateSelectionVisuals;
|
|
35
|
+
private getWorldScale;
|
|
36
|
+
private dispatchLayerChanged;
|
|
37
|
+
private dispatchPropertiesChanged;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=SelectionManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SelectionManager.d.ts","sourceRoot":"","sources":["../../../../src/core/selection/SelectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,KAAK,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlD,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,iBAAiB,CAAW;IACpC,OAAO,CAAC,mBAAmB,CAAsB;IACjD,OAAO,CAAC,uBAAuB,CAA0B;IACzD,OAAO,CAAC,QAAQ,CAAS;gBAEb,UAAU,EAAE,SAAS;IAQjC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM;IAc5C,eAAe,CAAC,KAAK,EAAE,KAAK;IAY5B,YAAY;IAYZ,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAmG1C,cAAc,CAAC,OAAO,EAAE,OAAO;IAI/B,WAAW,CAAC,OAAO,EAAE,OAAO;IAI5B,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI;IAmB5B,WAAW;IAmDX,eAAe,IAAI,QAAQ,EAAE;IAoD7B,kBAAkB;;;;;;IAsBlB,OAAO,CAAC,kBAAkB;IAS1B,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO;IAInC,gBAAgB,IAAI,QAAQ,EAAE;IAI9B,eAAe,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO;IAejE,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,QAAQ,EAAE;IAYhD,KAAK;IAOL,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO;IAY9C,OAAO,CAAC,sBAAsB;IAgH9B,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,oBAAoB;IAa5B,OAAO,CAAC,yBAAyB;CAUlC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Point } from 'pixi.js';
|
|
2
|
+
import type { BaseNode } from '../nodes/BaseNode';
|
|
3
|
+
export declare class TransformController {
|
|
4
|
+
private mode;
|
|
5
|
+
private startPoint;
|
|
6
|
+
private startState;
|
|
7
|
+
private activeNode;
|
|
8
|
+
private activeHandle;
|
|
9
|
+
constructor();
|
|
10
|
+
startTransform(node: BaseNode, point: Point, handle?: string): void;
|
|
11
|
+
updateTransform(point: Point, constrainRatio?: boolean): void;
|
|
12
|
+
endTransform(): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=TransformController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransformController.d.ts","sourceRoot":"","sources":["../../../../src/core/selection/TransformController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAyB;IACrC,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,UAAU,CAMF;IAChB,OAAO,CAAC,UAAU,CAAyB;IAC3C,OAAO,CAAC,YAAY,CAAuB;;IAI3C,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM;IAwB5D,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,UAAQ;IAiIpD,YAAY;CAOb"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Container } from 'pixi.js';
|
|
2
|
+
export declare class RulerOverlay {
|
|
3
|
+
private root;
|
|
4
|
+
private g;
|
|
5
|
+
private labels;
|
|
6
|
+
private uiLayer;
|
|
7
|
+
private getViewport;
|
|
8
|
+
constructor(uiLayer: Container, getViewport: () => {
|
|
9
|
+
width: number;
|
|
10
|
+
height: number;
|
|
11
|
+
scale: number;
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
});
|
|
15
|
+
update(): void;
|
|
16
|
+
private getNiceStep;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=RulerOverlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RulerOverlay.d.ts","sourceRoot":"","sources":["../../../../src/core/ui/RulerOverlay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAkB,MAAM,SAAS,CAAC;AAEpD,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAY;IACxB,OAAO,CAAC,CAAC,CAAW;IACpB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,OAAO,CAAY;IAC3B,OAAO,CAAC,WAAW,CAA+E;gBAGhG,OAAO,EAAE,SAAS,EAClB,WAAW,EAAE,MAAM;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE;IAY3F,MAAM;IA0EN,OAAO,CAAC,WAAW;CAQpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../src/demo/main.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BaseNode } from './core/nodes/BaseNode';
|
|
2
|
+
import type { ToolName } from './index';
|
|
3
|
+
export type ShapeCreatedEvent = CustomEvent<{
|
|
4
|
+
shape: BaseNode;
|
|
5
|
+
}>;
|
|
6
|
+
export type ToolChangedEvent = CustomEvent<{
|
|
7
|
+
tool: ToolName;
|
|
8
|
+
}>;
|
|
9
|
+
declare global {
|
|
10
|
+
interface WindowEventMap {
|
|
11
|
+
'shape:created': ShapeCreatedEvent;
|
|
12
|
+
'tool:changed': ToolChangedEvent;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC;IAC1C,KAAK,EAAE,QAAQ,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC;IACzC,IAAI,EAAE,QAAQ,CAAC;CAChB,CAAC,CAAC;AAEH,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,cAAc;QACtB,eAAe,EAAE,iBAAiB,CAAC;QACnC,cAAc,EAAE,gBAAgB,CAAC;KAClC;CACF"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import './ccd.css';
|
|
2
|
+
import { Application, Container } from 'pixi.js';
|
|
3
|
+
import { PointerController } from './PointerController';
|
|
4
|
+
import { HistoryManager } from './core/history/HistoryManager';
|
|
5
|
+
import type { SceneDocument } from './core/history/HistoryManager';
|
|
6
|
+
export declare const version = "0.0.0";
|
|
7
|
+
export type ToolName = 'select' | 'rectangle' | 'circle' | 'text' | 'line' | 'ellipse' | 'star' | 'pan';
|
|
8
|
+
export interface NodePropUpdate {
|
|
9
|
+
id: string;
|
|
10
|
+
props: Record<string, string | number | boolean | null>;
|
|
11
|
+
}
|
|
12
|
+
export declare const TOOL_CURSOR: Record<ToolName, string | null>;
|
|
13
|
+
export declare class CCDApp {
|
|
14
|
+
app: Application<import("pixi.js").Renderer>;
|
|
15
|
+
world: Container<import("pixi.js").ContainerChild>;
|
|
16
|
+
objectLayer: Container<import("pixi.js").ContainerChild>;
|
|
17
|
+
previewLayer: Container<import("pixi.js").ContainerChild>;
|
|
18
|
+
toolsLayer: Container<import("pixi.js").ContainerChild>;
|
|
19
|
+
helperLayer: Container<import("pixi.js").ContainerChild>;
|
|
20
|
+
uiLayer: Container<import("pixi.js").ContainerChild>;
|
|
21
|
+
host?: HTMLElement;
|
|
22
|
+
pointerController?: PointerController;
|
|
23
|
+
history?: HistoryManager;
|
|
24
|
+
private ruler?;
|
|
25
|
+
activeTool: ToolName;
|
|
26
|
+
init(host: HTMLElement): Promise<void>;
|
|
27
|
+
initPointerController(): void;
|
|
28
|
+
private handleZoomKeys;
|
|
29
|
+
private handleUndoRedoKeys;
|
|
30
|
+
setZoom(newScale: number): void;
|
|
31
|
+
private handleDrop;
|
|
32
|
+
private handlePaste;
|
|
33
|
+
private addImageFromSource;
|
|
34
|
+
private getWorldPointFromClient;
|
|
35
|
+
exportRaster(options: {
|
|
36
|
+
type: 'png' | 'jpg';
|
|
37
|
+
scope: 'all' | 'selection';
|
|
38
|
+
quality?: number;
|
|
39
|
+
padding?: number;
|
|
40
|
+
background?: string;
|
|
41
|
+
}): Promise<string | null>;
|
|
42
|
+
exportSVG(options: {
|
|
43
|
+
scope: 'all' | 'selection';
|
|
44
|
+
padding?: number;
|
|
45
|
+
imageEmbed?: 'original' | 'display' | 'max';
|
|
46
|
+
imageMaxEdge?: number;
|
|
47
|
+
background?: string;
|
|
48
|
+
}): Promise<string | null>;
|
|
49
|
+
private getExportBounds;
|
|
50
|
+
private getBoundsFromNodes;
|
|
51
|
+
private getRootNodes;
|
|
52
|
+
private getAllBaseNodes;
|
|
53
|
+
private applySelectionVisibility;
|
|
54
|
+
private toColorNumber;
|
|
55
|
+
private nodeToSvg;
|
|
56
|
+
private starPointsToSvg;
|
|
57
|
+
private styleToSvg;
|
|
58
|
+
private escapeXml;
|
|
59
|
+
private resolveImageDataUrl;
|
|
60
|
+
private loadImage;
|
|
61
|
+
private toDataUrl;
|
|
62
|
+
private isEditingText;
|
|
63
|
+
undo(): Promise<void>;
|
|
64
|
+
redo(): Promise<void>;
|
|
65
|
+
exportJSON(): Promise<SceneDocument | null>;
|
|
66
|
+
importJSON(doc: SceneDocument): Promise<void>;
|
|
67
|
+
hasDocumentContent(): boolean;
|
|
68
|
+
clearDocument(): Promise<void>;
|
|
69
|
+
setCursor(name: string | null): void;
|
|
70
|
+
resetCursor(): void;
|
|
71
|
+
useTool(toolName: ToolName): void;
|
|
72
|
+
dispatchLayerHierarchyChanged(): void;
|
|
73
|
+
/**
|
|
74
|
+
* Apply property updates to one or more nodes by id.
|
|
75
|
+
* Pass the ids/props you received from `layer:changed` or `properties:changed`.
|
|
76
|
+
*/
|
|
77
|
+
applyNodeProperties(update: NodePropUpdate | NodePropUpdate[]): void;
|
|
78
|
+
private applyStyle;
|
|
79
|
+
private findNodeById;
|
|
80
|
+
private dispatchOnHost;
|
|
81
|
+
destroy(): void;
|
|
82
|
+
getLayerHierarchy(): import("./core/layers/LayerHierarchy").LayerNode;
|
|
83
|
+
getPixiApp(): Application<import("pixi.js").Renderer>;
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,25 +1,26 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "canvas-can-do",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.2",
|
|
5
5
|
"description": "Transform-based vector graphics editor engine for the web.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/canvas-can-do.umd.cjs",
|
|
8
8
|
"module": "./dist/canvas-can-do.js",
|
|
9
|
-
"types": "./dist/index.d.ts",
|
|
9
|
+
"types": "./dist/types/index.d.ts",
|
|
10
10
|
"exports": {
|
|
11
11
|
".": {
|
|
12
|
-
"types": "./dist/index.d.ts",
|
|
12
|
+
"types": "./dist/types/index.d.ts",
|
|
13
13
|
"import": "./dist/canvas-can-do.js",
|
|
14
14
|
"require": "./dist/canvas-can-do.umd.cjs"
|
|
15
|
-
}
|
|
15
|
+
},
|
|
16
|
+
"./style.css": "./dist/style.css"
|
|
16
17
|
},
|
|
17
18
|
"files": [
|
|
18
19
|
"dist"
|
|
19
20
|
],
|
|
20
21
|
"scripts": {
|
|
21
22
|
"dev": "vite",
|
|
22
|
-
"build": "tsc -p tsconfig.build.json
|
|
23
|
+
"build": "vite build && tsc -p tsconfig.build.json",
|
|
23
24
|
"preview": "vite preview"
|
|
24
25
|
},
|
|
25
26
|
"devDependencies": {
|
package/dist/ccd.css
DELETED
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
/* base */
|
|
2
|
-
.ccd-host {
|
|
3
|
-
cursor: default;
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
/* tools */
|
|
7
|
-
.ccd-cursor-default {
|
|
8
|
-
cursor: default;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
.ccd-cursor-crosshair {
|
|
12
|
-
cursor: crosshair;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
.ccd-cursor-text {
|
|
16
|
-
cursor: text;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
.ccd-cursor-move {
|
|
20
|
-
cursor: move;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
.ccd-cursor-grab {
|
|
24
|
-
cursor: grab;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
.ccd-cursor-grabbing {
|
|
28
|
-
cursor: grabbing;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/* resize — edges */
|
|
32
|
-
.ccd-cursor-resize-n {
|
|
33
|
-
cursor: n-resize;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
.ccd-cursor-resize-s {
|
|
37
|
-
cursor: s-resize;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.ccd-cursor-resize-e {
|
|
41
|
-
cursor: e-resize;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
.ccd-cursor-resize-w {
|
|
45
|
-
cursor: w-resize;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/* resize — corners */
|
|
49
|
-
.ccd-cursor-resize-nw {
|
|
50
|
-
cursor: nw-resize;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
.ccd-cursor-resize-ne {
|
|
54
|
-
cursor: ne-resize;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
.ccd-cursor-resize-sw {
|
|
58
|
-
cursor: sw-resize;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
.ccd-cursor-resize-se {
|
|
62
|
-
cursor: se-resize;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
/* rotate */
|
|
66
|
-
.ccd-cursor-rotate {
|
|
67
|
-
cursor: alias; /* placeholder, custom cursor มักใช้แทน */
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/* zoom / view */
|
|
71
|
-
.ccd-cursor-zoom-in {
|
|
72
|
-
cursor: zoom-in;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.ccd-cursor-zoom-out {
|
|
76
|
-
cursor: zoom-out;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/* disabled / locked */
|
|
80
|
-
.ccd-cursor-not-allowed {
|
|
81
|
-
cursor: not-allowed;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/* precision */
|
|
85
|
-
.ccd-cursor-precision {
|
|
86
|
-
cursor: cell;
|
|
87
|
-
}
|