@sequent-org/moodboard 1.0.0
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/package.json +44 -0
- package/src/assets/icons/README.md +105 -0
- package/src/assets/icons/attachments.svg +3 -0
- package/src/assets/icons/clear.svg +5 -0
- package/src/assets/icons/comments.svg +3 -0
- package/src/assets/icons/emoji.svg +6 -0
- package/src/assets/icons/frame.svg +3 -0
- package/src/assets/icons/image.svg +3 -0
- package/src/assets/icons/note.svg +3 -0
- package/src/assets/icons/pan.svg +3 -0
- package/src/assets/icons/pencil.svg +3 -0
- package/src/assets/icons/redo.svg +3 -0
- package/src/assets/icons/select.svg +9 -0
- package/src/assets/icons/shapes.svg +3 -0
- package/src/assets/icons/text-add.svg +3 -0
- package/src/assets/icons/topbar/README.md +39 -0
- package/src/assets/icons/topbar/grid-cross.svg +6 -0
- package/src/assets/icons/topbar/grid-dot.svg +3 -0
- package/src/assets/icons/topbar/grid-line.svg +3 -0
- package/src/assets/icons/topbar/grid-off.svg +3 -0
- package/src/assets/icons/topbar/paint.svg +3 -0
- package/src/assets/icons/undo.svg +3 -0
- package/src/core/ApiClient.js +309 -0
- package/src/core/EventBus.js +42 -0
- package/src/core/HistoryManager.js +261 -0
- package/src/core/KeyboardManager.js +710 -0
- package/src/core/PixiEngine.js +439 -0
- package/src/core/SaveManager.js +381 -0
- package/src/core/StateManager.js +64 -0
- package/src/core/commands/BaseCommand.js +68 -0
- package/src/core/commands/CopyObjectCommand.js +44 -0
- package/src/core/commands/CreateObjectCommand.js +46 -0
- package/src/core/commands/DeleteObjectCommand.js +146 -0
- package/src/core/commands/EditFileNameCommand.js +107 -0
- package/src/core/commands/GroupMoveCommand.js +47 -0
- package/src/core/commands/GroupReorderZCommand.js +74 -0
- package/src/core/commands/GroupResizeCommand.js +37 -0
- package/src/core/commands/GroupRotateCommand.js +41 -0
- package/src/core/commands/MoveObjectCommand.js +89 -0
- package/src/core/commands/PasteObjectCommand.js +103 -0
- package/src/core/commands/ReorderZCommand.js +45 -0
- package/src/core/commands/ResizeObjectCommand.js +135 -0
- package/src/core/commands/RotateObjectCommand.js +70 -0
- package/src/core/commands/index.js +14 -0
- package/src/core/events/Events.js +147 -0
- package/src/core/index.js +1632 -0
- package/src/core/rendering/GeometryUtils.js +89 -0
- package/src/core/rendering/HitTestManager.js +186 -0
- package/src/core/rendering/LayerManager.js +137 -0
- package/src/core/rendering/ObjectRenderer.js +363 -0
- package/src/core/rendering/PixiRenderer.js +140 -0
- package/src/core/rendering/index.js +9 -0
- package/src/grid/BaseGrid.js +164 -0
- package/src/grid/CrossGrid.js +75 -0
- package/src/grid/DotGrid.js +148 -0
- package/src/grid/GridFactory.js +173 -0
- package/src/grid/LineGrid.js +115 -0
- package/src/index.js +2 -0
- package/src/moodboard/ActionHandler.js +114 -0
- package/src/moodboard/DataManager.js +114 -0
- package/src/moodboard/MoodBoard.js +359 -0
- package/src/moodboard/WorkspaceManager.js +103 -0
- package/src/objects/BaseObject.js +1 -0
- package/src/objects/CommentObject.js +115 -0
- package/src/objects/DrawingObject.js +114 -0
- package/src/objects/EmojiObject.js +98 -0
- package/src/objects/FileObject.js +318 -0
- package/src/objects/FrameObject.js +127 -0
- package/src/objects/ImageObject.js +72 -0
- package/src/objects/NoteObject.js +227 -0
- package/src/objects/ObjectFactory.js +61 -0
- package/src/objects/ShapeObject.js +134 -0
- package/src/objects/StampObject.js +0 -0
- package/src/objects/StickerObject.js +0 -0
- package/src/objects/TextObject.js +123 -0
- package/src/services/BoardService.js +85 -0
- package/src/services/FileUploadService.js +398 -0
- package/src/services/FrameService.js +138 -0
- package/src/services/ImageUploadService.js +246 -0
- package/src/services/ZOrderManager.js +50 -0
- package/src/services/ZoomPanController.js +78 -0
- package/src/src.7z +0 -0
- package/src/src.zip +0 -0
- package/src/src2.zip +0 -0
- package/src/tools/AlignmentGuides.js +326 -0
- package/src/tools/BaseTool.js +257 -0
- package/src/tools/ResizeHandles.js +381 -0
- package/src/tools/ToolManager.js +580 -0
- package/src/tools/board-tools/PanTool.js +43 -0
- package/src/tools/board-tools/ZoomTool.js +393 -0
- package/src/tools/object-tools/DrawingTool.js +404 -0
- package/src/tools/object-tools/PlacementTool.js +1005 -0
- package/src/tools/object-tools/SelectTool.js +2183 -0
- package/src/tools/object-tools/TextTool.js +416 -0
- package/src/tools/object-tools/selection/BoxSelectController.js +105 -0
- package/src/tools/object-tools/selection/GeometryUtils.js +101 -0
- package/src/tools/object-tools/selection/GroupDragController.js +61 -0
- package/src/tools/object-tools/selection/GroupResizeController.js +90 -0
- package/src/tools/object-tools/selection/GroupRotateController.js +61 -0
- package/src/tools/object-tools/selection/HandlesSync.js +96 -0
- package/src/tools/object-tools/selection/ResizeController.js +68 -0
- package/src/tools/object-tools/selection/RotateController.js +58 -0
- package/src/tools/object-tools/selection/SelectionModel.js +42 -0
- package/src/tools/object-tools/selection/SimpleDragController.js +45 -0
- package/src/ui/CommentPopover.js +187 -0
- package/src/ui/ContextMenu.js +340 -0
- package/src/ui/FilePropertiesPanel.js +298 -0
- package/src/ui/FramePropertiesPanel.js +462 -0
- package/src/ui/HtmlHandlesLayer.js +778 -0
- package/src/ui/HtmlTextLayer.js +279 -0
- package/src/ui/MapPanel.js +290 -0
- package/src/ui/NotePropertiesPanel.js +502 -0
- package/src/ui/SaveStatus.js +250 -0
- package/src/ui/TextPropertiesPanel.js +911 -0
- package/src/ui/Toolbar.js +1118 -0
- package/src/ui/Topbar.js +220 -0
- package/src/ui/ZoomPanel.js +116 -0
- package/src/ui/styles/workspace.css +854 -0
- package/src/utils/colors.js +0 -0
- package/src/utils/geometry.js +0 -0
- package/src/utils/iconLoader.js +270 -0
- package/src/utils/objectIdGenerator.js +17 -0
- package/src/utils/topbarIconLoader.js +114 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { BaseCommand } from './BaseCommand.js';
|
|
2
|
+
import { Events } from '../events/Events.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Команда изменения порядка (z-order) одного объекта
|
|
6
|
+
*/
|
|
7
|
+
export class ReorderZCommand extends BaseCommand {
|
|
8
|
+
constructor(core, objectId, fromIndex, toIndex) {
|
|
9
|
+
super('reorder-z', 'Изменить порядок слоя объекта');
|
|
10
|
+
this.core = core;
|
|
11
|
+
this.objectId = objectId;
|
|
12
|
+
this.fromIndex = fromIndex;
|
|
13
|
+
this.toIndex = toIndex;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
execute() {
|
|
17
|
+
this.apply(this.fromIndex, this.toIndex);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
undo() {
|
|
21
|
+
this.apply(this.toIndex, this.fromIndex);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
apply(from, to) {
|
|
25
|
+
const arr = this.core.state.state.objects || [];
|
|
26
|
+
const idx = arr.findIndex(o => o.id === this.objectId);
|
|
27
|
+
if (idx === -1) return;
|
|
28
|
+
const [item] = arr.splice(idx, 1);
|
|
29
|
+
const insertAt = Math.max(0, Math.min(to, arr.length));
|
|
30
|
+
arr.splice(insertAt, 0, item);
|
|
31
|
+
// Обновляем zIndex в PIXI
|
|
32
|
+
const app = this.core.pixi?.app;
|
|
33
|
+
if (app) {
|
|
34
|
+
app.stage.sortableChildren = true;
|
|
35
|
+
(this.core.state.state.objects || []).forEach((o, i) => {
|
|
36
|
+
const pixi = this.core.pixi.objects.get(o.id);
|
|
37
|
+
if (pixi) pixi.zIndex = i;
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
this.core.state.markDirty();
|
|
41
|
+
this.emit(Events.Object.Reordered, { objectId: this.objectId, toIndex: to });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { BaseCommand } from './BaseCommand.js';
|
|
2
|
+
import { Events } from '../events/Events.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Команда изменения размера объекта
|
|
6
|
+
*/
|
|
7
|
+
export class ResizeObjectCommand extends BaseCommand {
|
|
8
|
+
constructor(coreMoodboard, objectId, oldSize, newSize, oldPosition = null, newPosition = null) {
|
|
9
|
+
super('resize_object', `Изменить размер объекта`);
|
|
10
|
+
this.coreMoodboard = coreMoodboard;
|
|
11
|
+
this.objectId = objectId;
|
|
12
|
+
this.oldSize = { ...oldSize };
|
|
13
|
+
this.newSize = { ...newSize };
|
|
14
|
+
this.oldPosition = oldPosition ? { ...oldPosition } : null;
|
|
15
|
+
this.newPosition = newPosition ? { ...newPosition } : null;
|
|
16
|
+
|
|
17
|
+
// Обновляем описание с размерами
|
|
18
|
+
this.description = `Изменить размер объекта ${Math.round(this.oldSize.width)}×${Math.round(this.oldSize.height)} → ${Math.round(this.newSize.width)}×${Math.round(this.newSize.height)}`;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
execute() {
|
|
22
|
+
// Устанавливаем новый размер и позицию
|
|
23
|
+
this._setSizeAndPosition(this.newSize, this.newPosition);
|
|
24
|
+
this._updateResizeHandles();
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
undo() {
|
|
28
|
+
// Возвращаем старый размер и позицию
|
|
29
|
+
this._setSizeAndPosition(this.oldSize, this.oldPosition);
|
|
30
|
+
this._updateResizeHandles();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
_setSizeAndPosition(size, position = null) {
|
|
34
|
+
// Получаем тип объекта из состояния
|
|
35
|
+
const objects = this.coreMoodboard.state.state.objects;
|
|
36
|
+
const object = objects.find(obj => obj.id === this.objectId);
|
|
37
|
+
const objectType = object ? object.type : null;
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
// Отладка ресайза
|
|
42
|
+
if (position && object) {
|
|
43
|
+
console.log(`🔧 Ресайз объекта ${this.objectId}: newSize(${size.width}, ${size.height}), newPosition(${position.x}, ${position.y})`);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Обновляем размер в PIXI с указанием типа
|
|
47
|
+
this.coreMoodboard.pixi.updateObjectSize(this.objectId, size, objectType);
|
|
48
|
+
|
|
49
|
+
// Обновляем позицию если передана (позиция в state — левый-верх; в PIXI — центр)
|
|
50
|
+
// ВАЖНО: используем НОВЫЙ размер для правильного вычисления центра!
|
|
51
|
+
if (position && object) {
|
|
52
|
+
const pixiObject = this.coreMoodboard.pixi.objects.get(this.objectId);
|
|
53
|
+
if (pixiObject) {
|
|
54
|
+
const halfW = size.width / 2;
|
|
55
|
+
const halfH = size.height / 2;
|
|
56
|
+
pixiObject.x = position.x + halfW;
|
|
57
|
+
pixiObject.y = position.y + halfH;
|
|
58
|
+
object.position.x = position.x;
|
|
59
|
+
object.position.y = position.y;
|
|
60
|
+
console.log(`🎯 После ресайза: center(${pixiObject.x}, ${pixiObject.y}), leftTop(${position.x}, ${position.y})`);
|
|
61
|
+
|
|
62
|
+
// Проверим, где находятся границы объекта
|
|
63
|
+
const leftEdge = pixiObject.x - size.width / 2;
|
|
64
|
+
const rightEdge = pixiObject.x + size.width / 2;
|
|
65
|
+
const topEdge = pixiObject.y - size.height / 2;
|
|
66
|
+
const bottomEdge = pixiObject.y + size.height / 2;
|
|
67
|
+
console.log(`📏 Границы объекта: left=${leftEdge}, right=${rightEdge}, top=${topEdge}, bottom=${bottomEdge}`);
|
|
68
|
+
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Обновляем размер в состоянии (без эмита события, чтобы не создавать новую команду)
|
|
73
|
+
if (object) {
|
|
74
|
+
object.width = size.width;
|
|
75
|
+
object.height = size.height;
|
|
76
|
+
this.coreMoodboard.state.markDirty();
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Уведомляем о том, что объект был изменен (для обновления ручек)
|
|
80
|
+
if (this.eventBus) {
|
|
81
|
+
console.log(`📡 ResizeObjectCommand отправляет object:transform:updated для ${this.objectId}`);
|
|
82
|
+
this.eventBus.emit(Events.Object.TransformUpdated, {
|
|
83
|
+
objectId: this.objectId,
|
|
84
|
+
type: 'resize',
|
|
85
|
+
size: size,
|
|
86
|
+
position: position
|
|
87
|
+
});
|
|
88
|
+
} else {
|
|
89
|
+
console.warn(`❌ ResizeObjectCommand: eventBus не установлен для ${this.objectId}`);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Обновляет ручки изменения размера после операции
|
|
95
|
+
*/
|
|
96
|
+
_updateResizeHandles() {
|
|
97
|
+
// Проверяем, есть ли активный SelectTool и выделен ли этот объект
|
|
98
|
+
const toolManager = this.coreMoodboard.toolManager;
|
|
99
|
+
if (!toolManager) return;
|
|
100
|
+
|
|
101
|
+
const activeTool = toolManager.getActiveTool();
|
|
102
|
+
if (!activeTool || activeTool.name !== 'select') return;
|
|
103
|
+
|
|
104
|
+
// Если этот объект выделен, обновляем ручки
|
|
105
|
+
if (activeTool.selectedObjects && activeTool.selectedObjects.has(this.objectId)) {
|
|
106
|
+
console.log(`🔄 Обновляем ручки для объекта ${this.objectId} после Undo/Redo`);
|
|
107
|
+
activeTool.updateResizeHandles();
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Можно ли объединить с другой командой изменения размера того же объекта
|
|
113
|
+
*/
|
|
114
|
+
canMergeWith(otherCommand) {
|
|
115
|
+
return otherCommand instanceof ResizeObjectCommand &&
|
|
116
|
+
otherCommand.objectId === this.objectId;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Объединить с другой командой изменения размера
|
|
121
|
+
*/
|
|
122
|
+
mergeWith(otherCommand) {
|
|
123
|
+
if (!this.canMergeWith(otherCommand)) {
|
|
124
|
+
throw new Error('Cannot merge with this command');
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// Обновляем конечный размер и позицию
|
|
128
|
+
this.newSize = { ...otherCommand.newSize };
|
|
129
|
+
if (otherCommand.newPosition) {
|
|
130
|
+
this.newPosition = { ...otherCommand.newPosition };
|
|
131
|
+
}
|
|
132
|
+
this.description = `Изменить размер объекта ${Math.round(this.oldSize.width)}×${Math.round(this.oldSize.height)} → ${Math.round(this.newSize.width)}×${Math.round(this.newSize.height)}`;
|
|
133
|
+
this.timestamp = otherCommand.timestamp; // Обновляем время последнего изменения
|
|
134
|
+
}
|
|
135
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Команда поворота объекта для системы Undo/Redo
|
|
3
|
+
*/
|
|
4
|
+
import { BaseCommand } from './BaseCommand.js';
|
|
5
|
+
import { Events } from '../events/Events.js';
|
|
6
|
+
|
|
7
|
+
export class RotateObjectCommand extends BaseCommand {
|
|
8
|
+
constructor(coreMoodboard, objectId, oldAngle, newAngle) {
|
|
9
|
+
super();
|
|
10
|
+
this.coreMoodboard = coreMoodboard;
|
|
11
|
+
this.objectId = objectId;
|
|
12
|
+
this.oldAngle = oldAngle;
|
|
13
|
+
this.newAngle = newAngle;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
execute() {
|
|
17
|
+
// Обновляем угол поворота в состоянии
|
|
18
|
+
this._setRotation(this.newAngle);
|
|
19
|
+
|
|
20
|
+
// Применяем новый угол поворота
|
|
21
|
+
this.emit(Events.Object.Rotate, {
|
|
22
|
+
objectId: this.objectId,
|
|
23
|
+
angle: this.newAngle
|
|
24
|
+
});
|
|
25
|
+
console.log(`🔄 Поворачиваем объект ${this.objectId} на ${this.newAngle}°`);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
undo() {
|
|
29
|
+
// Обновляем угол поворота в состоянии
|
|
30
|
+
this._setRotation(this.oldAngle);
|
|
31
|
+
|
|
32
|
+
// Возвращаем старый угол поворота
|
|
33
|
+
this.emit(Events.Object.Rotate, {
|
|
34
|
+
objectId: this.objectId,
|
|
35
|
+
angle: this.oldAngle
|
|
36
|
+
});
|
|
37
|
+
console.log(`↩️ Отменяем поворот объекта ${this.objectId}, возвращаем ${this.oldAngle}°`);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Обновляет угол поворота объекта в состоянии
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
_setRotation(angle) {
|
|
45
|
+
// Обновляем угол поворота в состоянии объекта
|
|
46
|
+
const objects = this.coreMoodboard.state.state.objects;
|
|
47
|
+
const object = objects.find(obj => obj.id === this.objectId);
|
|
48
|
+
if (object) {
|
|
49
|
+
if (!object.transform) {
|
|
50
|
+
object.transform = {};
|
|
51
|
+
}
|
|
52
|
+
object.transform.rotation = angle;
|
|
53
|
+
this.coreMoodboard.state.markDirty();
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Уведомляем о том, что объект был изменен (для обновления ручек)
|
|
57
|
+
if (this.eventBus) {
|
|
58
|
+
this.eventBus.emit(Events.Object.TransformUpdated, {
|
|
59
|
+
objectId: this.objectId,
|
|
60
|
+
type: 'rotation',
|
|
61
|
+
rotation: angle
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
getDescription() {
|
|
67
|
+
const delta = this.newAngle - this.oldAngle;
|
|
68
|
+
return `Поворот объекта на ${delta.toFixed(1)}°`;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// Экспорт всех команд
|
|
2
|
+
export { BaseCommand } from './BaseCommand.js';
|
|
3
|
+
export { CreateObjectCommand } from './CreateObjectCommand.js';
|
|
4
|
+
export { DeleteObjectCommand } from './DeleteObjectCommand.js';
|
|
5
|
+
export { MoveObjectCommand } from './MoveObjectCommand.js';
|
|
6
|
+
export { ResizeObjectCommand } from './ResizeObjectCommand.js';
|
|
7
|
+
export { CopyObjectCommand } from './CopyObjectCommand.js';
|
|
8
|
+
export { PasteObjectCommand } from './PasteObjectCommand.js';
|
|
9
|
+
export { GroupMoveCommand } from './GroupMoveCommand.js';
|
|
10
|
+
export { GroupRotateCommand } from './GroupRotateCommand.js';
|
|
11
|
+
export { GroupResizeCommand } from './GroupResizeCommand.js';
|
|
12
|
+
export { ReorderZCommand } from './ReorderZCommand.js';
|
|
13
|
+
export { GroupReorderZCommand } from './GroupReorderZCommand.js';
|
|
14
|
+
export { EditFileNameCommand } from './EditFileNameCommand.js';
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
// Единый реестр названий событий EventBus
|
|
2
|
+
|
|
3
|
+
export const Events = {
|
|
4
|
+
Tool: {
|
|
5
|
+
Activated: 'tool:activated',
|
|
6
|
+
Deactivated: 'tool:deactivated',
|
|
7
|
+
ContextMenuShow: 'tool:context:menu:show',
|
|
8
|
+
SelectionAdd: 'tool:selection:add',
|
|
9
|
+
SelectionRemove: 'tool:selection:remove',
|
|
10
|
+
SelectionClear: 'tool:selection:clear',
|
|
11
|
+
SelectionAll: 'tool:selection:all',
|
|
12
|
+
HitTest: 'tool:hit:test',
|
|
13
|
+
GetSelection: 'tool:get:selection',
|
|
14
|
+
GetAllObjects: 'tool:get:all:objects',
|
|
15
|
+
GetObjectPosition: 'tool:get:object:position',
|
|
16
|
+
GetObjectSize: 'tool:get:object:size',
|
|
17
|
+
GetObjectRotation: 'tool:get:object:rotation',
|
|
18
|
+
GetObjectPixi: 'tool:get:object:pixi',
|
|
19
|
+
DragStart: 'tool:drag:start',
|
|
20
|
+
DragUpdate: 'tool:drag:update',
|
|
21
|
+
DragEnd: 'tool:drag:end',
|
|
22
|
+
GroupDragStart: 'tool:group:drag:start',
|
|
23
|
+
GroupDragUpdate: 'tool:group:drag:update',
|
|
24
|
+
GroupDragEnd: 'tool:group:drag:end',
|
|
25
|
+
ResizeStart: 'tool:resize:start',
|
|
26
|
+
ResizeUpdate: 'tool:resize:update',
|
|
27
|
+
ResizeEnd: 'tool:resize:end',
|
|
28
|
+
GroupResizeStart: 'tool:group:resize:start',
|
|
29
|
+
GroupResizeUpdate: 'tool:group:resize:update',
|
|
30
|
+
GroupResizeEnd: 'tool:group:resize:end',
|
|
31
|
+
RotateUpdate: 'tool:rotate:update',
|
|
32
|
+
RotateEnd: 'tool:rotate:end',
|
|
33
|
+
GroupRotateStart: 'tool:group:rotate:start',
|
|
34
|
+
GroupRotateUpdate: 'tool:group:rotate:update',
|
|
35
|
+
GroupRotateEnd: 'tool:group:rotate:end',
|
|
36
|
+
DuplicateRequest: 'tool:duplicate:request',
|
|
37
|
+
DuplicateReady: 'tool:duplicate:ready',
|
|
38
|
+
GroupDuplicateRequest: 'tool:group:duplicate:request',
|
|
39
|
+
GroupDuplicateReady: 'tool:group:duplicate:ready',
|
|
40
|
+
PanUpdate: 'tool:pan:update',
|
|
41
|
+
WheelZoom: 'tool:wheel:zoom',
|
|
42
|
+
ObjectsDelete: 'tool:objects:delete',
|
|
43
|
+
ObjectEdit: 'tool:object:edit',
|
|
44
|
+
UpdateObjectContent: 'tool:update:object:content',
|
|
45
|
+
HideObjectText: 'tool:hide:object:text',
|
|
46
|
+
ShowObjectText: 'tool:show:object:text',
|
|
47
|
+
FindObjectByPosition: 'tool:find:object:by:position',
|
|
48
|
+
},
|
|
49
|
+
|
|
50
|
+
UI: {
|
|
51
|
+
ToolbarAction: 'toolbar:action',
|
|
52
|
+
UpdateHistoryButtons: 'ui:update-history-buttons',
|
|
53
|
+
ContextMenuShow: 'ui:contextmenu:show',
|
|
54
|
+
GridChange: 'ui:grid:change',
|
|
55
|
+
GridCurrent: 'ui:grid:current',
|
|
56
|
+
CopyObject: 'ui:copy-object',
|
|
57
|
+
CopyGroup: 'ui:copy-group',
|
|
58
|
+
PasteAt: 'ui:paste-at',
|
|
59
|
+
PasteImage: 'ui:paste-image',
|
|
60
|
+
PasteImageAt: 'ui:paste-image-at',
|
|
61
|
+
ZoomIn: 'ui:zoom:in',
|
|
62
|
+
ZoomOut: 'ui:zoom:out',
|
|
63
|
+
ZoomReset: 'ui:zoom:reset',
|
|
64
|
+
ZoomFit: 'ui:zoom:fit',
|
|
65
|
+
ZoomSelection: 'ui:zoom:selection',
|
|
66
|
+
ZoomPercent: 'ui:zoom:percent',
|
|
67
|
+
MinimapGetData: 'ui:minimap:get-data',
|
|
68
|
+
MinimapCenterOn: 'ui:minimap:center-on',
|
|
69
|
+
TextEditStart: 'ui:text:edit:start',
|
|
70
|
+
TextEditEnd: 'ui:text:edit:end',
|
|
71
|
+
LayerBringToFront: 'ui:layer:bring-to-front',
|
|
72
|
+
LayerBringForward: 'ui:layer:bring-forward',
|
|
73
|
+
LayerSendBackward: 'ui:layer:send-backward',
|
|
74
|
+
LayerSendToBack: 'ui:layer:send-to-back',
|
|
75
|
+
LayerGroupBringToFront: 'ui:layer-group:bring-to-front',
|
|
76
|
+
LayerGroupBringForward: 'ui:layer-group:bring-forward',
|
|
77
|
+
LayerGroupSendBackward: 'ui:layer-group:send-backward',
|
|
78
|
+
LayerGroupSendToBack: 'ui:layer-group:send-to-back',
|
|
79
|
+
MapToggle: 'ui:map:toggle',
|
|
80
|
+
PaintPick: 'ui:paint:pick',
|
|
81
|
+
CursorMove: 'ui:cursor:move',
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
Keyboard: {
|
|
85
|
+
KeyUp: 'keyboard:keyup',
|
|
86
|
+
SelectAll: 'keyboard:select-all',
|
|
87
|
+
Delete: 'keyboard:delete',
|
|
88
|
+
Escape: 'keyboard:escape',
|
|
89
|
+
ToolSelect: 'keyboard:tool-select',
|
|
90
|
+
Move: 'keyboard:move',
|
|
91
|
+
Copy: 'keyboard:copy',
|
|
92
|
+
Paste: 'keyboard:paste',
|
|
93
|
+
Undo: 'keyboard:undo',
|
|
94
|
+
Redo: 'keyboard:redo',
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
Object: {
|
|
98
|
+
Created: 'object:created',
|
|
99
|
+
Updated: 'object:updated',
|
|
100
|
+
Deleted: 'object:deleted',
|
|
101
|
+
Rotate: 'object:rotate',
|
|
102
|
+
TransformUpdated: 'object:transform:updated',
|
|
103
|
+
Reordered: 'object:reordered',
|
|
104
|
+
Pasted: 'object:pasted',
|
|
105
|
+
StateChanged: 'state:changed',
|
|
106
|
+
FileNameChange: 'object:filename:change',
|
|
107
|
+
},
|
|
108
|
+
|
|
109
|
+
History: {
|
|
110
|
+
Changed: 'history:changed',
|
|
111
|
+
Debug: 'history:debug',
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
Save: {
|
|
115
|
+
GetBoardData: 'save:get-board-data',
|
|
116
|
+
StatusChanged: 'save:status-changed',
|
|
117
|
+
Success: 'save:success',
|
|
118
|
+
Error: 'save:error',
|
|
119
|
+
Loaded: 'save:loaded',
|
|
120
|
+
LoadError: 'save:load-error',
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
Grid: {
|
|
124
|
+
BoardDataChanged: 'board:data-changed',
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
Board: {
|
|
128
|
+
Loaded: 'board:loaded',
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
Place: {
|
|
132
|
+
Set: 'place:set',
|
|
133
|
+
FileSelected: 'place:file:selected',
|
|
134
|
+
FileCanceled: 'place:file:canceled',
|
|
135
|
+
ImageSelected: 'place:image:selected',
|
|
136
|
+
ImageCanceled: 'place:image:canceled',
|
|
137
|
+
GhostShow: 'place:ghost:show',
|
|
138
|
+
GhostHide: 'place:ghost:hide',
|
|
139
|
+
GhostUpdate: 'place:ghost:update',
|
|
140
|
+
},
|
|
141
|
+
|
|
142
|
+
Draw: {
|
|
143
|
+
BrushSet: 'draw:brush:set',
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
|