@planara/core 2.7.0 → 2.7.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/dist/index.es.js CHANGED
@@ -1,30 +1,30 @@
1
1
  import "reflect-metadata";
2
2
  import * as a from "three";
3
- import { Controls as ze, Vector3 as T, MOUSE as j, TOUCH as R, Quaternion as be, Spherical as ve, Vector2 as w, Ray as Ue, Plane as We, MathUtils as Fe } from "three";
4
- import { FigureType as E, SelectMode as v, Figure as Ze, DisplayMode as k, DEFAULT_TOOL_RULES as ye, ToolType as C, SceneMode as V } from "@planara/types";
5
- import { SymmetricAxesHelper as $e, OrbitWithState as Be, CameraAxesGizmo as Xe, ModelingTransformControls as Ge } from "@planara/three";
6
- import { injectable as u, inject as h, injectAll as U, container as Ke } from "tsyringe";
7
- import { EventEmitter as qe } from "events";
8
- import { makeAutoObservable as Qe } from "mobx";
9
- const Je = {
10
- [E.Plane]: () => new a.PlaneGeometry(1, 1, 1, 1),
11
- [E.Cube]: () => new a.BoxGeometry(1, 1, 1, 1, 1, 1),
12
- [E.UVSphere]: () => new a.SphereGeometry(0.5, 32, 16),
13
- [E.Icosphere]: () => new a.IcosahedronGeometry(0.5, 0),
14
- [E.Cylinder]: () => new a.CylinderGeometry(0.5, 0.5, 1, 32, 1, !1),
15
- [E.Cone]: () => new a.ConeGeometry(0.5, 1, 32, 1, !1),
16
- [E.Torus]: () => new a.TorusGeometry(0.5, 0.2, 16, 64),
17
- [E.Circle]: () => new a.CircleGeometry(0.5, 32),
18
- [E.Sphere]: () => new a.SphereGeometry(0.5, 32, 16),
19
- [E.Custom]: function() {
3
+ import { Controls as Ue, Vector3 as T, MOUSE as I, TOUCH as R, Quaternion as ve, Spherical as ye, Vector2 as w, Ray as We, Plane as Fe, MathUtils as Ze } from "three";
4
+ import { FigureType as S, SelectMode as v, Figure as $e, DisplayMode as V, DEFAULT_TOOL_RULES as Me, ToolType as C, SceneMode as N } from "@planara/types";
5
+ import { SymmetricAxesHelper as Be, OrbitWithState as Xe, CameraAxesGizmo as Ge, ModelingTransformControls as Ke } from "@planara/three";
6
+ import { injectable as u, inject as h, injectAll as W, container as qe } from "tsyringe";
7
+ import { EventEmitter as Qe } from "events";
8
+ import { makeAutoObservable as Je } from "mobx";
9
+ const et = {
10
+ [S.Plane]: () => new a.PlaneGeometry(1, 1, 1, 1),
11
+ [S.Cube]: () => new a.BoxGeometry(1, 1, 1, 1, 1, 1),
12
+ [S.UVSphere]: () => new a.SphereGeometry(0.5, 32, 16),
13
+ [S.Icosphere]: () => new a.IcosahedronGeometry(0.5, 0),
14
+ [S.Cylinder]: () => new a.CylinderGeometry(0.5, 0.5, 1, 32, 1, !1),
15
+ [S.Cone]: () => new a.ConeGeometry(0.5, 1, 32, 1, !1),
16
+ [S.Torus]: () => new a.TorusGeometry(0.5, 0.2, 16, 64),
17
+ [S.Circle]: () => new a.CircleGeometry(0.5, 32),
18
+ [S.Sphere]: () => new a.SphereGeometry(0.5, 32, 16),
19
+ [S.Custom]: function() {
20
20
  throw new Error("Custom geometry is not generated here.");
21
21
  }
22
- }, je = new a.MeshStandardMaterial({
22
+ }, Ie = new a.MeshStandardMaterial({
23
23
  color: 12566463,
24
24
  metalness: 0,
25
25
  roughness: 0.6
26
- }), et = 8;
27
- class Ie {
26
+ }), tt = 8;
27
+ class He {
28
28
  /** Корневой объект сцены */
29
29
  scene;
30
30
  /** Камера для сцены */
@@ -81,7 +81,7 @@ class Ie {
81
81
  addFigure(e) {
82
82
  const s = new a.BufferGeometry();
83
83
  s.setAttribute("position", new a.Float32BufferAttribute(e.position, 3)), e.normal && s.setAttribute("normal", new a.Float32BufferAttribute(e.normal, 3)), e.uv && s.setAttribute("uv", new a.Float32BufferAttribute(e.uv, 2));
84
- const i = new a.Mesh(s, je);
84
+ const i = new a.Mesh(s, Ie);
85
85
  return this.scene.add(i), this.meshes.push(i), i;
86
86
  }
87
87
  /**
@@ -172,15 +172,15 @@ class Ie {
172
172
  this.meshes && (this.meshes.length = 0, this.meshes = []), this.scene = null, this.camera = null, this.renderer?.dispose(), this.canvas = null;
173
173
  }
174
174
  }
175
- var tt = Object.getOwnPropertyDescriptor, st = (t, e, s, i) => {
176
- for (var r = i > 1 ? void 0 : i ? tt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
175
+ var st = Object.getOwnPropertyDescriptor, it = (t, e, s, i) => {
176
+ for (var r = i > 1 ? void 0 : i ? st(e, s) : e, o = t.length - 1, n; o >= 0; o--)
177
177
  (n = t[o]) && (r = n(r) || r);
178
178
  return r;
179
179
  };
180
- let X = class {
180
+ let G = class {
181
181
  _emitter;
182
182
  constructor() {
183
- this._emitter = new qe();
183
+ this._emitter = new Qe();
184
184
  }
185
185
  /** Публикация события */
186
186
  emit(t, e) {
@@ -195,22 +195,22 @@ let X = class {
195
195
  this._emitter.off(t, e);
196
196
  }
197
197
  };
198
- X = st([
198
+ G = it([
199
199
  u()
200
- ], X);
201
- var I = /* @__PURE__ */ ((t) => (t.SelectHover = "select.hover", t.SelectClick = "select.click", t.ToolSelect = "tool.select", t))(I || {});
202
- const it = 0.03, rt = 0.05, He = 0, ot = 1, nt = 2, L = 31, W = 16776960, F = 16755200, at = 2236962, ht = 2236962, lt = (t) => !!t && t.isMesh, ke = (t) => {
200
+ ], G);
201
+ var H = /* @__PURE__ */ ((t) => (t.SelectHover = "select.hover", t.SelectClick = "select.click", t.ToolSelect = "tool.select", t))(H || {});
202
+ const rt = 0.03, ot = 0.05, ke = 0, nt = 1, at = 2, L = 31, F = 16776960, Z = 16755200, ht = 2236962, lt = 2236962, ct = (t) => !!t && t.isMesh, Ve = (t) => {
203
203
  let e = t;
204
204
  for (; e; ) {
205
205
  if (e.isMesh) return e;
206
206
  e = e.parent;
207
207
  }
208
208
  return null;
209
- }, Ve = (t) => {
209
+ }, Ne = (t) => {
210
210
  const e = new a.BufferGeometry();
211
211
  e.setAttribute("position", t.getAttribute("position")), e.computeBoundingSphere(), e.computeBoundingBox();
212
212
  const s = new a.PointsMaterial({
213
- color: ht,
213
+ color: lt,
214
214
  size: 6,
215
215
  sizeAttenuation: !1,
216
216
  depthTest: !1,
@@ -218,36 +218,36 @@ const it = 0.03, rt = 0.05, He = 0, ot = 1, nt = 2, L = 31, W = 16776960, F = 16
218
218
  transparent: !0,
219
219
  opacity: 0.9
220
220
  }), i = new a.Points(e, s);
221
- return i.layers.set(nt), i.renderOrder = 1e3, i.visible = !1, i;
222
- }, Ne = (t) => {
221
+ return i.layers.set(at), i.renderOrder = 1e3, i.visible = !1, i;
222
+ }, Ye = (t) => {
223
223
  const e = new a.EdgesGeometry(t), s = new a.LineSegments(
224
224
  e,
225
- new a.LineBasicMaterial({ color: at, linewidth: 1 })
225
+ new a.LineBasicMaterial({ color: ht, linewidth: 1 })
226
226
  );
227
- return s.layers.set(ot), s;
228
- }, ct = (t) => {
227
+ return s.layers.set(nt), s;
228
+ }, dt = (t) => {
229
229
  const e = { x: t.position.x, y: t.position.y, z: t.position.z }, s = { x: t.rotation.x, y: t.rotation.y, z: t.rotation.z }, i = { x: t.scale.x, y: t.scale.y, z: t.scale.z }, r = new a.Box3().setFromObject(t), o = new a.Vector3();
230
230
  r.getSize(o);
231
231
  const n = { x: o.x, y: o.y, z: o.z };
232
232
  return { position: e, rotation: s, scale: i, size: n };
233
233
  };
234
- var dt = Object.getOwnPropertyDescriptor, _t = (t, e, s, i) => {
235
- for (var r = i > 1 ? void 0 : i ? dt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
234
+ var _t = Object.getOwnPropertyDescriptor, pt = (t, e, s, i) => {
235
+ for (var r = i > 1 ? void 0 : i ? _t(e, s) : e, o = t.length - 1, n; o >= 0; o--)
236
236
  (n = t[o]) && (r = n(r) || r);
237
237
  return r;
238
- }, Me = (t, e) => (s, i) => e(s, i, t);
239
- let G = class extends Ie {
238
+ }, Ee = (t, e) => (s, i) => e(s, i, t);
239
+ let K = class extends He {
240
240
  constructor(t, e) {
241
241
  super(t), this._canvas = t, this._bus = e;
242
242
  const s = new a.GridHelper(10, 10);
243
243
  s.position.y = -1e-3, this.scene.add(s);
244
- const i = new $e(6);
245
- this.scene.add(i), this._orbit = new Be(this.camera, this.renderer.domElement), this._orbit.enableDamping = !0, this._orbit.dampingFactor = 0.05, this._cameraGizmo = new Xe(this.renderer, this.camera, {
244
+ const i = new Be(6);
245
+ this.scene.add(i), this._orbit = new Xe(this.camera, this.renderer.domElement), this._orbit.enableDamping = !0, this._orbit.dampingFactor = 0.05, this._cameraGizmo = new Ge(this.renderer, this.camera, {
246
246
  size: 96,
247
247
  // Размер квадрата
248
248
  margin: 36
249
249
  // Отступы по сторонам (снизу и справа)
250
- }), this._raycaster = new a.Raycaster(), this._mouse = new a.Vector2(), this.scene.add(new a.HemisphereLight(16777215, 4473924, 0.6)), this.camera.layers.enable(0), this.camera.layers.enable(1), this._transform = new Ge(this.camera, this.renderer.domElement), this._transformHelper = this._transform.getHelper(), this.scene.add(this._transformHelper), this._isEventListenersAdded || this._initMouseListeners();
250
+ }), this._raycaster = new a.Raycaster(), this._mouse = new a.Vector2(), this.scene.add(new a.HemisphereLight(16777215, 4473924, 0.6)), this.camera.layers.enable(0), this.camera.layers.enable(1), this._transform = new Ke(this.camera, this.renderer.domElement), this._transformHelper = this._transform.getHelper(), this.scene.add(this._transformHelper), this._isEventListenersAdded || this._initMouseListeners();
251
251
  }
252
252
  /** Orbit-контроллер для управления камерой */
253
253
  _orbit;
@@ -277,10 +277,10 @@ let G = class extends Ie {
277
277
  /** Добавление фигуры на сцену */
278
278
  addFigure(t) {
279
279
  const e = super.addFigure(t);
280
- e.layers.enable(He);
281
- const s = Ne(e.geometry);
280
+ e.layers.enable(ke);
281
+ const s = Ye(e.geometry);
282
282
  e.add(s);
283
- const i = Ve(e.geometry);
283
+ const i = Ne(e.geometry);
284
284
  return e.add(i), e;
285
285
  }
286
286
  /**
@@ -325,10 +325,10 @@ let G = class extends Ie {
325
325
  e.layers.set(0);
326
326
  break;
327
327
  case v.Edge:
328
- e.layers.set(1), e.params.Line.threshold = it;
328
+ e.layers.set(1), e.params.Line.threshold = rt;
329
329
  break;
330
330
  case v.Vertex:
331
- e.layers.set(2), e.params.Points.threshold = rt;
331
+ e.layers.set(2), e.params.Points.threshold = ot;
332
332
  break;
333
333
  }
334
334
  }
@@ -350,11 +350,11 @@ let G = class extends Ie {
350
350
  }
351
351
  /** Обработчик события для hover */
352
352
  _handleMouseMove = (t) => {
353
- this._processRaycastEvent(t, I.SelectHover, !0);
353
+ this._processRaycastEvent(t, H.SelectHover, !0);
354
354
  };
355
355
  /** Обработчик события на click */
356
356
  _handleMouseClick = (t) => {
357
- this._processRaycastEvent(t, I.SelectClick, !1);
357
+ this._processRaycastEvent(t, H.SelectClick, !1);
358
358
  };
359
359
  /** Вспомогательный метод для получения модели, которую выбрали и отправки события в event bus */
360
360
  _processRaycastEvent(t, e, s) {
@@ -365,12 +365,12 @@ let G = class extends Ie {
365
365
  s ? n !== this._lastHovered && (this.meshes.forEach((c) => c.userData.isHit = !1), n && (n.userData.isHit = !0), this._lastHovered = n, this._bus.emit(e, o ? { intersection: o } : null)) : this._bus.emit(e, o ? { intersection: o } : null);
366
366
  }
367
367
  };
368
- G = _t([
368
+ K = pt([
369
369
  u(),
370
- Me(0, h("Canvas")),
371
- Me(1, h("EventBus"))
372
- ], G);
373
- const Se = { type: "change" }, pe = { type: "start" }, Ye = { type: "end" }, z = new Ue(), we = new We(), pt = Math.cos(70 * Fe.DEG2RAD), p = new T(), g = 2 * Math.PI, l = {
370
+ Ee(0, h("Canvas")),
371
+ Ee(1, h("EventBus"))
372
+ ], K);
373
+ const we = { type: "change" }, ue = { type: "start" }, ze = { type: "end" }, U = new We(), Se = new Fe(), ut = Math.cos(70 * Ze.DEG2RAD), p = new T(), g = 2 * Math.PI, l = {
374
374
  NONE: -1,
375
375
  ROTATE: 0,
376
376
  DOLLY: 1,
@@ -379,8 +379,8 @@ const Se = { type: "change" }, pe = { type: "start" }, Ye = { type: "end" }, z =
379
379
  TOUCH_PAN: 4,
380
380
  TOUCH_DOLLY_PAN: 5,
381
381
  TOUCH_DOLLY_ROTATE: 6
382
- }, $ = 1e-6;
383
- class ut extends ze {
382
+ }, B = 1e-6;
383
+ class mt extends Ue {
384
384
  /**
385
385
  * Constructs a new controls instance.
386
386
  *
@@ -388,7 +388,7 @@ class ut extends ze {
388
388
  * @param {?HTMLElement} domElement - The HTML element used for event listeners.
389
389
  */
390
390
  constructor(e, s = null) {
391
- super(e, s), this.state = l.NONE, this.target = new T(), this.cursor = new T(), this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minTargetRadius = 0, this.maxTargetRadius = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = 0.05, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.keyRotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !0, this.keyPanSpeed = 7, this.zoomToCursor = !1, this.autoRotate = !1, this.autoRotateSpeed = 2, this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" }, this.mouseButtons = { LEFT: j.ROTATE, MIDDLE: j.DOLLY, RIGHT: j.PAN }, this.touches = { ONE: R.ROTATE, TWO: R.DOLLY_PAN }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this._domElementKeyEvents = null, this._lastPosition = new T(), this._lastQuaternion = new be(), this._lastTargetPosition = new T(), this._quat = new be().setFromUnitVectors(e.up, new T(0, 1, 0)), this._quatInverse = this._quat.clone().invert(), this._spherical = new ve(), this._sphericalDelta = new ve(), this._scale = 1, this._panOffset = new T(), this._rotateStart = new w(), this._rotateEnd = new w(), this._rotateDelta = new w(), this._panStart = new w(), this._panEnd = new w(), this._panDelta = new w(), this._dollyStart = new w(), this._dollyEnd = new w(), this._dollyDelta = new w(), this._dollyDirection = new T(), this._mouse = new w(), this._performCursorZoom = !1, this._pointers = [], this._pointerPositions = {}, this._controlActive = !1, this._onPointerMove = ft.bind(this), this._onPointerDown = mt.bind(this), this._onPointerUp = gt.bind(this), this._onContextMenu = Et.bind(this), this._onMouseWheel = yt.bind(this), this._onKeyDown = Mt.bind(this), this._onTouchStart = St.bind(this), this._onTouchMove = wt.bind(this), this._onMouseDown = bt.bind(this), this._onMouseMove = vt.bind(this), this._interceptControlDown = Pt.bind(this), this._interceptControlUp = Ot.bind(this), this.domElement !== null && this.connect(this.domElement), this.update();
391
+ super(e, s), this.state = l.NONE, this.target = new T(), this.cursor = new T(), this.minDistance = 0, this.maxDistance = 1 / 0, this.minZoom = 0, this.maxZoom = 1 / 0, this.minTargetRadius = 0, this.maxTargetRadius = 1 / 0, this.minPolarAngle = 0, this.maxPolarAngle = Math.PI, this.minAzimuthAngle = -1 / 0, this.maxAzimuthAngle = 1 / 0, this.enableDamping = !1, this.dampingFactor = 0.05, this.enableZoom = !0, this.zoomSpeed = 1, this.enableRotate = !0, this.rotateSpeed = 1, this.keyRotateSpeed = 1, this.enablePan = !0, this.panSpeed = 1, this.screenSpacePanning = !0, this.keyPanSpeed = 7, this.zoomToCursor = !1, this.autoRotate = !1, this.autoRotateSpeed = 2, this.keys = { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" }, this.mouseButtons = { LEFT: I.ROTATE, MIDDLE: I.DOLLY, RIGHT: I.PAN }, this.touches = { ONE: R.ROTATE, TWO: R.DOLLY_PAN }, this.target0 = this.target.clone(), this.position0 = this.object.position.clone(), this.zoom0 = this.object.zoom, this._domElementKeyEvents = null, this._lastPosition = new T(), this._lastQuaternion = new ve(), this._lastTargetPosition = new T(), this._quat = new ve().setFromUnitVectors(e.up, new T(0, 1, 0)), this._quatInverse = this._quat.clone().invert(), this._spherical = new ye(), this._sphericalDelta = new ye(), this._scale = 1, this._panOffset = new T(), this._rotateStart = new w(), this._rotateEnd = new w(), this._rotateDelta = new w(), this._panStart = new w(), this._panEnd = new w(), this._panDelta = new w(), this._dollyStart = new w(), this._dollyEnd = new w(), this._dollyDelta = new w(), this._dollyDirection = new T(), this._mouse = new w(), this._performCursorZoom = !1, this._pointers = [], this._pointerPositions = {}, this._controlActive = !1, this._onPointerMove = gt.bind(this), this._onPointerDown = ft.bind(this), this._onPointerUp = bt.bind(this), this._onContextMenu = Pt.bind(this), this._onMouseWheel = Mt.bind(this), this._onKeyDown = Et.bind(this), this._onTouchStart = wt.bind(this), this._onTouchMove = St.bind(this), this._onMouseDown = vt.bind(this), this._onMouseMove = yt.bind(this), this._interceptControlDown = Ot.bind(this), this._interceptControlUp = Tt.bind(this), this.domElement !== null && this.connect(this.domElement), this.update();
392
392
  }
393
393
  connect(e) {
394
394
  super.connect(e), this.domElement.addEventListener("pointerdown", this._onPointerDown), this.domElement.addEventListener("pointercancel", this._onPointerUp), this.domElement.addEventListener("contextmenu", this._onContextMenu), this.domElement.addEventListener("wheel", this._onMouseWheel, { passive: !1 }), this.domElement.getRootNode().addEventListener("keydown", this._interceptControlDown, { passive: !0, capture: !0 }), this.domElement.style.touchAction = "none";
@@ -449,7 +449,7 @@ class ut extends ze {
449
449
  * was called, or the initial state.
450
450
  */
451
451
  reset() {
452
- this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(Se), this.update(), this.state = l.NONE;
452
+ this.target.copy(this.target0), this.object.position.copy(this.position0), this.object.zoom = this.zoom0, this.object.updateProjectionMatrix(), this.dispatchEvent(we), this.update(), this.state = l.NONE;
453
453
  }
454
454
  update(e = null) {
455
455
  const s = this.object.position;
@@ -479,12 +479,12 @@ class ut extends ze {
479
479
  m.unproject(this.object), this.object.position.sub(m).add(c), this.object.updateMatrixWorld(), n = p.length();
480
480
  } else
481
481
  console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."), this.zoomToCursor = !1;
482
- n !== null && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position) : (z.origin.copy(this.object.position), z.direction.set(0, 0, -1).transformDirection(this.object.matrix), Math.abs(this.object.up.dot(z.direction)) < pt ? this.object.lookAt(this.target) : (we.setFromNormalAndCoplanarPoint(this.object.up, this.target), z.intersectPlane(we, this.target))));
482
+ n !== null && (this.screenSpacePanning ? this.target.set(0, 0, -1).transformDirection(this.object.matrix).multiplyScalar(n).add(this.object.position) : (U.origin.copy(this.object.position), U.direction.set(0, 0, -1).transformDirection(this.object.matrix), Math.abs(this.object.up.dot(U.direction)) < ut ? this.object.lookAt(this.target) : (Se.setFromNormalAndCoplanarPoint(this.object.up, this.target), U.intersectPlane(Se, this.target))));
483
483
  } else if (this.object.isOrthographicCamera) {
484
484
  const n = this.object.zoom;
485
485
  this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / this._scale)), n !== this.object.zoom && (this.object.updateProjectionMatrix(), o = !0);
486
486
  }
487
- return this._scale = 1, this._performCursorZoom = !1, o || this._lastPosition.distanceToSquared(this.object.position) > $ || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > $ || this._lastTargetPosition.distanceToSquared(this.target) > $ ? (this.dispatchEvent(Se), this._lastPosition.copy(this.object.position), this._lastQuaternion.copy(this.object.quaternion), this._lastTargetPosition.copy(this.target), !0) : !1;
487
+ return this._scale = 1, this._performCursorZoom = !1, o || this._lastPosition.distanceToSquared(this.object.position) > B || 8 * (1 - this._lastQuaternion.dot(this.object.quaternion)) > B || this._lastTargetPosition.distanceToSquared(this.target) > B ? (this.dispatchEvent(we), this._lastPosition.copy(this.object.position), this._lastQuaternion.copy(this.object.quaternion), this._lastTargetPosition.copy(this.target), !0) : !1;
488
488
  }
489
489
  _getAutoRotationAngle(e) {
490
490
  return e !== null ? g / 60 * this.autoRotateSpeed * e : g / 60 / 60 * this.autoRotateSpeed;
@@ -676,16 +676,16 @@ class ut extends ze {
676
676
  return e.ctrlKey && !this._controlActive && (i.deltaY *= 10), i;
677
677
  }
678
678
  }
679
- function mt(t) {
679
+ function ft(t) {
680
680
  this.enabled !== !1 && (this._pointers.length === 0 && (this.domElement.setPointerCapture(t.pointerId), this.domElement.addEventListener("pointermove", this._onPointerMove), this.domElement.addEventListener("pointerup", this._onPointerUp)), !this._isTrackingPointer(t) && (this._addPointer(t), t.pointerType === "touch" ? this._onTouchStart(t) : this._onMouseDown(t)));
681
681
  }
682
- function ft(t) {
682
+ function gt(t) {
683
683
  this.enabled !== !1 && (t.pointerType === "touch" ? this._onTouchMove(t) : this._onMouseMove(t));
684
684
  }
685
- function gt(t) {
685
+ function bt(t) {
686
686
  switch (this._removePointer(t), this._pointers.length) {
687
687
  case 0:
688
- this.domElement.releasePointerCapture(t.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(Ye), this.state = l.NONE;
688
+ this.domElement.releasePointerCapture(t.pointerId), this.domElement.removeEventListener("pointermove", this._onPointerMove), this.domElement.removeEventListener("pointerup", this._onPointerUp), this.dispatchEvent(ze), this.state = l.NONE;
689
689
  break;
690
690
  case 1:
691
691
  const e = this._pointers[0], s = this._pointerPositions[e];
@@ -693,7 +693,7 @@ function gt(t) {
693
693
  break;
694
694
  }
695
695
  }
696
- function bt(t) {
696
+ function vt(t) {
697
697
  let e;
698
698
  switch (t.button) {
699
699
  case 0:
@@ -709,11 +709,11 @@ function bt(t) {
709
709
  e = -1;
710
710
  }
711
711
  switch (e) {
712
- case j.DOLLY:
712
+ case I.DOLLY:
713
713
  if (this.enableZoom === !1) return;
714
714
  this._handleMouseDownDolly(t), this.state = l.DOLLY;
715
715
  break;
716
- case j.ROTATE:
716
+ case I.ROTATE:
717
717
  if (t.ctrlKey || t.metaKey || t.shiftKey) {
718
718
  if (this.enablePan === !1) return;
719
719
  this._handleMouseDownPan(t), this.state = l.PAN;
@@ -722,7 +722,7 @@ function bt(t) {
722
722
  this._handleMouseDownRotate(t), this.state = l.ROTATE;
723
723
  }
724
724
  break;
725
- case j.PAN:
725
+ case I.PAN:
726
726
  if (t.ctrlKey || t.metaKey || t.shiftKey) {
727
727
  if (this.enableRotate === !1) return;
728
728
  this._handleMouseDownRotate(t), this.state = l.ROTATE;
@@ -734,9 +734,9 @@ function bt(t) {
734
734
  default:
735
735
  this.state = l.NONE;
736
736
  }
737
- this.state !== l.NONE && this.dispatchEvent(pe);
737
+ this.state !== l.NONE && this.dispatchEvent(ue);
738
738
  }
739
- function vt(t) {
739
+ function yt(t) {
740
740
  switch (this.state) {
741
741
  case l.ROTATE:
742
742
  if (this.enableRotate === !1) return;
@@ -752,13 +752,13 @@ function vt(t) {
752
752
  break;
753
753
  }
754
754
  }
755
- function yt(t) {
756
- this.enabled === !1 || this.enableZoom === !1 || this.state !== l.NONE || (t.preventDefault(), this.dispatchEvent(pe), this._handleMouseWheel(this._customWheelEvent(t)), this.dispatchEvent(Ye));
757
- }
758
755
  function Mt(t) {
756
+ this.enabled === !1 || this.enableZoom === !1 || this.state !== l.NONE || (t.preventDefault(), this.dispatchEvent(ue), this._handleMouseWheel(this._customWheelEvent(t)), this.dispatchEvent(ze));
757
+ }
758
+ function Et(t) {
759
759
  this.enabled !== !1 && this._handleKeyDown(t);
760
760
  }
761
- function St(t) {
761
+ function wt(t) {
762
762
  switch (this._trackPointer(t), this._pointers.length) {
763
763
  case 1:
764
764
  switch (this.touches.ONE) {
@@ -791,9 +791,9 @@ function St(t) {
791
791
  default:
792
792
  this.state = l.NONE;
793
793
  }
794
- this.state !== l.NONE && this.dispatchEvent(pe);
794
+ this.state !== l.NONE && this.dispatchEvent(ue);
795
795
  }
796
- function wt(t) {
796
+ function St(t) {
797
797
  switch (this._trackPointer(t), this.state) {
798
798
  case l.TOUCH_ROTATE:
799
799
  if (this.enableRotate === !1) return;
@@ -815,20 +815,20 @@ function wt(t) {
815
815
  this.state = l.NONE;
816
816
  }
817
817
  }
818
- function Et(t) {
818
+ function Pt(t) {
819
819
  this.enabled !== !1 && t.preventDefault();
820
820
  }
821
- function Pt(t) {
821
+ function Ot(t) {
822
822
  t.key === "Control" && (this._controlActive = !0, this.domElement.getRootNode().addEventListener("keyup", this._interceptControlUp, { passive: !0, capture: !0 }));
823
823
  }
824
- function Ot(t) {
824
+ function Tt(t) {
825
825
  t.key === "Control" && (this._controlActive = !1, this.domElement.getRootNode().removeEventListener("keyup", this._interceptControlUp, { passive: !0, capture: !0 }));
826
826
  }
827
- class Ms extends Ie {
827
+ class Es extends He {
828
828
  /** Orbit-контроллер для управления камерой */
829
829
  _orbit;
830
830
  constructor(e) {
831
- super(e), this.camera.position.set(1, 1, 7), this.camera.lookAt(0, 0, 0), this._orbit = new ut(this.camera, this.canvas), this._orbit.target.set(0, 0, 0), this._orbit.minPolarAngle = Math.PI / 2, this._orbit.maxPolarAngle = Math.PI / 2, this._orbit.enableRotate = !0, this._orbit.enableZoom = !1, this._orbit.enablePan = !1;
831
+ super(e), this.camera.position.set(1, 1, 7), this.camera.lookAt(0, 0, 0), this._orbit = new mt(this.camera, this.canvas), this._orbit.target.set(0, 0, 0), this._orbit.minPolarAngle = Math.PI / 2, this._orbit.maxPolarAngle = Math.PI / 2, this._orbit.enableRotate = !0, this._orbit.enableZoom = !1, this._orbit.enablePan = !1;
832
832
  }
833
833
  /**
834
834
  * Обновление состояния рендерера.
@@ -837,7 +837,7 @@ class Ms extends Ie {
837
837
  this._orbit?.update();
838
838
  }
839
839
  }
840
- class Ss {
840
+ class ws {
841
841
  /** Позиции вершин */
842
842
  _positions = [];
843
843
  /** Нормали вершин */
@@ -874,12 +874,12 @@ class Ss {
874
874
  }
875
875
  }
876
876
  const i = {
877
- type: E.Custom,
877
+ type: S.Custom,
878
878
  position: this._positions,
879
879
  ...this._normals.length > 0 && { normal: this._normals },
880
880
  ...this._uvs.length > 0 && { uv: this._uvs }
881
881
  };
882
- return new Ze(i);
882
+ return new $e(i);
883
883
  }
884
884
  /**
885
885
  * Обрабатывает строку face (f) и разворачивает индексы в массивы для рендеринга
@@ -904,41 +904,41 @@ class Ss {
904
904
  }
905
905
  }
906
906
  }
907
- var Tt = Object.getOwnPropertyDescriptor, Lt = (t, e, s, i) => {
908
- for (var r = i > 1 ? void 0 : i ? Tt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
907
+ var Lt = Object.getOwnPropertyDescriptor, Dt = (t, e, s, i) => {
908
+ for (var r = i > 1 ? void 0 : i ? Lt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
909
909
  (n = t[o]) && (r = n(r) || r);
910
910
  return r;
911
- }, Ee = (t, e) => (s, i) => e(s, i, t);
912
- let K = class {
911
+ }, Pe = (t, e) => (s, i) => e(s, i, t);
912
+ let q = class {
913
913
  constructor(t, e) {
914
914
  this._store = e, this._handlers = new Map(t.map((s) => [s.mode, s]));
915
915
  }
916
916
  /** Текущий режим отображения */
917
- _currentMode = k.Plane;
917
+ _currentMode = V.Plane;
918
918
  /** Хендлеры, которые управляют отображением */
919
919
  _handlers;
920
920
  /** Установка режима отображения */
921
921
  manage(t) {
922
- t !== this._currentMode && (this._handlers.get(this._currentMode)?.rollback(), t !== k.Plane && this._handlers.get(t)?.handle(), this._currentMode = t, this._store.setDisplayMode(this._currentMode));
922
+ t !== this._currentMode && (this._handlers.get(this._currentMode)?.rollback(), t !== V.Plane && this._handlers.get(t)?.handle(), this._currentMode = t, this._store.setDisplayMode(this._currentMode));
923
923
  }
924
924
  /** Освобождает ресурсы менеджера. */
925
925
  dispose() {
926
- this._handlers && this._handlers.clear(), this._currentMode = k.Plane, this._store.setDisplayMode(this._currentMode);
926
+ this._handlers && this._handlers.clear(), this._currentMode = V.Plane, this._store.setDisplayMode(this._currentMode);
927
927
  }
928
928
  };
929
- K = Lt([
929
+ q = Dt([
930
930
  u(),
931
- Ee(0, U("IDisplayHandler")),
932
- Ee(1, h("IEditorStore"))
933
- ], K);
934
- var P = /* @__PURE__ */ ((t) => (t.Hover = "hover", t.Click = "click", t))(P || {}), Dt = Object.getOwnPropertyDescriptor, Ct = (t, e, s, i) => {
935
- for (var r = i > 1 ? void 0 : i ? Dt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
931
+ Pe(0, W("IDisplayHandler")),
932
+ Pe(1, h("IEditorStore"))
933
+ ], q);
934
+ var P = /* @__PURE__ */ ((t) => (t.Hover = "hover", t.Click = "click", t))(P || {}), Ct = Object.getOwnPropertyDescriptor, At = (t, e, s, i) => {
935
+ for (var r = i > 1 ? void 0 : i ? Ct(e, s) : e, o = t.length - 1, n; o >= 0; o--)
936
936
  (n = t[o]) && (r = n(r) || r);
937
937
  return r;
938
- }, B = (t, e) => (s, i) => e(s, i, t);
939
- let q = class {
938
+ }, X = (t, e) => (s, i) => e(s, i, t);
939
+ let Q = class {
940
940
  constructor(t, e, s) {
941
- this._eventBus = t, this._store = s, this._handlers = new Map(e.map((i) => [i.mode, i])), this._eventBus.on(I.SelectHover, this._onHover), this._eventBus.on(I.SelectClick, this._onClick);
941
+ this._eventBus = t, this._store = s, this._handlers = new Map(e.map((i) => [i.mode, i])), this._eventBus.on(H.SelectHover, this._onHover), this._eventBus.on(H.SelectClick, this._onClick);
942
942
  }
943
943
  /** Текущий режим выборки */
944
944
  _currentMode = v.Mesh;
@@ -958,31 +958,31 @@ let q = class {
958
958
  };
959
959
  /** Освобождает ресурсы менеджера. */
960
960
  dispose() {
961
- this._handlers && this._handlers.clear(), this._eventBus.off(I.SelectHover, this._onHover), this._currentMode = v.Mesh, this._store.setSelectMode(this._currentMode);
961
+ this._handlers && this._handlers.clear(), this._eventBus.off(H.SelectHover, this._onHover), this._currentMode = v.Mesh, this._store.setSelectMode(this._currentMode);
962
962
  }
963
963
  };
964
- q = Ct([
964
+ Q = At([
965
965
  u(),
966
- B(0, h("EventBus")),
967
- B(1, U("ISelectHandler")),
968
- B(2, h("IEditorStore"))
969
- ], q);
966
+ X(0, h("EventBus")),
967
+ X(1, W("ISelectHandler")),
968
+ X(2, h("IEditorStore"))
969
+ ], Q);
970
970
  class xt {
971
971
  /** Доступен ли инструмент при текущем режиме выборки */
972
972
  isToolEnabled(e, s) {
973
- return ye[s].includes(e);
973
+ return Me[s].includes(e);
974
974
  }
975
975
  /** Получение доступных инструментов для режима выборки*/
976
976
  getEnabledTools(e) {
977
- return ye[e];
977
+ return Me[e];
978
978
  }
979
979
  }
980
- var At = Object.getOwnPropertyDescriptor, Rt = (t, e, s, i) => {
981
- for (var r = i > 1 ? void 0 : i ? At(e, s) : e, o = t.length - 1, n; o >= 0; o--)
980
+ var Rt = Object.getOwnPropertyDescriptor, jt = (t, e, s, i) => {
981
+ for (var r = i > 1 ? void 0 : i ? Rt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
982
982
  (n = t[o]) && (r = n(r) || r);
983
983
  return r;
984
- }, Pe = (t, e) => (s, i) => e(s, i, t);
985
- let Q = class {
984
+ }, Oe = (t, e) => (s, i) => e(s, i, t);
985
+ let J = class {
986
986
  constructor(t, e) {
987
987
  this._store = e, this._handlers = new Map(t.map((s) => [s.mode, s])), this._unsubSelected = this._store.onSelectedObjectChange(() => {
988
988
  this._handlers.get(this._currentTool)?.handle();
@@ -1006,19 +1006,19 @@ let Q = class {
1006
1006
  this._unsubSelected?.(), this._handlers && this._handlers.clear(), this._currentTool = C.Translate, this._store.setToolType(this._currentTool);
1007
1007
  }
1008
1008
  };
1009
- Q = Rt([
1009
+ J = jt([
1010
1010
  u(),
1011
- Pe(0, U("IToolHandler")),
1012
- Pe(1, h("IEditorStore"))
1013
- ], Q);
1014
- var jt = Object.getOwnPropertyDescriptor, It = (t, e, s, i) => {
1015
- for (var r = i > 1 ? void 0 : i ? jt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1011
+ Oe(0, W("IToolHandler")),
1012
+ Oe(1, h("IEditorStore"))
1013
+ ], J);
1014
+ var It = Object.getOwnPropertyDescriptor, Ht = (t, e, s, i) => {
1015
+ for (var r = i > 1 ? void 0 : i ? It(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1016
1016
  (n = t[o]) && (r = n(r) || r);
1017
1017
  return r;
1018
- }, Ht = (t, e) => (s, i) => e(s, i, t);
1019
- let J = class {
1018
+ }, kt = (t, e) => (s, i) => e(s, i, t);
1019
+ let ee = class {
1020
1020
  /** Текущий режим редактирования сцены */
1021
- _currentMode = V.AddFigure;
1021
+ _currentMode = N.AddFigure;
1022
1022
  /** Хендлеры, которые управляют отображением */
1023
1023
  _handlers;
1024
1024
  constructor(t) {
@@ -1026,28 +1026,28 @@ let J = class {
1026
1026
  }
1027
1027
  /** Установка режима редактирования сцены */
1028
1028
  manage(t, e) {
1029
- t === V.AddFigure ? this._handlers.get(t)?.handle(e) : this._handlers.get(t)?.handle(), this._currentMode = t;
1029
+ t === N.AddFigure ? this._handlers.get(t)?.handle(e) : this._handlers.get(t)?.handle(), this._currentMode = t;
1030
1030
  }
1031
1031
  /** Освобождает ресурсы менеджера. */
1032
1032
  dispose() {
1033
- this._handlers && this._handlers.clear(), this._currentMode = V.AddFigure;
1033
+ this._handlers && this._handlers.clear(), this._currentMode = N.AddFigure;
1034
1034
  }
1035
1035
  };
1036
- J = It([
1036
+ ee = Ht([
1037
1037
  u(),
1038
- Ht(0, U("ISceneHandler"))
1039
- ], J);
1040
- var kt = Object.getOwnPropertyDescriptor, Vt = (t, e, s, i) => {
1041
- for (var r = i > 1 ? void 0 : i ? kt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1038
+ kt(0, W("ISceneHandler"))
1039
+ ], ee);
1040
+ var Vt = Object.getOwnPropertyDescriptor, Nt = (t, e, s, i) => {
1041
+ for (var r = i > 1 ? void 0 : i ? Vt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1042
1042
  (n = t[o]) && (r = n(r) || r);
1043
1043
  return r;
1044
- }, Nt = (t, e) => (s, i) => e(s, i, t);
1045
- let ee = class {
1044
+ }, Yt = (t, e) => (s, i) => e(s, i, t);
1045
+ let te = class {
1046
1046
  constructor(t) {
1047
1047
  this._api = t;
1048
1048
  }
1049
1049
  /** Режим отображения. */
1050
- mode = k.Wireframe;
1050
+ mode = V.Wireframe;
1051
1051
  /** Сохраняем предыдущие значения wireframe для отката. */
1052
1052
  _prevWireframe = /* @__PURE__ */ new Map();
1053
1053
  /** Сохраняем исходные цвета материалов для отката */
@@ -1098,16 +1098,16 @@ let ee = class {
1098
1098
  "wireframe" in e && !this._prevWireframe.has(t) && (this._prevWireframe.set(t, !!e.wireframe), e.wireframe = !0, t.needsUpdate = !0), e.color?.isColor && (this._prevColorMesh.has(t) || this._prevColorMesh.set(t, e.color.clone()), e.color.copy(this._wireColor));
1099
1099
  }
1100
1100
  };
1101
- ee = Vt([
1101
+ te = Nt([
1102
1102
  u(),
1103
- Nt(0, h("RendererApi"))
1104
- ], ee);
1105
- var Yt = Object.getOwnPropertyDescriptor, zt = (t, e, s, i) => {
1106
- for (var r = i > 1 ? void 0 : i ? Yt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1103
+ Yt(0, h("RendererApi"))
1104
+ ], te);
1105
+ var zt = Object.getOwnPropertyDescriptor, Ut = (t, e, s, i) => {
1106
+ for (var r = i > 1 ? void 0 : i ? zt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1107
1107
  (n = t[o]) && (r = n(r) || r);
1108
1108
  return r;
1109
- }, Oe = (t, e) => (s, i) => e(s, i, t);
1110
- let te = class {
1109
+ }, Te = (t, e) => (s, i) => e(s, i, t);
1110
+ let se = class {
1111
1111
  constructor(t, e) {
1112
1112
  this._api = t, this._store = e;
1113
1113
  }
@@ -1119,9 +1119,9 @@ let te = class {
1119
1119
  _selectedMesh = null;
1120
1120
  // Цвета, необходимые для переключения
1121
1121
  /** Цвет ребер для фигуры, на которую навелись */
1122
- _hoverColor = W;
1122
+ _hoverColor = F;
1123
1123
  /** Цвет ребер для выделенной фигуры */
1124
- _selectColor = F;
1124
+ _selectColor = Z;
1125
1125
  /** Исходные цвета материалов линий для отката */
1126
1126
  _origLineColors = /* @__PURE__ */ new WeakMap();
1127
1127
  handle(t, e) {
@@ -1178,17 +1178,17 @@ let te = class {
1178
1178
  });
1179
1179
  }
1180
1180
  };
1181
- te = zt([
1181
+ se = Ut([
1182
1182
  u(),
1183
- Oe(0, h("RendererApi")),
1184
- Oe(1, h("IEditorStore"))
1185
- ], te);
1186
- var Ut = Object.getOwnPropertyDescriptor, Wt = (t, e, s, i) => {
1187
- for (var r = i > 1 ? void 0 : i ? Ut(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1183
+ Te(0, h("RendererApi")),
1184
+ Te(1, h("IEditorStore"))
1185
+ ], se);
1186
+ var Wt = Object.getOwnPropertyDescriptor, Ft = (t, e, s, i) => {
1187
+ for (var r = i > 1 ? void 0 : i ? Wt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1188
1188
  (n = t[o]) && (r = n(r) || r);
1189
1189
  return r;
1190
- }, Ft = (t, e) => (s, i) => e(s, i, t);
1191
- let se = class {
1190
+ }, Zt = (t, e) => (s, i) => e(s, i, t);
1191
+ let ie = class {
1192
1192
  constructor(t) {
1193
1193
  this._api = t;
1194
1194
  }
@@ -1200,9 +1200,9 @@ let se = class {
1200
1200
  _selected = null;
1201
1201
  // Цвета, необходимые для переключения
1202
1202
  /** Цвет грани, на которую навелись */
1203
- _hoverColor = W;
1203
+ _hoverColor = F;
1204
1204
  /** Цвет выделенной граней */
1205
- _selectColor = F;
1205
+ _selectColor = Z;
1206
1206
  /** Изначальный цвет граней у модели, перед наложением эффектов*/
1207
1207
  _defaultColor = 2236962;
1208
1208
  handle(t, e) {
@@ -1216,16 +1216,16 @@ let se = class {
1216
1216
  throw new Error("Method not implemented.");
1217
1217
  }
1218
1218
  };
1219
- se = Wt([
1219
+ ie = Ft([
1220
1220
  u(),
1221
- Ft(0, h("RendererApi"))
1222
- ], se);
1223
- var Zt = Object.getOwnPropertyDescriptor, $t = (t, e, s, i) => {
1224
- for (var r = i > 1 ? void 0 : i ? Zt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1221
+ Zt(0, h("RendererApi"))
1222
+ ], ie);
1223
+ var $t = Object.getOwnPropertyDescriptor, Bt = (t, e, s, i) => {
1224
+ for (var r = i > 1 ? void 0 : i ? $t(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1225
1225
  (n = t[o]) && (r = n(r) || r);
1226
1226
  return r;
1227
- }, Te = (t, e) => (s, i) => e(s, i, t);
1228
- let ie = class {
1227
+ }, Le = (t, e) => (s, i) => e(s, i, t);
1228
+ let re = class {
1229
1229
  constructor(t, e) {
1230
1230
  this._api = t, this._store = e, this._api.enableCameraLayer(L), this._hoverVertex = this._makeOverlayVertex(this._hoverColor), this._selectVertex = this._makeOverlayVertex(this._selectColor), this._api.addObject(this._hoverVertex, L), this._api.addObject(this._selectVertex, L);
1231
1231
  }
@@ -1239,9 +1239,9 @@ let ie = class {
1239
1239
  _selectVertex;
1240
1240
  // Цвета, необходимые для переключения
1241
1241
  /** Цвет ребра, на которое навелись */
1242
- _hoverColor = W;
1242
+ _hoverColor = F;
1243
1243
  /** Цвет выделенного ребра */
1244
- _selectColor = F;
1244
+ _selectColor = Z;
1245
1245
  handle(t, e) {
1246
1246
  if (this._api.setRaycastMode(this.mode), e === P.Hover) {
1247
1247
  if (!t) {
@@ -1274,7 +1274,7 @@ let ie = class {
1274
1274
  dispose() {
1275
1275
  this.rollback(), this._api.removeObject(this._hoverVertex), this._api.removeObject(this._selectVertex), this._hoverVertex.geometry.dispose(), this._hoverVertex.material.dispose(), this._selectVertex.geometry.dispose(), this._selectVertex.material.dispose();
1276
1276
  }
1277
- _makeOverlayVertex(t, e = et) {
1277
+ _makeOverlayVertex(t, e = tt) {
1278
1278
  const s = new a.BufferGeometry();
1279
1279
  s.setAttribute("position", new a.Float32BufferAttribute([0, 0, 0], 3));
1280
1280
  const i = new a.PointsMaterial({
@@ -1303,7 +1303,7 @@ let ie = class {
1303
1303
  }
1304
1304
  /** Готовит метаданные для выбранной вершины и пишет их в _selectVertex.userData */
1305
1305
  _prepareVertexMetadata(t, e) {
1306
- const s = ke(t);
1306
+ const s = Ve(t);
1307
1307
  if (!s) return;
1308
1308
  const i = t.geometry.getAttribute("position"), r = new a.Vector3(
1309
1309
  i.getX(e),
@@ -1315,9 +1315,9 @@ let ie = class {
1315
1315
  const O = s.children.find((M) => M?.isLineSegments);
1316
1316
  let y = [];
1317
1317
  if (O) {
1318
- const M = new a.Matrix4().copy(O.matrixWorld).invert(), N = r.clone().applyMatrix4(M), H = O.geometry.getAttribute("position"), Y = new a.Vector3();
1319
- for (let x = 0; x < H.count; x++)
1320
- Y.fromBufferAttribute(H, x), Y.distanceToSquared(N) < f && y.push(x);
1318
+ const M = new a.Matrix4().copy(O.matrixWorld).invert(), Y = r.clone().applyMatrix4(M), k = O.geometry.getAttribute("position"), z = new a.Vector3();
1319
+ for (let A = 0; A < k.count; A++)
1320
+ z.fromBufferAttribute(k, A), z.distanceToSquared(Y) < f && y.push(A);
1321
1321
  }
1322
1322
  this._selectVertex.userData.vertexInfo = {
1323
1323
  points: t,
@@ -1341,12 +1341,12 @@ let ie = class {
1341
1341
  (!n || n.count < 1) && (o.setAttribute("position", new a.BufferAttribute(new Float32Array(3), 3)), n = o.getAttribute("position")), n.setXYZ(0, 0, 0, 0), n.needsUpdate = !0, t.quaternion.identity(), t.scale.set(1, 1, 1), t.updateMatrixWorld(!0);
1342
1342
  }
1343
1343
  };
1344
- ie = $t([
1344
+ re = Bt([
1345
1345
  u(),
1346
- Te(0, h("RendererApi")),
1347
- Te(1, h("IEditorStore"))
1348
- ], ie);
1349
- class ue {
1346
+ Le(0, h("RendererApi")),
1347
+ Le(1, h("IEditorStore"))
1348
+ ], re);
1349
+ class me {
1350
1350
  constructor(e, s) {
1351
1351
  this.api = e, this.store = s, this._unsubscribeTransform = this.api.onTransformChange(() => {
1352
1352
  this.store.getSelectedObject() && this.store.notifySelectedTransformChange?.();
@@ -1373,63 +1373,63 @@ class ue {
1373
1373
  this.rollback(), this._unsubscribeTransform && this._unsubscribeTransform();
1374
1374
  }
1375
1375
  }
1376
- var Bt = Object.getOwnPropertyDescriptor, Xt = (t, e, s, i) => {
1377
- for (var r = i > 1 ? void 0 : i ? Bt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1376
+ var Xt = Object.getOwnPropertyDescriptor, Gt = (t, e, s, i) => {
1377
+ for (var r = i > 1 ? void 0 : i ? Xt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1378
1378
  (n = t[o]) && (r = n(r) || r);
1379
1379
  return r;
1380
- }, Le = (t, e) => (s, i) => e(s, i, t);
1381
- let re = class extends ue {
1380
+ }, De = (t, e) => (s, i) => e(s, i, t);
1381
+ let oe = class extends me {
1382
1382
  /** Инструмент, которым управляет хендлер, нужен только менеджеру */
1383
1383
  mode = C.Translate;
1384
1384
  constructor(t, e) {
1385
1385
  super(t, e);
1386
1386
  }
1387
1387
  };
1388
- re = Xt([
1388
+ oe = Gt([
1389
1389
  u(),
1390
- Le(0, h("RendererApi")),
1391
- Le(1, h("IEditorStore"))
1392
- ], re);
1393
- var Gt = Object.getOwnPropertyDescriptor, Kt = (t, e, s, i) => {
1394
- for (var r = i > 1 ? void 0 : i ? Gt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1390
+ De(0, h("RendererApi")),
1391
+ De(1, h("IEditorStore"))
1392
+ ], oe);
1393
+ var Kt = Object.getOwnPropertyDescriptor, qt = (t, e, s, i) => {
1394
+ for (var r = i > 1 ? void 0 : i ? Kt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1395
1395
  (n = t[o]) && (r = n(r) || r);
1396
1396
  return r;
1397
- }, De = (t, e) => (s, i) => e(s, i, t);
1398
- let oe = class extends ue {
1397
+ }, Ce = (t, e) => (s, i) => e(s, i, t);
1398
+ let ne = class extends me {
1399
1399
  /** Инструмент, которым управляет хендлер, нужен только менеджеру */
1400
1400
  mode = C.Scale;
1401
1401
  constructor(t, e) {
1402
1402
  super(t, e);
1403
1403
  }
1404
1404
  };
1405
- oe = Kt([
1405
+ ne = qt([
1406
1406
  u(),
1407
- De(0, h("RendererApi")),
1408
- De(1, h("IEditorStore"))
1409
- ], oe);
1410
- var qt = Object.getOwnPropertyDescriptor, Qt = (t, e, s, i) => {
1411
- for (var r = i > 1 ? void 0 : i ? qt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1407
+ Ce(0, h("RendererApi")),
1408
+ Ce(1, h("IEditorStore"))
1409
+ ], ne);
1410
+ var Qt = Object.getOwnPropertyDescriptor, Jt = (t, e, s, i) => {
1411
+ for (var r = i > 1 ? void 0 : i ? Qt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1412
1412
  (n = t[o]) && (r = n(r) || r);
1413
1413
  return r;
1414
- }, Ce = (t, e) => (s, i) => e(s, i, t);
1415
- let ne = class extends ue {
1414
+ }, Ae = (t, e) => (s, i) => e(s, i, t);
1415
+ let ae = class extends me {
1416
1416
  /** Инструмент, которым управляет хендлер, нужен только менеджеру */
1417
1417
  mode = C.Rotate;
1418
1418
  constructor(t, e) {
1419
1419
  super(t, e);
1420
1420
  }
1421
1421
  };
1422
- ne = Qt([
1422
+ ae = Jt([
1423
1423
  u(),
1424
- Ce(0, h("RendererApi")),
1425
- Ce(1, h("IEditorStore"))
1426
- ], ne);
1427
- var Jt = Object.getOwnPropertyDescriptor, es = (t, e, s, i) => {
1428
- for (var r = i > 1 ? void 0 : i ? Jt(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1424
+ Ae(0, h("RendererApi")),
1425
+ Ae(1, h("IEditorStore"))
1426
+ ], ae);
1427
+ var es = Object.getOwnPropertyDescriptor, ts = (t, e, s, i) => {
1428
+ for (var r = i > 1 ? void 0 : i ? es(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1429
1429
  (n = t[o]) && (r = n(r) || r);
1430
1430
  return r;
1431
1431
  }, xe = (t, e) => (s, i) => e(s, i, t);
1432
- let ae = class {
1432
+ let he = class {
1433
1433
  constructor(t, e) {
1434
1434
  this._api = t, this._store = e, this._api.enableCameraLayer(L), this._hoverLine = this._makeOverlayLine(this._hoverColor), this._selectLine = this._makeOverlayLine(this._selectColor), this._api.addObject(this._hoverLine, L), this._api.addObject(this._selectLine, L);
1435
1435
  }
@@ -1445,9 +1445,9 @@ let ae = class {
1445
1445
  _selected = null;
1446
1446
  // Цвета, необходимые для переключения
1447
1447
  /** Цвет ребра, на которое навелись */
1448
- _hoverColor = W;
1448
+ _hoverColor = F;
1449
1449
  /** Цвет выделенного ребра */
1450
- _selectColor = F;
1450
+ _selectColor = Z;
1451
1451
  /** Обработка текущего режима выборки. */
1452
1452
  handle(t, e) {
1453
1453
  if (this._api.setRaycastMode(this.mode), e === P.Hover) {
@@ -1529,56 +1529,56 @@ let ae = class {
1529
1529
  }
1530
1530
  /** Запись метаданных выбранного ребра для использования инструментов */
1531
1531
  _prepareEdgeMetadata(t, e) {
1532
- const s = ke(t);
1532
+ const s = Ve(t);
1533
1533
  if (!s) return;
1534
1534
  const i = t.geometry.getAttribute("position"), r = e * 2, o = r + 1, n = new a.Vector3(i.getX(r), i.getY(r), i.getZ(r)).applyMatrix4(
1535
1535
  t.matrixWorld
1536
1536
  ), c = new a.Vector3(i.getX(o), i.getY(o), i.getZ(o)).applyMatrix4(
1537
1537
  t.matrixWorld
1538
- ), _ = new a.Matrix4().copy(s.matrixWorld).invert(), m = n.clone().applyMatrix4(_), f = c.clone().applyMatrix4(_), b = s.geometry.getAttribute("position"), O = new a.Vector3(), y = 1e-6, M = [], N = [];
1539
- for (let S = 0; S < b.count; S++)
1540
- O.fromBufferAttribute(b, S), O.distanceToSquared(m) < y * y ? M.push(S) : O.distanceToSquared(f) < y * y && N.push(S);
1541
- const H = new a.Matrix4().copy(t.matrixWorld).invert(), Y = n.clone().applyMatrix4(H), x = c.clone().applyMatrix4(H), me = t.geometry.getAttribute("position"), Z = new a.Vector3(), fe = [], ge = [];
1542
- for (let S = 0; S < me.count; S++)
1543
- Z.fromBufferAttribute(me, S), Z.distanceToSquared(Y) < y * y ? fe.push(S) : Z.distanceToSquared(x) < y * y && ge.push(S);
1538
+ ), _ = new a.Matrix4().copy(s.matrixWorld).invert(), m = n.clone().applyMatrix4(_), f = c.clone().applyMatrix4(_), b = s.geometry.getAttribute("position"), O = new a.Vector3(), y = 1e-6, M = [], Y = [];
1539
+ for (let E = 0; E < b.count; E++)
1540
+ O.fromBufferAttribute(b, E), O.distanceToSquared(m) < y * y ? M.push(E) : O.distanceToSquared(f) < y * y && Y.push(E);
1541
+ const k = new a.Matrix4().copy(t.matrixWorld).invert(), z = n.clone().applyMatrix4(k), A = c.clone().applyMatrix4(k), fe = t.geometry.getAttribute("position"), $ = new a.Vector3(), ge = [], be = [];
1542
+ for (let E = 0; E < fe.count; E++)
1543
+ $.fromBufferAttribute(fe, E), $.distanceToSquared(z) < y * y ? ge.push(E) : $.distanceToSquared(A) < y * y && be.push(E);
1544
1544
  this._selectLine.userData.edgeInfo = {
1545
1545
  lines: t,
1546
1546
  seg: e,
1547
1547
  mesh: s,
1548
1548
  aIndices: M,
1549
- bIndices: N,
1550
- aEdgeIndices: fe,
1551
- bEdgeIndices: ge
1549
+ bIndices: Y,
1550
+ aEdgeIndices: ge,
1551
+ bEdgeIndices: be
1552
1552
  };
1553
1553
  }
1554
1554
  };
1555
- ae = es([
1555
+ he = ts([
1556
1556
  u(),
1557
1557
  xe(0, h("RendererApi")),
1558
1558
  xe(1, h("IEditorStore"))
1559
- ], ae);
1560
- var ts = Object.getOwnPropertyDescriptor, ss = (t, e, s, i) => {
1561
- for (var r = i > 1 ? void 0 : i ? ts(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1559
+ ], he);
1560
+ var ss = Object.getOwnPropertyDescriptor, is = (t, e, s, i) => {
1561
+ for (var r = i > 1 ? void 0 : i ? ss(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1562
1562
  (n = t[o]) && (r = n(r) || r);
1563
1563
  return r;
1564
- }, is = (t, e) => (s, i) => e(s, i, t);
1565
- let he = class {
1564
+ }, rs = (t, e) => (s, i) => e(s, i, t);
1565
+ let le = class {
1566
1566
  constructor(t) {
1567
1567
  this._api = t;
1568
1568
  }
1569
1569
  /** Режим редактирования сцены */
1570
- mode = V.AddFigure;
1570
+ mode = N.AddFigure;
1571
1571
  /** Последняя добавленная фигура, нужно для отката через `ctrl + z`. */
1572
1572
  _lastAddedMesh = null;
1573
1573
  /** Добавление базовых фигур на сцену, которые приписаны в `FigureType`. */
1574
1574
  handle(t) {
1575
- const e = Je[t](), s = e.getAttribute("position");
1575
+ const e = et[t](), s = e.getAttribute("position");
1576
1576
  s && s.setUsage && s.setUsage(a.DynamicDrawUsage);
1577
- const i = new a.Mesh(e, je);
1578
- i.layers.enable(He);
1579
- const r = Ne(i.geometry);
1577
+ const i = new a.Mesh(e, Ie);
1578
+ i.layers.enable(ke);
1579
+ const r = Ye(i.geometry);
1580
1580
  i.add(r);
1581
- const o = Ve(i.geometry);
1581
+ const o = Ne(i.geometry);
1582
1582
  i.add(o), this._api.addMesh(i), this._lastAddedMesh = i;
1583
1583
  }
1584
1584
  /** Срабатывает только на `ctrl + z`. */
@@ -1590,26 +1590,26 @@ let he = class {
1590
1590
  this._lastAddedMesh = null;
1591
1591
  }
1592
1592
  };
1593
- he = ss([
1593
+ le = is([
1594
1594
  u(),
1595
- is(0, h("RendererApi"))
1596
- ], he);
1597
- var rs = Object.getOwnPropertyDescriptor, os = (t, e, s, i) => {
1598
- for (var r = i > 1 ? void 0 : i ? rs(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1595
+ rs(0, h("RendererApi"))
1596
+ ], le);
1597
+ var os = Object.getOwnPropertyDescriptor, ns = (t, e, s, i) => {
1598
+ for (var r = i > 1 ? void 0 : i ? os(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1599
1599
  (n = t[o]) && (r = n(r) || r);
1600
1600
  return r;
1601
- }, Ae = (t, e) => (s, i) => e(s, i, t);
1602
- let le = class {
1601
+ }, Re = (t, e) => (s, i) => e(s, i, t);
1602
+ let ce = class {
1603
1603
  constructor(t, e) {
1604
1604
  this._api = t, this._store = e;
1605
1605
  }
1606
1606
  /** Режим редактирования сцены */
1607
- mode = V.DeleteFigure;
1607
+ mode = N.DeleteFigure;
1608
1608
  /** Последняя удаленная фигура, сохраняем для отката через `ctrl + z` */
1609
1609
  _lastDeletedMesh = null;
1610
1610
  handle() {
1611
1611
  const t = this._store.getSelectedObject();
1612
- lt(t) && (this._api.removeMesh(t), this._store.setSelectedObject(null), this._lastDeletedMesh = t);
1612
+ ct(t) && (this._api.removeMesh(t), this._store.setSelectedObject(null), this._lastDeletedMesh = t);
1613
1613
  }
1614
1614
  /** Срабатывает только на `ctrl + z`. */
1615
1615
  rollback() {
@@ -1620,17 +1620,17 @@ let le = class {
1620
1620
  this._lastDeletedMesh = null;
1621
1621
  }
1622
1622
  };
1623
- le = os([
1623
+ ce = ns([
1624
1624
  u(),
1625
- Ae(0, h("RendererApi")),
1626
- Ae(1, h("IEditorStore"))
1627
- ], le);
1628
- var ns = Object.getOwnPropertyDescriptor, as = (t, e, s, i) => {
1629
- for (var r = i > 1 ? void 0 : i ? ns(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1625
+ Re(0, h("RendererApi")),
1626
+ Re(1, h("IEditorStore"))
1627
+ ], ce);
1628
+ var as = Object.getOwnPropertyDescriptor, hs = (t, e, s, i) => {
1629
+ for (var r = i > 1 ? void 0 : i ? as(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1630
1630
  (n = t[o]) && (r = n(r) || r);
1631
1631
  return r;
1632
- }, hs = (t, e) => (s, i) => e(s, i, t);
1633
- let ce = class {
1632
+ }, ls = (t, e) => (s, i) => e(s, i, t);
1633
+ let de = class {
1634
1634
  constructor(t) {
1635
1635
  this._renderer = t;
1636
1636
  }
@@ -1689,16 +1689,16 @@ let ce = class {
1689
1689
  return this._renderer.onTransformChange(t);
1690
1690
  }
1691
1691
  };
1692
- ce = as([
1692
+ de = hs([
1693
1693
  u(),
1694
- hs(0, h("EditorRenderer"))
1695
- ], ce);
1696
- var ls = Object.getOwnPropertyDescriptor, cs = (t, e, s, i) => {
1697
- for (var r = i > 1 ? void 0 : i ? ls(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1694
+ ls(0, h("EditorRenderer"))
1695
+ ], de);
1696
+ var cs = Object.getOwnPropertyDescriptor, ds = (t, e, s, i) => {
1697
+ for (var r = i > 1 ? void 0 : i ? cs(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1698
1698
  (n = t[o]) && (r = n(r) || r);
1699
1699
  return r;
1700
- }, A = (t, e) => (s, i) => e(s, i, t);
1701
- let de = class {
1700
+ }, x = (t, e) => (s, i) => e(s, i, t);
1701
+ let _e = class {
1702
1702
  constructor(t, e, s, i, r, o) {
1703
1703
  this._displayManager = t, this._selectManager = e, this._toolManager = s, this._sceneManager = i, this._renderer = r, this._store = o, this.setSelectMode(v.Mesh), this.setToolMode(C.Translate);
1704
1704
  }
@@ -1740,27 +1740,27 @@ let de = class {
1740
1740
  this._displayManager.dispose(), this._selectManager.dispose(), this._renderer.dispose();
1741
1741
  }
1742
1742
  };
1743
- de = cs([
1743
+ _e = ds([
1744
1744
  u(),
1745
- A(0, h("IDisplayManager")),
1746
- A(1, h("ISelectManager")),
1747
- A(2, h("IToolManager")),
1748
- A(3, h("ISceneManager")),
1749
- A(4, h("EditorRenderer")),
1750
- A(5, h("IEditorStore"))
1751
- ], de);
1752
- var ds = Object.getOwnPropertyDescriptor, _s = (t, e, s, i) => {
1753
- for (var r = i > 1 ? void 0 : i ? ds(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1745
+ x(0, h("IDisplayManager")),
1746
+ x(1, h("ISelectManager")),
1747
+ x(2, h("IToolManager")),
1748
+ x(3, h("ISceneManager")),
1749
+ x(4, h("EditorRenderer")),
1750
+ x(5, h("IEditorStore"))
1751
+ ], _e);
1752
+ var _s = Object.getOwnPropertyDescriptor, ps = (t, e, s, i) => {
1753
+ for (var r = i > 1 ? void 0 : i ? _s(e, s) : e, o = t.length - 1, n; o >= 0; o--)
1754
1754
  (n = t[o]) && (r = n(r) || r);
1755
1755
  return r;
1756
1756
  };
1757
- let _e = class {
1757
+ let pe = class {
1758
1758
  /** Текущий режим выборки. */
1759
1759
  _selectMode = v.Mesh;
1760
1760
  /** Текущий выбранный инструмент. */
1761
1761
  _toolType = C.Translate;
1762
1762
  /** Выбранный режим отображения. */
1763
- _displayMode = k.Plane;
1763
+ _displayMode = V.Plane;
1764
1764
  /** Выбранный объект на сцене. */
1765
1765
  _selectedObject = null;
1766
1766
  /** Слушатели событий по изменению выбранного объекта. */
@@ -1768,7 +1768,7 @@ let _e = class {
1768
1768
  /** Слушатели событий трансформации выбранного объекта. */
1769
1769
  _transformListeners = /* @__PURE__ */ new Set();
1770
1770
  constructor() {
1771
- Qe(this, {}, { autoBind: !0 });
1771
+ Je(this, {}, { autoBind: !0 });
1772
1772
  }
1773
1773
  /** @inheritdoc */
1774
1774
  getSelectMode() {
@@ -1801,7 +1801,7 @@ let _e = class {
1801
1801
  /** @inheritdoc */
1802
1802
  getSelectionStats() {
1803
1803
  const t = this._selectedObject;
1804
- return t ? ct(t) : null;
1804
+ return t ? dt(t) : null;
1805
1805
  }
1806
1806
  /** @inheritdoc */
1807
1807
  setSelectedObject(t) {
@@ -1823,22 +1823,28 @@ let _e = class {
1823
1823
  for (const t of this._transformListeners) t();
1824
1824
  }
1825
1825
  };
1826
- _e = _s([
1826
+ pe = ps([
1827
1827
  u()
1828
- ], _e);
1829
- let Re = !1;
1830
- const d = Ke.createChildContainer();
1831
- function ps(t) {
1832
- return Re || (d.registerInstance("Canvas", t), d.registerSingleton("EventBus", X), d.registerSingleton("EditorRenderer", G), d.registerSingleton("RendererApi", ce), d.registerSingleton("IDisplayHandler", ee), d.registerSingleton("ISelectHandler", te), d.registerSingleton("ISelectHandler", se), d.registerSingleton("ISelectHandler", ae), d.registerSingleton("ISelectHandler", ie), d.registerSingleton("IToolHandler", re), d.registerSingleton("IToolHandler", oe), d.registerSingleton("IToolHandler", ne), d.registerSingleton("ISceneHandler", he), d.registerSingleton("ISceneHandler", le), d.registerSingleton("IDisplayManager", K), d.registerSingleton("ISelectManager", q), d.registerSingleton("IToolManager", Q), d.registerSingleton("ISceneManager", J), d.registerSingleton("EditorHub", de), d.registerSingleton("IEditorStore", _e), Re = !0), d;
1828
+ ], pe);
1829
+ let je = !1;
1830
+ const d = qe.createChildContainer();
1831
+ function us(t) {
1832
+ return je || (d.registerInstance("Canvas", t), d.registerSingleton("EventBus", G), d.registerSingleton("EditorRenderer", K), d.registerSingleton("RendererApi", de), d.registerSingleton("IDisplayHandler", te), d.registerSingleton("ISelectHandler", se), d.registerSingleton("ISelectHandler", ie), d.registerSingleton("ISelectHandler", he), d.registerSingleton("ISelectHandler", re), d.registerSingleton("IToolHandler", oe), d.registerSingleton("IToolHandler", ne), d.registerSingleton("IToolHandler", ae), d.registerSingleton("ISceneHandler", le), d.registerSingleton("ISceneHandler", ce), d.registerSingleton("IDisplayManager", q), d.registerSingleton("ISelectManager", Q), d.registerSingleton("IToolManager", J), d.registerSingleton("ISceneManager", ee), d.registerSingleton("EditorHub", _e), d.registerSingleton("IEditorStore", pe), je = !0), d;
1833
1833
  }
1834
- const ws = (t) => ps(t).resolve("EditorHub");
1834
+ let j = null;
1835
+ const Ss = (t) => (j || (j = us(t)), j.resolve("EditorHub")), Ps = () => {
1836
+ if (!j)
1837
+ throw new Error("EditorHub is not initialized. Call createAppHub(canvas) first.");
1838
+ return j.resolve("EditorHub");
1839
+ };
1835
1840
  export {
1836
- de as EditorHub,
1837
- G as EditorRenderer,
1838
- X as EventBus,
1839
- I as EventTopics,
1840
- Ss as ObjLoader,
1841
- Ms as PreviewRenderer,
1842
- Ie as Renderer,
1843
- ws as createAppHub
1841
+ _e as EditorHub,
1842
+ K as EditorRenderer,
1843
+ G as EventBus,
1844
+ H as EventTopics,
1845
+ ws as ObjLoader,
1846
+ Es as PreviewRenderer,
1847
+ He as Renderer,
1848
+ Ss as createAppHub,
1849
+ Ps as getAppHub
1844
1850
  };