blockymodel-web 0.1.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.
Files changed (71) hide show
  1. package/LICENSE +21 -0
  2. package/dist/blockymodel-web.js +2717 -0
  3. package/dist/blockymodel-web.js.map +1 -0
  4. package/dist/blockymodel-web.umd.cjs +122 -0
  5. package/dist/blockymodel-web.umd.cjs.map +1 -0
  6. package/dist/editor/Editor.d.ts +94 -0
  7. package/dist/editor/Editor.d.ts.map +1 -0
  8. package/dist/editor/History.d.ts +52 -0
  9. package/dist/editor/History.d.ts.map +1 -0
  10. package/dist/editor/SelectionManager.d.ts +57 -0
  11. package/dist/editor/SelectionManager.d.ts.map +1 -0
  12. package/dist/editor/Serializer.d.ts +44 -0
  13. package/dist/editor/Serializer.d.ts.map +1 -0
  14. package/dist/editor/TransformManager.d.ts +73 -0
  15. package/dist/editor/TransformManager.d.ts.map +1 -0
  16. package/dist/editor/commands/AddNodeCommand.d.ts +24 -0
  17. package/dist/editor/commands/AddNodeCommand.d.ts.map +1 -0
  18. package/dist/editor/commands/Command.d.ts +50 -0
  19. package/dist/editor/commands/Command.d.ts.map +1 -0
  20. package/dist/editor/commands/RemoveNodeCommand.d.ts +28 -0
  21. package/dist/editor/commands/RemoveNodeCommand.d.ts.map +1 -0
  22. package/dist/editor/commands/SetPositionCommand.d.ts +24 -0
  23. package/dist/editor/commands/SetPositionCommand.d.ts.map +1 -0
  24. package/dist/editor/commands/SetPropertyCommand.d.ts +41 -0
  25. package/dist/editor/commands/SetPropertyCommand.d.ts.map +1 -0
  26. package/dist/editor/commands/SetRotationCommand.d.ts +24 -0
  27. package/dist/editor/commands/SetRotationCommand.d.ts.map +1 -0
  28. package/dist/editor/commands/SetScaleCommand.d.ts +24 -0
  29. package/dist/editor/commands/SetScaleCommand.d.ts.map +1 -0
  30. package/dist/editor/index.d.ts +15 -0
  31. package/dist/editor/index.d.ts.map +1 -0
  32. package/dist/index.d.ts +21 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/loaders/BlockyModelLoader.d.ts +48 -0
  35. package/dist/loaders/BlockyModelLoader.d.ts.map +1 -0
  36. package/dist/types/blockymodel.d.ts +72 -0
  37. package/dist/types/blockymodel.d.ts.map +1 -0
  38. package/dist/ui/HierarchyPanel.d.ts +73 -0
  39. package/dist/ui/HierarchyPanel.d.ts.map +1 -0
  40. package/dist/ui/PropertyPanel.d.ts +59 -0
  41. package/dist/ui/PropertyPanel.d.ts.map +1 -0
  42. package/dist/ui/UVEditor.d.ts +56 -0
  43. package/dist/ui/UVEditor.d.ts.map +1 -0
  44. package/dist/ui/index.d.ts +4 -0
  45. package/dist/ui/index.d.ts.map +1 -0
  46. package/dist/viewer/ViewerController.d.ts +71 -0
  47. package/dist/viewer/ViewerController.d.ts.map +1 -0
  48. package/package.json +63 -0
  49. package/src/editor/Editor.ts +196 -0
  50. package/src/editor/History.ts +123 -0
  51. package/src/editor/SelectionManager.ts +183 -0
  52. package/src/editor/Serializer.ts +212 -0
  53. package/src/editor/TransformManager.ts +270 -0
  54. package/src/editor/commands/AddNodeCommand.ts +53 -0
  55. package/src/editor/commands/Command.ts +63 -0
  56. package/src/editor/commands/RemoveNodeCommand.ts +59 -0
  57. package/src/editor/commands/SetPositionCommand.ts +51 -0
  58. package/src/editor/commands/SetPropertyCommand.ts +100 -0
  59. package/src/editor/commands/SetRotationCommand.ts +51 -0
  60. package/src/editor/commands/SetScaleCommand.ts +51 -0
  61. package/src/editor/index.ts +19 -0
  62. package/src/index.ts +49 -0
  63. package/src/loaders/BlockyModelLoader.ts +281 -0
  64. package/src/main.ts +290 -0
  65. package/src/styles.css +597 -0
  66. package/src/types/blockymodel.ts +82 -0
  67. package/src/ui/HierarchyPanel.ts +343 -0
  68. package/src/ui/PropertyPanel.ts +434 -0
  69. package/src/ui/UVEditor.ts +336 -0
  70. package/src/ui/index.ts +4 -0
  71. package/src/viewer/ViewerController.ts +295 -0
