senangwebs-aframe-editor 1.6.5

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 (104) hide show
  1. package/.babelrc +3 -0
  2. package/.editorconfig +12 -0
  3. package/.eslintignore +2 -0
  4. package/.eslintrc +40 -0
  5. package/.github/workflows/ci.yml +39 -0
  6. package/.husky/pre-commit +4 -0
  7. package/.prettierignore +1 -0
  8. package/.prettierrc.json +5 -0
  9. package/.stylelintrc +12 -0
  10. package/LICENSE +21 -0
  11. package/README.md +75 -0
  12. package/assets/gltf.svg +49 -0
  13. package/dist/aframe-inspector.js +106250 -0
  14. package/dist/aframe-inspector.js.map +1 -0
  15. package/dist/aframe-inspector.min.js +29040 -0
  16. package/dist/aframe-inspector.min.js.LICENSE.txt +56 -0
  17. package/dist/aframe-inspector.min.js.map +1 -0
  18. package/examples/360video.html +48 -0
  19. package/examples/colors.html +18 -0
  20. package/examples/controllers.html +60 -0
  21. package/examples/embedded-zoom.html +78 -0
  22. package/examples/embedded.html +79 -0
  23. package/examples/empty.html +13 -0
  24. package/examples/index-aframe.html +66 -0
  25. package/examples/index.html +71 -0
  26. package/examples/supercraft.html +6 -0
  27. package/index.html +8 -0
  28. package/package.json +84 -0
  29. package/senangwebs-webverse-editor.png +0 -0
  30. package/src/components/AwesomeIcon.js +53 -0
  31. package/src/components/Collapsible.js +57 -0
  32. package/src/components/EntityRepresentation.js +83 -0
  33. package/src/components/Main.js +222 -0
  34. package/src/components/__tests__/Collapsible.test.js +30 -0
  35. package/src/components/components/AddComponent.js +104 -0
  36. package/src/components/components/CommonComponents.js +160 -0
  37. package/src/components/components/Component.js +151 -0
  38. package/src/components/components/ComponentsContainer.js +52 -0
  39. package/src/components/components/DefaultComponents.js +1 -0
  40. package/src/components/components/Mixins.js +83 -0
  41. package/src/components/components/PropertyRow.js +145 -0
  42. package/src/components/components/Sidebar.js +51 -0
  43. package/src/components/icons/BackViewIcon.js +27 -0
  44. package/src/components/icons/BottomViewIcon.js +26 -0
  45. package/src/components/icons/FrontViewIcon.js +23 -0
  46. package/src/components/icons/LeftViewIcon.js +24 -0
  47. package/src/components/icons/PerspectiveIcon.js +23 -0
  48. package/src/components/icons/PrimitiveBoxIcon.js +143 -0
  49. package/src/components/icons/PrimitiveConeIcon.js +44 -0
  50. package/src/components/icons/PrimitiveCylinderIcon.js +51 -0
  51. package/src/components/icons/PrimitiveEmptyEntityIcon.js +78 -0
  52. package/src/components/icons/PrimitiveImageIcon.js +86 -0
  53. package/src/components/icons/PrimitiveLightIcon.js +107 -0
  54. package/src/components/icons/PrimitivePlaneIcon.js +87 -0
  55. package/src/components/icons/PrimitiveSphereIcon.js +39 -0
  56. package/src/components/icons/PrimitiveTextIcon.js +89 -0
  57. package/src/components/icons/PrimitiveTorusIcon.js +31 -0
  58. package/src/components/icons/RightViewIcon.js +24 -0
  59. package/src/components/icons/TopViewIcon.js +24 -0
  60. package/src/components/modals/Modal.js +107 -0
  61. package/src/components/modals/ModalHelp.js +97 -0
  62. package/src/components/modals/ModalPrimitive.js +114 -0
  63. package/src/components/modals/ModalTextures.js +430 -0
  64. package/src/components/scenegraph/Entity.js +142 -0
  65. package/src/components/scenegraph/SceneGraph.js +337 -0
  66. package/src/components/scenegraph/Toolbar.js +147 -0
  67. package/src/components/viewport/CameraToolbar.js +122 -0
  68. package/src/components/viewport/TransformToolbar.js +102 -0
  69. package/src/components/viewport/ViewportHUD.js +33 -0
  70. package/src/components/widgets/BooleanWidget.js +49 -0
  71. package/src/components/widgets/ColorWidget.js +89 -0
  72. package/src/components/widgets/InputWidget.js +42 -0
  73. package/src/components/widgets/NumberWidget.js +179 -0
  74. package/src/components/widgets/SelectWidget.js +58 -0
  75. package/src/components/widgets/TextureWidget.js +252 -0
  76. package/src/components/widgets/Vec2Widget.js +55 -0
  77. package/src/components/widgets/Vec3Widget.js +58 -0
  78. package/src/components/widgets/Vec4Widget.js +61 -0
  79. package/src/components/widgets/index.js +9 -0
  80. package/src/index.js +301 -0
  81. package/src/lib/EditorControls.js +336 -0
  82. package/src/lib/Events.js +6 -0
  83. package/src/lib/TransformControls.js +1365 -0
  84. package/src/lib/assetsLoader.js +43 -0
  85. package/src/lib/assetsUtils.js +30 -0
  86. package/src/lib/cameras.js +121 -0
  87. package/src/lib/entity.js +556 -0
  88. package/src/lib/history.js +30 -0
  89. package/src/lib/raycaster.js +129 -0
  90. package/src/lib/shortcuts.js +211 -0
  91. package/src/lib/utils.js +118 -0
  92. package/src/lib/viewport.js +268 -0
  93. package/src/style/components.styl +275 -0
  94. package/src/style/entity.styl +22 -0
  95. package/src/style/help.styl +40 -0
  96. package/src/style/index.styl +358 -0
  97. package/src/style/lib.styl +41 -0
  98. package/src/style/primitiveModal.styl +90 -0
  99. package/src/style/scenegraph.styl +173 -0
  100. package/src/style/select.styl +71 -0
  101. package/src/style/textureModal.styl +220 -0
  102. package/src/style/viewport.styl +168 -0
  103. package/src/style/widgets.styl +71 -0
  104. package/webpack.config.js +65 -0
