js-draw 0.0.1
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/.eslintrc.js +57 -0
- package/.husky/pre-commit +4 -0
- package/LICENSE +21 -0
- package/README.md +74 -0
- package/__mocks__/coloris.ts +8 -0
- package/__mocks__/styleMock.js +1 -0
- package/dist/__mocks__/coloris.d.ts +2 -0
- package/dist/__mocks__/coloris.js +5 -0
- package/dist/build_tools/BundledFile.d.ts +12 -0
- package/dist/build_tools/BundledFile.js +153 -0
- package/dist/scripts/bundle.d.ts +1 -0
- package/dist/scripts/bundle.js +19 -0
- package/dist/scripts/watchBundle.d.ts +1 -0
- package/dist/scripts/watchBundle.js +9 -0
- package/dist/src/Color4.d.ts +23 -0
- package/dist/src/Color4.js +102 -0
- package/dist/src/Display.d.ts +22 -0
- package/dist/src/Display.js +93 -0
- package/dist/src/Editor.d.ts +55 -0
- package/dist/src/Editor.js +366 -0
- package/dist/src/EditorImage.d.ts +44 -0
- package/dist/src/EditorImage.js +243 -0
- package/dist/src/EventDispatcher.d.ts +11 -0
- package/dist/src/EventDispatcher.js +39 -0
- package/dist/src/Pointer.d.ts +22 -0
- package/dist/src/Pointer.js +57 -0
- package/dist/src/SVGLoader.d.ts +21 -0
- package/dist/src/SVGLoader.js +204 -0
- package/dist/src/StrokeBuilder.d.ts +35 -0
- package/dist/src/StrokeBuilder.js +275 -0
- package/dist/src/UndoRedoHistory.d.ts +17 -0
- package/dist/src/UndoRedoHistory.js +46 -0
- package/dist/src/Viewport.d.ts +39 -0
- package/dist/src/Viewport.js +134 -0
- package/dist/src/commands/Command.d.ts +15 -0
- package/dist/src/commands/Command.js +29 -0
- package/dist/src/commands/Erase.d.ts +11 -0
- package/dist/src/commands/Erase.js +37 -0
- package/dist/src/commands/localization.d.ts +19 -0
- package/dist/src/commands/localization.js +17 -0
- package/dist/src/components/AbstractComponent.d.ts +19 -0
- package/dist/src/components/AbstractComponent.js +46 -0
- package/dist/src/components/Stroke.d.ts +16 -0
- package/dist/src/components/Stroke.js +79 -0
- package/dist/src/components/UnknownSVGObject.d.ts +15 -0
- package/dist/src/components/UnknownSVGObject.js +25 -0
- package/dist/src/components/localization.d.ts +5 -0
- package/dist/src/components/localization.js +4 -0
- package/dist/src/geometry/LineSegment2.d.ts +19 -0
- package/dist/src/geometry/LineSegment2.js +100 -0
- package/dist/src/geometry/Mat33.d.ts +31 -0
- package/dist/src/geometry/Mat33.js +187 -0
- package/dist/src/geometry/Path.d.ts +55 -0
- package/dist/src/geometry/Path.js +364 -0
- package/dist/src/geometry/Rect2.d.ts +47 -0
- package/dist/src/geometry/Rect2.js +148 -0
- package/dist/src/geometry/Vec2.d.ts +13 -0
- package/dist/src/geometry/Vec2.js +13 -0
- package/dist/src/geometry/Vec3.d.ts +32 -0
- package/dist/src/geometry/Vec3.js +98 -0
- package/dist/src/localization.d.ts +12 -0
- package/dist/src/localization.js +5 -0
- package/dist/src/main.d.ts +3 -0
- package/dist/src/main.js +4 -0
- package/dist/src/rendering/AbstractRenderer.d.ts +38 -0
- package/dist/src/rendering/AbstractRenderer.js +108 -0
- package/dist/src/rendering/CanvasRenderer.d.ts +23 -0
- package/dist/src/rendering/CanvasRenderer.js +108 -0
- package/dist/src/rendering/DummyRenderer.d.ts +25 -0
- package/dist/src/rendering/DummyRenderer.js +65 -0
- package/dist/src/rendering/SVGRenderer.d.ts +27 -0
- package/dist/src/rendering/SVGRenderer.js +122 -0
- package/dist/src/testing/loadExpectExtensions.d.ts +17 -0
- package/dist/src/testing/loadExpectExtensions.js +27 -0
- package/dist/src/toolbar/HTMLToolbar.d.ts +12 -0
- package/dist/src/toolbar/HTMLToolbar.js +444 -0
- package/dist/src/toolbar/types.d.ts +17 -0
- package/dist/src/toolbar/types.js +5 -0
- package/dist/src/tools/BaseTool.d.ts +20 -0
- package/dist/src/tools/BaseTool.js +44 -0
- package/dist/src/tools/Eraser.d.ts +16 -0
- package/dist/src/tools/Eraser.js +53 -0
- package/dist/src/tools/PanZoom.d.ts +40 -0
- package/dist/src/tools/PanZoom.js +191 -0
- package/dist/src/tools/Pen.d.ts +25 -0
- package/dist/src/tools/Pen.js +97 -0
- package/dist/src/tools/SelectionTool.d.ts +49 -0
- package/dist/src/tools/SelectionTool.js +437 -0
- package/dist/src/tools/ToolController.d.ts +18 -0
- package/dist/src/tools/ToolController.js +110 -0
- package/dist/src/tools/ToolEnabledGroup.d.ts +6 -0
- package/dist/src/tools/ToolEnabledGroup.js +11 -0
- package/dist/src/tools/localization.d.ts +10 -0
- package/dist/src/tools/localization.js +9 -0
- package/dist/src/types.d.ts +88 -0
- package/dist/src/types.js +20 -0
- package/jest.config.js +22 -0
- package/lint-staged.config.js +6 -0
- package/package.json +82 -0
- package/src/Color4.test.ts +12 -0
- package/src/Color4.ts +122 -0
- package/src/Display.ts +118 -0
- package/src/Editor.css +58 -0
- package/src/Editor.ts +469 -0
- package/src/EditorImage.test.ts +90 -0
- package/src/EditorImage.ts +297 -0
- package/src/EventDispatcher.test.ts +123 -0
- package/src/EventDispatcher.ts +53 -0
- package/src/Pointer.ts +93 -0
- package/src/SVGLoader.ts +230 -0
- package/src/StrokeBuilder.ts +362 -0
- package/src/UndoRedoHistory.ts +61 -0
- package/src/Viewport.ts +168 -0
- package/src/commands/Command.ts +43 -0
- package/src/commands/Erase.ts +52 -0
- package/src/commands/localization.ts +38 -0
- package/src/components/AbstractComponent.ts +73 -0
- package/src/components/Stroke.test.ts +18 -0
- package/src/components/Stroke.ts +102 -0
- package/src/components/UnknownSVGObject.ts +36 -0
- package/src/components/localization.ts +9 -0
- package/src/editorStyles.js +3 -0
- package/src/geometry/LineSegment2.test.ts +77 -0
- package/src/geometry/LineSegment2.ts +127 -0
- package/src/geometry/Mat33.test.ts +144 -0
- package/src/geometry/Mat33.ts +268 -0
- package/src/geometry/Path.fromString.test.ts +146 -0
- package/src/geometry/Path.test.ts +96 -0
- package/src/geometry/Path.toString.test.ts +31 -0
- package/src/geometry/Path.ts +456 -0
- package/src/geometry/Rect2.test.ts +121 -0
- package/src/geometry/Rect2.ts +215 -0
- package/src/geometry/Vec2.test.ts +32 -0
- package/src/geometry/Vec2.ts +18 -0
- package/src/geometry/Vec3.test.ts +29 -0
- package/src/geometry/Vec3.ts +133 -0
- package/src/localization.ts +27 -0
- package/src/rendering/AbstractRenderer.ts +164 -0
- package/src/rendering/CanvasRenderer.ts +141 -0
- package/src/rendering/DummyRenderer.ts +80 -0
- package/src/rendering/SVGRenderer.ts +159 -0
- package/src/testing/loadExpectExtensions.ts +43 -0
- package/src/toolbar/HTMLToolbar.ts +551 -0
- package/src/toolbar/toolbar.css +110 -0
- package/src/toolbar/types.ts +20 -0
- package/src/tools/BaseTool.ts +58 -0
- package/src/tools/Eraser.ts +67 -0
- package/src/tools/PanZoom.ts +253 -0
- package/src/tools/Pen.ts +121 -0
- package/src/tools/SelectionTool.test.ts +85 -0
- package/src/tools/SelectionTool.ts +545 -0
- package/src/tools/ToolController.ts +126 -0
- package/src/tools/ToolEnabledGroup.ts +14 -0
- package/src/tools/localization.ts +22 -0
- package/src/types.ts +133 -0
- package/tsconfig.json +28 -0
package/src/types.ts
ADDED
@@ -0,0 +1,133 @@
|
|
1
|
+
// Types related to the image editor
|
2
|
+
|
3
|
+
import EventDispatcher from './EventDispatcher';
|
4
|
+
import Mat33 from './geometry/Mat33';
|
5
|
+
import { Point2, Vec2 } from './geometry/Vec2';
|
6
|
+
import Vec3 from './geometry/Vec3';
|
7
|
+
import BaseTool from './tools/BaseTool';
|
8
|
+
import AbstractComponent from './components/AbstractComponent';
|
9
|
+
import Rect2 from './geometry/Rect2';
|
10
|
+
import Pointer from './Pointer';
|
11
|
+
|
12
|
+
|
13
|
+
export interface PointerEvtListener {
|
14
|
+
onPointerDown(event: PointerEvt): boolean;
|
15
|
+
onPointerMove(event: PointerEvt): void;
|
16
|
+
onPointerUp(event: PointerEvt): void;
|
17
|
+
|
18
|
+
// Called if a pointer that has been captured by this listener (by returning
|
19
|
+
// `true` from `onPointerDown`) is re-captured by another listener.
|
20
|
+
//
|
21
|
+
// When called, this method should cancel any changes being made by the current
|
22
|
+
// gesture.
|
23
|
+
onGestureCancel(): void;
|
24
|
+
}
|
25
|
+
|
26
|
+
export enum InputEvtType {
|
27
|
+
PointerDownEvt,
|
28
|
+
PointerMoveEvt,
|
29
|
+
PointerUpEvt,
|
30
|
+
GestureCancelEvt,
|
31
|
+
|
32
|
+
WheelEvt,
|
33
|
+
KeyPressEvent,
|
34
|
+
}
|
35
|
+
|
36
|
+
// [delta.x] is horizontal scroll,
|
37
|
+
// [delta.y] is vertical scroll,
|
38
|
+
// [delta.z] is zoom scroll (ctrl+scroll or pinch zoom)
|
39
|
+
export interface WheelEvt {
|
40
|
+
readonly kind: InputEvtType.WheelEvt;
|
41
|
+
readonly delta: Vec3;
|
42
|
+
readonly screenPos: Point2;
|
43
|
+
}
|
44
|
+
|
45
|
+
export interface KeyPressEvent {
|
46
|
+
readonly kind: InputEvtType.KeyPressEvent;
|
47
|
+
readonly key: string;
|
48
|
+
}
|
49
|
+
|
50
|
+
// Event triggered when pointer capture is taken by a different [PointerEvtListener].
|
51
|
+
export interface GestureCancelEvt {
|
52
|
+
readonly kind: InputEvtType.GestureCancelEvt;
|
53
|
+
}
|
54
|
+
|
55
|
+
interface PointerEvtBase {
|
56
|
+
readonly current: Pointer;
|
57
|
+
readonly allPointers: Pointer[];
|
58
|
+
}
|
59
|
+
|
60
|
+
export interface PointerDownEvt extends PointerEvtBase {
|
61
|
+
readonly kind: InputEvtType.PointerDownEvt;
|
62
|
+
}
|
63
|
+
|
64
|
+
export interface PointerMoveEvt extends PointerEvtBase {
|
65
|
+
readonly kind: InputEvtType.PointerMoveEvt;
|
66
|
+
}
|
67
|
+
|
68
|
+
export interface PointerUpEvt extends PointerEvtBase {
|
69
|
+
readonly kind: InputEvtType.PointerUpEvt;
|
70
|
+
}
|
71
|
+
|
72
|
+
export type PointerEvt = PointerDownEvt | PointerMoveEvt | PointerUpEvt;
|
73
|
+
export type InputEvt = KeyPressEvent | WheelEvt | GestureCancelEvt | PointerEvt;
|
74
|
+
|
75
|
+
export type EditorNotifier = EventDispatcher<EditorEventType, EditorEventDataType>;
|
76
|
+
|
77
|
+
export enum EditorEventType {
|
78
|
+
ToolEnabled,
|
79
|
+
ToolDisabled,
|
80
|
+
ToolUpdated,
|
81
|
+
UndoRedoStackUpdated,
|
82
|
+
ObjectAdded,
|
83
|
+
ViewportChanged,
|
84
|
+
DisplayResized,
|
85
|
+
}
|
86
|
+
|
87
|
+
type EditorToolEventType = EditorEventType.ToolEnabled
|
88
|
+
| EditorEventType.ToolDisabled
|
89
|
+
| EditorEventType.ToolUpdated;
|
90
|
+
export interface EditorToolEvent {
|
91
|
+
readonly kind: EditorToolEventType;
|
92
|
+
readonly tool: BaseTool;
|
93
|
+
}
|
94
|
+
|
95
|
+
export interface EditorObjectEvent {
|
96
|
+
readonly kind: EditorEventType.ObjectAdded;
|
97
|
+
readonly object: AbstractComponent;
|
98
|
+
}
|
99
|
+
|
100
|
+
export interface EditorViewportChangedEvent {
|
101
|
+
readonly kind: EditorEventType.ViewportChanged;
|
102
|
+
|
103
|
+
// Canvas -> screen transform
|
104
|
+
readonly newTransform: Mat33;
|
105
|
+
}
|
106
|
+
|
107
|
+
export interface DisplayResizedEvent {
|
108
|
+
readonly kind: EditorEventType.DisplayResized;
|
109
|
+
readonly newSize: Vec2;
|
110
|
+
}
|
111
|
+
|
112
|
+
export interface EditorUndoStackUpdated {
|
113
|
+
readonly kind: EditorEventType.UndoRedoStackUpdated;
|
114
|
+
readonly undoStackSize: number;
|
115
|
+
readonly redoStackSize: number;
|
116
|
+
}
|
117
|
+
|
118
|
+
export type EditorEventDataType = EditorToolEvent | EditorObjectEvent | EditorViewportChangedEvent | DisplayResizedEvent | EditorUndoStackUpdated;
|
119
|
+
|
120
|
+
|
121
|
+
// Returns a Promise to indicate that the event source should pause until the Promise resolves.
|
122
|
+
// Returns null to continue loading without pause.
|
123
|
+
// [totalToProcess] can be an estimate and may change if a better estimate becomes available.
|
124
|
+
export type OnProgressListener =
|
125
|
+
(amountProcessed: number, totalToProcess: number)=> Promise<void>|null;
|
126
|
+
|
127
|
+
export type ComponentAddedListener = (component: AbstractComponent)=> void;
|
128
|
+
export interface ImageLoader {
|
129
|
+
// Returns the main region of the loaded image
|
130
|
+
start(
|
131
|
+
onAddComponent: ComponentAddedListener, onProgressListener: OnProgressListener
|
132
|
+
): Promise<Rect2>;
|
133
|
+
}
|
package/tsconfig.json
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
{
|
2
|
+
"compilerOptions": {
|
3
|
+
"alwaysStrict": true,
|
4
|
+
"target": "ES2015",
|
5
|
+
"forceConsistentCasingInFileNames": true,
|
6
|
+
"listEmittedFiles": false,
|
7
|
+
"noFallthroughCasesInSwitch": true,
|
8
|
+
"noImplicitAny": true,
|
9
|
+
"noImplicitReturns": true,
|
10
|
+
"noUnusedLocals": true,
|
11
|
+
"strictBindCallApply": true,
|
12
|
+
"strictFunctionTypes": true,
|
13
|
+
"strictNullChecks": true,
|
14
|
+
"esModuleInterop": true,
|
15
|
+
"moduleResolution": "Node",
|
16
|
+
"declaration": true,
|
17
|
+
"outDir": "dist/",
|
18
|
+
},
|
19
|
+
"include": [
|
20
|
+
"**/*.ts",
|
21
|
+
],
|
22
|
+
"exclude": [
|
23
|
+
"**/node_modules",
|
24
|
+
|
25
|
+
// Files that don't need transpilation
|
26
|
+
"**/*.test.ts",
|
27
|
+
],
|
28
|
+
}
|