@@ -0,0 +1,94 @@
1
+ import * as THREE from "three";
2
+ import { SelectionManager } from "./SelectionManager";
3
+ import { TransformManager } from "./TransformManager";
4
+ import { History } from "./History";
5
+ import type { Command } from "./commands/Command";
6
+ import type { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
7
+ export type EditorEvent = "selectionChanged" | "objectChanged" | "historyChanged" | "modeChanged" | "modelLoaded";
8
+ export interface EditorOptions {
9
+ scene: THREE.Scene;
10
+ camera: THREE.Camera;
11
+ renderer: THREE.WebGLRenderer;
12
+ controls: OrbitControls;
13
+ domElement: HTMLElement;
14
+ }
15
+ type EventCallback = (...args: unknown[]) => void;
16
+ /**
17
+ * Central editor state manager
18
+ * Coordinates selection, transforms, history, and emits events for UI updates
19
+ */
20
+ export declare class Editor {
21
+ readonly scene: THREE.Scene;
22
+ readonly camera: THREE.Camera;
23
+ readonly renderer: THREE.WebGLRenderer;
24
+ readonly controls: OrbitControls;
25
+ readonly domElement: HTMLElement;
26
+ readonly selection: SelectionManager;
27
+ readonly transform: TransformManager;
28
+ readonly history: History;
29
+ private currentModel;
30
+ private eventListeners;
31
+ constructor(options: EditorOptions);
32
+ /**
33
+ * Set the current model being edited
34
+ */
35
+ setModel(model: THREE.Group | null): void;
36
+ /**
37
+ * Get the current model
38
+ */
39
+ getModel(): THREE.Group | null;
40
+ /**
41
+ * Get the currently selected object
42
+ */
43
+ getSelected(): THREE.Object3D | null;
44
+ /**
45
+ * Select an object
46
+ */
47
+ select(object: THREE.Object3D | null): void;
48
+ /**
49
+ * Execute a command (adds to history)
50
+ */
51
+ execute(command: Command): void;
52
+ /**
53
+ * Undo the last command
54
+ */
55
+ undo(): void;
56
+ /**
57
+ * Redo the last undone command
58
+ */
59
+ redo(): void;
60
+ /**
61
+ * Check if undo is available
62
+ */
63
+ canUndo(): boolean;
64
+ /**
65
+ * Check if redo is available
66
+ */
67
+ canRedo(): boolean;
68
+ /**
69
+ * Set transform mode
70
+ */
71
+ setTransformMode(mode: "translate" | "rotate" | "scale"): void;
72
+ /**
73
+ * Get current transform mode
74
+ */
75
+ getTransformMode(): "translate" | "rotate" | "scale";
76
+ /**
77
+ * Add event listener
78
+ */
79
+ on(event: EditorEvent, callback: EventCallback): void;
80
+ /**
81
+ * Remove event listener
82
+ */
83
+ off(event: EditorEvent, callback: EventCallback): void;
84
+ /**
85
+ * Emit an event
86
+ */
87
+ emit(event: EditorEvent, ...args: unknown[]): void;
88
+ /**
89
+ * Clean up resources
90
+ */
91
+ dispose(): void;
92
+ }
93
+ export {};
94
+ //# sourceMappingURL=Editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Editor.d.ts","sourceRoot":"","sources":["../../src/editor/Editor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8CAA8C,CAAC;AAElF,MAAM,MAAM,WAAW,GACnB,kBAAkB,GAClB,eAAe,GACf,gBAAgB,GAChB,aAAa,GACb,aAAa,CAAC;AAElB,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IACnB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IACrB,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC;IAC9B,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,EAAE,WAAW,CAAC;CACzB;AAED,KAAK,aAAa,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAElD;;;GAGG;AACH,qBAAa,MAAM;IACjB,SAAgB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;IACnC,SAAgB,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;IACrC,SAAgB,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC;IAC9C,SAAgB,QAAQ,EAAE,aAAa,CAAC;IACxC,SAAgB,UAAU,EAAE,WAAW,CAAC;IAExC,SAAgB,SAAS,EAAE,gBAAgB,CAAC;IAC5C,SAAgB,SAAS,EAAE,gBAAgB,CAAC;IAC5C,SAAgB,OAAO,EAAE,OAAO,CAAC;IAEjC,OAAO,CAAC,YAAY,CAA4B;IAChD,OAAO,CAAC,cAAc,CAAmD;gBAE7D,OAAO,EAAE,aAAa;IAsClC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,IAAI,GAAG,IAAI;IAOzC;;OAEG;IACH,QAAQ,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI;IAI9B;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI;IAIpC;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI;IAI3C;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAK/B;;OAEG;IACH,IAAI,IAAI,IAAI;IAKZ;;OAEG;IACH,IAAI,IAAI,IAAI;IAKZ;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,WAAW,GAAG,QAAQ,GAAG,OAAO,GAAG,IAAI;IAI9D;;OAEG;IACH,gBAAgB,IAAI,WAAW,GAAG,QAAQ,GAAG,OAAO;IAIpD;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAOrD;;OAEG;IACH,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAItD;;OAEG;IACH,IAAI,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI;IAIlD;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,52 @@
1
+ import type { Command } from "./commands/Command";
2
+ type HistoryCallback = () => void;
3
+ /**
4
+ * Manages undo/redo history for editor commands
5
+ */
6
+ export declare class History {
7
+ private undoStack;
8
+ private redoStack;
9
+ private eventListeners;
10
+ /**
11
+ * Execute a command and add it to history
12
+ */
13
+ execute(command: Command): void;
14
+ /**
15
+ * Undo the last command
16
+ */
17
+ undo(): void;
18
+ /**
19
+ * Redo the last undone command
20
+ */
21
+ redo(): void;
22
+ /**
23
+ * Check if undo is available
24
+ */
25
+ canUndo(): boolean;
26
+ /**
27
+ * Check if redo is available
28
+ */
29
+ canRedo(): boolean;
30
+ /**
31
+ * Clear all history
32
+ */
33
+ clear(): void;
34
+ /**
35
+ * Get the number of items in undo stack
36
+ */
37
+ getUndoCount(): number;
38
+ /**
39
+ * Get the number of items in redo stack
40
+ */
41
+ getRedoCount(): number;
42
+ /**
43
+ * Add event listener
44
+ */
45
+ on(event: string, callback: HistoryCallback): void;
46
+ /**
47
+ * Emit event
48
+ */
49
+ private emit;
50
+ }
51
+ export {};
52
+ //# sourceMappingURL=History.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"History.d.ts","sourceRoot":"","sources":["../../src/editor/History.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAElD,KAAK,eAAe,GAAG,MAAM,IAAI,CAAC;AAIlC;;GAEG;AACH,qBAAa,OAAO;IAClB,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,cAAc,CAAgD;IAEtE;;OAEG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IA4B/B;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;IACH,IAAI,IAAI,IAAI;IASZ;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAOlD;;OAEG;IACH,OAAO,CAAC,IAAI;CAGb"}
@@ -0,0 +1,57 @@
1
+ import * as THREE from "three";
2
+ import type { Editor } from "./Editor";
3
+ type SelectionCallback = (object: THREE.Object3D | null) => void;
4
+ /**
5
+ * Manages object selection via raycasting
6
+ */
7
+ export declare class SelectionManager {
8
+ private editor;
9
+ private raycaster;
10
+ private mouse;
11
+ private selected;
12
+ private highlightedMaterials;
13
+ private eventListeners;
14
+ constructor(editor: Editor);
15
+ /**
16
+ * Handle click events for selection
17
+ */
18
+ private handleClick;
19
+ /**
20
+ * Check if object is part of TransformControls
21
+ */
22
+ private isTransformControlPart;
23
+ /**
24
+ * Select an object
25
+ */
26
+ select(object: THREE.Object3D | null): void;
27
+ /**
28
+ * Deselect current object
29
+ */
30
+ deselect(): void;
31
+ /**
32
+ * Get currently selected object
33
+ */
34
+ getSelected(): THREE.Object3D | null;
35
+ /**
36
+ * Apply highlight effect to object
37
+ */
38
+ private applyHighlight;
39
+ /**
40
+ * Remove highlight effect
41
+ */
42
+ private removeHighlight;
43
+ /**
44
+ * Add event listener
45
+ */
46
+ on(event: string, callback: SelectionCallback): void;
47
+ /**
48
+ * Emit event
49
+ */
50
+ private emit;
51
+ /**
52
+ * Clean up
53
+ */
54
+ dispose(): void;
55
+ }
56
+ export {};
57
+ //# sourceMappingURL=SelectionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SelectionManager.d.ts","sourceRoot":"","sources":["../../src/editor/SelectionManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,KAAK,iBAAiB,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,KAAK,IAAI,CAAC;AAKjE;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,KAAK,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAA+B;IAC/C,OAAO,CAAC,oBAAoB,CAAoF;IAChH,OAAO,CAAC,cAAc,CAAkD;gBAE5D,MAAM,EAAE,MAAM;IAU1B;;OAEG;IACH,OAAO,CAAC,WAAW;IA2CnB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI;IAgB3C;;OAEG;IACH,QAAQ,IAAI,IAAI;IAIhB;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC,QAAQ,GAAG,IAAI;IAIpC;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAOpD;;OAEG;IACH,OAAO,CAAC,IAAI;IAIZ;;OAEG;IACH,OAAO,IAAI,IAAI;CAKhB"}
@@ -0,0 +1,44 @@
1
+ import * as THREE from "three";
2
+ import type { BlockyModel } from "../types/blockymodel";
3
+ /**
4
+ * Serializer for exporting Three.js scene to BlockyModel format
5
+ */
6
+ export declare class Serializer {
7
+ /**
8
+ * Serialize a Three.js model group to BlockyModel JSON
9
+ */
10
+ serialize(model: THREE.Group): BlockyModel;
11
+ /**
12
+ * Check if an object should be serialized
13
+ */
14
+ private shouldSerialize;
15
+ /**
16
+ * Serialize a single node
17
+ */
18
+ private serializeNode;
19
+ /**
20
+ * Serialize position
21
+ */
22
+ private serializePosition;
23
+ /**
24
+ * Serialize quaternion
25
+ */
26
+ private serializeQuaternion;
27
+ /**
28
+ * Serialize shape
29
+ */
30
+ private serializeShape;
31
+ /**
32
+ * Get default texture layout
33
+ */
34
+ private getDefaultTextureLayout;
35
+ /**
36
+ * Export model to JSON string
37
+ */
38
+ toJSON(model: THREE.Group): string;
39
+ /**
40
+ * Download model as .blockymodel file
41
+ */
42
+ download(model: THREE.Group, filename?: string): void;
43
+ }
44
+ //# sourceMappingURL=Serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Serializer.d.ts","sourceRoot":"","sources":["../../src/editor/Serializer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EACV,WAAW,EAQZ,MAAM,sBAAsB,CAAC;AAS9B;;GAEG;AACH,qBAAa,UAAU;IACrB;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,WAAW;IAiB1C;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAQzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAS3B;;OAEG;IACH,OAAO,CAAC,cAAc;IA4DtB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAiB/B;;OAEG;IACH,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM;IAKlC;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,QAAQ,GAAE,MAA4B,GAAG,IAAI;CAY3E"}
@@ -0,0 +1,73 @@
1
+ import * as THREE from "three";
2
+ import { TransformControls } from "three/examples/jsm/controls/TransformControls.js";
3
+ import type { Editor } from "./Editor";
4
+ type TransformMode = "translate" | "rotate" | "scale";
5
+ type TransformCallback = (...args: unknown[]) => void;
6
+ /**
7
+ * Manages transform controls for selected objects
8
+ */
9
+ export declare class TransformManager {
10
+ private editor;
11
+ private controls;
12
+ private mode;
13
+ private eventListeners;
14
+ private transformStartPosition;
15
+ private transformStartRotation;
16
+ private transformStartScale;
17
+ private isTransforming;
18
+ constructor(editor: Editor);
19
+ /**
20
+ * Handle dragging state changes
21
+ */
22
+ private handleDraggingChanged;
23
+ /**
24
+ * Capture the start state before transform
25
+ */
26
+ private captureStartState;
27
+ /**
28
+ * Create a command after transform completes
29
+ */
30
+ private createCommand;
31
+ /**
32
+ * Handle object change during transform (live updates)
33
+ */
34
+ private handleObjectChange;
35
+ /**
36
+ * Handle keyboard shortcuts
37
+ */
38
+ private handleKeyDown;
39
+ /**
40
+ * Cancel current transform and restore original state
41
+ */
42
+ private cancelTransform;
43
+ /**
44
+ * Attach controls to an object
45
+ */
46
+ attach(object: THREE.Object3D | null): void;
47
+ /**
48
+ * Set transform mode
49
+ */
50
+ setMode(mode: TransformMode): void;
51
+ /**
52
+ * Get current transform mode
53
+ */
54
+ getMode(): TransformMode;
55
+ /**
56
+ * Get TransformControls instance
57
+ */
58
+ getControls(): TransformControls;
59
+ /**
60
+ * Add event listener
61
+ */
62
+ on(event: string, callback: TransformCallback): void;
63
+ /**
64
+ * Emit event
65
+ */
66
+ private emit;
67
+ /**
68
+ * Clean up
69
+ */
70
+ dispose(): void;
71
+ }
72
+ export {};
73
+ //# sourceMappingURL=TransformManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransformManager.d.ts","sourceRoot":"","sources":["../../src/editor/TransformManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AACrF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAMvC,KAAK,aAAa,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAC;AACtD,KAAK,iBAAiB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;AAEtD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,cAAc,CAAkD;IAGxE,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,sBAAsB,CAA4B;IAC1D,OAAO,CAAC,mBAAmB,CAA8B;IACzD,OAAO,CAAC,cAAc,CAAkB;gBAE5B,MAAM,EAAE,MAAM;IAuB1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAgB7B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IASzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAsDrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAS1B;;OAEG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAoBvB;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI;IAW3C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAMlC;;OAEG;IACH,OAAO,IAAI,aAAa;IAIxB;;OAEG;IACH,WAAW,IAAI,iBAAiB;IAIhC;;OAEG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAOpD;;OAEG;IACH,OAAO,CAAC,IAAI;IAIZ;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB"}
@@ -0,0 +1,24 @@
1
+ import * as THREE from "three";
2
+ import { BaseCommand } from "./Command";
3
+ /**
4
+ * Command to add a child node to a parent
5
+ */
6
+ export declare class AddNodeCommand extends BaseCommand {
7
+ readonly type = "AddNode";
8
+ readonly updatable = false;
9
+ private parent;
10
+ private child;
11
+ private index;
12
+ constructor(parent: THREE.Object3D, child: THREE.Object3D, index?: number);
13
+ execute(): void;
14
+ undo(): void;
15
+ /**
16
+ * Get the added child
17
+ */
18
+ getChild(): THREE.Object3D;
19
+ /**
20
+ * Get the parent
21
+ */
22
+ getParent(): THREE.Object3D;
23
+ }
24
+ //# sourceMappingURL=AddNodeCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AddNodeCommand.d.ts","sourceRoot":"","sources":["../../../src/editor/commands/AddNodeCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;IAC7C,QAAQ,CAAC,IAAI,aAAa;IAC1B,QAAQ,CAAC,SAAS,SAAS;IAE3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,KAAK,CAAS;gBAGpB,MAAM,EAAE,KAAK,CAAC,QAAQ,EACtB,KAAK,EAAE,KAAK,CAAC,QAAQ,EACrB,KAAK,CAAC,EAAE,MAAM;IAQhB,OAAO,IAAI,IAAI;IAUf,IAAI,IAAI,IAAI;IAIZ;;OAEG;IACH,QAAQ,IAAI,KAAK,CAAC,QAAQ;IAI1B;;OAEG;IACH,SAAS,IAAI,KAAK,CAAC,QAAQ;CAG5B"}
@@ -0,0 +1,50 @@
1
+ import * as THREE from "three";
2
+ /**
3
+ * Base interface for all editor commands
4
+ * Commands implement the command pattern for undo/redo support
5
+ */
6
+ export interface Command {
7
+ /**
8
+ * Unique identifier for this command type
9
+ */
10
+ readonly type: string;
11
+ /**
12
+ * The object this command operates on
13
+ */
14
+ readonly object: THREE.Object3D;
15
+ /**
16
+ * Execute the command (apply the new state)
17
+ */
18
+ execute(): void;
19
+ /**
20
+ * Undo the command (restore the previous state)
21
+ */
22
+ undo(): void;
23
+ /**
24
+ * Whether this command can be merged with subsequent commands of the same type
25
+ * Used for rapid updates (e.g., continuous dragging)
26
+ */
27
+ readonly updatable: boolean;
28
+ /**
29
+ * Update this command with a new end state
30
+ * Only called if updatable is true and commands are of same type on same object
31
+ */
32
+ update?(command: Command): void;
33
+ /**
34
+ * Timestamp when this command was created
35
+ */
36
+ readonly timestamp: number;
37
+ }
38
+ /**
39
+ * Base class providing common functionality for commands
40
+ */
41
+ export declare abstract class BaseCommand implements Command {
42
+ abstract readonly type: string;
43
+ readonly object: THREE.Object3D;
44
+ readonly updatable: boolean;
45
+ readonly timestamp: number;
46
+ constructor(object: THREE.Object3D, updatable?: boolean);
47
+ abstract execute(): void;
48
+ abstract undo(): void;
49
+ }
50
+ //# sourceMappingURL=Command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Command.d.ts","sourceRoot":"","sources":["../../../src/editor/commands/Command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;IAEhC;;OAEG;IACH,OAAO,IAAI,IAAI,CAAC;IAEhB;;OAEG;IACH,IAAI,IAAI,IAAI,CAAC;IAEb;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAE5B;;;OAGG;IACH,MAAM,CAAC,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,8BAAsB,WAAY,YAAW,OAAO;IAClD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,MAAM,EAAE,KAAK,CAAC,QAAQ,EAAE,SAAS,GAAE,OAAe;IAM9D,QAAQ,CAAC,OAAO,IAAI,IAAI;IACxB,QAAQ,CAAC,IAAI,IAAI,IAAI;CACtB"}
@@ -0,0 +1,28 @@
1
+ import * as THREE from "three";
2
+ import { BaseCommand } from "./Command";
3
+ /**
4
+ * Command to remove a node from its parent
5
+ */
6
+ export declare class RemoveNodeCommand extends BaseCommand {
7
+ readonly type = "RemoveNode";
8
+ readonly updatable = false;
9
+ private parent;
10
+ private child;
11
+ private index;
12
+ constructor(child: THREE.Object3D);
13
+ execute(): void;
14
+ undo(): void;
15
+ /**
16
+ * Get the removed child
17
+ */
18
+ getChild(): THREE.Object3D;
19
+ /**
20
+ * Get the parent
21
+ */
22
+ getParent(): THREE.Object3D;
23
+ /**
24
+ * Get the original index
25
+ */
26
+ getIndex(): number;
27
+ }
28
+ //# sourceMappingURL=RemoveNodeCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RemoveNodeCommand.d.ts","sourceRoot":"","sources":["../../../src/editor/commands/RemoveNodeCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAExC;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,WAAW;IAChD,QAAQ,CAAC,IAAI,gBAAgB;IAC7B,QAAQ,CAAC,SAAS,SAAS;IAE3B,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,KAAK,CAAS;gBAEV,KAAK,EAAE,KAAK,CAAC,QAAQ;IAUjC,OAAO,IAAI,IAAI;IAIf,IAAI,IAAI,IAAI;IAUZ;;OAEG;IACH,QAAQ,IAAI,KAAK,CAAC,QAAQ;IAI1B;;OAEG;IACH,SAAS,IAAI,KAAK,CAAC,QAAQ;IAI3B;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGnB"}
@@ -0,0 +1,24 @@
1
+ import * as THREE from "three";
2
+ import { BaseCommand, type Command } from "./Command";
3
+ /**
4
+ * Command to set an object's position
5
+ */
6
+ export declare class SetPositionCommand extends BaseCommand {
7
+ readonly type = "SetPosition";
8
+ readonly updatable = true;
9
+ private newPosition;
10
+ private oldPosition;
11
+ constructor(object: THREE.Object3D, newPosition: THREE.Vector3, oldPosition: THREE.Vector3);
12
+ execute(): void;
13
+ undo(): void;
14
+ update(command: Command): void;
15
+ /**
16
+ * Get the new position
17
+ */
18
+ getNewPosition(): THREE.Vector3;
19
+ /**
20
+ * Get the old position
21
+ */
22
+ getOldPosition(): THREE.Vector3;
23
+ }
24
+ //# sourceMappingURL=SetPositionCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetPositionCommand.d.ts","sourceRoot":"","sources":["../../../src/editor/commands/SetPositionCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,SAAS,QAAQ;IAE1B,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAgB;gBAGjC,MAAM,EAAE,KAAK,CAAC,QAAQ,EACtB,WAAW,EAAE,KAAK,CAAC,OAAO,EAC1B,WAAW,EAAE,KAAK,CAAC,OAAO;IAO5B,OAAO,IAAI,IAAI;IAIf,IAAI,IAAI,IAAI;IAIZ,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM9B;;OAEG;IACH,cAAc,IAAI,KAAK,CAAC,OAAO;IAI/B;;OAEG;IACH,cAAc,IAAI,KAAK,CAAC,OAAO;CAGhC"}
@@ -0,0 +1,41 @@
1
+ import * as THREE from "three";
2
+ import { BaseCommand, type Command } from "./Command";
3
+ /**
4
+ * Command to set a property on an object
5
+ */
6
+ export declare class SetPropertyCommand extends BaseCommand {
7
+ readonly type = "SetProperty";
8
+ readonly updatable = true;
9
+ private propertyPath;
10
+ private newValue;
11
+ private oldValue;
12
+ constructor(object: THREE.Object3D, propertyPath: string, newValue: unknown, oldValue: unknown);
13
+ /**
14
+ * Clone a value if it's an object/array
15
+ */
16
+ private cloneValue;
17
+ /**
18
+ * Get a nested property by path (e.g., "userData.size.x")
19
+ */
20
+ private getProperty;
21
+ /**
22
+ * Set a nested property by path
23
+ */
24
+ private setProperty;
25
+ execute(): void;
26
+ undo(): void;
27
+ update(command: Command): void;
28
+ /**
29
+ * Get the property path
30
+ */
31
+ getPropertyPath(): string;
32
+ /**
33
+ * Get the new value
34
+ */
35
+ getNewValue(): unknown;
36
+ /**
37
+ * Get the old value
38
+ */
39
+ getOldValue(): unknown;
40
+ }
41
+ //# sourceMappingURL=SetPropertyCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetPropertyCommand.d.ts","sourceRoot":"","sources":["../../../src/editor/commands/SetPropertyCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,SAAS,QAAQ;IAE1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,QAAQ,CAAU;gBAGxB,MAAM,EAAE,KAAK,CAAC,QAAQ,EACtB,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,OAAO,EACjB,QAAQ,EAAE,OAAO;IAQnB;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB,OAAO,IAAI,IAAI;IAIf,IAAI,IAAI,IAAI;IAIZ,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM9B;;OAEG;IACH,eAAe,IAAI,MAAM;IAIzB;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,WAAW,IAAI,OAAO;CAGvB"}
@@ -0,0 +1,24 @@
1
+ import * as THREE from "three";
2
+ import { BaseCommand, type Command } from "./Command";
3
+ /**
4
+ * Command to set an object's rotation
5
+ */
6
+ export declare class SetRotationCommand extends BaseCommand {
7
+ readonly type = "SetRotation";
8
+ readonly updatable = true;
9
+ private newRotation;
10
+ private oldRotation;
11
+ constructor(object: THREE.Object3D, newRotation: THREE.Euler, oldRotation: THREE.Euler);
12
+ execute(): void;
13
+ undo(): void;
14
+ update(command: Command): void;
15
+ /**
16
+ * Get the new rotation
17
+ */
18
+ getNewRotation(): THREE.Euler;
19
+ /**
20
+ * Get the old rotation
21
+ */
22
+ getOldRotation(): THREE.Euler;
23
+ }
24
+ //# sourceMappingURL=SetRotationCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetRotationCommand.d.ts","sourceRoot":"","sources":["../../../src/editor/commands/SetRotationCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtD;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;IACjD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,SAAS,QAAQ;IAE1B,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,WAAW,CAAc;gBAG/B,MAAM,EAAE,KAAK,CAAC,QAAQ,EACtB,WAAW,EAAE,KAAK,CAAC,KAAK,EACxB,WAAW,EAAE,KAAK,CAAC,KAAK;IAO1B,OAAO,IAAI,IAAI;IAIf,IAAI,IAAI,IAAI;IAIZ,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM9B;;OAEG;IACH,cAAc,IAAI,KAAK,CAAC,KAAK;IAI7B;;OAEG;IACH,cAAc,IAAI,KAAK,CAAC,KAAK;CAG9B"}
@@ -0,0 +1,24 @@
1
+ import * as THREE from "three";
2
+ import { BaseCommand, type Command } from "./Command";
3
+ /**
4
+ * Command to set an object's scale
5
+ */
6
+ export declare class SetScaleCommand extends BaseCommand {
7
+ readonly type = "SetScale";
8
+ readonly updatable = true;
9
+ private newScale;
10
+ private oldScale;
11
+ constructor(object: THREE.Object3D, newScale: THREE.Vector3, oldScale: THREE.Vector3);
12
+ execute(): void;
13
+ undo(): void;
14
+ update(command: Command): void;
15
+ /**
16
+ * Get the new scale
17
+ */
18
+ getNewScale(): THREE.Vector3;
19
+ /**
20
+ * Get the old scale
21
+ */
22
+ getOldScale(): THREE.Vector3;
23
+ }
24
+ //# sourceMappingURL=SetScaleCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SetScaleCommand.d.ts","sourceRoot":"","sources":["../../../src/editor/commands/SetScaleCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAEtD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;IAC9C,QAAQ,CAAC,IAAI,cAAc;IAC3B,QAAQ,CAAC,SAAS,QAAQ;IAE1B,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,QAAQ,CAAgB;gBAG9B,MAAM,EAAE,KAAK,CAAC,QAAQ,EACtB,QAAQ,EAAE,KAAK,CAAC,OAAO,EACvB,QAAQ,EAAE,KAAK,CAAC,OAAO;IAOzB,OAAO,IAAI,IAAI;IAIf,IAAI,IAAI,IAAI;IAIZ,MAAM,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAM9B;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC,OAAO;IAI5B;;OAEG;IACH,WAAW,IAAI,KAAK,CAAC,OAAO;CAG7B"}
@@ -0,0 +1,15 @@
1
+ export { Editor } from "./Editor";
2
+ export type { EditorEvent, EditorOptions } from "./Editor";
3
+ export { SelectionManager } from "./SelectionManager";
4
+ export { TransformManager } from "./TransformManager";
5
+ export { History } from "./History";
6
+ export { Serializer } from "./Serializer";
7
+ export type { Command } from "./commands/Command";
8
+ export { BaseCommand } from "./commands/Command";
9
+ export { SetPositionCommand } from "./commands/SetPositionCommand";
10
+ export { SetRotationCommand } from "./commands/SetRotationCommand";
11
+ export { SetScaleCommand } from "./commands/SetScaleCommand";
12
+ export { SetPropertyCommand } from "./commands/SetPropertyCommand";
13
+ export { AddNodeCommand } from "./commands/AddNodeCommand";
14
+ export { RemoveNodeCommand } from "./commands/RemoveNodeCommand";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAG3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG1C,YAAY,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,21 @@
1
+ export { Editor } from "./editor/Editor";
2
+ export { History } from "./editor/History";
3
+ export { SelectionManager } from "./editor/SelectionManager";
4
+ export { TransformManager } from "./editor/TransformManager";
5
+ export { Serializer } from "./editor/Serializer";
6
+ export { BaseCommand } from "./editor/commands/Command";
7
+ export type { Command } from "./editor/commands/Command";
8
+ export { SetPositionCommand } from "./editor/commands/SetPositionCommand";
9
+ export { SetRotationCommand } from "./editor/commands/SetRotationCommand";
10
+ export { SetScaleCommand } from "./editor/commands/SetScaleCommand";
11
+ export { SetPropertyCommand } from "./editor/commands/SetPropertyCommand";
12
+ export { AddNodeCommand } from "./editor/commands/AddNodeCommand";
13
+ export { RemoveNodeCommand } from "./editor/commands/RemoveNodeCommand";
14
+ export { PropertyPanel } from "./ui/PropertyPanel";
15
+ export { HierarchyPanel } from "./ui/HierarchyPanel";
16
+ export { UVEditor } from "./ui/UVEditor";
17
+ export { BlockyModelLoader } from "./loaders/BlockyModelLoader";
18
+ export { ViewerController } from "./viewer/ViewerController";
19
+ export type { BlockyModel, BlockyNode, BlockyShape, ShapeSettings, TextureLayout, FaceUV, Vec3, Vec2, Quaternion, ShapeType, ShadingMode, NormalDirection, } from "./types/blockymodel";
20
+ export { DEFAULT_POSITION, DEFAULT_ORIENTATION, DEFAULT_STRETCH, } from "./types/blockymodel";
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGjD,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,YAAY,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAGxE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAGhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAG7D,YAAY,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,WAAW,EACX,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,GAChB,MAAM,qBAAqB,CAAC"}