@@ -0,0 +1,336 @@
1
+ /**
2
+ * @author qiao / https://github.com/qiao
3
+ * @author mrdoob / http://mrdoob.com
4
+ * @author alteredq / http://alteredqualia.com/
5
+ * @author WestLangley / http://github.com/WestLangley
6
+ */
7
+
8
+ THREE.EditorControls = function (_object, domElement) {
9
+ domElement = domElement !== undefined ? domElement : document;
10
+
11
+ // API
12
+
13
+ this.enabled = true;
14
+ this.center = new THREE.Vector3();
15
+ this.panSpeed = 0.001;
16
+ this.zoomSpeed = 0.1;
17
+ this.rotationSpeed = 0.005;
18
+
19
+ var object = _object;
20
+
21
+ // internals
22
+
23
+ var scope = this;
24
+ var vector = new THREE.Vector3();
25
+ var delta = new THREE.Vector3();
26
+ var box = new THREE.Box3();
27
+
28
+ var STATE = { NONE: -1, ROTATE: 0, ZOOM: 1, PAN: 2 };
29
+ var state = STATE.NONE;
30
+
31
+ var center = this.center;
32
+ var normalMatrix = new THREE.Matrix3();
33
+ var pointer = new THREE.Vector2();
34
+ var pointerOld = new THREE.Vector2();
35
+ var spherical = new THREE.Spherical();
36
+ var sphere = new THREE.Sphere();
37
+
38
+ this.isOrthographic = false;
39
+ this.rotationEnabled = true;
40
+ this.setCamera = function (_object) {
41
+ object = _object;
42
+ if (object.type === 'OrthographicCamera') {
43
+ this.rotationEnabled = false;
44
+ this.isOrthographic = true;
45
+ } else {
46
+ this.rotationEnabled = true;
47
+ this.isOrthographic = false;
48
+ }
49
+ };
50
+ this.setCamera(_object);
51
+
52
+ // events
53
+
54
+ var changeEvent = { type: 'change' };
55
+
56
+ this.focus = function (target) {
57
+ if (this.isOrthographic) {
58
+ return;
59
+ }
60
+ var distance;
61
+
62
+ box.setFromObject(target);
63
+
64
+ if (box.isEmpty() === false && !isNaN(box.min.x)) {
65
+ box.getCenter(center);
66
+ distance = box.getBoundingSphere(sphere).radius;
67
+ } else {
68
+ // Focusing on an Group, AmbientLight, etc
69
+
70
+ center.setFromMatrixPosition(target.matrixWorld);
71
+ distance = 0.1;
72
+ }
73
+
74
+ object.position.copy(
75
+ target.localToWorld(
76
+ new THREE.Vector3(0, center.y + distance * 0.5, distance * 2.5)
77
+ )
78
+ );
79
+ const pos = target.getWorldPosition(new THREE.Vector3());
80
+ pos.y = center.y;
81
+ object.lookAt(pos);
82
+
83
+ scope.dispatchEvent(changeEvent);
84
+ };
85
+
86
+ this.pan = function (delta) {
87
+ var distance;
88
+ if (this.isOrthographic) {
89
+ distance = Math.abs(object.right);
90
+ } else {
91
+ distance = object.position.distanceTo(center);
92
+ }
93
+
94
+ delta.multiplyScalar(distance * scope.panSpeed);
95
+ delta.applyMatrix3(normalMatrix.getNormalMatrix(object.matrix));
96
+
97
+ object.position.add(delta);
98
+ center.add(delta);
99
+
100
+ scope.dispatchEvent(changeEvent);
101
+ };
102
+
103
+ var ratio = 1;
104
+ this.setAspectRatio = function (_ratio) {
105
+ ratio = _ratio;
106
+ };
107
+
108
+ this.zoom = function (delta) {
109
+ var distance = object.position.distanceTo(center);
110
+
111
+ delta.multiplyScalar(distance * scope.zoomSpeed);
112
+
113
+ if (delta.length() > distance) return;
114
+
115
+ delta.applyMatrix3(normalMatrix.getNormalMatrix(object.matrix));
116
+
117
+ if (this.isOrthographic) {
118
+ // Change FOV for ortho.
119
+ let factor = 1;
120
+ if (delta.x + delta.y + delta.z < 0) {
121
+ factor = -1;
122
+ }
123
+ delta = distance * scope.zoomSpeed * factor;
124
+ object.left -= delta * ratio;
125
+ object.bottom -= delta;
126
+ object.right += delta * ratio;
127
+ object.top += delta;
128
+ if (object.left >= -0.0001) {
129
+ return;
130
+ }
131
+ object.updateProjectionMatrix();
132
+ } else {
133
+ object.position.add(delta);
134
+ }
135
+
136
+ scope.dispatchEvent(changeEvent);
137
+ };
138
+
139
+ this.rotate = function (delta) {
140
+ if (!this.rotationEnabled) {
141
+ return;
142
+ }
143
+
144
+ vector.copy(object.position).sub(center);
145
+
146
+ spherical.setFromVector3(vector);
147
+
148
+ spherical.theta += delta.x;
149
+ spherical.phi += delta.y;
150
+
151
+ spherical.makeSafe();
152
+
153
+ vector.setFromSpherical(spherical);
154
+
155
+ object.position.copy(center).add(vector);
156
+
157
+ object.lookAt(center);
158
+
159
+ scope.dispatchEvent(changeEvent);
160
+ };
161
+
162
+ // mouse
163
+
164
+ function onMouseDown(event) {
165
+ if (scope.enabled === false) return;
166
+
167
+ if (event.button === 0) {
168
+ state = STATE.ROTATE;
169
+ } else if (event.button === 1) {
170
+ state = STATE.ZOOM;
171
+ } else if (event.button === 2) {
172
+ state = STATE.PAN;
173
+ }
174
+
175
+ pointerOld.set(event.clientX, event.clientY);
176
+
177
+ domElement.addEventListener('mousemove', onMouseMove, false);
178
+ domElement.addEventListener('mouseup', onMouseUp, false);
179
+ domElement.addEventListener('mouseout', onMouseUp, false);
180
+ domElement.addEventListener('dblclick', onMouseUp, false);
181
+ }
182
+
183
+ function onMouseMove(event) {
184
+ if (scope.enabled === false) return;
185
+
186
+ pointer.set(event.clientX, event.clientY);
187
+
188
+ var movementX = pointer.x - pointerOld.x;
189
+ var movementY = pointer.y - pointerOld.y;
190
+
191
+ if (state === STATE.ROTATE) {
192
+ scope.rotate(
193
+ delta.set(
194
+ -movementX * scope.rotationSpeed,
195
+ -movementY * scope.rotationSpeed,
196
+ 0
197
+ )
198
+ );
199
+ } else if (state === STATE.ZOOM) {
200
+ scope.zoom(delta.set(0, 0, movementY));
201
+ } else if (state === STATE.PAN) {
202
+ scope.pan(delta.set(-movementX, movementY, 0));
203
+ }
204
+
205
+ pointerOld.set(event.clientX, event.clientY);
206
+ }
207
+
208
+ function onMouseUp(event) {
209
+ domElement.removeEventListener('mousemove', onMouseMove, false);
210
+ domElement.removeEventListener('mouseup', onMouseUp, false);
211
+ domElement.removeEventListener('mouseout', onMouseUp, false);
212
+ domElement.removeEventListener('dblclick', onMouseUp, false);
213
+
214
+ state = STATE.NONE;
215
+ }
216
+
217
+ function onMouseWheel(event) {
218
+ event.preventDefault();
219
+
220
+ // Normalize deltaY due to https://bugzilla.mozilla.org/show_bug.cgi?id=1392460
221
+ scope.zoom(delta.set(0, 0, event.deltaY > 0 ? 1 : -1));
222
+ }
223
+
224
+ function contextmenu(event) {
225
+ event.preventDefault();
226
+ }
227
+
228
+ this.dispose = function () {
229
+ domElement.removeEventListener('contextmenu', contextmenu, false);
230
+ domElement.removeEventListener('mousedown', onMouseDown, false);
231
+ domElement.removeEventListener('wheel', onMouseWheel, false);
232
+
233
+ domElement.removeEventListener('mousemove', onMouseMove, false);
234
+ domElement.removeEventListener('mouseup', onMouseUp, false);
235
+ domElement.removeEventListener('mouseout', onMouseUp, false);
236
+ domElement.removeEventListener('dblclick', onMouseUp, false);
237
+
238
+ domElement.removeEventListener('touchstart', touchStart, false);
239
+ domElement.removeEventListener('touchmove', touchMove, false);
240
+ };
241
+
242
+ domElement.addEventListener('contextmenu', contextmenu, false);
243
+ domElement.addEventListener('mousedown', onMouseDown, false);
244
+ domElement.addEventListener('wheel', onMouseWheel, false);
245
+
246
+ // touch
247
+
248
+ var touches = [new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3()];
249
+ var prevTouches = [
250
+ new THREE.Vector3(),
251
+ new THREE.Vector3(),
252
+ new THREE.Vector3()
253
+ ];
254
+
255
+ var prevDistance = null;
256
+
257
+ function touchStart(event) {
258
+ if (scope.enabled === false) return;
259
+
260
+ switch (event.touches.length) {
261
+ case 1:
262
+ touches[0].set(event.touches[0].pageX, event.touches[0].pageY, 0);
263
+ touches[1].set(event.touches[0].pageX, event.touches[0].pageY, 0);
264
+ break;
265
+
266
+ case 2:
267
+ touches[0].set(event.touches[0].pageX, event.touches[0].pageY, 0);
268
+ touches[1].set(event.touches[1].pageX, event.touches[1].pageY, 0);
269
+ prevDistance = touches[0].distanceTo(touches[1]);
270
+ break;
271
+ }
272
+
273
+ prevTouches[0].copy(touches[0]);
274
+ prevTouches[1].copy(touches[1]);
275
+ }
276
+
277
+ function touchMove(event) {
278
+ if (scope.enabled === false) return;
279
+
280
+ event.preventDefault();
281
+ event.stopPropagation();
282
+
283
+ function getClosest(touch, touches) {
284
+ var closest = touches[0];
285
+
286
+ for (var i in touches) {
287
+ if (closest.distanceTo(touch) > touches[i].distanceTo(touch)) {
288
+ closest = touches[i];
289
+ }
290
+ }
291
+
292
+ return closest;
293
+ }
294
+
295
+ switch (event.touches.length) {
296
+ case 1:
297
+ touches[0].set(event.touches[0].pageX, event.touches[0].pageY, 0);
298
+ touches[1].set(event.touches[0].pageX, event.touches[0].pageY, 0);
299
+ scope.rotate(
300
+ touches[0]
301
+ .sub(getClosest(touches[0], prevTouches))
302
+ .multiplyScalar(-scope.rotationSpeed)
303
+ );
304
+ break;
305
+
306
+ case 2:
307
+ touches[0].set(event.touches[0].pageX, event.touches[0].pageY, 0);
308
+ touches[1].set(event.touches[1].pageX, event.touches[1].pageY, 0);
309
+ var distance = touches[0].distanceTo(touches[1]);
310
+ scope.zoom(delta.set(0, 0, prevDistance - distance));
311
+ prevDistance = distance;
312
+
313
+ var offset0 = touches[0]
314
+ .clone()
315
+ .sub(getClosest(touches[0], prevTouches));
316
+ var offset1 = touches[1]
317
+ .clone()
318
+ .sub(getClosest(touches[1], prevTouches));
319
+ offset0.x = -offset0.x;
320
+ offset1.x = -offset1.x;
321
+
322
+ scope.pan(offset0.add(offset1).multiplyScalar(0.5));
323
+
324
+ break;
325
+ }
326
+
327
+ prevTouches[0].copy(touches[0]);
328
+ prevTouches[1].copy(touches[1]);
329
+ }
330
+
331
+ domElement.addEventListener('touchstart', touchStart, false);
332
+ domElement.addEventListener('touchmove', touchMove, false);
333
+ };
334
+
335
+ THREE.EditorControls.prototype = Object.create(THREE.EventDispatcher.prototype);
336
+ THREE.EditorControls.prototype.constructor = THREE.EditorControls;
@@ -0,0 +1,6 @@
1
+ import EventEmitter from 'events';
2
+
3
+ const Events = new EventEmitter();
4
+ Events.setMaxListeners(0);
5
+
6
+ export default Events;